ltmain.sh revision 4940c694
148e5ce07Smrg#! /bin/sh 248e5ce07Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 348e5ce07Smrg## by inline-source v2014-01-03.01 4c27c18e8Smrg 548e5ce07Smrg# libtool (GNU libtool) 2.4.6 648e5ce07Smrg# Provide generalized library-building support services. 7c27c18e8Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8c27c18e8Smrg 948e5ce07Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc. 10c27c18e8Smrg# This is free software; see the source for copying conditions. There is NO 11c27c18e8Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12c27c18e8Smrg 13c27c18e8Smrg# GNU Libtool is free software; you can redistribute it and/or modify 14c43cc173Smrg# it under the terms of the GNU General Public License as published by 15c43cc173Smrg# the Free Software Foundation; either version 2 of the License, or 16c43cc173Smrg# (at your option) any later version. 17c43cc173Smrg# 18c27c18e8Smrg# As a special exception to the GNU General Public License, 19c27c18e8Smrg# if you distribute this file as part of a program or library that 20c27c18e8Smrg# is built using GNU Libtool, you may include this file under the 21c27c18e8Smrg# same distribution terms that you use for the rest of that program. 22c27c18e8Smrg# 23c27c18e8Smrg# GNU Libtool is distributed in the hope that it will be useful, but 24c43cc173Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 25c43cc173Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26c43cc173Smrg# General Public License for more details. 27c43cc173Smrg# 28c43cc173Smrg# You should have received a copy of the GNU General Public License 2948e5ce07Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 3044584a44Smrg 3144584a44Smrg 320eb1301bSmrgPROGRAM=libtool 330eb1301bSmrgPACKAGE=libtool 3448e5ce07SmrgVERSION=2.4.6 3548e5ce07Smrgpackage_revision=2.4.6 3644584a44Smrg 3748e5ce07Smrg 3848e5ce07Smrg## ------ ## 3948e5ce07Smrg## Usage. ## 4048e5ce07Smrg## ------ ## 4148e5ce07Smrg 4248e5ce07Smrg# Run './libtool --help' for help with using this script from the 4348e5ce07Smrg# command line. 4448e5ce07Smrg 4548e5ce07Smrg 4648e5ce07Smrg## ------------------------------- ## 4748e5ce07Smrg## User overridable command paths. ## 4848e5ce07Smrg## ------------------------------- ## 4948e5ce07Smrg 5048e5ce07Smrg# After configure completes, it has a better idea of some of the 5148e5ce07Smrg# shell tools we need than the defaults used by the functions shared 5248e5ce07Smrg# with bootstrap, so set those here where they can still be over- 5348e5ce07Smrg# ridden by the user, but otherwise take precedence. 5448e5ce07Smrg 5548e5ce07Smrg: ${AUTOCONF="autoconf"} 5648e5ce07Smrg: ${AUTOMAKE="automake"} 5748e5ce07Smrg 5848e5ce07Smrg 5948e5ce07Smrg## -------------------------- ## 6048e5ce07Smrg## Source external libraries. ## 6148e5ce07Smrg## -------------------------- ## 6248e5ce07Smrg 6348e5ce07Smrg# Much of our low-level functionality needs to be sourced from external 6448e5ce07Smrg# libraries, which are installed to $pkgauxdir. 6548e5ce07Smrg 6648e5ce07Smrg# Set a version string for this script. 674940c694Smrgscriptversion=2015-10-04.22; # UTC 6848e5ce07Smrg 6948e5ce07Smrg# General shell script boiler plate, and helper functions. 7048e5ce07Smrg# Written by Gary V. Vaughan, 2004 7148e5ce07Smrg 7248e5ce07Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc. 7348e5ce07Smrg# This is free software; see the source for copying conditions. There is NO 7448e5ce07Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 7548e5ce07Smrg 7648e5ce07Smrg# This program is free software; you can redistribute it and/or modify 7748e5ce07Smrg# it under the terms of the GNU General Public License as published by 7848e5ce07Smrg# the Free Software Foundation; either version 3 of the License, or 7948e5ce07Smrg# (at your option) any later version. 8048e5ce07Smrg 8148e5ce07Smrg# As a special exception to the GNU General Public License, if you distribute 8248e5ce07Smrg# this file as part of a program or library that is built using GNU Libtool, 8348e5ce07Smrg# you may include this file under the same distribution terms that you use 8448e5ce07Smrg# for the rest of that program. 8548e5ce07Smrg 8648e5ce07Smrg# This program is distributed in the hope that it will be useful, 8748e5ce07Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 8848e5ce07Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 8948e5ce07Smrg# General Public License for more details. 9048e5ce07Smrg 9148e5ce07Smrg# You should have received a copy of the GNU General Public License 9248e5ce07Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 9348e5ce07Smrg 9448e5ce07Smrg# Please report bugs or propose patches to gary@gnu.org. 9548e5ce07Smrg 9648e5ce07Smrg 9748e5ce07Smrg## ------ ## 9848e5ce07Smrg## Usage. ## 9948e5ce07Smrg## ------ ## 10048e5ce07Smrg 10148e5ce07Smrg# Evaluate this file near the top of your script to gain access to 10248e5ce07Smrg# the functions and variables defined here: 10348e5ce07Smrg# 10448e5ce07Smrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 10548e5ce07Smrg# 10648e5ce07Smrg# If you need to override any of the default environment variable 10748e5ce07Smrg# settings, do that before evaluating this file. 10848e5ce07Smrg 10948e5ce07Smrg 11048e5ce07Smrg## -------------------- ## 11148e5ce07Smrg## Shell normalisation. ## 11248e5ce07Smrg## -------------------- ## 11348e5ce07Smrg 11448e5ce07Smrg# Some shells need a little help to be as Bourne compatible as possible. 11548e5ce07Smrg# Before doing anything else, make sure all that help has been provided! 11648e5ce07Smrg 11748e5ce07SmrgDUALCASE=1; export DUALCASE # for MKS sh 11848e5ce07Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 11921e67964Smrg emulate sh 12021e67964Smrg NULLCMD=: 12148e5ce07Smrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 12221e67964Smrg # is contrary to our usage. Disable this feature. 12321e67964Smrg alias -g '${1+"$@"}'='"$@"' 124c43cc173Smrg setopt NO_GLOB_SUBST 12521e67964Smrgelse 12648e5ce07Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 12744584a44Smrgfi 12844584a44Smrg 12948e5ce07Smrg# NLS nuisances: We save the old values in case they are required later. 13048e5ce07Smrg_G_user_locale= 13148e5ce07Smrg_G_safe_locale= 13248e5ce07Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1330eb1301bSmrgdo 13448e5ce07Smrg eval "if test set = \"\${$_G_var+set}\"; then 13548e5ce07Smrg save_$_G_var=\$$_G_var 13648e5ce07Smrg $_G_var=C 13748e5ce07Smrg export $_G_var 13848e5ce07Smrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 13948e5ce07Smrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 1400eb1301bSmrg fi" 1410eb1301bSmrgdone 14244584a44Smrg 14348e5ce07Smrg# CDPATH. 14448e5ce07Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 14544584a44Smrg 14648e5ce07Smrg# Make sure IFS has a sensible default 14748e5ce07Smrgsp=' ' 14848e5ce07Smrgnl=' 14948e5ce07Smrg' 15048e5ce07SmrgIFS="$sp $nl" 15148e5ce07Smrg 15248e5ce07Smrg# There are apparently some retarded systems that use ';' as a PATH separator! 15348e5ce07Smrgif test "${PATH_SEPARATOR+set}" != set; then 15448e5ce07Smrg PATH_SEPARATOR=: 15548e5ce07Smrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 15648e5ce07Smrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 15748e5ce07Smrg PATH_SEPARATOR=';' 15848e5ce07Smrg } 15948e5ce07Smrgfi 16044584a44Smrg 16144584a44Smrg 16244584a44Smrg 16348e5ce07Smrg## ------------------------- ## 16448e5ce07Smrg## Locate command utilities. ## 16548e5ce07Smrg## ------------------------- ## 16648e5ce07Smrg 16748e5ce07Smrg 16848e5ce07Smrg# func_executable_p FILE 16948e5ce07Smrg# ---------------------- 17048e5ce07Smrg# Check that FILE is an executable regular file. 17148e5ce07Smrgfunc_executable_p () 17248e5ce07Smrg{ 17348e5ce07Smrg test -f "$1" && test -x "$1" 17448e5ce07Smrg} 17548e5ce07Smrg 17648e5ce07Smrg 17748e5ce07Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 17848e5ce07Smrg# -------------------------------------------- 17948e5ce07Smrg# Search for either a program that responds to --version with output 18048e5ce07Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 18148e5ce07Smrg# trying all the directories in PATH with each of the elements of 18248e5ce07Smrg# PROGS_LIST. 18348e5ce07Smrg# 18448e5ce07Smrg# CHECK_FUNC should accept the path to a candidate program, and 18548e5ce07Smrg# set $func_check_prog_result if it truncates its output less than 18648e5ce07Smrg# $_G_path_prog_max characters. 18748e5ce07Smrgfunc_path_progs () 18848e5ce07Smrg{ 18948e5ce07Smrg _G_progs_list=$1 19048e5ce07Smrg _G_check_func=$2 19148e5ce07Smrg _G_PATH=${3-"$PATH"} 19248e5ce07Smrg 19348e5ce07Smrg _G_path_prog_max=0 19448e5ce07Smrg _G_path_prog_found=false 19548e5ce07Smrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 19648e5ce07Smrg for _G_dir in $_G_PATH; do 19748e5ce07Smrg IFS=$_G_save_IFS 19848e5ce07Smrg test -z "$_G_dir" && _G_dir=. 19948e5ce07Smrg for _G_prog_name in $_G_progs_list; do 20048e5ce07Smrg for _exeext in '' .EXE; do 20148e5ce07Smrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 20248e5ce07Smrg func_executable_p "$_G_path_prog" || continue 20348e5ce07Smrg case `"$_G_path_prog" --version 2>&1` in 20448e5ce07Smrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 20548e5ce07Smrg *) $_G_check_func $_G_path_prog 20648e5ce07Smrg func_path_progs_result=$func_check_prog_result 20748e5ce07Smrg ;; 20848e5ce07Smrg esac 20948e5ce07Smrg $_G_path_prog_found && break 3 21048e5ce07Smrg done 21148e5ce07Smrg done 21248e5ce07Smrg done 21348e5ce07Smrg IFS=$_G_save_IFS 21448e5ce07Smrg test -z "$func_path_progs_result" && { 21548e5ce07Smrg echo "no acceptable sed could be found in \$PATH" >&2 21648e5ce07Smrg exit 1 21748e5ce07Smrg } 21848e5ce07Smrg} 21948e5ce07Smrg 22048e5ce07Smrg 22148e5ce07Smrg# We want to be able to use the functions in this file before configure 22248e5ce07Smrg# has figured out where the best binaries are kept, which means we have 22348e5ce07Smrg# to search for them ourselves - except when the results are already set 22448e5ce07Smrg# where we skip the searches. 22548e5ce07Smrg 22648e5ce07Smrg# Unless the user overrides by setting SED, search the path for either GNU 22748e5ce07Smrg# sed, or the sed that truncates its output the least. 22848e5ce07Smrgtest -z "$SED" && { 22948e5ce07Smrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 23048e5ce07Smrg for _G_i in 1 2 3 4 5 6 7; do 23148e5ce07Smrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 23248e5ce07Smrg done 23348e5ce07Smrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 23448e5ce07Smrg _G_sed_script= 23548e5ce07Smrg 23648e5ce07Smrg func_check_prog_sed () 23748e5ce07Smrg { 23848e5ce07Smrg _G_path_prog=$1 23948e5ce07Smrg 24048e5ce07Smrg _G_count=0 24148e5ce07Smrg printf 0123456789 >conftest.in 24248e5ce07Smrg while : 24348e5ce07Smrg do 24448e5ce07Smrg cat conftest.in conftest.in >conftest.tmp 24548e5ce07Smrg mv conftest.tmp conftest.in 24648e5ce07Smrg cp conftest.in conftest.nl 24748e5ce07Smrg echo '' >> conftest.nl 24848e5ce07Smrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 24948e5ce07Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 25048e5ce07Smrg _G_count=`expr $_G_count + 1` 25148e5ce07Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 25248e5ce07Smrg # Best one so far, save it but keep looking for a better one 25348e5ce07Smrg func_check_prog_result=$_G_path_prog 25448e5ce07Smrg _G_path_prog_max=$_G_count 25548e5ce07Smrg fi 25648e5ce07Smrg # 10*(2^10) chars as input seems more than enough 25748e5ce07Smrg test 10 -lt "$_G_count" && break 25848e5ce07Smrg done 25948e5ce07Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 26048e5ce07Smrg } 26148e5ce07Smrg 26248e5ce07Smrg func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 26348e5ce07Smrg rm -f conftest.sed 26448e5ce07Smrg SED=$func_path_progs_result 26548e5ce07Smrg} 26648e5ce07Smrg 26748e5ce07Smrg 26848e5ce07Smrg# Unless the user overrides by setting GREP, search the path for either GNU 26948e5ce07Smrg# grep, or the grep that truncates its output the least. 27048e5ce07Smrgtest -z "$GREP" && { 27148e5ce07Smrg func_check_prog_grep () 27248e5ce07Smrg { 27348e5ce07Smrg _G_path_prog=$1 27448e5ce07Smrg 27548e5ce07Smrg _G_count=0 27648e5ce07Smrg _G_path_prog_max=0 27748e5ce07Smrg printf 0123456789 >conftest.in 27848e5ce07Smrg while : 27948e5ce07Smrg do 28048e5ce07Smrg cat conftest.in conftest.in >conftest.tmp 28148e5ce07Smrg mv conftest.tmp conftest.in 28248e5ce07Smrg cp conftest.in conftest.nl 28348e5ce07Smrg echo 'GREP' >> conftest.nl 28448e5ce07Smrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 28548e5ce07Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 28648e5ce07Smrg _G_count=`expr $_G_count + 1` 28748e5ce07Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 28848e5ce07Smrg # Best one so far, save it but keep looking for a better one 28948e5ce07Smrg func_check_prog_result=$_G_path_prog 29048e5ce07Smrg _G_path_prog_max=$_G_count 29148e5ce07Smrg fi 29248e5ce07Smrg # 10*(2^10) chars as input seems more than enough 29348e5ce07Smrg test 10 -lt "$_G_count" && break 29448e5ce07Smrg done 29548e5ce07Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 29648e5ce07Smrg } 29748e5ce07Smrg 29848e5ce07Smrg func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 29948e5ce07Smrg GREP=$func_path_progs_result 30048e5ce07Smrg} 30148e5ce07Smrg 30248e5ce07Smrg 30348e5ce07Smrg## ------------------------------- ## 30448e5ce07Smrg## User overridable command paths. ## 30548e5ce07Smrg## ------------------------------- ## 30648e5ce07Smrg 30748e5ce07Smrg# All uppercase variable names are used for environment variables. These 30848e5ce07Smrg# variables can be overridden by the user before calling a script that 30948e5ce07Smrg# uses them if a suitable command of that name is not already available 31048e5ce07Smrg# in the command search PATH. 311c27c18e8Smrg 312c27c18e8Smrg: ${CP="cp -f"} 31348e5ce07Smrg: ${ECHO="printf %s\n"} 31448e5ce07Smrg: ${EGREP="$GREP -E"} 31548e5ce07Smrg: ${FGREP="$GREP -F"} 31648e5ce07Smrg: ${LN_S="ln -s"} 317c27c18e8Smrg: ${MAKE="make"} 318c27c18e8Smrg: ${MKDIR="mkdir"} 319c27c18e8Smrg: ${MV="mv -f"} 320c27c18e8Smrg: ${RM="rm -f"} 321c27c18e8Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 322b789ec8aSmrg 323b789ec8aSmrg 32448e5ce07Smrg## -------------------- ## 32548e5ce07Smrg## Useful sed snippets. ## 32648e5ce07Smrg## -------------------- ## 327b789ec8aSmrg 32848e5ce07Smrgsed_dirname='s|/[^/]*$||' 32948e5ce07Smrgsed_basename='s|^.*/||' 330b789ec8aSmrg 33148e5ce07Smrg# Sed substitution that helps us do robust quoting. It backslashifies 33248e5ce07Smrg# metacharacters that are still active within double-quoted strings. 33348e5ce07Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 334b789ec8aSmrg 33548e5ce07Smrg# Same as above, but do not quote variable references. 33648e5ce07Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 337c43cc173Smrg 33848e5ce07Smrg# Sed substitution that turns a string into a regex matching for the 33948e5ce07Smrg# string literally. 34048e5ce07Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 341c27c18e8Smrg 34248e5ce07Smrg# Sed substitution that converts a w32 file name or path 34348e5ce07Smrg# that contains forward slashes, into one that contains 34448e5ce07Smrg# (escaped) backslashes. A very naive implementation. 34548e5ce07Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 34648e5ce07Smrg 34748e5ce07Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 34848e5ce07Smrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 34948e5ce07Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from 35048e5ce07Smrg# expansion. Since each input '\' is now two '\'s, look for any number 35148e5ce07Smrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 35248e5ce07Smrg_G_bs='\\' 35348e5ce07Smrg_G_bs2='\\\\' 35448e5ce07Smrg_G_bs4='\\\\\\\\' 35548e5ce07Smrg_G_dollar='\$' 35648e5ce07Smrgsed_double_backslash="\ 35748e5ce07Smrg s/$_G_bs4/&\\ 35848e5ce07Smrg/g 35948e5ce07Smrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 36048e5ce07Smrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 36148e5ce07Smrg s/\n//g" 36237eb1ca1Smrg 36337eb1ca1Smrg 36448e5ce07Smrg## ----------------- ## 36548e5ce07Smrg## Global variables. ## 36648e5ce07Smrg## ----------------- ## 36737eb1ca1Smrg 36848e5ce07Smrg# Except for the global variables explicitly listed below, the following 36948e5ce07Smrg# functions in the '^func_' namespace, and the '^require_' namespace 37048e5ce07Smrg# variables initialised in the 'Resource management' section, sourcing 37148e5ce07Smrg# this file will not pollute your global namespace with anything 37248e5ce07Smrg# else. There's no portable way to scope variables in Bourne shell 37348e5ce07Smrg# though, so actually running these functions will sometimes place 37448e5ce07Smrg# results into a variable named after the function, and often use 37548e5ce07Smrg# temporary variables in the '^_G_' namespace. If you are careful to 37648e5ce07Smrg# avoid using those namespaces casually in your sourcing script, things 37748e5ce07Smrg# should continue to work as you expect. And, of course, you can freely 37848e5ce07Smrg# overwrite any of the functions or variables defined here before 37948e5ce07Smrg# calling anything to customize them. 38037eb1ca1Smrg 38148e5ce07SmrgEXIT_SUCCESS=0 38248e5ce07SmrgEXIT_FAILURE=1 38348e5ce07SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 38448e5ce07SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 3850eb1301bSmrg 38648e5ce07Smrg# Allow overriding, eg assuming that you follow the convention of 38748e5ce07Smrg# putting '$debug_cmd' at the start of all your functions, you can get 38848e5ce07Smrg# bash to show function call trace with: 38948e5ce07Smrg# 39048e5ce07Smrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 39148e5ce07Smrgdebug_cmd=${debug_cmd-":"} 39248e5ce07Smrgexit_cmd=: 3930eb1301bSmrg 39448e5ce07Smrg# By convention, finish your script with: 39548e5ce07Smrg# 39648e5ce07Smrg# exit $exit_status 39748e5ce07Smrg# 39848e5ce07Smrg# so that you can set exit_status to non-zero if you want to indicate 39948e5ce07Smrg# something went wrong during execution without actually bailing out at 40048e5ce07Smrg# the point of failure. 40148e5ce07Smrgexit_status=$EXIT_SUCCESS 4020eb1301bSmrg 40348e5ce07Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 40448e5ce07Smrg# is ksh but when the shell is invoked as "sh" and the current value of 40548e5ce07Smrg# the _XPG environment variable is not equal to 1 (one), the special 40648e5ce07Smrg# positional parameter $0, within a function call, is the name of the 40748e5ce07Smrg# function. 40848e5ce07Smrgprogpath=$0 409c27c18e8Smrg 41048e5ce07Smrg# The name of this program. 41148e5ce07Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 412c27c18e8Smrg 41348e5ce07Smrg# Make sure we have an absolute progpath for reexecution: 414c27c18e8Smrgcase $progpath in 415c27c18e8Smrg [\\/]*|[A-Za-z]:\\*) ;; 416c27c18e8Smrg *[\\/]*) 41748e5ce07Smrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 418c27c18e8Smrg progdir=`cd "$progdir" && pwd` 41948e5ce07Smrg progpath=$progdir/$progname 420c27c18e8Smrg ;; 421c27c18e8Smrg *) 42248e5ce07Smrg _G_IFS=$IFS 423f1ee322dSmrg IFS=${PATH_SEPARATOR-:} 424c27c18e8Smrg for progdir in $PATH; do 42548e5ce07Smrg IFS=$_G_IFS 426c27c18e8Smrg test -x "$progdir/$progname" && break 427c27c18e8Smrg done 42848e5ce07Smrg IFS=$_G_IFS 429c27c18e8Smrg test -n "$progdir" || progdir=`pwd` 43048e5ce07Smrg progpath=$progdir/$progname 431c27c18e8Smrg ;; 432c27c18e8Smrgesac 433c27c18e8Smrg 434c27c18e8Smrg 43548e5ce07Smrg## ----------------- ## 43648e5ce07Smrg## Standard options. ## 43748e5ce07Smrg## ----------------- ## 438b789ec8aSmrg 43948e5ce07Smrg# The following options affect the operation of the functions defined 44048e5ce07Smrg# below, and should be set appropriately depending on run-time para- 44148e5ce07Smrg# meters passed on the command line. 442c27c18e8Smrg 443c27c18e8Smrgopt_dry_run=false 444c27c18e8Smrgopt_quiet=false 445c27c18e8Smrgopt_verbose=false 446c27c18e8Smrg 44748e5ce07Smrg# Categories 'all' and 'none' are always available. Append any others 44848e5ce07Smrg# you will pass as the first argument to func_warning from your own 44948e5ce07Smrg# code. 45048e5ce07Smrgwarning_categories= 451c27c18e8Smrg 45248e5ce07Smrg# By default, display warnings according to 'opt_warning_types'. Set 45348e5ce07Smrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 45448e5ce07Smrg# treat the next displayed warning as a fatal error. 45548e5ce07Smrgwarning_func=func_warn_and_continue 456c27c18e8Smrg 45748e5ce07Smrg# Set to 'all' to display all warnings, 'none' to suppress all 45848e5ce07Smrg# warnings, or a space delimited list of some subset of 45948e5ce07Smrg# 'warning_categories' to display only the listed warnings. 46048e5ce07Smrgopt_warning_types=all 461c27c18e8Smrg 46237eb1ca1Smrg 46348e5ce07Smrg## -------------------- ## 46448e5ce07Smrg## Resource management. ## 46548e5ce07Smrg## -------------------- ## 466c27c18e8Smrg 46748e5ce07Smrg# This section contains definitions for functions that each ensure a 46848e5ce07Smrg# particular resource (a file, or a non-empty configuration variable for 46948e5ce07Smrg# example) is available, and if appropriate to extract default values 47048e5ce07Smrg# from pertinent package files. Call them using their associated 47148e5ce07Smrg# 'require_*' variable to ensure that they are executed, at most, once. 47248e5ce07Smrg# 47348e5ce07Smrg# It's entirely deliberate that calling these functions can set 47448e5ce07Smrg# variables that don't obey the namespace limitations obeyed by the rest 47548e5ce07Smrg# of this file, in order that that they be as useful as possible to 47648e5ce07Smrg# callers. 477c27c18e8Smrg 478c27c18e8Smrg 47948e5ce07Smrg# require_term_colors 48048e5ce07Smrg# ------------------- 48148e5ce07Smrg# Allow display of bold text on terminals that support it. 48248e5ce07Smrgrequire_term_colors=func_require_term_colors 48348e5ce07Smrgfunc_require_term_colors () 484c27c18e8Smrg{ 48548e5ce07Smrg $debug_cmd 48648e5ce07Smrg 48748e5ce07Smrg test -t 1 && { 48848e5ce07Smrg # COLORTERM and USE_ANSI_COLORS environment variables take 48948e5ce07Smrg # precedence, because most terminfo databases neglect to describe 49048e5ce07Smrg # whether color sequences are supported. 49148e5ce07Smrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 49248e5ce07Smrg 49348e5ce07Smrg if test 1 = "$USE_ANSI_COLORS"; then 49448e5ce07Smrg # Standard ANSI escape sequences 49548e5ce07Smrg tc_reset='[0m' 49648e5ce07Smrg tc_bold='[1m'; tc_standout='[7m' 49748e5ce07Smrg tc_red='[31m'; tc_green='[32m' 49848e5ce07Smrg tc_blue='[34m'; tc_cyan='[36m' 49948e5ce07Smrg else 50048e5ce07Smrg # Otherwise trust the terminfo database after all. 50148e5ce07Smrg test -n "`tput sgr0 2>/dev/null`" && { 50248e5ce07Smrg tc_reset=`tput sgr0` 50348e5ce07Smrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 50448e5ce07Smrg tc_standout=$tc_bold 50548e5ce07Smrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 50648e5ce07Smrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 50748e5ce07Smrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 50848e5ce07Smrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 50948e5ce07Smrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 51048e5ce07Smrg } 51148e5ce07Smrg fi 51248e5ce07Smrg } 513c27c18e8Smrg 51448e5ce07Smrg require_term_colors=: 515c27c18e8Smrg} 516c27c18e8Smrg 517c27c18e8Smrg 51848e5ce07Smrg## ----------------- ## 51948e5ce07Smrg## Function library. ## 52048e5ce07Smrg## ----------------- ## 52148e5ce07Smrg 52248e5ce07Smrg# This section contains a variety of useful functions to call in your 52348e5ce07Smrg# scripts. Take note of the portable wrappers for features provided by 52448e5ce07Smrg# some modern shells, which will fall back to slower equivalents on 52548e5ce07Smrg# less featureful shells. 52648e5ce07Smrg 52748e5ce07Smrg 52848e5ce07Smrg# func_append VAR VALUE 52948e5ce07Smrg# --------------------- 53048e5ce07Smrg# Append VALUE onto the existing contents of VAR. 53148e5ce07Smrg 53248e5ce07Smrg # We should try to minimise forks, especially on Windows where they are 53348e5ce07Smrg # unreasonably slow, so skip the feature probes when bash or zsh are 53448e5ce07Smrg # being used: 53548e5ce07Smrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 53648e5ce07Smrg : ${_G_HAVE_ARITH_OP="yes"} 53748e5ce07Smrg : ${_G_HAVE_XSI_OPS="yes"} 53848e5ce07Smrg # The += operator was introduced in bash 3.1 53948e5ce07Smrg case $BASH_VERSION in 54048e5ce07Smrg [12].* | 3.0 | 3.0*) ;; 54148e5ce07Smrg *) 54248e5ce07Smrg : ${_G_HAVE_PLUSEQ_OP="yes"} 54348e5ce07Smrg ;; 54448e5ce07Smrg esac 54548e5ce07Smrg fi 54648e5ce07Smrg 54748e5ce07Smrg # _G_HAVE_PLUSEQ_OP 54848e5ce07Smrg # Can be empty, in which case the shell is probed, "yes" if += is 54948e5ce07Smrg # useable or anything else if it does not work. 55048e5ce07Smrg test -z "$_G_HAVE_PLUSEQ_OP" \ 55148e5ce07Smrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 55248e5ce07Smrg && _G_HAVE_PLUSEQ_OP=yes 55348e5ce07Smrg 55448e5ce07Smrgif test yes = "$_G_HAVE_PLUSEQ_OP" 55548e5ce07Smrgthen 55648e5ce07Smrg # This is an XSI compatible shell, allowing a faster implementation... 55748e5ce07Smrg eval 'func_append () 55848e5ce07Smrg { 55948e5ce07Smrg $debug_cmd 56048e5ce07Smrg 56148e5ce07Smrg eval "$1+=\$2" 56248e5ce07Smrg }' 56348e5ce07Smrgelse 56448e5ce07Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 56548e5ce07Smrg func_append () 56648e5ce07Smrg { 56748e5ce07Smrg $debug_cmd 56848e5ce07Smrg 56948e5ce07Smrg eval "$1=\$$1\$2" 57048e5ce07Smrg } 57148e5ce07Smrgfi 57248e5ce07Smrg 57348e5ce07Smrg 57448e5ce07Smrg# func_append_quoted VAR VALUE 57548e5ce07Smrg# ---------------------------- 57648e5ce07Smrg# Quote VALUE and append to the end of shell variable VAR, separated 57748e5ce07Smrg# by a space. 57848e5ce07Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 57948e5ce07Smrg eval 'func_append_quoted () 58048e5ce07Smrg { 58148e5ce07Smrg $debug_cmd 58248e5ce07Smrg 58348e5ce07Smrg func_quote_for_eval "$2" 58448e5ce07Smrg eval "$1+=\\ \$func_quote_for_eval_result" 58548e5ce07Smrg }' 58648e5ce07Smrgelse 58748e5ce07Smrg func_append_quoted () 58848e5ce07Smrg { 58948e5ce07Smrg $debug_cmd 59048e5ce07Smrg 59148e5ce07Smrg func_quote_for_eval "$2" 59248e5ce07Smrg eval "$1=\$$1\\ \$func_quote_for_eval_result" 59348e5ce07Smrg } 59448e5ce07Smrgfi 59548e5ce07Smrg 59648e5ce07Smrg 59748e5ce07Smrg# func_append_uniq VAR VALUE 59848e5ce07Smrg# -------------------------- 59948e5ce07Smrg# Append unique VALUE onto the existing contents of VAR, assuming 60048e5ce07Smrg# entries are delimited by the first character of VALUE. For example: 60148e5ce07Smrg# 60248e5ce07Smrg# func_append_uniq options " --another-option option-argument" 60348e5ce07Smrg# 60448e5ce07Smrg# will only append to $options if " --another-option option-argument " 60548e5ce07Smrg# is not already present somewhere in $options already (note spaces at 60648e5ce07Smrg# each end implied by leading space in second argument). 60748e5ce07Smrgfunc_append_uniq () 60848e5ce07Smrg{ 60948e5ce07Smrg $debug_cmd 61048e5ce07Smrg 61148e5ce07Smrg eval _G_current_value='`$ECHO $'$1'`' 61248e5ce07Smrg _G_delim=`expr "$2" : '\(.\)'` 61348e5ce07Smrg 61448e5ce07Smrg case $_G_delim$_G_current_value$_G_delim in 61548e5ce07Smrg *"$2$_G_delim"*) ;; 61648e5ce07Smrg *) func_append "$@" ;; 61748e5ce07Smrg esac 61848e5ce07Smrg} 61948e5ce07Smrg 62048e5ce07Smrg 62148e5ce07Smrg# func_arith TERM... 62248e5ce07Smrg# ------------------ 62348e5ce07Smrg# Set func_arith_result to the result of evaluating TERMs. 62448e5ce07Smrg test -z "$_G_HAVE_ARITH_OP" \ 62548e5ce07Smrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 62648e5ce07Smrg && _G_HAVE_ARITH_OP=yes 62748e5ce07Smrg 62848e5ce07Smrgif test yes = "$_G_HAVE_ARITH_OP"; then 62948e5ce07Smrg eval 'func_arith () 63048e5ce07Smrg { 63148e5ce07Smrg $debug_cmd 63248e5ce07Smrg 63348e5ce07Smrg func_arith_result=$(( $* )) 63448e5ce07Smrg }' 63548e5ce07Smrgelse 63648e5ce07Smrg func_arith () 63748e5ce07Smrg { 63848e5ce07Smrg $debug_cmd 63948e5ce07Smrg 64048e5ce07Smrg func_arith_result=`expr "$@"` 64148e5ce07Smrg } 64248e5ce07Smrgfi 64348e5ce07Smrg 64448e5ce07Smrg 64548e5ce07Smrg# func_basename FILE 64648e5ce07Smrg# ------------------ 64748e5ce07Smrg# Set func_basename_result to FILE with everything up to and including 64848e5ce07Smrg# the last / stripped. 64948e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 65048e5ce07Smrg # If this shell supports suffix pattern removal, then use it to avoid 65148e5ce07Smrg # forking. Hide the definitions single quotes in case the shell chokes 65248e5ce07Smrg # on unsupported syntax... 65348e5ce07Smrg _b='func_basename_result=${1##*/}' 65448e5ce07Smrg _d='case $1 in 65548e5ce07Smrg */*) func_dirname_result=${1%/*}$2 ;; 65648e5ce07Smrg * ) func_dirname_result=$3 ;; 65748e5ce07Smrg esac' 65848e5ce07Smrg 65948e5ce07Smrgelse 66048e5ce07Smrg # ...otherwise fall back to using sed. 66148e5ce07Smrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 66248e5ce07Smrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 66348e5ce07Smrg if test "X$func_dirname_result" = "X$1"; then 66448e5ce07Smrg func_dirname_result=$3 66548e5ce07Smrg else 66648e5ce07Smrg func_append func_dirname_result "$2" 66748e5ce07Smrg fi' 66848e5ce07Smrgfi 66948e5ce07Smrg 67048e5ce07Smrgeval 'func_basename () 67148e5ce07Smrg{ 67248e5ce07Smrg $debug_cmd 67348e5ce07Smrg 67448e5ce07Smrg '"$_b"' 67548e5ce07Smrg}' 67648e5ce07Smrg 67748e5ce07Smrg 67848e5ce07Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 67948e5ce07Smrg# ------------------------------------------- 68048e5ce07Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 68148e5ce07Smrg# otherwise set result to NONDIR_REPLACEMENT. 68248e5ce07Smrgeval 'func_dirname () 68348e5ce07Smrg{ 68448e5ce07Smrg $debug_cmd 68548e5ce07Smrg 68648e5ce07Smrg '"$_d"' 68748e5ce07Smrg}' 68848e5ce07Smrg 68948e5ce07Smrg 69048e5ce07Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 69148e5ce07Smrg# -------------------------------------------------------- 69248e5ce07Smrg# Perform func_basename and func_dirname in a single function 69348e5ce07Smrg# call: 69448e5ce07Smrg# dirname: Compute the dirname of FILE. If nonempty, 69548e5ce07Smrg# add APPEND to the result, otherwise set result 69648e5ce07Smrg# to NONDIR_REPLACEMENT. 69748e5ce07Smrg# value returned in "$func_dirname_result" 69848e5ce07Smrg# basename: Compute filename of FILE. 69948e5ce07Smrg# value retuned in "$func_basename_result" 70048e5ce07Smrg# For efficiency, we do not delegate to the functions above but instead 70148e5ce07Smrg# duplicate the functionality here. 70248e5ce07Smrgeval 'func_dirname_and_basename () 70348e5ce07Smrg{ 70448e5ce07Smrg $debug_cmd 70548e5ce07Smrg 70648e5ce07Smrg '"$_b"' 70748e5ce07Smrg '"$_d"' 70848e5ce07Smrg}' 70948e5ce07Smrg 71048e5ce07Smrg 71148e5ce07Smrg# func_echo ARG... 71248e5ce07Smrg# ---------------- 71348e5ce07Smrg# Echo program name prefixed message. 71448e5ce07Smrgfunc_echo () 71548e5ce07Smrg{ 71648e5ce07Smrg $debug_cmd 71748e5ce07Smrg 71848e5ce07Smrg _G_message=$* 71948e5ce07Smrg 72048e5ce07Smrg func_echo_IFS=$IFS 72148e5ce07Smrg IFS=$nl 72248e5ce07Smrg for _G_line in $_G_message; do 72348e5ce07Smrg IFS=$func_echo_IFS 72448e5ce07Smrg $ECHO "$progname: $_G_line" 72548e5ce07Smrg done 72648e5ce07Smrg IFS=$func_echo_IFS 72748e5ce07Smrg} 72848e5ce07Smrg 72948e5ce07Smrg 73048e5ce07Smrg# func_echo_all ARG... 73148e5ce07Smrg# -------------------- 73248e5ce07Smrg# Invoke $ECHO with all args, space-separated. 73348e5ce07Smrgfunc_echo_all () 73448e5ce07Smrg{ 73548e5ce07Smrg $ECHO "$*" 73648e5ce07Smrg} 73748e5ce07Smrg 73848e5ce07Smrg 73948e5ce07Smrg# func_echo_infix_1 INFIX ARG... 74048e5ce07Smrg# ------------------------------ 74148e5ce07Smrg# Echo program name, followed by INFIX on the first line, with any 74248e5ce07Smrg# additional lines not showing INFIX. 74348e5ce07Smrgfunc_echo_infix_1 () 74448e5ce07Smrg{ 74548e5ce07Smrg $debug_cmd 74648e5ce07Smrg 74748e5ce07Smrg $require_term_colors 74848e5ce07Smrg 74948e5ce07Smrg _G_infix=$1; shift 75048e5ce07Smrg _G_indent=$_G_infix 75148e5ce07Smrg _G_prefix="$progname: $_G_infix: " 75248e5ce07Smrg _G_message=$* 75348e5ce07Smrg 75448e5ce07Smrg # Strip color escape sequences before counting printable length 75548e5ce07Smrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 75648e5ce07Smrg do 75748e5ce07Smrg test -n "$_G_tc" && { 75848e5ce07Smrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 75948e5ce07Smrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 76048e5ce07Smrg } 76148e5ce07Smrg done 76248e5ce07Smrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 76348e5ce07Smrg 76448e5ce07Smrg func_echo_infix_1_IFS=$IFS 76548e5ce07Smrg IFS=$nl 76648e5ce07Smrg for _G_line in $_G_message; do 76748e5ce07Smrg IFS=$func_echo_infix_1_IFS 76848e5ce07Smrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 76948e5ce07Smrg _G_prefix=$_G_indent 77048e5ce07Smrg done 77148e5ce07Smrg IFS=$func_echo_infix_1_IFS 77248e5ce07Smrg} 77348e5ce07Smrg 77448e5ce07Smrg 77548e5ce07Smrg# func_error ARG... 77648e5ce07Smrg# ----------------- 77748e5ce07Smrg# Echo program name prefixed message to standard error. 77848e5ce07Smrgfunc_error () 77948e5ce07Smrg{ 78048e5ce07Smrg $debug_cmd 78148e5ce07Smrg 78248e5ce07Smrg $require_term_colors 78348e5ce07Smrg 78448e5ce07Smrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 78548e5ce07Smrg} 78648e5ce07Smrg 78748e5ce07Smrg 78848e5ce07Smrg# func_fatal_error ARG... 78948e5ce07Smrg# ----------------------- 79048e5ce07Smrg# Echo program name prefixed message to standard error, and exit. 79148e5ce07Smrgfunc_fatal_error () 79248e5ce07Smrg{ 79348e5ce07Smrg $debug_cmd 79448e5ce07Smrg 79548e5ce07Smrg func_error "$*" 79648e5ce07Smrg exit $EXIT_FAILURE 79748e5ce07Smrg} 79848e5ce07Smrg 79948e5ce07Smrg 80048e5ce07Smrg# func_grep EXPRESSION FILENAME 80148e5ce07Smrg# ----------------------------- 802c27c18e8Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 803c27c18e8Smrgfunc_grep () 804c27c18e8Smrg{ 80548e5ce07Smrg $debug_cmd 80648e5ce07Smrg 807c27c18e8Smrg $GREP "$1" "$2" >/dev/null 2>&1 808c27c18e8Smrg} 809c27c18e8Smrg 810c27c18e8Smrg 81148e5ce07Smrg# func_len STRING 81248e5ce07Smrg# --------------- 81348e5ce07Smrg# Set func_len_result to the length of STRING. STRING may not 81448e5ce07Smrg# start with a hyphen. 81548e5ce07Smrg test -z "$_G_HAVE_XSI_OPS" \ 81648e5ce07Smrg && (eval 'x=a/b/c; 81748e5ce07Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 81848e5ce07Smrg && _G_HAVE_XSI_OPS=yes 81948e5ce07Smrg 82048e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 82148e5ce07Smrg eval 'func_len () 82248e5ce07Smrg { 82348e5ce07Smrg $debug_cmd 82448e5ce07Smrg 82548e5ce07Smrg func_len_result=${#1} 82648e5ce07Smrg }' 82748e5ce07Smrgelse 82848e5ce07Smrg func_len () 82948e5ce07Smrg { 83048e5ce07Smrg $debug_cmd 83148e5ce07Smrg 83248e5ce07Smrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 83348e5ce07Smrg } 83448e5ce07Smrgfi 83548e5ce07Smrg 83648e5ce07Smrg 83748e5ce07Smrg# func_mkdir_p DIRECTORY-PATH 83848e5ce07Smrg# --------------------------- 839c27c18e8Smrg# Make sure the entire path to DIRECTORY-PATH is available. 840c27c18e8Smrgfunc_mkdir_p () 841c27c18e8Smrg{ 84248e5ce07Smrg $debug_cmd 84348e5ce07Smrg 84448e5ce07Smrg _G_directory_path=$1 84548e5ce07Smrg _G_dir_list= 846c27c18e8Smrg 84748e5ce07Smrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 84844584a44Smrg 84948e5ce07Smrg # Protect directory names starting with '-' 85048e5ce07Smrg case $_G_directory_path in 85148e5ce07Smrg -*) _G_directory_path=./$_G_directory_path ;; 852c27c18e8Smrg esac 853c27c18e8Smrg 854c27c18e8Smrg # While some portion of DIR does not yet exist... 85548e5ce07Smrg while test ! -d "$_G_directory_path"; do 856c27c18e8Smrg # ...make a list in topmost first order. Use a colon delimited 857c27c18e8Smrg # list incase some portion of path contains whitespace. 85848e5ce07Smrg _G_dir_list=$_G_directory_path:$_G_dir_list 859c27c18e8Smrg 860c27c18e8Smrg # If the last portion added has no slash in it, the list is done 86148e5ce07Smrg case $_G_directory_path in */*) ;; *) break ;; esac 862c27c18e8Smrg 863c27c18e8Smrg # ...otherwise throw away the child directory and loop 86448e5ce07Smrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 865c27c18e8Smrg done 86648e5ce07Smrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 867c27c18e8Smrg 86848e5ce07Smrg func_mkdir_p_IFS=$IFS; IFS=: 86948e5ce07Smrg for _G_dir in $_G_dir_list; do 87048e5ce07Smrg IFS=$func_mkdir_p_IFS 87148e5ce07Smrg # mkdir can fail with a 'File exist' error if two processes 872c27c18e8Smrg # try to create one of the directories concurrently. Don't 873c27c18e8Smrg # stop in that case! 87448e5ce07Smrg $MKDIR "$_G_dir" 2>/dev/null || : 875c27c18e8Smrg done 87648e5ce07Smrg IFS=$func_mkdir_p_IFS 877c27c18e8Smrg 878c27c18e8Smrg # Bail out if we (or some other process) failed to create a directory. 87948e5ce07Smrg test -d "$_G_directory_path" || \ 88048e5ce07Smrg func_fatal_error "Failed to create '$1'" 881c27c18e8Smrg fi 882c27c18e8Smrg} 883c43cc173Smrg 884c43cc173Smrg 88548e5ce07Smrg# func_mktempdir [BASENAME] 88648e5ce07Smrg# ------------------------- 887c43cc173Smrg# Make a temporary directory that won't clash with other running 888c43cc173Smrg# libtool processes, and avoids race conditions if possible. If 88948e5ce07Smrg# given, BASENAME is the basename for that directory. 890c43cc173Smrgfunc_mktempdir () 891c43cc173Smrg{ 89248e5ce07Smrg $debug_cmd 89348e5ce07Smrg 89448e5ce07Smrg _G_template=${TMPDIR-/tmp}/${1-$progname} 89544584a44Smrg 89648e5ce07Smrg if test : = "$opt_dry_run"; then 897c43cc173Smrg # Return a directory name, but don't create it in dry-run mode 89848e5ce07Smrg _G_tmpdir=$_G_template-$$ 899c43cc173Smrg else 900c43cc173Smrg 901c43cc173Smrg # If mktemp works, use that first and foremost 90248e5ce07Smrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 903c43cc173Smrg 90448e5ce07Smrg if test ! -d "$_G_tmpdir"; then 905c27c18e8Smrg # Failing that, at least try and use $RANDOM to avoid a race 90648e5ce07Smrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 907c43cc173Smrg 90848e5ce07Smrg func_mktempdir_umask=`umask` 909c27c18e8Smrg umask 0077 91048e5ce07Smrg $MKDIR "$_G_tmpdir" 91148e5ce07Smrg umask $func_mktempdir_umask 912c43cc173Smrg fi 913c43cc173Smrg 914c43cc173Smrg # If we're not in dry-run mode, bomb out on failure 91548e5ce07Smrg test -d "$_G_tmpdir" || \ 91648e5ce07Smrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 917c43cc173Smrg fi 918c43cc173Smrg 91948e5ce07Smrg $ECHO "$_G_tmpdir" 92044584a44Smrg} 92144584a44Smrg 92244584a44Smrg 92348e5ce07Smrg# func_normal_abspath PATH 92448e5ce07Smrg# ------------------------ 92548e5ce07Smrg# Remove doubled-up and trailing slashes, "." path components, 92648e5ce07Smrg# and cancel out any ".." path components in PATH after making 92748e5ce07Smrg# it an absolute path. 92848e5ce07Smrgfunc_normal_abspath () 92944584a44Smrg{ 93048e5ce07Smrg $debug_cmd 93144584a44Smrg 93248e5ce07Smrg # These SED scripts presuppose an absolute path with a trailing slash. 93348e5ce07Smrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 93448e5ce07Smrg _G_pathcdr='s|^/[^/]*||' 93548e5ce07Smrg _G_removedotparts=':dotsl 93648e5ce07Smrg s|/\./|/|g 93748e5ce07Smrg t dotsl 93848e5ce07Smrg s|/\.$|/|' 93948e5ce07Smrg _G_collapseslashes='s|/\{1,\}|/|g' 94048e5ce07Smrg _G_finalslash='s|/*$|/|' 94148e5ce07Smrg 94248e5ce07Smrg # Start from root dir and reassemble the path. 94348e5ce07Smrg func_normal_abspath_result= 94448e5ce07Smrg func_normal_abspath_tpath=$1 94548e5ce07Smrg func_normal_abspath_altnamespace= 94648e5ce07Smrg case $func_normal_abspath_tpath in 94748e5ce07Smrg "") 94848e5ce07Smrg # Empty path, that just means $cwd. 94948e5ce07Smrg func_stripname '' '/' "`pwd`" 95048e5ce07Smrg func_normal_abspath_result=$func_stripname_result 95148e5ce07Smrg return 95248e5ce07Smrg ;; 95348e5ce07Smrg # The next three entries are used to spot a run of precisely 95448e5ce07Smrg # two leading slashes without using negated character classes; 95548e5ce07Smrg # we take advantage of case's first-match behaviour. 95648e5ce07Smrg ///*) 95748e5ce07Smrg # Unusual form of absolute path, do nothing. 95848e5ce07Smrg ;; 95948e5ce07Smrg //*) 96048e5ce07Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 96148e5ce07Smrg # and for example Cygwin uses it to access remote file shares 96248e5ce07Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 96348e5ce07Smrg func_normal_abspath_altnamespace=/ 96448e5ce07Smrg ;; 96548e5ce07Smrg /*) 96648e5ce07Smrg # Absolute path, do nothing. 96744584a44Smrg ;; 9680eb1301bSmrg *) 96948e5ce07Smrg # Relative path, prepend $cwd. 97048e5ce07Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 97148e5ce07Smrg ;; 97244584a44Smrg esac 97348e5ce07Smrg 97448e5ce07Smrg # Cancel out all the simple stuff to save iterations. We also want 97548e5ce07Smrg # the path to end with a slash for ease of parsing, so make sure 97648e5ce07Smrg # there is one (and only one) here. 97748e5ce07Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 97848e5ce07Smrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 97948e5ce07Smrg while :; do 98048e5ce07Smrg # Processed it all yet? 98148e5ce07Smrg if test / = "$func_normal_abspath_tpath"; then 98248e5ce07Smrg # If we ascended to the root using ".." the result may be empty now. 98348e5ce07Smrg if test -z "$func_normal_abspath_result"; then 98448e5ce07Smrg func_normal_abspath_result=/ 98548e5ce07Smrg fi 98648e5ce07Smrg break 98748e5ce07Smrg fi 98848e5ce07Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 98948e5ce07Smrg -e "$_G_pathcar"` 99048e5ce07Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 99148e5ce07Smrg -e "$_G_pathcdr"` 99248e5ce07Smrg # Figure out what to do with it 99348e5ce07Smrg case $func_normal_abspath_tcomponent in 99448e5ce07Smrg "") 99548e5ce07Smrg # Trailing empty path component, ignore it. 99648e5ce07Smrg ;; 99748e5ce07Smrg ..) 99848e5ce07Smrg # Parent dir; strip last assembled component from result. 99948e5ce07Smrg func_dirname "$func_normal_abspath_result" 100048e5ce07Smrg func_normal_abspath_result=$func_dirname_result 100148e5ce07Smrg ;; 100248e5ce07Smrg *) 100348e5ce07Smrg # Actual path component, append it. 100448e5ce07Smrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 100548e5ce07Smrg ;; 100648e5ce07Smrg esac 100748e5ce07Smrg done 100848e5ce07Smrg # Restore leading double-slash if one was found on entry. 100948e5ce07Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 101048e5ce07Smrg} 101148e5ce07Smrg 101248e5ce07Smrg 101348e5ce07Smrg# func_notquiet ARG... 101448e5ce07Smrg# -------------------- 101548e5ce07Smrg# Echo program name prefixed message only when not in quiet mode. 101648e5ce07Smrgfunc_notquiet () 101748e5ce07Smrg{ 101848e5ce07Smrg $debug_cmd 101948e5ce07Smrg 102048e5ce07Smrg $opt_quiet || func_echo ${1+"$@"} 102148e5ce07Smrg 102248e5ce07Smrg # A bug in bash halts the script if the last line of a function 102348e5ce07Smrg # fails when set -e is in force, so we need another command to 102448e5ce07Smrg # work around that: 102548e5ce07Smrg : 102648e5ce07Smrg} 102748e5ce07Smrg 102848e5ce07Smrg 102948e5ce07Smrg# func_relative_path SRCDIR DSTDIR 103048e5ce07Smrg# -------------------------------- 103148e5ce07Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 103248e5ce07Smrgfunc_relative_path () 103348e5ce07Smrg{ 103448e5ce07Smrg $debug_cmd 103548e5ce07Smrg 103648e5ce07Smrg func_relative_path_result= 103748e5ce07Smrg func_normal_abspath "$1" 103848e5ce07Smrg func_relative_path_tlibdir=$func_normal_abspath_result 103948e5ce07Smrg func_normal_abspath "$2" 104048e5ce07Smrg func_relative_path_tbindir=$func_normal_abspath_result 104148e5ce07Smrg 104248e5ce07Smrg # Ascend the tree starting from libdir 104348e5ce07Smrg while :; do 104448e5ce07Smrg # check if we have found a prefix of bindir 104548e5ce07Smrg case $func_relative_path_tbindir in 104648e5ce07Smrg $func_relative_path_tlibdir) 104748e5ce07Smrg # found an exact match 104848e5ce07Smrg func_relative_path_tcancelled= 104948e5ce07Smrg break 105048e5ce07Smrg ;; 105148e5ce07Smrg $func_relative_path_tlibdir*) 105248e5ce07Smrg # found a matching prefix 105348e5ce07Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 105448e5ce07Smrg func_relative_path_tcancelled=$func_stripname_result 105548e5ce07Smrg if test -z "$func_relative_path_result"; then 105648e5ce07Smrg func_relative_path_result=. 105748e5ce07Smrg fi 105848e5ce07Smrg break 105948e5ce07Smrg ;; 106048e5ce07Smrg *) 106148e5ce07Smrg func_dirname $func_relative_path_tlibdir 106248e5ce07Smrg func_relative_path_tlibdir=$func_dirname_result 106348e5ce07Smrg if test -z "$func_relative_path_tlibdir"; then 106448e5ce07Smrg # Have to descend all the way to the root! 106548e5ce07Smrg func_relative_path_result=../$func_relative_path_result 106648e5ce07Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 106748e5ce07Smrg break 106848e5ce07Smrg fi 106948e5ce07Smrg func_relative_path_result=../$func_relative_path_result 107048e5ce07Smrg ;; 107148e5ce07Smrg esac 107248e5ce07Smrg done 107348e5ce07Smrg 107448e5ce07Smrg # Now calculate path; take care to avoid doubling-up slashes. 107548e5ce07Smrg func_stripname '' '/' "$func_relative_path_result" 107648e5ce07Smrg func_relative_path_result=$func_stripname_result 107748e5ce07Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 107848e5ce07Smrg if test -n "$func_stripname_result"; then 107948e5ce07Smrg func_append func_relative_path_result "/$func_stripname_result" 108048e5ce07Smrg fi 108148e5ce07Smrg 108248e5ce07Smrg # Normalisation. If bindir is libdir, return '.' else relative path. 108348e5ce07Smrg if test -n "$func_relative_path_result"; then 108448e5ce07Smrg func_stripname './' '' "$func_relative_path_result" 108548e5ce07Smrg func_relative_path_result=$func_stripname_result 108648e5ce07Smrg fi 108748e5ce07Smrg 108848e5ce07Smrg test -n "$func_relative_path_result" || func_relative_path_result=. 108948e5ce07Smrg 109048e5ce07Smrg : 109144584a44Smrg} 109244584a44Smrg 109344584a44Smrg 10944940c694Smrg# func_quote ARG 10954940c694Smrg# -------------- 10964940c694Smrg# Aesthetically quote one ARG, store the result into $func_quote_result. Note 10974940c694Smrg# that we keep attention to performance here (so far O(N) complexity as long as 10984940c694Smrg# func_append is O(1)). 10994940c694Smrgfunc_quote () 11004940c694Smrg{ 11014940c694Smrg $debug_cmd 11024940c694Smrg 11034940c694Smrg func_quote_result=$1 11044940c694Smrg 11054940c694Smrg case $func_quote_result in 11064940c694Smrg *[\\\`\"\$]*) 11074940c694Smrg case $func_quote_result in 11084940c694Smrg *[\[\*\?]*) 11094940c694Smrg func_quote_result=`$ECHO "$func_quote_result" | $SED "$sed_quote_subst"` 11104940c694Smrg return 0 11114940c694Smrg ;; 11124940c694Smrg esac 11134940c694Smrg 11144940c694Smrg func_quote_old_IFS=$IFS 11154940c694Smrg for _G_char in '\' '`' '"' '$' 11164940c694Smrg do 11174940c694Smrg # STATE($1) PREV($2) SEPARATOR($3) 11184940c694Smrg set start "" "" 11194940c694Smrg func_quote_result=dummy"$_G_char$func_quote_result$_G_char"dummy 11204940c694Smrg IFS=$_G_char 11214940c694Smrg for _G_part in $func_quote_result 11224940c694Smrg do 11234940c694Smrg case $1 in 11244940c694Smrg quote) 11254940c694Smrg func_append func_quote_result "$3$2" 11264940c694Smrg set quote "$_G_part" "\\$_G_char" 11274940c694Smrg ;; 11284940c694Smrg start) 11294940c694Smrg set first "" "" 11304940c694Smrg func_quote_result= 11314940c694Smrg ;; 11324940c694Smrg first) 11334940c694Smrg set quote "$_G_part" "" 11344940c694Smrg ;; 11354940c694Smrg esac 11364940c694Smrg done 11374940c694Smrg IFS=$func_quote_old_IFS 11384940c694Smrg done 11394940c694Smrg ;; 11404940c694Smrg *) ;; 11414940c694Smrg esac 11424940c694Smrg} 11434940c694Smrg 11444940c694Smrg 114548e5ce07Smrg# func_quote_for_eval ARG... 114648e5ce07Smrg# -------------------------- 114748e5ce07Smrg# Aesthetically quote ARGs to be evaled later. 114848e5ce07Smrg# This function returns two values: 114948e5ce07Smrg# i) func_quote_for_eval_result 115048e5ce07Smrg# double-quoted, suitable for a subsequent eval 115148e5ce07Smrg# ii) func_quote_for_eval_unquoted_result 115248e5ce07Smrg# has all characters that are still active within double 115348e5ce07Smrg# quotes backslashified. 115448e5ce07Smrgfunc_quote_for_eval () 115548e5ce07Smrg{ 115648e5ce07Smrg $debug_cmd 115748e5ce07Smrg 115848e5ce07Smrg func_quote_for_eval_unquoted_result= 115948e5ce07Smrg func_quote_for_eval_result= 116048e5ce07Smrg while test 0 -lt $#; do 11614940c694Smrg func_quote "$1" 11624940c694Smrg _G_unquoted_arg=$func_quote_result 116348e5ce07Smrg if test -n "$func_quote_for_eval_unquoted_result"; then 116448e5ce07Smrg func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 116548e5ce07Smrg else 116648e5ce07Smrg func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 116748e5ce07Smrg fi 116848e5ce07Smrg 116948e5ce07Smrg case $_G_unquoted_arg in 117048e5ce07Smrg # Double-quote args containing shell metacharacters to delay 117148e5ce07Smrg # word splitting, command substitution and variable expansion 117248e5ce07Smrg # for a subsequent eval. 117348e5ce07Smrg # Many Bourne shells cannot handle close brackets correctly 117448e5ce07Smrg # in scan sets, so we specify it separately. 117548e5ce07Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 117648e5ce07Smrg _G_quoted_arg=\"$_G_unquoted_arg\" 117748e5ce07Smrg ;; 117848e5ce07Smrg *) 117948e5ce07Smrg _G_quoted_arg=$_G_unquoted_arg 118048e5ce07Smrg ;; 118148e5ce07Smrg esac 118248e5ce07Smrg 118348e5ce07Smrg if test -n "$func_quote_for_eval_result"; then 118448e5ce07Smrg func_append func_quote_for_eval_result " $_G_quoted_arg" 118548e5ce07Smrg else 118648e5ce07Smrg func_append func_quote_for_eval_result "$_G_quoted_arg" 118748e5ce07Smrg fi 118848e5ce07Smrg shift 118948e5ce07Smrg done 119048e5ce07Smrg} 119148e5ce07Smrg 119248e5ce07Smrg 119348e5ce07Smrg# func_quote_for_expand ARG 119448e5ce07Smrg# ------------------------- 11950eb1301bSmrg# Aesthetically quote ARG to be evaled later; same as above, 11960eb1301bSmrg# but do not quote variable references. 11970eb1301bSmrgfunc_quote_for_expand () 119844584a44Smrg{ 119948e5ce07Smrg $debug_cmd 120048e5ce07Smrg 120144584a44Smrg case $1 in 12020eb1301bSmrg *[\\\`\"]*) 120348e5ce07Smrg _G_arg=`$ECHO "$1" | $SED \ 120448e5ce07Smrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 12050eb1301bSmrg *) 120648e5ce07Smrg _G_arg=$1 ;; 120744584a44Smrg esac 120844584a44Smrg 120948e5ce07Smrg case $_G_arg in 12100eb1301bSmrg # Double-quote args containing shell metacharacters to delay 12110eb1301bSmrg # word splitting and command substitution for a subsequent eval. 12120eb1301bSmrg # Many Bourne shells cannot handle close brackets correctly 12130eb1301bSmrg # in scan sets, so we specify it separately. 12140eb1301bSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 121548e5ce07Smrg _G_arg=\"$_G_arg\" 12160eb1301bSmrg ;; 12170eb1301bSmrg esac 121844584a44Smrg 121948e5ce07Smrg func_quote_for_expand_result=$_G_arg 122048e5ce07Smrg} 122148e5ce07Smrg 122248e5ce07Smrg 122348e5ce07Smrg# func_stripname PREFIX SUFFIX NAME 122448e5ce07Smrg# --------------------------------- 122548e5ce07Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 122648e5ce07Smrg# PREFIX and SUFFIX must not contain globbing or regex special 122748e5ce07Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 122848e5ce07Smrg# dot (in which case that matches only a dot). 122948e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 123048e5ce07Smrg eval 'func_stripname () 123148e5ce07Smrg { 123248e5ce07Smrg $debug_cmd 123348e5ce07Smrg 123448e5ce07Smrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 123548e5ce07Smrg # positional parameters, so assign one to ordinary variable first. 123648e5ce07Smrg func_stripname_result=$3 123748e5ce07Smrg func_stripname_result=${func_stripname_result#"$1"} 123848e5ce07Smrg func_stripname_result=${func_stripname_result%"$2"} 123948e5ce07Smrg }' 124048e5ce07Smrgelse 124148e5ce07Smrg func_stripname () 124248e5ce07Smrg { 124348e5ce07Smrg $debug_cmd 124448e5ce07Smrg 124548e5ce07Smrg case $2 in 124648e5ce07Smrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 124748e5ce07Smrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 124848e5ce07Smrg esac 124948e5ce07Smrg } 125048e5ce07Smrgfi 125148e5ce07Smrg 125248e5ce07Smrg 125348e5ce07Smrg# func_show_eval CMD [FAIL_EXP] 125448e5ce07Smrg# ----------------------------- 125548e5ce07Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 125648e5ce07Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 125748e5ce07Smrg# is given, then evaluate it. 125848e5ce07Smrgfunc_show_eval () 125948e5ce07Smrg{ 126048e5ce07Smrg $debug_cmd 126148e5ce07Smrg 126248e5ce07Smrg _G_cmd=$1 126348e5ce07Smrg _G_fail_exp=${2-':'} 126448e5ce07Smrg 126548e5ce07Smrg func_quote_for_expand "$_G_cmd" 126648e5ce07Smrg eval "func_notquiet $func_quote_for_expand_result" 126748e5ce07Smrg 126848e5ce07Smrg $opt_dry_run || { 126948e5ce07Smrg eval "$_G_cmd" 127048e5ce07Smrg _G_status=$? 127148e5ce07Smrg if test 0 -ne "$_G_status"; then 127248e5ce07Smrg eval "(exit $_G_status); $_G_fail_exp" 127348e5ce07Smrg fi 127448e5ce07Smrg } 127548e5ce07Smrg} 127648e5ce07Smrg 127748e5ce07Smrg 127848e5ce07Smrg# func_show_eval_locale CMD [FAIL_EXP] 127948e5ce07Smrg# ------------------------------------ 128048e5ce07Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 128148e5ce07Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 128248e5ce07Smrg# is given, then evaluate it. Use the saved locale for evaluation. 128348e5ce07Smrgfunc_show_eval_locale () 128448e5ce07Smrg{ 128548e5ce07Smrg $debug_cmd 128648e5ce07Smrg 128748e5ce07Smrg _G_cmd=$1 128848e5ce07Smrg _G_fail_exp=${2-':'} 128948e5ce07Smrg 129048e5ce07Smrg $opt_quiet || { 129148e5ce07Smrg func_quote_for_expand "$_G_cmd" 129248e5ce07Smrg eval "func_echo $func_quote_for_expand_result" 129348e5ce07Smrg } 129448e5ce07Smrg 129548e5ce07Smrg $opt_dry_run || { 129648e5ce07Smrg eval "$_G_user_locale 129748e5ce07Smrg $_G_cmd" 129848e5ce07Smrg _G_status=$? 129948e5ce07Smrg eval "$_G_safe_locale" 130048e5ce07Smrg if test 0 -ne "$_G_status"; then 130148e5ce07Smrg eval "(exit $_G_status); $_G_fail_exp" 130248e5ce07Smrg fi 130348e5ce07Smrg } 130448e5ce07Smrg} 130548e5ce07Smrg 130648e5ce07Smrg 130748e5ce07Smrg# func_tr_sh 130848e5ce07Smrg# ---------- 130948e5ce07Smrg# Turn $1 into a string suitable for a shell variable name. 131048e5ce07Smrg# Result is stored in $func_tr_sh_result. All characters 131148e5ce07Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 131248e5ce07Smrg# if $1 begins with a digit, a '_' is prepended as well. 131348e5ce07Smrgfunc_tr_sh () 131448e5ce07Smrg{ 131548e5ce07Smrg $debug_cmd 131648e5ce07Smrg 131748e5ce07Smrg case $1 in 131848e5ce07Smrg [0-9]* | *[!a-zA-Z0-9_]*) 131948e5ce07Smrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 132048e5ce07Smrg ;; 132148e5ce07Smrg * ) 132248e5ce07Smrg func_tr_sh_result=$1 132348e5ce07Smrg ;; 132448e5ce07Smrg esac 132548e5ce07Smrg} 132648e5ce07Smrg 132748e5ce07Smrg 132848e5ce07Smrg# func_verbose ARG... 132948e5ce07Smrg# ------------------- 133048e5ce07Smrg# Echo program name prefixed message in verbose mode only. 133148e5ce07Smrgfunc_verbose () 133248e5ce07Smrg{ 133348e5ce07Smrg $debug_cmd 133448e5ce07Smrg 133548e5ce07Smrg $opt_verbose && func_echo "$*" 133648e5ce07Smrg 133748e5ce07Smrg : 133848e5ce07Smrg} 133948e5ce07Smrg 134048e5ce07Smrg 134148e5ce07Smrg# func_warn_and_continue ARG... 134248e5ce07Smrg# ----------------------------- 134348e5ce07Smrg# Echo program name prefixed warning message to standard error. 134448e5ce07Smrgfunc_warn_and_continue () 134548e5ce07Smrg{ 134648e5ce07Smrg $debug_cmd 134748e5ce07Smrg 134848e5ce07Smrg $require_term_colors 134948e5ce07Smrg 135048e5ce07Smrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 135148e5ce07Smrg} 135248e5ce07Smrg 135348e5ce07Smrg 135448e5ce07Smrg# func_warning CATEGORY ARG... 135548e5ce07Smrg# ---------------------------- 135648e5ce07Smrg# Echo program name prefixed warning message to standard error. Warning 135748e5ce07Smrg# messages can be filtered according to CATEGORY, where this function 135848e5ce07Smrg# elides messages where CATEGORY is not listed in the global variable 135948e5ce07Smrg# 'opt_warning_types'. 136048e5ce07Smrgfunc_warning () 136148e5ce07Smrg{ 136248e5ce07Smrg $debug_cmd 136348e5ce07Smrg 136448e5ce07Smrg # CATEGORY must be in the warning_categories list! 136548e5ce07Smrg case " $warning_categories " in 136648e5ce07Smrg *" $1 "*) ;; 136748e5ce07Smrg *) func_internal_error "invalid warning category '$1'" ;; 136848e5ce07Smrg esac 136948e5ce07Smrg 137048e5ce07Smrg _G_category=$1 137148e5ce07Smrg shift 137248e5ce07Smrg 137348e5ce07Smrg case " $opt_warning_types " in 137448e5ce07Smrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 137548e5ce07Smrg esac 1376c43cc173Smrg} 1377c43cc173Smrg 1378c43cc173Smrg 137948e5ce07Smrg# func_sort_ver VER1 VER2 138048e5ce07Smrg# ----------------------- 138148e5ce07Smrg# 'sort -V' is not generally available. 138248e5ce07Smrg# Note this deviates from the version comparison in automake 138348e5ce07Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 138448e5ce07Smrg# but this should suffice as we won't be specifying old 138548e5ce07Smrg# version formats or redundant trailing .0 in bootstrap.conf. 138648e5ce07Smrg# If we did want full compatibility then we should probably 138748e5ce07Smrg# use m4_version_compare from autoconf. 138848e5ce07Smrgfunc_sort_ver () 138948e5ce07Smrg{ 139048e5ce07Smrg $debug_cmd 139148e5ce07Smrg 139248e5ce07Smrg printf '%s\n%s\n' "$1" "$2" \ 139348e5ce07Smrg | 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 139448e5ce07Smrg} 139548e5ce07Smrg 139648e5ce07Smrg# func_lt_ver PREV CURR 139748e5ce07Smrg# --------------------- 139848e5ce07Smrg# Return true if PREV and CURR are in the correct order according to 139948e5ce07Smrg# func_sort_ver, otherwise false. Use it like this: 140048e5ce07Smrg# 140148e5ce07Smrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 140248e5ce07Smrgfunc_lt_ver () 140348e5ce07Smrg{ 140448e5ce07Smrg $debug_cmd 140548e5ce07Smrg 140648e5ce07Smrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 140748e5ce07Smrg} 140848e5ce07Smrg 140948e5ce07Smrg 141048e5ce07Smrg# Local variables: 141148e5ce07Smrg# mode: shell-script 141248e5ce07Smrg# sh-indentation: 2 141348e5ce07Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 141448e5ce07Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 141548e5ce07Smrg# time-stamp-time-zone: "UTC" 141648e5ce07Smrg# End: 141748e5ce07Smrg#! /bin/sh 141848e5ce07Smrg 141948e5ce07Smrg# Set a version string for this script. 142048e5ce07Smrgscriptversion=2014-01-07.03; # UTC 142148e5ce07Smrg 142248e5ce07Smrg# A portable, pluggable option parser for Bourne shell. 142348e5ce07Smrg# Written by Gary V. Vaughan, 2010 142448e5ce07Smrg 142548e5ce07Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc. 142648e5ce07Smrg# This is free software; see the source for copying conditions. There is NO 142748e5ce07Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 142848e5ce07Smrg 142948e5ce07Smrg# This program is free software: you can redistribute it and/or modify 143048e5ce07Smrg# it under the terms of the GNU General Public License as published by 143148e5ce07Smrg# the Free Software Foundation, either version 3 of the License, or 143248e5ce07Smrg# (at your option) any later version. 143348e5ce07Smrg 143448e5ce07Smrg# This program is distributed in the hope that it will be useful, 143548e5ce07Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 143648e5ce07Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 143748e5ce07Smrg# GNU General Public License for more details. 143848e5ce07Smrg 143948e5ce07Smrg# You should have received a copy of the GNU General Public License 144048e5ce07Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 144148e5ce07Smrg 144248e5ce07Smrg# Please report bugs or propose patches to gary@gnu.org. 144348e5ce07Smrg 144448e5ce07Smrg 144548e5ce07Smrg## ------ ## 144648e5ce07Smrg## Usage. ## 144748e5ce07Smrg## ------ ## 144848e5ce07Smrg 144948e5ce07Smrg# This file is a library for parsing options in your shell scripts along 145048e5ce07Smrg# with assorted other useful supporting features that you can make use 145148e5ce07Smrg# of too. 145248e5ce07Smrg# 145348e5ce07Smrg# For the simplest scripts you might need only: 145448e5ce07Smrg# 145548e5ce07Smrg# #!/bin/sh 145648e5ce07Smrg# . relative/path/to/funclib.sh 145748e5ce07Smrg# . relative/path/to/options-parser 145848e5ce07Smrg# scriptversion=1.0 145948e5ce07Smrg# func_options ${1+"$@"} 146048e5ce07Smrg# eval set dummy "$func_options_result"; shift 146148e5ce07Smrg# ...rest of your script... 146248e5ce07Smrg# 146348e5ce07Smrg# In order for the '--version' option to work, you will need to have a 146448e5ce07Smrg# suitably formatted comment like the one at the top of this file 146548e5ce07Smrg# starting with '# Written by ' and ending with '# warranty; '. 146648e5ce07Smrg# 146748e5ce07Smrg# For '-h' and '--help' to work, you will also need a one line 146848e5ce07Smrg# description of your script's purpose in a comment directly above the 146948e5ce07Smrg# '# Written by ' line, like the one at the top of this file. 147048e5ce07Smrg# 147148e5ce07Smrg# The default options also support '--debug', which will turn on shell 147248e5ce07Smrg# execution tracing (see the comment above debug_cmd below for another 147348e5ce07Smrg# use), and '--verbose' and the func_verbose function to allow your script 147448e5ce07Smrg# to display verbose messages only when your user has specified 147548e5ce07Smrg# '--verbose'. 147648e5ce07Smrg# 147748e5ce07Smrg# After sourcing this file, you can plug processing for additional 147848e5ce07Smrg# options by amending the variables from the 'Configuration' section 147948e5ce07Smrg# below, and following the instructions in the 'Option parsing' 148048e5ce07Smrg# section further down. 148148e5ce07Smrg 148248e5ce07Smrg## -------------- ## 148348e5ce07Smrg## Configuration. ## 148448e5ce07Smrg## -------------- ## 148548e5ce07Smrg 148648e5ce07Smrg# You should override these variables in your script after sourcing this 148748e5ce07Smrg# file so that they reflect the customisations you have added to the 148848e5ce07Smrg# option parser. 148948e5ce07Smrg 149048e5ce07Smrg# The usage line for option parsing errors and the start of '-h' and 149148e5ce07Smrg# '--help' output messages. You can embed shell variables for delayed 149248e5ce07Smrg# expansion at the time the message is displayed, but you will need to 149348e5ce07Smrg# quote other shell meta-characters carefully to prevent them being 149448e5ce07Smrg# expanded when the contents are evaled. 149548e5ce07Smrgusage='$progpath [OPTION]...' 149648e5ce07Smrg 149748e5ce07Smrg# Short help message in response to '-h' and '--help'. Add to this or 149848e5ce07Smrg# override it after sourcing this library to reflect the full set of 149948e5ce07Smrg# options your script accepts. 150048e5ce07Smrgusage_message="\ 150148e5ce07Smrg --debug enable verbose shell tracing 150248e5ce07Smrg -W, --warnings=CATEGORY 150348e5ce07Smrg report the warnings falling in CATEGORY [all] 150448e5ce07Smrg -v, --verbose verbosely report processing 150548e5ce07Smrg --version print version information and exit 150648e5ce07Smrg -h, --help print short or long help message and exit 150748e5ce07Smrg" 150848e5ce07Smrg 150948e5ce07Smrg# Additional text appended to 'usage_message' in response to '--help'. 151048e5ce07Smrglong_help_message=" 151148e5ce07SmrgWarning categories include: 151248e5ce07Smrg 'all' show all warnings 151348e5ce07Smrg 'none' turn off all the warnings 151448e5ce07Smrg 'error' warnings are treated as fatal errors" 151548e5ce07Smrg 151648e5ce07Smrg# Help message printed before fatal option parsing errors. 151748e5ce07Smrgfatal_help="Try '\$progname --help' for more information." 151848e5ce07Smrg 151948e5ce07Smrg 152048e5ce07Smrg 152148e5ce07Smrg## ------------------------- ## 152248e5ce07Smrg## Hook function management. ## 152348e5ce07Smrg## ------------------------- ## 152448e5ce07Smrg 152548e5ce07Smrg# This section contains functions for adding, removing, and running hooks 152648e5ce07Smrg# to the main code. A hook is just a named list of of function, that can 152748e5ce07Smrg# be run in order later on. 152848e5ce07Smrg 152948e5ce07Smrg# func_hookable FUNC_NAME 153048e5ce07Smrg# ----------------------- 153148e5ce07Smrg# Declare that FUNC_NAME will run hooks added with 153248e5ce07Smrg# 'func_add_hook FUNC_NAME ...'. 153348e5ce07Smrgfunc_hookable () 153448e5ce07Smrg{ 153548e5ce07Smrg $debug_cmd 153648e5ce07Smrg 153748e5ce07Smrg func_append hookable_fns " $1" 153848e5ce07Smrg} 153948e5ce07Smrg 154048e5ce07Smrg 154148e5ce07Smrg# func_add_hook FUNC_NAME HOOK_FUNC 154248e5ce07Smrg# --------------------------------- 154348e5ce07Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 154448e5ce07Smrg# first have been declared "hookable" by a call to 'func_hookable'. 154548e5ce07Smrgfunc_add_hook () 154648e5ce07Smrg{ 154748e5ce07Smrg $debug_cmd 154848e5ce07Smrg 154948e5ce07Smrg case " $hookable_fns " in 155048e5ce07Smrg *" $1 "*) ;; 155148e5ce07Smrg *) func_fatal_error "'$1' does not accept hook functions." ;; 155248e5ce07Smrg esac 155348e5ce07Smrg 155448e5ce07Smrg eval func_append ${1}_hooks '" $2"' 155548e5ce07Smrg} 155648e5ce07Smrg 155748e5ce07Smrg 155848e5ce07Smrg# func_remove_hook FUNC_NAME HOOK_FUNC 155948e5ce07Smrg# ------------------------------------ 156048e5ce07Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 156148e5ce07Smrgfunc_remove_hook () 156248e5ce07Smrg{ 156348e5ce07Smrg $debug_cmd 156448e5ce07Smrg 156548e5ce07Smrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 156648e5ce07Smrg} 156748e5ce07Smrg 156848e5ce07Smrg 156948e5ce07Smrg# func_run_hooks FUNC_NAME [ARG]... 157048e5ce07Smrg# --------------------------------- 157148e5ce07Smrg# Run all hook functions registered to FUNC_NAME. 157248e5ce07Smrg# It is assumed that the list of hook functions contains nothing more 157348e5ce07Smrg# than a whitespace-delimited list of legal shell function names, and 157448e5ce07Smrg# no effort is wasted trying to catch shell meta-characters or preserve 157548e5ce07Smrg# whitespace. 157648e5ce07Smrgfunc_run_hooks () 157748e5ce07Smrg{ 157848e5ce07Smrg $debug_cmd 157948e5ce07Smrg 158048e5ce07Smrg case " $hookable_fns " in 158148e5ce07Smrg *" $1 "*) ;; 158248e5ce07Smrg *) func_fatal_error "'$1' does not support hook funcions.n" ;; 158348e5ce07Smrg esac 158448e5ce07Smrg 158548e5ce07Smrg eval _G_hook_fns=\$$1_hooks; shift 158648e5ce07Smrg 158748e5ce07Smrg for _G_hook in $_G_hook_fns; do 158848e5ce07Smrg eval $_G_hook '"$@"' 158948e5ce07Smrg 159048e5ce07Smrg # store returned options list back into positional 159148e5ce07Smrg # parameters for next 'cmd' execution. 159248e5ce07Smrg eval _G_hook_result=\$${_G_hook}_result 159348e5ce07Smrg eval set dummy "$_G_hook_result"; shift 159448e5ce07Smrg done 159548e5ce07Smrg 159648e5ce07Smrg func_quote_for_eval ${1+"$@"} 159748e5ce07Smrg func_run_hooks_result=$func_quote_for_eval_result 159848e5ce07Smrg} 159948e5ce07Smrg 160048e5ce07Smrg 160148e5ce07Smrg 160248e5ce07Smrg## --------------- ## 160348e5ce07Smrg## Option parsing. ## 160448e5ce07Smrg## --------------- ## 160548e5ce07Smrg 160648e5ce07Smrg# In order to add your own option parsing hooks, you must accept the 160748e5ce07Smrg# full positional parameter list in your hook function, remove any 160848e5ce07Smrg# options that you action, and then pass back the remaining unprocessed 160948e5ce07Smrg# options in '<hooked_function_name>_result', escaped suitably for 161048e5ce07Smrg# 'eval'. Like this: 161148e5ce07Smrg# 161248e5ce07Smrg# my_options_prep () 161348e5ce07Smrg# { 161448e5ce07Smrg# $debug_cmd 161548e5ce07Smrg# 161648e5ce07Smrg# # Extend the existing usage message. 161748e5ce07Smrg# usage_message=$usage_message' 161848e5ce07Smrg# -s, --silent don'\''t print informational messages 161948e5ce07Smrg# ' 162048e5ce07Smrg# 162148e5ce07Smrg# func_quote_for_eval ${1+"$@"} 162248e5ce07Smrg# my_options_prep_result=$func_quote_for_eval_result 162348e5ce07Smrg# } 162448e5ce07Smrg# func_add_hook func_options_prep my_options_prep 162548e5ce07Smrg# 162648e5ce07Smrg# 162748e5ce07Smrg# my_silent_option () 162848e5ce07Smrg# { 162948e5ce07Smrg# $debug_cmd 163048e5ce07Smrg# 163148e5ce07Smrg# # Note that for efficiency, we parse as many options as we can 163248e5ce07Smrg# # recognise in a loop before passing the remainder back to the 163348e5ce07Smrg# # caller on the first unrecognised argument we encounter. 163448e5ce07Smrg# while test $# -gt 0; do 163548e5ce07Smrg# opt=$1; shift 163648e5ce07Smrg# case $opt in 163748e5ce07Smrg# --silent|-s) opt_silent=: ;; 163848e5ce07Smrg# # Separate non-argument short options: 163948e5ce07Smrg# -s*) func_split_short_opt "$_G_opt" 164048e5ce07Smrg# set dummy "$func_split_short_opt_name" \ 164148e5ce07Smrg# "-$func_split_short_opt_arg" ${1+"$@"} 164248e5ce07Smrg# shift 164348e5ce07Smrg# ;; 164448e5ce07Smrg# *) set dummy "$_G_opt" "$*"; shift; break ;; 164548e5ce07Smrg# esac 164648e5ce07Smrg# done 164748e5ce07Smrg# 164848e5ce07Smrg# func_quote_for_eval ${1+"$@"} 164948e5ce07Smrg# my_silent_option_result=$func_quote_for_eval_result 165048e5ce07Smrg# } 165148e5ce07Smrg# func_add_hook func_parse_options my_silent_option 165248e5ce07Smrg# 165348e5ce07Smrg# 165448e5ce07Smrg# my_option_validation () 165548e5ce07Smrg# { 165648e5ce07Smrg# $debug_cmd 165748e5ce07Smrg# 165848e5ce07Smrg# $opt_silent && $opt_verbose && func_fatal_help "\ 165948e5ce07Smrg# '--silent' and '--verbose' options are mutually exclusive." 166048e5ce07Smrg# 166148e5ce07Smrg# func_quote_for_eval ${1+"$@"} 166248e5ce07Smrg# my_option_validation_result=$func_quote_for_eval_result 166348e5ce07Smrg# } 166448e5ce07Smrg# func_add_hook func_validate_options my_option_validation 166548e5ce07Smrg# 166648e5ce07Smrg# You'll alse need to manually amend $usage_message to reflect the extra 166748e5ce07Smrg# options you parse. It's preferable to append if you can, so that 166848e5ce07Smrg# multiple option parsing hooks can be added safely. 166948e5ce07Smrg 167048e5ce07Smrg 167148e5ce07Smrg# func_options [ARG]... 167248e5ce07Smrg# --------------------- 167348e5ce07Smrg# All the functions called inside func_options are hookable. See the 167448e5ce07Smrg# individual implementations for details. 167548e5ce07Smrgfunc_hookable func_options 167648e5ce07Smrgfunc_options () 1677c43cc173Smrg{ 167848e5ce07Smrg $debug_cmd 167944584a44Smrg 168048e5ce07Smrg func_options_prep ${1+"$@"} 168148e5ce07Smrg eval func_parse_options \ 168248e5ce07Smrg ${func_options_prep_result+"$func_options_prep_result"} 168348e5ce07Smrg eval func_validate_options \ 168448e5ce07Smrg ${func_parse_options_result+"$func_parse_options_result"} 168544584a44Smrg 168648e5ce07Smrg eval func_run_hooks func_options \ 168748e5ce07Smrg ${func_validate_options_result+"$func_validate_options_result"} 168848e5ce07Smrg 168948e5ce07Smrg # save modified positional parameters for caller 169048e5ce07Smrg func_options_result=$func_run_hooks_result 1691c43cc173Smrg} 1692c43cc173Smrg 1693c43cc173Smrg 169448e5ce07Smrg# func_options_prep [ARG]... 169548e5ce07Smrg# -------------------------- 169648e5ce07Smrg# All initialisations required before starting the option parse loop. 169748e5ce07Smrg# Note that when calling hook functions, we pass through the list of 169848e5ce07Smrg# positional parameters. If a hook function modifies that list, and 169948e5ce07Smrg# needs to propogate that back to rest of this script, then the complete 170048e5ce07Smrg# modified list must be put in 'func_run_hooks_result' before 170148e5ce07Smrg# returning. 170248e5ce07Smrgfunc_hookable func_options_prep 170348e5ce07Smrgfunc_options_prep () 1704c43cc173Smrg{ 170548e5ce07Smrg $debug_cmd 1706c27c18e8Smrg 170748e5ce07Smrg # Option defaults: 170848e5ce07Smrg opt_verbose=false 170948e5ce07Smrg opt_warning_types= 171044584a44Smrg 171148e5ce07Smrg func_run_hooks func_options_prep ${1+"$@"} 171248e5ce07Smrg 171348e5ce07Smrg # save modified positional parameters for caller 171448e5ce07Smrg func_options_prep_result=$func_run_hooks_result 1715c43cc173Smrg} 1716c43cc173Smrg 171748e5ce07Smrg 171848e5ce07Smrg# func_parse_options [ARG]... 171948e5ce07Smrg# --------------------------- 172048e5ce07Smrg# The main option parsing loop. 172148e5ce07Smrgfunc_hookable func_parse_options 172248e5ce07Smrgfunc_parse_options () 1723c43cc173Smrg{ 172448e5ce07Smrg $debug_cmd 172548e5ce07Smrg 172648e5ce07Smrg func_parse_options_result= 172748e5ce07Smrg 172848e5ce07Smrg # this just eases exit handling 172948e5ce07Smrg while test $# -gt 0; do 173048e5ce07Smrg # Defer to hook functions for initial option parsing, so they 173148e5ce07Smrg # get priority in the event of reusing an option name. 173248e5ce07Smrg func_run_hooks func_parse_options ${1+"$@"} 173348e5ce07Smrg 173448e5ce07Smrg # Adjust func_parse_options positional parameters to match 173548e5ce07Smrg eval set dummy "$func_run_hooks_result"; shift 173648e5ce07Smrg 173748e5ce07Smrg # Break out of the loop if we already parsed every option. 173848e5ce07Smrg test $# -gt 0 || break 173948e5ce07Smrg 174048e5ce07Smrg _G_opt=$1 174148e5ce07Smrg shift 174248e5ce07Smrg case $_G_opt in 174348e5ce07Smrg --debug|-x) debug_cmd='set -x' 174448e5ce07Smrg func_echo "enabling shell trace mode" 174548e5ce07Smrg $debug_cmd 174648e5ce07Smrg ;; 174748e5ce07Smrg 174848e5ce07Smrg --no-warnings|--no-warning|--no-warn) 174948e5ce07Smrg set dummy --warnings none ${1+"$@"} 175048e5ce07Smrg shift 175148e5ce07Smrg ;; 175248e5ce07Smrg 175348e5ce07Smrg --warnings|--warning|-W) 175448e5ce07Smrg test $# = 0 && func_missing_arg $_G_opt && break 175548e5ce07Smrg case " $warning_categories $1" in 175648e5ce07Smrg *" $1 "*) 175748e5ce07Smrg # trailing space prevents matching last $1 above 175848e5ce07Smrg func_append_uniq opt_warning_types " $1" 175948e5ce07Smrg ;; 176048e5ce07Smrg *all) 176148e5ce07Smrg opt_warning_types=$warning_categories 176248e5ce07Smrg ;; 176348e5ce07Smrg *none) 176448e5ce07Smrg opt_warning_types=none 176548e5ce07Smrg warning_func=: 176648e5ce07Smrg ;; 176748e5ce07Smrg *error) 176848e5ce07Smrg opt_warning_types=$warning_categories 176948e5ce07Smrg warning_func=func_fatal_error 177048e5ce07Smrg ;; 177148e5ce07Smrg *) 177248e5ce07Smrg func_fatal_error \ 177348e5ce07Smrg "unsupported warning category: '$1'" 177448e5ce07Smrg ;; 177548e5ce07Smrg esac 177648e5ce07Smrg shift 177748e5ce07Smrg ;; 177848e5ce07Smrg 177948e5ce07Smrg --verbose|-v) opt_verbose=: ;; 178048e5ce07Smrg --version) func_version ;; 178148e5ce07Smrg -\?|-h) func_usage ;; 178248e5ce07Smrg --help) func_help ;; 178348e5ce07Smrg 178448e5ce07Smrg # Separate optargs to long options (plugins may need this): 178548e5ce07Smrg --*=*) func_split_equals "$_G_opt" 178648e5ce07Smrg set dummy "$func_split_equals_lhs" \ 178748e5ce07Smrg "$func_split_equals_rhs" ${1+"$@"} 178848e5ce07Smrg shift 178948e5ce07Smrg ;; 179048e5ce07Smrg 179148e5ce07Smrg # Separate optargs to short options: 179248e5ce07Smrg -W*) 179348e5ce07Smrg func_split_short_opt "$_G_opt" 179448e5ce07Smrg set dummy "$func_split_short_opt_name" \ 179548e5ce07Smrg "$func_split_short_opt_arg" ${1+"$@"} 179648e5ce07Smrg shift 179748e5ce07Smrg ;; 179848e5ce07Smrg 179948e5ce07Smrg # Separate non-argument short options: 180048e5ce07Smrg -\?*|-h*|-v*|-x*) 180148e5ce07Smrg func_split_short_opt "$_G_opt" 180248e5ce07Smrg set dummy "$func_split_short_opt_name" \ 180348e5ce07Smrg "-$func_split_short_opt_arg" ${1+"$@"} 180448e5ce07Smrg shift 180548e5ce07Smrg ;; 180648e5ce07Smrg 180748e5ce07Smrg --) break ;; 180848e5ce07Smrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 180948e5ce07Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 181048e5ce07Smrg esac 181148e5ce07Smrg done 181248e5ce07Smrg 181348e5ce07Smrg # save modified positional parameters for caller 181448e5ce07Smrg func_quote_for_eval ${1+"$@"} 181548e5ce07Smrg func_parse_options_result=$func_quote_for_eval_result 1816b789ec8aSmrg} 1817b789ec8aSmrg 1818c43cc173Smrg 181948e5ce07Smrg# func_validate_options [ARG]... 182048e5ce07Smrg# ------------------------------ 182148e5ce07Smrg# Perform any sanity checks on option settings and/or unconsumed 182248e5ce07Smrg# arguments. 182348e5ce07Smrgfunc_hookable func_validate_options 182448e5ce07Smrgfunc_validate_options () 18250eb1301bSmrg{ 182648e5ce07Smrg $debug_cmd 1827b789ec8aSmrg 182848e5ce07Smrg # Display all warnings if -W was not given. 182948e5ce07Smrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 183048e5ce07Smrg 183148e5ce07Smrg func_run_hooks func_validate_options ${1+"$@"} 183248e5ce07Smrg 183348e5ce07Smrg # Bail if the options were screwed! 183448e5ce07Smrg $exit_cmd $EXIT_FAILURE 183548e5ce07Smrg 183648e5ce07Smrg # save modified positional parameters for caller 183748e5ce07Smrg func_validate_options_result=$func_run_hooks_result 18380eb1301bSmrg} 183944584a44Smrg 184048e5ce07Smrg 184148e5ce07Smrg 184248e5ce07Smrg## ----------------- ## 184348e5ce07Smrg## Helper functions. ## 184448e5ce07Smrg## ----------------- ## 184548e5ce07Smrg 184648e5ce07Smrg# This section contains the helper functions used by the rest of the 184748e5ce07Smrg# hookable option parser framework in ascii-betical order. 184848e5ce07Smrg 184948e5ce07Smrg 185048e5ce07Smrg# func_fatal_help ARG... 185148e5ce07Smrg# ---------------------- 185248e5ce07Smrg# Echo program name prefixed message to standard error, followed by 185348e5ce07Smrg# a help hint, and exit. 185448e5ce07Smrgfunc_fatal_help () 1855c27c18e8Smrg{ 185648e5ce07Smrg $debug_cmd 1857b789ec8aSmrg 185848e5ce07Smrg eval \$ECHO \""Usage: $usage"\" 185948e5ce07Smrg eval \$ECHO \""$fatal_help"\" 186048e5ce07Smrg func_error ${1+"$@"} 186148e5ce07Smrg exit $EXIT_FAILURE 1862c27c18e8Smrg} 1863c27c18e8Smrg 186448e5ce07Smrg 186548e5ce07Smrg# func_help 186648e5ce07Smrg# --------- 186748e5ce07Smrg# Echo long help message to standard output and exit. 1868c27c18e8Smrgfunc_help () 1869c27c18e8Smrg{ 187048e5ce07Smrg $debug_cmd 187148e5ce07Smrg 187248e5ce07Smrg func_usage_message 187348e5ce07Smrg $ECHO "$long_help_message" 187448e5ce07Smrg exit 0 1875c27c18e8Smrg} 1876c27c18e8Smrg 187748e5ce07Smrg 187848e5ce07Smrg# func_missing_arg ARGNAME 187948e5ce07Smrg# ------------------------ 1880c27c18e8Smrg# Echo program name prefixed message to standard error and set global 1881c27c18e8Smrg# exit_cmd. 1882c27c18e8Smrgfunc_missing_arg () 1883c27c18e8Smrg{ 188448e5ce07Smrg $debug_cmd 1885b789ec8aSmrg 188648e5ce07Smrg func_error "Missing argument for '$1'." 1887c27c18e8Smrg exit_cmd=exit 1888c43cc173Smrg} 1889c43cc173Smrg 1890c43cc173Smrg 189148e5ce07Smrg# func_split_equals STRING 189248e5ce07Smrg# ------------------------ 189348e5ce07Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 189448e5ce07Smrg# splitting STRING at the '=' sign. 189548e5ce07Smrgtest -z "$_G_HAVE_XSI_OPS" \ 189648e5ce07Smrg && (eval 'x=a/b/c; 189748e5ce07Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 189848e5ce07Smrg && _G_HAVE_XSI_OPS=yes 189948e5ce07Smrg 190048e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS" 190148e5ce07Smrgthen 190248e5ce07Smrg # This is an XSI compatible shell, allowing a faster implementation... 190348e5ce07Smrg eval 'func_split_equals () 190448e5ce07Smrg { 190548e5ce07Smrg $debug_cmd 190648e5ce07Smrg 190748e5ce07Smrg func_split_equals_lhs=${1%%=*} 190848e5ce07Smrg func_split_equals_rhs=${1#*=} 190948e5ce07Smrg test "x$func_split_equals_lhs" = "x$1" \ 191048e5ce07Smrg && func_split_equals_rhs= 191148e5ce07Smrg }' 191248e5ce07Smrgelse 191348e5ce07Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 191448e5ce07Smrg func_split_equals () 191548e5ce07Smrg { 191648e5ce07Smrg $debug_cmd 191748e5ce07Smrg 191848e5ce07Smrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 191948e5ce07Smrg func_split_equals_rhs= 192048e5ce07Smrg test "x$func_split_equals_lhs" = "x$1" \ 192148e5ce07Smrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 192248e5ce07Smrg } 192348e5ce07Smrgfi #func_split_equals 192448e5ce07Smrg 192548e5ce07Smrg 192648e5ce07Smrg# func_split_short_opt SHORTOPT 192748e5ce07Smrg# ----------------------------- 1928b789ec8aSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 1929b789ec8aSmrg# variables after splitting SHORTOPT after the 2nd character. 193048e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS" 193148e5ce07Smrgthen 193248e5ce07Smrg # This is an XSI compatible shell, allowing a faster implementation... 193348e5ce07Smrg eval 'func_split_short_opt () 193448e5ce07Smrg { 193548e5ce07Smrg $debug_cmd 193648e5ce07Smrg 193748e5ce07Smrg func_split_short_opt_arg=${1#??} 193848e5ce07Smrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 193948e5ce07Smrg }' 194048e5ce07Smrgelse 194148e5ce07Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 194248e5ce07Smrg func_split_short_opt () 194348e5ce07Smrg { 194448e5ce07Smrg $debug_cmd 194548e5ce07Smrg 194648e5ce07Smrg func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 194748e5ce07Smrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 194848e5ce07Smrg } 194948e5ce07Smrgfi #func_split_short_opt 195048e5ce07Smrg 195148e5ce07Smrg 195248e5ce07Smrg# func_usage 195348e5ce07Smrg# ---------- 195448e5ce07Smrg# Echo short help message to standard output and exit. 195548e5ce07Smrgfunc_usage () 1956b789ec8aSmrg{ 195748e5ce07Smrg $debug_cmd 1958b789ec8aSmrg 195948e5ce07Smrg func_usage_message 196048e5ce07Smrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 196148e5ce07Smrg exit 0 196248e5ce07Smrg} 1963b789ec8aSmrg 1964b789ec8aSmrg 196548e5ce07Smrg# func_usage_message 196648e5ce07Smrg# ------------------ 196748e5ce07Smrg# Echo short help message to standard output. 196848e5ce07Smrgfunc_usage_message () 1969b789ec8aSmrg{ 197048e5ce07Smrg $debug_cmd 1971b789ec8aSmrg 197248e5ce07Smrg eval \$ECHO \""Usage: $usage"\" 197348e5ce07Smrg echo 197448e5ce07Smrg $SED -n 's|^# || 197548e5ce07Smrg /^Written by/{ 197648e5ce07Smrg x;p;x 197748e5ce07Smrg } 197848e5ce07Smrg h 197948e5ce07Smrg /^Written by/q' < "$progpath" 198048e5ce07Smrg echo 198148e5ce07Smrg eval \$ECHO \""$usage_message"\" 198248e5ce07Smrg} 1983b789ec8aSmrg 1984c43cc173Smrg 198548e5ce07Smrg# func_version 198648e5ce07Smrg# ------------ 198748e5ce07Smrg# Echo version message to standard output and exit. 198848e5ce07Smrgfunc_version () 198948e5ce07Smrg{ 199048e5ce07Smrg $debug_cmd 1991c27c18e8Smrg 199248e5ce07Smrg printf '%s\n' "$progname $scriptversion" 199348e5ce07Smrg $SED -n ' 199448e5ce07Smrg /(C)/!b go 199548e5ce07Smrg :more 199648e5ce07Smrg /\./!{ 199748e5ce07Smrg N 199848e5ce07Smrg s|\n# | | 199948e5ce07Smrg b more 200048e5ce07Smrg } 200148e5ce07Smrg :go 200248e5ce07Smrg /^# Written by /,/# warranty; / { 200348e5ce07Smrg s|^# || 200448e5ce07Smrg s|^# *$|| 200548e5ce07Smrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 200648e5ce07Smrg p 200748e5ce07Smrg } 200848e5ce07Smrg /^# Written by / { 200948e5ce07Smrg s|^# || 201048e5ce07Smrg p 201148e5ce07Smrg } 201248e5ce07Smrg /^warranty; /q' < "$progpath" 2013c27c18e8Smrg 201448e5ce07Smrg exit $? 201548e5ce07Smrg} 2016c27c18e8Smrg 2017c43cc173Smrg 201848e5ce07Smrg# Local variables: 201948e5ce07Smrg# mode: shell-script 202048e5ce07Smrg# sh-indentation: 2 202148e5ce07Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 202248e5ce07Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 202348e5ce07Smrg# time-stamp-time-zone: "UTC" 202448e5ce07Smrg# End: 2025c43cc173Smrg 202648e5ce07Smrg# Set a version string. 202748e5ce07Smrgscriptversion='(GNU libtool) 2.4.6' 2028c43cc173Smrg 2029c27c18e8Smrg 203048e5ce07Smrg# func_echo ARG... 203148e5ce07Smrg# ---------------- 203248e5ce07Smrg# Libtool also displays the current mode in messages, so override 203348e5ce07Smrg# funclib.sh func_echo with this custom definition. 203448e5ce07Smrgfunc_echo () 2035b789ec8aSmrg{ 203648e5ce07Smrg $debug_cmd 2037b789ec8aSmrg 203848e5ce07Smrg _G_message=$* 203948e5ce07Smrg 204048e5ce07Smrg func_echo_IFS=$IFS 204148e5ce07Smrg IFS=$nl 204248e5ce07Smrg for _G_line in $_G_message; do 204348e5ce07Smrg IFS=$func_echo_IFS 204448e5ce07Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 204548e5ce07Smrg done 204648e5ce07Smrg IFS=$func_echo_IFS 204748e5ce07Smrg} 2048b789ec8aSmrg 2049b789ec8aSmrg 205048e5ce07Smrg# func_warning ARG... 205148e5ce07Smrg# ------------------- 205248e5ce07Smrg# Libtool warnings are not categorized, so override funclib.sh 205348e5ce07Smrg# func_warning with this simpler definition. 205448e5ce07Smrgfunc_warning () 2055b789ec8aSmrg{ 205648e5ce07Smrg $debug_cmd 205748e5ce07Smrg 205848e5ce07Smrg $warning_func ${1+"$@"} 205948e5ce07Smrg} 206048e5ce07Smrg 2061b789ec8aSmrg 206248e5ce07Smrg## ---------------- ## 206348e5ce07Smrg## Options parsing. ## 206448e5ce07Smrg## ---------------- ## 206548e5ce07Smrg 206648e5ce07Smrg# Hook in the functions to make sure our own options are parsed during 206748e5ce07Smrg# the option parsing loop. 206848e5ce07Smrg 206948e5ce07Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 207048e5ce07Smrg 207148e5ce07Smrg# Short help message in response to '-h'. 207248e5ce07Smrgusage_message="Options: 207348e5ce07Smrg --config show all configuration variables 207448e5ce07Smrg --debug enable verbose shell tracing 207548e5ce07Smrg -n, --dry-run display commands without modifying any files 207648e5ce07Smrg --features display basic configuration information and exit 207748e5ce07Smrg --mode=MODE use operation mode MODE 207848e5ce07Smrg --no-warnings equivalent to '-Wnone' 207948e5ce07Smrg --preserve-dup-deps don't remove duplicate dependency libraries 208048e5ce07Smrg --quiet, --silent don't print informational messages 208148e5ce07Smrg --tag=TAG use configuration variables from tag TAG 208248e5ce07Smrg -v, --verbose print more informational messages than default 208348e5ce07Smrg --version print version information 208448e5ce07Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 208548e5ce07Smrg -h, --help, --help-all print short, long, or detailed help message 208648e5ce07Smrg" 2087b789ec8aSmrg 208848e5ce07Smrg# Additional text appended to 'usage_message' in response to '--help'. 208948e5ce07Smrgfunc_help () 20900eb1301bSmrg{ 209148e5ce07Smrg $debug_cmd 209248e5ce07Smrg 209348e5ce07Smrg func_usage_message 209448e5ce07Smrg $ECHO "$long_help_message 209548e5ce07Smrg 209648e5ce07SmrgMODE must be one of the following: 209748e5ce07Smrg 209848e5ce07Smrg clean remove files from the build directory 209948e5ce07Smrg compile compile a source file into a libtool object 210048e5ce07Smrg execute automatically set library path, then run a program 210148e5ce07Smrg finish complete the installation of libtool libraries 210248e5ce07Smrg install install libraries or executables 210348e5ce07Smrg link create a library or an executable 210448e5ce07Smrg uninstall remove libraries from an installed directory 210548e5ce07Smrg 210648e5ce07SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 210748e5ce07Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 210848e5ce07SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 210948e5ce07Smrg 211048e5ce07SmrgWhen reporting a bug, please describe a test case to reproduce it and 211148e5ce07Smrginclude the following information: 211248e5ce07Smrg 211348e5ce07Smrg host-triplet: $host 211448e5ce07Smrg shell: $SHELL 211548e5ce07Smrg compiler: $LTCC 211648e5ce07Smrg compiler flags: $LTCFLAGS 211748e5ce07Smrg linker: $LD (gnu? $with_gnu_ld) 211848e5ce07Smrg version: $progname (GNU libtool) 2.4.6 211948e5ce07Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 212048e5ce07Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 212148e5ce07Smrg 212248e5ce07SmrgReport bugs to <bug-libtool@gnu.org>. 212348e5ce07SmrgGNU libtool home page: <http://www.gnu.org/software/libtool/>. 212448e5ce07SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 212548e5ce07Smrg exit 0 212648e5ce07Smrg} 212744584a44Smrg 212844584a44Smrg 212948e5ce07Smrg# func_lo2o OBJECT-NAME 213048e5ce07Smrg# --------------------- 213148e5ce07Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 213248e5ce07Smrg# object suffix. 213344584a44Smrg 213448e5ce07Smrglo2o=s/\\.lo\$/.$objext/ 213548e5ce07Smrgo2lo=s/\\.$objext\$/.lo/ 213644584a44Smrg 213748e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 213848e5ce07Smrg eval 'func_lo2o () 213948e5ce07Smrg { 214048e5ce07Smrg case $1 in 214148e5ce07Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 214248e5ce07Smrg * ) func_lo2o_result=$1 ;; 214348e5ce07Smrg esac 214448e5ce07Smrg }' 214548e5ce07Smrg 214648e5ce07Smrg # func_xform LIBOBJ-OR-SOURCE 214748e5ce07Smrg # --------------------------- 214848e5ce07Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 214948e5ce07Smrg # suffix to a '.lo' libtool-object suffix. 215048e5ce07Smrg eval 'func_xform () 215148e5ce07Smrg { 215248e5ce07Smrg func_xform_result=${1%.*}.lo 215348e5ce07Smrg }' 215448e5ce07Smrgelse 215548e5ce07Smrg # ...otherwise fall back to using sed. 215648e5ce07Smrg func_lo2o () 215748e5ce07Smrg { 215848e5ce07Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 215948e5ce07Smrg } 216048e5ce07Smrg 216148e5ce07Smrg func_xform () 216248e5ce07Smrg { 216348e5ce07Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 216448e5ce07Smrg } 216548e5ce07Smrgfi 2166b789ec8aSmrg 2167b789ec8aSmrg 216848e5ce07Smrg# func_fatal_configuration ARG... 216948e5ce07Smrg# ------------------------------- 2170c27c18e8Smrg# Echo program name prefixed message to standard error, followed by 2171c27c18e8Smrg# a configuration failure hint, and exit. 2172c27c18e8Smrgfunc_fatal_configuration () 2173c27c18e8Smrg{ 217448e5ce07Smrg func__fatal_error ${1+"$@"} \ 217548e5ce07Smrg "See the $PACKAGE documentation for more information." \ 217648e5ce07Smrg "Fatal configuration error." 2177c27c18e8Smrg} 2178c43cc173Smrg 217921e67964Smrg 2180c27c18e8Smrg# func_config 218148e5ce07Smrg# ----------- 2182c27c18e8Smrg# Display the configuration for all the tags in this script. 2183c27c18e8Smrgfunc_config () 2184c27c18e8Smrg{ 2185c27c18e8Smrg re_begincf='^# ### BEGIN LIBTOOL' 2186c27c18e8Smrg re_endcf='^# ### END LIBTOOL' 2187c27c18e8Smrg 2188c27c18e8Smrg # Default configuration. 2189c27c18e8Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2190c43cc173Smrg 2191c43cc173Smrg # Now print the configurations for the tags. 2192c43cc173Smrg for tagname in $taglist; do 2193c27c18e8Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2194c43cc173Smrg done 2195c43cc173Smrg 2196c27c18e8Smrg exit $? 2197c27c18e8Smrg} 2198c43cc173Smrg 219948e5ce07Smrg 2200c27c18e8Smrg# func_features 220148e5ce07Smrg# ------------- 2202c27c18e8Smrg# Display the features supported by this script. 2203c27c18e8Smrgfunc_features () 2204c27c18e8Smrg{ 220537eb1ca1Smrg echo "host: $host" 220648e5ce07Smrg if test yes = "$build_libtool_libs"; then 220737eb1ca1Smrg echo "enable shared libraries" 2208c43cc173Smrg else 220937eb1ca1Smrg echo "disable shared libraries" 2210c43cc173Smrg fi 221148e5ce07Smrg if test yes = "$build_old_libs"; then 221237eb1ca1Smrg echo "enable static libraries" 2213c43cc173Smrg else 221437eb1ca1Smrg echo "disable static libraries" 2215c43cc173Smrg fi 2216c27c18e8Smrg 2217c43cc173Smrg exit $? 2218c27c18e8Smrg} 2219c43cc173Smrg 222048e5ce07Smrg 222148e5ce07Smrg# func_enable_tag TAGNAME 222248e5ce07Smrg# ----------------------- 2223c27c18e8Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2224c27c18e8Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2225c27c18e8Smrg# variable here. 2226c27c18e8Smrgfunc_enable_tag () 2227c27c18e8Smrg{ 222848e5ce07Smrg # Global variable: 222948e5ce07Smrg tagname=$1 2230c43cc173Smrg 223148e5ce07Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 223248e5ce07Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 223348e5ce07Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 2234c43cc173Smrg 223548e5ce07Smrg # Validate tagname. 223648e5ce07Smrg case $tagname in 223748e5ce07Smrg *[!-_A-Za-z0-9,/]*) 223848e5ce07Smrg func_fatal_error "invalid tag name: $tagname" 223948e5ce07Smrg ;; 224048e5ce07Smrg esac 2241c43cc173Smrg 224248e5ce07Smrg # Don't test for the "default" C tag, as we know it's 224348e5ce07Smrg # there but not specially marked. 224448e5ce07Smrg case $tagname in 224548e5ce07Smrg CC) ;; 2246c27c18e8Smrg *) 224748e5ce07Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 224848e5ce07Smrg taglist="$taglist $tagname" 224948e5ce07Smrg 225048e5ce07Smrg # Evaluate the configuration. Be careful to quote the path 225148e5ce07Smrg # and the sed script, to avoid splitting on whitespace, but 225248e5ce07Smrg # also don't use non-portable quotes within backquotes within 225348e5ce07Smrg # quotes we have to do it in 2 steps: 225448e5ce07Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 225548e5ce07Smrg eval "$extractedcf" 225648e5ce07Smrg else 225748e5ce07Smrg func_error "ignoring unknown tag $tagname" 225848e5ce07Smrg fi 225948e5ce07Smrg ;; 226048e5ce07Smrg esac 2261c27c18e8Smrg} 2262c27c18e8Smrg 226348e5ce07Smrg 2264b789ec8aSmrg# func_check_version_match 226548e5ce07Smrg# ------------------------ 2266b789ec8aSmrg# Ensure that we are using m4 macros, and libtool script from the same 2267b789ec8aSmrg# release of libtool. 2268b789ec8aSmrgfunc_check_version_match () 2269c27c18e8Smrg{ 227048e5ce07Smrg if test "$package_revision" != "$macro_revision"; then 227148e5ce07Smrg if test "$VERSION" != "$macro_version"; then 227248e5ce07Smrg if test -z "$macro_version"; then 227348e5ce07Smrg cat >&2 <<_LT_EOF 2274b789ec8aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2275b789ec8aSmrg$progname: definition of this LT_INIT comes from an older release. 2276b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2277b789ec8aSmrg$progname: and run autoconf again. 2278b789ec8aSmrg_LT_EOF 227948e5ce07Smrg else 228048e5ce07Smrg cat >&2 <<_LT_EOF 2281b789ec8aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2282b789ec8aSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2283b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2284b789ec8aSmrg$progname: and run autoconf again. 2285b789ec8aSmrg_LT_EOF 228648e5ce07Smrg fi 228748e5ce07Smrg else 228848e5ce07Smrg cat >&2 <<_LT_EOF 2289b789ec8aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2290b789ec8aSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2291b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2292b789ec8aSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 2293b789ec8aSmrg_LT_EOF 229448e5ce07Smrg fi 2295b789ec8aSmrg 229648e5ce07Smrg exit $EXIT_MISMATCH 229748e5ce07Smrg fi 22980eb1301bSmrg} 2299b789ec8aSmrg 2300c43cc173Smrg 230148e5ce07Smrg# libtool_options_prep [ARG]... 230248e5ce07Smrg# ----------------------------- 230348e5ce07Smrg# Preparation for options parsed by libtool. 230448e5ce07Smrglibtool_options_prep () 230548e5ce07Smrg{ 230648e5ce07Smrg $debug_mode 2307b789ec8aSmrg 230848e5ce07Smrg # Option defaults: 230948e5ce07Smrg opt_config=false 231048e5ce07Smrg opt_dlopen= 231148e5ce07Smrg opt_dry_run=false 231248e5ce07Smrg opt_help=false 231348e5ce07Smrg opt_mode= 231448e5ce07Smrg opt_preserve_dup_deps=false 231548e5ce07Smrg opt_quiet=false 2316b789ec8aSmrg 231748e5ce07Smrg nonopt= 231848e5ce07Smrg preserve_args= 231944584a44Smrg 232048e5ce07Smrg # Shorthand for --mode=foo, only valid as the first argument 232148e5ce07Smrg case $1 in 232248e5ce07Smrg clean|clea|cle|cl) 232348e5ce07Smrg shift; set dummy --mode clean ${1+"$@"}; shift 232448e5ce07Smrg ;; 232548e5ce07Smrg compile|compil|compi|comp|com|co|c) 232648e5ce07Smrg shift; set dummy --mode compile ${1+"$@"}; shift 232748e5ce07Smrg ;; 232848e5ce07Smrg execute|execut|execu|exec|exe|ex|e) 232948e5ce07Smrg shift; set dummy --mode execute ${1+"$@"}; shift 233048e5ce07Smrg ;; 233148e5ce07Smrg finish|finis|fini|fin|fi|f) 233248e5ce07Smrg shift; set dummy --mode finish ${1+"$@"}; shift 233348e5ce07Smrg ;; 233448e5ce07Smrg install|instal|insta|inst|ins|in|i) 233548e5ce07Smrg shift; set dummy --mode install ${1+"$@"}; shift 233648e5ce07Smrg ;; 233748e5ce07Smrg link|lin|li|l) 233848e5ce07Smrg shift; set dummy --mode link ${1+"$@"}; shift 233948e5ce07Smrg ;; 234048e5ce07Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 234148e5ce07Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 234248e5ce07Smrg ;; 234348e5ce07Smrg esac 234448e5ce07Smrg 234548e5ce07Smrg # Pass back the list of options. 234648e5ce07Smrg func_quote_for_eval ${1+"$@"} 234748e5ce07Smrg libtool_options_prep_result=$func_quote_for_eval_result 234848e5ce07Smrg} 234948e5ce07Smrgfunc_add_hook func_options_prep libtool_options_prep 2350b789ec8aSmrg 2351b789ec8aSmrg 235248e5ce07Smrg# libtool_parse_options [ARG]... 235348e5ce07Smrg# --------------------------------- 235448e5ce07Smrg# Provide handling for libtool specific options. 235548e5ce07Smrglibtool_parse_options () 2356b789ec8aSmrg{ 235748e5ce07Smrg $debug_cmd 2358c27c18e8Smrg 235948e5ce07Smrg # Perform our own loop to consume as many options as possible in 236048e5ce07Smrg # each iteration. 236148e5ce07Smrg while test $# -gt 0; do 236248e5ce07Smrg _G_opt=$1 236348e5ce07Smrg shift 236448e5ce07Smrg case $_G_opt in 236548e5ce07Smrg --dry-run|--dryrun|-n) 236648e5ce07Smrg opt_dry_run=: 236748e5ce07Smrg ;; 236848e5ce07Smrg 236948e5ce07Smrg --config) func_config ;; 237048e5ce07Smrg 237148e5ce07Smrg --dlopen|-dlopen) 237248e5ce07Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 237348e5ce07Smrg}$1" 237448e5ce07Smrg shift 237548e5ce07Smrg ;; 237648e5ce07Smrg 237748e5ce07Smrg --preserve-dup-deps) 237848e5ce07Smrg opt_preserve_dup_deps=: ;; 237948e5ce07Smrg 238048e5ce07Smrg --features) func_features ;; 238148e5ce07Smrg 238248e5ce07Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 238348e5ce07Smrg 238448e5ce07Smrg --help) opt_help=: ;; 238548e5ce07Smrg 238648e5ce07Smrg --help-all) opt_help=': help-all' ;; 238748e5ce07Smrg 238848e5ce07Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 238948e5ce07Smrg opt_mode=$1 239048e5ce07Smrg case $1 in 239148e5ce07Smrg # Valid mode arguments: 239248e5ce07Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 239348e5ce07Smrg 239448e5ce07Smrg # Catch anything else as an error 239548e5ce07Smrg *) func_error "invalid argument for $_G_opt" 239648e5ce07Smrg exit_cmd=exit 239748e5ce07Smrg break 239848e5ce07Smrg ;; 239948e5ce07Smrg esac 240048e5ce07Smrg shift 240148e5ce07Smrg ;; 240248e5ce07Smrg 240348e5ce07Smrg --no-silent|--no-quiet) 240448e5ce07Smrg opt_quiet=false 240548e5ce07Smrg func_append preserve_args " $_G_opt" 240648e5ce07Smrg ;; 240748e5ce07Smrg 240848e5ce07Smrg --no-warnings|--no-warning|--no-warn) 240948e5ce07Smrg opt_warning=false 241048e5ce07Smrg func_append preserve_args " $_G_opt" 241148e5ce07Smrg ;; 241248e5ce07Smrg 241348e5ce07Smrg --no-verbose) 241448e5ce07Smrg opt_verbose=false 241548e5ce07Smrg func_append preserve_args " $_G_opt" 241648e5ce07Smrg ;; 241748e5ce07Smrg 241848e5ce07Smrg --silent|--quiet) 241948e5ce07Smrg opt_quiet=: 242048e5ce07Smrg opt_verbose=false 242148e5ce07Smrg func_append preserve_args " $_G_opt" 242248e5ce07Smrg ;; 242348e5ce07Smrg 242448e5ce07Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 242548e5ce07Smrg opt_tag=$1 242648e5ce07Smrg func_append preserve_args " $_G_opt $1" 242748e5ce07Smrg func_enable_tag "$1" 242848e5ce07Smrg shift 242948e5ce07Smrg ;; 243048e5ce07Smrg 243148e5ce07Smrg --verbose|-v) opt_quiet=false 243248e5ce07Smrg opt_verbose=: 243348e5ce07Smrg func_append preserve_args " $_G_opt" 243448e5ce07Smrg ;; 243548e5ce07Smrg 243648e5ce07Smrg # An option not handled by this hook function: 243748e5ce07Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 243848e5ce07Smrg esac 243948e5ce07Smrg done 2440b789ec8aSmrg 2441b789ec8aSmrg 244248e5ce07Smrg # save modified positional parameters for caller 244348e5ce07Smrg func_quote_for_eval ${1+"$@"} 244448e5ce07Smrg libtool_parse_options_result=$func_quote_for_eval_result 244548e5ce07Smrg} 244648e5ce07Smrgfunc_add_hook func_parse_options libtool_parse_options 2447c27c18e8Smrg 2448c43cc173Smrg 2449c27c18e8Smrg 245048e5ce07Smrg# libtool_validate_options [ARG]... 245148e5ce07Smrg# --------------------------------- 245248e5ce07Smrg# Perform any sanity checks on option settings and/or unconsumed 245348e5ce07Smrg# arguments. 245448e5ce07Smrglibtool_validate_options () 245548e5ce07Smrg{ 245648e5ce07Smrg # save first non-option argument 245748e5ce07Smrg if test 0 -lt $#; then 245848e5ce07Smrg nonopt=$1 245948e5ce07Smrg shift 2460c27c18e8Smrg fi 2461c27c18e8Smrg 246248e5ce07Smrg # preserve --debug 246348e5ce07Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 246444584a44Smrg 246548e5ce07Smrg case $host in 246648e5ce07Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 246748e5ce07Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 246848e5ce07Smrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 246948e5ce07Smrg # don't eliminate duplications in $postdeps and $predeps 247048e5ce07Smrg opt_duplicate_compiler_generated_deps=: 247148e5ce07Smrg ;; 247248e5ce07Smrg *) 247348e5ce07Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 247448e5ce07Smrg ;; 247548e5ce07Smrg esac 247644584a44Smrg 247748e5ce07Smrg $opt_help || { 247848e5ce07Smrg # Sanity checks first: 247948e5ce07Smrg func_check_version_match 2480c27c18e8Smrg 248148e5ce07Smrg test yes != "$build_libtool_libs" \ 248248e5ce07Smrg && test yes != "$build_old_libs" \ 248348e5ce07Smrg && func_fatal_configuration "not configured to build any kind of library" 2484c27c18e8Smrg 248548e5ce07Smrg # Darwin sucks 248648e5ce07Smrg eval std_shrext=\"$shrext_cmds\" 248748e5ce07Smrg 248848e5ce07Smrg # Only execute mode is allowed to have -dlopen flags. 248948e5ce07Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 249048e5ce07Smrg func_error "unrecognized option '-dlopen'" 249148e5ce07Smrg $ECHO "$help" 1>&2 249248e5ce07Smrg exit $EXIT_FAILURE 249348e5ce07Smrg fi 249448e5ce07Smrg 249548e5ce07Smrg # Change the help message to a mode-specific one. 249648e5ce07Smrg generic_help=$help 249748e5ce07Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 249848e5ce07Smrg } 249948e5ce07Smrg 250048e5ce07Smrg # Pass back the unparsed argument list 250148e5ce07Smrg func_quote_for_eval ${1+"$@"} 250248e5ce07Smrg libtool_validate_options_result=$func_quote_for_eval_result 2503b789ec8aSmrg} 250448e5ce07Smrgfunc_add_hook func_validate_options libtool_validate_options 250548e5ce07Smrg 2506c27c18e8Smrg 250748e5ce07Smrg# Process options as early as possible so that --help and --version 250848e5ce07Smrg# can return quickly. 250948e5ce07Smrgfunc_options ${1+"$@"} 251048e5ce07Smrgeval set dummy "$func_options_result"; shift 251144584a44Smrg 2512c43cc173Smrg 2513c43cc173Smrg 2514b789ec8aSmrg## ----------- ## 2515b789ec8aSmrg## Main. ## 2516b789ec8aSmrg## ----------- ## 2517c43cc173Smrg 251848e5ce07Smrgmagic='%%%MAGIC variable%%%' 251948e5ce07Smrgmagic_exe='%%%MAGIC EXE variable%%%' 252048e5ce07Smrg 252148e5ce07Smrg# Global variables. 252248e5ce07Smrgextracted_archives= 252348e5ce07Smrgextracted_serial=0 252448e5ce07Smrg 252548e5ce07Smrg# If this variable is set in any of the actions, the command in it 252648e5ce07Smrg# will be execed at the end. This prevents here-documents from being 252748e5ce07Smrg# left over by shells. 252848e5ce07Smrgexec_cmd= 252948e5ce07Smrg 253048e5ce07Smrg 253148e5ce07Smrg# A function that is used when there is no print builtin or printf. 253248e5ce07Smrgfunc_fallback_echo () 253348e5ce07Smrg{ 253448e5ce07Smrg eval 'cat <<_LTECHO_EOF 253548e5ce07Smrg$1 253648e5ce07Smrg_LTECHO_EOF' 253748e5ce07Smrg} 253848e5ce07Smrg 253948e5ce07Smrg# func_generated_by_libtool 254048e5ce07Smrg# True iff stdin has been generated by Libtool. This function is only 254148e5ce07Smrg# a basic sanity check; it will hardly flush out determined imposters. 254248e5ce07Smrgfunc_generated_by_libtool_p () 254348e5ce07Smrg{ 254448e5ce07Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 254548e5ce07Smrg} 254648e5ce07Smrg 2547c27c18e8Smrg# func_lalib_p file 254848e5ce07Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2549c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 2550c27c18e8Smrg# determined imposters. 2551c27c18e8Smrgfunc_lalib_p () 2552c27c18e8Smrg{ 2553c27c18e8Smrg test -f "$1" && 255448e5ce07Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2555c27c18e8Smrg} 2556c43cc173Smrg 2557c27c18e8Smrg# func_lalib_unsafe_p file 255848e5ce07Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2559c27c18e8Smrg# This function implements the same check as func_lalib_p without 2560c27c18e8Smrg# resorting to external programs. To this end, it redirects stdin and 2561c27c18e8Smrg# closes it afterwards, without saving the original file descriptor. 2562c27c18e8Smrg# As a safety measure, use it only where a negative result would be 256348e5ce07Smrg# fatal anyway. Works if 'file' does not exist. 2564c27c18e8Smrgfunc_lalib_unsafe_p () 2565c27c18e8Smrg{ 2566c27c18e8Smrg lalib_p=no 2567c27c18e8Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2568c27c18e8Smrg for lalib_p_l in 1 2 3 4 2569c27c18e8Smrg do 2570c27c18e8Smrg read lalib_p_line 257148e5ce07Smrg case $lalib_p_line in 2572c27c18e8Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2573c27c18e8Smrg esac 2574c27c18e8Smrg done 2575c27c18e8Smrg exec 0<&5 5<&- 2576c27c18e8Smrg fi 257748e5ce07Smrg test yes = "$lalib_p" 2578c27c18e8Smrg} 2579c43cc173Smrg 2580c27c18e8Smrg# func_ltwrapper_script_p file 2581c27c18e8Smrg# True iff FILE is a libtool wrapper script 2582c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 2583c27c18e8Smrg# determined imposters. 2584c27c18e8Smrgfunc_ltwrapper_script_p () 2585c27c18e8Smrg{ 258648e5ce07Smrg test -f "$1" && 258748e5ce07Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2588c27c18e8Smrg} 2589c43cc173Smrg 2590c27c18e8Smrg# func_ltwrapper_executable_p file 2591c27c18e8Smrg# True iff FILE is a libtool wrapper executable 2592c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 2593c27c18e8Smrg# determined imposters. 2594c27c18e8Smrgfunc_ltwrapper_executable_p () 2595c27c18e8Smrg{ 2596c27c18e8Smrg func_ltwrapper_exec_suffix= 2597c27c18e8Smrg case $1 in 2598c27c18e8Smrg *.exe) ;; 2599c27c18e8Smrg *) func_ltwrapper_exec_suffix=.exe ;; 2600c27c18e8Smrg esac 2601c27c18e8Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2602c27c18e8Smrg} 2603c43cc173Smrg 2604c27c18e8Smrg# func_ltwrapper_scriptname file 2605c27c18e8Smrg# Assumes file is an ltwrapper_executable 2606c27c18e8Smrg# uses $file to determine the appropriate filename for a 2607c27c18e8Smrg# temporary ltwrapper_script. 2608c27c18e8Smrgfunc_ltwrapper_scriptname () 2609c27c18e8Smrg{ 2610b789ec8aSmrg func_dirname_and_basename "$1" "" "." 2611b789ec8aSmrg func_stripname '' '.exe' "$func_basename_result" 261248e5ce07Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2613c27c18e8Smrg} 2614c27c18e8Smrg 2615c27c18e8Smrg# func_ltwrapper_p file 2616c27c18e8Smrg# True iff FILE is a libtool wrapper script or wrapper executable 2617c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out 2618c27c18e8Smrg# determined imposters. 2619c27c18e8Smrgfunc_ltwrapper_p () 2620c27c18e8Smrg{ 2621c27c18e8Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2622c27c18e8Smrg} 2623c27c18e8Smrg 2624c27c18e8Smrg 2625c27c18e8Smrg# func_execute_cmds commands fail_cmd 2626c27c18e8Smrg# Execute tilde-delimited COMMANDS. 2627c27c18e8Smrg# If FAIL_CMD is given, eval that upon failure. 2628c27c18e8Smrg# FAIL_CMD may read-access the current command in variable CMD! 2629c27c18e8Smrgfunc_execute_cmds () 2630c27c18e8Smrg{ 263148e5ce07Smrg $debug_cmd 263248e5ce07Smrg 2633c27c18e8Smrg save_ifs=$IFS; IFS='~' 2634c27c18e8Smrg for cmd in $1; do 263548e5ce07Smrg IFS=$sp$nl 26360eb1301bSmrg eval cmd=\"$cmd\" 263748e5ce07Smrg IFS=$save_ifs 2638c27c18e8Smrg func_show_eval "$cmd" "${2-:}" 2639c27c18e8Smrg done 2640c27c18e8Smrg IFS=$save_ifs 2641c27c18e8Smrg} 2642c27c18e8Smrg 2643c27c18e8Smrg 2644c27c18e8Smrg# func_source file 2645c27c18e8Smrg# Source FILE, adding directory component if necessary. 2646c27c18e8Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 2647c27c18e8Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2648c27c18e8Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 264948e5ce07Smrg# 'FILE.' does not work on cygwin managed mounts. 2650c27c18e8Smrgfunc_source () 2651c27c18e8Smrg{ 265248e5ce07Smrg $debug_cmd 265348e5ce07Smrg 2654c27c18e8Smrg case $1 in 2655c27c18e8Smrg */* | *\\*) . "$1" ;; 2656c27c18e8Smrg *) . "./$1" ;; 2657c27c18e8Smrg esac 2658c27c18e8Smrg} 2659c27c18e8Smrg 2660c27c18e8Smrg 2661b789ec8aSmrg# func_resolve_sysroot PATH 2662b789ec8aSmrg# Replace a leading = in PATH with a sysroot. Store the result into 2663b789ec8aSmrg# func_resolve_sysroot_result 2664b789ec8aSmrgfunc_resolve_sysroot () 2665b789ec8aSmrg{ 2666b789ec8aSmrg func_resolve_sysroot_result=$1 2667b789ec8aSmrg case $func_resolve_sysroot_result in 2668b789ec8aSmrg =*) 2669b789ec8aSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 2670b789ec8aSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2671b789ec8aSmrg ;; 2672b789ec8aSmrg esac 2673b789ec8aSmrg} 2674b789ec8aSmrg 2675b789ec8aSmrg# func_replace_sysroot PATH 2676b789ec8aSmrg# If PATH begins with the sysroot, replace it with = and 2677b789ec8aSmrg# store the result into func_replace_sysroot_result. 2678b789ec8aSmrgfunc_replace_sysroot () 2679b789ec8aSmrg{ 268048e5ce07Smrg case $lt_sysroot:$1 in 2681b789ec8aSmrg ?*:"$lt_sysroot"*) 2682b789ec8aSmrg func_stripname "$lt_sysroot" '' "$1" 268348e5ce07Smrg func_replace_sysroot_result='='$func_stripname_result 2684b789ec8aSmrg ;; 2685b789ec8aSmrg *) 2686b789ec8aSmrg # Including no sysroot. 2687b789ec8aSmrg func_replace_sysroot_result=$1 2688b789ec8aSmrg ;; 2689b789ec8aSmrg esac 2690b789ec8aSmrg} 2691b789ec8aSmrg 2692c27c18e8Smrg# func_infer_tag arg 2693c27c18e8Smrg# Infer tagged configuration to use if any are available and 2694c27c18e8Smrg# if one wasn't chosen via the "--tag" command line option. 2695c27c18e8Smrg# Only attempt this if the compiler in the base compile 2696c27c18e8Smrg# command doesn't match the default compiler. 2697c27c18e8Smrg# arg is usually of the form 'gcc ...' 2698c27c18e8Smrgfunc_infer_tag () 2699c27c18e8Smrg{ 270048e5ce07Smrg $debug_cmd 270148e5ce07Smrg 2702c27c18e8Smrg if test -n "$available_tags" && test -z "$tagname"; then 2703c27c18e8Smrg CC_quoted= 2704c27c18e8Smrg for arg in $CC; do 2705b789ec8aSmrg func_append_quoted CC_quoted "$arg" 2706c27c18e8Smrg done 270737eb1ca1Smrg CC_expanded=`func_echo_all $CC` 270837eb1ca1Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2709c27c18e8Smrg case $@ in 2710c27c18e8Smrg # Blanks in the command may have been stripped by the calling shell, 2711c27c18e8Smrg # but not from the CC environment variable when configure was run. 271237eb1ca1Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 271337eb1ca1Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2714c27c18e8Smrg # Blanks at the start of $base_compile will cause this to fail 2715c27c18e8Smrg # if we don't check for them as well. 2716c27c18e8Smrg *) 2717c27c18e8Smrg for z in $available_tags; do 2718c27c18e8Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2719c27c18e8Smrg # Evaluate the configuration. 272048e5ce07Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2721c27c18e8Smrg CC_quoted= 2722c27c18e8Smrg for arg in $CC; do 2723c27c18e8Smrg # Double-quote args containing other shell metacharacters. 2724b789ec8aSmrg func_append_quoted CC_quoted "$arg" 2725c27c18e8Smrg done 272637eb1ca1Smrg CC_expanded=`func_echo_all $CC` 272737eb1ca1Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2728c27c18e8Smrg case "$@ " in 272937eb1ca1Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 273037eb1ca1Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2731c27c18e8Smrg # The compiler in the base compile command matches 2732c27c18e8Smrg # the one in the tagged configuration. 2733c27c18e8Smrg # Assume this is the tagged configuration we want. 2734c27c18e8Smrg tagname=$z 2735c27c18e8Smrg break 2736c27c18e8Smrg ;; 2737c27c18e8Smrg esac 2738c27c18e8Smrg fi 2739c27c18e8Smrg done 2740c27c18e8Smrg # If $tagname still isn't set, then no tagged configuration 2741c27c18e8Smrg # was found and let the user know that the "--tag" command 2742c27c18e8Smrg # line option must be used. 2743c27c18e8Smrg if test -z "$tagname"; then 2744c27c18e8Smrg func_echo "unable to infer tagged configuration" 274548e5ce07Smrg func_fatal_error "specify a tag with '--tag'" 2746c27c18e8Smrg# else 2747c27c18e8Smrg# func_verbose "using $tagname tagged configuration" 2748c27c18e8Smrg fi 2749c27c18e8Smrg ;; 2750c27c18e8Smrg esac 2751c27c18e8Smrg fi 2752c27c18e8Smrg} 2753c27c18e8Smrg 2754c27c18e8Smrg 2755c27c18e8Smrg 2756b789ec8aSmrg# func_write_libtool_object output_name pic_name nonpic_name 2757b789ec8aSmrg# Create a libtool object file (analogous to a ".la" file), 2758b789ec8aSmrg# but don't create it if we're doing a dry run. 2759b789ec8aSmrgfunc_write_libtool_object () 2760b789ec8aSmrg{ 276148e5ce07Smrg write_libobj=$1 276248e5ce07Smrg if test yes = "$build_libtool_libs"; then 276348e5ce07Smrg write_lobj=\'$2\' 2764b789ec8aSmrg else 2765b789ec8aSmrg write_lobj=none 2766b789ec8aSmrg fi 2767b789ec8aSmrg 276848e5ce07Smrg if test yes = "$build_old_libs"; then 276948e5ce07Smrg write_oldobj=\'$3\' 2770b789ec8aSmrg else 2771b789ec8aSmrg write_oldobj=none 2772b789ec8aSmrg fi 2773b789ec8aSmrg 2774b789ec8aSmrg $opt_dry_run || { 2775b789ec8aSmrg cat >${write_libobj}T <<EOF 2776b789ec8aSmrg# $write_libobj - a libtool object file 277748e5ce07Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2778b789ec8aSmrg# 2779b789ec8aSmrg# Please DO NOT delete this file! 2780b789ec8aSmrg# It is necessary for linking the library. 2781b789ec8aSmrg 2782b789ec8aSmrg# Name of the PIC object. 2783b789ec8aSmrgpic_object=$write_lobj 2784b789ec8aSmrg 2785b789ec8aSmrg# Name of the non-PIC object 2786b789ec8aSmrgnon_pic_object=$write_oldobj 2787b789ec8aSmrg 2788b789ec8aSmrgEOF 278948e5ce07Smrg $MV "${write_libobj}T" "$write_libobj" 2790b789ec8aSmrg } 2791b789ec8aSmrg} 2792b789ec8aSmrg 2793b789ec8aSmrg 2794b789ec8aSmrg################################################## 2795b789ec8aSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 2796b789ec8aSmrg################################################## 2797b789ec8aSmrg 2798b789ec8aSmrg# func_convert_core_file_wine_to_w32 ARG 2799b789ec8aSmrg# Helper function used by file name conversion functions when $build is *nix, 2800b789ec8aSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 2801b789ec8aSmrg# correctly configured wine environment available, with the winepath program 2802b789ec8aSmrg# in $build's $PATH. 2803b789ec8aSmrg# 2804b789ec8aSmrg# ARG is the $build file name to be converted to w32 format. 2805b789ec8aSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 2806b789ec8aSmrg# be empty on error (or when ARG is empty) 2807b789ec8aSmrgfunc_convert_core_file_wine_to_w32 () 2808b789ec8aSmrg{ 280948e5ce07Smrg $debug_cmd 281048e5ce07Smrg 281148e5ce07Smrg func_convert_core_file_wine_to_w32_result=$1 2812b789ec8aSmrg if test -n "$1"; then 2813b789ec8aSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 2814b789ec8aSmrg # are forced to check the contents of stdout. On the other hand, if the 2815b789ec8aSmrg # command is not found, the shell will set an exit code of 127 and print 2816b789ec8aSmrg # *an error message* to stdout. So we must check for both error code of 2817b789ec8aSmrg # zero AND non-empty stdout, which explains the odd construction: 2818b789ec8aSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 281948e5ce07Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 2820b789ec8aSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 282148e5ce07Smrg $SED -e "$sed_naive_backslashify"` 2822b789ec8aSmrg else 2823b789ec8aSmrg func_convert_core_file_wine_to_w32_result= 2824b789ec8aSmrg fi 2825b789ec8aSmrg fi 2826b789ec8aSmrg} 2827b789ec8aSmrg# end: func_convert_core_file_wine_to_w32 2828b789ec8aSmrg 2829b789ec8aSmrg 2830b789ec8aSmrg# func_convert_core_path_wine_to_w32 ARG 2831b789ec8aSmrg# Helper function used by path conversion functions when $build is *nix, and 2832b789ec8aSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 2833b789ec8aSmrg# configured wine environment available, with the winepath program in $build's 2834b789ec8aSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 2835b789ec8aSmrg# 2836b789ec8aSmrg# ARG is path to be converted from $build format to win32. 2837b789ec8aSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 2838b789ec8aSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 2839b789ec8aSmrg# are convertible, then the result may be empty. 2840b789ec8aSmrgfunc_convert_core_path_wine_to_w32 () 2841b789ec8aSmrg{ 284248e5ce07Smrg $debug_cmd 284348e5ce07Smrg 2844b789ec8aSmrg # unfortunately, winepath doesn't convert paths, only file names 284548e5ce07Smrg func_convert_core_path_wine_to_w32_result= 2846b789ec8aSmrg if test -n "$1"; then 2847b789ec8aSmrg oldIFS=$IFS 2848b789ec8aSmrg IFS=: 2849b789ec8aSmrg for func_convert_core_path_wine_to_w32_f in $1; do 2850b789ec8aSmrg IFS=$oldIFS 2851b789ec8aSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 285248e5ce07Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 2853b789ec8aSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 285448e5ce07Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 2855b789ec8aSmrg else 2856b789ec8aSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 2857b789ec8aSmrg fi 2858b789ec8aSmrg fi 2859b789ec8aSmrg done 2860b789ec8aSmrg IFS=$oldIFS 2861b789ec8aSmrg fi 2862b789ec8aSmrg} 2863b789ec8aSmrg# end: func_convert_core_path_wine_to_w32 2864b789ec8aSmrg 2865b789ec8aSmrg 2866b789ec8aSmrg# func_cygpath ARGS... 2867b789ec8aSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 2868b789ec8aSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 2869b789ec8aSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 2870b789ec8aSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 2871b789ec8aSmrg# file name or path is assumed to be in w32 format, as previously converted 2872b789ec8aSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 2873b789ec8aSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 2874b789ec8aSmrg# Cygwin format). Returns an empty string on error. 2875b789ec8aSmrg# 2876b789ec8aSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 2877b789ec8aSmrg# be converted. 2878b789ec8aSmrg# 2879b789ec8aSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 2880b789ec8aSmrg# environment variable; do not put it in $PATH. 2881b789ec8aSmrgfunc_cygpath () 2882b789ec8aSmrg{ 288348e5ce07Smrg $debug_cmd 288448e5ce07Smrg 2885b789ec8aSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 2886b789ec8aSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 2887b789ec8aSmrg if test "$?" -ne 0; then 2888b789ec8aSmrg # on failure, ensure result is empty 2889b789ec8aSmrg func_cygpath_result= 2890b789ec8aSmrg fi 2891b789ec8aSmrg else 2892b789ec8aSmrg func_cygpath_result= 289348e5ce07Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 2894b789ec8aSmrg fi 2895b789ec8aSmrg} 2896b789ec8aSmrg#end: func_cygpath 2897b789ec8aSmrg 2898b789ec8aSmrg 2899b789ec8aSmrg# func_convert_core_msys_to_w32 ARG 2900b789ec8aSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 2901b789ec8aSmrg# result in func_convert_core_msys_to_w32_result. 2902b789ec8aSmrgfunc_convert_core_msys_to_w32 () 2903b789ec8aSmrg{ 290448e5ce07Smrg $debug_cmd 290548e5ce07Smrg 2906b789ec8aSmrg # awkward: cmd appends spaces to result 2907b789ec8aSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 290848e5ce07Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 2909b789ec8aSmrg} 2910b789ec8aSmrg#end: func_convert_core_msys_to_w32 2911b789ec8aSmrg 2912b789ec8aSmrg 2913b789ec8aSmrg# func_convert_file_check ARG1 ARG2 2914b789ec8aSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 2915b789ec8aSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 2916b789ec8aSmrg# func_to_host_file_result to ARG1). 2917b789ec8aSmrgfunc_convert_file_check () 2918b789ec8aSmrg{ 291948e5ce07Smrg $debug_cmd 292048e5ce07Smrg 292148e5ce07Smrg if test -z "$2" && test -n "$1"; then 2922b789ec8aSmrg func_error "Could not determine host file name corresponding to" 292348e5ce07Smrg func_error " '$1'" 2924b789ec8aSmrg func_error "Continuing, but uninstalled executables may not work." 2925b789ec8aSmrg # Fallback: 292648e5ce07Smrg func_to_host_file_result=$1 2927b789ec8aSmrg fi 2928b789ec8aSmrg} 2929b789ec8aSmrg# end func_convert_file_check 2930b789ec8aSmrg 2931b789ec8aSmrg 2932b789ec8aSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 2933b789ec8aSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 2934b789ec8aSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 2935b789ec8aSmrg# func_to_host_file_result to a simplistic fallback value (see below). 2936b789ec8aSmrgfunc_convert_path_check () 2937b789ec8aSmrg{ 293848e5ce07Smrg $debug_cmd 293948e5ce07Smrg 2940b789ec8aSmrg if test -z "$4" && test -n "$3"; then 2941b789ec8aSmrg func_error "Could not determine the host path corresponding to" 294248e5ce07Smrg func_error " '$3'" 2943b789ec8aSmrg func_error "Continuing, but uninstalled executables may not work." 2944b789ec8aSmrg # Fallback. This is a deliberately simplistic "conversion" and 2945b789ec8aSmrg # should not be "improved". See libtool.info. 2946b789ec8aSmrg if test "x$1" != "x$2"; then 2947b789ec8aSmrg lt_replace_pathsep_chars="s|$1|$2|g" 2948b789ec8aSmrg func_to_host_path_result=`echo "$3" | 2949b789ec8aSmrg $SED -e "$lt_replace_pathsep_chars"` 2950b789ec8aSmrg else 295148e5ce07Smrg func_to_host_path_result=$3 2952b789ec8aSmrg fi 2953b789ec8aSmrg fi 2954b789ec8aSmrg} 2955b789ec8aSmrg# end func_convert_path_check 2956b789ec8aSmrg 2957b789ec8aSmrg 2958b789ec8aSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 2959b789ec8aSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 2960b789ec8aSmrg# and appending REPL if ORIG matches BACKPAT. 2961b789ec8aSmrgfunc_convert_path_front_back_pathsep () 2962b789ec8aSmrg{ 296348e5ce07Smrg $debug_cmd 296448e5ce07Smrg 2965b789ec8aSmrg case $4 in 296648e5ce07Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 2967b789ec8aSmrg ;; 2968b789ec8aSmrg esac 2969b789ec8aSmrg case $4 in 2970b789ec8aSmrg $2 ) func_append func_to_host_path_result "$3" 2971b789ec8aSmrg ;; 2972b789ec8aSmrg esac 2973b789ec8aSmrg} 2974b789ec8aSmrg# end func_convert_path_front_back_pathsep 2975b789ec8aSmrg 2976b789ec8aSmrg 2977b789ec8aSmrg################################################## 2978b789ec8aSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 2979b789ec8aSmrg################################################## 298048e5ce07Smrg# invoked via '$to_host_file_cmd ARG' 2981b789ec8aSmrg# 2982b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format. 2983b789ec8aSmrg# Result will be available in $func_to_host_file_result. 2984b789ec8aSmrg 2985b789ec8aSmrg 2986b789ec8aSmrg# func_to_host_file ARG 2987b789ec8aSmrg# Converts the file name ARG from $build format to $host format. Return result 2988b789ec8aSmrg# in func_to_host_file_result. 2989b789ec8aSmrgfunc_to_host_file () 2990b789ec8aSmrg{ 299148e5ce07Smrg $debug_cmd 299248e5ce07Smrg 2993b789ec8aSmrg $to_host_file_cmd "$1" 2994b789ec8aSmrg} 2995b789ec8aSmrg# end func_to_host_file 2996b789ec8aSmrg 2997b789ec8aSmrg 2998b789ec8aSmrg# func_to_tool_file ARG LAZY 2999b789ec8aSmrg# converts the file name ARG from $build format to toolchain format. Return 3000b789ec8aSmrg# result in func_to_tool_file_result. If the conversion in use is listed 3001b789ec8aSmrg# in (the comma separated) LAZY, no conversion takes place. 3002b789ec8aSmrgfunc_to_tool_file () 3003b789ec8aSmrg{ 300448e5ce07Smrg $debug_cmd 300548e5ce07Smrg 3006b789ec8aSmrg case ,$2, in 3007b789ec8aSmrg *,"$to_tool_file_cmd",*) 3008b789ec8aSmrg func_to_tool_file_result=$1 3009b789ec8aSmrg ;; 3010b789ec8aSmrg *) 3011b789ec8aSmrg $to_tool_file_cmd "$1" 3012b789ec8aSmrg func_to_tool_file_result=$func_to_host_file_result 3013b789ec8aSmrg ;; 3014b789ec8aSmrg esac 3015b789ec8aSmrg} 3016b789ec8aSmrg# end func_to_tool_file 3017b789ec8aSmrg 3018b789ec8aSmrg 3019b789ec8aSmrg# func_convert_file_noop ARG 3020b789ec8aSmrg# Copy ARG to func_to_host_file_result. 3021b789ec8aSmrgfunc_convert_file_noop () 3022b789ec8aSmrg{ 302348e5ce07Smrg func_to_host_file_result=$1 3024b789ec8aSmrg} 3025b789ec8aSmrg# end func_convert_file_noop 3026b789ec8aSmrg 3027b789ec8aSmrg 3028b789ec8aSmrg# func_convert_file_msys_to_w32 ARG 3029b789ec8aSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3030b789ec8aSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 3031b789ec8aSmrg# func_to_host_file_result. 3032b789ec8aSmrgfunc_convert_file_msys_to_w32 () 3033b789ec8aSmrg{ 303448e5ce07Smrg $debug_cmd 303548e5ce07Smrg 303648e5ce07Smrg func_to_host_file_result=$1 3037b789ec8aSmrg if test -n "$1"; then 3038b789ec8aSmrg func_convert_core_msys_to_w32 "$1" 303948e5ce07Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 3040b789ec8aSmrg fi 3041b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3042b789ec8aSmrg} 3043b789ec8aSmrg# end func_convert_file_msys_to_w32 3044b789ec8aSmrg 3045b789ec8aSmrg 3046b789ec8aSmrg# func_convert_file_cygwin_to_w32 ARG 3047b789ec8aSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3048b789ec8aSmrg# func_to_host_file_result. 3049b789ec8aSmrgfunc_convert_file_cygwin_to_w32 () 3050b789ec8aSmrg{ 305148e5ce07Smrg $debug_cmd 305248e5ce07Smrg 305348e5ce07Smrg func_to_host_file_result=$1 3054b789ec8aSmrg if test -n "$1"; then 3055b789ec8aSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3056b789ec8aSmrg # LT_CYGPATH in this case. 3057b789ec8aSmrg func_to_host_file_result=`cygpath -m "$1"` 3058b789ec8aSmrg fi 3059b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3060b789ec8aSmrg} 3061b789ec8aSmrg# end func_convert_file_cygwin_to_w32 3062b789ec8aSmrg 3063b789ec8aSmrg 3064b789ec8aSmrg# func_convert_file_nix_to_w32 ARG 3065b789ec8aSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3066b789ec8aSmrg# and a working winepath. Returns result in func_to_host_file_result. 3067b789ec8aSmrgfunc_convert_file_nix_to_w32 () 3068b789ec8aSmrg{ 306948e5ce07Smrg $debug_cmd 307048e5ce07Smrg 307148e5ce07Smrg func_to_host_file_result=$1 3072b789ec8aSmrg if test -n "$1"; then 3073b789ec8aSmrg func_convert_core_file_wine_to_w32 "$1" 307448e5ce07Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3075b789ec8aSmrg fi 3076b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3077b789ec8aSmrg} 3078b789ec8aSmrg# end func_convert_file_nix_to_w32 3079b789ec8aSmrg 3080b789ec8aSmrg 3081b789ec8aSmrg# func_convert_file_msys_to_cygwin ARG 3082b789ec8aSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3083b789ec8aSmrg# Returns result in func_to_host_file_result. 3084b789ec8aSmrgfunc_convert_file_msys_to_cygwin () 3085b789ec8aSmrg{ 308648e5ce07Smrg $debug_cmd 308748e5ce07Smrg 308848e5ce07Smrg func_to_host_file_result=$1 3089b789ec8aSmrg if test -n "$1"; then 3090b789ec8aSmrg func_convert_core_msys_to_w32 "$1" 3091b789ec8aSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 309248e5ce07Smrg func_to_host_file_result=$func_cygpath_result 3093b789ec8aSmrg fi 3094b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3095b789ec8aSmrg} 3096b789ec8aSmrg# end func_convert_file_msys_to_cygwin 3097b789ec8aSmrg 3098b789ec8aSmrg 3099b789ec8aSmrg# func_convert_file_nix_to_cygwin ARG 3100b789ec8aSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3101b789ec8aSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3102b789ec8aSmrg# in func_to_host_file_result. 3103b789ec8aSmrgfunc_convert_file_nix_to_cygwin () 3104b789ec8aSmrg{ 310548e5ce07Smrg $debug_cmd 310648e5ce07Smrg 310748e5ce07Smrg func_to_host_file_result=$1 3108b789ec8aSmrg if test -n "$1"; then 3109b789ec8aSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3110b789ec8aSmrg func_convert_core_file_wine_to_w32 "$1" 3111b789ec8aSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 311248e5ce07Smrg func_to_host_file_result=$func_cygpath_result 3113b789ec8aSmrg fi 3114b789ec8aSmrg func_convert_file_check "$1" "$func_to_host_file_result" 3115b789ec8aSmrg} 3116b789ec8aSmrg# end func_convert_file_nix_to_cygwin 3117b789ec8aSmrg 3118b789ec8aSmrg 3119b789ec8aSmrg############################################# 3120b789ec8aSmrg# $build to $host PATH CONVERSION FUNCTIONS # 3121b789ec8aSmrg############################################# 312248e5ce07Smrg# invoked via '$to_host_path_cmd ARG' 3123b789ec8aSmrg# 3124b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format. 3125b789ec8aSmrg# The result will be available in $func_to_host_path_result. 3126b789ec8aSmrg# 3127b789ec8aSmrg# Path separators are also converted from $build format to $host format. If 3128b789ec8aSmrg# ARG begins or ends with a path separator character, it is preserved (but 3129b789ec8aSmrg# converted to $host format) on output. 3130b789ec8aSmrg# 3131b789ec8aSmrg# All path conversion functions are named using the following convention: 3132b789ec8aSmrg# file name conversion function : func_convert_file_X_to_Y () 3133b789ec8aSmrg# path conversion function : func_convert_path_X_to_Y () 3134b789ec8aSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3135b789ec8aSmrg# same. If conversion functions are added for new $build/$host combinations, 3136b789ec8aSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3137b789ec8aSmrg# will break. 3138b789ec8aSmrg 3139b789ec8aSmrg 3140b789ec8aSmrg# func_init_to_host_path_cmd 3141b789ec8aSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3142b789ec8aSmrg# appropriate value, based on the value of $to_host_file_cmd. 3143b789ec8aSmrgto_host_path_cmd= 3144b789ec8aSmrgfunc_init_to_host_path_cmd () 3145b789ec8aSmrg{ 314648e5ce07Smrg $debug_cmd 314748e5ce07Smrg 3148b789ec8aSmrg if test -z "$to_host_path_cmd"; then 3149b789ec8aSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 315048e5ce07Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 3151b789ec8aSmrg fi 3152b789ec8aSmrg} 3153b789ec8aSmrg 3154b789ec8aSmrg 3155b789ec8aSmrg# func_to_host_path ARG 3156b789ec8aSmrg# Converts the path ARG from $build format to $host format. Return result 3157b789ec8aSmrg# in func_to_host_path_result. 3158b789ec8aSmrgfunc_to_host_path () 3159b789ec8aSmrg{ 316048e5ce07Smrg $debug_cmd 316148e5ce07Smrg 3162b789ec8aSmrg func_init_to_host_path_cmd 3163b789ec8aSmrg $to_host_path_cmd "$1" 3164b789ec8aSmrg} 3165b789ec8aSmrg# end func_to_host_path 3166b789ec8aSmrg 3167b789ec8aSmrg 3168b789ec8aSmrg# func_convert_path_noop ARG 3169b789ec8aSmrg# Copy ARG to func_to_host_path_result. 3170b789ec8aSmrgfunc_convert_path_noop () 3171b789ec8aSmrg{ 317248e5ce07Smrg func_to_host_path_result=$1 3173b789ec8aSmrg} 3174b789ec8aSmrg# end func_convert_path_noop 3175b789ec8aSmrg 3176b789ec8aSmrg 3177b789ec8aSmrg# func_convert_path_msys_to_w32 ARG 3178b789ec8aSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3179b789ec8aSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 3180b789ec8aSmrg# func_to_host_path_result. 3181b789ec8aSmrgfunc_convert_path_msys_to_w32 () 3182c27c18e8Smrg{ 318348e5ce07Smrg $debug_cmd 318448e5ce07Smrg 318548e5ce07Smrg func_to_host_path_result=$1 3186b789ec8aSmrg if test -n "$1"; then 3187b789ec8aSmrg # Remove leading and trailing path separator characters from ARG. MSYS 3188b789ec8aSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3189b789ec8aSmrg # and winepath ignores them completely. 3190b789ec8aSmrg func_stripname : : "$1" 3191b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 3192b789ec8aSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 319348e5ce07Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3194b789ec8aSmrg func_convert_path_check : ";" \ 3195b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3196b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3197b789ec8aSmrg fi 3198b789ec8aSmrg} 3199b789ec8aSmrg# end func_convert_path_msys_to_w32 3200c27c18e8Smrg 3201c27c18e8Smrg 3202b789ec8aSmrg# func_convert_path_cygwin_to_w32 ARG 3203b789ec8aSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 3204b789ec8aSmrg# func_to_host_file_result. 3205b789ec8aSmrgfunc_convert_path_cygwin_to_w32 () 3206b789ec8aSmrg{ 320748e5ce07Smrg $debug_cmd 320848e5ce07Smrg 320948e5ce07Smrg func_to_host_path_result=$1 3210b789ec8aSmrg if test -n "$1"; then 3211b789ec8aSmrg # See func_convert_path_msys_to_w32: 3212b789ec8aSmrg func_stripname : : "$1" 3213b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 3214b789ec8aSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3215b789ec8aSmrg func_convert_path_check : ";" \ 3216b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3217b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3218b789ec8aSmrg fi 3219b789ec8aSmrg} 3220b789ec8aSmrg# end func_convert_path_cygwin_to_w32 3221c27c18e8Smrg 3222c27c18e8Smrg 3223b789ec8aSmrg# func_convert_path_nix_to_w32 ARG 3224b789ec8aSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3225b789ec8aSmrg# a working winepath. Returns result in func_to_host_file_result. 3226b789ec8aSmrgfunc_convert_path_nix_to_w32 () 3227b789ec8aSmrg{ 322848e5ce07Smrg $debug_cmd 322948e5ce07Smrg 323048e5ce07Smrg func_to_host_path_result=$1 3231b789ec8aSmrg if test -n "$1"; then 3232b789ec8aSmrg # See func_convert_path_msys_to_w32: 3233b789ec8aSmrg func_stripname : : "$1" 3234b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 3235b789ec8aSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 323648e5ce07Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3237b789ec8aSmrg func_convert_path_check : ";" \ 3238b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3239b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3240b789ec8aSmrg fi 3241b789ec8aSmrg} 3242b789ec8aSmrg# end func_convert_path_nix_to_w32 3243c27c18e8Smrg 3244b789ec8aSmrg 3245b789ec8aSmrg# func_convert_path_msys_to_cygwin ARG 3246b789ec8aSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3247b789ec8aSmrg# Returns result in func_to_host_file_result. 3248b789ec8aSmrgfunc_convert_path_msys_to_cygwin () 3249b789ec8aSmrg{ 325048e5ce07Smrg $debug_cmd 325148e5ce07Smrg 325248e5ce07Smrg func_to_host_path_result=$1 3253b789ec8aSmrg if test -n "$1"; then 3254b789ec8aSmrg # See func_convert_path_msys_to_w32: 3255b789ec8aSmrg func_stripname : : "$1" 3256b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 3257b789ec8aSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3258b789ec8aSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 325948e5ce07Smrg func_to_host_path_result=$func_cygpath_result 3260b789ec8aSmrg func_convert_path_check : : \ 3261b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3262b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3263b789ec8aSmrg fi 3264b789ec8aSmrg} 3265b789ec8aSmrg# end func_convert_path_msys_to_cygwin 3266b789ec8aSmrg 3267b789ec8aSmrg 3268b789ec8aSmrg# func_convert_path_nix_to_cygwin ARG 3269b789ec8aSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3270b789ec8aSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3271b789ec8aSmrg# func_to_host_file_result. 3272b789ec8aSmrgfunc_convert_path_nix_to_cygwin () 3273b789ec8aSmrg{ 327448e5ce07Smrg $debug_cmd 327548e5ce07Smrg 327648e5ce07Smrg func_to_host_path_result=$1 3277b789ec8aSmrg if test -n "$1"; then 3278b789ec8aSmrg # Remove leading and trailing path separator characters from 3279b789ec8aSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 3280b789ec8aSmrg # into '.;' and ';.', and winepath ignores them completely. 3281b789ec8aSmrg func_stripname : : "$1" 3282b789ec8aSmrg func_to_host_path_tmp1=$func_stripname_result 3283b789ec8aSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3284b789ec8aSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 328548e5ce07Smrg func_to_host_path_result=$func_cygpath_result 3286b789ec8aSmrg func_convert_path_check : : \ 3287b789ec8aSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3288b789ec8aSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3289b789ec8aSmrg fi 3290c27c18e8Smrg} 3291b789ec8aSmrg# end func_convert_path_nix_to_cygwin 3292b789ec8aSmrg 3293c27c18e8Smrg 329448e5ce07Smrg# func_dll_def_p FILE 329548e5ce07Smrg# True iff FILE is a Windows DLL '.def' file. 329648e5ce07Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 329748e5ce07Smrgfunc_dll_def_p () 329848e5ce07Smrg{ 329948e5ce07Smrg $debug_cmd 330048e5ce07Smrg 330148e5ce07Smrg func_dll_def_p_tmp=`$SED -n \ 330248e5ce07Smrg -e 's/^[ ]*//' \ 330348e5ce07Smrg -e '/^\(;.*\)*$/d' \ 330448e5ce07Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 330548e5ce07Smrg -e q \ 330648e5ce07Smrg "$1"` 330748e5ce07Smrg test DEF = "$func_dll_def_p_tmp" 330848e5ce07Smrg} 330948e5ce07Smrg 331048e5ce07Smrg 3311c27c18e8Smrg# func_mode_compile arg... 3312c27c18e8Smrgfunc_mode_compile () 3313c27c18e8Smrg{ 331448e5ce07Smrg $debug_cmd 331548e5ce07Smrg 3316c27c18e8Smrg # Get the compilation command and the source file. 3317c27c18e8Smrg base_compile= 331848e5ce07Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3319c27c18e8Smrg suppress_opt=yes 3320c27c18e8Smrg suppress_output= 3321c27c18e8Smrg arg_mode=normal 3322c27c18e8Smrg libobj= 3323c27c18e8Smrg later= 3324c27c18e8Smrg pie_flag= 3325c27c18e8Smrg 3326c27c18e8Smrg for arg 3327c27c18e8Smrg do 3328c27c18e8Smrg case $arg_mode in 3329c27c18e8Smrg arg ) 3330c27c18e8Smrg # do not "continue". Instead, add this to base_compile 333148e5ce07Smrg lastarg=$arg 3332c27c18e8Smrg arg_mode=normal 3333c27c18e8Smrg ;; 3334c27c18e8Smrg 3335c27c18e8Smrg target ) 333648e5ce07Smrg libobj=$arg 3337c27c18e8Smrg arg_mode=normal 3338c27c18e8Smrg continue 3339c27c18e8Smrg ;; 3340c27c18e8Smrg 3341c27c18e8Smrg normal ) 3342c27c18e8Smrg # Accept any command-line options. 3343c27c18e8Smrg case $arg in 3344c27c18e8Smrg -o) 3345c27c18e8Smrg test -n "$libobj" && \ 334648e5ce07Smrg func_fatal_error "you cannot specify '-o' more than once" 3347c27c18e8Smrg arg_mode=target 3348c27c18e8Smrg continue 3349c27c18e8Smrg ;; 3350c27c18e8Smrg 3351c27c18e8Smrg -pie | -fpie | -fPIE) 3352b789ec8aSmrg func_append pie_flag " $arg" 3353c27c18e8Smrg continue 3354c27c18e8Smrg ;; 3355c27c18e8Smrg 3356c27c18e8Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 3357b789ec8aSmrg func_append later " $arg" 3358c27c18e8Smrg continue 3359c27c18e8Smrg ;; 3360c27c18e8Smrg 3361c27c18e8Smrg -no-suppress) 3362c43cc173Smrg suppress_opt=no 3363c43cc173Smrg continue 3364c43cc173Smrg ;; 3365c43cc173Smrg 3366c43cc173Smrg -Xcompiler) 3367c43cc173Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 3368c43cc173Smrg continue # The current "srcfile" will either be retained or 3369c43cc173Smrg ;; # replaced later. I would guess that would be a bug. 3370c43cc173Smrg 3371c43cc173Smrg -Wc,*) 3372c27c18e8Smrg func_stripname '-Wc,' '' "$arg" 3373c27c18e8Smrg args=$func_stripname_result 3374c43cc173Smrg lastarg= 337548e5ce07Smrg save_ifs=$IFS; IFS=, 3376c27c18e8Smrg for arg in $args; do 337748e5ce07Smrg IFS=$save_ifs 3378b789ec8aSmrg func_append_quoted lastarg "$arg" 3379c43cc173Smrg done 338048e5ce07Smrg IFS=$save_ifs 3381c27c18e8Smrg func_stripname ' ' '' "$lastarg" 3382c27c18e8Smrg lastarg=$func_stripname_result 3383c43cc173Smrg 3384c43cc173Smrg # Add the arguments to base_compile. 3385b789ec8aSmrg func_append base_compile " $lastarg" 3386c43cc173Smrg continue 3387c43cc173Smrg ;; 3388c43cc173Smrg 3389c27c18e8Smrg *) 3390c43cc173Smrg # Accept the current argument as the source file. 3391c43cc173Smrg # The previous "srcfile" becomes the current argument. 3392c43cc173Smrg # 339348e5ce07Smrg lastarg=$srcfile 339448e5ce07Smrg srcfile=$arg 3395c43cc173Smrg ;; 3396c43cc173Smrg esac # case $arg 3397c43cc173Smrg ;; 3398c43cc173Smrg esac # case $arg_mode 3399c43cc173Smrg 3400c43cc173Smrg # Aesthetically quote the previous argument. 3401b789ec8aSmrg func_append_quoted base_compile "$lastarg" 3402c43cc173Smrg done # for arg 3403c43cc173Smrg 3404c43cc173Smrg case $arg_mode in 3405c43cc173Smrg arg) 3406c27c18e8Smrg func_fatal_error "you must specify an argument for -Xcompile" 3407c43cc173Smrg ;; 3408c43cc173Smrg target) 340948e5ce07Smrg func_fatal_error "you must specify a target with '-o'" 3410c43cc173Smrg ;; 3411c43cc173Smrg *) 3412c43cc173Smrg # Get the name of the library object. 3413c27c18e8Smrg test -z "$libobj" && { 3414c27c18e8Smrg func_basename "$srcfile" 341548e5ce07Smrg libobj=$func_basename_result 3416c27c18e8Smrg } 3417c43cc173Smrg ;; 3418c43cc173Smrg esac 3419c43cc173Smrg 3420c43cc173Smrg # Recognize several different file suffixes. 3421c43cc173Smrg # If the user specifies -o file.o, it is replaced with file.lo 3422c43cc173Smrg case $libobj in 3423c27c18e8Smrg *.[cCFSifmso] | \ 3424c27c18e8Smrg *.ada | *.adb | *.ads | *.asm | \ 3425c27c18e8Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3426f1ee322dSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3427c27c18e8Smrg func_xform "$libobj" 3428c27c18e8Smrg libobj=$func_xform_result 3429c27c18e8Smrg ;; 3430c43cc173Smrg esac 3431c43cc173Smrg 3432c43cc173Smrg case $libobj in 3433c27c18e8Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3434c43cc173Smrg *) 343548e5ce07Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 3436c43cc173Smrg ;; 3437c43cc173Smrg esac 3438c43cc173Smrg 3439c43cc173Smrg func_infer_tag $base_compile 3440c43cc173Smrg 3441c43cc173Smrg for arg in $later; do 3442c43cc173Smrg case $arg in 3443c27c18e8Smrg -shared) 344448e5ce07Smrg test yes = "$build_libtool_libs" \ 344548e5ce07Smrg || func_fatal_configuration "cannot build a shared library" 3446c27c18e8Smrg build_old_libs=no 3447c27c18e8Smrg continue 3448c27c18e8Smrg ;; 3449c27c18e8Smrg 3450c43cc173Smrg -static) 3451c27c18e8Smrg build_libtool_libs=no 3452c43cc173Smrg build_old_libs=yes 3453c43cc173Smrg continue 3454c43cc173Smrg ;; 3455c43cc173Smrg 3456c43cc173Smrg -prefer-pic) 3457c43cc173Smrg pic_mode=yes 3458c43cc173Smrg continue 3459c43cc173Smrg ;; 3460c43cc173Smrg 3461c43cc173Smrg -prefer-non-pic) 3462c43cc173Smrg pic_mode=no 3463c43cc173Smrg continue 3464c43cc173Smrg ;; 3465c43cc173Smrg esac 3466c43cc173Smrg done 3467c43cc173Smrg 3468c27c18e8Smrg func_quote_for_eval "$libobj" 3469c27c18e8Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 3470c27c18e8Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 347148e5ce07Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3472c27c18e8Smrg func_dirname_and_basename "$obj" "/" "" 347348e5ce07Smrg objname=$func_basename_result 347448e5ce07Smrg xdir=$func_dirname_result 347548e5ce07Smrg lobj=$xdir$objdir/$objname 3476c43cc173Smrg 3477c27c18e8Smrg test -z "$base_compile" && \ 3478c27c18e8Smrg func_fatal_help "you must specify a compilation command" 3479c43cc173Smrg 3480c43cc173Smrg # Delete any leftover library objects. 348148e5ce07Smrg if test yes = "$build_old_libs"; then 3482c43cc173Smrg removelist="$obj $lobj $libobj ${libobj}T" 3483c43cc173Smrg else 3484c43cc173Smrg removelist="$lobj $libobj ${libobj}T" 3485c43cc173Smrg fi 3486c43cc173Smrg 3487c43cc173Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 3488c43cc173Smrg case $host_os in 3489c27c18e8Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 3490c43cc173Smrg pic_mode=default 3491c43cc173Smrg ;; 3492c43cc173Smrg esac 349348e5ce07Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3494c43cc173Smrg # non-PIC code in shared libraries is not supported 3495c43cc173Smrg pic_mode=default 3496c43cc173Smrg fi 3497c43cc173Smrg 3498c43cc173Smrg # Calculate the filename of the output object if compiler does 3499c43cc173Smrg # not support -o with -c 350048e5ce07Smrg if test no = "$compiler_c_o"; then 350148e5ce07Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 350248e5ce07Smrg lockfile=$output_obj.lock 3503c43cc173Smrg else 3504c43cc173Smrg output_obj= 3505c43cc173Smrg need_locks=no 3506c43cc173Smrg lockfile= 3507c43cc173Smrg fi 3508c43cc173Smrg 3509c43cc173Smrg # Lock this critical section if it is needed 3510c43cc173Smrg # We use this script file to make the link, it avoids creating a new file 351148e5ce07Smrg if test yes = "$need_locks"; then 3512c27c18e8Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3513c27c18e8Smrg func_echo "Waiting for $lockfile to be removed" 3514c43cc173Smrg sleep 2 3515c43cc173Smrg done 351648e5ce07Smrg elif test warn = "$need_locks"; then 3517c43cc173Smrg if test -f "$lockfile"; then 3518c27c18e8Smrg $ECHO "\ 3519c43cc173Smrg*** ERROR, $lockfile exists and contains: 3520c43cc173Smrg`cat $lockfile 2>/dev/null` 3521c43cc173Smrg 3522c43cc173SmrgThis indicates that another process is trying to use the same 3523c43cc173Smrgtemporary object file, and libtool could not work around it because 352448e5ce07Smrgyour compiler does not support '-c' and '-o' together. If you 3525c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 3526c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 3527c43cc173Smrgcompiler." 3528c43cc173Smrg 3529c27c18e8Smrg $opt_dry_run || $RM $removelist 3530c43cc173Smrg exit $EXIT_FAILURE 3531c43cc173Smrg fi 3532b789ec8aSmrg func_append removelist " $output_obj" 3533c27c18e8Smrg $ECHO "$srcfile" > "$lockfile" 3534c43cc173Smrg fi 3535c43cc173Smrg 3536c27c18e8Smrg $opt_dry_run || $RM $removelist 3537b789ec8aSmrg func_append removelist " $lockfile" 3538c27c18e8Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3539c27c18e8Smrg 3540b789ec8aSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3541b789ec8aSmrg srcfile=$func_to_tool_file_result 3542c27c18e8Smrg func_quote_for_eval "$srcfile" 3543c27c18e8Smrg qsrcfile=$func_quote_for_eval_result 3544c43cc173Smrg 3545c43cc173Smrg # Only build a PIC object if we are building libtool libraries. 354648e5ce07Smrg if test yes = "$build_libtool_libs"; then 3547c43cc173Smrg # Without this assignment, base_compile gets emptied. 3548c43cc173Smrg fbsd_hideous_sh_bug=$base_compile 3549c43cc173Smrg 355048e5ce07Smrg if test no != "$pic_mode"; then 3551c43cc173Smrg command="$base_compile $qsrcfile $pic_flag" 3552c43cc173Smrg else 3553c43cc173Smrg # Don't build PIC code 3554c43cc173Smrg command="$base_compile $qsrcfile" 3555c43cc173Smrg fi 3556c43cc173Smrg 3557c27c18e8Smrg func_mkdir_p "$xdir$objdir" 3558c43cc173Smrg 3559c43cc173Smrg if test -z "$output_obj"; then 3560c43cc173Smrg # Place PIC objects in $objdir 3561b789ec8aSmrg func_append command " -o $lobj" 3562c43cc173Smrg fi 3563c43cc173Smrg 3564c27c18e8Smrg func_show_eval_locale "$command" \ 3565c27c18e8Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3566c43cc173Smrg 356748e5ce07Smrg if test warn = "$need_locks" && 3568c43cc173Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3569c27c18e8Smrg $ECHO "\ 3570c43cc173Smrg*** ERROR, $lockfile contains: 3571c43cc173Smrg`cat $lockfile 2>/dev/null` 3572c43cc173Smrg 3573c43cc173Smrgbut it should contain: 3574c43cc173Smrg$srcfile 3575c43cc173Smrg 3576c43cc173SmrgThis indicates that another process is trying to use the same 3577c43cc173Smrgtemporary object file, and libtool could not work around it because 357848e5ce07Smrgyour compiler does not support '-c' and '-o' together. If you 3579c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 3580c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 3581c43cc173Smrgcompiler." 3582c43cc173Smrg 3583c27c18e8Smrg $opt_dry_run || $RM $removelist 3584c43cc173Smrg exit $EXIT_FAILURE 3585c43cc173Smrg fi 3586c43cc173Smrg 3587c43cc173Smrg # Just move the object if needed, then go on to compile the next one 3588c43cc173Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3589c27c18e8Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3590c27c18e8Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3591c43cc173Smrg fi 3592c43cc173Smrg 3593c43cc173Smrg # Allow error messages only from the first compilation. 359448e5ce07Smrg if test yes = "$suppress_opt"; then 3595c27c18e8Smrg suppress_output=' >/dev/null 2>&1' 3596c43cc173Smrg fi 3597c43cc173Smrg fi 3598c43cc173Smrg 3599c43cc173Smrg # Only build a position-dependent object if we build old libraries. 360048e5ce07Smrg if test yes = "$build_old_libs"; then 360148e5ce07Smrg if test yes != "$pic_mode"; then 3602c43cc173Smrg # Don't build PIC code 3603c27c18e8Smrg command="$base_compile $qsrcfile$pie_flag" 3604c43cc173Smrg else 3605c43cc173Smrg command="$base_compile $qsrcfile $pic_flag" 3606c43cc173Smrg fi 360748e5ce07Smrg if test yes = "$compiler_c_o"; then 3608b789ec8aSmrg func_append command " -o $obj" 3609c43cc173Smrg fi 3610c43cc173Smrg 3611c43cc173Smrg # Suppress compiler output if we already did a PIC compilation. 3612b789ec8aSmrg func_append command "$suppress_output" 3613c27c18e8Smrg func_show_eval_locale "$command" \ 3614c27c18e8Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3615c43cc173Smrg 361648e5ce07Smrg if test warn = "$need_locks" && 3617c43cc173Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3618c27c18e8Smrg $ECHO "\ 3619c43cc173Smrg*** ERROR, $lockfile contains: 3620c43cc173Smrg`cat $lockfile 2>/dev/null` 3621c43cc173Smrg 3622c43cc173Smrgbut it should contain: 3623c43cc173Smrg$srcfile 3624c43cc173Smrg 3625c43cc173SmrgThis indicates that another process is trying to use the same 3626c43cc173Smrgtemporary object file, and libtool could not work around it because 362748e5ce07Smrgyour compiler does not support '-c' and '-o' together. If you 3628c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better 3629c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better 3630c43cc173Smrgcompiler." 3631c43cc173Smrg 3632c27c18e8Smrg $opt_dry_run || $RM $removelist 3633c43cc173Smrg exit $EXIT_FAILURE 3634c43cc173Smrg fi 3635c43cc173Smrg 3636c43cc173Smrg # Just move the object if needed 3637c43cc173Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3638c27c18e8Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 3639c27c18e8Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3640c43cc173Smrg fi 3641c43cc173Smrg fi 3642c43cc173Smrg 3643c27c18e8Smrg $opt_dry_run || { 3644c27c18e8Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3645c43cc173Smrg 3646c27c18e8Smrg # Unlock the critical section if it was locked 364748e5ce07Smrg if test no != "$need_locks"; then 3648c27c18e8Smrg removelist=$lockfile 3649c27c18e8Smrg $RM "$lockfile" 3650c27c18e8Smrg fi 3651c27c18e8Smrg } 3652c43cc173Smrg 3653c43cc173Smrg exit $EXIT_SUCCESS 3654c27c18e8Smrg} 3655c43cc173Smrg 3656c27c18e8Smrg$opt_help || { 365748e5ce07Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3658c27c18e8Smrg} 3659c43cc173Smrg 3660c27c18e8Smrgfunc_mode_help () 3661c27c18e8Smrg{ 3662c27c18e8Smrg # We need to display help for each of the modes. 3663b789ec8aSmrg case $opt_mode in 3664c27c18e8Smrg "") 3665c27c18e8Smrg # Generic help is extracted from the usage comments 3666c27c18e8Smrg # at the start of this file. 3667c27c18e8Smrg func_help 3668c27c18e8Smrg ;; 3669c43cc173Smrg 3670c27c18e8Smrg clean) 3671c27c18e8Smrg $ECHO \ 3672c27c18e8Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3673c43cc173Smrg 3674c27c18e8SmrgRemove files from the build directory. 3675c43cc173Smrg 3676c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE 367748e5ce07Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3678c27c18e8Smrgto RM. 3679c43cc173Smrg 3680c27c18e8SmrgIf FILE is a libtool library, object or program, all the files associated 3681c27c18e8Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3682c27c18e8Smrg ;; 3683c43cc173Smrg 3684c27c18e8Smrg compile) 3685c27c18e8Smrg $ECHO \ 3686c27c18e8Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3687c43cc173Smrg 3688c27c18e8SmrgCompile a source file into a libtool library object. 3689c43cc173Smrg 3690c27c18e8SmrgThis mode accepts the following additional options: 3691c43cc173Smrg 3692c27c18e8Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3693c27c18e8Smrg -no-suppress do not suppress compiler output for multiple passes 369437eb1ca1Smrg -prefer-pic try to build PIC objects only 369537eb1ca1Smrg -prefer-non-pic try to build non-PIC objects only 369648e5ce07Smrg -shared do not build a '.o' file suitable for static linking 369748e5ce07Smrg -static only build a '.o' file suitable for static linking 369837eb1ca1Smrg -Wc,FLAG pass FLAG directly to the compiler 3699c43cc173Smrg 370048e5ce07SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3701c27c18e8Smrgfrom the given SOURCEFILE. 3702c43cc173Smrg 3703c27c18e8SmrgThe output file name is determined by removing the directory component from 370448e5ce07SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 370548e5ce07Smrglibrary object suffix, '.lo'." 3706c27c18e8Smrg ;; 3707c43cc173Smrg 3708c27c18e8Smrg execute) 3709c27c18e8Smrg $ECHO \ 3710c27c18e8Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3711c43cc173Smrg 3712c27c18e8SmrgAutomatically set library path, then run a program. 3713c43cc173Smrg 3714c27c18e8SmrgThis mode accepts the following additional options: 3715c43cc173Smrg 3716c27c18e8Smrg -dlopen FILE add the directory containing FILE to the library path 3717c43cc173Smrg 371848e5ce07SmrgThis mode sets the library path environment variable according to '-dlopen' 3719c27c18e8Smrgflags. 3720c43cc173Smrg 3721c27c18e8SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 3722c27c18e8Smrginto their corresponding uninstalled binary, and any of their required library 3723c27c18e8Smrgdirectories are added to the library path. 3724c43cc173Smrg 3725c27c18e8SmrgThen, COMMAND is executed, with ARGS as arguments." 3726c27c18e8Smrg ;; 3727c43cc173Smrg 3728c27c18e8Smrg finish) 3729c27c18e8Smrg $ECHO \ 3730c27c18e8Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3731c43cc173Smrg 3732c27c18e8SmrgComplete the installation of libtool libraries. 3733c43cc173Smrg 3734c27c18e8SmrgEach LIBDIR is a directory that contains libtool libraries. 3735c43cc173Smrg 3736c27c18e8SmrgThe commands that this mode executes may require superuser privileges. Use 373748e5ce07Smrgthe '--dry-run' option if you just want to see what would be executed." 3738c27c18e8Smrg ;; 3739c43cc173Smrg 3740c27c18e8Smrg install) 3741c27c18e8Smrg $ECHO \ 3742c27c18e8Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3743c43cc173Smrg 3744c27c18e8SmrgInstall executables or libraries. 3745c43cc173Smrg 3746c27c18e8SmrgINSTALL-COMMAND is the installation command. The first component should be 374748e5ce07Smrgeither the 'install' or 'cp' program. 3748c43cc173Smrg 3749c27c18e8SmrgThe following components of INSTALL-COMMAND are treated specially: 3750c43cc173Smrg 375137eb1ca1Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3752c43cc173Smrg 3753c27c18e8SmrgThe rest of the components are interpreted as arguments to that command (only 3754c27c18e8SmrgBSD-compatible install options are recognized)." 3755c27c18e8Smrg ;; 3756c43cc173Smrg 3757c27c18e8Smrg link) 3758c27c18e8Smrg $ECHO \ 3759c27c18e8Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3760c43cc173Smrg 3761c27c18e8SmrgLink object files or libraries together to form another library, or to 3762c27c18e8Smrgcreate an executable program. 3763c43cc173Smrg 3764c27c18e8SmrgLINK-COMMAND is a command using the C compiler that you would use to create 3765c27c18e8Smrga program from several object files. 3766c43cc173Smrg 3767c27c18e8SmrgThe following components of LINK-COMMAND are treated specially: 3768c43cc173Smrg 3769c27c18e8Smrg -all-static do not do any dynamic linking at all 3770c27c18e8Smrg -avoid-version do not add a version suffix if possible 377137eb1ca1Smrg -bindir BINDIR specify path to binaries directory (for systems where 377237eb1ca1Smrg libraries must be found in the PATH setting at runtime) 377348e5ce07Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3774c27c18e8Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3775c27c18e8Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3776c27c18e8Smrg -export-symbols SYMFILE 3777c27c18e8Smrg try to export only the symbols listed in SYMFILE 3778c27c18e8Smrg -export-symbols-regex REGEX 3779c27c18e8Smrg try to export only the symbols matching REGEX 3780c27c18e8Smrg -LLIBDIR search LIBDIR for required installed libraries 3781c27c18e8Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 3782c27c18e8Smrg -module build a library that can dlopened 3783c27c18e8Smrg -no-fast-install disable the fast-install mode 3784c27c18e8Smrg -no-install link a not-installable executable 3785c27c18e8Smrg -no-undefined declare that a library does not refer to external symbols 3786c27c18e8Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 378748e5ce07Smrg -objectlist FILE use a list of object files found in FILE to specify objects 378848e5ce07Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3789c27c18e8Smrg -precious-files-regex REGEX 3790c27c18e8Smrg don't remove output files matching REGEX 3791c27c18e8Smrg -release RELEASE specify package release information 3792c27c18e8Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 3793c27c18e8Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 3794c27c18e8Smrg -shared only do dynamic linking of libtool libraries 3795c27c18e8Smrg -shrext SUFFIX override the standard shared library file extension 3796c27c18e8Smrg -static do not do any dynamic linking of uninstalled libtool libraries 3797c27c18e8Smrg -static-libtool-libs 3798c27c18e8Smrg do not do any dynamic linking of libtool libraries 3799c27c18e8Smrg -version-info CURRENT[:REVISION[:AGE]] 3800c27c18e8Smrg specify library version info [each variable defaults to 0] 3801c27c18e8Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 380237eb1ca1Smrg -Wc,FLAG 380337eb1ca1Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 380437eb1ca1Smrg -Wl,FLAG 380537eb1ca1Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 380637eb1ca1Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 3807c43cc173Smrg 380848e5ce07SmrgAll other options (arguments beginning with '-') are ignored. 3809c43cc173Smrg 381048e5ce07SmrgEvery other argument is treated as a filename. Files ending in '.la' are 3811c27c18e8Smrgtreated as uninstalled libtool libraries, other files are standard or library 3812c27c18e8Smrgobject files. 3813c43cc173Smrg 381448e5ce07SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 381548e5ce07Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 3816c27c18e8Smrgrequired, except when creating a convenience library. 3817c43cc173Smrg 381848e5ce07SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 381948e5ce07Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 3820c43cc173Smrg 382148e5ce07SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 3822c27c18e8Smrgis created, otherwise an executable program is created." 3823c43cc173Smrg ;; 3824c43cc173Smrg 3825c27c18e8Smrg uninstall) 3826c27c18e8Smrg $ECHO \ 3827c27c18e8Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 3828c43cc173Smrg 3829c27c18e8SmrgRemove libraries from an installation directory. 3830c43cc173Smrg 3831c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE 383248e5ce07Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3833c27c18e8Smrgto RM. 3834c43cc173Smrg 3835c27c18e8SmrgIf FILE is a libtool library, all the files associated with it are deleted. 3836c27c18e8SmrgOtherwise, only FILE itself is deleted using RM." 3837c27c18e8Smrg ;; 3838c43cc173Smrg 3839c27c18e8Smrg *) 384048e5ce07Smrg func_fatal_help "invalid operation mode '$opt_mode'" 3841c27c18e8Smrg ;; 3842c27c18e8Smrg esac 3843c43cc173Smrg 384437eb1ca1Smrg echo 384548e5ce07Smrg $ECHO "Try '$progname --help' for more information about other modes." 3846c27c18e8Smrg} 3847c43cc173Smrg 384837eb1ca1Smrg# Now that we've collected a possible --mode arg, show help if necessary 384937eb1ca1Smrgif $opt_help; then 385048e5ce07Smrg if test : = "$opt_help"; then 385137eb1ca1Smrg func_mode_help 385237eb1ca1Smrg else 385337eb1ca1Smrg { 385437eb1ca1Smrg func_help noexit 3855b789ec8aSmrg for opt_mode in compile link execute install finish uninstall clean; do 385637eb1ca1Smrg func_mode_help 385737eb1ca1Smrg done 385848e5ce07Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 385937eb1ca1Smrg { 386037eb1ca1Smrg func_help noexit 3861b789ec8aSmrg for opt_mode in compile link execute install finish uninstall clean; do 386237eb1ca1Smrg echo 386337eb1ca1Smrg func_mode_help 386437eb1ca1Smrg done 386537eb1ca1Smrg } | 386648e5ce07Smrg $SED '1d 386737eb1ca1Smrg /^When reporting/,/^Report/{ 386837eb1ca1Smrg H 386937eb1ca1Smrg d 387037eb1ca1Smrg } 387137eb1ca1Smrg $x 387237eb1ca1Smrg /information about other modes/d 387337eb1ca1Smrg /more detailed .*MODE/d 387437eb1ca1Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 387537eb1ca1Smrg fi 387637eb1ca1Smrg exit $? 387737eb1ca1Smrgfi 3878c43cc173Smrg 3879c43cc173Smrg 3880c27c18e8Smrg# func_mode_execute arg... 3881c27c18e8Smrgfunc_mode_execute () 3882c27c18e8Smrg{ 388348e5ce07Smrg $debug_cmd 388448e5ce07Smrg 3885c27c18e8Smrg # The first argument is the command name. 388648e5ce07Smrg cmd=$nonopt 3887c27c18e8Smrg test -z "$cmd" && \ 3888c27c18e8Smrg func_fatal_help "you must specify a COMMAND" 3889c43cc173Smrg 3890c27c18e8Smrg # Handle -dlopen flags immediately. 3891b789ec8aSmrg for file in $opt_dlopen; do 3892c27c18e8Smrg test -f "$file" \ 389348e5ce07Smrg || func_fatal_help "'$file' is not a file" 3894c43cc173Smrg 3895c27c18e8Smrg dir= 3896c27c18e8Smrg case $file in 3897c27c18e8Smrg *.la) 3898b789ec8aSmrg func_resolve_sysroot "$file" 3899b789ec8aSmrg file=$func_resolve_sysroot_result 3900b789ec8aSmrg 3901c27c18e8Smrg # Check to see that this really is a libtool archive. 3902c27c18e8Smrg func_lalib_unsafe_p "$file" \ 390348e5ce07Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 3904c43cc173Smrg 3905c27c18e8Smrg # Read the libtool library. 3906c27c18e8Smrg dlname= 3907c27c18e8Smrg library_names= 3908c27c18e8Smrg func_source "$file" 3909c43cc173Smrg 3910c27c18e8Smrg # Skip this library if it cannot be dlopened. 3911c27c18e8Smrg if test -z "$dlname"; then 3912c27c18e8Smrg # Warn if it was a shared library. 3913c27c18e8Smrg test -n "$library_names" && \ 391448e5ce07Smrg func_warning "'$file' was not linked with '-export-dynamic'" 3915c27c18e8Smrg continue 3916c27c18e8Smrg fi 3917c43cc173Smrg 3918c27c18e8Smrg func_dirname "$file" "" "." 391948e5ce07Smrg dir=$func_dirname_result 3920c43cc173Smrg 3921c27c18e8Smrg if test -f "$dir/$objdir/$dlname"; then 3922b789ec8aSmrg func_append dir "/$objdir" 3923c27c18e8Smrg else 3924c27c18e8Smrg if test ! -f "$dir/$dlname"; then 392548e5ce07Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 3926c27c18e8Smrg fi 3927c27c18e8Smrg fi 3928c43cc173Smrg ;; 3929c43cc173Smrg 3930c27c18e8Smrg *.lo) 3931c27c18e8Smrg # Just add the directory containing the .lo file. 3932c27c18e8Smrg func_dirname "$file" "" "." 393348e5ce07Smrg dir=$func_dirname_result 3934c43cc173Smrg ;; 3935c43cc173Smrg 3936c27c18e8Smrg *) 393748e5ce07Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 3938c43cc173Smrg continue 3939c43cc173Smrg ;; 3940c27c18e8Smrg esac 3941c43cc173Smrg 3942c27c18e8Smrg # Get the absolute pathname. 3943c27c18e8Smrg absdir=`cd "$dir" && pwd` 394448e5ce07Smrg test -n "$absdir" && dir=$absdir 3945c43cc173Smrg 3946c27c18e8Smrg # Now add the directory to shlibpath_var. 3947c27c18e8Smrg if eval "test -z \"\$$shlibpath_var\""; then 3948c27c18e8Smrg eval "$shlibpath_var=\"\$dir\"" 3949c27c18e8Smrg else 3950c27c18e8Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 3951c27c18e8Smrg fi 3952c27c18e8Smrg done 3953c43cc173Smrg 3954c27c18e8Smrg # This variable tells wrapper scripts just to set shlibpath_var 3955c27c18e8Smrg # rather than running their programs. 395648e5ce07Smrg libtool_execute_magic=$magic 3957c43cc173Smrg 3958c27c18e8Smrg # Check if any of the arguments is a wrapper script. 3959c27c18e8Smrg args= 3960c27c18e8Smrg for file 3961c27c18e8Smrg do 3962c27c18e8Smrg case $file in 396337eb1ca1Smrg -* | *.la | *.lo ) ;; 3964c27c18e8Smrg *) 3965c27c18e8Smrg # Do a test to see if this is really a libtool program. 3966c27c18e8Smrg if func_ltwrapper_script_p "$file"; then 3967c27c18e8Smrg func_source "$file" 3968c27c18e8Smrg # Transform arg to wrapped name. 396948e5ce07Smrg file=$progdir/$program 3970c27c18e8Smrg elif func_ltwrapper_executable_p "$file"; then 3971c27c18e8Smrg func_ltwrapper_scriptname "$file" 3972c27c18e8Smrg func_source "$func_ltwrapper_scriptname_result" 3973c27c18e8Smrg # Transform arg to wrapped name. 397448e5ce07Smrg file=$progdir/$program 3975c27c18e8Smrg fi 3976c27c18e8Smrg ;; 3977c27c18e8Smrg esac 3978c27c18e8Smrg # Quote arguments (to preserve shell metacharacters). 3979b789ec8aSmrg func_append_quoted args "$file" 3980c27c18e8Smrg done 3981c43cc173Smrg 398248e5ce07Smrg if $opt_dry_run; then 398348e5ce07Smrg # Display what would be done. 398448e5ce07Smrg if test -n "$shlibpath_var"; then 398548e5ce07Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 398648e5ce07Smrg echo "export $shlibpath_var" 398748e5ce07Smrg fi 398848e5ce07Smrg $ECHO "$cmd$args" 398948e5ce07Smrg exit $EXIT_SUCCESS 399048e5ce07Smrg else 3991c27c18e8Smrg if test -n "$shlibpath_var"; then 3992c27c18e8Smrg # Export the shlibpath_var. 3993c27c18e8Smrg eval "export $shlibpath_var" 3994c27c18e8Smrg fi 3995c43cc173Smrg 3996c27c18e8Smrg # Restore saved environment variables 3997c27c18e8Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 3998c27c18e8Smrg do 3999c27c18e8Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 4000c27c18e8Smrg $lt_var=\$save_$lt_var; export $lt_var 4001c43cc173Smrg else 4002c27c18e8Smrg $lt_unset $lt_var 4003c27c18e8Smrg fi" 4004c27c18e8Smrg done 4005c43cc173Smrg 4006c27c18e8Smrg # Now prepare to actually exec the command. 400748e5ce07Smrg exec_cmd=\$cmd$args 4008c27c18e8Smrg fi 4009c27c18e8Smrg} 4010c43cc173Smrg 401148e5ce07Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 4012c43cc173Smrg 4013c43cc173Smrg 4014c27c18e8Smrg# func_mode_finish arg... 4015c27c18e8Smrgfunc_mode_finish () 4016c27c18e8Smrg{ 401748e5ce07Smrg $debug_cmd 401848e5ce07Smrg 4019b789ec8aSmrg libs= 4020b789ec8aSmrg libdirs= 4021c27c18e8Smrg admincmds= 4022c43cc173Smrg 4023b789ec8aSmrg for opt in "$nonopt" ${1+"$@"} 4024b789ec8aSmrg do 4025b789ec8aSmrg if test -d "$opt"; then 4026b789ec8aSmrg func_append libdirs " $opt" 4027b789ec8aSmrg 4028b789ec8aSmrg elif test -f "$opt"; then 4029b789ec8aSmrg if func_lalib_unsafe_p "$opt"; then 4030b789ec8aSmrg func_append libs " $opt" 4031b789ec8aSmrg else 403248e5ce07Smrg func_warning "'$opt' is not a valid libtool archive" 4033b789ec8aSmrg fi 4034b789ec8aSmrg 4035b789ec8aSmrg else 403648e5ce07Smrg func_fatal_error "invalid argument '$opt'" 4037b789ec8aSmrg fi 4038b789ec8aSmrg done 4039b789ec8aSmrg 4040b789ec8aSmrg if test -n "$libs"; then 4041b789ec8aSmrg if test -n "$lt_sysroot"; then 4042b789ec8aSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4043b789ec8aSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4044b789ec8aSmrg else 4045b789ec8aSmrg sysroot_cmd= 4046b789ec8aSmrg fi 4047b789ec8aSmrg 4048b789ec8aSmrg # Remove sysroot references 4049b789ec8aSmrg if $opt_dry_run; then 4050b789ec8aSmrg for lib in $libs; do 405148e5ce07Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4052b789ec8aSmrg done 4053b789ec8aSmrg else 4054b789ec8aSmrg tmpdir=`func_mktempdir` 4055b789ec8aSmrg for lib in $libs; do 405648e5ce07Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4057b789ec8aSmrg > $tmpdir/tmp-la 4058b789ec8aSmrg mv -f $tmpdir/tmp-la $lib 4059b789ec8aSmrg done 4060b789ec8aSmrg ${RM}r "$tmpdir" 4061b789ec8aSmrg fi 4062b789ec8aSmrg fi 4063c43cc173Smrg 4064b789ec8aSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4065c27c18e8Smrg for libdir in $libdirs; do 4066c27c18e8Smrg if test -n "$finish_cmds"; then 4067c27c18e8Smrg # Do each command in the finish commands. 4068c27c18e8Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4069c27c18e8Smrg'"$cmd"'"' 4070c43cc173Smrg fi 4071c27c18e8Smrg if test -n "$finish_eval"; then 4072c27c18e8Smrg # Do the single finish_eval. 4073c27c18e8Smrg eval cmds=\"$finish_eval\" 4074b789ec8aSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4075c27c18e8Smrg $cmds" 4076c27c18e8Smrg fi 4077c27c18e8Smrg done 4078c27c18e8Smrg fi 4079c43cc173Smrg 4080c27c18e8Smrg # Exit here if they wanted silent mode. 408148e5ce07Smrg $opt_quiet && exit $EXIT_SUCCESS 4082c43cc173Smrg 4083b789ec8aSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4084b789ec8aSmrg echo "----------------------------------------------------------------------" 4085b789ec8aSmrg echo "Libraries have been installed in:" 4086b789ec8aSmrg for libdir in $libdirs; do 4087b789ec8aSmrg $ECHO " $libdir" 4088b789ec8aSmrg done 4089b789ec8aSmrg echo 4090b789ec8aSmrg echo "If you ever happen to want to link against installed libraries" 4091b789ec8aSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 409248e5ce07Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4093b789ec8aSmrg echo "flag during linking and do at least one of the following:" 4094b789ec8aSmrg if test -n "$shlibpath_var"; then 409548e5ce07Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4096b789ec8aSmrg echo " during execution" 4097b789ec8aSmrg fi 4098b789ec8aSmrg if test -n "$runpath_var"; then 409948e5ce07Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4100b789ec8aSmrg echo " during linking" 4101b789ec8aSmrg fi 4102b789ec8aSmrg if test -n "$hardcode_libdir_flag_spec"; then 4103b789ec8aSmrg libdir=LIBDIR 4104b789ec8aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 4105c43cc173Smrg 410648e5ce07Smrg $ECHO " - use the '$flag' linker flag" 4107b789ec8aSmrg fi 4108b789ec8aSmrg if test -n "$admincmds"; then 4109b789ec8aSmrg $ECHO " - have your system administrator run these commands:$admincmds" 4110b789ec8aSmrg fi 4111b789ec8aSmrg if test -f /etc/ld.so.conf; then 411248e5ce07Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4113b789ec8aSmrg fi 4114b789ec8aSmrg echo 4115c27c18e8Smrg 4116b789ec8aSmrg echo "See any operating system documentation about shared libraries for" 4117b789ec8aSmrg case $host in 4118b789ec8aSmrg solaris2.[6789]|solaris2.1[0-9]) 4119b789ec8aSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4120b789ec8aSmrg echo "pages." 4121b789ec8aSmrg ;; 4122b789ec8aSmrg *) 4123b789ec8aSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4124b789ec8aSmrg ;; 4125b789ec8aSmrg esac 4126b789ec8aSmrg echo "----------------------------------------------------------------------" 4127b789ec8aSmrg fi 4128c27c18e8Smrg exit $EXIT_SUCCESS 4129c27c18e8Smrg} 4130c27c18e8Smrg 413148e5ce07Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4132c27c18e8Smrg 4133c27c18e8Smrg 4134c27c18e8Smrg# func_mode_install arg... 4135c27c18e8Smrgfunc_mode_install () 4136c27c18e8Smrg{ 413748e5ce07Smrg $debug_cmd 413848e5ce07Smrg 4139c27c18e8Smrg # There may be an optional sh(1) argument at the beginning of 4140c27c18e8Smrg # install_prog (especially on Windows NT). 414148e5ce07Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4142c27c18e8Smrg # Allow the use of GNU shtool's install command. 414348e5ce07Smrg case $nonopt in *shtool*) :;; *) false;; esac 414448e5ce07Smrg then 4145c27c18e8Smrg # Aesthetically quote it. 4146c27c18e8Smrg func_quote_for_eval "$nonopt" 4147c27c18e8Smrg install_prog="$func_quote_for_eval_result " 4148c27c18e8Smrg arg=$1 4149c27c18e8Smrg shift 4150c27c18e8Smrg else 4151c27c18e8Smrg install_prog= 4152c27c18e8Smrg arg=$nonopt 4153c27c18e8Smrg fi 4154c27c18e8Smrg 4155c27c18e8Smrg # The real first argument should be the name of the installation program. 4156c27c18e8Smrg # Aesthetically quote it. 4157c27c18e8Smrg func_quote_for_eval "$arg" 4158b789ec8aSmrg func_append install_prog "$func_quote_for_eval_result" 415937eb1ca1Smrg install_shared_prog=$install_prog 416037eb1ca1Smrg case " $install_prog " in 416137eb1ca1Smrg *[\\\ /]cp\ *) install_cp=: ;; 416237eb1ca1Smrg *) install_cp=false ;; 416337eb1ca1Smrg esac 4164c27c18e8Smrg 4165c27c18e8Smrg # We need to accept at least all the BSD install flags. 4166c27c18e8Smrg dest= 4167c27c18e8Smrg files= 4168c27c18e8Smrg opts= 4169c27c18e8Smrg prev= 4170c27c18e8Smrg install_type= 417148e5ce07Smrg isdir=false 4172c27c18e8Smrg stripme= 417337eb1ca1Smrg no_mode=: 4174c27c18e8Smrg for arg 4175c27c18e8Smrg do 417637eb1ca1Smrg arg2= 4177c27c18e8Smrg if test -n "$dest"; then 4178b789ec8aSmrg func_append files " $dest" 4179c27c18e8Smrg dest=$arg 4180c27c18e8Smrg continue 4181c27c18e8Smrg fi 4182c27c18e8Smrg 4183c27c18e8Smrg case $arg in 418448e5ce07Smrg -d) isdir=: ;; 4185c27c18e8Smrg -f) 418637eb1ca1Smrg if $install_cp; then :; else 418737eb1ca1Smrg prev=$arg 418837eb1ca1Smrg fi 4189c27c18e8Smrg ;; 4190c27c18e8Smrg -g | -m | -o) 4191c27c18e8Smrg prev=$arg 4192c27c18e8Smrg ;; 4193c27c18e8Smrg -s) 4194c27c18e8Smrg stripme=" -s" 4195c27c18e8Smrg continue 4196c27c18e8Smrg ;; 4197c27c18e8Smrg -*) 4198c27c18e8Smrg ;; 4199c27c18e8Smrg *) 4200c27c18e8Smrg # If the previous option needed an argument, then skip it. 4201c27c18e8Smrg if test -n "$prev"; then 420248e5ce07Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 420337eb1ca1Smrg arg2=$install_override_mode 420437eb1ca1Smrg no_mode=false 420537eb1ca1Smrg fi 4206c43cc173Smrg prev= 4207c43cc173Smrg else 4208c27c18e8Smrg dest=$arg 4209c27c18e8Smrg continue 4210c43cc173Smrg fi 4211c43cc173Smrg ;; 4212c27c18e8Smrg esac 4213c43cc173Smrg 4214c27c18e8Smrg # Aesthetically quote the argument. 4215c27c18e8Smrg func_quote_for_eval "$arg" 4216b789ec8aSmrg func_append install_prog " $func_quote_for_eval_result" 421737eb1ca1Smrg if test -n "$arg2"; then 421837eb1ca1Smrg func_quote_for_eval "$arg2" 421937eb1ca1Smrg fi 4220b789ec8aSmrg func_append install_shared_prog " $func_quote_for_eval_result" 4221c27c18e8Smrg done 4222c43cc173Smrg 4223c27c18e8Smrg test -z "$install_prog" && \ 4224c27c18e8Smrg func_fatal_help "you must specify an install program" 4225c43cc173Smrg 4226c27c18e8Smrg test -n "$prev" && \ 422748e5ce07Smrg func_fatal_help "the '$prev' option requires an argument" 4228c43cc173Smrg 422937eb1ca1Smrg if test -n "$install_override_mode" && $no_mode; then 423037eb1ca1Smrg if $install_cp; then :; else 423137eb1ca1Smrg func_quote_for_eval "$install_override_mode" 4232b789ec8aSmrg func_append install_shared_prog " -m $func_quote_for_eval_result" 423337eb1ca1Smrg fi 423437eb1ca1Smrg fi 423537eb1ca1Smrg 4236c27c18e8Smrg if test -z "$files"; then 4237c27c18e8Smrg if test -z "$dest"; then 4238c27c18e8Smrg func_fatal_help "no file or destination specified" 4239c27c18e8Smrg else 4240c27c18e8Smrg func_fatal_help "you must specify a destination" 4241c27c18e8Smrg fi 4242c43cc173Smrg fi 4243c43cc173Smrg 4244c27c18e8Smrg # Strip any trailing slash from the destination. 4245c27c18e8Smrg func_stripname '' '/' "$dest" 4246c27c18e8Smrg dest=$func_stripname_result 4247c43cc173Smrg 4248c27c18e8Smrg # Check to see that the destination is a directory. 424948e5ce07Smrg test -d "$dest" && isdir=: 425048e5ce07Smrg if $isdir; then 425148e5ce07Smrg destdir=$dest 4252c27c18e8Smrg destname= 4253c43cc173Smrg else 4254c27c18e8Smrg func_dirname_and_basename "$dest" "" "." 425548e5ce07Smrg destdir=$func_dirname_result 425648e5ce07Smrg destname=$func_basename_result 4257c43cc173Smrg 4258c27c18e8Smrg # Not a directory, so check to see that there is only one file specified. 4259c27c18e8Smrg set dummy $files; shift 4260c27c18e8Smrg test "$#" -gt 1 && \ 426148e5ce07Smrg func_fatal_help "'$dest' is not a directory" 4262c43cc173Smrg fi 4263c27c18e8Smrg case $destdir in 4264c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4265c43cc173Smrg *) 4266c27c18e8Smrg for file in $files; do 4267c27c18e8Smrg case $file in 4268c27c18e8Smrg *.lo) ;; 4269c27c18e8Smrg *) 427048e5ce07Smrg func_fatal_help "'$destdir' must be an absolute directory name" 4271c27c18e8Smrg ;; 4272c27c18e8Smrg esac 4273c27c18e8Smrg done 4274c43cc173Smrg ;; 4275c43cc173Smrg esac 4276c43cc173Smrg 4277c27c18e8Smrg # This variable tells wrapper scripts just to set variables rather 4278c27c18e8Smrg # than running their programs. 427948e5ce07Smrg libtool_install_magic=$magic 4280c43cc173Smrg 4281c27c18e8Smrg staticlibs= 4282c27c18e8Smrg future_libdirs= 4283c27c18e8Smrg current_libdirs= 4284c27c18e8Smrg for file in $files; do 4285c43cc173Smrg 4286c27c18e8Smrg # Do each installation. 4287c27c18e8Smrg case $file in 4288c27c18e8Smrg *.$libext) 4289c27c18e8Smrg # Do the static libraries later. 4290b789ec8aSmrg func_append staticlibs " $file" 4291c27c18e8Smrg ;; 4292c27c18e8Smrg 4293c27c18e8Smrg *.la) 4294b789ec8aSmrg func_resolve_sysroot "$file" 4295b789ec8aSmrg file=$func_resolve_sysroot_result 4296b789ec8aSmrg 4297c27c18e8Smrg # Check to see that this really is a libtool archive. 4298c27c18e8Smrg func_lalib_unsafe_p "$file" \ 429948e5ce07Smrg || func_fatal_help "'$file' is not a valid libtool archive" 4300c27c18e8Smrg 4301c27c18e8Smrg library_names= 4302c27c18e8Smrg old_library= 4303c27c18e8Smrg relink_command= 4304c27c18e8Smrg func_source "$file" 4305c27c18e8Smrg 4306c27c18e8Smrg # Add the libdir to current_libdirs if it is the destination. 4307c27c18e8Smrg if test "X$destdir" = "X$libdir"; then 4308c27c18e8Smrg case "$current_libdirs " in 4309c27c18e8Smrg *" $libdir "*) ;; 4310b789ec8aSmrg *) func_append current_libdirs " $libdir" ;; 4311c43cc173Smrg esac 4312c27c18e8Smrg else 4313c27c18e8Smrg # Note the libdir as a future libdir. 4314c27c18e8Smrg case "$future_libdirs " in 4315c27c18e8Smrg *" $libdir "*) ;; 4316b789ec8aSmrg *) func_append future_libdirs " $libdir" ;; 4317c27c18e8Smrg esac 4318c27c18e8Smrg fi 4319c43cc173Smrg 4320c27c18e8Smrg func_dirname "$file" "/" "" 432148e5ce07Smrg dir=$func_dirname_result 4322b789ec8aSmrg func_append dir "$objdir" 4323c27c18e8Smrg 4324c27c18e8Smrg if test -n "$relink_command"; then 4325c27c18e8Smrg # Determine the prefix the user has applied to our future dir. 432637eb1ca1Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4327c27c18e8Smrg 4328c27c18e8Smrg # Don't allow the user to place us outside of our expected 4329c27c18e8Smrg # location b/c this prevents finding dependent libraries that 4330c27c18e8Smrg # are installed to the same prefix. 4331c27c18e8Smrg # At present, this check doesn't affect windows .dll's that 4332c27c18e8Smrg # are installed into $libdir/../bin (currently, that works fine) 4333c27c18e8Smrg # but it's something to keep an eye on. 4334c27c18e8Smrg test "$inst_prefix_dir" = "$destdir" && \ 433548e5ce07Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4336c27c18e8Smrg 4337c27c18e8Smrg if test -n "$inst_prefix_dir"; then 4338c27c18e8Smrg # Stick the inst_prefix_dir data into the link command. 433937eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4340c27c18e8Smrg else 434137eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4342c27c18e8Smrg fi 4343c27c18e8Smrg 434448e5ce07Smrg func_warning "relinking '$file'" 4345c27c18e8Smrg func_show_eval "$relink_command" \ 434648e5ce07Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4347c27c18e8Smrg fi 4348c27c18e8Smrg 4349c27c18e8Smrg # See the names of the shared library. 4350c27c18e8Smrg set dummy $library_names; shift 4351c27c18e8Smrg if test -n "$1"; then 435248e5ce07Smrg realname=$1 4353c27c18e8Smrg shift 4354c27c18e8Smrg 435548e5ce07Smrg srcname=$realname 435648e5ce07Smrg test -n "$relink_command" && srcname=${realname}T 4357c27c18e8Smrg 4358c27c18e8Smrg # Install the shared library and build the symlinks. 435937eb1ca1Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4360c27c18e8Smrg 'exit $?' 436148e5ce07Smrg tstripme=$stripme 4362c27c18e8Smrg case $host_os in 4363c27c18e8Smrg cygwin* | mingw* | pw32* | cegcc*) 4364c27c18e8Smrg case $realname in 4365c27c18e8Smrg *.dll.a) 436648e5ce07Smrg tstripme= 436748e5ce07Smrg ;; 436848e5ce07Smrg esac 436948e5ce07Smrg ;; 437048e5ce07Smrg os2*) 437148e5ce07Smrg case $realname in 437248e5ce07Smrg *_dll.a) 437348e5ce07Smrg tstripme= 4374c27c18e8Smrg ;; 4375c27c18e8Smrg esac 4376c43cc173Smrg ;; 4377c43cc173Smrg esac 4378c27c18e8Smrg if test -n "$tstripme" && test -n "$striplib"; then 4379c27c18e8Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 4380c43cc173Smrg fi 4381c27c18e8Smrg 4382c27c18e8Smrg if test "$#" -gt 0; then 4383c27c18e8Smrg # Delete the old symlinks, and create new ones. 438448e5ce07Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4385c27c18e8Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4386c27c18e8Smrg # so we also need to try rm && ln -s. 4387c27c18e8Smrg for linkname 4388c27c18e8Smrg do 4389c27c18e8Smrg test "$linkname" != "$realname" \ 4390c27c18e8Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4391c43cc173Smrg done 4392c43cc173Smrg fi 4393c43cc173Smrg 4394c27c18e8Smrg # Do each command in the postinstall commands. 439548e5ce07Smrg lib=$destdir/$realname 4396c27c18e8Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 4397c43cc173Smrg fi 4398c43cc173Smrg 4399c27c18e8Smrg # Install the pseudo-library for information purposes. 4400c27c18e8Smrg func_basename "$file" 440148e5ce07Smrg name=$func_basename_result 440248e5ce07Smrg instname=$dir/${name}i 4403c27c18e8Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4404c43cc173Smrg 4405c27c18e8Smrg # Maybe install the static library, too. 4406b789ec8aSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4407c27c18e8Smrg ;; 4408c43cc173Smrg 4409c27c18e8Smrg *.lo) 4410c27c18e8Smrg # Install (i.e. copy) a libtool object. 4411c43cc173Smrg 4412c27c18e8Smrg # Figure out destination file name, if it wasn't already specified. 4413c27c18e8Smrg if test -n "$destname"; then 441448e5ce07Smrg destfile=$destdir/$destname 4415c27c18e8Smrg else 4416c27c18e8Smrg func_basename "$file" 441748e5ce07Smrg destfile=$func_basename_result 441848e5ce07Smrg destfile=$destdir/$destfile 4419c43cc173Smrg fi 4420c43cc173Smrg 4421c27c18e8Smrg # Deduce the name of the destination old-style object file. 4422c27c18e8Smrg case $destfile in 4423c27c18e8Smrg *.lo) 4424c27c18e8Smrg func_lo2o "$destfile" 4425c27c18e8Smrg staticdest=$func_lo2o_result 4426c27c18e8Smrg ;; 4427c27c18e8Smrg *.$objext) 442848e5ce07Smrg staticdest=$destfile 4429c27c18e8Smrg destfile= 4430c27c18e8Smrg ;; 4431c27c18e8Smrg *) 443248e5ce07Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4433c27c18e8Smrg ;; 4434c27c18e8Smrg esac 4435c43cc173Smrg 4436c27c18e8Smrg # Install the libtool object if requested. 4437c27c18e8Smrg test -n "$destfile" && \ 4438c27c18e8Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4439c43cc173Smrg 4440c27c18e8Smrg # Install the old object if enabled. 444148e5ce07Smrg if test yes = "$build_old_libs"; then 4442c27c18e8Smrg # Deduce the name of the old-style object file. 4443c27c18e8Smrg func_lo2o "$file" 4444c27c18e8Smrg staticobj=$func_lo2o_result 4445c27c18e8Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4446c43cc173Smrg fi 4447c27c18e8Smrg exit $EXIT_SUCCESS 4448c27c18e8Smrg ;; 4449c43cc173Smrg 4450c27c18e8Smrg *) 4451c27c18e8Smrg # Figure out destination file name, if it wasn't already specified. 4452c27c18e8Smrg if test -n "$destname"; then 445348e5ce07Smrg destfile=$destdir/$destname 4454c27c18e8Smrg else 4455c27c18e8Smrg func_basename "$file" 445648e5ce07Smrg destfile=$func_basename_result 445748e5ce07Smrg destfile=$destdir/$destfile 4458c27c18e8Smrg fi 4459c43cc173Smrg 4460c27c18e8Smrg # If the file is missing, and there is a .exe on the end, strip it 4461c27c18e8Smrg # because it is most likely a libtool script we actually want to 4462c27c18e8Smrg # install 446348e5ce07Smrg stripped_ext= 4464c27c18e8Smrg case $file in 4465c27c18e8Smrg *.exe) 4466c27c18e8Smrg if test ! -f "$file"; then 4467c27c18e8Smrg func_stripname '' '.exe' "$file" 4468c27c18e8Smrg file=$func_stripname_result 446948e5ce07Smrg stripped_ext=.exe 4470c27c18e8Smrg fi 4471c27c18e8Smrg ;; 4472c27c18e8Smrg esac 4473c27c18e8Smrg 4474c27c18e8Smrg # Do a test to see if this is really a libtool program. 4475c27c18e8Smrg case $host in 4476c27c18e8Smrg *cygwin* | *mingw*) 4477c27c18e8Smrg if func_ltwrapper_executable_p "$file"; then 4478c27c18e8Smrg func_ltwrapper_scriptname "$file" 4479c27c18e8Smrg wrapper=$func_ltwrapper_scriptname_result 4480c27c18e8Smrg else 4481c27c18e8Smrg func_stripname '' '.exe' "$file" 4482c27c18e8Smrg wrapper=$func_stripname_result 4483c27c18e8Smrg fi 4484c27c18e8Smrg ;; 4485c43cc173Smrg *) 4486c27c18e8Smrg wrapper=$file 4487c27c18e8Smrg ;; 4488c27c18e8Smrg esac 4489c27c18e8Smrg if func_ltwrapper_script_p "$wrapper"; then 4490c27c18e8Smrg notinst_deplibs= 4491c27c18e8Smrg relink_command= 4492c27c18e8Smrg 4493c27c18e8Smrg func_source "$wrapper" 4494c27c18e8Smrg 4495c27c18e8Smrg # Check the variables that should have been set. 4496c27c18e8Smrg test -z "$generated_by_libtool_version" && \ 449748e5ce07Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4498c27c18e8Smrg 449948e5ce07Smrg finalize=: 4500c27c18e8Smrg for lib in $notinst_deplibs; do 4501c27c18e8Smrg # Check to see that each library is installed. 4502c27c18e8Smrg libdir= 4503c27c18e8Smrg if test -f "$lib"; then 4504c27c18e8Smrg func_source "$lib" 4505c27c18e8Smrg fi 450648e5ce07Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4507c27c18e8Smrg if test -n "$libdir" && test ! -f "$libfile"; then 450848e5ce07Smrg func_warning "'$lib' has not been installed in '$libdir'" 450948e5ce07Smrg finalize=false 4510c27c18e8Smrg fi 4511c27c18e8Smrg done 4512c27c18e8Smrg 4513c27c18e8Smrg relink_command= 4514c27c18e8Smrg func_source "$wrapper" 4515c27c18e8Smrg 4516c27c18e8Smrg outputname= 451748e5ce07Smrg if test no = "$fast_install" && test -n "$relink_command"; then 4518c27c18e8Smrg $opt_dry_run || { 451948e5ce07Smrg if $finalize; then 4520c27c18e8Smrg tmpdir=`func_mktempdir` 4521c27c18e8Smrg func_basename "$file$stripped_ext" 452248e5ce07Smrg file=$func_basename_result 452348e5ce07Smrg outputname=$tmpdir/$file 4524c27c18e8Smrg # Replace the output file specification. 452537eb1ca1Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4526c27c18e8Smrg 452748e5ce07Smrg $opt_quiet || { 4528c27c18e8Smrg func_quote_for_expand "$relink_command" 4529c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 4530c27c18e8Smrg } 4531c27c18e8Smrg if eval "$relink_command"; then : 4532c27c18e8Smrg else 453348e5ce07Smrg func_error "error: relink '$file' with the above command before installing it" 4534c27c18e8Smrg $opt_dry_run || ${RM}r "$tmpdir" 4535c27c18e8Smrg continue 4536c27c18e8Smrg fi 453748e5ce07Smrg file=$outputname 4538c27c18e8Smrg else 453948e5ce07Smrg func_warning "cannot relink '$file'" 4540c27c18e8Smrg fi 4541c27c18e8Smrg } 4542c27c18e8Smrg else 4543c27c18e8Smrg # Install the binary that we compiled earlier. 454437eb1ca1Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4545c43cc173Smrg fi 4546c27c18e8Smrg fi 4547c27c18e8Smrg 4548c27c18e8Smrg # remove .exe since cygwin /usr/bin/install will append another 4549c27c18e8Smrg # one anyway 4550c27c18e8Smrg case $install_prog,$host in 4551c27c18e8Smrg */usr/bin/install*,*cygwin*) 4552c27c18e8Smrg case $file:$destfile in 4553c27c18e8Smrg *.exe:*.exe) 4554c27c18e8Smrg # this is ok 4555c27c18e8Smrg ;; 4556c27c18e8Smrg *.exe:*) 4557c27c18e8Smrg destfile=$destfile.exe 4558c27c18e8Smrg ;; 4559c27c18e8Smrg *:*.exe) 4560c27c18e8Smrg func_stripname '' '.exe' "$destfile" 4561c27c18e8Smrg destfile=$func_stripname_result 4562c27c18e8Smrg ;; 4563c27c18e8Smrg esac 4564c43cc173Smrg ;; 4565c43cc173Smrg esac 4566c27c18e8Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4567c27c18e8Smrg $opt_dry_run || if test -n "$outputname"; then 4568c27c18e8Smrg ${RM}r "$tmpdir" 4569c27c18e8Smrg fi 4570c27c18e8Smrg ;; 4571c27c18e8Smrg esac 4572c27c18e8Smrg done 4573c43cc173Smrg 4574c27c18e8Smrg for file in $staticlibs; do 4575c27c18e8Smrg func_basename "$file" 457648e5ce07Smrg name=$func_basename_result 4577c27c18e8Smrg 4578c27c18e8Smrg # Set up the ranlib parameters. 457948e5ce07Smrg oldlib=$destdir/$name 4580f1ee322dSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4581f1ee322dSmrg tool_oldlib=$func_to_tool_file_result 4582c27c18e8Smrg 4583c27c18e8Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4584c27c18e8Smrg 4585c27c18e8Smrg if test -n "$stripme" && test -n "$old_striplib"; then 4586f1ee322dSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4587c27c18e8Smrg fi 4588c27c18e8Smrg 4589c27c18e8Smrg # Do each command in the postinstall commands. 4590c27c18e8Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4591c27c18e8Smrg done 4592c27c18e8Smrg 4593c27c18e8Smrg test -n "$future_libdirs" && \ 459448e5ce07Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 4595c27c18e8Smrg 4596c27c18e8Smrg if test -n "$current_libdirs"; then 4597c27c18e8Smrg # Maybe just do a dry run. 4598c27c18e8Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 459948e5ce07Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4600c27c18e8Smrg else 4601c27c18e8Smrg exit $EXIT_SUCCESS 4602c27c18e8Smrg fi 4603c27c18e8Smrg} 4604c27c18e8Smrg 460548e5ce07Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 4606c27c18e8Smrg 4607c27c18e8Smrg 4608c27c18e8Smrg# func_generate_dlsyms outputname originator pic_p 4609c27c18e8Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4610c27c18e8Smrg# a dlpreopen symbol table. 4611c27c18e8Smrgfunc_generate_dlsyms () 4612c27c18e8Smrg{ 461348e5ce07Smrg $debug_cmd 461448e5ce07Smrg 461548e5ce07Smrg my_outputname=$1 461648e5ce07Smrg my_originator=$2 461748e5ce07Smrg my_pic_p=${3-false} 461848e5ce07Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4619c27c18e8Smrg my_dlsyms= 4620c27c18e8Smrg 462148e5ce07Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4622c27c18e8Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 462348e5ce07Smrg my_dlsyms=${my_outputname}S.c 4624c27c18e8Smrg else 4625c27c18e8Smrg func_error "not configured to extract global symbols from dlpreopened files" 4626c27c18e8Smrg fi 4627c27c18e8Smrg fi 4628c27c18e8Smrg 4629c27c18e8Smrg if test -n "$my_dlsyms"; then 4630c27c18e8Smrg case $my_dlsyms in 4631c27c18e8Smrg "") ;; 4632c27c18e8Smrg *.c) 4633c27c18e8Smrg # Discover the nlist of each of the dlfiles. 463448e5ce07Smrg nlist=$output_objdir/$my_outputname.nm 4635c27c18e8Smrg 4636c27c18e8Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4637c27c18e8Smrg 4638c27c18e8Smrg # Parse the name list into a source file. 4639c27c18e8Smrg func_verbose "creating $output_objdir/$my_dlsyms" 4640c27c18e8Smrg 4641c27c18e8Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 464248e5ce07Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 464348e5ce07Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4644c27c18e8Smrg 4645c27c18e8Smrg#ifdef __cplusplus 4646c27c18e8Smrgextern \"C\" { 4647c27c18e8Smrg#endif 4648c27c18e8Smrg 464948e5ce07Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 465037eb1ca1Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 465137eb1ca1Smrg#endif 465237eb1ca1Smrg 4653b789ec8aSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 465448e5ce07Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 465548e5ce07Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 4656b789ec8aSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 4657b789ec8aSmrg# define LT_DLSYM_CONST 465848e5ce07Smrg#elif defined __osf__ 4659b789ec8aSmrg/* This system does not cope well with relocations in const data. */ 4660b789ec8aSmrg# define LT_DLSYM_CONST 4661b789ec8aSmrg#else 4662b789ec8aSmrg# define LT_DLSYM_CONST const 4663b789ec8aSmrg#endif 4664b789ec8aSmrg 466548e5ce07Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 466648e5ce07Smrg 4667c27c18e8Smrg/* External symbol declarations for the compiler. */\ 4668c27c18e8Smrg" 4669c27c18e8Smrg 467048e5ce07Smrg if test yes = "$dlself"; then 467148e5ce07Smrg func_verbose "generating symbol list for '$output'" 4672c27c18e8Smrg 4673c27c18e8Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4674c27c18e8Smrg 4675c27c18e8Smrg # Add our own program objects to the symbol list. 467637eb1ca1Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4677c27c18e8Smrg for progfile in $progfiles; do 4678b789ec8aSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 467948e5ce07Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4680b789ec8aSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4681c27c18e8Smrg done 4682c27c18e8Smrg 4683c27c18e8Smrg if test -n "$exclude_expsyms"; then 4684c27c18e8Smrg $opt_dry_run || { 4685c27c18e8Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4686c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 4687c27c18e8Smrg } 4688c43cc173Smrg fi 4689c27c18e8Smrg 4690c27c18e8Smrg if test -n "$export_symbols_regex"; then 4691c27c18e8Smrg $opt_dry_run || { 4692c27c18e8Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4693c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 4694c27c18e8Smrg } 4695c27c18e8Smrg fi 4696c27c18e8Smrg 4697c27c18e8Smrg # Prepare the list of exported symbols 4698c27c18e8Smrg if test -z "$export_symbols"; then 469948e5ce07Smrg export_symbols=$output_objdir/$outputname.exp 4700c27c18e8Smrg $opt_dry_run || { 4701c27c18e8Smrg $RM $export_symbols 470248e5ce07Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4703c27c18e8Smrg case $host in 4704c27c18e8Smrg *cygwin* | *mingw* | *cegcc* ) 4705c27c18e8Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4706c27c18e8Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4707c27c18e8Smrg ;; 4708c27c18e8Smrg esac 4709c27c18e8Smrg } 4710c43cc173Smrg else 4711c27c18e8Smrg $opt_dry_run || { 471248e5ce07Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4713c27c18e8Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4714c27c18e8Smrg eval '$MV "$nlist"T "$nlist"' 4715c27c18e8Smrg case $host in 471637eb1ca1Smrg *cygwin* | *mingw* | *cegcc* ) 4717c27c18e8Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4718c27c18e8Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4719c27c18e8Smrg ;; 4720c27c18e8Smrg esac 4721c27c18e8Smrg } 4722c43cc173Smrg fi 4723c27c18e8Smrg fi 4724c43cc173Smrg 4725c27c18e8Smrg for dlprefile in $dlprefiles; do 472648e5ce07Smrg func_verbose "extracting global C symbols from '$dlprefile'" 4727c27c18e8Smrg func_basename "$dlprefile" 472848e5ce07Smrg name=$func_basename_result 4729b789ec8aSmrg case $host in 4730b789ec8aSmrg *cygwin* | *mingw* | *cegcc* ) 4731b789ec8aSmrg # if an import library, we need to obtain dlname 4732b789ec8aSmrg if func_win32_import_lib_p "$dlprefile"; then 4733b789ec8aSmrg func_tr_sh "$dlprefile" 4734b789ec8aSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 473548e5ce07Smrg dlprefile_dlbasename= 4736b789ec8aSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4737b789ec8aSmrg # Use subshell, to avoid clobbering current variable values 4738b789ec8aSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 473948e5ce07Smrg if test -n "$dlprefile_dlname"; then 4740b789ec8aSmrg func_basename "$dlprefile_dlname" 474148e5ce07Smrg dlprefile_dlbasename=$func_basename_result 4742b789ec8aSmrg else 4743b789ec8aSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 4744b789ec8aSmrg $sharedlib_from_linklib_cmd "$dlprefile" 4745b789ec8aSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 4746b789ec8aSmrg fi 4747b789ec8aSmrg fi 4748b789ec8aSmrg $opt_dry_run || { 474948e5ce07Smrg if test -n "$dlprefile_dlbasename"; then 4750b789ec8aSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4751b789ec8aSmrg else 4752b789ec8aSmrg func_warning "Could not compute DLL name from $name" 4753b789ec8aSmrg eval '$ECHO ": $name " >> "$nlist"' 4754b789ec8aSmrg fi 4755b789ec8aSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4756b789ec8aSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4757b789ec8aSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4758b789ec8aSmrg } 4759b789ec8aSmrg else # not an import lib 4760b789ec8aSmrg $opt_dry_run || { 4761b789ec8aSmrg eval '$ECHO ": $name " >> "$nlist"' 4762b789ec8aSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4763b789ec8aSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4764b789ec8aSmrg } 4765b789ec8aSmrg fi 4766b789ec8aSmrg ;; 4767b789ec8aSmrg *) 4768b789ec8aSmrg $opt_dry_run || { 4769b789ec8aSmrg eval '$ECHO ": $name " >> "$nlist"' 4770b789ec8aSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4771b789ec8aSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4772b789ec8aSmrg } 4773b789ec8aSmrg ;; 4774b789ec8aSmrg esac 4775c27c18e8Smrg done 4776c27c18e8Smrg 4777c27c18e8Smrg $opt_dry_run || { 4778c27c18e8Smrg # Make sure we have at least an empty file. 4779c27c18e8Smrg test -f "$nlist" || : > "$nlist" 4780c27c18e8Smrg 4781c27c18e8Smrg if test -n "$exclude_expsyms"; then 4782c27c18e8Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4783c27c18e8Smrg $MV "$nlist"T "$nlist" 4784c43cc173Smrg fi 4785c27c18e8Smrg 4786c27c18e8Smrg # Try sorting and uniquifying the output. 4787c27c18e8Smrg if $GREP -v "^: " < "$nlist" | 4788c27c18e8Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 4789c27c18e8Smrg sort -k 3 4790c27c18e8Smrg else 4791c27c18e8Smrg sort +2 4792c27c18e8Smrg fi | 4793c27c18e8Smrg uniq > "$nlist"S; then 4794c27c18e8Smrg : 4795c43cc173Smrg else 4796c27c18e8Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 4797c43cc173Smrg fi 4798c43cc173Smrg 4799c27c18e8Smrg if test -f "$nlist"S; then 4800c27c18e8Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 4801c43cc173Smrg else 480237eb1ca1Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 4803c43cc173Smrg fi 4804c43cc173Smrg 480548e5ce07Smrg func_show_eval '$RM "${nlist}I"' 480648e5ce07Smrg if test -n "$global_symbol_to_import"; then 480748e5ce07Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 480848e5ce07Smrg fi 480948e5ce07Smrg 481037eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4811c43cc173Smrg 4812c27c18e8Smrg/* The mapping between symbol names and symbols. */ 4813c27c18e8Smrgtypedef struct { 4814c27c18e8Smrg const char *name; 4815c27c18e8Smrg void *address; 4816c27c18e8Smrg} lt_dlsymlist; 4817b789ec8aSmrgextern LT_DLSYM_CONST lt_dlsymlist 481848e5ce07Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 481948e5ce07Smrg" 482048e5ce07Smrg 482148e5ce07Smrg if test -s "$nlist"I; then 482248e5ce07Smrg echo >> "$output_objdir/$my_dlsyms" "\ 482348e5ce07Smrgstatic void lt_syminit(void) 482448e5ce07Smrg{ 482548e5ce07Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 482648e5ce07Smrg for (; symbol->name; ++symbol) 482748e5ce07Smrg {" 482848e5ce07Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 482948e5ce07Smrg echo >> "$output_objdir/$my_dlsyms" "\ 483048e5ce07Smrg } 483148e5ce07Smrg}" 483248e5ce07Smrg fi 483348e5ce07Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4834b789ec8aSmrgLT_DLSYM_CONST lt_dlsymlist 4835c27c18e8Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 483648e5ce07Smrg{ {\"$my_originator\", (void *) 0}," 483748e5ce07Smrg 483848e5ce07Smrg if test -s "$nlist"I; then 483948e5ce07Smrg echo >> "$output_objdir/$my_dlsyms" "\ 484048e5ce07Smrg {\"@INIT@\", (void *) <_syminit}," 484148e5ce07Smrg fi 4842c43cc173Smrg 4843c27c18e8Smrg case $need_lib_prefix in 4844c27c18e8Smrg no) 4845c27c18e8Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 4846c27c18e8Smrg ;; 4847c27c18e8Smrg *) 4848c27c18e8Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 4849c27c18e8Smrg ;; 4850c27c18e8Smrg esac 485137eb1ca1Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4852c27c18e8Smrg {0, (void *) 0} 4853c27c18e8Smrg}; 4854c43cc173Smrg 4855c27c18e8Smrg/* This works around a problem in FreeBSD linker */ 4856c27c18e8Smrg#ifdef FREEBSD_WORKAROUND 4857c27c18e8Smrgstatic const void *lt_preloaded_setup() { 4858c27c18e8Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 4859c27c18e8Smrg} 4860c27c18e8Smrg#endif 4861c43cc173Smrg 4862c27c18e8Smrg#ifdef __cplusplus 4863c27c18e8Smrg} 4864c27c18e8Smrg#endif\ 4865c27c18e8Smrg" 4866c27c18e8Smrg } # !$opt_dry_run 4867c43cc173Smrg 4868c27c18e8Smrg pic_flag_for_symtable= 4869c27c18e8Smrg case "$compile_command " in 4870c27c18e8Smrg *" -static "*) ;; 4871c27c18e8Smrg *) 4872c27c18e8Smrg case $host in 4873c27c18e8Smrg # compiling the symbol table file with pic_flag works around 4874c27c18e8Smrg # a FreeBSD bug that causes programs to crash when -lm is 4875c27c18e8Smrg # linked before any other PIC object. But we must not use 4876c27c18e8Smrg # pic_flag when linking with -static. The problem exists in 4877c27c18e8Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 4878f1ee322dSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 4879c27c18e8Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 4880c27c18e8Smrg *-*-hpux*) 4881c27c18e8Smrg pic_flag_for_symtable=" $pic_flag" ;; 4882c27c18e8Smrg *) 488348e5ce07Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 4884c27c18e8Smrg ;; 4885c27c18e8Smrg esac 4886c27c18e8Smrg ;; 4887c27c18e8Smrg esac 4888c27c18e8Smrg symtab_cflags= 4889c27c18e8Smrg for arg in $LTCFLAGS; do 4890c27c18e8Smrg case $arg in 4891c27c18e8Smrg -pie | -fpie | -fPIE) ;; 4892b789ec8aSmrg *) func_append symtab_cflags " $arg" ;; 4893c27c18e8Smrg esac 4894c27c18e8Smrg done 4895c43cc173Smrg 4896c27c18e8Smrg # Now compile the dynamic symbol file. 4897c27c18e8Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 4898c43cc173Smrg 4899c27c18e8Smrg # Clean up the generated files. 490048e5ce07Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 4901c43cc173Smrg 4902c27c18e8Smrg # Transform the symbol file into the correct name. 490348e5ce07Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 4904c27c18e8Smrg case $host in 4905c27c18e8Smrg *cygwin* | *mingw* | *cegcc* ) 4906c27c18e8Smrg if test -f "$output_objdir/$my_outputname.def"; then 490737eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 490837eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4909c27c18e8Smrg else 491037eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 491137eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4912c27c18e8Smrg fi 4913c27c18e8Smrg ;; 4914c27c18e8Smrg *) 491537eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 491637eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4917c27c18e8Smrg ;; 4918c27c18e8Smrg esac 4919c27c18e8Smrg ;; 4920c27c18e8Smrg *) 492148e5ce07Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 4922c27c18e8Smrg ;; 4923c27c18e8Smrg esac 4924c27c18e8Smrg else 4925c27c18e8Smrg # We keep going just in case the user didn't refer to 4926c27c18e8Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 4927c27c18e8Smrg # really was required. 4928c43cc173Smrg 4929c27c18e8Smrg # Nullify the symbol file. 493037eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 493137eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 4932c27c18e8Smrg fi 4933c27c18e8Smrg} 4934c43cc173Smrg 493548e5ce07Smrg# func_cygming_gnu_implib_p ARG 493648e5ce07Smrg# This predicate returns with zero status (TRUE) if 493748e5ce07Smrg# ARG is a GNU/binutils-style import library. Returns 493848e5ce07Smrg# with nonzero status (FALSE) otherwise. 493948e5ce07Smrgfunc_cygming_gnu_implib_p () 494048e5ce07Smrg{ 494148e5ce07Smrg $debug_cmd 494248e5ce07Smrg 494348e5ce07Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 494448e5ce07Smrg 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)$'` 494548e5ce07Smrg test -n "$func_cygming_gnu_implib_tmp" 494648e5ce07Smrg} 494748e5ce07Smrg 494848e5ce07Smrg# func_cygming_ms_implib_p ARG 494948e5ce07Smrg# This predicate returns with zero status (TRUE) if 495048e5ce07Smrg# ARG is an MS-style import library. Returns 495148e5ce07Smrg# with nonzero status (FALSE) otherwise. 495248e5ce07Smrgfunc_cygming_ms_implib_p () 495348e5ce07Smrg{ 495448e5ce07Smrg $debug_cmd 495548e5ce07Smrg 495648e5ce07Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 495748e5ce07Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 495848e5ce07Smrg test -n "$func_cygming_ms_implib_tmp" 495948e5ce07Smrg} 496048e5ce07Smrg 4961c27c18e8Smrg# func_win32_libid arg 4962c27c18e8Smrg# return the library type of file 'arg' 4963c27c18e8Smrg# 4964c27c18e8Smrg# Need a lot of goo to handle *both* DLLs and import libs 4965c27c18e8Smrg# Has to be a shell function in order to 'eat' the argument 4966c27c18e8Smrg# that is supplied when $file_magic_command is called. 496737eb1ca1Smrg# Despite the name, also deal with 64 bit binaries. 4968c27c18e8Smrgfunc_win32_libid () 4969c27c18e8Smrg{ 497048e5ce07Smrg $debug_cmd 497148e5ce07Smrg 497248e5ce07Smrg win32_libid_type=unknown 4973c27c18e8Smrg win32_fileres=`file -L $1 2>/dev/null` 4974c27c18e8Smrg case $win32_fileres in 4975c27c18e8Smrg *ar\ archive\ import\ library*) # definitely import 4976c27c18e8Smrg win32_libid_type="x86 archive import" 4977c27c18e8Smrg ;; 4978c27c18e8Smrg *ar\ archive*) # could be an import, or static 497937eb1ca1Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 4980c27c18e8Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 498137eb1ca1Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 498248e5ce07Smrg case $nm_interface in 498348e5ce07Smrg "MS dumpbin") 498448e5ce07Smrg if func_cygming_ms_implib_p "$1" || 498548e5ce07Smrg func_cygming_gnu_implib_p "$1" 498648e5ce07Smrg then 498748e5ce07Smrg win32_nmres=import 498848e5ce07Smrg else 498948e5ce07Smrg win32_nmres= 499048e5ce07Smrg fi 499148e5ce07Smrg ;; 499248e5ce07Smrg *) 499348e5ce07Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 499448e5ce07Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 499548e5ce07Smrg $SED -n -e ' 4996c27c18e8Smrg 1,100{ 4997c27c18e8Smrg / I /{ 499848e5ce07Smrg s|.*|import| 4999c27c18e8Smrg p 5000c27c18e8Smrg q 5001c27c18e8Smrg } 5002c27c18e8Smrg }'` 500348e5ce07Smrg ;; 500448e5ce07Smrg esac 5005c27c18e8Smrg case $win32_nmres in 5006c27c18e8Smrg import*) win32_libid_type="x86 archive import";; 5007c27c18e8Smrg *) win32_libid_type="x86 archive static";; 5008c27c18e8Smrg esac 5009c27c18e8Smrg fi 5010c27c18e8Smrg ;; 5011c27c18e8Smrg *DLL*) 5012c27c18e8Smrg win32_libid_type="x86 DLL" 5013c27c18e8Smrg ;; 5014c27c18e8Smrg *executable*) # but shell scripts are "executable" too... 5015c27c18e8Smrg case $win32_fileres in 5016c27c18e8Smrg *MS\ Windows\ PE\ Intel*) 5017c27c18e8Smrg win32_libid_type="x86 DLL" 5018c27c18e8Smrg ;; 5019c27c18e8Smrg esac 5020c27c18e8Smrg ;; 5021c27c18e8Smrg esac 5022c27c18e8Smrg $ECHO "$win32_libid_type" 5023c27c18e8Smrg} 5024c43cc173Smrg 5025b789ec8aSmrg# func_cygming_dll_for_implib ARG 5026b789ec8aSmrg# 5027b789ec8aSmrg# Platform-specific function to extract the 5028b789ec8aSmrg# name of the DLL associated with the specified 5029b789ec8aSmrg# import library ARG. 5030b789ec8aSmrg# Invoked by eval'ing the libtool variable 5031b789ec8aSmrg# $sharedlib_from_linklib_cmd 5032b789ec8aSmrg# Result is available in the variable 5033b789ec8aSmrg# $sharedlib_from_linklib_result 5034b789ec8aSmrgfunc_cygming_dll_for_implib () 5035b789ec8aSmrg{ 503648e5ce07Smrg $debug_cmd 503748e5ce07Smrg 5038b789ec8aSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5039b789ec8aSmrg} 5040b789ec8aSmrg 5041b789ec8aSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5042b789ec8aSmrg# 5043b789ec8aSmrg# The is the core of a fallback implementation of a 5044b789ec8aSmrg# platform-specific function to extract the name of the 5045b789ec8aSmrg# DLL associated with the specified import library LIBNAME. 5046b789ec8aSmrg# 5047b789ec8aSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5048b789ec8aSmrg# on the platform and compiler that created the implib. 5049b789ec8aSmrg# 5050b789ec8aSmrg# Echos the name of the DLL associated with the 5051b789ec8aSmrg# specified import library. 5052b789ec8aSmrgfunc_cygming_dll_for_implib_fallback_core () 5053b789ec8aSmrg{ 505448e5ce07Smrg $debug_cmd 505548e5ce07Smrg 5056b789ec8aSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5057b789ec8aSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5058b789ec8aSmrg $SED '/^Contents of section '"$match_literal"':/{ 5059b789ec8aSmrg # Place marker at beginning of archive member dllname section 5060b789ec8aSmrg s/.*/====MARK====/ 5061b789ec8aSmrg p 5062b789ec8aSmrg d 5063b789ec8aSmrg } 5064b789ec8aSmrg # These lines can sometimes be longer than 43 characters, but 5065b789ec8aSmrg # are always uninteresting 5066b789ec8aSmrg /:[ ]*file format pe[i]\{,1\}-/d 5067b789ec8aSmrg /^In archive [^:]*:/d 5068b789ec8aSmrg # Ensure marker is printed 5069b789ec8aSmrg /^====MARK====/p 5070b789ec8aSmrg # Remove all lines with less than 43 characters 5071b789ec8aSmrg /^.\{43\}/!d 5072b789ec8aSmrg # From remaining lines, remove first 43 characters 5073b789ec8aSmrg s/^.\{43\}//' | 5074b789ec8aSmrg $SED -n ' 5075b789ec8aSmrg # Join marker and all lines until next marker into a single line 5076b789ec8aSmrg /^====MARK====/ b para 5077b789ec8aSmrg H 5078b789ec8aSmrg $ b para 5079b789ec8aSmrg b 5080b789ec8aSmrg :para 5081b789ec8aSmrg x 5082b789ec8aSmrg s/\n//g 5083b789ec8aSmrg # Remove the marker 5084b789ec8aSmrg s/^====MARK====// 5085b789ec8aSmrg # Remove trailing dots and whitespace 5086b789ec8aSmrg s/[\. \t]*$// 5087b789ec8aSmrg # Print 5088b789ec8aSmrg /./p' | 5089b789ec8aSmrg # we now have a list, one entry per line, of the stringified 5090b789ec8aSmrg # contents of the appropriate section of all members of the 509148e5ce07Smrg # archive that possess that section. Heuristic: eliminate 509248e5ce07Smrg # all those that have a first or second character that is 5093b789ec8aSmrg # a '.' (that is, objdump's representation of an unprintable 5094b789ec8aSmrg # character.) This should work for all archives with less than 5095b789ec8aSmrg # 0x302f exports -- but will fail for DLLs whose name actually 5096b789ec8aSmrg # begins with a literal '.' or a single character followed by 5097b789ec8aSmrg # a '.'. 5098b789ec8aSmrg # 5099b789ec8aSmrg # Of those that remain, print the first one. 5100b789ec8aSmrg $SED -e '/^\./d;/^.\./d;q' 5101b789ec8aSmrg} 5102b789ec8aSmrg 5103b789ec8aSmrg# func_cygming_dll_for_implib_fallback ARG 5104b789ec8aSmrg# Platform-specific function to extract the 5105b789ec8aSmrg# name of the DLL associated with the specified 5106b789ec8aSmrg# import library ARG. 5107b789ec8aSmrg# 5108b789ec8aSmrg# This fallback implementation is for use when $DLLTOOL 5109b789ec8aSmrg# does not support the --identify-strict option. 5110b789ec8aSmrg# Invoked by eval'ing the libtool variable 5111b789ec8aSmrg# $sharedlib_from_linklib_cmd 5112b789ec8aSmrg# Result is available in the variable 5113b789ec8aSmrg# $sharedlib_from_linklib_result 5114b789ec8aSmrgfunc_cygming_dll_for_implib_fallback () 5115b789ec8aSmrg{ 511648e5ce07Smrg $debug_cmd 511748e5ce07Smrg 511848e5ce07Smrg if func_cygming_gnu_implib_p "$1"; then 5119b789ec8aSmrg # binutils import library 5120b789ec8aSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 512148e5ce07Smrg elif func_cygming_ms_implib_p "$1"; then 5122b789ec8aSmrg # ms-generated import library 5123b789ec8aSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5124b789ec8aSmrg else 5125b789ec8aSmrg # unknown 512648e5ce07Smrg sharedlib_from_linklib_result= 5127b789ec8aSmrg fi 5128b789ec8aSmrg} 5129c43cc173Smrg 5130c43cc173Smrg 5131c27c18e8Smrg# func_extract_an_archive dir oldlib 5132c27c18e8Smrgfunc_extract_an_archive () 5133c27c18e8Smrg{ 513448e5ce07Smrg $debug_cmd 513548e5ce07Smrg 513648e5ce07Smrg f_ex_an_ar_dir=$1; shift 513748e5ce07Smrg f_ex_an_ar_oldlib=$1 513848e5ce07Smrg if test yes = "$lock_old_archive_extraction"; then 513937eb1ca1Smrg lockfile=$f_ex_an_ar_oldlib.lock 514037eb1ca1Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 514137eb1ca1Smrg func_echo "Waiting for $lockfile to be removed" 514237eb1ca1Smrg sleep 2 514337eb1ca1Smrg done 514437eb1ca1Smrg fi 514537eb1ca1Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 514637eb1ca1Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 514748e5ce07Smrg if test yes = "$lock_old_archive_extraction"; then 514837eb1ca1Smrg $opt_dry_run || rm -f "$lockfile" 514937eb1ca1Smrg fi 5150c27c18e8Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5151c27c18e8Smrg : 5152c27c18e8Smrg else 5153c27c18e8Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5154c27c18e8Smrg fi 5155c27c18e8Smrg} 5156c43cc173Smrg 5157c43cc173Smrg 5158c27c18e8Smrg# func_extract_archives gentop oldlib ... 5159c27c18e8Smrgfunc_extract_archives () 5160c27c18e8Smrg{ 516148e5ce07Smrg $debug_cmd 516248e5ce07Smrg 516348e5ce07Smrg my_gentop=$1; shift 5164c27c18e8Smrg my_oldlibs=${1+"$@"} 516548e5ce07Smrg my_oldobjs= 516648e5ce07Smrg my_xlib= 516748e5ce07Smrg my_xabs= 516848e5ce07Smrg my_xdir= 5169c43cc173Smrg 5170c27c18e8Smrg for my_xlib in $my_oldlibs; do 5171c27c18e8Smrg # Extract the objects. 5172c27c18e8Smrg case $my_xlib in 517348e5ce07Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5174c27c18e8Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 5175c27c18e8Smrg esac 5176c27c18e8Smrg func_basename "$my_xlib" 517748e5ce07Smrg my_xlib=$func_basename_result 5178c27c18e8Smrg my_xlib_u=$my_xlib 5179c27c18e8Smrg while :; do 5180c27c18e8Smrg case " $extracted_archives " in 5181c27c18e8Smrg *" $my_xlib_u "*) 5182c27c18e8Smrg func_arith $extracted_serial + 1 5183c27c18e8Smrg extracted_serial=$func_arith_result 5184c27c18e8Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5185c27c18e8Smrg *) break ;; 5186c27c18e8Smrg esac 5187c27c18e8Smrg done 5188c27c18e8Smrg extracted_archives="$extracted_archives $my_xlib_u" 518948e5ce07Smrg my_xdir=$my_gentop/$my_xlib_u 5190c43cc173Smrg 5191c27c18e8Smrg func_mkdir_p "$my_xdir" 5192c27c18e8Smrg 5193c27c18e8Smrg case $host in 5194c27c18e8Smrg *-darwin*) 5195c27c18e8Smrg func_verbose "Extracting $my_xabs" 5196c27c18e8Smrg # Do not bother doing anything if just a dry run 5197c27c18e8Smrg $opt_dry_run || { 5198c27c18e8Smrg darwin_orig_dir=`pwd` 5199c27c18e8Smrg cd $my_xdir || exit $? 5200c27c18e8Smrg darwin_archive=$my_xabs 5201c27c18e8Smrg darwin_curdir=`pwd` 520248e5ce07Smrg func_basename "$darwin_archive" 520348e5ce07Smrg darwin_base_archive=$func_basename_result 5204c27c18e8Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5205c27c18e8Smrg if test -n "$darwin_arches"; then 5206c27c18e8Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5207c27c18e8Smrg darwin_arch= 5208c27c18e8Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 520948e5ce07Smrg for darwin_arch in $darwin_arches; do 521048e5ce07Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 521148e5ce07Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 521248e5ce07Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 521348e5ce07Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5214c27c18e8Smrg cd "$darwin_curdir" 521548e5ce07Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5216c27c18e8Smrg done # $darwin_arches 5217c27c18e8Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 521848e5ce07Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5219c27c18e8Smrg darwin_file= 5220c27c18e8Smrg darwin_files= 5221c27c18e8Smrg for darwin_file in $darwin_filelist; do 522237eb1ca1Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5223c27c18e8Smrg $LIPO -create -output "$darwin_file" $darwin_files 5224c27c18e8Smrg done # $darwin_filelist 5225c27c18e8Smrg $RM -rf unfat-$$ 5226c27c18e8Smrg cd "$darwin_orig_dir" 5227c43cc173Smrg else 5228c27c18e8Smrg cd $darwin_orig_dir 5229c27c18e8Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5230c27c18e8Smrg fi # $darwin_arches 5231c27c18e8Smrg } # !$opt_dry_run 5232c27c18e8Smrg ;; 5233c27c18e8Smrg *) 5234c27c18e8Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5235c27c18e8Smrg ;; 5236c27c18e8Smrg esac 523737eb1ca1Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5238c27c18e8Smrg done 5239c43cc173Smrg 524048e5ce07Smrg func_extract_archives_result=$my_oldobjs 5241c27c18e8Smrg} 5242c43cc173Smrg 5243c43cc173Smrg 524437eb1ca1Smrg# func_emit_wrapper [arg=no] 524537eb1ca1Smrg# 524637eb1ca1Smrg# Emit a libtool wrapper script on stdout. 524737eb1ca1Smrg# Don't directly open a file because we may want to 524837eb1ca1Smrg# incorporate the script contents within a cygwin/mingw 524937eb1ca1Smrg# wrapper executable. Must ONLY be called from within 525037eb1ca1Smrg# func_mode_link because it depends on a number of variables 525137eb1ca1Smrg# set therein. 5252c27c18e8Smrg# 525337eb1ca1Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 525437eb1ca1Smrg# variable will take. If 'yes', then the emitted script 525548e5ce07Smrg# will assume that the directory where it is stored is 525637eb1ca1Smrg# the $objdir directory. This is a cygwin/mingw-specific 525737eb1ca1Smrg# behavior. 525837eb1ca1Smrgfunc_emit_wrapper () 5259c27c18e8Smrg{ 526037eb1ca1Smrg func_emit_wrapper_arg1=${1-no} 5261c43cc173Smrg 5262c27c18e8Smrg $ECHO "\ 5263c27c18e8Smrg#! $SHELL 5264c43cc173Smrg 5265c27c18e8Smrg# $output - temporary wrapper script for $objdir/$outputname 526648e5ce07Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5267c27c18e8Smrg# 5268c27c18e8Smrg# The $output program cannot be directly executed until all the libtool 5269c27c18e8Smrg# libraries that it depends on are installed. 5270c27c18e8Smrg# 5271c27c18e8Smrg# This wrapper script should never be moved out of the build directory. 5272c27c18e8Smrg# If it is, it will not operate correctly. 5273c43cc173Smrg 5274c27c18e8Smrg# Sed substitution that helps us do robust quoting. It backslashifies 5275c27c18e8Smrg# metacharacters that are still active within double-quoted strings. 5276c27c18e8Smrgsed_quote_subst='$sed_quote_subst' 5277c43cc173Smrg 5278c27c18e8Smrg# Be Bourne compatible 5279c27c18e8Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5280c27c18e8Smrg emulate sh 5281c27c18e8Smrg NULLCMD=: 5282c27c18e8Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5283c27c18e8Smrg # is contrary to our usage. Disable this feature. 5284c27c18e8Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5285c27c18e8Smrg setopt NO_GLOB_SUBST 5286c27c18e8Smrgelse 5287c27c18e8Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5288c27c18e8Smrgfi 5289c27c18e8SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5290c27c18e8SmrgDUALCASE=1; export DUALCASE # for MKS sh 5291c43cc173Smrg 5292c27c18e8Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5293c27c18e8Smrg# if CDPATH is set. 5294c27c18e8Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5295c43cc173Smrg 5296c27c18e8Smrgrelink_command=\"$relink_command\" 5297c43cc173Smrg 5298c27c18e8Smrg# This environment variable determines our operation mode. 5299c27c18e8Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5300c27c18e8Smrg # install mode needs the following variables: 5301c27c18e8Smrg generated_by_libtool_version='$macro_version' 5302c27c18e8Smrg notinst_deplibs='$notinst_deplibs' 5303c27c18e8Smrgelse 5304c27c18e8Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5305c27c18e8Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 530637eb1ca1Smrg file=\"\$0\"" 530737eb1ca1Smrg 53084940c694Smrg func_quote "$ECHO" 53094940c694Smrg qECHO=$func_quote_result 531037eb1ca1Smrg $ECHO "\ 531137eb1ca1Smrg 531237eb1ca1Smrg# A function that is used when there is no print builtin or printf. 531337eb1ca1Smrgfunc_fallback_echo () 531437eb1ca1Smrg{ 531537eb1ca1Smrg eval 'cat <<_LTECHO_EOF 531637eb1ca1Smrg\$1 531737eb1ca1Smrg_LTECHO_EOF' 531837eb1ca1Smrg} 531937eb1ca1Smrg ECHO=\"$qECHO\" 532037eb1ca1Smrg fi 532137eb1ca1Smrg 532237eb1ca1Smrg# Very basic option parsing. These options are (a) specific to 532337eb1ca1Smrg# the libtool wrapper, (b) are identical between the wrapper 532448e5ce07Smrg# /script/ and the wrapper /executable/ that is used only on 532537eb1ca1Smrg# windows platforms, and (c) all begin with the string "--lt-" 532648e5ce07Smrg# (application programs are unlikely to have options that match 532737eb1ca1Smrg# this pattern). 532837eb1ca1Smrg# 532937eb1ca1Smrg# There are only two supported options: --lt-debug and 533037eb1ca1Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 533137eb1ca1Smrg# 533237eb1ca1Smrg# The first argument to this parsing function should be the 533337eb1ca1Smrg# script's $0 value, followed by "$@". 533437eb1ca1Smrglt_option_debug= 533537eb1ca1Smrgfunc_parse_lt_options () 533637eb1ca1Smrg{ 533737eb1ca1Smrg lt_script_arg0=\$0 533837eb1ca1Smrg shift 533937eb1ca1Smrg for lt_opt 534037eb1ca1Smrg do 534137eb1ca1Smrg case \"\$lt_opt\" in 534237eb1ca1Smrg --lt-debug) lt_option_debug=1 ;; 534337eb1ca1Smrg --lt-dump-script) 534437eb1ca1Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 534537eb1ca1Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 534637eb1ca1Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 534737eb1ca1Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 534837eb1ca1Smrg exit 0 534937eb1ca1Smrg ;; 535037eb1ca1Smrg --lt-*) 535137eb1ca1Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 535237eb1ca1Smrg exit 1 535337eb1ca1Smrg ;; 535437eb1ca1Smrg esac 535537eb1ca1Smrg done 535637eb1ca1Smrg 535737eb1ca1Smrg # Print the debug banner immediately: 535837eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 535948e5ce07Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 536037eb1ca1Smrg fi 536137eb1ca1Smrg} 536237eb1ca1Smrg 536337eb1ca1Smrg# Used when --lt-debug. Prints its arguments to stdout 536437eb1ca1Smrg# (redirection is the responsibility of the caller) 536537eb1ca1Smrgfunc_lt_dump_args () 536637eb1ca1Smrg{ 536737eb1ca1Smrg lt_dump_args_N=1; 536837eb1ca1Smrg for lt_arg 536937eb1ca1Smrg do 537048e5ce07Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 537137eb1ca1Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 537237eb1ca1Smrg done 537337eb1ca1Smrg} 537437eb1ca1Smrg 537537eb1ca1Smrg# Core function for launching the target application 537637eb1ca1Smrgfunc_exec_program_core () 537737eb1ca1Smrg{ 5378c27c18e8Smrg" 537937eb1ca1Smrg case $host in 538037eb1ca1Smrg # Backslashes separate directories on plain windows 538137eb1ca1Smrg *-*-mingw | *-*-os2* | *-cegcc*) 538237eb1ca1Smrg $ECHO "\ 538337eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 538448e5ce07Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 538537eb1ca1Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 538637eb1ca1Smrg fi 538737eb1ca1Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 538837eb1ca1Smrg" 538937eb1ca1Smrg ;; 539037eb1ca1Smrg 539137eb1ca1Smrg *) 539237eb1ca1Smrg $ECHO "\ 539337eb1ca1Smrg if test -n \"\$lt_option_debug\"; then 539448e5ce07Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 539537eb1ca1Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 539637eb1ca1Smrg fi 539737eb1ca1Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 539837eb1ca1Smrg" 539937eb1ca1Smrg ;; 540037eb1ca1Smrg esac 540137eb1ca1Smrg $ECHO "\ 540237eb1ca1Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 540337eb1ca1Smrg exit 1 540437eb1ca1Smrg} 540537eb1ca1Smrg 540637eb1ca1Smrg# A function to encapsulate launching the target application 540737eb1ca1Smrg# Strips options in the --lt-* namespace from \$@ and 540837eb1ca1Smrg# launches target application with the remaining arguments. 540937eb1ca1Smrgfunc_exec_program () 541037eb1ca1Smrg{ 5411f1ee322dSmrg case \" \$* \" in 5412f1ee322dSmrg *\\ --lt-*) 5413f1ee322dSmrg for lt_wr_arg 5414f1ee322dSmrg do 5415f1ee322dSmrg case \$lt_wr_arg in 5416f1ee322dSmrg --lt-*) ;; 5417f1ee322dSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5418f1ee322dSmrg esac 5419f1ee322dSmrg shift 5420f1ee322dSmrg done ;; 5421f1ee322dSmrg esac 542237eb1ca1Smrg func_exec_program_core \${1+\"\$@\"} 542337eb1ca1Smrg} 542437eb1ca1Smrg 542537eb1ca1Smrg # Parse options 542637eb1ca1Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5427c43cc173Smrg 5428c27c18e8Smrg # Find the directory that this script lives in. 542937eb1ca1Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5430c27c18e8Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5431c43cc173Smrg 5432c27c18e8Smrg # Follow symbolic links until we get to the real thisdir. 543337eb1ca1Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5434c27c18e8Smrg while test -n \"\$file\"; do 543537eb1ca1Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5436c27c18e8Smrg 5437c27c18e8Smrg # If there was a directory component, then change thisdir. 5438c27c18e8Smrg if test \"x\$destdir\" != \"x\$file\"; then 5439c27c18e8Smrg case \"\$destdir\" in 5440c27c18e8Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5441c27c18e8Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5442c43cc173Smrg esac 5443c27c18e8Smrg fi 5444c43cc173Smrg 544537eb1ca1Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 544637eb1ca1Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5447c27c18e8Smrg done 5448c43cc173Smrg 5449c27c18e8Smrg # Usually 'no', except on cygwin/mingw when embedded into 5450c27c18e8Smrg # the cwrapper. 545137eb1ca1Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5452c27c18e8Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5453c27c18e8Smrg # special case for '.' 5454c27c18e8Smrg if test \"\$thisdir\" = \".\"; then 5455c27c18e8Smrg thisdir=\`pwd\` 5456c27c18e8Smrg fi 5457c27c18e8Smrg # remove .libs from thisdir 5458c27c18e8Smrg case \"\$thisdir\" in 545937eb1ca1Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5460c27c18e8Smrg $objdir ) thisdir=. ;; 5461c27c18e8Smrg esac 5462c27c18e8Smrg fi 5463c27c18e8Smrg 5464c27c18e8Smrg # Try to get the absolute directory name. 5465c27c18e8Smrg absdir=\`cd \"\$thisdir\" && pwd\` 5466c27c18e8Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5467c27c18e8Smrg" 5468c27c18e8Smrg 546948e5ce07Smrg if test yes = "$fast_install"; then 5470c27c18e8Smrg $ECHO "\ 5471c27c18e8Smrg program=lt-'$outputname'$exeext 5472c27c18e8Smrg progdir=\"\$thisdir/$objdir\" 5473c27c18e8Smrg 5474c27c18e8Smrg if test ! -f \"\$progdir/\$program\" || 547548e5ce07Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5476c27c18e8Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5477c27c18e8Smrg 5478c27c18e8Smrg file=\"\$\$-\$program\" 5479c27c18e8Smrg 5480c27c18e8Smrg if test ! -d \"\$progdir\"; then 5481c27c18e8Smrg $MKDIR \"\$progdir\" 5482c27c18e8Smrg else 5483c27c18e8Smrg $RM \"\$progdir/\$file\" 5484c27c18e8Smrg fi" 5485c27c18e8Smrg 5486c27c18e8Smrg $ECHO "\ 5487c27c18e8Smrg 5488c27c18e8Smrg # relink executable if necessary 5489c27c18e8Smrg if test -n \"\$relink_command\"; then 5490c27c18e8Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5491c27c18e8Smrg else 549248e5ce07Smrg \$ECHO \"\$relink_command_output\" >&2 5493c27c18e8Smrg $RM \"\$progdir/\$file\" 5494c27c18e8Smrg exit 1 5495c43cc173Smrg fi 5496c27c18e8Smrg fi 5497c43cc173Smrg 5498c27c18e8Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5499c27c18e8Smrg { $RM \"\$progdir/\$program\"; 5500c27c18e8Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5501c27c18e8Smrg $RM \"\$progdir/\$file\" 5502c27c18e8Smrg fi" 5503c27c18e8Smrg else 5504c27c18e8Smrg $ECHO "\ 5505c27c18e8Smrg program='$outputname' 5506c27c18e8Smrg progdir=\"\$thisdir/$objdir\" 5507c27c18e8Smrg" 5508c43cc173Smrg fi 5509c43cc173Smrg 5510c27c18e8Smrg $ECHO "\ 5511c27c18e8Smrg 5512c27c18e8Smrg if test -f \"\$progdir/\$program\"; then" 5513c27c18e8Smrg 5514b789ec8aSmrg # fixup the dll searchpath if we need to. 5515b789ec8aSmrg # 5516b789ec8aSmrg # Fix the DLL searchpath if we need to. Do this before prepending 5517b789ec8aSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 5518b789ec8aSmrg # libraries must come first. 5519b789ec8aSmrg if test -n "$dllsearchpath"; then 5520b789ec8aSmrg $ECHO "\ 5521b789ec8aSmrg # Add the dll search path components to the executable PATH 5522b789ec8aSmrg PATH=$dllsearchpath:\$PATH 5523b789ec8aSmrg" 5524b789ec8aSmrg fi 5525b789ec8aSmrg 5526c27c18e8Smrg # Export our shlibpath_var if we have one. 552748e5ce07Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5528c27c18e8Smrg $ECHO "\ 5529c27c18e8Smrg # Add our own library path to $shlibpath_var 5530c27c18e8Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5531c27c18e8Smrg 5532c27c18e8Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 5533c27c18e8Smrg # The second colon is a workaround for a bug in BeOS R4 sed 553437eb1ca1Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5535c27c18e8Smrg 5536c27c18e8Smrg export $shlibpath_var 5537c27c18e8Smrg" 5538c43cc173Smrg fi 5539c43cc173Smrg 5540c27c18e8Smrg $ECHO "\ 5541c27c18e8Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5542c27c18e8Smrg # Run the actual program with our arguments. 554337eb1ca1Smrg func_exec_program \${1+\"\$@\"} 5544c27c18e8Smrg fi 5545c27c18e8Smrg else 5546c27c18e8Smrg # The program doesn't exist. 554748e5ce07Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5548c27c18e8Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 554937eb1ca1Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5550c27c18e8Smrg exit 1 5551c27c18e8Smrg fi 5552c27c18e8Smrgfi\ 5553c27c18e8Smrg" 5554c27c18e8Smrg} 5555c43cc173Smrg 5556c43cc173Smrg 5557c27c18e8Smrg# func_emit_cwrapperexe_src 5558c27c18e8Smrg# emit the source code for a wrapper executable on stdout 5559c27c18e8Smrg# Must ONLY be called from within func_mode_link because 5560c27c18e8Smrg# it depends on a number of variable set therein. 5561c27c18e8Smrgfunc_emit_cwrapperexe_src () 5562c27c18e8Smrg{ 5563c27c18e8Smrg cat <<EOF 5564c43cc173Smrg 5565c27c18e8Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 556648e5ce07Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5567c43cc173Smrg 5568c27c18e8Smrg The $output program cannot be directly executed until all the libtool 5569c27c18e8Smrg libraries that it depends on are installed. 5570c43cc173Smrg 5571c27c18e8Smrg This wrapper executable should never be moved out of the build directory. 5572c27c18e8Smrg If it is, it will not operate correctly. 5573c27c18e8Smrg*/ 5574c27c18e8SmrgEOF 5575c27c18e8Smrg cat <<"EOF" 557637eb1ca1Smrg#ifdef _MSC_VER 557737eb1ca1Smrg# define _CRT_SECURE_NO_DEPRECATE 1 557837eb1ca1Smrg#endif 5579c27c18e8Smrg#include <stdio.h> 5580c27c18e8Smrg#include <stdlib.h> 5581c27c18e8Smrg#ifdef _MSC_VER 5582c27c18e8Smrg# include <direct.h> 5583c27c18e8Smrg# include <process.h> 5584c27c18e8Smrg# include <io.h> 5585c27c18e8Smrg#else 5586c27c18e8Smrg# include <unistd.h> 5587c27c18e8Smrg# include <stdint.h> 5588c27c18e8Smrg# ifdef __CYGWIN__ 5589c27c18e8Smrg# include <io.h> 5590c27c18e8Smrg# endif 5591c27c18e8Smrg#endif 5592c27c18e8Smrg#include <malloc.h> 5593c27c18e8Smrg#include <stdarg.h> 5594c27c18e8Smrg#include <assert.h> 5595c27c18e8Smrg#include <string.h> 5596c27c18e8Smrg#include <ctype.h> 5597c27c18e8Smrg#include <errno.h> 5598c27c18e8Smrg#include <fcntl.h> 5599c27c18e8Smrg#include <sys/stat.h> 5600c43cc173Smrg 560148e5ce07Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 560248e5ce07Smrg 560337eb1ca1Smrg/* declarations of non-ANSI functions */ 560448e5ce07Smrg#if defined __MINGW32__ 560537eb1ca1Smrg# ifdef __STRICT_ANSI__ 560637eb1ca1Smrgint _putenv (const char *); 560737eb1ca1Smrg# endif 560848e5ce07Smrg#elif defined __CYGWIN__ 560937eb1ca1Smrg# ifdef __STRICT_ANSI__ 561037eb1ca1Smrgchar *realpath (const char *, char *); 561137eb1ca1Smrgint putenv (char *); 561237eb1ca1Smrgint setenv (const char *, const char *, int); 561337eb1ca1Smrg# endif 561448e5ce07Smrg/* #elif defined other_platform || defined ... */ 561537eb1ca1Smrg#endif 561637eb1ca1Smrg 561737eb1ca1Smrg/* portability defines, excluding path handling macros */ 561848e5ce07Smrg#if defined _MSC_VER 561937eb1ca1Smrg# define setmode _setmode 562037eb1ca1Smrg# define stat _stat 562137eb1ca1Smrg# define chmod _chmod 562237eb1ca1Smrg# define getcwd _getcwd 562337eb1ca1Smrg# define putenv _putenv 562437eb1ca1Smrg# define S_IXUSR _S_IEXEC 562548e5ce07Smrg#elif defined __MINGW32__ 562637eb1ca1Smrg# define setmode _setmode 562737eb1ca1Smrg# define stat _stat 562837eb1ca1Smrg# define chmod _chmod 562937eb1ca1Smrg# define getcwd _getcwd 563037eb1ca1Smrg# define putenv _putenv 563148e5ce07Smrg#elif defined __CYGWIN__ 563237eb1ca1Smrg# define HAVE_SETENV 563337eb1ca1Smrg# define FOPEN_WB "wb" 563448e5ce07Smrg/* #elif defined other platforms ... */ 563537eb1ca1Smrg#endif 563637eb1ca1Smrg 563748e5ce07Smrg#if defined PATH_MAX 5638c27c18e8Smrg# define LT_PATHMAX PATH_MAX 563948e5ce07Smrg#elif defined MAXPATHLEN 5640c27c18e8Smrg# define LT_PATHMAX MAXPATHLEN 5641c27c18e8Smrg#else 5642c27c18e8Smrg# define LT_PATHMAX 1024 5643c27c18e8Smrg#endif 5644c43cc173Smrg 5645c27c18e8Smrg#ifndef S_IXOTH 5646c27c18e8Smrg# define S_IXOTH 0 5647c27c18e8Smrg#endif 5648c27c18e8Smrg#ifndef S_IXGRP 5649c27c18e8Smrg# define S_IXGRP 0 5650c27c18e8Smrg#endif 5651c43cc173Smrg 565237eb1ca1Smrg/* path handling portability macros */ 5653c27c18e8Smrg#ifndef DIR_SEPARATOR 5654c27c18e8Smrg# define DIR_SEPARATOR '/' 5655c27c18e8Smrg# define PATH_SEPARATOR ':' 5656c27c18e8Smrg#endif 5657c43cc173Smrg 565848e5ce07Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 565948e5ce07Smrg defined __OS2__ 5660c27c18e8Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 5661c27c18e8Smrg# define FOPEN_WB "wb" 5662c27c18e8Smrg# ifndef DIR_SEPARATOR_2 5663c27c18e8Smrg# define DIR_SEPARATOR_2 '\\' 5664c27c18e8Smrg# endif 5665c27c18e8Smrg# ifndef PATH_SEPARATOR_2 5666c27c18e8Smrg# define PATH_SEPARATOR_2 ';' 5667c27c18e8Smrg# endif 5668c27c18e8Smrg#endif 5669c43cc173Smrg 5670c27c18e8Smrg#ifndef DIR_SEPARATOR_2 5671c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5672c27c18e8Smrg#else /* DIR_SEPARATOR_2 */ 5673c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) \ 5674c27c18e8Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5675c27c18e8Smrg#endif /* DIR_SEPARATOR_2 */ 5676c43cc173Smrg 5677c27c18e8Smrg#ifndef PATH_SEPARATOR_2 5678c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5679c27c18e8Smrg#else /* PATH_SEPARATOR_2 */ 5680c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5681c27c18e8Smrg#endif /* PATH_SEPARATOR_2 */ 5682c43cc173Smrg 5683c27c18e8Smrg#ifndef FOPEN_WB 5684c27c18e8Smrg# define FOPEN_WB "w" 5685c27c18e8Smrg#endif 5686c27c18e8Smrg#ifndef _O_BINARY 5687c27c18e8Smrg# define _O_BINARY 0 5688c27c18e8Smrg#endif 5689c43cc173Smrg 5690c27c18e8Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5691c27c18e8Smrg#define XFREE(stale) do { \ 569248e5ce07Smrg if (stale) { free (stale); stale = 0; } \ 5693c27c18e8Smrg} while (0) 5694c43cc173Smrg 569548e5ce07Smrg#if defined LT_DEBUGWRAPPER 569637eb1ca1Smrgstatic int lt_debug = 1; 5697c27c18e8Smrg#else 569837eb1ca1Smrgstatic int lt_debug = 0; 5699c27c18e8Smrg#endif 5700c43cc173Smrg 570137eb1ca1Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5702c43cc173Smrg 5703c27c18e8Smrgvoid *xmalloc (size_t num); 5704c27c18e8Smrgchar *xstrdup (const char *string); 5705c27c18e8Smrgconst char *base_name (const char *name); 5706c27c18e8Smrgchar *find_executable (const char *wrapper); 5707c27c18e8Smrgchar *chase_symlinks (const char *pathspec); 5708c27c18e8Smrgint make_executable (const char *path); 5709c27c18e8Smrgint check_executable (const char *path); 5710c27c18e8Smrgchar *strendzap (char *str, const char *pat); 571137eb1ca1Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 571237eb1ca1Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 571337eb1ca1Smrgstatic const char *nonnull (const char *s); 571437eb1ca1Smrgstatic const char *nonempty (const char *s); 5715c27c18e8Smrgvoid lt_setenv (const char *name, const char *value); 5716c27c18e8Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5717c27c18e8Smrgvoid lt_update_exe_path (const char *name, const char *value); 5718c27c18e8Smrgvoid lt_update_lib_path (const char *name, const char *value); 571937eb1ca1Smrgchar **prepare_spawn (char **argv); 572037eb1ca1Smrgvoid lt_dump_script (FILE *f); 5721c27c18e8SmrgEOF 5722c27c18e8Smrg 5723c27c18e8Smrg cat <<EOF 572448e5ce07Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 572548e5ce07Smrg# define externally_visible volatile 572648e5ce07Smrg#else 572748e5ce07Smrg# define externally_visible __attribute__((externally_visible)) volatile 572848e5ce07Smrg#endif 572948e5ce07Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5730c27c18e8Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5731c27c18e8SmrgEOF 5732c43cc173Smrg 573348e5ce07Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5734b789ec8aSmrg func_to_host_path "$temp_rpath" 5735c27c18e8Smrg cat <<EOF 5736b789ec8aSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5737c27c18e8SmrgEOF 5738c27c18e8Smrg else 5739c27c18e8Smrg cat <<"EOF" 5740c27c18e8Smrgconst char * LIB_PATH_VALUE = ""; 5741c27c18e8SmrgEOF 5742c27c18e8Smrg fi 5743c43cc173Smrg 5744c27c18e8Smrg if test -n "$dllsearchpath"; then 5745b789ec8aSmrg func_to_host_path "$dllsearchpath:" 5746c27c18e8Smrg cat <<EOF 5747c27c18e8Smrgconst char * EXE_PATH_VARNAME = "PATH"; 5748b789ec8aSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5749c27c18e8SmrgEOF 5750c27c18e8Smrg else 5751c27c18e8Smrg cat <<"EOF" 5752c27c18e8Smrgconst char * EXE_PATH_VARNAME = ""; 5753c27c18e8Smrgconst char * EXE_PATH_VALUE = ""; 5754c27c18e8SmrgEOF 5755c27c18e8Smrg fi 5756c43cc173Smrg 575748e5ce07Smrg if test yes = "$fast_install"; then 5758c27c18e8Smrg cat <<EOF 5759c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5760c27c18e8SmrgEOF 5761c27c18e8Smrg else 5762c27c18e8Smrg cat <<EOF 5763c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5764c27c18e8SmrgEOF 5765c27c18e8Smrg fi 5766c43cc173Smrg 5767c43cc173Smrg 5768c27c18e8Smrg cat <<"EOF" 5769c43cc173Smrg 5770c27c18e8Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 5771c43cc173Smrg 5772c27c18e8Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5773c27c18e8Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 577437eb1ca1Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5775c27c18e8Smrg 5776c27c18e8Smrgint 5777c27c18e8Smrgmain (int argc, char *argv[]) 5778c27c18e8Smrg{ 5779c27c18e8Smrg char **newargz; 5780c27c18e8Smrg int newargc; 5781c27c18e8Smrg char *tmp_pathspec; 5782c27c18e8Smrg char *actual_cwrapper_path; 5783c27c18e8Smrg char *actual_cwrapper_name; 5784c27c18e8Smrg char *target_name; 5785c27c18e8Smrg char *lt_argv_zero; 578648e5ce07Smrg int rval = 127; 5787c27c18e8Smrg 5788c27c18e8Smrg int i; 5789c27c18e8Smrg 5790c27c18e8Smrg program_name = (char *) xstrdup (base_name (argv[0])); 579148e5ce07Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 5792c27c18e8Smrg 579337eb1ca1Smrg /* very simple arg parsing; don't want to rely on getopt 579437eb1ca1Smrg * also, copy all non cwrapper options to newargz, except 579537eb1ca1Smrg * argz[0], which is handled differently 579637eb1ca1Smrg */ 579737eb1ca1Smrg newargc=0; 5798c27c18e8Smrg for (i = 1; i < argc; i++) 5799c27c18e8Smrg { 580048e5ce07Smrg if (STREQ (argv[i], dumpscript_opt)) 5801c27c18e8Smrg { 5802c27c18e8SmrgEOF 580348e5ce07Smrg case $host in 5804c27c18e8Smrg *mingw* | *cygwin* ) 5805c27c18e8Smrg # make stdout use "unix" line endings 5806c27c18e8Smrg echo " setmode(1,_O_BINARY);" 5807c27c18e8Smrg ;; 5808c27c18e8Smrg esac 5809c27c18e8Smrg 5810c27c18e8Smrg cat <<"EOF" 581137eb1ca1Smrg lt_dump_script (stdout); 5812c27c18e8Smrg return 0; 5813c27c18e8Smrg } 581448e5ce07Smrg if (STREQ (argv[i], debug_opt)) 581537eb1ca1Smrg { 581637eb1ca1Smrg lt_debug = 1; 581737eb1ca1Smrg continue; 581837eb1ca1Smrg } 581948e5ce07Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 582037eb1ca1Smrg { 582137eb1ca1Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 582237eb1ca1Smrg namespace, but it is not one of the ones we know about and 582337eb1ca1Smrg have already dealt with, above (inluding dump-script), then 582437eb1ca1Smrg report an error. Otherwise, targets might begin to believe 582537eb1ca1Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 582637eb1ca1Smrg namespace. The first time any user complains about this, we'll 582737eb1ca1Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 582837eb1ca1Smrg or a configure.ac-settable value. 582937eb1ca1Smrg */ 583037eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 583137eb1ca1Smrg "unrecognized %s option: '%s'", 583237eb1ca1Smrg ltwrapper_option_prefix, argv[i]); 583337eb1ca1Smrg } 583437eb1ca1Smrg /* otherwise ... */ 583537eb1ca1Smrg newargz[++newargc] = xstrdup (argv[i]); 5836c27c18e8Smrg } 583737eb1ca1Smrg newargz[++newargc] = NULL; 583837eb1ca1Smrg 583937eb1ca1SmrgEOF 584037eb1ca1Smrg cat <<EOF 584137eb1ca1Smrg /* The GNU banner must be the first non-error debug message */ 584248e5ce07Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 584337eb1ca1SmrgEOF 584437eb1ca1Smrg cat <<"EOF" 584537eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 584637eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 5847c27c18e8Smrg 5848c27c18e8Smrg tmp_pathspec = find_executable (argv[0]); 5849c27c18e8Smrg if (tmp_pathspec == NULL) 585037eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 585137eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 585237eb1ca1Smrg "(main) found exe (before symlink chase) at: %s\n", 585337eb1ca1Smrg tmp_pathspec); 5854c27c18e8Smrg 5855c27c18e8Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 585637eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 585737eb1ca1Smrg "(main) found exe (after symlink chase) at: %s\n", 585837eb1ca1Smrg actual_cwrapper_path); 5859c27c18e8Smrg XFREE (tmp_pathspec); 5860c27c18e8Smrg 586137eb1ca1Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 5862c27c18e8Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 5863c27c18e8Smrg 5864c27c18e8Smrg /* wrapper name transforms */ 5865c27c18e8Smrg strendzap (actual_cwrapper_name, ".exe"); 5866c27c18e8Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 5867c27c18e8Smrg XFREE (actual_cwrapper_name); 5868c27c18e8Smrg actual_cwrapper_name = tmp_pathspec; 5869c27c18e8Smrg tmp_pathspec = 0; 5870c27c18e8Smrg 5871c27c18e8Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 5872c27c18e8Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 5873c27c18e8Smrg strendzap (target_name, ".exe"); 5874c27c18e8Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 5875c27c18e8Smrg XFREE (target_name); 5876c27c18e8Smrg target_name = tmp_pathspec; 5877c27c18e8Smrg tmp_pathspec = 0; 5878c27c18e8Smrg 587937eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 588037eb1ca1Smrg "(main) libtool target name: %s\n", 588137eb1ca1Smrg target_name); 5882c27c18e8SmrgEOF 5883c27c18e8Smrg 5884c27c18e8Smrg cat <<EOF 5885c27c18e8Smrg newargz[0] = 5886c27c18e8Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 5887c27c18e8Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 5888c27c18e8Smrg strcpy (newargz[0], actual_cwrapper_path); 5889c27c18e8Smrg strcat (newargz[0], "$objdir"); 5890c27c18e8Smrg strcat (newargz[0], "/"); 5891c27c18e8SmrgEOF 5892c27c18e8Smrg 5893c27c18e8Smrg cat <<"EOF" 5894c27c18e8Smrg /* stop here, and copy so we don't have to do this twice */ 5895c27c18e8Smrg tmp_pathspec = xstrdup (newargz[0]); 5896c27c18e8Smrg 5897c27c18e8Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 5898c27c18e8Smrg strcat (newargz[0], actual_cwrapper_name); 5899c27c18e8Smrg 5900c27c18e8Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 5901c27c18e8Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 5902c27c18e8Smrg XFREE (tmp_pathspec); 5903c27c18e8Smrg tmp_pathspec = NULL; 5904c27c18e8SmrgEOF 5905c27c18e8Smrg 5906c27c18e8Smrg case $host_os in 5907c27c18e8Smrg mingw*) 5908c27c18e8Smrg cat <<"EOF" 5909c27c18e8Smrg { 5910c27c18e8Smrg char* p; 5911c27c18e8Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 5912c27c18e8Smrg { 5913c27c18e8Smrg *p = '/'; 5914c27c18e8Smrg } 5915c27c18e8Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 5916c27c18e8Smrg { 5917c27c18e8Smrg *p = '/'; 5918c27c18e8Smrg } 5919c27c18e8Smrg } 5920c27c18e8SmrgEOF 5921c43cc173Smrg ;; 5922c27c18e8Smrg esac 5923c27c18e8Smrg 5924c27c18e8Smrg cat <<"EOF" 5925c27c18e8Smrg XFREE (target_name); 5926c27c18e8Smrg XFREE (actual_cwrapper_path); 5927c27c18e8Smrg XFREE (actual_cwrapper_name); 5928c27c18e8Smrg 5929c27c18e8Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 5930c27c18e8Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 5931b789ec8aSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 5932b789ec8aSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 5933b789ec8aSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 5934b789ec8aSmrg libraries must come first. */ 5935c27c18e8Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 5936b789ec8aSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 5937c27c18e8Smrg 593837eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 593937eb1ca1Smrg nonnull (lt_argv_zero)); 5940c27c18e8Smrg for (i = 0; i < newargc; i++) 5941c27c18e8Smrg { 594237eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 594337eb1ca1Smrg i, nonnull (newargz[i])); 5944c27c18e8Smrg } 5945c43cc173Smrg 5946c43cc173SmrgEOF 5947c43cc173Smrg 5948c27c18e8Smrg case $host_os in 5949c27c18e8Smrg mingw*) 5950c27c18e8Smrg cat <<"EOF" 5951c27c18e8Smrg /* execv doesn't actually work on mingw as expected on unix */ 595237eb1ca1Smrg newargz = prepare_spawn (newargz); 595348e5ce07Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 5954c27c18e8Smrg if (rval == -1) 5955c27c18e8Smrg { 5956c27c18e8Smrg /* failed to start process */ 595737eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 595837eb1ca1Smrg "(main) failed to launch target \"%s\": %s\n", 595937eb1ca1Smrg lt_argv_zero, nonnull (strerror (errno))); 5960c27c18e8Smrg return 127; 5961c27c18e8Smrg } 5962c27c18e8Smrg return rval; 5963c27c18e8SmrgEOF 5964c27c18e8Smrg ;; 5965c27c18e8Smrg *) 5966c27c18e8Smrg cat <<"EOF" 5967c27c18e8Smrg execv (lt_argv_zero, newargz); 5968c27c18e8Smrg return rval; /* =127, but avoids unused variable warning */ 5969c27c18e8SmrgEOF 5970c27c18e8Smrg ;; 5971c27c18e8Smrg esac 5972c43cc173Smrg 5973c27c18e8Smrg cat <<"EOF" 5974c27c18e8Smrg} 5975c43cc173Smrg 5976c27c18e8Smrgvoid * 5977c27c18e8Smrgxmalloc (size_t num) 5978c27c18e8Smrg{ 5979c27c18e8Smrg void *p = (void *) malloc (num); 5980c27c18e8Smrg if (!p) 598137eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 5982c43cc173Smrg 5983c27c18e8Smrg return p; 5984c27c18e8Smrg} 5985c43cc173Smrg 5986c27c18e8Smrgchar * 5987c27c18e8Smrgxstrdup (const char *string) 5988c27c18e8Smrg{ 5989c27c18e8Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 5990c27c18e8Smrg string) : NULL; 5991c27c18e8Smrg} 5992c43cc173Smrg 5993c27c18e8Smrgconst char * 5994c27c18e8Smrgbase_name (const char *name) 5995c27c18e8Smrg{ 5996c27c18e8Smrg const char *base; 5997c43cc173Smrg 599848e5ce07Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 5999c27c18e8Smrg /* Skip over the disk name in MSDOS pathnames. */ 6000c27c18e8Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6001c27c18e8Smrg name += 2; 6002c27c18e8Smrg#endif 6003c43cc173Smrg 6004c27c18e8Smrg for (base = name; *name; name++) 6005c27c18e8Smrg if (IS_DIR_SEPARATOR (*name)) 6006c27c18e8Smrg base = name + 1; 6007c27c18e8Smrg return base; 6008c27c18e8Smrg} 6009c43cc173Smrg 6010c27c18e8Smrgint 6011c27c18e8Smrgcheck_executable (const char *path) 6012c27c18e8Smrg{ 6013c27c18e8Smrg struct stat st; 6014c43cc173Smrg 601537eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 601637eb1ca1Smrg nonempty (path)); 6017c27c18e8Smrg if ((!path) || (!*path)) 6018c27c18e8Smrg return 0; 6019c43cc173Smrg 6020c27c18e8Smrg if ((stat (path, &st) >= 0) 6021c27c18e8Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6022c27c18e8Smrg return 1; 6023c27c18e8Smrg else 6024c27c18e8Smrg return 0; 6025c27c18e8Smrg} 6026c43cc173Smrg 6027c27c18e8Smrgint 6028c27c18e8Smrgmake_executable (const char *path) 6029c27c18e8Smrg{ 6030c27c18e8Smrg int rval = 0; 6031c27c18e8Smrg struct stat st; 6032c43cc173Smrg 603337eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 603437eb1ca1Smrg nonempty (path)); 6035c27c18e8Smrg if ((!path) || (!*path)) 6036c27c18e8Smrg return 0; 6037c43cc173Smrg 6038c27c18e8Smrg if (stat (path, &st) >= 0) 6039c27c18e8Smrg { 6040c27c18e8Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6041c27c18e8Smrg } 6042c27c18e8Smrg return rval; 6043c27c18e8Smrg} 6044c43cc173Smrg 6045c27c18e8Smrg/* Searches for the full path of the wrapper. Returns 6046c27c18e8Smrg newly allocated full path name if found, NULL otherwise 6047c27c18e8Smrg Does not chase symlinks, even on platforms that support them. 6048c27c18e8Smrg*/ 6049c27c18e8Smrgchar * 6050c27c18e8Smrgfind_executable (const char *wrapper) 6051c27c18e8Smrg{ 6052c27c18e8Smrg int has_slash = 0; 6053c27c18e8Smrg const char *p; 6054c27c18e8Smrg const char *p_next; 6055c27c18e8Smrg /* static buffer for getcwd */ 6056c27c18e8Smrg char tmp[LT_PATHMAX + 1]; 605748e5ce07Smrg size_t tmp_len; 6058c27c18e8Smrg char *concat_name; 6059c43cc173Smrg 606037eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 606137eb1ca1Smrg nonempty (wrapper)); 6062c43cc173Smrg 6063c27c18e8Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 6064c27c18e8Smrg return NULL; 6065c43cc173Smrg 6066c27c18e8Smrg /* Absolute path? */ 606748e5ce07Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6068c27c18e8Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6069c27c18e8Smrg { 6070c27c18e8Smrg concat_name = xstrdup (wrapper); 6071c27c18e8Smrg if (check_executable (concat_name)) 6072c27c18e8Smrg return concat_name; 6073c27c18e8Smrg XFREE (concat_name); 6074c27c18e8Smrg } 6075c27c18e8Smrg else 6076c27c18e8Smrg { 6077c27c18e8Smrg#endif 6078c27c18e8Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 6079c27c18e8Smrg { 6080c27c18e8Smrg concat_name = xstrdup (wrapper); 6081c27c18e8Smrg if (check_executable (concat_name)) 6082c27c18e8Smrg return concat_name; 6083c27c18e8Smrg XFREE (concat_name); 6084c27c18e8Smrg } 608548e5ce07Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6086c27c18e8Smrg } 6087c27c18e8Smrg#endif 6088c43cc173Smrg 6089c27c18e8Smrg for (p = wrapper; *p; p++) 6090c27c18e8Smrg if (*p == '/') 6091c27c18e8Smrg { 6092c27c18e8Smrg has_slash = 1; 6093c27c18e8Smrg break; 6094c27c18e8Smrg } 6095c27c18e8Smrg if (!has_slash) 6096c27c18e8Smrg { 6097c27c18e8Smrg /* no slashes; search PATH */ 6098c27c18e8Smrg const char *path = getenv ("PATH"); 6099c27c18e8Smrg if (path != NULL) 6100c27c18e8Smrg { 6101c27c18e8Smrg for (p = path; *p; p = p_next) 6102c27c18e8Smrg { 6103c27c18e8Smrg const char *q; 6104c27c18e8Smrg size_t p_len; 6105c27c18e8Smrg for (q = p; *q; q++) 6106c27c18e8Smrg if (IS_PATH_SEPARATOR (*q)) 6107c27c18e8Smrg break; 610848e5ce07Smrg p_len = (size_t) (q - p); 6109c27c18e8Smrg p_next = (*q == '\0' ? q : q + 1); 6110c27c18e8Smrg if (p_len == 0) 6111c27c18e8Smrg { 6112c27c18e8Smrg /* empty path: current directory */ 6113c27c18e8Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 611437eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 611537eb1ca1Smrg nonnull (strerror (errno))); 6116c27c18e8Smrg tmp_len = strlen (tmp); 6117c27c18e8Smrg concat_name = 6118c27c18e8Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6119c27c18e8Smrg memcpy (concat_name, tmp, tmp_len); 6120c27c18e8Smrg concat_name[tmp_len] = '/'; 6121c27c18e8Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6122c27c18e8Smrg } 6123c27c18e8Smrg else 6124c27c18e8Smrg { 6125c27c18e8Smrg concat_name = 6126c27c18e8Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6127c27c18e8Smrg memcpy (concat_name, p, p_len); 6128c27c18e8Smrg concat_name[p_len] = '/'; 6129c27c18e8Smrg strcpy (concat_name + p_len + 1, wrapper); 6130c27c18e8Smrg } 6131c27c18e8Smrg if (check_executable (concat_name)) 6132c27c18e8Smrg return concat_name; 6133c27c18e8Smrg XFREE (concat_name); 6134c27c18e8Smrg } 6135c27c18e8Smrg } 6136c27c18e8Smrg /* not found in PATH; assume curdir */ 6137c27c18e8Smrg } 6138c27c18e8Smrg /* Relative path | not found in path: prepend cwd */ 6139c27c18e8Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 614037eb1ca1Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 614137eb1ca1Smrg nonnull (strerror (errno))); 6142c27c18e8Smrg tmp_len = strlen (tmp); 6143c27c18e8Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6144c27c18e8Smrg memcpy (concat_name, tmp, tmp_len); 6145c27c18e8Smrg concat_name[tmp_len] = '/'; 6146c27c18e8Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6147c43cc173Smrg 6148c27c18e8Smrg if (check_executable (concat_name)) 6149c27c18e8Smrg return concat_name; 6150c27c18e8Smrg XFREE (concat_name); 6151c27c18e8Smrg return NULL; 6152c27c18e8Smrg} 6153c43cc173Smrg 6154c27c18e8Smrgchar * 6155c27c18e8Smrgchase_symlinks (const char *pathspec) 6156c27c18e8Smrg{ 6157c27c18e8Smrg#ifndef S_ISLNK 6158c27c18e8Smrg return xstrdup (pathspec); 6159c27c18e8Smrg#else 6160c27c18e8Smrg char buf[LT_PATHMAX]; 6161c27c18e8Smrg struct stat s; 6162c27c18e8Smrg char *tmp_pathspec = xstrdup (pathspec); 6163c27c18e8Smrg char *p; 6164c27c18e8Smrg int has_symlinks = 0; 6165c27c18e8Smrg while (strlen (tmp_pathspec) && !has_symlinks) 6166c27c18e8Smrg { 616737eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 616837eb1ca1Smrg "checking path component for symlinks: %s\n", 616937eb1ca1Smrg tmp_pathspec); 6170c27c18e8Smrg if (lstat (tmp_pathspec, &s) == 0) 6171c27c18e8Smrg { 6172c27c18e8Smrg if (S_ISLNK (s.st_mode) != 0) 6173c27c18e8Smrg { 6174c27c18e8Smrg has_symlinks = 1; 6175c27c18e8Smrg break; 6176c27c18e8Smrg } 6177c43cc173Smrg 6178c27c18e8Smrg /* search backwards for last DIR_SEPARATOR */ 6179c27c18e8Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6180c27c18e8Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6181c27c18e8Smrg p--; 6182c27c18e8Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6183c27c18e8Smrg { 6184c27c18e8Smrg /* no more DIR_SEPARATORS left */ 6185c27c18e8Smrg break; 6186c27c18e8Smrg } 6187c27c18e8Smrg *p = '\0'; 6188c27c18e8Smrg } 6189c27c18e8Smrg else 6190c27c18e8Smrg { 619137eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 619237eb1ca1Smrg "error accessing file \"%s\": %s", 619337eb1ca1Smrg tmp_pathspec, nonnull (strerror (errno))); 6194c27c18e8Smrg } 6195c27c18e8Smrg } 6196c27c18e8Smrg XFREE (tmp_pathspec); 6197c43cc173Smrg 6198c27c18e8Smrg if (!has_symlinks) 6199c27c18e8Smrg { 6200c27c18e8Smrg return xstrdup (pathspec); 6201c27c18e8Smrg } 6202c43cc173Smrg 6203c27c18e8Smrg tmp_pathspec = realpath (pathspec, buf); 6204c27c18e8Smrg if (tmp_pathspec == 0) 6205c27c18e8Smrg { 620637eb1ca1Smrg lt_fatal (__FILE__, __LINE__, 620737eb1ca1Smrg "could not follow symlinks for %s", pathspec); 6208c27c18e8Smrg } 6209c27c18e8Smrg return xstrdup (tmp_pathspec); 6210c27c18e8Smrg#endif 6211c27c18e8Smrg} 6212c43cc173Smrg 6213c27c18e8Smrgchar * 6214c27c18e8Smrgstrendzap (char *str, const char *pat) 6215c27c18e8Smrg{ 6216c27c18e8Smrg size_t len, patlen; 6217c43cc173Smrg 6218c27c18e8Smrg assert (str != NULL); 6219c27c18e8Smrg assert (pat != NULL); 6220c43cc173Smrg 6221c27c18e8Smrg len = strlen (str); 6222c27c18e8Smrg patlen = strlen (pat); 6223c43cc173Smrg 6224c27c18e8Smrg if (patlen <= len) 6225c27c18e8Smrg { 6226c27c18e8Smrg str += len - patlen; 622748e5ce07Smrg if (STREQ (str, pat)) 6228c27c18e8Smrg *str = '\0'; 6229c27c18e8Smrg } 6230c27c18e8Smrg return str; 6231c27c18e8Smrg} 6232c43cc173Smrg 623337eb1ca1Smrgvoid 623437eb1ca1Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 623537eb1ca1Smrg{ 623637eb1ca1Smrg va_list args; 623737eb1ca1Smrg if (lt_debug) 623837eb1ca1Smrg { 623937eb1ca1Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 624037eb1ca1Smrg va_start (args, fmt); 624137eb1ca1Smrg (void) vfprintf (stderr, fmt, args); 624237eb1ca1Smrg va_end (args); 624337eb1ca1Smrg } 624437eb1ca1Smrg} 624537eb1ca1Smrg 6246c27c18e8Smrgstatic void 624737eb1ca1Smrglt_error_core (int exit_status, const char *file, 624837eb1ca1Smrg int line, const char *mode, 6249c27c18e8Smrg const char *message, va_list ap) 6250c27c18e8Smrg{ 625137eb1ca1Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6252c27c18e8Smrg vfprintf (stderr, message, ap); 6253c27c18e8Smrg fprintf (stderr, ".\n"); 6254c43cc173Smrg 6255c27c18e8Smrg if (exit_status >= 0) 6256c27c18e8Smrg exit (exit_status); 6257c27c18e8Smrg} 6258c43cc173Smrg 6259c27c18e8Smrgvoid 626037eb1ca1Smrglt_fatal (const char *file, int line, const char *message, ...) 6261c27c18e8Smrg{ 6262c27c18e8Smrg va_list ap; 6263c27c18e8Smrg va_start (ap, message); 626437eb1ca1Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6265c27c18e8Smrg va_end (ap); 6266c27c18e8Smrg} 6267c43cc173Smrg 626837eb1ca1Smrgstatic const char * 626937eb1ca1Smrgnonnull (const char *s) 627037eb1ca1Smrg{ 627137eb1ca1Smrg return s ? s : "(null)"; 627237eb1ca1Smrg} 627337eb1ca1Smrg 627437eb1ca1Smrgstatic const char * 627537eb1ca1Smrgnonempty (const char *s) 627637eb1ca1Smrg{ 627737eb1ca1Smrg return (s && !*s) ? "(empty)" : nonnull (s); 627837eb1ca1Smrg} 627937eb1ca1Smrg 6280c27c18e8Smrgvoid 6281c27c18e8Smrglt_setenv (const char *name, const char *value) 6282c27c18e8Smrg{ 628337eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 628437eb1ca1Smrg "(lt_setenv) setting '%s' to '%s'\n", 628537eb1ca1Smrg nonnull (name), nonnull (value)); 6286c27c18e8Smrg { 6287c27c18e8Smrg#ifdef HAVE_SETENV 6288c27c18e8Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 6289c27c18e8Smrg char *str = xstrdup (value); 6290c27c18e8Smrg setenv (name, str, 1); 6291c27c18e8Smrg#else 629248e5ce07Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6293c27c18e8Smrg char *str = XMALLOC (char, len); 6294c27c18e8Smrg sprintf (str, "%s=%s", name, value); 6295c27c18e8Smrg if (putenv (str) != EXIT_SUCCESS) 6296c27c18e8Smrg { 6297c27c18e8Smrg XFREE (str); 6298c27c18e8Smrg } 6299c27c18e8Smrg#endif 6300c27c18e8Smrg } 6301c27c18e8Smrg} 6302c43cc173Smrg 6303c27c18e8Smrgchar * 6304c27c18e8Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 6305c27c18e8Smrg{ 6306c27c18e8Smrg char *new_value; 6307c27c18e8Smrg if (orig_value && *orig_value) 6308c27c18e8Smrg { 630948e5ce07Smrg size_t orig_value_len = strlen (orig_value); 631048e5ce07Smrg size_t add_len = strlen (add); 6311c27c18e8Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6312c27c18e8Smrg if (to_end) 6313c27c18e8Smrg { 6314c27c18e8Smrg strcpy (new_value, orig_value); 6315c27c18e8Smrg strcpy (new_value + orig_value_len, add); 6316c27c18e8Smrg } 6317c27c18e8Smrg else 6318c27c18e8Smrg { 6319c27c18e8Smrg strcpy (new_value, add); 6320c27c18e8Smrg strcpy (new_value + add_len, orig_value); 6321c27c18e8Smrg } 6322c27c18e8Smrg } 6323c27c18e8Smrg else 6324c27c18e8Smrg { 6325c27c18e8Smrg new_value = xstrdup (add); 6326c27c18e8Smrg } 6327c27c18e8Smrg return new_value; 6328c27c18e8Smrg} 6329c43cc173Smrg 6330c27c18e8Smrgvoid 6331c27c18e8Smrglt_update_exe_path (const char *name, const char *value) 6332c27c18e8Smrg{ 633337eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 633437eb1ca1Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 633537eb1ca1Smrg nonnull (name), nonnull (value)); 6336c43cc173Smrg 6337c27c18e8Smrg if (name && *name && value && *value) 6338c27c18e8Smrg { 6339c27c18e8Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6340c27c18e8Smrg /* some systems can't cope with a ':'-terminated path #' */ 634148e5ce07Smrg size_t len = strlen (new_value); 634248e5ce07Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6343c27c18e8Smrg { 634448e5ce07Smrg new_value[--len] = '\0'; 6345c27c18e8Smrg } 6346c27c18e8Smrg lt_setenv (name, new_value); 6347c27c18e8Smrg XFREE (new_value); 6348c27c18e8Smrg } 6349c27c18e8Smrg} 6350c43cc173Smrg 6351c27c18e8Smrgvoid 6352c27c18e8Smrglt_update_lib_path (const char *name, const char *value) 6353c27c18e8Smrg{ 635437eb1ca1Smrg lt_debugprintf (__FILE__, __LINE__, 635537eb1ca1Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 635637eb1ca1Smrg nonnull (name), nonnull (value)); 6357c43cc173Smrg 6358c27c18e8Smrg if (name && *name && value && *value) 6359c27c18e8Smrg { 6360c27c18e8Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6361c27c18e8Smrg lt_setenv (name, new_value); 6362c27c18e8Smrg XFREE (new_value); 6363c27c18e8Smrg } 6364c27c18e8Smrg} 6365c43cc173Smrg 636637eb1ca1SmrgEOF 636737eb1ca1Smrg case $host_os in 636837eb1ca1Smrg mingw*) 636937eb1ca1Smrg cat <<"EOF" 637037eb1ca1Smrg 637137eb1ca1Smrg/* Prepares an argument vector before calling spawn(). 637237eb1ca1Smrg Note that spawn() does not by itself call the command interpreter 637337eb1ca1Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 637437eb1ca1Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 637537eb1ca1Smrg GetVersionEx(&v); 637637eb1ca1Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 637737eb1ca1Smrg }) ? "cmd.exe" : "command.com"). 637837eb1ca1Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 637937eb1ca1Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 638037eb1ca1Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 638137eb1ca1Smrg special way: 638237eb1ca1Smrg - Space and tab are interpreted as delimiters. They are not treated as 638337eb1ca1Smrg delimiters if they are surrounded by double quotes: "...". 638437eb1ca1Smrg - Unescaped double quotes are removed from the input. Their only effect is 638537eb1ca1Smrg that within double quotes, space and tab are treated like normal 638637eb1ca1Smrg characters. 638737eb1ca1Smrg - Backslashes not followed by double quotes are not special. 638837eb1ca1Smrg - But 2*n+1 backslashes followed by a double quote become 638937eb1ca1Smrg n backslashes followed by a double quote (n >= 0): 639037eb1ca1Smrg \" -> " 639137eb1ca1Smrg \\\" -> \" 639237eb1ca1Smrg \\\\\" -> \\" 639337eb1ca1Smrg */ 639437eb1ca1Smrg#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" 639537eb1ca1Smrg#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" 639637eb1ca1Smrgchar ** 639737eb1ca1Smrgprepare_spawn (char **argv) 639837eb1ca1Smrg{ 639937eb1ca1Smrg size_t argc; 640037eb1ca1Smrg char **new_argv; 640137eb1ca1Smrg size_t i; 640237eb1ca1Smrg 640337eb1ca1Smrg /* Count number of arguments. */ 640437eb1ca1Smrg for (argc = 0; argv[argc] != NULL; argc++) 640537eb1ca1Smrg ; 640637eb1ca1Smrg 640737eb1ca1Smrg /* Allocate new argument vector. */ 640837eb1ca1Smrg new_argv = XMALLOC (char *, argc + 1); 640937eb1ca1Smrg 641037eb1ca1Smrg /* Put quoted arguments into the new argument vector. */ 641137eb1ca1Smrg for (i = 0; i < argc; i++) 641237eb1ca1Smrg { 641337eb1ca1Smrg const char *string = argv[i]; 641437eb1ca1Smrg 641537eb1ca1Smrg if (string[0] == '\0') 641637eb1ca1Smrg new_argv[i] = xstrdup ("\"\""); 641737eb1ca1Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 641837eb1ca1Smrg { 641937eb1ca1Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 642037eb1ca1Smrg size_t length; 642137eb1ca1Smrg unsigned int backslashes; 642237eb1ca1Smrg const char *s; 642337eb1ca1Smrg char *quoted_string; 642437eb1ca1Smrg char *p; 642537eb1ca1Smrg 642637eb1ca1Smrg length = 0; 642737eb1ca1Smrg backslashes = 0; 642837eb1ca1Smrg if (quote_around) 642937eb1ca1Smrg length++; 643037eb1ca1Smrg for (s = string; *s != '\0'; s++) 643137eb1ca1Smrg { 643237eb1ca1Smrg char c = *s; 643337eb1ca1Smrg if (c == '"') 643437eb1ca1Smrg length += backslashes + 1; 643537eb1ca1Smrg length++; 643637eb1ca1Smrg if (c == '\\') 643737eb1ca1Smrg backslashes++; 643837eb1ca1Smrg else 643937eb1ca1Smrg backslashes = 0; 644037eb1ca1Smrg } 644137eb1ca1Smrg if (quote_around) 644237eb1ca1Smrg length += backslashes + 1; 644337eb1ca1Smrg 644437eb1ca1Smrg quoted_string = XMALLOC (char, length + 1); 644537eb1ca1Smrg 644637eb1ca1Smrg p = quoted_string; 644737eb1ca1Smrg backslashes = 0; 644837eb1ca1Smrg if (quote_around) 644937eb1ca1Smrg *p++ = '"'; 645037eb1ca1Smrg for (s = string; *s != '\0'; s++) 645137eb1ca1Smrg { 645237eb1ca1Smrg char c = *s; 645337eb1ca1Smrg if (c == '"') 645437eb1ca1Smrg { 645537eb1ca1Smrg unsigned int j; 645637eb1ca1Smrg for (j = backslashes + 1; j > 0; j--) 645737eb1ca1Smrg *p++ = '\\'; 645837eb1ca1Smrg } 645937eb1ca1Smrg *p++ = c; 646037eb1ca1Smrg if (c == '\\') 646137eb1ca1Smrg backslashes++; 646237eb1ca1Smrg else 646337eb1ca1Smrg backslashes = 0; 646437eb1ca1Smrg } 646537eb1ca1Smrg if (quote_around) 646637eb1ca1Smrg { 646737eb1ca1Smrg unsigned int j; 646837eb1ca1Smrg for (j = backslashes; j > 0; j--) 646937eb1ca1Smrg *p++ = '\\'; 647037eb1ca1Smrg *p++ = '"'; 647137eb1ca1Smrg } 647237eb1ca1Smrg *p = '\0'; 647337eb1ca1Smrg 647437eb1ca1Smrg new_argv[i] = quoted_string; 647537eb1ca1Smrg } 647637eb1ca1Smrg else 647737eb1ca1Smrg new_argv[i] = (char *) string; 647837eb1ca1Smrg } 647937eb1ca1Smrg new_argv[argc] = NULL; 648037eb1ca1Smrg 648137eb1ca1Smrg return new_argv; 648237eb1ca1Smrg} 648337eb1ca1SmrgEOF 648437eb1ca1Smrg ;; 648537eb1ca1Smrg esac 648637eb1ca1Smrg 648737eb1ca1Smrg cat <<"EOF" 648837eb1ca1Smrgvoid lt_dump_script (FILE* f) 648937eb1ca1Smrg{ 649037eb1ca1SmrgEOF 649137eb1ca1Smrg func_emit_wrapper yes | 6492f1ee322dSmrg $SED -n -e ' 6493f1ee322dSmrgs/^\(.\{79\}\)\(..*\)/\1\ 6494f1ee322dSmrg\2/ 6495f1ee322dSmrgh 6496f1ee322dSmrgs/\([\\"]\)/\\\1/g 6497f1ee322dSmrgs/$/\\n/ 6498f1ee322dSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6499f1ee322dSmrgg 6500f1ee322dSmrgD' 650137eb1ca1Smrg cat <<"EOF" 650237eb1ca1Smrg} 6503c27c18e8SmrgEOF 6504c27c18e8Smrg} 6505c27c18e8Smrg# end: func_emit_cwrapperexe_src 6506c43cc173Smrg 650737eb1ca1Smrg# func_win32_import_lib_p ARG 650837eb1ca1Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 650937eb1ca1Smrgfunc_win32_import_lib_p () 651037eb1ca1Smrg{ 651148e5ce07Smrg $debug_cmd 651248e5ce07Smrg 651337eb1ca1Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 651437eb1ca1Smrg *import*) : ;; 651537eb1ca1Smrg *) false ;; 651637eb1ca1Smrg esac 651737eb1ca1Smrg} 651837eb1ca1Smrg 651948e5ce07Smrg# func_suncc_cstd_abi 652048e5ce07Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 652148e5ce07Smrg# Several compiler flags select an ABI that is incompatible with the 652248e5ce07Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 652348e5ce07Smrgfunc_suncc_cstd_abi () 652448e5ce07Smrg{ 652548e5ce07Smrg $debug_cmd 652648e5ce07Smrg 652748e5ce07Smrg case " $compile_command " in 652848e5ce07Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 652948e5ce07Smrg suncc_use_cstd_abi=no 653048e5ce07Smrg ;; 653148e5ce07Smrg *) 653248e5ce07Smrg suncc_use_cstd_abi=yes 653348e5ce07Smrg ;; 653448e5ce07Smrg esac 653548e5ce07Smrg} 653648e5ce07Smrg 6537c27c18e8Smrg# func_mode_link arg... 6538c27c18e8Smrgfunc_mode_link () 6539c27c18e8Smrg{ 654048e5ce07Smrg $debug_cmd 654148e5ce07Smrg 6542c27c18e8Smrg case $host in 6543c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6544c27c18e8Smrg # It is impossible to link a dll without this setting, and 6545c27c18e8Smrg # we shouldn't force the makefile maintainer to figure out 654648e5ce07Smrg # what system we are compiling for in order to pass an extra 6547c27c18e8Smrg # flag for every libtool invocation. 6548c27c18e8Smrg # allow_undefined=no 6549c43cc173Smrg 6550c27c18e8Smrg # FIXME: Unfortunately, there are problems with the above when trying 655148e5ce07Smrg # to make a dll that has undefined symbols, in which case not 6552c27c18e8Smrg # even a static library is built. For now, we need to specify 6553c27c18e8Smrg # -no-undefined on the libtool link line when we can be certain 6554c27c18e8Smrg # that all symbols are satisfied, otherwise we get a static library. 6555c27c18e8Smrg allow_undefined=yes 6556c27c18e8Smrg ;; 6557c27c18e8Smrg *) 6558c27c18e8Smrg allow_undefined=yes 6559c27c18e8Smrg ;; 6560c27c18e8Smrg esac 6561c27c18e8Smrg libtool_args=$nonopt 6562c27c18e8Smrg base_compile="$nonopt $@" 6563c27c18e8Smrg compile_command=$nonopt 6564c27c18e8Smrg finalize_command=$nonopt 6565c43cc173Smrg 6566c27c18e8Smrg compile_rpath= 6567c27c18e8Smrg finalize_rpath= 6568c27c18e8Smrg compile_shlibpath= 6569c27c18e8Smrg finalize_shlibpath= 6570c27c18e8Smrg convenience= 6571c27c18e8Smrg old_convenience= 6572c27c18e8Smrg deplibs= 6573c27c18e8Smrg old_deplibs= 6574c27c18e8Smrg compiler_flags= 6575c27c18e8Smrg linker_flags= 6576c27c18e8Smrg dllsearchpath= 6577c27c18e8Smrg lib_search_path=`pwd` 6578c27c18e8Smrg inst_prefix_dir= 6579c27c18e8Smrg new_inherited_linker_flags= 6580c43cc173Smrg 6581c27c18e8Smrg avoid_version=no 658237eb1ca1Smrg bindir= 6583c27c18e8Smrg dlfiles= 6584c27c18e8Smrg dlprefiles= 6585c27c18e8Smrg dlself=no 6586c27c18e8Smrg export_dynamic=no 6587c27c18e8Smrg export_symbols= 6588c27c18e8Smrg export_symbols_regex= 6589c27c18e8Smrg generated= 6590c27c18e8Smrg libobjs= 6591c27c18e8Smrg ltlibs= 6592c27c18e8Smrg module=no 6593c27c18e8Smrg no_install=no 6594c27c18e8Smrg objs= 659548e5ce07Smrg os2dllname= 6596c27c18e8Smrg non_pic_objects= 6597c27c18e8Smrg precious_files_regex= 6598c27c18e8Smrg prefer_static_libs=no 659948e5ce07Smrg preload=false 6600c27c18e8Smrg prev= 6601c27c18e8Smrg prevarg= 6602c27c18e8Smrg release= 6603c27c18e8Smrg rpath= 6604c27c18e8Smrg xrpath= 6605c27c18e8Smrg perm_rpath= 6606c27c18e8Smrg temp_rpath= 6607c27c18e8Smrg thread_safe=no 6608c27c18e8Smrg vinfo= 6609c27c18e8Smrg vinfo_number=no 6610c27c18e8Smrg weak_libs= 661148e5ce07Smrg single_module=$wl-single_module 6612c27c18e8Smrg func_infer_tag $base_compile 6613c43cc173Smrg 6614c27c18e8Smrg # We need to know -static, to get the right output filenames. 6615c27c18e8Smrg for arg 6616c27c18e8Smrg do 6617c27c18e8Smrg case $arg in 6618c27c18e8Smrg -shared) 661948e5ce07Smrg test yes != "$build_libtool_libs" \ 662048e5ce07Smrg && func_fatal_configuration "cannot build a shared library" 6621c27c18e8Smrg build_old_libs=no 6622c27c18e8Smrg break 6623c27c18e8Smrg ;; 6624c27c18e8Smrg -all-static | -static | -static-libtool-libs) 6625c27c18e8Smrg case $arg in 6626c27c18e8Smrg -all-static) 662748e5ce07Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6628c27c18e8Smrg func_warning "complete static linking is impossible in this configuration" 6629c27c18e8Smrg fi 6630c27c18e8Smrg if test -n "$link_static_flag"; then 6631c27c18e8Smrg dlopen_self=$dlopen_self_static 6632c27c18e8Smrg fi 6633c27c18e8Smrg prefer_static_libs=yes 6634c27c18e8Smrg ;; 6635c27c18e8Smrg -static) 6636c27c18e8Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6637c27c18e8Smrg dlopen_self=$dlopen_self_static 6638c27c18e8Smrg fi 6639c27c18e8Smrg prefer_static_libs=built 6640c27c18e8Smrg ;; 6641c27c18e8Smrg -static-libtool-libs) 6642c27c18e8Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6643c27c18e8Smrg dlopen_self=$dlopen_self_static 6644c27c18e8Smrg fi 6645c27c18e8Smrg prefer_static_libs=yes 6646c27c18e8Smrg ;; 6647c27c18e8Smrg esac 6648c27c18e8Smrg build_libtool_libs=no 6649c27c18e8Smrg build_old_libs=yes 6650c27c18e8Smrg break 6651c43cc173Smrg ;; 6652c43cc173Smrg esac 6653c27c18e8Smrg done 6654c43cc173Smrg 6655c27c18e8Smrg # See if our shared archives depend on static archives. 6656c27c18e8Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6657c43cc173Smrg 6658c27c18e8Smrg # Go through the arguments, transforming them on the way. 6659c27c18e8Smrg while test "$#" -gt 0; do 666048e5ce07Smrg arg=$1 6661c27c18e8Smrg shift 6662c27c18e8Smrg func_quote_for_eval "$arg" 6663c27c18e8Smrg qarg=$func_quote_for_eval_unquoted_result 6664c27c18e8Smrg func_append libtool_args " $func_quote_for_eval_result" 6665c43cc173Smrg 6666c27c18e8Smrg # If the previous option needs an argument, assign it. 6667c27c18e8Smrg if test -n "$prev"; then 6668c27c18e8Smrg case $prev in 6669c27c18e8Smrg output) 6670c27c18e8Smrg func_append compile_command " @OUTPUT@" 6671c27c18e8Smrg func_append finalize_command " @OUTPUT@" 6672c43cc173Smrg ;; 6673c43cc173Smrg esac 6674c43cc173Smrg 6675c27c18e8Smrg case $prev in 667637eb1ca1Smrg bindir) 667748e5ce07Smrg bindir=$arg 667837eb1ca1Smrg prev= 667937eb1ca1Smrg continue 668037eb1ca1Smrg ;; 6681c27c18e8Smrg dlfiles|dlprefiles) 668248e5ce07Smrg $preload || { 6683c27c18e8Smrg # Add the symbol object into the linking commands. 6684c27c18e8Smrg func_append compile_command " @SYMFILE@" 6685c27c18e8Smrg func_append finalize_command " @SYMFILE@" 668648e5ce07Smrg preload=: 668748e5ce07Smrg } 6688c27c18e8Smrg case $arg in 6689c27c18e8Smrg *.la | *.lo) ;; # We handle these cases below. 6690c27c18e8Smrg force) 669148e5ce07Smrg if test no = "$dlself"; then 6692c27c18e8Smrg dlself=needless 6693c27c18e8Smrg export_dynamic=yes 6694c27c18e8Smrg fi 6695c27c18e8Smrg prev= 6696c27c18e8Smrg continue 6697c27c18e8Smrg ;; 6698c27c18e8Smrg self) 669948e5ce07Smrg if test dlprefiles = "$prev"; then 6700c27c18e8Smrg dlself=yes 670148e5ce07Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6702c27c18e8Smrg dlself=yes 6703c43cc173Smrg else 6704c27c18e8Smrg dlself=needless 6705c27c18e8Smrg export_dynamic=yes 6706c43cc173Smrg fi 6707c27c18e8Smrg prev= 6708c27c18e8Smrg continue 6709c27c18e8Smrg ;; 6710c27c18e8Smrg *) 671148e5ce07Smrg if test dlfiles = "$prev"; then 6712b789ec8aSmrg func_append dlfiles " $arg" 6713c27c18e8Smrg else 6714b789ec8aSmrg func_append dlprefiles " $arg" 6715c27c18e8Smrg fi 6716c27c18e8Smrg prev= 6717c27c18e8Smrg continue 6718c27c18e8Smrg ;; 6719c43cc173Smrg esac 6720c43cc173Smrg ;; 6721c27c18e8Smrg expsyms) 672248e5ce07Smrg export_symbols=$arg 6723c27c18e8Smrg test -f "$arg" \ 672448e5ce07Smrg || func_fatal_error "symbol file '$arg' does not exist" 6725c27c18e8Smrg prev= 6726c27c18e8Smrg continue 6727c27c18e8Smrg ;; 6728c27c18e8Smrg expsyms_regex) 672948e5ce07Smrg export_symbols_regex=$arg 6730c27c18e8Smrg prev= 6731c27c18e8Smrg continue 6732c27c18e8Smrg ;; 6733c27c18e8Smrg framework) 6734c27c18e8Smrg case $host in 6735c27c18e8Smrg *-*-darwin*) 6736c27c18e8Smrg case "$deplibs " in 6737c27c18e8Smrg *" $qarg.ltframework "*) ;; 6738b789ec8aSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 6739c27c18e8Smrg ;; 6740c43cc173Smrg esac 6741c27c18e8Smrg ;; 6742c43cc173Smrg esac 6743c27c18e8Smrg prev= 6744c27c18e8Smrg continue 6745c27c18e8Smrg ;; 6746c27c18e8Smrg inst_prefix) 674748e5ce07Smrg inst_prefix_dir=$arg 674848e5ce07Smrg prev= 674948e5ce07Smrg continue 675048e5ce07Smrg ;; 675148e5ce07Smrg mllvm) 675248e5ce07Smrg # Clang does not use LLVM to link, so we can simply discard any 675348e5ce07Smrg # '-mllvm $arg' options when doing the link step. 6754c27c18e8Smrg prev= 6755c27c18e8Smrg continue 6756c27c18e8Smrg ;; 6757c27c18e8Smrg objectlist) 6758c27c18e8Smrg if test -f "$arg"; then 6759c27c18e8Smrg save_arg=$arg 6760c27c18e8Smrg moreargs= 6761c27c18e8Smrg for fil in `cat "$save_arg"` 6762c27c18e8Smrg do 6763b789ec8aSmrg# func_append moreargs " $fil" 6764c27c18e8Smrg arg=$fil 6765c27c18e8Smrg # A libtool-controlled object. 6766c43cc173Smrg 6767c27c18e8Smrg # Check to see that this really is a libtool object. 6768c27c18e8Smrg if func_lalib_unsafe_p "$arg"; then 6769c27c18e8Smrg pic_object= 6770c27c18e8Smrg non_pic_object= 6771c43cc173Smrg 6772c27c18e8Smrg # Read the .lo file 6773c27c18e8Smrg func_source "$arg" 6774c43cc173Smrg 6775c27c18e8Smrg if test -z "$pic_object" || 6776c27c18e8Smrg test -z "$non_pic_object" || 677748e5ce07Smrg test none = "$pic_object" && 677848e5ce07Smrg test none = "$non_pic_object"; then 677948e5ce07Smrg func_fatal_error "cannot find name of object for '$arg'" 6780c27c18e8Smrg fi 6781c43cc173Smrg 6782c27c18e8Smrg # Extract subdirectory from the argument. 6783c27c18e8Smrg func_dirname "$arg" "/" "" 678448e5ce07Smrg xdir=$func_dirname_result 6785c43cc173Smrg 678648e5ce07Smrg if test none != "$pic_object"; then 6787c27c18e8Smrg # Prepend the subdirectory the object is found in. 678848e5ce07Smrg pic_object=$xdir$pic_object 6789c43cc173Smrg 679048e5ce07Smrg if test dlfiles = "$prev"; then 679148e5ce07Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 6792b789ec8aSmrg func_append dlfiles " $pic_object" 6793c27c18e8Smrg prev= 6794c27c18e8Smrg continue 6795c27c18e8Smrg else 6796c27c18e8Smrg # If libtool objects are unsupported, then we need to preload. 6797c27c18e8Smrg prev=dlprefiles 6798c27c18e8Smrg fi 6799c27c18e8Smrg fi 6800c43cc173Smrg 6801c27c18e8Smrg # CHECK ME: I think I busted this. -Ossama 680248e5ce07Smrg if test dlprefiles = "$prev"; then 6803c27c18e8Smrg # Preload the old-style object. 6804b789ec8aSmrg func_append dlprefiles " $pic_object" 6805c27c18e8Smrg prev= 6806c27c18e8Smrg fi 6807c43cc173Smrg 6808c27c18e8Smrg # A PIC object. 6809c27c18e8Smrg func_append libobjs " $pic_object" 681048e5ce07Smrg arg=$pic_object 6811c27c18e8Smrg fi 6812c43cc173Smrg 6813c27c18e8Smrg # Non-PIC object. 681448e5ce07Smrg if test none != "$non_pic_object"; then 6815c27c18e8Smrg # Prepend the subdirectory the object is found in. 681648e5ce07Smrg non_pic_object=$xdir$non_pic_object 6817c43cc173Smrg 6818c27c18e8Smrg # A standard non-PIC object 6819c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 682048e5ce07Smrg if test -z "$pic_object" || test none = "$pic_object"; then 682148e5ce07Smrg arg=$non_pic_object 6822c27c18e8Smrg fi 6823c27c18e8Smrg else 6824c27c18e8Smrg # If the PIC object exists, use it instead. 6825c27c18e8Smrg # $xdir was prepended to $pic_object above. 682648e5ce07Smrg non_pic_object=$pic_object 6827c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 6828c27c18e8Smrg fi 6829c27c18e8Smrg else 6830c27c18e8Smrg # Only an error if not doing a dry-run. 6831c27c18e8Smrg if $opt_dry_run; then 6832c27c18e8Smrg # Extract subdirectory from the argument. 6833c27c18e8Smrg func_dirname "$arg" "/" "" 683448e5ce07Smrg xdir=$func_dirname_result 6835c27c18e8Smrg 6836c27c18e8Smrg func_lo2o "$arg" 6837c27c18e8Smrg pic_object=$xdir$objdir/$func_lo2o_result 6838c27c18e8Smrg non_pic_object=$xdir$func_lo2o_result 6839c27c18e8Smrg func_append libobjs " $pic_object" 6840c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 6841c27c18e8Smrg else 684248e5ce07Smrg func_fatal_error "'$arg' is not a valid libtool object" 6843c27c18e8Smrg fi 6844c27c18e8Smrg fi 6845c43cc173Smrg done 6846c27c18e8Smrg else 684748e5ce07Smrg func_fatal_error "link input file '$arg' does not exist" 6848c43cc173Smrg fi 6849c27c18e8Smrg arg=$save_arg 6850c27c18e8Smrg prev= 6851c27c18e8Smrg continue 6852c27c18e8Smrg ;; 685348e5ce07Smrg os2dllname) 685448e5ce07Smrg os2dllname=$arg 685548e5ce07Smrg prev= 685648e5ce07Smrg continue 685748e5ce07Smrg ;; 6858c27c18e8Smrg precious_regex) 685948e5ce07Smrg precious_files_regex=$arg 6860c27c18e8Smrg prev= 6861c27c18e8Smrg continue 6862c27c18e8Smrg ;; 6863c27c18e8Smrg release) 686448e5ce07Smrg release=-$arg 6865c27c18e8Smrg prev= 6866c27c18e8Smrg continue 6867c27c18e8Smrg ;; 6868c27c18e8Smrg rpath | xrpath) 6869c27c18e8Smrg # We need an absolute path. 6870c27c18e8Smrg case $arg in 6871c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 6872c27c18e8Smrg *) 6873c27c18e8Smrg func_fatal_error "only absolute run-paths are allowed" 6874c27c18e8Smrg ;; 6875c43cc173Smrg esac 687648e5ce07Smrg if test rpath = "$prev"; then 6877c27c18e8Smrg case "$rpath " in 6878c27c18e8Smrg *" $arg "*) ;; 6879b789ec8aSmrg *) func_append rpath " $arg" ;; 6880c27c18e8Smrg esac 6881c27c18e8Smrg else 6882c27c18e8Smrg case "$xrpath " in 6883c27c18e8Smrg *" $arg "*) ;; 6884b789ec8aSmrg *) func_append xrpath " $arg" ;; 6885c27c18e8Smrg esac 6886c27c18e8Smrg fi 6887c27c18e8Smrg prev= 6888c27c18e8Smrg continue 6889c27c18e8Smrg ;; 6890c27c18e8Smrg shrext) 689148e5ce07Smrg shrext_cmds=$arg 6892c27c18e8Smrg prev= 6893c27c18e8Smrg continue 6894c27c18e8Smrg ;; 6895c27c18e8Smrg weak) 6896b789ec8aSmrg func_append weak_libs " $arg" 6897c27c18e8Smrg prev= 6898c27c18e8Smrg continue 6899c27c18e8Smrg ;; 6900c27c18e8Smrg xcclinker) 6901b789ec8aSmrg func_append linker_flags " $qarg" 6902b789ec8aSmrg func_append compiler_flags " $qarg" 6903c27c18e8Smrg prev= 6904c27c18e8Smrg func_append compile_command " $qarg" 6905c27c18e8Smrg func_append finalize_command " $qarg" 6906c27c18e8Smrg continue 6907c27c18e8Smrg ;; 6908c27c18e8Smrg xcompiler) 6909b789ec8aSmrg func_append compiler_flags " $qarg" 6910c27c18e8Smrg prev= 6911c27c18e8Smrg func_append compile_command " $qarg" 6912c27c18e8Smrg func_append finalize_command " $qarg" 6913c27c18e8Smrg continue 6914c27c18e8Smrg ;; 6915c27c18e8Smrg xlinker) 6916b789ec8aSmrg func_append linker_flags " $qarg" 6917b789ec8aSmrg func_append compiler_flags " $wl$qarg" 6918c27c18e8Smrg prev= 6919c27c18e8Smrg func_append compile_command " $wl$qarg" 6920c27c18e8Smrg func_append finalize_command " $wl$qarg" 6921c27c18e8Smrg continue 6922c43cc173Smrg ;; 6923c43cc173Smrg *) 6924c27c18e8Smrg eval "$prev=\"\$arg\"" 6925c27c18e8Smrg prev= 6926c27c18e8Smrg continue 6927c43cc173Smrg ;; 6928c43cc173Smrg esac 6929c27c18e8Smrg fi # test -n "$prev" 6930c43cc173Smrg 693148e5ce07Smrg prevarg=$arg 6932c43cc173Smrg 6933c27c18e8Smrg case $arg in 6934c27c18e8Smrg -all-static) 6935c27c18e8Smrg if test -n "$link_static_flag"; then 6936c27c18e8Smrg # See comment for -static flag below, for more details. 6937c27c18e8Smrg func_append compile_command " $link_static_flag" 6938c27c18e8Smrg func_append finalize_command " $link_static_flag" 6939c43cc173Smrg fi 6940c27c18e8Smrg continue 6941c27c18e8Smrg ;; 6942c43cc173Smrg 6943c27c18e8Smrg -allow-undefined) 6944c27c18e8Smrg # FIXME: remove this flag sometime in the future. 694548e5ce07Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 6946c27c18e8Smrg ;; 6947c43cc173Smrg 6948c27c18e8Smrg -avoid-version) 6949c27c18e8Smrg avoid_version=yes 6950c27c18e8Smrg continue 6951c27c18e8Smrg ;; 6952c43cc173Smrg 695337eb1ca1Smrg -bindir) 695437eb1ca1Smrg prev=bindir 695537eb1ca1Smrg continue 695637eb1ca1Smrg ;; 695737eb1ca1Smrg 6958c27c18e8Smrg -dlopen) 6959c27c18e8Smrg prev=dlfiles 6960c27c18e8Smrg continue 6961c27c18e8Smrg ;; 6962c43cc173Smrg 6963c27c18e8Smrg -dlpreopen) 6964c27c18e8Smrg prev=dlprefiles 6965c27c18e8Smrg continue 6966c27c18e8Smrg ;; 6967c43cc173Smrg 6968c27c18e8Smrg -export-dynamic) 6969c27c18e8Smrg export_dynamic=yes 6970c27c18e8Smrg continue 6971c27c18e8Smrg ;; 6972c43cc173Smrg 6973c27c18e8Smrg -export-symbols | -export-symbols-regex) 6974c27c18e8Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 6975c27c18e8Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 6976c27c18e8Smrg fi 697748e5ce07Smrg if test X-export-symbols = "X$arg"; then 6978c27c18e8Smrg prev=expsyms 6979c43cc173Smrg else 6980c27c18e8Smrg prev=expsyms_regex 6981c43cc173Smrg fi 6982c27c18e8Smrg continue 6983c27c18e8Smrg ;; 6984c43cc173Smrg 6985c27c18e8Smrg -framework) 6986c27c18e8Smrg prev=framework 6987c27c18e8Smrg continue 6988c27c18e8Smrg ;; 6989c43cc173Smrg 6990c27c18e8Smrg -inst-prefix-dir) 6991c27c18e8Smrg prev=inst_prefix 6992c27c18e8Smrg continue 6993c27c18e8Smrg ;; 6994c43cc173Smrg 6995c27c18e8Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 6996c27c18e8Smrg # so, if we see these flags be careful not to treat them like -L 6997c27c18e8Smrg -L[A-Z][A-Z]*:*) 6998c27c18e8Smrg case $with_gcc/$host in 6999c27c18e8Smrg no/*-*-irix* | /*-*-irix*) 7000c27c18e8Smrg func_append compile_command " $arg" 7001c27c18e8Smrg func_append finalize_command " $arg" 7002c27c18e8Smrg ;; 7003c27c18e8Smrg esac 7004c27c18e8Smrg continue 7005c27c18e8Smrg ;; 7006c43cc173Smrg 7007c27c18e8Smrg -L*) 7008b789ec8aSmrg func_stripname "-L" '' "$arg" 7009b789ec8aSmrg if test -z "$func_stripname_result"; then 7010c27c18e8Smrg if test "$#" -gt 0; then 701148e5ce07Smrg func_fatal_error "require no space between '-L' and '$1'" 7012c43cc173Smrg else 701348e5ce07Smrg func_fatal_error "need path for '-L' option" 7014c43cc173Smrg fi 7015c27c18e8Smrg fi 7016b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 7017b789ec8aSmrg dir=$func_resolve_sysroot_result 7018c27c18e8Smrg # We need an absolute path. 7019c27c18e8Smrg case $dir in 7020c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7021c27c18e8Smrg *) 7022c27c18e8Smrg absdir=`cd "$dir" && pwd` 7023c27c18e8Smrg test -z "$absdir" && \ 702448e5ce07Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 702548e5ce07Smrg dir=$absdir 7026c27c18e8Smrg ;; 7027c43cc173Smrg esac 7028c27c18e8Smrg case "$deplibs " in 7029b789ec8aSmrg *" -L$dir "* | *" $arg "*) 7030b789ec8aSmrg # Will only happen for absolute or sysroot arguments 7031b789ec8aSmrg ;; 7032c27c18e8Smrg *) 7033b789ec8aSmrg # Preserve sysroot, but never include relative directories 7034b789ec8aSmrg case $dir in 7035b789ec8aSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7036b789ec8aSmrg *) func_append deplibs " -L$dir" ;; 7037b789ec8aSmrg esac 7038b789ec8aSmrg func_append lib_search_path " $dir" 7039c27c18e8Smrg ;; 7040c43cc173Smrg esac 7041c43cc173Smrg case $host in 7042c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 704337eb1ca1Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7044c27c18e8Smrg case :$dllsearchpath: in 7045c27c18e8Smrg *":$dir:"*) ;; 7046c27c18e8Smrg ::) dllsearchpath=$dir;; 7047b789ec8aSmrg *) func_append dllsearchpath ":$dir";; 7048c27c18e8Smrg esac 7049c27c18e8Smrg case :$dllsearchpath: in 7050c27c18e8Smrg *":$testbindir:"*) ;; 7051c27c18e8Smrg ::) dllsearchpath=$testbindir;; 7052b789ec8aSmrg *) func_append dllsearchpath ":$testbindir";; 7053c27c18e8Smrg esac 7054c27c18e8Smrg ;; 7055c43cc173Smrg esac 7056c27c18e8Smrg continue 7057c27c18e8Smrg ;; 7058c43cc173Smrg 7059c27c18e8Smrg -l*) 706048e5ce07Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7061c27c18e8Smrg case $host in 706237eb1ca1Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7063c27c18e8Smrg # These systems don't actually have a C or math library (as such) 7064c27c18e8Smrg continue 7065c27c18e8Smrg ;; 7066c27c18e8Smrg *-*-os2*) 7067c27c18e8Smrg # These systems don't actually have a C library (as such) 706848e5ce07Smrg test X-lc = "X$arg" && continue 7069c27c18e8Smrg ;; 707048e5ce07Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7071c27c18e8Smrg # Do not include libc due to us having libc/libc_r. 707248e5ce07Smrg test X-lc = "X$arg" && continue 7073c27c18e8Smrg ;; 7074c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7075c27c18e8Smrg # Rhapsody C and math libraries are in the System framework 7076b789ec8aSmrg func_append deplibs " System.ltframework" 7077c27c18e8Smrg continue 7078c27c18e8Smrg ;; 7079c27c18e8Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7080c27c18e8Smrg # Causes problems with __ctype 708148e5ce07Smrg test X-lc = "X$arg" && continue 7082c27c18e8Smrg ;; 7083c27c18e8Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7084c27c18e8Smrg # Compiler inserts libc in the correct place for threads to work 708548e5ce07Smrg test X-lc = "X$arg" && continue 7086c27c18e8Smrg ;; 7087c27c18e8Smrg esac 708848e5ce07Smrg elif test X-lc_r = "X$arg"; then 7089c27c18e8Smrg case $host in 709048e5ce07Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7091c27c18e8Smrg # Do not include libc_r directly, use -pthread flag. 7092c27c18e8Smrg continue 7093c27c18e8Smrg ;; 7094c27c18e8Smrg esac 7095c27c18e8Smrg fi 7096b789ec8aSmrg func_append deplibs " $arg" 7097c27c18e8Smrg continue 7098c27c18e8Smrg ;; 7099c43cc173Smrg 710048e5ce07Smrg -mllvm) 710148e5ce07Smrg prev=mllvm 710248e5ce07Smrg continue 710348e5ce07Smrg ;; 710448e5ce07Smrg 7105c27c18e8Smrg -module) 7106c27c18e8Smrg module=yes 7107c27c18e8Smrg continue 7108c27c18e8Smrg ;; 7109c43cc173Smrg 7110c27c18e8Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7111c27c18e8Smrg # classes, name mangling, and exception handling. 7112c27c18e8Smrg # Darwin uses the -arch flag to determine output architecture. 7113b789ec8aSmrg -model|-arch|-isysroot|--sysroot) 7114b789ec8aSmrg func_append compiler_flags " $arg" 7115c27c18e8Smrg func_append compile_command " $arg" 7116c27c18e8Smrg func_append finalize_command " $arg" 7117c27c18e8Smrg prev=xcompiler 7118c27c18e8Smrg continue 7119c27c18e8Smrg ;; 7120c43cc173Smrg 7121f1ee322dSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7122f1ee322dSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7123b789ec8aSmrg func_append compiler_flags " $arg" 7124c27c18e8Smrg func_append compile_command " $arg" 7125c27c18e8Smrg func_append finalize_command " $arg" 7126c27c18e8Smrg case "$new_inherited_linker_flags " in 7127c27c18e8Smrg *" $arg "*) ;; 7128b789ec8aSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 7129c27c18e8Smrg esac 7130c27c18e8Smrg continue 7131c27c18e8Smrg ;; 7132c43cc173Smrg 7133c27c18e8Smrg -multi_module) 713448e5ce07Smrg single_module=$wl-multi_module 7135c27c18e8Smrg continue 7136c27c18e8Smrg ;; 7137c43cc173Smrg 7138c27c18e8Smrg -no-fast-install) 7139c27c18e8Smrg fast_install=no 7140c27c18e8Smrg continue 7141c27c18e8Smrg ;; 7142c43cc173Smrg 7143c27c18e8Smrg -no-install) 7144c27c18e8Smrg case $host in 7145c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7146c27c18e8Smrg # The PATH hackery in wrapper scripts is required on Windows 7147c27c18e8Smrg # and Darwin in order for the loader to find any dlls it needs. 714848e5ce07Smrg func_warning "'-no-install' is ignored for $host" 714948e5ce07Smrg func_warning "assuming '-no-fast-install' instead" 7150c27c18e8Smrg fast_install=no 7151c27c18e8Smrg ;; 7152c27c18e8Smrg *) no_install=yes ;; 7153c27c18e8Smrg esac 7154c27c18e8Smrg continue 7155c27c18e8Smrg ;; 7156c43cc173Smrg 7157c27c18e8Smrg -no-undefined) 7158c27c18e8Smrg allow_undefined=no 7159c27c18e8Smrg continue 7160c27c18e8Smrg ;; 7161c43cc173Smrg 7162c27c18e8Smrg -objectlist) 7163c27c18e8Smrg prev=objectlist 7164c27c18e8Smrg continue 7165c27c18e8Smrg ;; 7166c43cc173Smrg 716748e5ce07Smrg -os2dllname) 716848e5ce07Smrg prev=os2dllname 716948e5ce07Smrg continue 717048e5ce07Smrg ;; 717148e5ce07Smrg 7172c27c18e8Smrg -o) prev=output ;; 7173c43cc173Smrg 7174c27c18e8Smrg -precious-files-regex) 7175c27c18e8Smrg prev=precious_regex 7176c27c18e8Smrg continue 7177c27c18e8Smrg ;; 7178c43cc173Smrg 7179c27c18e8Smrg -release) 7180c27c18e8Smrg prev=release 7181c27c18e8Smrg continue 7182c27c18e8Smrg ;; 7183c43cc173Smrg 7184c27c18e8Smrg -rpath) 7185c27c18e8Smrg prev=rpath 7186c27c18e8Smrg continue 7187c27c18e8Smrg ;; 7188c43cc173Smrg 7189c27c18e8Smrg -R) 7190c27c18e8Smrg prev=xrpath 7191c27c18e8Smrg continue 7192c27c18e8Smrg ;; 7193c43cc173Smrg 7194c27c18e8Smrg -R*) 7195c27c18e8Smrg func_stripname '-R' '' "$arg" 7196c27c18e8Smrg dir=$func_stripname_result 7197c27c18e8Smrg # We need an absolute path. 7198c27c18e8Smrg case $dir in 7199c27c18e8Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7200b789ec8aSmrg =*) 7201b789ec8aSmrg func_stripname '=' '' "$dir" 7202b789ec8aSmrg dir=$lt_sysroot$func_stripname_result 7203b789ec8aSmrg ;; 7204c27c18e8Smrg *) 7205c27c18e8Smrg func_fatal_error "only absolute run-paths are allowed" 7206c27c18e8Smrg ;; 7207c27c18e8Smrg esac 7208c27c18e8Smrg case "$xrpath " in 7209c27c18e8Smrg *" $dir "*) ;; 7210b789ec8aSmrg *) func_append xrpath " $dir" ;; 7211c27c18e8Smrg esac 7212c27c18e8Smrg continue 7213c27c18e8Smrg ;; 7214c43cc173Smrg 7215c27c18e8Smrg -shared) 7216c27c18e8Smrg # The effects of -shared are defined in a previous loop. 7217c27c18e8Smrg continue 7218c27c18e8Smrg ;; 7219c43cc173Smrg 7220c27c18e8Smrg -shrext) 7221c27c18e8Smrg prev=shrext 7222c27c18e8Smrg continue 7223c27c18e8Smrg ;; 7224c43cc173Smrg 7225c27c18e8Smrg -static | -static-libtool-libs) 7226c27c18e8Smrg # The effects of -static are defined in a previous loop. 7227c27c18e8Smrg # We used to do the same as -all-static on platforms that 7228c27c18e8Smrg # didn't have a PIC flag, but the assumption that the effects 7229c27c18e8Smrg # would be equivalent was wrong. It would break on at least 7230c27c18e8Smrg # Digital Unix and AIX. 7231c27c18e8Smrg continue 7232c27c18e8Smrg ;; 7233c43cc173Smrg 7234c27c18e8Smrg -thread-safe) 7235c27c18e8Smrg thread_safe=yes 7236c27c18e8Smrg continue 7237c27c18e8Smrg ;; 7238c43cc173Smrg 7239c27c18e8Smrg -version-info) 7240c27c18e8Smrg prev=vinfo 7241c27c18e8Smrg continue 7242c27c18e8Smrg ;; 7243c43cc173Smrg 7244c27c18e8Smrg -version-number) 7245c27c18e8Smrg prev=vinfo 7246c27c18e8Smrg vinfo_number=yes 7247c27c18e8Smrg continue 7248c27c18e8Smrg ;; 7249c43cc173Smrg 7250c27c18e8Smrg -weak) 7251c27c18e8Smrg prev=weak 7252c27c18e8Smrg continue 7253c27c18e8Smrg ;; 7254c43cc173Smrg 7255c27c18e8Smrg -Wc,*) 7256c27c18e8Smrg func_stripname '-Wc,' '' "$arg" 7257c27c18e8Smrg args=$func_stripname_result 7258c27c18e8Smrg arg= 725948e5ce07Smrg save_ifs=$IFS; IFS=, 7260c27c18e8Smrg for flag in $args; do 726148e5ce07Smrg IFS=$save_ifs 7262c27c18e8Smrg func_quote_for_eval "$flag" 7263b789ec8aSmrg func_append arg " $func_quote_for_eval_result" 7264b789ec8aSmrg func_append compiler_flags " $func_quote_for_eval_result" 7265c27c18e8Smrg done 726648e5ce07Smrg IFS=$save_ifs 7267c27c18e8Smrg func_stripname ' ' '' "$arg" 7268c27c18e8Smrg arg=$func_stripname_result 7269c27c18e8Smrg ;; 7270c43cc173Smrg 7271c27c18e8Smrg -Wl,*) 7272c27c18e8Smrg func_stripname '-Wl,' '' "$arg" 7273c27c18e8Smrg args=$func_stripname_result 7274c27c18e8Smrg arg= 727548e5ce07Smrg save_ifs=$IFS; IFS=, 7276c27c18e8Smrg for flag in $args; do 727748e5ce07Smrg IFS=$save_ifs 7278c27c18e8Smrg func_quote_for_eval "$flag" 7279b789ec8aSmrg func_append arg " $wl$func_quote_for_eval_result" 7280b789ec8aSmrg func_append compiler_flags " $wl$func_quote_for_eval_result" 7281b789ec8aSmrg func_append linker_flags " $func_quote_for_eval_result" 7282c27c18e8Smrg done 728348e5ce07Smrg IFS=$save_ifs 7284c27c18e8Smrg func_stripname ' ' '' "$arg" 7285c27c18e8Smrg arg=$func_stripname_result 7286c27c18e8Smrg ;; 7287c43cc173Smrg 7288c27c18e8Smrg -Xcompiler) 7289c27c18e8Smrg prev=xcompiler 7290c27c18e8Smrg continue 7291c27c18e8Smrg ;; 7292c43cc173Smrg 7293c27c18e8Smrg -Xlinker) 7294c27c18e8Smrg prev=xlinker 7295c27c18e8Smrg continue 7296c27c18e8Smrg ;; 7297c43cc173Smrg 7298c27c18e8Smrg -XCClinker) 7299c27c18e8Smrg prev=xcclinker 7300c27c18e8Smrg continue 7301c27c18e8Smrg ;; 7302c43cc173Smrg 7303c27c18e8Smrg # -msg_* for osf cc 7304c27c18e8Smrg -msg_*) 7305c27c18e8Smrg func_quote_for_eval "$arg" 730648e5ce07Smrg arg=$func_quote_for_eval_result 7307c27c18e8Smrg ;; 7308c43cc173Smrg 730937eb1ca1Smrg # Flags to be passed through unchanged, with rationale: 731037eb1ca1Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 731137eb1ca1Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 731237eb1ca1Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 731337eb1ca1Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 731437eb1ca1Smrg # -q* compiler args for the IBM compiler 731537eb1ca1Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 731637eb1ca1Smrg # -F/path path to uninstalled frameworks, gcc on darwin 731737eb1ca1Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 731848e5ce07Smrg # -fstack-protector* stack protector flags for GCC 731937eb1ca1Smrg # @file GCC response files 732037eb1ca1Smrg # -tp=* Portland pgcc target processor selection 7321b789ec8aSmrg # --sysroot=* for sysroot support 732248e5ce07Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 73234940c694Smrg # -specs=* GCC specs files 732448e5ce07Smrg # -stdlib=* select c++ std lib with clang 73254940c694Smrg # -fsanitize=* Clang/GCC memory and address sanitizer 73264940c694Smrg # -fuse-ld=* Linker select flags for GCC 7327c27c18e8Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7328b789ec8aSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 73294940c694Smrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 73304940c694Smrg -specs=*|-fsanitize=*|-fuse-ld=*) 7331c27c18e8Smrg func_quote_for_eval "$arg" 733248e5ce07Smrg arg=$func_quote_for_eval_result 7333c27c18e8Smrg func_append compile_command " $arg" 7334c27c18e8Smrg func_append finalize_command " $arg" 7335b789ec8aSmrg func_append compiler_flags " $arg" 7336c27c18e8Smrg continue 7337c27c18e8Smrg ;; 7338c43cc173Smrg 733948e5ce07Smrg -Z*) 734048e5ce07Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 734148e5ce07Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 734248e5ce07Smrg compiler_flags="$compiler_flags $arg" 734348e5ce07Smrg func_append compile_command " $arg" 734448e5ce07Smrg func_append finalize_command " $arg" 734548e5ce07Smrg case $arg in 734648e5ce07Smrg -Zlinker | -Zstack) 734748e5ce07Smrg prev=xcompiler 734848e5ce07Smrg ;; 734948e5ce07Smrg esac 735048e5ce07Smrg continue 735148e5ce07Smrg else 735248e5ce07Smrg # Otherwise treat like 'Some other compiler flag' below 735348e5ce07Smrg func_quote_for_eval "$arg" 735448e5ce07Smrg arg=$func_quote_for_eval_result 735548e5ce07Smrg fi 735648e5ce07Smrg ;; 735748e5ce07Smrg 7358c27c18e8Smrg # Some other compiler flag. 7359c27c18e8Smrg -* | +*) 7360c27c18e8Smrg func_quote_for_eval "$arg" 736148e5ce07Smrg arg=$func_quote_for_eval_result 7362c27c18e8Smrg ;; 7363c43cc173Smrg 7364c27c18e8Smrg *.$objext) 7365c27c18e8Smrg # A standard object. 7366b789ec8aSmrg func_append objs " $arg" 7367c27c18e8Smrg ;; 7368c43cc173Smrg 7369c27c18e8Smrg *.lo) 7370c27c18e8Smrg # A libtool-controlled object. 7371c43cc173Smrg 7372c27c18e8Smrg # Check to see that this really is a libtool object. 7373c27c18e8Smrg if func_lalib_unsafe_p "$arg"; then 7374c27c18e8Smrg pic_object= 7375c27c18e8Smrg non_pic_object= 7376c43cc173Smrg 7377c27c18e8Smrg # Read the .lo file 7378c27c18e8Smrg func_source "$arg" 7379c43cc173Smrg 7380c27c18e8Smrg if test -z "$pic_object" || 7381c27c18e8Smrg test -z "$non_pic_object" || 738248e5ce07Smrg test none = "$pic_object" && 738348e5ce07Smrg test none = "$non_pic_object"; then 738448e5ce07Smrg func_fatal_error "cannot find name of object for '$arg'" 7385c27c18e8Smrg fi 7386c43cc173Smrg 7387c27c18e8Smrg # Extract subdirectory from the argument. 7388c27c18e8Smrg func_dirname "$arg" "/" "" 738948e5ce07Smrg xdir=$func_dirname_result 7390c43cc173Smrg 739148e5ce07Smrg test none = "$pic_object" || { 7392c27c18e8Smrg # Prepend the subdirectory the object is found in. 739348e5ce07Smrg pic_object=$xdir$pic_object 7394c43cc173Smrg 739548e5ce07Smrg if test dlfiles = "$prev"; then 739648e5ce07Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7397b789ec8aSmrg func_append dlfiles " $pic_object" 7398c27c18e8Smrg prev= 7399c27c18e8Smrg continue 7400c27c18e8Smrg else 7401c27c18e8Smrg # If libtool objects are unsupported, then we need to preload. 7402c27c18e8Smrg prev=dlprefiles 7403c27c18e8Smrg fi 7404c27c18e8Smrg fi 7405c43cc173Smrg 7406c27c18e8Smrg # CHECK ME: I think I busted this. -Ossama 740748e5ce07Smrg if test dlprefiles = "$prev"; then 7408c27c18e8Smrg # Preload the old-style object. 7409b789ec8aSmrg func_append dlprefiles " $pic_object" 7410c27c18e8Smrg prev= 7411c27c18e8Smrg fi 7412c43cc173Smrg 7413c27c18e8Smrg # A PIC object. 7414c27c18e8Smrg func_append libobjs " $pic_object" 741548e5ce07Smrg arg=$pic_object 741648e5ce07Smrg } 7417c43cc173Smrg 7418c27c18e8Smrg # Non-PIC object. 741948e5ce07Smrg if test none != "$non_pic_object"; then 7420c27c18e8Smrg # Prepend the subdirectory the object is found in. 742148e5ce07Smrg non_pic_object=$xdir$non_pic_object 7422c43cc173Smrg 7423c27c18e8Smrg # A standard non-PIC object 7424c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 742548e5ce07Smrg if test -z "$pic_object" || test none = "$pic_object"; then 742648e5ce07Smrg arg=$non_pic_object 7427c27c18e8Smrg fi 7428c27c18e8Smrg else 7429c27c18e8Smrg # If the PIC object exists, use it instead. 7430c27c18e8Smrg # $xdir was prepended to $pic_object above. 743148e5ce07Smrg non_pic_object=$pic_object 7432c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 7433c27c18e8Smrg fi 7434c27c18e8Smrg else 7435c27c18e8Smrg # Only an error if not doing a dry-run. 7436c27c18e8Smrg if $opt_dry_run; then 7437c27c18e8Smrg # Extract subdirectory from the argument. 7438c27c18e8Smrg func_dirname "$arg" "/" "" 743948e5ce07Smrg xdir=$func_dirname_result 7440c27c18e8Smrg 7441c27c18e8Smrg func_lo2o "$arg" 7442c27c18e8Smrg pic_object=$xdir$objdir/$func_lo2o_result 7443c27c18e8Smrg non_pic_object=$xdir$func_lo2o_result 7444c27c18e8Smrg func_append libobjs " $pic_object" 7445c27c18e8Smrg func_append non_pic_objects " $non_pic_object" 7446c27c18e8Smrg else 744748e5ce07Smrg func_fatal_error "'$arg' is not a valid libtool object" 7448c27c18e8Smrg fi 7449c27c18e8Smrg fi 7450c27c18e8Smrg ;; 7451c43cc173Smrg 7452c27c18e8Smrg *.$libext) 7453c27c18e8Smrg # An archive. 7454b789ec8aSmrg func_append deplibs " $arg" 7455b789ec8aSmrg func_append old_deplibs " $arg" 7456c27c18e8Smrg continue 7457c27c18e8Smrg ;; 7458c43cc173Smrg 7459c27c18e8Smrg *.la) 7460c27c18e8Smrg # A libtool-controlled library. 7461c43cc173Smrg 7462b789ec8aSmrg func_resolve_sysroot "$arg" 746348e5ce07Smrg if test dlfiles = "$prev"; then 7464c27c18e8Smrg # This library was specified with -dlopen. 7465b789ec8aSmrg func_append dlfiles " $func_resolve_sysroot_result" 7466c27c18e8Smrg prev= 746748e5ce07Smrg elif test dlprefiles = "$prev"; then 7468c27c18e8Smrg # The library was specified with -dlpreopen. 7469b789ec8aSmrg func_append dlprefiles " $func_resolve_sysroot_result" 7470c27c18e8Smrg prev= 7471c27c18e8Smrg else 7472b789ec8aSmrg func_append deplibs " $func_resolve_sysroot_result" 7473c27c18e8Smrg fi 7474c27c18e8Smrg continue 7475c27c18e8Smrg ;; 7476c43cc173Smrg 7477c27c18e8Smrg # Some other compiler argument. 7478c27c18e8Smrg *) 7479c27c18e8Smrg # Unknown arguments in both finalize_command and compile_command need 7480c27c18e8Smrg # to be aesthetically quoted because they are evaled later. 7481c27c18e8Smrg func_quote_for_eval "$arg" 748248e5ce07Smrg arg=$func_quote_for_eval_result 7483c27c18e8Smrg ;; 7484c27c18e8Smrg esac # arg 7485c43cc173Smrg 7486c27c18e8Smrg # Now actually substitute the argument into the commands. 7487c27c18e8Smrg if test -n "$arg"; then 7488c27c18e8Smrg func_append compile_command " $arg" 7489c27c18e8Smrg func_append finalize_command " $arg" 7490c27c18e8Smrg fi 7491c27c18e8Smrg done # argument parsing loop 749221e67964Smrg 7493c27c18e8Smrg test -n "$prev" && \ 749448e5ce07Smrg func_fatal_help "the '$prevarg' option requires an argument" 7495c43cc173Smrg 749648e5ce07Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7497c27c18e8Smrg eval arg=\"$export_dynamic_flag_spec\" 7498c27c18e8Smrg func_append compile_command " $arg" 7499c27c18e8Smrg func_append finalize_command " $arg" 7500c27c18e8Smrg fi 7501c43cc173Smrg 7502c27c18e8Smrg oldlibs= 7503c27c18e8Smrg # calculate the name of the file, without its directory 7504c27c18e8Smrg func_basename "$output" 750548e5ce07Smrg outputname=$func_basename_result 750648e5ce07Smrg libobjs_save=$libobjs 7507c27c18e8Smrg 7508c27c18e8Smrg if test -n "$shlibpath_var"; then 7509c27c18e8Smrg # get the directories listed in $shlibpath_var 751048e5ce07Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7511c43cc173Smrg else 7512c27c18e8Smrg shlib_search_path= 7513c43cc173Smrg fi 7514c27c18e8Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7515c27c18e8Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7516c43cc173Smrg 751748e5ce07Smrg # Definition is injected by LT_CONFIG during libtool generation. 751848e5ce07Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 751948e5ce07Smrg 7520c27c18e8Smrg func_dirname "$output" "/" "" 752148e5ce07Smrg output_objdir=$func_dirname_result$objdir 7522b789ec8aSmrg func_to_tool_file "$output_objdir/" 7523b789ec8aSmrg tool_output_objdir=$func_to_tool_file_result 7524c27c18e8Smrg # Create the object directory. 7525c27c18e8Smrg func_mkdir_p "$output_objdir" 7526c43cc173Smrg 7527c27c18e8Smrg # Determine the type of output 7528c27c18e8Smrg case $output in 7529c27c18e8Smrg "") 7530c27c18e8Smrg func_fatal_help "you must specify an output file" 7531c27c18e8Smrg ;; 7532c27c18e8Smrg *.$libext) linkmode=oldlib ;; 7533c27c18e8Smrg *.lo | *.$objext) linkmode=obj ;; 7534c27c18e8Smrg *.la) linkmode=lib ;; 7535c27c18e8Smrg *) linkmode=prog ;; # Anything else should be a program. 7536c27c18e8Smrg esac 7537c27c18e8Smrg 7538c27c18e8Smrg specialdeplibs= 7539c27c18e8Smrg 7540c27c18e8Smrg libs= 7541c27c18e8Smrg # Find all interdependent deplibs by searching for libraries 7542c27c18e8Smrg # that are linked more than once (e.g. -la -lb -la) 7543c27c18e8Smrg for deplib in $deplibs; do 754448e5ce07Smrg if $opt_preserve_dup_deps; then 7545c27c18e8Smrg case "$libs " in 7546b789ec8aSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7547c27c18e8Smrg esac 7548c27c18e8Smrg fi 7549b789ec8aSmrg func_append libs " $deplib" 7550c27c18e8Smrg done 7551c27c18e8Smrg 755248e5ce07Smrg if test lib = "$linkmode"; then 7553c27c18e8Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7554c27c18e8Smrg 7555c27c18e8Smrg # Compute libraries that are listed more than once in $predeps 7556c27c18e8Smrg # $postdeps and mark them as special (i.e., whose duplicates are 7557c27c18e8Smrg # not to be eliminated). 7558c27c18e8Smrg pre_post_deps= 7559c27c18e8Smrg if $opt_duplicate_compiler_generated_deps; then 7560c27c18e8Smrg for pre_post_dep in $predeps $postdeps; do 7561c27c18e8Smrg case "$pre_post_deps " in 7562b789ec8aSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7563c27c18e8Smrg esac 7564b789ec8aSmrg func_append pre_post_deps " $pre_post_dep" 7565c27c18e8Smrg done 7566c27c18e8Smrg fi 7567c27c18e8Smrg pre_post_deps= 7568c27c18e8Smrg fi 7569c27c18e8Smrg 7570c27c18e8Smrg deplibs= 7571c27c18e8Smrg newdependency_libs= 7572c27c18e8Smrg newlib_search_path= 7573c27c18e8Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 7574c27c18e8Smrg notinst_deplibs= # not-installed libtool libraries 7575c27c18e8Smrg notinst_path= # paths that contain not-installed libtool libraries 7576c27c18e8Smrg 7577c27c18e8Smrg case $linkmode in 7578c27c18e8Smrg lib) 7579c27c18e8Smrg passes="conv dlpreopen link" 7580c27c18e8Smrg for file in $dlfiles $dlprefiles; do 7581c27c18e8Smrg case $file in 7582c27c18e8Smrg *.la) ;; 7583c27c18e8Smrg *) 758448e5ce07Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7585c27c18e8Smrg ;; 7586c27c18e8Smrg esac 7587c27c18e8Smrg done 7588c27c18e8Smrg ;; 7589c27c18e8Smrg prog) 7590c27c18e8Smrg compile_deplibs= 7591c27c18e8Smrg finalize_deplibs= 759248e5ce07Smrg alldeplibs=false 7593c27c18e8Smrg newdlfiles= 7594c27c18e8Smrg newdlprefiles= 7595c27c18e8Smrg passes="conv scan dlopen dlpreopen link" 7596c27c18e8Smrg ;; 7597c27c18e8Smrg *) passes="conv" 7598c27c18e8Smrg ;; 7599c27c18e8Smrg esac 7600c27c18e8Smrg 7601c27c18e8Smrg for pass in $passes; do 7602c27c18e8Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 7603c27c18e8Smrg # so that -L comes before libs that need it for instance... 760448e5ce07Smrg if test lib,link = "$linkmode,$pass"; then 7605c27c18e8Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 7606c27c18e8Smrg ## order, and fix it there properly 7607c27c18e8Smrg tmp_deplibs= 7608c27c18e8Smrg for deplib in $deplibs; do 7609c27c18e8Smrg tmp_deplibs="$deplib $tmp_deplibs" 7610c27c18e8Smrg done 761148e5ce07Smrg deplibs=$tmp_deplibs 7612c27c18e8Smrg fi 7613c27c18e8Smrg 761448e5ce07Smrg if test lib,link = "$linkmode,$pass" || 761548e5ce07Smrg test prog,scan = "$linkmode,$pass"; then 761648e5ce07Smrg libs=$deplibs 7617c27c18e8Smrg deplibs= 7618c27c18e8Smrg fi 761948e5ce07Smrg if test prog = "$linkmode"; then 7620c27c18e8Smrg case $pass in 762148e5ce07Smrg dlopen) libs=$dlfiles ;; 762248e5ce07Smrg dlpreopen) libs=$dlprefiles ;; 762348e5ce07Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7624c27c18e8Smrg esac 7625c27c18e8Smrg fi 762648e5ce07Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 7627c27c18e8Smrg # Collect and forward deplibs of preopened libtool libs 7628c27c18e8Smrg for lib in $dlprefiles; do 7629c27c18e8Smrg # Ignore non-libtool-libs 7630c27c18e8Smrg dependency_libs= 7631b789ec8aSmrg func_resolve_sysroot "$lib" 7632c27c18e8Smrg case $lib in 7633b789ec8aSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 7634c27c18e8Smrg esac 7635c27c18e8Smrg 7636c27c18e8Smrg # Collect preopened libtool deplibs, except any this library 7637c27c18e8Smrg # has declared as weak libs 7638c27c18e8Smrg for deplib in $dependency_libs; do 763937eb1ca1Smrg func_basename "$deplib" 764037eb1ca1Smrg deplib_base=$func_basename_result 7641c27c18e8Smrg case " $weak_libs " in 7642c27c18e8Smrg *" $deplib_base "*) ;; 7643b789ec8aSmrg *) func_append deplibs " $deplib" ;; 7644c27c18e8Smrg esac 7645c27c18e8Smrg done 7646c27c18e8Smrg done 764748e5ce07Smrg libs=$dlprefiles 7648c27c18e8Smrg fi 764948e5ce07Smrg if test dlopen = "$pass"; then 7650c27c18e8Smrg # Collect dlpreopened libraries 765148e5ce07Smrg save_deplibs=$deplibs 7652c27c18e8Smrg deplibs= 7653c27c18e8Smrg fi 7654c27c18e8Smrg 7655c27c18e8Smrg for deplib in $libs; do 7656c27c18e8Smrg lib= 765748e5ce07Smrg found=false 7658c27c18e8Smrg case $deplib in 7659f1ee322dSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7660f1ee322dSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 766148e5ce07Smrg if test prog,link = "$linkmode,$pass"; then 7662c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 7663c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 7664c27c18e8Smrg else 7665b789ec8aSmrg func_append compiler_flags " $deplib" 766648e5ce07Smrg if test lib = "$linkmode"; then 7667c27c18e8Smrg case "$new_inherited_linker_flags " in 7668c27c18e8Smrg *" $deplib "*) ;; 7669b789ec8aSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7670c27c18e8Smrg esac 7671c27c18e8Smrg fi 7672c27c18e8Smrg fi 7673c27c18e8Smrg continue 7674c27c18e8Smrg ;; 7675c27c18e8Smrg -l*) 767648e5ce07Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 767748e5ce07Smrg func_warning "'-l' is ignored for archives/objects" 7678c27c18e8Smrg continue 7679c27c18e8Smrg fi 7680c27c18e8Smrg func_stripname '-l' '' "$deplib" 7681c27c18e8Smrg name=$func_stripname_result 768248e5ce07Smrg if test lib = "$linkmode"; then 7683c27c18e8Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7684c27c18e8Smrg else 7685c27c18e8Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7686c27c18e8Smrg fi 7687c27c18e8Smrg for searchdir in $searchdirs; do 7688c27c18e8Smrg for search_ext in .la $std_shrext .so .a; do 7689c27c18e8Smrg # Search the libtool library 769048e5ce07Smrg lib=$searchdir/lib$name$search_ext 7691c27c18e8Smrg if test -f "$lib"; then 769248e5ce07Smrg if test .la = "$search_ext"; then 769348e5ce07Smrg found=: 7694c27c18e8Smrg else 769548e5ce07Smrg found=false 7696c27c18e8Smrg fi 7697c27c18e8Smrg break 2 7698c27c18e8Smrg fi 7699c27c18e8Smrg done 7700c27c18e8Smrg done 770148e5ce07Smrg if $found; then 770248e5ce07Smrg # deplib is a libtool library 7703c27c18e8Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7704c27c18e8Smrg # We need to do some special things here, and not later. 770548e5ce07Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7706c27c18e8Smrg case " $predeps $postdeps " in 7707c27c18e8Smrg *" $deplib "*) 7708c27c18e8Smrg if func_lalib_p "$lib"; then 7709c27c18e8Smrg library_names= 7710c27c18e8Smrg old_library= 7711c27c18e8Smrg func_source "$lib" 7712c27c18e8Smrg for l in $old_library $library_names; do 771348e5ce07Smrg ll=$l 7714c27c18e8Smrg done 771548e5ce07Smrg if test "X$ll" = "X$old_library"; then # only static version available 771648e5ce07Smrg found=false 7717c27c18e8Smrg func_dirname "$lib" "" "." 771848e5ce07Smrg ladir=$func_dirname_result 7719c27c18e8Smrg lib=$ladir/$old_library 772048e5ce07Smrg if test prog,link = "$linkmode,$pass"; then 7721c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 7722c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 7723c27c18e8Smrg else 7724c27c18e8Smrg deplibs="$deplib $deplibs" 772548e5ce07Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7726c27c18e8Smrg fi 7727c27c18e8Smrg continue 7728c27c18e8Smrg fi 7729c27c18e8Smrg fi 7730c27c18e8Smrg ;; 7731c27c18e8Smrg *) ;; 7732c27c18e8Smrg esac 7733c27c18e8Smrg fi 773448e5ce07Smrg else 773548e5ce07Smrg # deplib doesn't seem to be a libtool library 773648e5ce07Smrg if test prog,link = "$linkmode,$pass"; then 773748e5ce07Smrg compile_deplibs="$deplib $compile_deplibs" 773848e5ce07Smrg finalize_deplibs="$deplib $finalize_deplibs" 773948e5ce07Smrg else 774048e5ce07Smrg deplibs="$deplib $deplibs" 774148e5ce07Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 774248e5ce07Smrg fi 774348e5ce07Smrg continue 7744c27c18e8Smrg fi 7745c27c18e8Smrg ;; # -l 7746c27c18e8Smrg *.ltframework) 774748e5ce07Smrg if test prog,link = "$linkmode,$pass"; then 7748c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 7749c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 7750c27c18e8Smrg else 7751c27c18e8Smrg deplibs="$deplib $deplibs" 775248e5ce07Smrg if test lib = "$linkmode"; then 7753c27c18e8Smrg case "$new_inherited_linker_flags " in 7754c27c18e8Smrg *" $deplib "*) ;; 7755b789ec8aSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7756c27c18e8Smrg esac 7757c27c18e8Smrg fi 7758c27c18e8Smrg fi 7759c27c18e8Smrg continue 7760c27c18e8Smrg ;; 7761c27c18e8Smrg -L*) 7762c27c18e8Smrg case $linkmode in 7763c27c18e8Smrg lib) 7764c27c18e8Smrg deplibs="$deplib $deplibs" 776548e5ce07Smrg test conv = "$pass" && continue 7766c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 7767c27c18e8Smrg func_stripname '-L' '' "$deplib" 7768b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 7769b789ec8aSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 7770c27c18e8Smrg ;; 7771c27c18e8Smrg prog) 777248e5ce07Smrg if test conv = "$pass"; then 7773c27c18e8Smrg deplibs="$deplib $deplibs" 7774c27c18e8Smrg continue 7775c27c18e8Smrg fi 777648e5ce07Smrg if test scan = "$pass"; then 7777c27c18e8Smrg deplibs="$deplib $deplibs" 7778c27c18e8Smrg else 7779c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 7780c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 7781c27c18e8Smrg fi 7782c27c18e8Smrg func_stripname '-L' '' "$deplib" 7783b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 7784b789ec8aSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 7785c27c18e8Smrg ;; 7786c27c18e8Smrg *) 778748e5ce07Smrg func_warning "'-L' is ignored for archives/objects" 7788c27c18e8Smrg ;; 7789c27c18e8Smrg esac # linkmode 7790c27c18e8Smrg continue 7791c27c18e8Smrg ;; # -L 7792c27c18e8Smrg -R*) 779348e5ce07Smrg if test link = "$pass"; then 7794c27c18e8Smrg func_stripname '-R' '' "$deplib" 7795b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 7796b789ec8aSmrg dir=$func_resolve_sysroot_result 7797c27c18e8Smrg # Make sure the xrpath contains only unique directories. 7798c27c18e8Smrg case "$xrpath " in 7799c27c18e8Smrg *" $dir "*) ;; 7800b789ec8aSmrg *) func_append xrpath " $dir" ;; 7801c27c18e8Smrg esac 7802c27c18e8Smrg fi 7803c27c18e8Smrg deplibs="$deplib $deplibs" 7804c27c18e8Smrg continue 7805c27c18e8Smrg ;; 7806b789ec8aSmrg *.la) 7807b789ec8aSmrg func_resolve_sysroot "$deplib" 7808b789ec8aSmrg lib=$func_resolve_sysroot_result 7809b789ec8aSmrg ;; 7810c27c18e8Smrg *.$libext) 781148e5ce07Smrg if test conv = "$pass"; then 7812c27c18e8Smrg deplibs="$deplib $deplibs" 7813c27c18e8Smrg continue 7814c27c18e8Smrg fi 7815c27c18e8Smrg case $linkmode in 7816c27c18e8Smrg lib) 7817c27c18e8Smrg # Linking convenience modules into shared libraries is allowed, 7818c27c18e8Smrg # but linking other static libraries is non-portable. 7819c27c18e8Smrg case " $dlpreconveniencelibs " in 7820c27c18e8Smrg *" $deplib "*) ;; 7821c27c18e8Smrg *) 782248e5ce07Smrg valid_a_lib=false 7823c27c18e8Smrg case $deplibs_check_method in 7824c27c18e8Smrg match_pattern*) 7825c27c18e8Smrg set dummy $deplibs_check_method; shift 7826c27c18e8Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 782737eb1ca1Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7828c27c18e8Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 782948e5ce07Smrg valid_a_lib=: 7830c27c18e8Smrg fi 7831c27c18e8Smrg ;; 7832c27c18e8Smrg pass_all) 783348e5ce07Smrg valid_a_lib=: 7834c27c18e8Smrg ;; 7835c27c18e8Smrg esac 783648e5ce07Smrg if $valid_a_lib; then 783748e5ce07Smrg echo 783848e5ce07Smrg $ECHO "*** Warning: Linking the shared library $output against the" 783948e5ce07Smrg $ECHO "*** static library $deplib is not portable!" 784048e5ce07Smrg deplibs="$deplib $deplibs" 784148e5ce07Smrg else 784237eb1ca1Smrg echo 7843c27c18e8Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 784437eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 784537eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 784637eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 784737eb1ca1Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 784837eb1ca1Smrg echo "*** that it is just a static archive that I should not use here." 7849c27c18e8Smrg fi 7850c27c18e8Smrg ;; 7851c27c18e8Smrg esac 7852c27c18e8Smrg continue 7853c27c18e8Smrg ;; 7854c27c18e8Smrg prog) 785548e5ce07Smrg if test link != "$pass"; then 7856c27c18e8Smrg deplibs="$deplib $deplibs" 7857c27c18e8Smrg else 7858c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 7859c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 7860c27c18e8Smrg fi 7861c27c18e8Smrg continue 7862c27c18e8Smrg ;; 7863c27c18e8Smrg esac # linkmode 7864c27c18e8Smrg ;; # *.$libext 7865c27c18e8Smrg *.lo | *.$objext) 786648e5ce07Smrg if test conv = "$pass"; then 7867c27c18e8Smrg deplibs="$deplib $deplibs" 786848e5ce07Smrg elif test prog = "$linkmode"; then 786948e5ce07Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 7870c27c18e8Smrg # If there is no dlopen support or we're linking statically, 7871c27c18e8Smrg # we need to preload. 7872b789ec8aSmrg func_append newdlprefiles " $deplib" 7873c27c18e8Smrg compile_deplibs="$deplib $compile_deplibs" 7874c27c18e8Smrg finalize_deplibs="$deplib $finalize_deplibs" 7875c27c18e8Smrg else 7876b789ec8aSmrg func_append newdlfiles " $deplib" 7877c27c18e8Smrg fi 7878c27c18e8Smrg fi 7879c27c18e8Smrg continue 7880c27c18e8Smrg ;; 7881c27c18e8Smrg %DEPLIBS%) 788248e5ce07Smrg alldeplibs=: 7883c27c18e8Smrg continue 7884c27c18e8Smrg ;; 7885c27c18e8Smrg esac # case $deplib 7886c27c18e8Smrg 788748e5ce07Smrg $found || test -f "$lib" \ 788848e5ce07Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 7889c27c18e8Smrg 7890c27c18e8Smrg # Check to see that this really is a libtool archive. 7891c27c18e8Smrg func_lalib_unsafe_p "$lib" \ 789248e5ce07Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 7893c27c18e8Smrg 7894c27c18e8Smrg func_dirname "$lib" "" "." 789548e5ce07Smrg ladir=$func_dirname_result 7896c27c18e8Smrg 7897c27c18e8Smrg dlname= 7898c27c18e8Smrg dlopen= 7899c27c18e8Smrg dlpreopen= 7900c27c18e8Smrg libdir= 7901c27c18e8Smrg library_names= 7902c27c18e8Smrg old_library= 7903c27c18e8Smrg inherited_linker_flags= 7904c27c18e8Smrg # If the library was installed with an old release of libtool, 7905c27c18e8Smrg # it will not redefine variables installed, or shouldnotlink 7906c27c18e8Smrg installed=yes 7907c27c18e8Smrg shouldnotlink=no 7908c27c18e8Smrg avoidtemprpath= 7909c27c18e8Smrg 7910c27c18e8Smrg 7911c27c18e8Smrg # Read the .la file 7912c27c18e8Smrg func_source "$lib" 7913c27c18e8Smrg 7914c27c18e8Smrg # Convert "-framework foo" to "foo.ltframework" 7915c27c18e8Smrg if test -n "$inherited_linker_flags"; then 791637eb1ca1Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 7917c27c18e8Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 7918c27c18e8Smrg case " $new_inherited_linker_flags " in 7919c27c18e8Smrg *" $tmp_inherited_linker_flag "*) ;; 7920b789ec8aSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 7921c27c18e8Smrg esac 7922c27c18e8Smrg done 7923c27c18e8Smrg fi 792437eb1ca1Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 792548e5ce07Smrg if test lib,link = "$linkmode,$pass" || 792648e5ce07Smrg test prog,scan = "$linkmode,$pass" || 792748e5ce07Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 7928b789ec8aSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 7929b789ec8aSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 7930c27c18e8Smrg fi 7931c27c18e8Smrg 793248e5ce07Smrg if test conv = "$pass"; then 7933c27c18e8Smrg # Only check for convenience libraries 7934c27c18e8Smrg deplibs="$lib $deplibs" 7935c27c18e8Smrg if test -z "$libdir"; then 7936c27c18e8Smrg if test -z "$old_library"; then 793748e5ce07Smrg func_fatal_error "cannot find name of link library for '$lib'" 7938c27c18e8Smrg fi 7939c27c18e8Smrg # It is a libtool convenience library, so add in its objects. 7940b789ec8aSmrg func_append convenience " $ladir/$objdir/$old_library" 7941b789ec8aSmrg func_append old_convenience " $ladir/$objdir/$old_library" 794248e5ce07Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 794348e5ce07Smrg func_fatal_error "'$lib' is not a convenience library" 7944c27c18e8Smrg fi 794548e5ce07Smrg tmp_libs= 794648e5ce07Smrg for deplib in $dependency_libs; do 794748e5ce07Smrg deplibs="$deplib $deplibs" 794848e5ce07Smrg if $opt_preserve_dup_deps; then 794948e5ce07Smrg case "$tmp_libs " in 795048e5ce07Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 795148e5ce07Smrg esac 795248e5ce07Smrg fi 795348e5ce07Smrg func_append tmp_libs " $deplib" 795448e5ce07Smrg done 7955c27c18e8Smrg continue 7956c27c18e8Smrg fi # $pass = conv 7957c27c18e8Smrg 7958c27c18e8Smrg 7959c27c18e8Smrg # Get the name of the library we link against. 7960c27c18e8Smrg linklib= 7961b789ec8aSmrg if test -n "$old_library" && 796248e5ce07Smrg { test yes = "$prefer_static_libs" || 796348e5ce07Smrg test built,no = "$prefer_static_libs,$installed"; }; then 7964b789ec8aSmrg linklib=$old_library 7965b789ec8aSmrg else 7966b789ec8aSmrg for l in $old_library $library_names; do 796748e5ce07Smrg linklib=$l 7968b789ec8aSmrg done 7969b789ec8aSmrg fi 7970c27c18e8Smrg if test -z "$linklib"; then 797148e5ce07Smrg func_fatal_error "cannot find name of link library for '$lib'" 7972c27c18e8Smrg fi 7973c27c18e8Smrg 7974c27c18e8Smrg # This library was specified with -dlopen. 797548e5ce07Smrg if test dlopen = "$pass"; then 797648e5ce07Smrg test -z "$libdir" \ 797748e5ce07Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 7978c27c18e8Smrg if test -z "$dlname" || 797948e5ce07Smrg test yes != "$dlopen_support" || 798048e5ce07Smrg test no = "$build_libtool_libs" 798148e5ce07Smrg then 7982c27c18e8Smrg # If there is no dlname, no dlopen support or we're linking 7983c27c18e8Smrg # statically, we need to preload. We also need to preload any 7984c27c18e8Smrg # dependent libraries so libltdl's deplib preloader doesn't 7985c27c18e8Smrg # bomb out in the load deplibs phase. 7986b789ec8aSmrg func_append dlprefiles " $lib $dependency_libs" 7987c27c18e8Smrg else 7988b789ec8aSmrg func_append newdlfiles " $lib" 7989c27c18e8Smrg fi 7990c27c18e8Smrg continue 7991c27c18e8Smrg fi # $pass = dlopen 7992c27c18e8Smrg 7993c27c18e8Smrg # We need an absolute path. 7994c27c18e8Smrg case $ladir in 799548e5ce07Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 7996c27c18e8Smrg *) 7997c27c18e8Smrg abs_ladir=`cd "$ladir" && pwd` 7998c27c18e8Smrg if test -z "$abs_ladir"; then 799948e5ce07Smrg func_warning "cannot determine absolute directory name of '$ladir'" 8000c27c18e8Smrg func_warning "passing it literally to the linker, although it might fail" 800148e5ce07Smrg abs_ladir=$ladir 8002c27c18e8Smrg fi 8003c27c18e8Smrg ;; 8004c27c18e8Smrg esac 8005c27c18e8Smrg func_basename "$lib" 800648e5ce07Smrg laname=$func_basename_result 8007c27c18e8Smrg 8008c27c18e8Smrg # Find the relevant object directory and library name. 800948e5ce07Smrg if test yes = "$installed"; then 8010b789ec8aSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 801148e5ce07Smrg func_warning "library '$lib' was moved." 801248e5ce07Smrg dir=$ladir 801348e5ce07Smrg absdir=$abs_ladir 801448e5ce07Smrg libdir=$abs_ladir 8015c27c18e8Smrg else 801648e5ce07Smrg dir=$lt_sysroot$libdir 801748e5ce07Smrg absdir=$lt_sysroot$libdir 8018c27c18e8Smrg fi 801948e5ce07Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 8020c27c18e8Smrg else 8021c27c18e8Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 802248e5ce07Smrg dir=$ladir 802348e5ce07Smrg absdir=$abs_ladir 8024c27c18e8Smrg # Remove this search path later 8025b789ec8aSmrg func_append notinst_path " $abs_ladir" 8026c27c18e8Smrg else 802748e5ce07Smrg dir=$ladir/$objdir 802848e5ce07Smrg absdir=$abs_ladir/$objdir 8029c27c18e8Smrg # Remove this search path later 8030b789ec8aSmrg func_append notinst_path " $abs_ladir" 8031c27c18e8Smrg fi 8032c27c18e8Smrg fi # $installed = yes 8033c27c18e8Smrg func_stripname 'lib' '.la' "$laname" 8034c27c18e8Smrg name=$func_stripname_result 8035c27c18e8Smrg 8036c27c18e8Smrg # This library was specified with -dlpreopen. 803748e5ce07Smrg if test dlpreopen = "$pass"; then 803848e5ce07Smrg if test -z "$libdir" && test prog = "$linkmode"; then 803948e5ce07Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8040c27c18e8Smrg fi 804148e5ce07Smrg case $host in 8042b789ec8aSmrg # special handling for platforms with PE-DLLs. 8043b789ec8aSmrg *cygwin* | *mingw* | *cegcc* ) 8044b789ec8aSmrg # Linker will automatically link against shared library if both 8045b789ec8aSmrg # static and shared are present. Therefore, ensure we extract 8046b789ec8aSmrg # symbols from the import library if a shared library is present 8047b789ec8aSmrg # (otherwise, the dlopen module name will be incorrect). We do 8048b789ec8aSmrg # this by putting the import library name into $newdlprefiles. 8049b789ec8aSmrg # We recover the dlopen module name by 'saving' the la file 8050b789ec8aSmrg # name in a special purpose variable, and (later) extracting the 8051b789ec8aSmrg # dlname from the la file. 8052b789ec8aSmrg if test -n "$dlname"; then 8053b789ec8aSmrg func_tr_sh "$dir/$linklib" 8054b789ec8aSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8055b789ec8aSmrg func_append newdlprefiles " $dir/$linklib" 8056b789ec8aSmrg else 8057b789ec8aSmrg func_append newdlprefiles " $dir/$old_library" 8058b789ec8aSmrg # Keep a list of preopened convenience libraries to check 8059b789ec8aSmrg # that they are being used correctly in the link pass. 8060b789ec8aSmrg test -z "$libdir" && \ 8061b789ec8aSmrg func_append dlpreconveniencelibs " $dir/$old_library" 8062b789ec8aSmrg fi 8063b789ec8aSmrg ;; 8064b789ec8aSmrg * ) 8065b789ec8aSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8066b789ec8aSmrg # are required to link). 8067b789ec8aSmrg if test -n "$old_library"; then 8068b789ec8aSmrg func_append newdlprefiles " $dir/$old_library" 8069b789ec8aSmrg # Keep a list of preopened convenience libraries to check 8070b789ec8aSmrg # that they are being used correctly in the link pass. 8071b789ec8aSmrg test -z "$libdir" && \ 8072b789ec8aSmrg func_append dlpreconveniencelibs " $dir/$old_library" 8073b789ec8aSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8074b789ec8aSmrg elif test -n "$dlname"; then 8075b789ec8aSmrg func_append newdlprefiles " $dir/$dlname" 8076b789ec8aSmrg else 8077b789ec8aSmrg func_append newdlprefiles " $dir/$linklib" 8078b789ec8aSmrg fi 8079b789ec8aSmrg ;; 8080b789ec8aSmrg esac 8081c27c18e8Smrg fi # $pass = dlpreopen 8082c27c18e8Smrg 8083c27c18e8Smrg if test -z "$libdir"; then 8084c27c18e8Smrg # Link the convenience library 808548e5ce07Smrg if test lib = "$linkmode"; then 8086c27c18e8Smrg deplibs="$dir/$old_library $deplibs" 808748e5ce07Smrg elif test prog,link = "$linkmode,$pass"; then 8088c27c18e8Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 8089c27c18e8Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8090c27c18e8Smrg else 8091c27c18e8Smrg deplibs="$lib $deplibs" # used for prog,scan pass 8092c27c18e8Smrg fi 8093c27c18e8Smrg continue 8094c27c18e8Smrg fi 8095c27c18e8Smrg 8096c27c18e8Smrg 809748e5ce07Smrg if test prog = "$linkmode" && test link != "$pass"; then 8098b789ec8aSmrg func_append newlib_search_path " $ladir" 8099c27c18e8Smrg deplibs="$lib $deplibs" 8100c27c18e8Smrg 810148e5ce07Smrg linkalldeplibs=false 810248e5ce07Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 810348e5ce07Smrg test no = "$build_libtool_libs"; then 810448e5ce07Smrg linkalldeplibs=: 8105c27c18e8Smrg fi 8106c27c18e8Smrg 8107c27c18e8Smrg tmp_libs= 8108c27c18e8Smrg for deplib in $dependency_libs; do 8109c27c18e8Smrg case $deplib in 8110c27c18e8Smrg -L*) func_stripname '-L' '' "$deplib" 8111b789ec8aSmrg func_resolve_sysroot "$func_stripname_result" 8112b789ec8aSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8113c27c18e8Smrg ;; 8114c27c18e8Smrg esac 8115c27c18e8Smrg # Need to link against all dependency_libs? 811648e5ce07Smrg if $linkalldeplibs; then 8117c27c18e8Smrg deplibs="$deplib $deplibs" 8118c27c18e8Smrg else 8119c27c18e8Smrg # Need to hardcode shared library paths 8120c27c18e8Smrg # or/and link against static libraries 8121c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 8122c27c18e8Smrg fi 812348e5ce07Smrg if $opt_preserve_dup_deps; then 8124c27c18e8Smrg case "$tmp_libs " in 8125b789ec8aSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8126c27c18e8Smrg esac 8127c27c18e8Smrg fi 8128b789ec8aSmrg func_append tmp_libs " $deplib" 8129c27c18e8Smrg done # for deplib 8130c27c18e8Smrg continue 8131c27c18e8Smrg fi # $linkmode = prog... 8132c27c18e8Smrg 813348e5ce07Smrg if test prog,link = "$linkmode,$pass"; then 8134c27c18e8Smrg if test -n "$library_names" && 813548e5ce07Smrg { { test no = "$prefer_static_libs" || 813648e5ce07Smrg test built,yes = "$prefer_static_libs,$installed"; } || 8137c27c18e8Smrg test -z "$old_library"; }; then 8138c27c18e8Smrg # We need to hardcode the library path 813948e5ce07Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8140c27c18e8Smrg # Make sure the rpath contains only unique directories. 814148e5ce07Smrg case $temp_rpath: in 8142c27c18e8Smrg *"$absdir:"*) ;; 8143b789ec8aSmrg *) func_append temp_rpath "$absdir:" ;; 8144c27c18e8Smrg esac 8145c27c18e8Smrg fi 8146c27c18e8Smrg 8147c27c18e8Smrg # Hardcode the library path. 8148c27c18e8Smrg # Skip directories that are in the system default run-time 8149c27c18e8Smrg # search path. 8150c27c18e8Smrg case " $sys_lib_dlsearch_path " in 8151c27c18e8Smrg *" $absdir "*) ;; 8152c27c18e8Smrg *) 8153c27c18e8Smrg case "$compile_rpath " in 8154c27c18e8Smrg *" $absdir "*) ;; 8155b789ec8aSmrg *) func_append compile_rpath " $absdir" ;; 8156c27c18e8Smrg esac 8157c27c18e8Smrg ;; 8158c27c18e8Smrg esac 8159c27c18e8Smrg case " $sys_lib_dlsearch_path " in 8160c27c18e8Smrg *" $libdir "*) ;; 8161c27c18e8Smrg *) 8162c27c18e8Smrg case "$finalize_rpath " in 8163c27c18e8Smrg *" $libdir "*) ;; 8164b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 8165c27c18e8Smrg esac 8166c27c18e8Smrg ;; 8167c27c18e8Smrg esac 8168c27c18e8Smrg fi # $linkmode,$pass = prog,link... 8169c27c18e8Smrg 817048e5ce07Smrg if $alldeplibs && 817148e5ce07Smrg { test pass_all = "$deplibs_check_method" || 817248e5ce07Smrg { test yes = "$build_libtool_libs" && 8173c27c18e8Smrg test -n "$library_names"; }; }; then 8174c27c18e8Smrg # We only need to search for static libraries 8175c27c18e8Smrg continue 8176c27c18e8Smrg fi 8177c27c18e8Smrg fi 8178c27c18e8Smrg 8179c27c18e8Smrg link_static=no # Whether the deplib will be linked statically 8180c27c18e8Smrg use_static_libs=$prefer_static_libs 818148e5ce07Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 8182c27c18e8Smrg use_static_libs=no 8183c27c18e8Smrg fi 8184c27c18e8Smrg if test -n "$library_names" && 818548e5ce07Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8186c27c18e8Smrg case $host in 818748e5ce07Smrg *cygwin* | *mingw* | *cegcc* | *os2*) 8188c27c18e8Smrg # No point in relinking DLLs because paths are not encoded 8189b789ec8aSmrg func_append notinst_deplibs " $lib" 8190c27c18e8Smrg need_relink=no 8191c27c18e8Smrg ;; 8192c27c18e8Smrg *) 819348e5ce07Smrg if test no = "$installed"; then 8194b789ec8aSmrg func_append notinst_deplibs " $lib" 8195c27c18e8Smrg need_relink=yes 8196c27c18e8Smrg fi 8197c27c18e8Smrg ;; 8198c27c18e8Smrg esac 8199c27c18e8Smrg # This is a shared library 8200c27c18e8Smrg 8201c27c18e8Smrg # Warn about portability, can't link against -module's on some 8202c27c18e8Smrg # systems (darwin). Don't bleat about dlopened modules though! 820348e5ce07Smrg dlopenmodule= 8204c27c18e8Smrg for dlpremoduletest in $dlprefiles; do 8205c27c18e8Smrg if test "X$dlpremoduletest" = "X$lib"; then 820648e5ce07Smrg dlopenmodule=$dlpremoduletest 8207c27c18e8Smrg break 8208c27c18e8Smrg fi 8209c27c18e8Smrg done 821048e5ce07Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 821137eb1ca1Smrg echo 821248e5ce07Smrg if test prog = "$linkmode"; then 8213c27c18e8Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 8214c27c18e8Smrg else 8215c27c18e8Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8216c27c18e8Smrg fi 8217c27c18e8Smrg $ECHO "*** $linklib is not portable!" 8218c27c18e8Smrg fi 821948e5ce07Smrg if test lib = "$linkmode" && 822048e5ce07Smrg test yes = "$hardcode_into_libs"; then 8221c27c18e8Smrg # Hardcode the library path. 8222c27c18e8Smrg # Skip directories that are in the system default run-time 8223c27c18e8Smrg # search path. 8224c27c18e8Smrg case " $sys_lib_dlsearch_path " in 8225c27c18e8Smrg *" $absdir "*) ;; 8226c27c18e8Smrg *) 8227c27c18e8Smrg case "$compile_rpath " in 8228c27c18e8Smrg *" $absdir "*) ;; 8229b789ec8aSmrg *) func_append compile_rpath " $absdir" ;; 8230c27c18e8Smrg esac 8231c27c18e8Smrg ;; 8232c27c18e8Smrg esac 8233c27c18e8Smrg case " $sys_lib_dlsearch_path " in 8234c27c18e8Smrg *" $libdir "*) ;; 8235c27c18e8Smrg *) 8236c27c18e8Smrg case "$finalize_rpath " in 8237c27c18e8Smrg *" $libdir "*) ;; 8238b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 8239c27c18e8Smrg esac 8240c27c18e8Smrg ;; 8241c27c18e8Smrg esac 8242c27c18e8Smrg fi 8243c27c18e8Smrg 8244c27c18e8Smrg if test -n "$old_archive_from_expsyms_cmds"; then 8245c27c18e8Smrg # figure out the soname 8246c27c18e8Smrg set dummy $library_names 8247c27c18e8Smrg shift 824848e5ce07Smrg realname=$1 8249c27c18e8Smrg shift 8250c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 8251c27c18e8Smrg # use dlname if we got it. it's perfectly good, no? 8252c27c18e8Smrg if test -n "$dlname"; then 825348e5ce07Smrg soname=$dlname 8254c27c18e8Smrg elif test -n "$soname_spec"; then 8255c27c18e8Smrg # bleh windows 8256c27c18e8Smrg case $host in 825748e5ce07Smrg *cygwin* | mingw* | *cegcc* | *os2*) 8258c27c18e8Smrg func_arith $current - $age 8259c27c18e8Smrg major=$func_arith_result 826048e5ce07Smrg versuffix=-$major 8261c27c18e8Smrg ;; 8262c27c18e8Smrg esac 8263c27c18e8Smrg eval soname=\"$soname_spec\" 8264c27c18e8Smrg else 826548e5ce07Smrg soname=$realname 8266c27c18e8Smrg fi 8267c27c18e8Smrg 8268c27c18e8Smrg # Make a new name for the extract_expsyms_cmds to use 826948e5ce07Smrg soroot=$soname 8270c27c18e8Smrg func_basename "$soroot" 827148e5ce07Smrg soname=$func_basename_result 8272c27c18e8Smrg func_stripname 'lib' '.dll' "$soname" 8273c27c18e8Smrg newlib=libimp-$func_stripname_result.a 8274c27c18e8Smrg 8275c27c18e8Smrg # If the library has no export list, then create one now 8276c27c18e8Smrg if test -f "$output_objdir/$soname-def"; then : 8277c27c18e8Smrg else 827848e5ce07Smrg func_verbose "extracting exported symbol list from '$soname'" 8279c27c18e8Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8280c27c18e8Smrg fi 8281c27c18e8Smrg 8282c27c18e8Smrg # Create $newlib 8283c27c18e8Smrg if test -f "$output_objdir/$newlib"; then :; else 828448e5ce07Smrg func_verbose "generating import library for '$soname'" 8285c27c18e8Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8286c27c18e8Smrg fi 8287c27c18e8Smrg # make sure the library variables are pointing to the new library 8288c27c18e8Smrg dir=$output_objdir 8289c27c18e8Smrg linklib=$newlib 8290c27c18e8Smrg fi # test -n "$old_archive_from_expsyms_cmds" 8291c27c18e8Smrg 829248e5ce07Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8293c27c18e8Smrg add_shlibpath= 8294c27c18e8Smrg add_dir= 8295c27c18e8Smrg add= 8296c27c18e8Smrg lib_linked=yes 8297c27c18e8Smrg case $hardcode_action in 8298c27c18e8Smrg immediate | unsupported) 829948e5ce07Smrg if test no = "$hardcode_direct"; then 830048e5ce07Smrg add=$dir/$linklib 8301c27c18e8Smrg case $host in 830248e5ce07Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 830348e5ce07Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8304c27c18e8Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 830548e5ce07Smrg *-*-unixware7*) add_dir=-L$dir ;; 8306c27c18e8Smrg *-*-darwin* ) 830748e5ce07Smrg # if the lib is a (non-dlopened) module then we cannot 8308c27c18e8Smrg # link against it, someone is ignoring the earlier warnings 8309c27c18e8Smrg if /usr/bin/file -L $add 2> /dev/null | 831048e5ce07Smrg $GREP ": [^:]* bundle" >/dev/null; then 8311c27c18e8Smrg if test "X$dlopenmodule" != "X$lib"; then 8312c27c18e8Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 831348e5ce07Smrg if test -z "$old_library"; then 831437eb1ca1Smrg echo 831537eb1ca1Smrg echo "*** And there doesn't seem to be a static archive available" 831637eb1ca1Smrg echo "*** The link will probably fail, sorry" 8317c27c18e8Smrg else 831848e5ce07Smrg add=$dir/$old_library 8319c27c18e8Smrg fi 8320c27c18e8Smrg elif test -n "$old_library"; then 832148e5ce07Smrg add=$dir/$old_library 8322c27c18e8Smrg fi 8323c27c18e8Smrg fi 8324c27c18e8Smrg esac 832548e5ce07Smrg elif test no = "$hardcode_minus_L"; then 8326c27c18e8Smrg case $host in 832748e5ce07Smrg *-*-sunos*) add_shlibpath=$dir ;; 8328c27c18e8Smrg esac 832948e5ce07Smrg add_dir=-L$dir 833048e5ce07Smrg add=-l$name 833148e5ce07Smrg elif test no = "$hardcode_shlibpath_var"; then 833248e5ce07Smrg add_shlibpath=$dir 833348e5ce07Smrg add=-l$name 8334c27c18e8Smrg else 8335c27c18e8Smrg lib_linked=no 8336c27c18e8Smrg fi 8337c27c18e8Smrg ;; 8338c27c18e8Smrg relink) 833948e5ce07Smrg if test yes = "$hardcode_direct" && 834048e5ce07Smrg test no = "$hardcode_direct_absolute"; then 834148e5ce07Smrg add=$dir/$linklib 834248e5ce07Smrg elif test yes = "$hardcode_minus_L"; then 834348e5ce07Smrg add_dir=-L$absdir 8344c27c18e8Smrg # Try looking first in the location we're being installed to. 8345c27c18e8Smrg if test -n "$inst_prefix_dir"; then 8346c27c18e8Smrg case $libdir in 8347c27c18e8Smrg [\\/]*) 8348b789ec8aSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8349c27c18e8Smrg ;; 8350c27c18e8Smrg esac 8351c27c18e8Smrg fi 835248e5ce07Smrg add=-l$name 835348e5ce07Smrg elif test yes = "$hardcode_shlibpath_var"; then 835448e5ce07Smrg add_shlibpath=$dir 835548e5ce07Smrg add=-l$name 8356c27c18e8Smrg else 8357c27c18e8Smrg lib_linked=no 8358c27c18e8Smrg fi 8359c27c18e8Smrg ;; 8360c27c18e8Smrg *) lib_linked=no ;; 8361c27c18e8Smrg esac 8362c27c18e8Smrg 836348e5ce07Smrg if test yes != "$lib_linked"; then 8364c27c18e8Smrg func_fatal_configuration "unsupported hardcode properties" 8365c27c18e8Smrg fi 8366c27c18e8Smrg 8367c27c18e8Smrg if test -n "$add_shlibpath"; then 8368c27c18e8Smrg case :$compile_shlibpath: in 8369c27c18e8Smrg *":$add_shlibpath:"*) ;; 8370b789ec8aSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8371c27c18e8Smrg esac 8372c27c18e8Smrg fi 837348e5ce07Smrg if test prog = "$linkmode"; then 8374c27c18e8Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8375c27c18e8Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8376c27c18e8Smrg else 8377c27c18e8Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8378c27c18e8Smrg test -n "$add" && deplibs="$add $deplibs" 837948e5ce07Smrg if test yes != "$hardcode_direct" && 838048e5ce07Smrg test yes != "$hardcode_minus_L" && 838148e5ce07Smrg test yes = "$hardcode_shlibpath_var"; then 8382c27c18e8Smrg case :$finalize_shlibpath: in 8383c27c18e8Smrg *":$libdir:"*) ;; 8384b789ec8aSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8385c27c18e8Smrg esac 8386c27c18e8Smrg fi 8387c27c18e8Smrg fi 8388c27c18e8Smrg fi 8389c27c18e8Smrg 839048e5ce07Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8391c27c18e8Smrg add_shlibpath= 8392c27c18e8Smrg add_dir= 8393c27c18e8Smrg add= 8394c27c18e8Smrg # Finalize command for both is simple: just hardcode it. 839548e5ce07Smrg if test yes = "$hardcode_direct" && 839648e5ce07Smrg test no = "$hardcode_direct_absolute"; then 839748e5ce07Smrg add=$libdir/$linklib 839848e5ce07Smrg elif test yes = "$hardcode_minus_L"; then 839948e5ce07Smrg add_dir=-L$libdir 840048e5ce07Smrg add=-l$name 840148e5ce07Smrg elif test yes = "$hardcode_shlibpath_var"; then 8402c27c18e8Smrg case :$finalize_shlibpath: in 8403c27c18e8Smrg *":$libdir:"*) ;; 8404b789ec8aSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8405c27c18e8Smrg esac 840648e5ce07Smrg add=-l$name 840748e5ce07Smrg elif test yes = "$hardcode_automatic"; then 8408c27c18e8Smrg if test -n "$inst_prefix_dir" && 840948e5ce07Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 841048e5ce07Smrg add=$inst_prefix_dir$libdir/$linklib 8411c27c18e8Smrg else 841248e5ce07Smrg add=$libdir/$linklib 8413c27c18e8Smrg fi 8414c27c18e8Smrg else 8415c27c18e8Smrg # We cannot seem to hardcode it, guess we'll fake it. 841648e5ce07Smrg add_dir=-L$libdir 8417c27c18e8Smrg # Try looking first in the location we're being installed to. 8418c27c18e8Smrg if test -n "$inst_prefix_dir"; then 8419c27c18e8Smrg case $libdir in 8420c27c18e8Smrg [\\/]*) 8421b789ec8aSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8422c27c18e8Smrg ;; 8423c27c18e8Smrg esac 8424c27c18e8Smrg fi 842548e5ce07Smrg add=-l$name 8426c27c18e8Smrg fi 8427c27c18e8Smrg 842848e5ce07Smrg if test prog = "$linkmode"; then 8429c27c18e8Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8430c27c18e8Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8431c27c18e8Smrg else 8432c27c18e8Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8433c27c18e8Smrg test -n "$add" && deplibs="$add $deplibs" 8434c27c18e8Smrg fi 8435c27c18e8Smrg fi 843648e5ce07Smrg elif test prog = "$linkmode"; then 8437c27c18e8Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8438c27c18e8Smrg # is not unsupported. This is valid on all known static and 8439c27c18e8Smrg # shared platforms. 844048e5ce07Smrg if test unsupported != "$hardcode_direct"; then 844148e5ce07Smrg test -n "$old_library" && linklib=$old_library 8442c27c18e8Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 8443c27c18e8Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8444c27c18e8Smrg else 8445c27c18e8Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8446c27c18e8Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8447c27c18e8Smrg fi 844848e5ce07Smrg elif test yes = "$build_libtool_libs"; then 8449c27c18e8Smrg # Not a shared library 845048e5ce07Smrg if test pass_all != "$deplibs_check_method"; then 8451c27c18e8Smrg # We're trying link a shared library against a static one 8452c27c18e8Smrg # but the system doesn't support it. 8453c27c18e8Smrg 8454c27c18e8Smrg # Just print a warning and add the library to dependency_libs so 8455c27c18e8Smrg # that the program can be linked against the static library. 845637eb1ca1Smrg echo 845748e5ce07Smrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 845837eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 845937eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 846037eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have." 846148e5ce07Smrg if test yes = "$module"; then 846237eb1ca1Smrg echo "*** But as you try to build a module library, libtool will still create " 846337eb1ca1Smrg echo "*** a static module, that should work as long as the dlopening application" 846437eb1ca1Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8465c27c18e8Smrg if test -z "$global_symbol_pipe"; then 846637eb1ca1Smrg echo 846737eb1ca1Smrg echo "*** However, this would only work if libtool was able to extract symbol" 846848e5ce07Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 846937eb1ca1Smrg echo "*** not find such a program. So, this module is probably useless." 847048e5ce07Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 8471c27c18e8Smrg fi 847248e5ce07Smrg if test no = "$build_old_libs"; then 8473c27c18e8Smrg build_libtool_libs=module 8474c27c18e8Smrg build_old_libs=yes 8475c27c18e8Smrg else 8476c27c18e8Smrg build_libtool_libs=no 8477c27c18e8Smrg fi 8478c27c18e8Smrg fi 8479c27c18e8Smrg else 8480c27c18e8Smrg deplibs="$dir/$old_library $deplibs" 8481c27c18e8Smrg link_static=yes 8482c27c18e8Smrg fi 8483c27c18e8Smrg fi # link shared/static library? 8484c27c18e8Smrg 848548e5ce07Smrg if test lib = "$linkmode"; then 8486c27c18e8Smrg if test -n "$dependency_libs" && 848748e5ce07Smrg { test yes != "$hardcode_into_libs" || 848848e5ce07Smrg test yes = "$build_old_libs" || 848948e5ce07Smrg test yes = "$link_static"; }; then 8490c27c18e8Smrg # Extract -R from dependency_libs 8491c27c18e8Smrg temp_deplibs= 8492c27c18e8Smrg for libdir in $dependency_libs; do 8493c27c18e8Smrg case $libdir in 8494c27c18e8Smrg -R*) func_stripname '-R' '' "$libdir" 8495c27c18e8Smrg temp_xrpath=$func_stripname_result 8496c27c18e8Smrg case " $xrpath " in 8497c27c18e8Smrg *" $temp_xrpath "*) ;; 8498b789ec8aSmrg *) func_append xrpath " $temp_xrpath";; 8499c27c18e8Smrg esac;; 8500b789ec8aSmrg *) func_append temp_deplibs " $libdir";; 8501c27c18e8Smrg esac 8502c27c18e8Smrg done 850348e5ce07Smrg dependency_libs=$temp_deplibs 8504c27c18e8Smrg fi 8505c27c18e8Smrg 8506b789ec8aSmrg func_append newlib_search_path " $absdir" 8507c27c18e8Smrg # Link against this library 850848e5ce07Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8509c27c18e8Smrg # ... and its dependency_libs 8510c27c18e8Smrg tmp_libs= 8511c27c18e8Smrg for deplib in $dependency_libs; do 8512c27c18e8Smrg newdependency_libs="$deplib $newdependency_libs" 8513b789ec8aSmrg case $deplib in 8514b789ec8aSmrg -L*) func_stripname '-L' '' "$deplib" 8515b789ec8aSmrg func_resolve_sysroot "$func_stripname_result";; 8516b789ec8aSmrg *) func_resolve_sysroot "$deplib" ;; 8517b789ec8aSmrg esac 851848e5ce07Smrg if $opt_preserve_dup_deps; then 8519c27c18e8Smrg case "$tmp_libs " in 8520b789ec8aSmrg *" $func_resolve_sysroot_result "*) 8521b789ec8aSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8522c27c18e8Smrg esac 8523c27c18e8Smrg fi 8524b789ec8aSmrg func_append tmp_libs " $func_resolve_sysroot_result" 8525c27c18e8Smrg done 8526c27c18e8Smrg 852748e5ce07Smrg if test no != "$link_all_deplibs"; then 8528c27c18e8Smrg # Add the search paths of all dependency libraries 8529c27c18e8Smrg for deplib in $dependency_libs; do 853037eb1ca1Smrg path= 8531c27c18e8Smrg case $deplib in 853248e5ce07Smrg -L*) path=$deplib ;; 8533c27c18e8Smrg *.la) 8534b789ec8aSmrg func_resolve_sysroot "$deplib" 8535b789ec8aSmrg deplib=$func_resolve_sysroot_result 8536c27c18e8Smrg func_dirname "$deplib" "" "." 8537b789ec8aSmrg dir=$func_dirname_result 8538c27c18e8Smrg # We need an absolute path. 8539c27c18e8Smrg case $dir in 854048e5ce07Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8541c27c18e8Smrg *) 8542c27c18e8Smrg absdir=`cd "$dir" && pwd` 8543c27c18e8Smrg if test -z "$absdir"; then 854448e5ce07Smrg func_warning "cannot determine absolute directory name of '$dir'" 854548e5ce07Smrg absdir=$dir 8546c27c18e8Smrg fi 8547c27c18e8Smrg ;; 8548c27c18e8Smrg esac 8549c27c18e8Smrg if $GREP "^installed=no" $deplib > /dev/null; then 8550c27c18e8Smrg case $host in 8551c27c18e8Smrg *-*-darwin*) 8552c27c18e8Smrg depdepl= 855348e5ce07Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 855448e5ce07Smrg if test -n "$deplibrary_names"; then 855548e5ce07Smrg for tmp in $deplibrary_names; do 8556c27c18e8Smrg depdepl=$tmp 8557c27c18e8Smrg done 855848e5ce07Smrg if test -f "$absdir/$objdir/$depdepl"; then 855948e5ce07Smrg depdepl=$absdir/$objdir/$depdepl 856048e5ce07Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8561c27c18e8Smrg if test -z "$darwin_install_name"; then 856248e5ce07Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8563c27c18e8Smrg fi 856448e5ce07Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 856548e5ce07Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8566c27c18e8Smrg path= 8567c27c18e8Smrg fi 8568c27c18e8Smrg fi 8569c27c18e8Smrg ;; 8570c27c18e8Smrg *) 857148e5ce07Smrg path=-L$absdir/$objdir 8572c27c18e8Smrg ;; 8573c27c18e8Smrg esac 8574c27c18e8Smrg else 857548e5ce07Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8576c27c18e8Smrg test -z "$libdir" && \ 857748e5ce07Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 8578c27c18e8Smrg test "$absdir" != "$libdir" && \ 857948e5ce07Smrg func_warning "'$deplib' seems to be moved" 8580c27c18e8Smrg 858148e5ce07Smrg path=-L$absdir 8582c27c18e8Smrg fi 8583c27c18e8Smrg ;; 8584c27c18e8Smrg esac 8585c27c18e8Smrg case " $deplibs " in 8586c27c18e8Smrg *" $path "*) ;; 8587c27c18e8Smrg *) deplibs="$path $deplibs" ;; 8588c27c18e8Smrg esac 8589c27c18e8Smrg done 8590c27c18e8Smrg fi # link_all_deplibs != no 8591c27c18e8Smrg fi # linkmode = lib 8592c27c18e8Smrg done # for deplib in $libs 859348e5ce07Smrg if test link = "$pass"; then 859448e5ce07Smrg if test prog = "$linkmode"; then 8595c27c18e8Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8596c27c18e8Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8597c27c18e8Smrg else 859837eb1ca1Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8599c27c18e8Smrg fi 8600c27c18e8Smrg fi 860148e5ce07Smrg dependency_libs=$newdependency_libs 860248e5ce07Smrg if test dlpreopen = "$pass"; then 8603c27c18e8Smrg # Link the dlpreopened libraries before other libraries 8604c27c18e8Smrg for deplib in $save_deplibs; do 8605c27c18e8Smrg deplibs="$deplib $deplibs" 8606c27c18e8Smrg done 8607c27c18e8Smrg fi 860848e5ce07Smrg if test dlopen != "$pass"; then 860948e5ce07Smrg test conv = "$pass" || { 8610c27c18e8Smrg # Make sure lib_search_path contains only unique directories. 8611c27c18e8Smrg lib_search_path= 8612c27c18e8Smrg for dir in $newlib_search_path; do 8613c27c18e8Smrg case "$lib_search_path " in 8614c27c18e8Smrg *" $dir "*) ;; 8615b789ec8aSmrg *) func_append lib_search_path " $dir" ;; 8616c27c18e8Smrg esac 8617c27c18e8Smrg done 8618c27c18e8Smrg newlib_search_path= 861948e5ce07Smrg } 8620c27c18e8Smrg 862148e5ce07Smrg if test prog,link = "$linkmode,$pass"; then 86220eb1301bSmrg vars="compile_deplibs finalize_deplibs" 862348e5ce07Smrg else 862448e5ce07Smrg vars=deplibs 8625c27c18e8Smrg fi 8626c27c18e8Smrg for var in $vars dependency_libs; do 8627c27c18e8Smrg # Add libraries to $var in reverse order 8628c27c18e8Smrg eval tmp_libs=\"\$$var\" 8629c27c18e8Smrg new_libs= 8630c27c18e8Smrg for deplib in $tmp_libs; do 8631c27c18e8Smrg # FIXME: Pedantically, this is the right thing to do, so 8632c27c18e8Smrg # that some nasty dependency loop isn't accidentally 8633c27c18e8Smrg # broken: 8634c27c18e8Smrg #new_libs="$deplib $new_libs" 8635c27c18e8Smrg # Pragmatically, this seems to cause very few problems in 8636c27c18e8Smrg # practice: 8637c27c18e8Smrg case $deplib in 8638c27c18e8Smrg -L*) new_libs="$deplib $new_libs" ;; 8639c27c18e8Smrg -R*) ;; 8640c27c18e8Smrg *) 8641c27c18e8Smrg # And here is the reason: when a library appears more 8642c27c18e8Smrg # than once as an explicit dependence of a library, or 8643c27c18e8Smrg # is implicitly linked in more than once by the 8644c27c18e8Smrg # compiler, it is considered special, and multiple 8645c27c18e8Smrg # occurrences thereof are not removed. Compare this 8646c27c18e8Smrg # with having the same library being listed as a 8647c27c18e8Smrg # dependency of multiple other libraries: in this case, 8648c27c18e8Smrg # we know (pedantically, we assume) the library does not 8649c27c18e8Smrg # need to be listed more than once, so we keep only the 8650c27c18e8Smrg # last copy. This is not always right, but it is rare 8651c27c18e8Smrg # enough that we require users that really mean to play 8652c27c18e8Smrg # such unportable linking tricks to link the library 8653c27c18e8Smrg # using -Wl,-lname, so that libtool does not consider it 8654c27c18e8Smrg # for duplicate removal. 8655c27c18e8Smrg case " $specialdeplibs " in 8656c27c18e8Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 8657c27c18e8Smrg *) 8658c27c18e8Smrg case " $new_libs " in 8659c27c18e8Smrg *" $deplib "*) ;; 8660c27c18e8Smrg *) new_libs="$deplib $new_libs" ;; 8661c27c18e8Smrg esac 8662c27c18e8Smrg ;; 8663c27c18e8Smrg esac 8664c27c18e8Smrg ;; 8665c27c18e8Smrg esac 8666c27c18e8Smrg done 8667c27c18e8Smrg tmp_libs= 8668c27c18e8Smrg for deplib in $new_libs; do 8669c27c18e8Smrg case $deplib in 8670c27c18e8Smrg -L*) 8671c27c18e8Smrg case " $tmp_libs " in 8672c27c18e8Smrg *" $deplib "*) ;; 8673b789ec8aSmrg *) func_append tmp_libs " $deplib" ;; 8674c27c18e8Smrg esac 8675c27c18e8Smrg ;; 8676b789ec8aSmrg *) func_append tmp_libs " $deplib" ;; 8677c27c18e8Smrg esac 8678c27c18e8Smrg done 8679c27c18e8Smrg eval $var=\"$tmp_libs\" 8680c27c18e8Smrg done # for var 8681c27c18e8Smrg fi 868248e5ce07Smrg 868348e5ce07Smrg # Add Sun CC postdeps if required: 868448e5ce07Smrg test CXX = "$tagname" && { 868548e5ce07Smrg case $host_os in 868648e5ce07Smrg linux*) 868748e5ce07Smrg case `$CC -V 2>&1 | sed 5q` in 868848e5ce07Smrg *Sun\ C*) # Sun C++ 5.9 868948e5ce07Smrg func_suncc_cstd_abi 869048e5ce07Smrg 869148e5ce07Smrg if test no != "$suncc_use_cstd_abi"; then 869248e5ce07Smrg func_append postdeps ' -library=Cstd -library=Crun' 869348e5ce07Smrg fi 869448e5ce07Smrg ;; 869548e5ce07Smrg esac 869648e5ce07Smrg ;; 869748e5ce07Smrg 869848e5ce07Smrg solaris*) 869948e5ce07Smrg func_cc_basename "$CC" 870048e5ce07Smrg case $func_cc_basename_result in 870148e5ce07Smrg CC* | sunCC*) 870248e5ce07Smrg func_suncc_cstd_abi 870348e5ce07Smrg 870448e5ce07Smrg if test no != "$suncc_use_cstd_abi"; then 870548e5ce07Smrg func_append postdeps ' -library=Cstd -library=Crun' 870648e5ce07Smrg fi 870748e5ce07Smrg ;; 870848e5ce07Smrg esac 870948e5ce07Smrg ;; 871048e5ce07Smrg esac 871148e5ce07Smrg } 871248e5ce07Smrg 8713c27c18e8Smrg # Last step: remove runtime libs from dependency_libs 8714c27c18e8Smrg # (they stay in deplibs) 8715c27c18e8Smrg tmp_libs= 871648e5ce07Smrg for i in $dependency_libs; do 8717c27c18e8Smrg case " $predeps $postdeps $compiler_lib_search_path " in 8718c27c18e8Smrg *" $i "*) 871948e5ce07Smrg i= 8720c27c18e8Smrg ;; 8721c27c18e8Smrg esac 872248e5ce07Smrg if test -n "$i"; then 8723b789ec8aSmrg func_append tmp_libs " $i" 8724c27c18e8Smrg fi 8725c27c18e8Smrg done 8726c27c18e8Smrg dependency_libs=$tmp_libs 8727c27c18e8Smrg done # for pass 872848e5ce07Smrg if test prog = "$linkmode"; then 872948e5ce07Smrg dlfiles=$newdlfiles 8730c27c18e8Smrg fi 873148e5ce07Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 873248e5ce07Smrg dlprefiles=$newdlprefiles 8733c27c18e8Smrg fi 8734c27c18e8Smrg 8735c27c18e8Smrg case $linkmode in 8736c27c18e8Smrg oldlib) 873748e5ce07Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 873848e5ce07Smrg func_warning "'-dlopen' is ignored for archives" 8739c27c18e8Smrg fi 8740c27c18e8Smrg 8741c27c18e8Smrg case " $deplibs" in 8742c27c18e8Smrg *\ -l* | *\ -L*) 874348e5ce07Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 8744c27c18e8Smrg esac 8745c27c18e8Smrg 8746c27c18e8Smrg test -n "$rpath" && \ 874748e5ce07Smrg func_warning "'-rpath' is ignored for archives" 8748c27c18e8Smrg 8749c27c18e8Smrg test -n "$xrpath" && \ 875048e5ce07Smrg func_warning "'-R' is ignored for archives" 8751c27c18e8Smrg 8752c27c18e8Smrg test -n "$vinfo" && \ 875348e5ce07Smrg func_warning "'-version-info/-version-number' is ignored for archives" 8754c27c18e8Smrg 8755c27c18e8Smrg test -n "$release" && \ 875648e5ce07Smrg func_warning "'-release' is ignored for archives" 8757c27c18e8Smrg 8758c27c18e8Smrg test -n "$export_symbols$export_symbols_regex" && \ 875948e5ce07Smrg func_warning "'-export-symbols' is ignored for archives" 8760c27c18e8Smrg 8761c27c18e8Smrg # Now set the variables for building old libraries. 8762c27c18e8Smrg build_libtool_libs=no 876348e5ce07Smrg oldlibs=$output 8764b789ec8aSmrg func_append objs "$old_deplibs" 8765c27c18e8Smrg ;; 8766c27c18e8Smrg 8767c27c18e8Smrg lib) 876848e5ce07Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 8769c27c18e8Smrg case $outputname in 8770c27c18e8Smrg lib*) 8771c27c18e8Smrg func_stripname 'lib' '.la' "$outputname" 8772c27c18e8Smrg name=$func_stripname_result 8773c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 8774c27c18e8Smrg eval libname=\"$libname_spec\" 8775c27c18e8Smrg ;; 8776c27c18e8Smrg *) 877748e5ce07Smrg test no = "$module" \ 877848e5ce07Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 8779c27c18e8Smrg 878048e5ce07Smrg if test no != "$need_lib_prefix"; then 8781c27c18e8Smrg # Add the "lib" prefix for modules if required 8782c27c18e8Smrg func_stripname '' '.la' "$outputname" 8783c27c18e8Smrg name=$func_stripname_result 8784c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 8785c27c18e8Smrg eval libname=\"$libname_spec\" 8786c27c18e8Smrg else 8787c27c18e8Smrg func_stripname '' '.la' "$outputname" 8788c27c18e8Smrg libname=$func_stripname_result 8789c27c18e8Smrg fi 8790c27c18e8Smrg ;; 8791c27c18e8Smrg esac 8792c27c18e8Smrg 8793c27c18e8Smrg if test -n "$objs"; then 879448e5ce07Smrg if test pass_all != "$deplibs_check_method"; then 879548e5ce07Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8796c27c18e8Smrg else 879737eb1ca1Smrg echo 8798c27c18e8Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8799c27c18e8Smrg $ECHO "*** objects $objs is not portable!" 8800b789ec8aSmrg func_append libobjs " $objs" 8801c27c18e8Smrg fi 8802c27c18e8Smrg fi 8803c27c18e8Smrg 880448e5ce07Smrg test no = "$dlself" \ 880548e5ce07Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 8806c27c18e8Smrg 8807c27c18e8Smrg set dummy $rpath 8808c27c18e8Smrg shift 880948e5ce07Smrg test 1 -lt "$#" \ 881048e5ce07Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 8811c27c18e8Smrg 881248e5ce07Smrg install_libdir=$1 8813c27c18e8Smrg 8814c27c18e8Smrg oldlibs= 8815c27c18e8Smrg if test -z "$rpath"; then 881648e5ce07Smrg if test yes = "$build_libtool_libs"; then 8817c27c18e8Smrg # Building a libtool convenience library. 881848e5ce07Smrg # Some compilers have problems with a '.al' extension so 8819c27c18e8Smrg # convenience libraries should have the same extension an 8820c27c18e8Smrg # archive normally would. 8821c27c18e8Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 8822c27c18e8Smrg build_libtool_libs=convenience 8823c27c18e8Smrg build_old_libs=yes 8824c27c18e8Smrg fi 8825c27c18e8Smrg 8826c27c18e8Smrg test -n "$vinfo" && \ 882748e5ce07Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8828c27c18e8Smrg 8829c27c18e8Smrg test -n "$release" && \ 883048e5ce07Smrg func_warning "'-release' is ignored for convenience libraries" 8831c27c18e8Smrg else 8832c27c18e8Smrg 8833c27c18e8Smrg # Parse the version information argument. 883448e5ce07Smrg save_ifs=$IFS; IFS=: 8835c27c18e8Smrg set dummy $vinfo 0 0 0 8836c27c18e8Smrg shift 883748e5ce07Smrg IFS=$save_ifs 8838c27c18e8Smrg 8839c27c18e8Smrg test -n "$7" && \ 884048e5ce07Smrg func_fatal_help "too many parameters to '-version-info'" 8841c27c18e8Smrg 8842c27c18e8Smrg # convert absolute version numbers to libtool ages 8843c27c18e8Smrg # this retains compatibility with .la files and attempts 8844c27c18e8Smrg # to make the code below a bit more comprehensible 8845c27c18e8Smrg 8846c27c18e8Smrg case $vinfo_number in 8847c27c18e8Smrg yes) 884848e5ce07Smrg number_major=$1 884948e5ce07Smrg number_minor=$2 885048e5ce07Smrg number_revision=$3 8851c27c18e8Smrg # 8852c27c18e8Smrg # There are really only two kinds -- those that 8853c27c18e8Smrg # use the current revision as the major version 8854c27c18e8Smrg # and those that subtract age and use age as 8855c27c18e8Smrg # a minor version. But, then there is irix 885648e5ce07Smrg # that has an extra 1 added just for fun 8857c27c18e8Smrg # 8858c27c18e8Smrg case $version_type in 8859f1ee322dSmrg # correct linux to gnu/linux during the next big refactor 886048e5ce07Smrg darwin|freebsd-elf|linux|osf|windows|none) 8861c27c18e8Smrg func_arith $number_major + $number_minor 8862c27c18e8Smrg current=$func_arith_result 886348e5ce07Smrg age=$number_minor 886448e5ce07Smrg revision=$number_revision 8865c27c18e8Smrg ;; 886648e5ce07Smrg freebsd-aout|qnx|sunos) 886748e5ce07Smrg current=$number_major 886848e5ce07Smrg revision=$number_minor 886948e5ce07Smrg age=0 8870c27c18e8Smrg ;; 8871c27c18e8Smrg irix|nonstopux) 8872c27c18e8Smrg func_arith $number_major + $number_minor 8873c27c18e8Smrg current=$func_arith_result 887448e5ce07Smrg age=$number_minor 887548e5ce07Smrg revision=$number_minor 8876c27c18e8Smrg lt_irix_increment=no 8877c27c18e8Smrg ;; 8878c27c18e8Smrg esac 8879c27c18e8Smrg ;; 8880c27c18e8Smrg no) 888148e5ce07Smrg current=$1 888248e5ce07Smrg revision=$2 888348e5ce07Smrg age=$3 8884c27c18e8Smrg ;; 8885c27c18e8Smrg esac 8886c27c18e8Smrg 8887c27c18e8Smrg # Check that each of the things are valid numbers. 8888c27c18e8Smrg case $current in 8889c27c18e8Smrg 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]) ;; 8890c27c18e8Smrg *) 889148e5ce07Smrg func_error "CURRENT '$current' must be a nonnegative integer" 889248e5ce07Smrg func_fatal_error "'$vinfo' is not valid version information" 8893c27c18e8Smrg ;; 8894c27c18e8Smrg esac 8895c27c18e8Smrg 8896c27c18e8Smrg case $revision in 8897c27c18e8Smrg 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]) ;; 8898c27c18e8Smrg *) 889948e5ce07Smrg func_error "REVISION '$revision' must be a nonnegative integer" 890048e5ce07Smrg func_fatal_error "'$vinfo' is not valid version information" 8901c27c18e8Smrg ;; 8902c27c18e8Smrg esac 8903c27c18e8Smrg 8904c27c18e8Smrg case $age in 8905c27c18e8Smrg 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]) ;; 8906c27c18e8Smrg *) 890748e5ce07Smrg func_error "AGE '$age' must be a nonnegative integer" 890848e5ce07Smrg func_fatal_error "'$vinfo' is not valid version information" 8909c27c18e8Smrg ;; 8910c27c18e8Smrg esac 8911c27c18e8Smrg 8912c27c18e8Smrg if test "$age" -gt "$current"; then 891348e5ce07Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 891448e5ce07Smrg func_fatal_error "'$vinfo' is not valid version information" 8915c27c18e8Smrg fi 8916c27c18e8Smrg 8917c27c18e8Smrg # Calculate the version variables. 8918c27c18e8Smrg major= 8919c27c18e8Smrg versuffix= 8920c27c18e8Smrg verstring= 8921c27c18e8Smrg case $version_type in 8922c27c18e8Smrg none) ;; 8923c27c18e8Smrg 8924c27c18e8Smrg darwin) 8925c27c18e8Smrg # Like Linux, but with the current version available in 8926c27c18e8Smrg # verstring for coding it into the library header 8927c27c18e8Smrg func_arith $current - $age 8928c27c18e8Smrg major=.$func_arith_result 892948e5ce07Smrg versuffix=$major.$age.$revision 8930c27c18e8Smrg # Darwin ld doesn't like 0 for these options... 8931c27c18e8Smrg func_arith $current + 1 8932c27c18e8Smrg minor_current=$func_arith_result 893348e5ce07Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8934c27c18e8Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 893548e5ce07Smrg # On Darwin other compilers 893648e5ce07Smrg case $CC in 893748e5ce07Smrg nagfor*) 893848e5ce07Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 893948e5ce07Smrg ;; 894048e5ce07Smrg *) 894148e5ce07Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 894248e5ce07Smrg ;; 894348e5ce07Smrg esac 8944c27c18e8Smrg ;; 8945c27c18e8Smrg 8946c27c18e8Smrg freebsd-aout) 894748e5ce07Smrg major=.$current 894848e5ce07Smrg versuffix=.$current.$revision 8949c27c18e8Smrg ;; 8950c27c18e8Smrg 8951c27c18e8Smrg freebsd-elf) 895248e5ce07Smrg func_arith $current - $age 895348e5ce07Smrg major=.$func_arith_result 895448e5ce07Smrg versuffix=$major.$age.$revision 8955c27c18e8Smrg ;; 8956c27c18e8Smrg 8957c27c18e8Smrg irix | nonstopux) 895848e5ce07Smrg if test no = "$lt_irix_increment"; then 8959c27c18e8Smrg func_arith $current - $age 8960c27c18e8Smrg else 8961c27c18e8Smrg func_arith $current - $age + 1 8962c27c18e8Smrg fi 8963c27c18e8Smrg major=$func_arith_result 8964c27c18e8Smrg 8965c27c18e8Smrg case $version_type in 8966c27c18e8Smrg nonstopux) verstring_prefix=nonstopux ;; 8967c27c18e8Smrg *) verstring_prefix=sgi ;; 8968c27c18e8Smrg esac 896948e5ce07Smrg verstring=$verstring_prefix$major.$revision 8970c27c18e8Smrg 8971c27c18e8Smrg # Add in all the interfaces that we are compatible with. 8972c27c18e8Smrg loop=$revision 897348e5ce07Smrg while test 0 -ne "$loop"; do 8974c27c18e8Smrg func_arith $revision - $loop 8975c27c18e8Smrg iface=$func_arith_result 8976c27c18e8Smrg func_arith $loop - 1 8977c27c18e8Smrg loop=$func_arith_result 897848e5ce07Smrg verstring=$verstring_prefix$major.$iface:$verstring 8979c27c18e8Smrg done 8980c27c18e8Smrg 898148e5ce07Smrg # Before this point, $major must not contain '.'. 8982c27c18e8Smrg major=.$major 898348e5ce07Smrg versuffix=$major.$revision 8984c27c18e8Smrg ;; 8985c27c18e8Smrg 8986f1ee322dSmrg linux) # correct to gnu/linux during the next big refactor 8987c27c18e8Smrg func_arith $current - $age 8988c27c18e8Smrg major=.$func_arith_result 898948e5ce07Smrg versuffix=$major.$age.$revision 8990c27c18e8Smrg ;; 8991c27c18e8Smrg 8992c27c18e8Smrg osf) 8993c27c18e8Smrg func_arith $current - $age 8994c27c18e8Smrg major=.$func_arith_result 899548e5ce07Smrg versuffix=.$current.$age.$revision 899648e5ce07Smrg verstring=$current.$age.$revision 8997c27c18e8Smrg 8998c27c18e8Smrg # Add in all the interfaces that we are compatible with. 8999c27c18e8Smrg loop=$age 900048e5ce07Smrg while test 0 -ne "$loop"; do 9001c27c18e8Smrg func_arith $current - $loop 9002c27c18e8Smrg iface=$func_arith_result 9003c27c18e8Smrg func_arith $loop - 1 9004c27c18e8Smrg loop=$func_arith_result 900548e5ce07Smrg verstring=$verstring:$iface.0 9006c27c18e8Smrg done 9007c27c18e8Smrg 9008c27c18e8Smrg # Make executables depend on our current version. 900948e5ce07Smrg func_append verstring ":$current.0" 9010c27c18e8Smrg ;; 9011c27c18e8Smrg 9012c27c18e8Smrg qnx) 901348e5ce07Smrg major=.$current 901448e5ce07Smrg versuffix=.$current 901548e5ce07Smrg ;; 901648e5ce07Smrg 901748e5ce07Smrg sco) 901848e5ce07Smrg major=.$current 901948e5ce07Smrg versuffix=.$current 9020c27c18e8Smrg ;; 9021c27c18e8Smrg 9022c27c18e8Smrg sunos) 902348e5ce07Smrg major=.$current 902448e5ce07Smrg versuffix=.$current.$revision 9025c27c18e8Smrg ;; 9026c27c18e8Smrg 9027c27c18e8Smrg windows) 9028c27c18e8Smrg # Use '-' rather than '.', since we only want one 902948e5ce07Smrg # extension on DOS 8.3 file systems. 9030c27c18e8Smrg func_arith $current - $age 9031c27c18e8Smrg major=$func_arith_result 903248e5ce07Smrg versuffix=-$major 9033c27c18e8Smrg ;; 9034c27c18e8Smrg 9035c27c18e8Smrg *) 903648e5ce07Smrg func_fatal_configuration "unknown library version type '$version_type'" 9037c27c18e8Smrg ;; 9038c27c18e8Smrg esac 9039c27c18e8Smrg 9040c27c18e8Smrg # Clear the version info if we defaulted, and they specified a release. 9041c27c18e8Smrg if test -z "$vinfo" && test -n "$release"; then 9042c27c18e8Smrg major= 9043c27c18e8Smrg case $version_type in 9044c27c18e8Smrg darwin) 9045c27c18e8Smrg # we can't check for "0.0" in archive_cmds due to quoting 9046c27c18e8Smrg # problems, so we reset it completely 9047c27c18e8Smrg verstring= 9048c27c18e8Smrg ;; 9049c27c18e8Smrg *) 905048e5ce07Smrg verstring=0.0 9051c27c18e8Smrg ;; 9052c27c18e8Smrg esac 905348e5ce07Smrg if test no = "$need_version"; then 9054c27c18e8Smrg versuffix= 9055c27c18e8Smrg else 905648e5ce07Smrg versuffix=.0.0 9057c27c18e8Smrg fi 9058c27c18e8Smrg fi 9059c27c18e8Smrg 9060c27c18e8Smrg # Remove version info from name if versioning should be avoided 906148e5ce07Smrg if test yes,no = "$avoid_version,$need_version"; then 9062c27c18e8Smrg major= 9063c27c18e8Smrg versuffix= 906448e5ce07Smrg verstring= 9065c27c18e8Smrg fi 9066c27c18e8Smrg 9067c27c18e8Smrg # Check to see if the archive will have undefined symbols. 906848e5ce07Smrg if test yes = "$allow_undefined"; then 906948e5ce07Smrg if test unsupported = "$allow_undefined_flag"; then 907048e5ce07Smrg if test yes = "$build_old_libs"; then 907148e5ce07Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 907248e5ce07Smrg build_libtool_libs=no 907348e5ce07Smrg else 907448e5ce07Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 907548e5ce07Smrg fi 9076c27c18e8Smrg fi 9077c27c18e8Smrg else 9078c27c18e8Smrg # Don't allow undefined symbols. 907948e5ce07Smrg allow_undefined_flag=$no_undefined_flag 9080c27c18e8Smrg fi 9081c27c18e8Smrg 9082c27c18e8Smrg fi 9083c27c18e8Smrg 908448e5ce07Smrg func_generate_dlsyms "$libname" "$libname" : 9085b789ec8aSmrg func_append libobjs " $symfileobj" 908648e5ce07Smrg test " " = "$libobjs" && libobjs= 9087c27c18e8Smrg 908848e5ce07Smrg if test relink != "$opt_mode"; then 9089c27c18e8Smrg # Remove our outputs, but don't remove object files since they 9090c27c18e8Smrg # may have been created when compiling PIC objects. 9091c27c18e8Smrg removelist= 9092c27c18e8Smrg tempremovelist=`$ECHO "$output_objdir/*"` 9093c27c18e8Smrg for p in $tempremovelist; do 9094c27c18e8Smrg case $p in 9095c27c18e8Smrg *.$objext | *.gcno) 9096c27c18e8Smrg ;; 909748e5ce07Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 909848e5ce07Smrg if test -n "$precious_files_regex"; then 9099c27c18e8Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9100c27c18e8Smrg then 9101c27c18e8Smrg continue 9102c27c18e8Smrg fi 9103c27c18e8Smrg fi 9104b789ec8aSmrg func_append removelist " $p" 9105c27c18e8Smrg ;; 9106c27c18e8Smrg *) ;; 9107c27c18e8Smrg esac 9108c27c18e8Smrg done 9109c27c18e8Smrg test -n "$removelist" && \ 9110c27c18e8Smrg func_show_eval "${RM}r \$removelist" 9111c27c18e8Smrg fi 9112c27c18e8Smrg 9113c27c18e8Smrg # Now set the variables for building old libraries. 911448e5ce07Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9115b789ec8aSmrg func_append oldlibs " $output_objdir/$libname.$libext" 9116c27c18e8Smrg 9117c27c18e8Smrg # Transform .lo files to .o files. 911848e5ce07Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9119c27c18e8Smrg fi 9120c27c18e8Smrg 9121c27c18e8Smrg # Eliminate all temporary directories. 9122c27c18e8Smrg #for path in $notinst_path; do 912337eb1ca1Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 912437eb1ca1Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 912537eb1ca1Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9126c27c18e8Smrg #done 9127c27c18e8Smrg 9128c27c18e8Smrg if test -n "$xrpath"; then 9129c27c18e8Smrg # If the user specified any rpath flags, then add them. 9130c27c18e8Smrg temp_xrpath= 9131c27c18e8Smrg for libdir in $xrpath; do 9132b789ec8aSmrg func_replace_sysroot "$libdir" 9133b789ec8aSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9134c27c18e8Smrg case "$finalize_rpath " in 9135c27c18e8Smrg *" $libdir "*) ;; 9136b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 9137c27c18e8Smrg esac 9138c27c18e8Smrg done 913948e5ce07Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9140c27c18e8Smrg dependency_libs="$temp_xrpath $dependency_libs" 9141c27c18e8Smrg fi 9142c27c18e8Smrg fi 9143c27c18e8Smrg 9144c27c18e8Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 914548e5ce07Smrg old_dlfiles=$dlfiles 9146c27c18e8Smrg dlfiles= 9147c27c18e8Smrg for lib in $old_dlfiles; do 9148c27c18e8Smrg case " $dlprefiles $dlfiles " in 9149c27c18e8Smrg *" $lib "*) ;; 9150b789ec8aSmrg *) func_append dlfiles " $lib" ;; 9151c27c18e8Smrg esac 9152c27c18e8Smrg done 9153c27c18e8Smrg 9154c27c18e8Smrg # Make sure dlprefiles contains only unique files 915548e5ce07Smrg old_dlprefiles=$dlprefiles 9156c27c18e8Smrg dlprefiles= 9157c27c18e8Smrg for lib in $old_dlprefiles; do 9158c27c18e8Smrg case "$dlprefiles " in 9159c27c18e8Smrg *" $lib "*) ;; 9160b789ec8aSmrg *) func_append dlprefiles " $lib" ;; 9161c27c18e8Smrg esac 9162c27c18e8Smrg done 9163c27c18e8Smrg 916448e5ce07Smrg if test yes = "$build_libtool_libs"; then 9165c27c18e8Smrg if test -n "$rpath"; then 9166c27c18e8Smrg case $host in 916737eb1ca1Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9168c27c18e8Smrg # these systems don't actually have a c library (as such)! 9169c27c18e8Smrg ;; 9170c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9171c27c18e8Smrg # Rhapsody C library is in the System framework 9172b789ec8aSmrg func_append deplibs " System.ltframework" 9173c27c18e8Smrg ;; 9174c27c18e8Smrg *-*-netbsd*) 9175c27c18e8Smrg # Don't link with libc until the a.out ld.so is fixed. 9176c27c18e8Smrg ;; 9177c27c18e8Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9178c27c18e8Smrg # Do not include libc due to us having libc/libc_r. 9179c27c18e8Smrg ;; 9180c27c18e8Smrg *-*-sco3.2v5* | *-*-sco5v6*) 9181c27c18e8Smrg # Causes problems with __ctype 9182c27c18e8Smrg ;; 9183c27c18e8Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9184c27c18e8Smrg # Compiler inserts libc in the correct place for threads to work 9185c27c18e8Smrg ;; 9186c27c18e8Smrg *) 9187c27c18e8Smrg # Add libc to deplibs on all other systems if necessary. 918848e5ce07Smrg if test yes = "$build_libtool_need_lc"; then 9189b789ec8aSmrg func_append deplibs " -lc" 9190c27c18e8Smrg fi 9191c27c18e8Smrg ;; 9192c27c18e8Smrg esac 9193c27c18e8Smrg fi 9194c27c18e8Smrg 9195c27c18e8Smrg # Transform deplibs into only deplibs that can be linked in shared. 9196c27c18e8Smrg name_save=$name 9197c27c18e8Smrg libname_save=$libname 9198c27c18e8Smrg release_save=$release 9199c27c18e8Smrg versuffix_save=$versuffix 9200c27c18e8Smrg major_save=$major 9201c27c18e8Smrg # I'm not sure if I'm treating the release correctly. I think 9202c27c18e8Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 9203c27c18e8Smrg # add it in twice. Is that correct? 920448e5ce07Smrg release= 920548e5ce07Smrg versuffix= 920648e5ce07Smrg major= 9207c27c18e8Smrg newdeplibs= 9208c27c18e8Smrg droppeddeps=no 9209c27c18e8Smrg case $deplibs_check_method in 9210c27c18e8Smrg pass_all) 9211c27c18e8Smrg # Don't check for shared/static. Everything works. 9212c27c18e8Smrg # This might be a little naive. We might want to check 9213c27c18e8Smrg # whether the library exists or not. But this is on 9214c27c18e8Smrg # osf3 & osf4 and I'm not really sure... Just 9215c27c18e8Smrg # implementing what was already the behavior. 9216c27c18e8Smrg newdeplibs=$deplibs 9217c27c18e8Smrg ;; 9218c27c18e8Smrg test_compile) 9219c27c18e8Smrg # This code stresses the "libraries are programs" paradigm to its 9220c27c18e8Smrg # limits. Maybe even breaks it. We compile a program, linking it 9221c27c18e8Smrg # against the deplibs as a proxy for the library. Then we can check 9222c27c18e8Smrg # whether they linked in statically or dynamically with ldd. 9223c27c18e8Smrg $opt_dry_run || $RM conftest.c 9224c27c18e8Smrg cat > conftest.c <<EOF 9225c27c18e8Smrg int main() { return 0; } 9226c27c18e8SmrgEOF 9227c27c18e8Smrg $opt_dry_run || $RM conftest 9228c27c18e8Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9229c27c18e8Smrg ldd_output=`ldd conftest` 9230c27c18e8Smrg for i in $deplibs; do 9231c27c18e8Smrg case $i in 9232c27c18e8Smrg -l*) 9233c27c18e8Smrg func_stripname -l '' "$i" 9234c27c18e8Smrg name=$func_stripname_result 923548e5ce07Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9236c27c18e8Smrg case " $predeps $postdeps " in 9237c27c18e8Smrg *" $i "*) 9238b789ec8aSmrg func_append newdeplibs " $i" 923948e5ce07Smrg i= 9240c27c18e8Smrg ;; 9241c27c18e8Smrg esac 9242c27c18e8Smrg fi 924348e5ce07Smrg if test -n "$i"; then 9244c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9245c27c18e8Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9246c27c18e8Smrg set dummy $deplib_matches; shift 9247c27c18e8Smrg deplib_match=$1 924848e5ce07Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9249b789ec8aSmrg func_append newdeplibs " $i" 9250c27c18e8Smrg else 9251c27c18e8Smrg droppeddeps=yes 925237eb1ca1Smrg echo 9253c27c18e8Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 925437eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 925537eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 925637eb1ca1Smrg echo "*** shared version of the library, which I believe you do not have" 925737eb1ca1Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 925837eb1ca1Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 9259c27c18e8Smrg fi 9260c27c18e8Smrg fi 9261c27c18e8Smrg ;; 9262c27c18e8Smrg *) 9263b789ec8aSmrg func_append newdeplibs " $i" 9264c27c18e8Smrg ;; 9265c27c18e8Smrg esac 9266c27c18e8Smrg done 9267c27c18e8Smrg else 9268c27c18e8Smrg # Error occurred in the first compile. Let's try to salvage 9269c27c18e8Smrg # the situation: Compile a separate program for each library. 9270c27c18e8Smrg for i in $deplibs; do 9271c27c18e8Smrg case $i in 9272c27c18e8Smrg -l*) 9273c27c18e8Smrg func_stripname -l '' "$i" 9274c27c18e8Smrg name=$func_stripname_result 9275c27c18e8Smrg $opt_dry_run || $RM conftest 9276c27c18e8Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9277c27c18e8Smrg ldd_output=`ldd conftest` 927848e5ce07Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9279c27c18e8Smrg case " $predeps $postdeps " in 9280c27c18e8Smrg *" $i "*) 9281b789ec8aSmrg func_append newdeplibs " $i" 928248e5ce07Smrg i= 9283c27c18e8Smrg ;; 9284c27c18e8Smrg esac 9285c27c18e8Smrg fi 928648e5ce07Smrg if test -n "$i"; then 9287c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9288c27c18e8Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9289c27c18e8Smrg set dummy $deplib_matches; shift 9290c27c18e8Smrg deplib_match=$1 929148e5ce07Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9292b789ec8aSmrg func_append newdeplibs " $i" 9293c27c18e8Smrg else 9294c27c18e8Smrg droppeddeps=yes 929537eb1ca1Smrg echo 9296c27c18e8Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 929737eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 929837eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 929937eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 930037eb1ca1Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 930137eb1ca1Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9302c27c18e8Smrg fi 9303c27c18e8Smrg fi 9304c27c18e8Smrg else 9305c27c18e8Smrg droppeddeps=yes 930637eb1ca1Smrg echo 9307c27c18e8Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 930837eb1ca1Smrg echo "*** make it link in! You will probably need to install it or some" 930937eb1ca1Smrg echo "*** library that it depends on before this library will be fully" 931037eb1ca1Smrg echo "*** functional. Installing it before continuing would be even better." 9311c27c18e8Smrg fi 9312c27c18e8Smrg ;; 9313c27c18e8Smrg *) 9314b789ec8aSmrg func_append newdeplibs " $i" 9315c27c18e8Smrg ;; 9316c27c18e8Smrg esac 9317c27c18e8Smrg done 9318c27c18e8Smrg fi 9319c27c18e8Smrg ;; 9320c27c18e8Smrg file_magic*) 9321c27c18e8Smrg set dummy $deplibs_check_method; shift 9322c27c18e8Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9323c27c18e8Smrg for a_deplib in $deplibs; do 9324c27c18e8Smrg case $a_deplib in 9325c27c18e8Smrg -l*) 9326c27c18e8Smrg func_stripname -l '' "$a_deplib" 9327c27c18e8Smrg name=$func_stripname_result 932848e5ce07Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9329c27c18e8Smrg case " $predeps $postdeps " in 9330c27c18e8Smrg *" $a_deplib "*) 9331b789ec8aSmrg func_append newdeplibs " $a_deplib" 933248e5ce07Smrg a_deplib= 9333c27c18e8Smrg ;; 9334c27c18e8Smrg esac 9335c27c18e8Smrg fi 933648e5ce07Smrg if test -n "$a_deplib"; then 9337c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9338b789ec8aSmrg if test -n "$file_magic_glob"; then 9339b789ec8aSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9340b789ec8aSmrg else 9341b789ec8aSmrg libnameglob=$libname 9342b789ec8aSmrg fi 934348e5ce07Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9344c27c18e8Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 934548e5ce07Smrg if test yes = "$want_nocaseglob"; then 9346b789ec8aSmrg shopt -s nocaseglob 9347b789ec8aSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9348b789ec8aSmrg $nocaseglob 9349b789ec8aSmrg else 9350b789ec8aSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9351b789ec8aSmrg fi 9352c27c18e8Smrg for potent_lib in $potential_libs; do 9353c27c18e8Smrg # Follow soft links. 9354c27c18e8Smrg if ls -lLd "$potent_lib" 2>/dev/null | 9355c27c18e8Smrg $GREP " -> " >/dev/null; then 9356c27c18e8Smrg continue 9357c27c18e8Smrg fi 9358c27c18e8Smrg # The statement above tries to avoid entering an 9359c27c18e8Smrg # endless loop below, in case of cyclic links. 9360c27c18e8Smrg # We might still enter an endless loop, since a link 9361c27c18e8Smrg # loop can be closed while we follow links, 9362c27c18e8Smrg # but so what? 936348e5ce07Smrg potlib=$potent_lib 9364c27c18e8Smrg while test -h "$potlib" 2>/dev/null; do 936548e5ce07Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9366c27c18e8Smrg case $potliblink in 936748e5ce07Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 936848e5ce07Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9369c27c18e8Smrg esac 9370c27c18e8Smrg done 9371c27c18e8Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9372c27c18e8Smrg $SED -e 10q | 9373c27c18e8Smrg $EGREP "$file_magic_regex" > /dev/null; then 9374b789ec8aSmrg func_append newdeplibs " $a_deplib" 937548e5ce07Smrg a_deplib= 9376c27c18e8Smrg break 2 9377c27c18e8Smrg fi 9378c27c18e8Smrg done 9379c27c18e8Smrg done 9380c27c18e8Smrg fi 938148e5ce07Smrg if test -n "$a_deplib"; then 9382c27c18e8Smrg droppeddeps=yes 938337eb1ca1Smrg echo 9384c27c18e8Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 938537eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 938637eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 938737eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 938837eb1ca1Smrg echo "*** because I did check the linker path looking for a file starting" 938948e5ce07Smrg if test -z "$potlib"; then 9390c27c18e8Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9391c27c18e8Smrg else 9392c27c18e8Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9393c27c18e8Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 9394c27c18e8Smrg fi 9395c27c18e8Smrg fi 9396c27c18e8Smrg ;; 9397c27c18e8Smrg *) 9398c27c18e8Smrg # Add a -L argument. 9399b789ec8aSmrg func_append newdeplibs " $a_deplib" 9400c27c18e8Smrg ;; 9401c27c18e8Smrg esac 9402c27c18e8Smrg done # Gone through all deplibs. 9403c27c18e8Smrg ;; 9404c27c18e8Smrg match_pattern*) 9405c27c18e8Smrg set dummy $deplibs_check_method; shift 9406c27c18e8Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9407c27c18e8Smrg for a_deplib in $deplibs; do 9408c27c18e8Smrg case $a_deplib in 9409c27c18e8Smrg -l*) 9410c27c18e8Smrg func_stripname -l '' "$a_deplib" 9411c27c18e8Smrg name=$func_stripname_result 941248e5ce07Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9413c27c18e8Smrg case " $predeps $postdeps " in 9414c27c18e8Smrg *" $a_deplib "*) 9415b789ec8aSmrg func_append newdeplibs " $a_deplib" 941648e5ce07Smrg a_deplib= 9417c27c18e8Smrg ;; 9418c27c18e8Smrg esac 9419c27c18e8Smrg fi 942048e5ce07Smrg if test -n "$a_deplib"; then 9421c27c18e8Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9422c27c18e8Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9423c27c18e8Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9424c27c18e8Smrg for potent_lib in $potential_libs; do 942548e5ce07Smrg potlib=$potent_lib # see symlink-check above in file_magic test 942637eb1ca1Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9427c27c18e8Smrg $EGREP "$match_pattern_regex" > /dev/null; then 9428b789ec8aSmrg func_append newdeplibs " $a_deplib" 942948e5ce07Smrg a_deplib= 9430c27c18e8Smrg break 2 9431c27c18e8Smrg fi 9432c27c18e8Smrg done 9433c27c18e8Smrg done 9434c27c18e8Smrg fi 943548e5ce07Smrg if test -n "$a_deplib"; then 9436c27c18e8Smrg droppeddeps=yes 943737eb1ca1Smrg echo 9438c27c18e8Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 943937eb1ca1Smrg echo "*** I have the capability to make that library automatically link in when" 944037eb1ca1Smrg echo "*** you link to this library. But I can only do this if you have a" 944137eb1ca1Smrg echo "*** shared version of the library, which you do not appear to have" 944237eb1ca1Smrg echo "*** because I did check the linker path looking for a file starting" 944348e5ce07Smrg if test -z "$potlib"; then 9444c27c18e8Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9445c27c18e8Smrg else 9446c27c18e8Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9447c27c18e8Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 9448c27c18e8Smrg fi 9449c27c18e8Smrg fi 9450c27c18e8Smrg ;; 9451c27c18e8Smrg *) 9452c27c18e8Smrg # Add a -L argument. 9453b789ec8aSmrg func_append newdeplibs " $a_deplib" 9454c27c18e8Smrg ;; 9455c27c18e8Smrg esac 9456c27c18e8Smrg done # Gone through all deplibs. 9457c27c18e8Smrg ;; 9458c27c18e8Smrg none | unknown | *) 945948e5ce07Smrg newdeplibs= 946037eb1ca1Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 946148e5ce07Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 946248e5ce07Smrg for i in $predeps $postdeps; do 9463c27c18e8Smrg # can't use Xsed below, because $i might contain '/' 946448e5ce07Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9465c27c18e8Smrg done 9466c27c18e8Smrg fi 946737eb1ca1Smrg case $tmp_deplibs in 946837eb1ca1Smrg *[!\ \ ]*) 946937eb1ca1Smrg echo 947048e5ce07Smrg if test none = "$deplibs_check_method"; then 947137eb1ca1Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 9472c27c18e8Smrg else 947337eb1ca1Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 9474c27c18e8Smrg fi 947537eb1ca1Smrg echo "*** All declared inter-library dependencies are being dropped." 9476c27c18e8Smrg droppeddeps=yes 947737eb1ca1Smrg ;; 947837eb1ca1Smrg esac 9479c27c18e8Smrg ;; 9480c27c18e8Smrg esac 9481c27c18e8Smrg versuffix=$versuffix_save 9482c27c18e8Smrg major=$major_save 9483c27c18e8Smrg release=$release_save 9484c27c18e8Smrg libname=$libname_save 9485c27c18e8Smrg name=$name_save 9486c27c18e8Smrg 9487c27c18e8Smrg case $host in 9488c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9489c27c18e8Smrg # On Rhapsody replace the C library with the System framework 949037eb1ca1Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9491c27c18e8Smrg ;; 9492c27c18e8Smrg esac 9493c27c18e8Smrg 949448e5ce07Smrg if test yes = "$droppeddeps"; then 949548e5ce07Smrg if test yes = "$module"; then 949637eb1ca1Smrg echo 949737eb1ca1Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 9498c27c18e8Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 949937eb1ca1Smrg echo "*** a static module, that should work as long as the dlopening" 950037eb1ca1Smrg echo "*** application is linked with the -dlopen flag." 9501c27c18e8Smrg if test -z "$global_symbol_pipe"; then 950237eb1ca1Smrg echo 950337eb1ca1Smrg echo "*** However, this would only work if libtool was able to extract symbol" 950448e5ce07Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 950537eb1ca1Smrg echo "*** not find such a program. So, this module is probably useless." 950648e5ce07Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 9507c27c18e8Smrg fi 950848e5ce07Smrg if test no = "$build_old_libs"; then 950948e5ce07Smrg oldlibs=$output_objdir/$libname.$libext 9510c27c18e8Smrg build_libtool_libs=module 9511c27c18e8Smrg build_old_libs=yes 9512c27c18e8Smrg else 9513c27c18e8Smrg build_libtool_libs=no 9514c27c18e8Smrg fi 9515c27c18e8Smrg else 951637eb1ca1Smrg echo "*** The inter-library dependencies that have been dropped here will be" 951737eb1ca1Smrg echo "*** automatically added whenever a program is linked with this library" 951837eb1ca1Smrg echo "*** or is declared to -dlopen it." 9519c27c18e8Smrg 952048e5ce07Smrg if test no = "$allow_undefined"; then 952137eb1ca1Smrg echo 952237eb1ca1Smrg echo "*** Since this library must not contain undefined symbols," 952337eb1ca1Smrg echo "*** because either the platform does not support them or" 952437eb1ca1Smrg echo "*** it was explicitly requested with -no-undefined," 952537eb1ca1Smrg echo "*** libtool will only create a static version of it." 952648e5ce07Smrg if test no = "$build_old_libs"; then 952748e5ce07Smrg oldlibs=$output_objdir/$libname.$libext 9528c27c18e8Smrg build_libtool_libs=module 9529c27c18e8Smrg build_old_libs=yes 9530c27c18e8Smrg else 9531c27c18e8Smrg build_libtool_libs=no 9532c27c18e8Smrg fi 9533c27c18e8Smrg fi 9534c27c18e8Smrg fi 9535c27c18e8Smrg fi 9536c27c18e8Smrg # Done checking deplibs! 9537c27c18e8Smrg deplibs=$newdeplibs 9538c27c18e8Smrg fi 9539c27c18e8Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9540c27c18e8Smrg case $host in 9541c27c18e8Smrg *-*-darwin*) 954237eb1ca1Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 954337eb1ca1Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 954437eb1ca1Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9545c27c18e8Smrg ;; 9546c27c18e8Smrg esac 9547c27c18e8Smrg 9548c27c18e8Smrg # move library search paths that coincide with paths to not yet 9549c27c18e8Smrg # installed libraries to the beginning of the library search list 9550c27c18e8Smrg new_libs= 9551c27c18e8Smrg for path in $notinst_path; do 9552c27c18e8Smrg case " $new_libs " in 9553c27c18e8Smrg *" -L$path/$objdir "*) ;; 9554c27c18e8Smrg *) 9555c27c18e8Smrg case " $deplibs " in 9556c27c18e8Smrg *" -L$path/$objdir "*) 9557b789ec8aSmrg func_append new_libs " -L$path/$objdir" ;; 9558c27c18e8Smrg esac 9559c27c18e8Smrg ;; 9560c27c18e8Smrg esac 9561c27c18e8Smrg done 9562c27c18e8Smrg for deplib in $deplibs; do 9563c27c18e8Smrg case $deplib in 9564c27c18e8Smrg -L*) 9565c27c18e8Smrg case " $new_libs " in 9566c27c18e8Smrg *" $deplib "*) ;; 9567b789ec8aSmrg *) func_append new_libs " $deplib" ;; 9568c27c18e8Smrg esac 9569c27c18e8Smrg ;; 9570b789ec8aSmrg *) func_append new_libs " $deplib" ;; 9571c27c18e8Smrg esac 9572c27c18e8Smrg done 957348e5ce07Smrg deplibs=$new_libs 9574c27c18e8Smrg 9575c27c18e8Smrg # All the library-specific variables (install_libdir is set above). 9576c27c18e8Smrg library_names= 9577c27c18e8Smrg old_library= 9578c27c18e8Smrg dlname= 9579c27c18e8Smrg 9580c27c18e8Smrg # Test again, we may have decided not to build it any more 958148e5ce07Smrg if test yes = "$build_libtool_libs"; then 958248e5ce07Smrg # Remove $wl instances when linking with ld. 9583f1ee322dSmrg # FIXME: should test the right _cmds variable. 9584f1ee322dSmrg case $archive_cmds in 9585f1ee322dSmrg *\$LD\ *) wl= ;; 9586f1ee322dSmrg esac 958748e5ce07Smrg if test yes = "$hardcode_into_libs"; then 9588c27c18e8Smrg # Hardcode the library paths 9589c27c18e8Smrg hardcode_libdirs= 9590c27c18e8Smrg dep_rpath= 959148e5ce07Smrg rpath=$finalize_rpath 959248e5ce07Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9593c27c18e8Smrg for libdir in $rpath; do 9594c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 9595c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 9596b789ec8aSmrg func_replace_sysroot "$libdir" 9597b789ec8aSmrg libdir=$func_replace_sysroot_result 9598c27c18e8Smrg if test -z "$hardcode_libdirs"; then 959948e5ce07Smrg hardcode_libdirs=$libdir 9600c27c18e8Smrg else 9601c27c18e8Smrg # Just accumulate the unique libdirs. 9602c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9603c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9604c27c18e8Smrg ;; 9605c27c18e8Smrg *) 9606b789ec8aSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9607c27c18e8Smrg ;; 9608c27c18e8Smrg esac 9609c27c18e8Smrg fi 9610c27c18e8Smrg else 9611c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 9612b789ec8aSmrg func_append dep_rpath " $flag" 9613c27c18e8Smrg fi 9614c27c18e8Smrg elif test -n "$runpath_var"; then 9615c27c18e8Smrg case "$perm_rpath " in 9616c27c18e8Smrg *" $libdir "*) ;; 9617f1ee322dSmrg *) func_append perm_rpath " $libdir" ;; 9618c27c18e8Smrg esac 9619c27c18e8Smrg fi 9620c27c18e8Smrg done 9621c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 9622c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 9623c27c18e8Smrg test -n "$hardcode_libdirs"; then 962448e5ce07Smrg libdir=$hardcode_libdirs 9625f1ee322dSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9626c27c18e8Smrg fi 9627c27c18e8Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9628c27c18e8Smrg # We should set the runpath_var. 9629c27c18e8Smrg rpath= 9630c27c18e8Smrg for dir in $perm_rpath; do 9631b789ec8aSmrg func_append rpath "$dir:" 9632c27c18e8Smrg done 9633c27c18e8Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9634c27c18e8Smrg fi 9635c27c18e8Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9636c27c18e8Smrg fi 9637c43cc173Smrg 963848e5ce07Smrg shlibpath=$finalize_shlibpath 963948e5ce07Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9640c27c18e8Smrg if test -n "$shlibpath"; then 9641c27c18e8Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9642c27c18e8Smrg fi 9643c43cc173Smrg 9644c27c18e8Smrg # Get the real and link names of the library. 9645c27c18e8Smrg eval shared_ext=\"$shrext_cmds\" 9646c27c18e8Smrg eval library_names=\"$library_names_spec\" 9647c27c18e8Smrg set dummy $library_names 9648c27c18e8Smrg shift 964948e5ce07Smrg realname=$1 9650c27c18e8Smrg shift 9651c43cc173Smrg 9652c27c18e8Smrg if test -n "$soname_spec"; then 9653c27c18e8Smrg eval soname=\"$soname_spec\" 9654c27c18e8Smrg else 965548e5ce07Smrg soname=$realname 9656c27c18e8Smrg fi 9657c27c18e8Smrg if test -z "$dlname"; then 9658c27c18e8Smrg dlname=$soname 9659c27c18e8Smrg fi 9660c43cc173Smrg 966148e5ce07Smrg lib=$output_objdir/$realname 9662c27c18e8Smrg linknames= 9663c27c18e8Smrg for link 9664c27c18e8Smrg do 9665b789ec8aSmrg func_append linknames " $link" 9666c27c18e8Smrg done 9667c43cc173Smrg 9668c27c18e8Smrg # Use standard objects if they are pic 966937eb1ca1Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9670c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 9671c43cc173Smrg 9672c27c18e8Smrg delfiles= 9673c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9674c27c18e8Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 967548e5ce07Smrg export_symbols=$output_objdir/$libname.uexp 9676b789ec8aSmrg func_append delfiles " $export_symbols" 9677c27c18e8Smrg fi 9678c43cc173Smrg 9679c27c18e8Smrg orig_export_symbols= 9680c27c18e8Smrg case $host_os in 9681c27c18e8Smrg cygwin* | mingw* | cegcc*) 9682c27c18e8Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9683c27c18e8Smrg # exporting using user supplied symfile 968448e5ce07Smrg func_dll_def_p "$export_symbols" || { 9685c27c18e8Smrg # and it's NOT already a .def file. Must figure out 9686c27c18e8Smrg # which of the given symbols are data symbols and tag 9687c27c18e8Smrg # them as such. So, trigger use of export_symbols_cmds. 9688c27c18e8Smrg # export_symbols gets reassigned inside the "prepare 9689c27c18e8Smrg # the list of exported symbols" if statement, so the 9690c27c18e8Smrg # include_expsyms logic still works. 969148e5ce07Smrg orig_export_symbols=$export_symbols 9692c27c18e8Smrg export_symbols= 9693c27c18e8Smrg always_export_symbols=yes 969448e5ce07Smrg } 9695c27c18e8Smrg fi 9696c27c18e8Smrg ;; 9697c27c18e8Smrg esac 9698c43cc173Smrg 9699c27c18e8Smrg # Prepare the list of exported symbols 9700c27c18e8Smrg if test -z "$export_symbols"; then 970148e5ce07Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 970248e5ce07Smrg func_verbose "generating symbol list for '$libname.la'" 970348e5ce07Smrg export_symbols=$output_objdir/$libname.exp 9704c27c18e8Smrg $opt_dry_run || $RM $export_symbols 9705c27c18e8Smrg cmds=$export_symbols_cmds 970648e5ce07Smrg save_ifs=$IFS; IFS='~' 9707b789ec8aSmrg for cmd1 in $cmds; do 970848e5ce07Smrg IFS=$save_ifs 9709b789ec8aSmrg # Take the normal branch if the nm_file_list_spec branch 9710b789ec8aSmrg # doesn't work or if tool conversion is not needed. 9711b789ec8aSmrg case $nm_file_list_spec~$to_tool_file_cmd in 9712b789ec8aSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9713b789ec8aSmrg try_normal_branch=yes 9714b789ec8aSmrg eval cmd=\"$cmd1\" 9715b789ec8aSmrg func_len " $cmd" 9716b789ec8aSmrg len=$func_len_result 9717b789ec8aSmrg ;; 9718b789ec8aSmrg *) 9719b789ec8aSmrg try_normal_branch=no 9720b789ec8aSmrg ;; 9721b789ec8aSmrg esac 972248e5ce07Smrg if test yes = "$try_normal_branch" \ 9723b789ec8aSmrg && { test "$len" -lt "$max_cmd_len" \ 9724b789ec8aSmrg || test "$max_cmd_len" -le -1; } 9725b789ec8aSmrg then 9726b789ec8aSmrg func_show_eval "$cmd" 'exit $?' 9727b789ec8aSmrg skipped_export=false 9728b789ec8aSmrg elif test -n "$nm_file_list_spec"; then 9729b789ec8aSmrg func_basename "$output" 9730b789ec8aSmrg output_la=$func_basename_result 9731b789ec8aSmrg save_libobjs=$libobjs 9732b789ec8aSmrg save_output=$output 973348e5ce07Smrg output=$output_objdir/$output_la.nm 9734b789ec8aSmrg func_to_tool_file "$output" 9735b789ec8aSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 9736b789ec8aSmrg func_append delfiles " $output" 9737b789ec8aSmrg func_verbose "creating $NM input file list: $output" 9738b789ec8aSmrg for obj in $save_libobjs; do 9739b789ec8aSmrg func_to_tool_file "$obj" 9740b789ec8aSmrg $ECHO "$func_to_tool_file_result" 9741b789ec8aSmrg done > "$output" 9742b789ec8aSmrg eval cmd=\"$cmd1\" 9743c27c18e8Smrg func_show_eval "$cmd" 'exit $?' 9744b789ec8aSmrg output=$save_output 9745b789ec8aSmrg libobjs=$save_libobjs 9746c27c18e8Smrg skipped_export=false 9747c27c18e8Smrg else 9748c27c18e8Smrg # The command line is too long to execute in one step. 9749c27c18e8Smrg func_verbose "using reloadable object file for export list..." 9750c27c18e8Smrg skipped_export=: 9751c27c18e8Smrg # Break out early, otherwise skipped_export may be 9752c27c18e8Smrg # set to false by a later but shorter cmd. 9753c27c18e8Smrg break 9754c27c18e8Smrg fi 9755c27c18e8Smrg done 975648e5ce07Smrg IFS=$save_ifs 975748e5ce07Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9758c27c18e8Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9759c27c18e8Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9760c27c18e8Smrg fi 9761c27c18e8Smrg fi 9762c27c18e8Smrg fi 9763c43cc173Smrg 9764c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 976548e5ce07Smrg tmp_export_symbols=$export_symbols 976648e5ce07Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 976737eb1ca1Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9768c27c18e8Smrg fi 9769c43cc173Smrg 977048e5ce07Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9771c27c18e8Smrg # The given exports_symbols file has to be filtered, so filter it. 977248e5ce07Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9773c27c18e8Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 977448e5ce07Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 9775c27c18e8Smrg # though. Also, the filter scales superlinearly with the number of 9776c27c18e8Smrg # global variables. join(1) would be nice here, but unfortunately 9777c27c18e8Smrg # isn't a blessed tool. 9778c27c18e8Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9779b789ec8aSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9780c27c18e8Smrg export_symbols=$output_objdir/$libname.def 9781c27c18e8Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9782c43cc173Smrg fi 9783c43cc173Smrg 9784c27c18e8Smrg tmp_deplibs= 9785c27c18e8Smrg for test_deplib in $deplibs; do 9786c27c18e8Smrg case " $convenience " in 9787c27c18e8Smrg *" $test_deplib "*) ;; 9788c27c18e8Smrg *) 9789b789ec8aSmrg func_append tmp_deplibs " $test_deplib" 9790c27c18e8Smrg ;; 9791c27c18e8Smrg esac 9792c27c18e8Smrg done 979348e5ce07Smrg deplibs=$tmp_deplibs 9794c43cc173Smrg 9795c27c18e8Smrg if test -n "$convenience"; then 9796c27c18e8Smrg if test -n "$whole_archive_flag_spec" && 979748e5ce07Smrg test yes = "$compiler_needs_object" && 9798c27c18e8Smrg test -z "$libobjs"; then 9799c27c18e8Smrg # extract the archives, so we have objects to list. 9800c27c18e8Smrg # TODO: could optimize this to just extract one archive. 9801c27c18e8Smrg whole_archive_flag_spec= 9802c27c18e8Smrg fi 9803c27c18e8Smrg if test -n "$whole_archive_flag_spec"; then 9804c27c18e8Smrg save_libobjs=$libobjs 9805c27c18e8Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9806c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 9807c27c18e8Smrg else 980848e5ce07Smrg gentop=$output_objdir/${outputname}x 9809b789ec8aSmrg func_append generated " $gentop" 9810c43cc173Smrg 9811c27c18e8Smrg func_extract_archives $gentop $convenience 9812b789ec8aSmrg func_append libobjs " $func_extract_archives_result" 9813c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 9814c27c18e8Smrg fi 9815c27c18e8Smrg fi 9816c43cc173Smrg 981748e5ce07Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9818c27c18e8Smrg eval flag=\"$thread_safe_flag_spec\" 9819b789ec8aSmrg func_append linker_flags " $flag" 9820c27c18e8Smrg fi 9821c43cc173Smrg 9822c27c18e8Smrg # Make a backup of the uninstalled library when relinking 982348e5ce07Smrg if test relink = "$opt_mode"; then 9824c27c18e8Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9825c43cc173Smrg fi 9826c43cc173Smrg 9827c27c18e8Smrg # Do each of the archive commands. 982848e5ce07Smrg if test yes = "$module" && test -n "$module_cmds"; then 9829c27c18e8Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9830c27c18e8Smrg eval test_cmds=\"$module_expsym_cmds\" 9831c27c18e8Smrg cmds=$module_expsym_cmds 9832c27c18e8Smrg else 9833c27c18e8Smrg eval test_cmds=\"$module_cmds\" 9834c27c18e8Smrg cmds=$module_cmds 9835c27c18e8Smrg fi 9836c27c18e8Smrg else 9837c27c18e8Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 9838c27c18e8Smrg eval test_cmds=\"$archive_expsym_cmds\" 9839c27c18e8Smrg cmds=$archive_expsym_cmds 9840c27c18e8Smrg else 9841c27c18e8Smrg eval test_cmds=\"$archive_cmds\" 9842c27c18e8Smrg cmds=$archive_cmds 9843c27c18e8Smrg fi 9844c43cc173Smrg fi 9845c43cc173Smrg 984648e5ce07Smrg if test : != "$skipped_export" && 9847c27c18e8Smrg func_len " $test_cmds" && 9848c27c18e8Smrg len=$func_len_result && 9849c27c18e8Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9850c27c18e8Smrg : 9851c27c18e8Smrg else 9852c27c18e8Smrg # The command line is too long to link in one step, link piecewise 9853c27c18e8Smrg # or, if using GNU ld and skipped_export is not :, use a linker 9854c27c18e8Smrg # script. 9855c43cc173Smrg 9856c27c18e8Smrg # Save the value of $output and $libobjs because we want to 9857c27c18e8Smrg # use them later. If we have whole_archive_flag_spec, we 9858c27c18e8Smrg # want to use save_libobjs as it was before 9859c27c18e8Smrg # whole_archive_flag_spec was expanded, because we can't 9860c27c18e8Smrg # assume the linker understands whole_archive_flag_spec. 9861c27c18e8Smrg # This may have to be revisited, in case too many 9862c27c18e8Smrg # convenience libraries get linked in and end up exceeding 9863c27c18e8Smrg # the spec. 9864c27c18e8Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 9865c27c18e8Smrg save_libobjs=$libobjs 9866c27c18e8Smrg fi 9867c27c18e8Smrg save_output=$output 986837eb1ca1Smrg func_basename "$output" 986937eb1ca1Smrg output_la=$func_basename_result 9870c43cc173Smrg 9871c27c18e8Smrg # Clear the reloadable object creation command queue and 9872c27c18e8Smrg # initialize k to one. 9873c27c18e8Smrg test_cmds= 9874c27c18e8Smrg concat_cmds= 9875c27c18e8Smrg objlist= 9876c27c18e8Smrg last_robj= 9877c27c18e8Smrg k=1 9878c43cc173Smrg 987948e5ce07Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 988048e5ce07Smrg output=$output_objdir/$output_la.lnkscript 9881c27c18e8Smrg func_verbose "creating GNU ld script: $output" 988237eb1ca1Smrg echo 'INPUT (' > $output 9883c27c18e8Smrg for obj in $save_libobjs 9884c27c18e8Smrg do 9885b789ec8aSmrg func_to_tool_file "$obj" 9886b789ec8aSmrg $ECHO "$func_to_tool_file_result" >> $output 9887c27c18e8Smrg done 988837eb1ca1Smrg echo ')' >> $output 9889b789ec8aSmrg func_append delfiles " $output" 9890b789ec8aSmrg func_to_tool_file "$output" 9891b789ec8aSmrg output=$func_to_tool_file_result 989248e5ce07Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 989348e5ce07Smrg output=$output_objdir/$output_la.lnk 9894c27c18e8Smrg func_verbose "creating linker input file list: $output" 9895c27c18e8Smrg : > $output 9896c27c18e8Smrg set x $save_libobjs 9897c27c18e8Smrg shift 9898c27c18e8Smrg firstobj= 989948e5ce07Smrg if test yes = "$compiler_needs_object"; then 9900c27c18e8Smrg firstobj="$1 " 9901c27c18e8Smrg shift 9902c27c18e8Smrg fi 9903c27c18e8Smrg for obj 9904c27c18e8Smrg do 9905b789ec8aSmrg func_to_tool_file "$obj" 9906b789ec8aSmrg $ECHO "$func_to_tool_file_result" >> $output 9907c27c18e8Smrg done 9908b789ec8aSmrg func_append delfiles " $output" 9909b789ec8aSmrg func_to_tool_file "$output" 9910b789ec8aSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 9911c27c18e8Smrg else 9912c27c18e8Smrg if test -n "$save_libobjs"; then 9913c27c18e8Smrg func_verbose "creating reloadable object files..." 991448e5ce07Smrg output=$output_objdir/$output_la-$k.$objext 9915c27c18e8Smrg eval test_cmds=\"$reload_cmds\" 9916c27c18e8Smrg func_len " $test_cmds" 9917c27c18e8Smrg len0=$func_len_result 9918c27c18e8Smrg len=$len0 9919c27c18e8Smrg 9920c27c18e8Smrg # Loop over the list of objects to be linked. 9921c27c18e8Smrg for obj in $save_libobjs 9922c27c18e8Smrg do 9923c27c18e8Smrg func_len " $obj" 9924c27c18e8Smrg func_arith $len + $func_len_result 9925c27c18e8Smrg len=$func_arith_result 992648e5ce07Smrg if test -z "$objlist" || 9927c27c18e8Smrg test "$len" -lt "$max_cmd_len"; then 9928c27c18e8Smrg func_append objlist " $obj" 9929c27c18e8Smrg else 9930c27c18e8Smrg # The command $test_cmds is almost too long, add a 9931c27c18e8Smrg # command to the queue. 993248e5ce07Smrg if test 1 -eq "$k"; then 9933c27c18e8Smrg # The first file doesn't have a previous command to add. 993437eb1ca1Smrg reload_objs=$objlist 993537eb1ca1Smrg eval concat_cmds=\"$reload_cmds\" 9936c27c18e8Smrg else 9937c27c18e8Smrg # All subsequent reloadable object files will link in 9938c27c18e8Smrg # the last one created. 993937eb1ca1Smrg reload_objs="$objlist $last_robj" 994037eb1ca1Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 9941c27c18e8Smrg fi 994248e5ce07Smrg last_robj=$output_objdir/$output_la-$k.$objext 9943c27c18e8Smrg func_arith $k + 1 9944c27c18e8Smrg k=$func_arith_result 994548e5ce07Smrg output=$output_objdir/$output_la-$k.$objext 994637eb1ca1Smrg objlist=" $obj" 9947c27c18e8Smrg func_len " $last_robj" 9948c27c18e8Smrg func_arith $len0 + $func_len_result 9949c27c18e8Smrg len=$func_arith_result 9950c27c18e8Smrg fi 9951c27c18e8Smrg done 9952c27c18e8Smrg # Handle the remaining objects by creating one last 9953c27c18e8Smrg # reloadable object file. All subsequent reloadable object 9954c27c18e8Smrg # files will link in the last one created. 9955c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 995637eb1ca1Smrg reload_objs="$objlist $last_robj" 995748e5ce07Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 9958c27c18e8Smrg if test -n "$last_robj"; then 995948e5ce07Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9960c27c18e8Smrg fi 9961b789ec8aSmrg func_append delfiles " $output" 9962c43cc173Smrg 9963c27c18e8Smrg else 9964c27c18e8Smrg output= 9965c27c18e8Smrg fi 9966c27c18e8Smrg 996748e5ce07Smrg ${skipped_export-false} && { 996848e5ce07Smrg func_verbose "generating symbol list for '$libname.la'" 996948e5ce07Smrg export_symbols=$output_objdir/$libname.exp 9970c27c18e8Smrg $opt_dry_run || $RM $export_symbols 9971c27c18e8Smrg libobjs=$output 9972c27c18e8Smrg # Append the command to create the export file. 9973c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9974c27c18e8Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 9975c27c18e8Smrg if test -n "$last_robj"; then 9976c27c18e8Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9977c27c18e8Smrg fi 997848e5ce07Smrg } 9979c43cc173Smrg 9980c27c18e8Smrg test -n "$save_libobjs" && 9981c27c18e8Smrg func_verbose "creating a temporary reloadable object file: $output" 9982c43cc173Smrg 9983c27c18e8Smrg # Loop through the commands generated above and execute them. 998448e5ce07Smrg save_ifs=$IFS; IFS='~' 9985c27c18e8Smrg for cmd in $concat_cmds; do 998648e5ce07Smrg IFS=$save_ifs 998748e5ce07Smrg $opt_quiet || { 9988c27c18e8Smrg func_quote_for_expand "$cmd" 9989c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 9990c27c18e8Smrg } 9991c27c18e8Smrg $opt_dry_run || eval "$cmd" || { 9992c27c18e8Smrg lt_exit=$? 9993c27c18e8Smrg 9994c27c18e8Smrg # Restore the uninstalled library and exit 999548e5ce07Smrg if test relink = "$opt_mode"; then 9996c27c18e8Smrg ( cd "$output_objdir" && \ 9997c27c18e8Smrg $RM "${realname}T" && \ 9998c27c18e8Smrg $MV "${realname}U" "$realname" ) 9999c27c18e8Smrg fi 10000c43cc173Smrg 10001c27c18e8Smrg exit $lt_exit 10002c27c18e8Smrg } 10003c27c18e8Smrg done 1000448e5ce07Smrg IFS=$save_ifs 10005c43cc173Smrg 10006c27c18e8Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10007c27c18e8Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10008c27c18e8Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10009c43cc173Smrg fi 10010c43cc173Smrg fi 10011c43cc173Smrg 1001248e5ce07Smrg ${skipped_export-false} && { 10013c27c18e8Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 1001448e5ce07Smrg tmp_export_symbols=$export_symbols 1001548e5ce07Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 1001637eb1ca1Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10017c27c18e8Smrg fi 10018c43cc173Smrg 10019c27c18e8Smrg if test -n "$orig_export_symbols"; then 10020c27c18e8Smrg # The given exports_symbols file has to be filtered, so filter it. 1002148e5ce07Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10022c27c18e8Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 1002348e5ce07Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 10024c27c18e8Smrg # though. Also, the filter scales superlinearly with the number of 10025c27c18e8Smrg # global variables. join(1) would be nice here, but unfortunately 10026c27c18e8Smrg # isn't a blessed tool. 10027c27c18e8Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10028b789ec8aSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10029c27c18e8Smrg export_symbols=$output_objdir/$libname.def 10030c27c18e8Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10031c27c18e8Smrg fi 1003248e5ce07Smrg } 10033c43cc173Smrg 10034c27c18e8Smrg libobjs=$output 10035c27c18e8Smrg # Restore the value of output. 10036c27c18e8Smrg output=$save_output 10037c43cc173Smrg 10038c27c18e8Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10039c27c18e8Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10040c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 10041c27c18e8Smrg fi 10042c27c18e8Smrg # Expand the library linking commands again to reset the 10043c27c18e8Smrg # value of $libobjs for piecewise linking. 10044c27c18e8Smrg 10045c27c18e8Smrg # Do each of the archive commands. 1004648e5ce07Smrg if test yes = "$module" && test -n "$module_cmds"; then 10047c27c18e8Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10048c27c18e8Smrg cmds=$module_expsym_cmds 10049c43cc173Smrg else 10050c27c18e8Smrg cmds=$module_cmds 10051c43cc173Smrg fi 10052c43cc173Smrg else 10053c27c18e8Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10054c27c18e8Smrg cmds=$archive_expsym_cmds 10055c27c18e8Smrg else 10056c27c18e8Smrg cmds=$archive_cmds 10057c27c18e8Smrg fi 10058c43cc173Smrg fi 10059c43cc173Smrg fi 10060c43cc173Smrg 10061c27c18e8Smrg if test -n "$delfiles"; then 10062c27c18e8Smrg # Append the command to remove temporary files to $cmds. 10063c27c18e8Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 10064c27c18e8Smrg fi 10065c43cc173Smrg 10066c27c18e8Smrg # Add any objects from preloaded convenience libraries 10067c27c18e8Smrg if test -n "$dlprefiles"; then 1006848e5ce07Smrg gentop=$output_objdir/${outputname}x 10069b789ec8aSmrg func_append generated " $gentop" 10070c43cc173Smrg 10071c27c18e8Smrg func_extract_archives $gentop $dlprefiles 10072b789ec8aSmrg func_append libobjs " $func_extract_archives_result" 10073c27c18e8Smrg test "X$libobjs" = "X " && libobjs= 10074c43cc173Smrg fi 10075c43cc173Smrg 1007648e5ce07Smrg save_ifs=$IFS; IFS='~' 10077c27c18e8Smrg for cmd in $cmds; do 1007848e5ce07Smrg IFS=$sp$nl 10079c27c18e8Smrg eval cmd=\"$cmd\" 1008048e5ce07Smrg IFS=$save_ifs 1008148e5ce07Smrg $opt_quiet || { 10082c27c18e8Smrg func_quote_for_expand "$cmd" 10083c27c18e8Smrg eval "func_echo $func_quote_for_expand_result" 10084c27c18e8Smrg } 10085c27c18e8Smrg $opt_dry_run || eval "$cmd" || { 10086c27c18e8Smrg lt_exit=$? 10087c43cc173Smrg 10088c27c18e8Smrg # Restore the uninstalled library and exit 1008948e5ce07Smrg if test relink = "$opt_mode"; then 10090c27c18e8Smrg ( cd "$output_objdir" && \ 10091c27c18e8Smrg $RM "${realname}T" && \ 10092c27c18e8Smrg $MV "${realname}U" "$realname" ) 10093c43cc173Smrg fi 10094c43cc173Smrg 10095c27c18e8Smrg exit $lt_exit 10096c27c18e8Smrg } 10097c27c18e8Smrg done 1009848e5ce07Smrg IFS=$save_ifs 10099c43cc173Smrg 10100c27c18e8Smrg # Restore the uninstalled library and exit 1010148e5ce07Smrg if test relink = "$opt_mode"; then 10102c27c18e8Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10103c43cc173Smrg 10104c27c18e8Smrg if test -n "$convenience"; then 10105c27c18e8Smrg if test -z "$whole_archive_flag_spec"; then 10106c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 10107c27c18e8Smrg fi 10108c27c18e8Smrg fi 10109c43cc173Smrg 10110c27c18e8Smrg exit $EXIT_SUCCESS 10111c27c18e8Smrg fi 10112c43cc173Smrg 10113c27c18e8Smrg # Create links to the real library. 10114c27c18e8Smrg for linkname in $linknames; do 10115c27c18e8Smrg if test "$realname" != "$linkname"; then 10116c27c18e8Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10117c43cc173Smrg fi 10118c43cc173Smrg done 10119c43cc173Smrg 10120c27c18e8Smrg # If -module or -export-dynamic was specified, set the dlname. 1012148e5ce07Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 10122c27c18e8Smrg # On all known operating systems, these are identical. 1012348e5ce07Smrg dlname=$soname 10124c27c18e8Smrg fi 10125c27c18e8Smrg fi 10126c43cc173Smrg ;; 10127c43cc173Smrg 10128c27c18e8Smrg obj) 1012948e5ce07Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 1013048e5ce07Smrg func_warning "'-dlopen' is ignored for objects" 10131c27c18e8Smrg fi 10132c43cc173Smrg 10133c27c18e8Smrg case " $deplibs" in 10134c27c18e8Smrg *\ -l* | *\ -L*) 1013548e5ce07Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 10136c43cc173Smrg esac 10137c43cc173Smrg 10138c27c18e8Smrg test -n "$rpath" && \ 1013948e5ce07Smrg func_warning "'-rpath' is ignored for objects" 10140c43cc173Smrg 10141c27c18e8Smrg test -n "$xrpath" && \ 1014248e5ce07Smrg func_warning "'-R' is ignored for objects" 10143c43cc173Smrg 10144c27c18e8Smrg test -n "$vinfo" && \ 1014548e5ce07Smrg func_warning "'-version-info' is ignored for objects" 10146c27c18e8Smrg 10147c27c18e8Smrg test -n "$release" && \ 1014848e5ce07Smrg func_warning "'-release' is ignored for objects" 10149c27c18e8Smrg 10150c27c18e8Smrg case $output in 10151c27c18e8Smrg *.lo) 10152c27c18e8Smrg test -n "$objs$old_deplibs" && \ 1015348e5ce07Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10154c27c18e8Smrg 10155c27c18e8Smrg libobj=$output 10156c27c18e8Smrg func_lo2o "$libobj" 10157c27c18e8Smrg obj=$func_lo2o_result 10158c43cc173Smrg ;; 10159c43cc173Smrg *) 10160c27c18e8Smrg libobj= 1016148e5ce07Smrg obj=$output 10162c43cc173Smrg ;; 10163c43cc173Smrg esac 10164c43cc173Smrg 10165c27c18e8Smrg # Delete the old objects. 10166c27c18e8Smrg $opt_dry_run || $RM $obj $libobj 10167c43cc173Smrg 10168c27c18e8Smrg # Objects from convenience libraries. This assumes 10169c27c18e8Smrg # single-version convenience libraries. Whenever we create 10170c27c18e8Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 10171c27c18e8Smrg # the extraction. 10172c27c18e8Smrg reload_conv_objs= 10173c27c18e8Smrg gentop= 1017448e5ce07Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 1017548e5ce07Smrg # whole_archive_flag_spec and hope we can get by with turning comma 1017648e5ce07Smrg # into space. 1017748e5ce07Smrg case $reload_cmds in 1017848e5ce07Smrg *\$LD[\ \$]*) wl= ;; 1017948e5ce07Smrg esac 10180c27c18e8Smrg if test -n "$convenience"; then 10181c27c18e8Smrg if test -n "$whole_archive_flag_spec"; then 10182c27c18e8Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 1018348e5ce07Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 1018448e5ce07Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10185c27c18e8Smrg else 1018648e5ce07Smrg gentop=$output_objdir/${obj}x 10187b789ec8aSmrg func_append generated " $gentop" 10188c43cc173Smrg 10189c27c18e8Smrg func_extract_archives $gentop $convenience 10190c27c18e8Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10191c27c18e8Smrg fi 10192c43cc173Smrg fi 10193c43cc173Smrg 10194b789ec8aSmrg # If we're not building shared, we need to use non_pic_objs 1019548e5ce07Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10196b789ec8aSmrg 10197c27c18e8Smrg # Create the old-style object. 1019848e5ce07Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10199c43cc173Smrg 1020048e5ce07Smrg output=$obj 10201c27c18e8Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10202c43cc173Smrg 10203c27c18e8Smrg # Exit if we aren't doing a library object file. 10204c27c18e8Smrg if test -z "$libobj"; then 10205c27c18e8Smrg if test -n "$gentop"; then 10206c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 10207c27c18e8Smrg fi 10208c27c18e8Smrg 10209c27c18e8Smrg exit $EXIT_SUCCESS 10210c43cc173Smrg fi 10211c27c18e8Smrg 1021248e5ce07Smrg test yes = "$build_libtool_libs" || { 10213c27c18e8Smrg if test -n "$gentop"; then 10214c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 10215c27c18e8Smrg fi 10216c27c18e8Smrg 10217c27c18e8Smrg # Create an invalid libtool object if no PIC, so that we don't 10218c27c18e8Smrg # accidentally link it into a program. 10219c27c18e8Smrg # $show "echo timestamp > $libobj" 10220c27c18e8Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10221c27c18e8Smrg exit $EXIT_SUCCESS 1022248e5ce07Smrg } 10223c27c18e8Smrg 1022448e5ce07Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10225c27c18e8Smrg # Only do commands if we really have different PIC objects. 10226c27c18e8Smrg reload_objs="$libobjs $reload_conv_objs" 1022748e5ce07Smrg output=$libobj 10228c27c18e8Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10229c27c18e8Smrg fi 10230c27c18e8Smrg 10231c27c18e8Smrg if test -n "$gentop"; then 10232c27c18e8Smrg func_show_eval '${RM}r "$gentop"' 10233c27c18e8Smrg fi 10234c27c18e8Smrg 10235c27c18e8Smrg exit $EXIT_SUCCESS 10236c43cc173Smrg ;; 10237c43cc173Smrg 10238c27c18e8Smrg prog) 10239c27c18e8Smrg case $host in 10240c27c18e8Smrg *cygwin*) func_stripname '' '.exe' "$output" 10241c27c18e8Smrg output=$func_stripname_result.exe;; 10242c27c18e8Smrg esac 10243c27c18e8Smrg test -n "$vinfo" && \ 1024448e5ce07Smrg func_warning "'-version-info' is ignored for programs" 10245c43cc173Smrg 10246c27c18e8Smrg test -n "$release" && \ 1024748e5ce07Smrg func_warning "'-release' is ignored for programs" 10248c43cc173Smrg 1024948e5ce07Smrg $preload \ 1025048e5ce07Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 1025148e5ce07Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10252c27c18e8Smrg 10253c27c18e8Smrg case $host in 10254c27c18e8Smrg *-*-rhapsody* | *-*-darwin1.[012]) 10255c27c18e8Smrg # On Rhapsody replace the C library is the System framework 1025637eb1ca1Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 1025737eb1ca1Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10258c43cc173Smrg ;; 10259c27c18e8Smrg esac 10260c43cc173Smrg 10261c27c18e8Smrg case $host in 10262c27c18e8Smrg *-*-darwin*) 10263c27c18e8Smrg # Don't allow lazy linking, it breaks C++ global constructors 10264c27c18e8Smrg # But is supposedly fixed on 10.4 or later (yay!). 1026548e5ce07Smrg if test CXX = "$tagname"; then 10266c27c18e8Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10267c27c18e8Smrg 10.[0123]) 1026848e5ce07Smrg func_append compile_command " $wl-bind_at_load" 1026948e5ce07Smrg func_append finalize_command " $wl-bind_at_load" 10270c27c18e8Smrg ;; 10271c27c18e8Smrg esac 10272c43cc173Smrg fi 10273c27c18e8Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 1027437eb1ca1Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 1027537eb1ca1Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10276c27c18e8Smrg ;; 10277c27c18e8Smrg esac 10278c43cc173Smrg 10279c43cc173Smrg 10280c27c18e8Smrg # move library search paths that coincide with paths to not yet 10281c27c18e8Smrg # installed libraries to the beginning of the library search list 10282c27c18e8Smrg new_libs= 10283c27c18e8Smrg for path in $notinst_path; do 10284c27c18e8Smrg case " $new_libs " in 10285c27c18e8Smrg *" -L$path/$objdir "*) ;; 10286c27c18e8Smrg *) 10287c27c18e8Smrg case " $compile_deplibs " in 10288c27c18e8Smrg *" -L$path/$objdir "*) 10289b789ec8aSmrg func_append new_libs " -L$path/$objdir" ;; 10290c43cc173Smrg esac 10291c27c18e8Smrg ;; 10292c27c18e8Smrg esac 10293c27c18e8Smrg done 10294c27c18e8Smrg for deplib in $compile_deplibs; do 10295c27c18e8Smrg case $deplib in 10296c27c18e8Smrg -L*) 10297c27c18e8Smrg case " $new_libs " in 10298c27c18e8Smrg *" $deplib "*) ;; 10299b789ec8aSmrg *) func_append new_libs " $deplib" ;; 10300c43cc173Smrg esac 10301c27c18e8Smrg ;; 10302b789ec8aSmrg *) func_append new_libs " $deplib" ;; 10303c27c18e8Smrg esac 10304c27c18e8Smrg done 1030548e5ce07Smrg compile_deplibs=$new_libs 10306c43cc173Smrg 10307c43cc173Smrg 10308b789ec8aSmrg func_append compile_command " $compile_deplibs" 10309b789ec8aSmrg func_append finalize_command " $finalize_deplibs" 10310c43cc173Smrg 10311c27c18e8Smrg if test -n "$rpath$xrpath"; then 10312c27c18e8Smrg # If the user specified any rpath flags, then add them. 10313c27c18e8Smrg for libdir in $rpath $xrpath; do 10314c27c18e8Smrg # This is the magic to use -rpath. 10315c27c18e8Smrg case "$finalize_rpath " in 10316c27c18e8Smrg *" $libdir "*) ;; 10317b789ec8aSmrg *) func_append finalize_rpath " $libdir" ;; 10318c27c18e8Smrg esac 10319c27c18e8Smrg done 10320c27c18e8Smrg fi 10321c43cc173Smrg 10322c27c18e8Smrg # Now hardcode the library paths 10323c27c18e8Smrg rpath= 10324c27c18e8Smrg hardcode_libdirs= 10325c27c18e8Smrg for libdir in $compile_rpath $finalize_rpath; do 10326c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 10327c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 10328c27c18e8Smrg if test -z "$hardcode_libdirs"; then 1032948e5ce07Smrg hardcode_libdirs=$libdir 10330c27c18e8Smrg else 10331c27c18e8Smrg # Just accumulate the unique libdirs. 10332c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10333c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10334c27c18e8Smrg ;; 10335c27c18e8Smrg *) 10336b789ec8aSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10337c27c18e8Smrg ;; 10338c27c18e8Smrg esac 10339c27c18e8Smrg fi 10340c43cc173Smrg else 10341c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10342b789ec8aSmrg func_append rpath " $flag" 10343c43cc173Smrg fi 10344c27c18e8Smrg elif test -n "$runpath_var"; then 10345c27c18e8Smrg case "$perm_rpath " in 10346c27c18e8Smrg *" $libdir "*) ;; 10347b789ec8aSmrg *) func_append perm_rpath " $libdir" ;; 10348c27c18e8Smrg esac 10349c27c18e8Smrg fi 10350c27c18e8Smrg case $host in 10351c27c18e8Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 1035248e5ce07Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10353c27c18e8Smrg case :$dllsearchpath: in 10354c27c18e8Smrg *":$libdir:"*) ;; 10355c27c18e8Smrg ::) dllsearchpath=$libdir;; 10356b789ec8aSmrg *) func_append dllsearchpath ":$libdir";; 10357c27c18e8Smrg esac 10358c27c18e8Smrg case :$dllsearchpath: in 10359c27c18e8Smrg *":$testbindir:"*) ;; 10360c27c18e8Smrg ::) dllsearchpath=$testbindir;; 10361b789ec8aSmrg *) func_append dllsearchpath ":$testbindir";; 10362c27c18e8Smrg esac 10363c27c18e8Smrg ;; 10364c27c18e8Smrg esac 10365c27c18e8Smrg done 10366c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 10367c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 10368c27c18e8Smrg test -n "$hardcode_libdirs"; then 1036948e5ce07Smrg libdir=$hardcode_libdirs 10370c27c18e8Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10371c27c18e8Smrg fi 1037248e5ce07Smrg compile_rpath=$rpath 10373c43cc173Smrg 10374c27c18e8Smrg rpath= 10375c27c18e8Smrg hardcode_libdirs= 10376c27c18e8Smrg for libdir in $finalize_rpath; do 10377c27c18e8Smrg if test -n "$hardcode_libdir_flag_spec"; then 10378c27c18e8Smrg if test -n "$hardcode_libdir_separator"; then 10379c27c18e8Smrg if test -z "$hardcode_libdirs"; then 1038048e5ce07Smrg hardcode_libdirs=$libdir 10381c27c18e8Smrg else 10382c27c18e8Smrg # Just accumulate the unique libdirs. 10383c27c18e8Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10384c27c18e8Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10385c27c18e8Smrg ;; 10386c27c18e8Smrg *) 10387b789ec8aSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10388c27c18e8Smrg ;; 10389c27c18e8Smrg esac 10390c27c18e8Smrg fi 10391c43cc173Smrg else 10392c27c18e8Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10393b789ec8aSmrg func_append rpath " $flag" 10394c43cc173Smrg fi 10395c27c18e8Smrg elif test -n "$runpath_var"; then 10396c27c18e8Smrg case "$finalize_perm_rpath " in 10397c27c18e8Smrg *" $libdir "*) ;; 10398b789ec8aSmrg *) func_append finalize_perm_rpath " $libdir" ;; 10399c27c18e8Smrg esac 10400c43cc173Smrg fi 10401c27c18e8Smrg done 10402c27c18e8Smrg # Substitute the hardcoded libdirs into the rpath. 10403c27c18e8Smrg if test -n "$hardcode_libdir_separator" && 10404c27c18e8Smrg test -n "$hardcode_libdirs"; then 1040548e5ce07Smrg libdir=$hardcode_libdirs 10406c27c18e8Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10407c27c18e8Smrg fi 1040848e5ce07Smrg finalize_rpath=$rpath 10409c43cc173Smrg 1041048e5ce07Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10411c27c18e8Smrg # Transform all the library objects into standard objects. 1041237eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 1041337eb1ca1Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10414c27c18e8Smrg fi 10415c43cc173Smrg 1041648e5ce07Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 10417c43cc173Smrg 10418c27c18e8Smrg # template prelinking step 10419c27c18e8Smrg if test -n "$prelink_cmds"; then 10420c27c18e8Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 10421c27c18e8Smrg fi 10422c43cc173Smrg 1042348e5ce07Smrg wrappers_required=: 10424c27c18e8Smrg case $host in 1042537eb1ca1Smrg *cegcc* | *mingw32ce*) 1042637eb1ca1Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 1042748e5ce07Smrg wrappers_required=false 1042837eb1ca1Smrg ;; 10429c27c18e8Smrg *cygwin* | *mingw* ) 1043048e5ce07Smrg test yes = "$build_libtool_libs" || wrappers_required=false 10431c27c18e8Smrg ;; 10432c27c18e8Smrg *) 1043348e5ce07Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 1043448e5ce07Smrg wrappers_required=false 10435c27c18e8Smrg fi 10436c27c18e8Smrg ;; 10437c27c18e8Smrg esac 1043848e5ce07Smrg $wrappers_required || { 10439c27c18e8Smrg # Replace the output file specification. 1044037eb1ca1Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 1044148e5ce07Smrg link_command=$compile_command$compile_rpath 10442c43cc173Smrg 10443c27c18e8Smrg # We have no uninstalled library dependencies, so finalize right now. 10444c27c18e8Smrg exit_status=0 10445c27c18e8Smrg func_show_eval "$link_command" 'exit_status=$?' 10446c43cc173Smrg 10447b789ec8aSmrg if test -n "$postlink_cmds"; then 10448b789ec8aSmrg func_to_tool_file "$output" 10449b789ec8aSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10450b789ec8aSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10451b789ec8aSmrg fi 10452b789ec8aSmrg 10453c27c18e8Smrg # Delete the generated files. 1045448e5ce07Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 1045548e5ce07Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10456c43cc173Smrg fi 10457c43cc173Smrg 10458c27c18e8Smrg exit $exit_status 1045948e5ce07Smrg } 10460c43cc173Smrg 10461c27c18e8Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10462c27c18e8Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10463c27c18e8Smrg fi 10464c27c18e8Smrg if test -n "$finalize_shlibpath"; then 10465c27c18e8Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10466c27c18e8Smrg fi 10467c43cc173Smrg 10468c27c18e8Smrg compile_var= 10469c27c18e8Smrg finalize_var= 10470c27c18e8Smrg if test -n "$runpath_var"; then 10471c27c18e8Smrg if test -n "$perm_rpath"; then 10472c27c18e8Smrg # We should set the runpath_var. 10473c27c18e8Smrg rpath= 10474c27c18e8Smrg for dir in $perm_rpath; do 10475b789ec8aSmrg func_append rpath "$dir:" 10476c27c18e8Smrg done 10477c27c18e8Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10478c43cc173Smrg fi 10479c27c18e8Smrg if test -n "$finalize_perm_rpath"; then 10480c27c18e8Smrg # We should set the runpath_var. 10481c27c18e8Smrg rpath= 10482c27c18e8Smrg for dir in $finalize_perm_rpath; do 10483b789ec8aSmrg func_append rpath "$dir:" 10484c27c18e8Smrg done 10485c27c18e8Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10486c43cc173Smrg fi 10487c27c18e8Smrg fi 10488c43cc173Smrg 1048948e5ce07Smrg if test yes = "$no_install"; then 10490c27c18e8Smrg # We don't need to create a wrapper script. 1049148e5ce07Smrg link_command=$compile_var$compile_command$compile_rpath 10492c27c18e8Smrg # Replace the output file specification. 1049337eb1ca1Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10494c27c18e8Smrg # Delete the old output file. 10495c27c18e8Smrg $opt_dry_run || $RM $output 10496c27c18e8Smrg # Link the executable and exit 10497c27c18e8Smrg func_show_eval "$link_command" 'exit $?' 10498b789ec8aSmrg 10499b789ec8aSmrg if test -n "$postlink_cmds"; then 10500b789ec8aSmrg func_to_tool_file "$output" 10501b789ec8aSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10502b789ec8aSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10503b789ec8aSmrg fi 10504b789ec8aSmrg 10505c43cc173Smrg exit $EXIT_SUCCESS 10506c27c18e8Smrg fi 10507c43cc173Smrg 1050848e5ce07Smrg case $hardcode_action,$fast_install in 1050948e5ce07Smrg relink,*) 1051048e5ce07Smrg # Fast installation is not supported 1051148e5ce07Smrg link_command=$compile_var$compile_command$compile_rpath 1051248e5ce07Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 10513c27c18e8Smrg 1051448e5ce07Smrg func_warning "this platform does not like uninstalled shared libraries" 1051548e5ce07Smrg func_warning "'$output' will be relinked during installation" 1051648e5ce07Smrg ;; 1051748e5ce07Smrg *,yes) 1051848e5ce07Smrg link_command=$finalize_var$compile_command$finalize_rpath 1051948e5ce07Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 1052048e5ce07Smrg ;; 1052148e5ce07Smrg *,no) 1052248e5ce07Smrg link_command=$compile_var$compile_command$compile_rpath 1052348e5ce07Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 1052448e5ce07Smrg ;; 1052548e5ce07Smrg *,needless) 1052648e5ce07Smrg link_command=$finalize_var$compile_command$finalize_rpath 1052748e5ce07Smrg relink_command= 1052848e5ce07Smrg ;; 1052948e5ce07Smrg esac 10530c43cc173Smrg 10531c27c18e8Smrg # Replace the output file specification. 1053237eb1ca1Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10533c43cc173Smrg 10534c27c18e8Smrg # Delete the old output files. 10535c27c18e8Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10536c43cc173Smrg 10537c27c18e8Smrg func_show_eval "$link_command" 'exit $?' 10538c43cc173Smrg 10539b789ec8aSmrg if test -n "$postlink_cmds"; then 10540b789ec8aSmrg func_to_tool_file "$output_objdir/$outputname" 10541b789ec8aSmrg 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'` 10542b789ec8aSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 10543b789ec8aSmrg fi 10544b789ec8aSmrg 10545c27c18e8Smrg # Now create the wrapper script. 10546c27c18e8Smrg func_verbose "creating $output" 10547c43cc173Smrg 10548c27c18e8Smrg # Quote the relink command for shipping. 10549c27c18e8Smrg if test -n "$relink_command"; then 10550c27c18e8Smrg # Preserve any variables that may affect compiler behavior 10551c27c18e8Smrg for var in $variables_saved_for_relink; do 10552c27c18e8Smrg if eval test -z \"\${$var+set}\"; then 10553c27c18e8Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10554c27c18e8Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10555c27c18e8Smrg relink_command="$var=; export $var; $relink_command" 10556c43cc173Smrg else 10557c27c18e8Smrg func_quote_for_eval "$var_value" 10558c27c18e8Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10559c43cc173Smrg fi 10560c27c18e8Smrg done 105614940c694Smrg func_quote "(cd `pwd`; $relink_command)" 105624940c694Smrg relink_command=$func_quote_result 10563c27c18e8Smrg fi 10564c27c18e8Smrg 10565c27c18e8Smrg # Only actually do things if not in dry run mode. 10566c27c18e8Smrg $opt_dry_run || { 10567c27c18e8Smrg # win32 will think the script is a binary if it has 10568c27c18e8Smrg # a .exe suffix, so we strip it off here. 10569c27c18e8Smrg case $output in 10570c27c18e8Smrg *.exe) func_stripname '' '.exe' "$output" 10571c27c18e8Smrg output=$func_stripname_result ;; 10572c27c18e8Smrg esac 10573c27c18e8Smrg # test for cygwin because mv fails w/o .exe extensions 10574c27c18e8Smrg case $host in 10575c27c18e8Smrg *cygwin*) 10576c27c18e8Smrg exeext=.exe 10577c27c18e8Smrg func_stripname '' '.exe' "$outputname" 10578c27c18e8Smrg outputname=$func_stripname_result ;; 10579c27c18e8Smrg *) exeext= ;; 10580c43cc173Smrg esac 10581c27c18e8Smrg case $host in 10582c27c18e8Smrg *cygwin* | *mingw* ) 10583c27c18e8Smrg func_dirname_and_basename "$output" "" "." 10584c27c18e8Smrg output_name=$func_basename_result 10585c27c18e8Smrg output_path=$func_dirname_result 1058648e5ce07Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 1058748e5ce07Smrg cwrapper=$output_path/$output_name.exe 10588c27c18e8Smrg $RM $cwrappersource $cwrapper 10589c27c18e8Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10590c27c18e8Smrg 10591c27c18e8Smrg func_emit_cwrapperexe_src > $cwrappersource 10592c27c18e8Smrg 10593c27c18e8Smrg # The wrapper executable is built using the $host compiler, 10594c27c18e8Smrg # because it contains $host paths and files. If cross- 10595c27c18e8Smrg # compiling, it, like the target executable, must be 10596c27c18e8Smrg # executed on the $host or under an emulation environment. 10597c27c18e8Smrg $opt_dry_run || { 10598c27c18e8Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10599c27c18e8Smrg $STRIP $cwrapper 10600c27c18e8Smrg } 10601c43cc173Smrg 10602c27c18e8Smrg # Now, create the wrapper script for func_source use: 10603c27c18e8Smrg func_ltwrapper_scriptname $cwrapper 10604c27c18e8Smrg $RM $func_ltwrapper_scriptname_result 10605c27c18e8Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10606c27c18e8Smrg $opt_dry_run || { 10607c27c18e8Smrg # note: this script will not be executed, so do not chmod. 1060848e5ce07Smrg if test "x$build" = "x$host"; then 10609c27c18e8Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10610c27c18e8Smrg else 10611c27c18e8Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 10612c27c18e8Smrg fi 10613c27c18e8Smrg } 10614c27c18e8Smrg ;; 10615c27c18e8Smrg * ) 10616c27c18e8Smrg $RM $output 10617c27c18e8Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10618c43cc173Smrg 10619c27c18e8Smrg func_emit_wrapper no > $output 10620c27c18e8Smrg chmod +x $output 10621c27c18e8Smrg ;; 10622c27c18e8Smrg esac 10623c27c18e8Smrg } 10624c27c18e8Smrg exit $EXIT_SUCCESS 10625c27c18e8Smrg ;; 10626c27c18e8Smrg esac 10627c43cc173Smrg 10628c27c18e8Smrg # See if we need to build an old-fashioned archive. 10629c27c18e8Smrg for oldlib in $oldlibs; do 10630c43cc173Smrg 1063148e5ce07Smrg case $build_libtool_libs in 1063248e5ce07Smrg convenience) 1063348e5ce07Smrg oldobjs="$libobjs_save $symfileobj" 1063448e5ce07Smrg addlibs=$convenience 1063544584a44Smrg build_libtool_libs=no 1063648e5ce07Smrg ;; 1063748e5ce07Smrg module) 1063848e5ce07Smrg oldobjs=$libobjs_save 1063948e5ce07Smrg addlibs=$old_convenience 1064048e5ce07Smrg build_libtool_libs=no 1064148e5ce07Smrg ;; 1064248e5ce07Smrg *) 10643c27c18e8Smrg oldobjs="$old_deplibs $non_pic_objects" 1064448e5ce07Smrg $preload && test -f "$symfileobj" \ 1064548e5ce07Smrg && func_append oldobjs " $symfileobj" 1064648e5ce07Smrg addlibs=$old_convenience 1064748e5ce07Smrg ;; 1064848e5ce07Smrg esac 10649c43cc173Smrg 10650c27c18e8Smrg if test -n "$addlibs"; then 1065148e5ce07Smrg gentop=$output_objdir/${outputname}x 10652b789ec8aSmrg func_append generated " $gentop" 10653c43cc173Smrg 10654c27c18e8Smrg func_extract_archives $gentop $addlibs 10655b789ec8aSmrg func_append oldobjs " $func_extract_archives_result" 10656c27c18e8Smrg fi 10657c43cc173Smrg 10658c27c18e8Smrg # Do each command in the archive commands. 1065948e5ce07Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10660c27c18e8Smrg cmds=$old_archive_from_new_cmds 10661c27c18e8Smrg else 10662c43cc173Smrg 10663c27c18e8Smrg # Add any objects from preloaded convenience libraries 10664c27c18e8Smrg if test -n "$dlprefiles"; then 1066548e5ce07Smrg gentop=$output_objdir/${outputname}x 10666b789ec8aSmrg func_append generated " $gentop" 10667c43cc173Smrg 10668c27c18e8Smrg func_extract_archives $gentop $dlprefiles 10669b789ec8aSmrg func_append oldobjs " $func_extract_archives_result" 10670c27c18e8Smrg fi 10671c43cc173Smrg 10672c27c18e8Smrg # POSIX demands no paths to be encoded in archives. We have 10673c27c18e8Smrg # to avoid creating archives with duplicate basenames if we 10674c27c18e8Smrg # might have to extract them afterwards, e.g., when creating a 10675c27c18e8Smrg # static archive out of a convenience library, or when linking 10676c27c18e8Smrg # the entirety of a libtool archive into another (currently 10677c27c18e8Smrg # not supported by libtool). 10678c27c18e8Smrg if (for obj in $oldobjs 10679c27c18e8Smrg do 10680c27c18e8Smrg func_basename "$obj" 10681c27c18e8Smrg $ECHO "$func_basename_result" 10682c27c18e8Smrg done | sort | sort -uc >/dev/null 2>&1); then 10683c27c18e8Smrg : 10684c27c18e8Smrg else 1068537eb1ca1Smrg echo "copying selected object files to avoid basename conflicts..." 1068648e5ce07Smrg gentop=$output_objdir/${outputname}x 10687b789ec8aSmrg func_append generated " $gentop" 10688c27c18e8Smrg func_mkdir_p "$gentop" 10689c27c18e8Smrg save_oldobjs=$oldobjs 10690c27c18e8Smrg oldobjs= 10691c27c18e8Smrg counter=1 10692c27c18e8Smrg for obj in $save_oldobjs 10693c27c18e8Smrg do 10694c27c18e8Smrg func_basename "$obj" 1069548e5ce07Smrg objbase=$func_basename_result 10696c27c18e8Smrg case " $oldobjs " in 10697c27c18e8Smrg " ") oldobjs=$obj ;; 10698c27c18e8Smrg *[\ /]"$objbase "*) 10699c27c18e8Smrg while :; do 10700c27c18e8Smrg # Make sure we don't pick an alternate name that also 10701c27c18e8Smrg # overlaps. 10702c27c18e8Smrg newobj=lt$counter-$objbase 10703c27c18e8Smrg func_arith $counter + 1 10704c27c18e8Smrg counter=$func_arith_result 10705c27c18e8Smrg case " $oldobjs " in 10706c27c18e8Smrg *[\ /]"$newobj "*) ;; 10707c27c18e8Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10708c27c18e8Smrg esac 10709c27c18e8Smrg done 10710c27c18e8Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10711b789ec8aSmrg func_append oldobjs " $gentop/$newobj" 10712c27c18e8Smrg ;; 10713b789ec8aSmrg *) func_append oldobjs " $obj" ;; 10714c27c18e8Smrg esac 10715c43cc173Smrg done 10716c43cc173Smrg fi 10717f1ee322dSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10718f1ee322dSmrg tool_oldlib=$func_to_tool_file_result 10719c27c18e8Smrg eval cmds=\"$old_archive_cmds\" 10720c43cc173Smrg 10721c27c18e8Smrg func_len " $cmds" 10722c27c18e8Smrg len=$func_len_result 10723c27c18e8Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10724c27c18e8Smrg cmds=$old_archive_cmds 10725b789ec8aSmrg elif test -n "$archiver_list_spec"; then 10726b789ec8aSmrg func_verbose "using command file archive linking..." 10727b789ec8aSmrg for obj in $oldobjs 10728b789ec8aSmrg do 10729b789ec8aSmrg func_to_tool_file "$obj" 10730b789ec8aSmrg $ECHO "$func_to_tool_file_result" 10731b789ec8aSmrg done > $output_objdir/$libname.libcmd 10732b789ec8aSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 10733b789ec8aSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10734b789ec8aSmrg cmds=$old_archive_cmds 10735c27c18e8Smrg else 10736c27c18e8Smrg # the command line is too long to link in one step, link in parts 10737c27c18e8Smrg func_verbose "using piecewise archive linking..." 10738c27c18e8Smrg save_RANLIB=$RANLIB 10739c27c18e8Smrg RANLIB=: 10740c27c18e8Smrg objlist= 10741c27c18e8Smrg concat_cmds= 10742c27c18e8Smrg save_oldobjs=$oldobjs 10743c27c18e8Smrg oldobjs= 10744c27c18e8Smrg # Is there a better way of finding the last object in the list? 10745c27c18e8Smrg for obj in $save_oldobjs 10746c27c18e8Smrg do 10747c27c18e8Smrg last_oldobj=$obj 10748c27c18e8Smrg done 10749c27c18e8Smrg eval test_cmds=\"$old_archive_cmds\" 10750c27c18e8Smrg func_len " $test_cmds" 10751c27c18e8Smrg len0=$func_len_result 10752c27c18e8Smrg len=$len0 10753c27c18e8Smrg for obj in $save_oldobjs 10754c27c18e8Smrg do 10755c27c18e8Smrg func_len " $obj" 10756c27c18e8Smrg func_arith $len + $func_len_result 10757c27c18e8Smrg len=$func_arith_result 10758c27c18e8Smrg func_append objlist " $obj" 10759c27c18e8Smrg if test "$len" -lt "$max_cmd_len"; then 10760c27c18e8Smrg : 10761c27c18e8Smrg else 10762c27c18e8Smrg # the above command should be used before it gets too long 10763c27c18e8Smrg oldobjs=$objlist 1076448e5ce07Smrg if test "$obj" = "$last_oldobj"; then 10765c27c18e8Smrg RANLIB=$save_RANLIB 10766c27c18e8Smrg fi 10767c27c18e8Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 1076848e5ce07Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10769c27c18e8Smrg objlist= 10770c27c18e8Smrg len=$len0 10771c27c18e8Smrg fi 10772c27c18e8Smrg done 10773c27c18e8Smrg RANLIB=$save_RANLIB 10774c27c18e8Smrg oldobjs=$objlist 1077548e5ce07Smrg if test -z "$oldobjs"; then 10776c27c18e8Smrg eval cmds=\"\$concat_cmds\" 10777c27c18e8Smrg else 10778c27c18e8Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10779c27c18e8Smrg fi 10780c27c18e8Smrg fi 10781c27c18e8Smrg fi 10782c27c18e8Smrg func_execute_cmds "$cmds" 'exit $?' 10783c43cc173Smrg done 10784c43cc173Smrg 10785c27c18e8Smrg test -n "$generated" && \ 10786c27c18e8Smrg func_show_eval "${RM}r$generated" 10787c43cc173Smrg 10788c27c18e8Smrg # Now create the libtool archive. 10789c27c18e8Smrg case $output in 10790c27c18e8Smrg *.la) 10791c27c18e8Smrg old_library= 1079248e5ce07Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 10793c27c18e8Smrg func_verbose "creating $output" 10794c43cc173Smrg 10795c27c18e8Smrg # Preserve any variables that may affect compiler behavior 10796c27c18e8Smrg for var in $variables_saved_for_relink; do 10797c27c18e8Smrg if eval test -z \"\${$var+set}\"; then 10798c27c18e8Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10799c27c18e8Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10800c27c18e8Smrg relink_command="$var=; export $var; $relink_command" 10801c43cc173Smrg else 10802c27c18e8Smrg func_quote_for_eval "$var_value" 10803c27c18e8Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10804c43cc173Smrg fi 10805c27c18e8Smrg done 10806c27c18e8Smrg # Quote the link command for shipping. 1080748e5ce07Smrg relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 108084940c694Smrg func_quote "$relink_command" 108094940c694Smrg relink_command=$func_quote_result 1081048e5ce07Smrg if test yes = "$hardcode_automatic"; then 10811c27c18e8Smrg relink_command= 10812c27c18e8Smrg fi 10813c43cc173Smrg 10814c27c18e8Smrg # Only create the output if not a dry run. 10815c27c18e8Smrg $opt_dry_run || { 10816c27c18e8Smrg for installed in no yes; do 1081748e5ce07Smrg if test yes = "$installed"; then 10818c27c18e8Smrg if test -z "$install_libdir"; then 10819c27c18e8Smrg break 10820c27c18e8Smrg fi 1082148e5ce07Smrg output=$output_objdir/${outputname}i 10822c27c18e8Smrg # Replace all uninstalled libtool libraries with the installed ones 10823c27c18e8Smrg newdependency_libs= 10824c27c18e8Smrg for deplib in $dependency_libs; do 10825c27c18e8Smrg case $deplib in 10826c27c18e8Smrg *.la) 10827c27c18e8Smrg func_basename "$deplib" 1082848e5ce07Smrg name=$func_basename_result 10829f1ee322dSmrg func_resolve_sysroot "$deplib" 1083048e5ce07Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 10831c27c18e8Smrg test -z "$libdir" && \ 1083248e5ce07Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 10833b789ec8aSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 10834b789ec8aSmrg ;; 10835b789ec8aSmrg -L*) 10836b789ec8aSmrg func_stripname -L '' "$deplib" 10837b789ec8aSmrg func_replace_sysroot "$func_stripname_result" 10838b789ec8aSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 10839b789ec8aSmrg ;; 10840b789ec8aSmrg -R*) 10841b789ec8aSmrg func_stripname -R '' "$deplib" 10842b789ec8aSmrg func_replace_sysroot "$func_stripname_result" 10843b789ec8aSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 10844c27c18e8Smrg ;; 10845b789ec8aSmrg *) func_append newdependency_libs " $deplib" ;; 10846c27c18e8Smrg esac 10847c27c18e8Smrg done 1084848e5ce07Smrg dependency_libs=$newdependency_libs 10849c27c18e8Smrg newdlfiles= 10850c27c18e8Smrg 10851c27c18e8Smrg for lib in $dlfiles; do 10852c27c18e8Smrg case $lib in 10853c27c18e8Smrg *.la) 10854c27c18e8Smrg func_basename "$lib" 1085548e5ce07Smrg name=$func_basename_result 1085648e5ce07Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10857c27c18e8Smrg test -z "$libdir" && \ 1085848e5ce07Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10859b789ec8aSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 10860c27c18e8Smrg ;; 10861b789ec8aSmrg *) func_append newdlfiles " $lib" ;; 10862c27c18e8Smrg esac 10863c27c18e8Smrg done 1086448e5ce07Smrg dlfiles=$newdlfiles 10865c27c18e8Smrg newdlprefiles= 10866c27c18e8Smrg for lib in $dlprefiles; do 10867c27c18e8Smrg case $lib in 10868c27c18e8Smrg *.la) 10869c27c18e8Smrg # Only pass preopened files to the pseudo-archive (for 10870c27c18e8Smrg # eventual linking with the app. that links it) if we 10871c27c18e8Smrg # didn't already link the preopened objects directly into 10872c27c18e8Smrg # the library: 10873c27c18e8Smrg func_basename "$lib" 1087448e5ce07Smrg name=$func_basename_result 1087548e5ce07Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10876c27c18e8Smrg test -z "$libdir" && \ 1087748e5ce07Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10878b789ec8aSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 10879c27c18e8Smrg ;; 10880c27c18e8Smrg esac 10881c27c18e8Smrg done 1088248e5ce07Smrg dlprefiles=$newdlprefiles 10883c27c18e8Smrg else 10884c27c18e8Smrg newdlfiles= 10885c27c18e8Smrg for lib in $dlfiles; do 10886c27c18e8Smrg case $lib in 1088748e5ce07Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10888c27c18e8Smrg *) abs=`pwd`"/$lib" ;; 10889c27c18e8Smrg esac 10890b789ec8aSmrg func_append newdlfiles " $abs" 10891c27c18e8Smrg done 1089248e5ce07Smrg dlfiles=$newdlfiles 10893c27c18e8Smrg newdlprefiles= 10894c27c18e8Smrg for lib in $dlprefiles; do 10895c27c18e8Smrg case $lib in 1089648e5ce07Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10897c27c18e8Smrg *) abs=`pwd`"/$lib" ;; 10898c27c18e8Smrg esac 10899b789ec8aSmrg func_append newdlprefiles " $abs" 10900c27c18e8Smrg done 1090148e5ce07Smrg dlprefiles=$newdlprefiles 10902c27c18e8Smrg fi 10903c27c18e8Smrg $RM $output 10904c27c18e8Smrg # place dlname in correct position for cygwin 1090537eb1ca1Smrg # In fact, it would be nice if we could use this code for all target 1090637eb1ca1Smrg # systems that can't hard-code library paths into their executables 1090737eb1ca1Smrg # and that have no shared library path variable independent of PATH, 1090837eb1ca1Smrg # but it turns out we can't easily determine that from inspecting 1090937eb1ca1Smrg # libtool variables, so we have to hard-code the OSs to which it 1091037eb1ca1Smrg # applies here; at the moment, that means platforms that use the PE 1091137eb1ca1Smrg # object format with DLL files. See the long comment at the top of 1091237eb1ca1Smrg # tests/bindir.at for full details. 10913c27c18e8Smrg tdlname=$dlname 10914c27c18e8Smrg case $host,$output,$installed,$module,$dlname in 1091537eb1ca1Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 1091637eb1ca1Smrg # If a -bindir argument was supplied, place the dll there. 1091748e5ce07Smrg if test -n "$bindir"; then 1091837eb1ca1Smrg func_relative_path "$install_libdir" "$bindir" 1091948e5ce07Smrg tdlname=$func_relative_path_result/$dlname 1092037eb1ca1Smrg else 1092137eb1ca1Smrg # Otherwise fall back on heuristic. 1092237eb1ca1Smrg tdlname=../bin/$dlname 1092337eb1ca1Smrg fi 1092437eb1ca1Smrg ;; 10925c27c18e8Smrg esac 10926c27c18e8Smrg $ECHO > $output "\ 10927c27c18e8Smrg# $outputname - a libtool library file 1092848e5ce07Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 10929c27c18e8Smrg# 10930c27c18e8Smrg# Please DO NOT delete this file! 10931c27c18e8Smrg# It is necessary for linking the library. 10932c43cc173Smrg 10933c27c18e8Smrg# The name that we can dlopen(3). 10934c27c18e8Smrgdlname='$tdlname' 10935c43cc173Smrg 10936c27c18e8Smrg# Names of this library. 10937c27c18e8Smrglibrary_names='$library_names' 10938c43cc173Smrg 10939c27c18e8Smrg# The name of the static archive. 10940c27c18e8Smrgold_library='$old_library' 10941c43cc173Smrg 1094248e5ce07Smrg# Linker flags that cannot go in dependency_libs. 10943c27c18e8Smrginherited_linker_flags='$new_inherited_linker_flags' 10944c43cc173Smrg 10945c27c18e8Smrg# Libraries that this one depends upon. 10946c27c18e8Smrgdependency_libs='$dependency_libs' 10947c43cc173Smrg 10948c27c18e8Smrg# Names of additional weak libraries provided by this library 10949c27c18e8Smrgweak_library_names='$weak_libs' 10950c43cc173Smrg 10951c27c18e8Smrg# Version information for $libname. 10952c27c18e8Smrgcurrent=$current 10953c27c18e8Smrgage=$age 10954c27c18e8Smrgrevision=$revision 10955c43cc173Smrg 10956c27c18e8Smrg# Is this an already installed library? 10957c27c18e8Smrginstalled=$installed 10958c43cc173Smrg 10959c27c18e8Smrg# Should we warn about portability when linking against -modules? 10960c27c18e8Smrgshouldnotlink=$module 10961c43cc173Smrg 10962c27c18e8Smrg# Files to dlopen/dlpreopen 10963c27c18e8Smrgdlopen='$dlfiles' 10964c27c18e8Smrgdlpreopen='$dlprefiles' 10965c43cc173Smrg 10966c27c18e8Smrg# Directory that this library needs to be installed in: 10967c27c18e8Smrglibdir='$install_libdir'" 1096848e5ce07Smrg if test no,yes = "$installed,$need_relink"; then 10969c27c18e8Smrg $ECHO >> $output "\ 10970c27c18e8Smrgrelink_command=\"$relink_command\"" 10971c27c18e8Smrg fi 10972c27c18e8Smrg done 10973c27c18e8Smrg } 10974c43cc173Smrg 10975c27c18e8Smrg # Do a symbolic link so that the libtool archive can be found in 10976c27c18e8Smrg # LD_LIBRARY_PATH before the program is installed. 10977c27c18e8Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 10978c27c18e8Smrg ;; 10979c27c18e8Smrg esac 10980c27c18e8Smrg exit $EXIT_SUCCESS 10981c27c18e8Smrg} 10982c43cc173Smrg 1098348e5ce07Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 1098448e5ce07Smrg func_mode_link ${1+"$@"} 1098548e5ce07Smrgfi 10986c43cc173Smrg 10987c43cc173Smrg 10988c27c18e8Smrg# func_mode_uninstall arg... 10989c27c18e8Smrgfunc_mode_uninstall () 10990c27c18e8Smrg{ 1099148e5ce07Smrg $debug_cmd 1099248e5ce07Smrg 1099348e5ce07Smrg RM=$nonopt 10994c43cc173Smrg files= 1099548e5ce07Smrg rmforce=false 10996c43cc173Smrg exit_status=0 10997c43cc173Smrg 10998c43cc173Smrg # This variable tells wrapper scripts just to set variables rather 10999c43cc173Smrg # than running their programs. 1100048e5ce07Smrg libtool_install_magic=$magic 11001c43cc173Smrg 11002c43cc173Smrg for arg 11003c43cc173Smrg do 11004c43cc173Smrg case $arg in 1100548e5ce07Smrg -f) func_append RM " $arg"; rmforce=: ;; 11006b789ec8aSmrg -*) func_append RM " $arg" ;; 11007b789ec8aSmrg *) func_append files " $arg" ;; 11008c43cc173Smrg esac 11009c43cc173Smrg done 11010c43cc173Smrg 11011c27c18e8Smrg test -z "$RM" && \ 11012c27c18e8Smrg func_fatal_help "you must specify an RM program" 11013c43cc173Smrg 11014c43cc173Smrg rmdirs= 11015c43cc173Smrg 11016c43cc173Smrg for file in $files; do 11017c27c18e8Smrg func_dirname "$file" "" "." 1101848e5ce07Smrg dir=$func_dirname_result 1101948e5ce07Smrg if test . = "$dir"; then 1102048e5ce07Smrg odir=$objdir 11021c43cc173Smrg else 1102248e5ce07Smrg odir=$dir/$objdir 11023c43cc173Smrg fi 11024c27c18e8Smrg func_basename "$file" 1102548e5ce07Smrg name=$func_basename_result 1102648e5ce07Smrg test uninstall = "$opt_mode" && odir=$dir 11027c43cc173Smrg 11028b789ec8aSmrg # Remember odir for removal later, being careful to avoid duplicates 1102948e5ce07Smrg if test clean = "$opt_mode"; then 11030c43cc173Smrg case " $rmdirs " in 11031b789ec8aSmrg *" $odir "*) ;; 11032b789ec8aSmrg *) func_append rmdirs " $odir" ;; 11033c43cc173Smrg esac 11034c43cc173Smrg fi 11035c43cc173Smrg 11036c43cc173Smrg # Don't error if the file doesn't exist and rm -f was used. 11037c27c18e8Smrg if { test -L "$file"; } >/dev/null 2>&1 || 11038c27c18e8Smrg { test -h "$file"; } >/dev/null 2>&1 || 11039c27c18e8Smrg test -f "$file"; then 11040c43cc173Smrg : 11041c43cc173Smrg elif test -d "$file"; then 11042c43cc173Smrg exit_status=1 11043c43cc173Smrg continue 1104448e5ce07Smrg elif $rmforce; then 11045c43cc173Smrg continue 11046c43cc173Smrg fi 11047c43cc173Smrg 1104848e5ce07Smrg rmfiles=$file 11049c43cc173Smrg 11050c43cc173Smrg case $name in 11051c43cc173Smrg *.la) 11052c43cc173Smrg # Possibly a libtool archive, so verify it. 11053c27c18e8Smrg if func_lalib_p "$file"; then 11054c27c18e8Smrg func_source $dir/$name 11055c43cc173Smrg 11056c43cc173Smrg # Delete the libtool libraries and symlinks. 11057c43cc173Smrg for n in $library_names; do 11058b789ec8aSmrg func_append rmfiles " $odir/$n" 11059c43cc173Smrg done 11060b789ec8aSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11061c43cc173Smrg 1106248e5ce07Smrg case $opt_mode in 11063c43cc173Smrg clean) 11064b789ec8aSmrg case " $library_names " in 11065c43cc173Smrg *" $dlname "*) ;; 11066b789ec8aSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11067c43cc173Smrg esac 11068b789ec8aSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11069c43cc173Smrg ;; 11070c43cc173Smrg uninstall) 11071c43cc173Smrg if test -n "$library_names"; then 11072c43cc173Smrg # Do each command in the postuninstall commands. 1107348e5ce07Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11074c43cc173Smrg fi 11075c43cc173Smrg 11076c43cc173Smrg if test -n "$old_library"; then 11077c43cc173Smrg # Do each command in the old_postuninstall commands. 1107848e5ce07Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11079c43cc173Smrg fi 11080c43cc173Smrg # FIXME: should reinstall the best remaining shared library. 11081c43cc173Smrg ;; 11082c43cc173Smrg esac 11083c43cc173Smrg fi 11084c43cc173Smrg ;; 11085c43cc173Smrg 11086c43cc173Smrg *.lo) 11087c43cc173Smrg # Possibly a libtool object, so verify it. 11088c27c18e8Smrg if func_lalib_p "$file"; then 11089c43cc173Smrg 11090c43cc173Smrg # Read the .lo file 11091c27c18e8Smrg func_source $dir/$name 11092c43cc173Smrg 11093c43cc173Smrg # Add PIC object to the list of files to remove. 1109448e5ce07Smrg if test -n "$pic_object" && test none != "$pic_object"; then 11095b789ec8aSmrg func_append rmfiles " $dir/$pic_object" 11096c43cc173Smrg fi 11097c43cc173Smrg 11098c43cc173Smrg # Add non-PIC object to the list of files to remove. 1109948e5ce07Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11100b789ec8aSmrg func_append rmfiles " $dir/$non_pic_object" 11101c43cc173Smrg fi 11102c43cc173Smrg fi 11103c43cc173Smrg ;; 11104c43cc173Smrg 11105c43cc173Smrg *) 1110648e5ce07Smrg if test clean = "$opt_mode"; then 11107c43cc173Smrg noexename=$name 11108c43cc173Smrg case $file in 11109c43cc173Smrg *.exe) 11110c27c18e8Smrg func_stripname '' '.exe' "$file" 11111c27c18e8Smrg file=$func_stripname_result 11112c27c18e8Smrg func_stripname '' '.exe' "$name" 11113c27c18e8Smrg noexename=$func_stripname_result 11114c43cc173Smrg # $file with .exe has already been added to rmfiles, 11115c43cc173Smrg # add $file without .exe 11116b789ec8aSmrg func_append rmfiles " $file" 11117c43cc173Smrg ;; 11118c43cc173Smrg esac 11119c43cc173Smrg # Do a test to see if this is a libtool program. 11120c27c18e8Smrg if func_ltwrapper_p "$file"; then 11121c27c18e8Smrg if func_ltwrapper_executable_p "$file"; then 11122c27c18e8Smrg func_ltwrapper_scriptname "$file" 11123c27c18e8Smrg relink_command= 11124c27c18e8Smrg func_source $func_ltwrapper_scriptname_result 11125b789ec8aSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11126c27c18e8Smrg else 11127c27c18e8Smrg relink_command= 11128c27c18e8Smrg func_source $dir/$noexename 11129c27c18e8Smrg fi 11130c43cc173Smrg 11131c43cc173Smrg # note $name still contains .exe if it was in $file originally 11132c43cc173Smrg # as does the version of $file that was added into $rmfiles 1113348e5ce07Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 1113448e5ce07Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 11135b789ec8aSmrg func_append rmfiles " $odir/lt-$name" 11136c43cc173Smrg fi 1113748e5ce07Smrg if test "X$noexename" != "X$name"; then 1113848e5ce07Smrg func_append rmfiles " $odir/lt-$noexename.c" 11139c43cc173Smrg fi 11140c43cc173Smrg fi 11141c43cc173Smrg fi 11142c43cc173Smrg ;; 11143c43cc173Smrg esac 11144c27c18e8Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 11145c43cc173Smrg done 11146c43cc173Smrg 1114748e5ce07Smrg # Try to remove the $objdir's in the directories where we deleted files 11148c43cc173Smrg for dir in $rmdirs; do 11149c43cc173Smrg if test -d "$dir"; then 11150c27c18e8Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 11151c43cc173Smrg fi 11152c43cc173Smrg done 11153c43cc173Smrg 11154c43cc173Smrg exit $exit_status 11155c27c18e8Smrg} 11156c43cc173Smrg 1115748e5ce07Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 1115848e5ce07Smrg func_mode_uninstall ${1+"$@"} 1115948e5ce07Smrgfi 11160c43cc173Smrg 11161b789ec8aSmrgtest -z "$opt_mode" && { 1116248e5ce07Smrg help=$generic_help 11163c27c18e8Smrg func_fatal_help "you must specify a MODE" 11164c27c18e8Smrg} 11165c27c18e8Smrg 11166c27c18e8Smrgtest -z "$exec_cmd" && \ 1116748e5ce07Smrg func_fatal_help "invalid operation mode '$opt_mode'" 11168c43cc173Smrg 11169c43cc173Smrgif test -n "$exec_cmd"; then 11170c27c18e8Smrg eval exec "$exec_cmd" 11171c43cc173Smrg exit $EXIT_FAILURE 11172c43cc173Smrgfi 11173c43cc173Smrg 11174c27c18e8Smrgexit $exit_status 11175c43cc173Smrg 11176c43cc173Smrg 11177c43cc173Smrg# The TAGs below are defined such that we never get into a situation 1117848e5ce07Smrg# where we disable both kinds of libraries. Given conflicting 11179c43cc173Smrg# choices, we go for a static library, that is the most portable, 11180c43cc173Smrg# since we can't tell whether shared libraries were disabled because 11181c43cc173Smrg# the user asked for that or because the platform doesn't support 11182c43cc173Smrg# them. This is particularly important on AIX, because we don't 11183c43cc173Smrg# support having both static and shared libraries enabled at the same 11184c43cc173Smrg# time on that platform, so we default to a shared-only configuration. 11185c43cc173Smrg# If a disable-shared tag is given, we'll fallback to a static-only 11186c43cc173Smrg# configuration. But we'll never go from static-only to shared-only. 11187c43cc173Smrg 11188c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11189c27c18e8Smrgbuild_libtool_libs=no 11190c27c18e8Smrgbuild_old_libs=yes 11191c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 11192c43cc173Smrg 11193c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11194c27c18e8Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11195c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-static 11196c43cc173Smrg 11197c43cc173Smrg# Local Variables: 11198c43cc173Smrg# mode:shell-script 11199c43cc173Smrg# sh-indentation:2 11200c43cc173Smrg# End: 11201