ltmain.sh revision 0d16fef4
10d16fef4Smrg#! /bin/sh 20d16fef4Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 30d16fef4Smrg## by inline-source v2014-01-03.01 4de2362d3Smrg 50d16fef4Smrg# libtool (GNU libtool) 2.4.6 60d16fef4Smrg# Provide generalized library-building support services. 7de2362d3Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8de2362d3Smrg 90d16fef4Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc. 10de2362d3Smrg# This is free software; see the source for copying conditions. There is NO 11de2362d3Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12de2362d3Smrg 13de2362d3Smrg# GNU Libtool is free software; you can redistribute it and/or modify 14de2362d3Smrg# it under the terms of the GNU General Public License as published by 15de2362d3Smrg# the Free Software Foundation; either version 2 of the License, or 16de2362d3Smrg# (at your option) any later version. 17de2362d3Smrg# 18de2362d3Smrg# As a special exception to the GNU General Public License, 19de2362d3Smrg# if you distribute this file as part of a program or library that 20de2362d3Smrg# is built using GNU Libtool, you may include this file under the 21de2362d3Smrg# same distribution terms that you use for the rest of that program. 22de2362d3Smrg# 23de2362d3Smrg# GNU Libtool is distributed in the hope that it will be useful, but 24de2362d3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 25de2362d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26de2362d3Smrg# General Public License for more details. 27de2362d3Smrg# 28de2362d3Smrg# You should have received a copy of the GNU General Public License 290d16fef4Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 30de2362d3Smrg 31de2362d3Smrg 32de2362d3SmrgPROGRAM=libtool 33de2362d3SmrgPACKAGE=libtool 340d16fef4SmrgVERSION="2.4.6 Debian-2.4.6-0.1" 350d16fef4Smrgpackage_revision=2.4.6 36de2362d3Smrg 370d16fef4Smrg 380d16fef4Smrg## ------ ## 390d16fef4Smrg## Usage. ## 400d16fef4Smrg## ------ ## 410d16fef4Smrg 420d16fef4Smrg# Run './libtool --help' for help with using this script from the 430d16fef4Smrg# command line. 440d16fef4Smrg 450d16fef4Smrg 460d16fef4Smrg## ------------------------------- ## 470d16fef4Smrg## User overridable command paths. ## 480d16fef4Smrg## ------------------------------- ## 490d16fef4Smrg 500d16fef4Smrg# After configure completes, it has a better idea of some of the 510d16fef4Smrg# shell tools we need than the defaults used by the functions shared 520d16fef4Smrg# with bootstrap, so set those here where they can still be over- 530d16fef4Smrg# ridden by the user, but otherwise take precedence. 540d16fef4Smrg 550d16fef4Smrg: ${AUTOCONF="autoconf"} 560d16fef4Smrg: ${AUTOMAKE="automake"} 570d16fef4Smrg 580d16fef4Smrg 590d16fef4Smrg## -------------------------- ## 600d16fef4Smrg## Source external libraries. ## 610d16fef4Smrg## -------------------------- ## 620d16fef4Smrg 630d16fef4Smrg# Much of our low-level functionality needs to be sourced from external 640d16fef4Smrg# libraries, which are installed to $pkgauxdir. 650d16fef4Smrg 660d16fef4Smrg# Set a version string for this script. 670d16fef4Smrgscriptversion=2015-01-20.17; # UTC 680d16fef4Smrg 690d16fef4Smrg# General shell script boiler plate, and helper functions. 700d16fef4Smrg# Written by Gary V. Vaughan, 2004 710d16fef4Smrg 720d16fef4Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc. 730d16fef4Smrg# This is free software; see the source for copying conditions. There is NO 740d16fef4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 750d16fef4Smrg 760d16fef4Smrg# This program is free software; you can redistribute it and/or modify 770d16fef4Smrg# it under the terms of the GNU General Public License as published by 780d16fef4Smrg# the Free Software Foundation; either version 3 of the License, or 790d16fef4Smrg# (at your option) any later version. 800d16fef4Smrg 810d16fef4Smrg# As a special exception to the GNU General Public License, if you distribute 820d16fef4Smrg# this file as part of a program or library that is built using GNU Libtool, 830d16fef4Smrg# you may include this file under the same distribution terms that you use 840d16fef4Smrg# for the rest of that program. 850d16fef4Smrg 860d16fef4Smrg# This program is distributed in the hope that it will be useful, 870d16fef4Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 880d16fef4Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 890d16fef4Smrg# General Public License for more details. 900d16fef4Smrg 910d16fef4Smrg# You should have received a copy of the GNU General Public License 920d16fef4Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 930d16fef4Smrg 940d16fef4Smrg# Please report bugs or propose patches to gary@gnu.org. 950d16fef4Smrg 960d16fef4Smrg 970d16fef4Smrg## ------ ## 980d16fef4Smrg## Usage. ## 990d16fef4Smrg## ------ ## 1000d16fef4Smrg 1010d16fef4Smrg# Evaluate this file near the top of your script to gain access to 1020d16fef4Smrg# the functions and variables defined here: 1030d16fef4Smrg# 1040d16fef4Smrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 1050d16fef4Smrg# 1060d16fef4Smrg# If you need to override any of the default environment variable 1070d16fef4Smrg# settings, do that before evaluating this file. 1080d16fef4Smrg 1090d16fef4Smrg 1100d16fef4Smrg## -------------------- ## 1110d16fef4Smrg## Shell normalisation. ## 1120d16fef4Smrg## -------------------- ## 1130d16fef4Smrg 1140d16fef4Smrg# Some shells need a little help to be as Bourne compatible as possible. 1150d16fef4Smrg# Before doing anything else, make sure all that help has been provided! 1160d16fef4Smrg 1170d16fef4SmrgDUALCASE=1; export DUALCASE # for MKS sh 1180d16fef4Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 119de2362d3Smrg emulate sh 120de2362d3Smrg NULLCMD=: 1210d16fef4Smrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 122de2362d3Smrg # is contrary to our usage. Disable this feature. 123de2362d3Smrg alias -g '${1+"$@"}'='"$@"' 124de2362d3Smrg setopt NO_GLOB_SUBST 125de2362d3Smrgelse 1260d16fef4Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 127de2362d3Smrgfi 128de2362d3Smrg 1290d16fef4Smrg# NLS nuisances: We save the old values in case they are required later. 1300d16fef4Smrg_G_user_locale= 1310d16fef4Smrg_G_safe_locale= 1320d16fef4Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 133de2362d3Smrgdo 1340d16fef4Smrg eval "if test set = \"\${$_G_var+set}\"; then 1350d16fef4Smrg save_$_G_var=\$$_G_var 1360d16fef4Smrg $_G_var=C 1370d16fef4Smrg export $_G_var 1380d16fef4Smrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 1390d16fef4Smrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 140de2362d3Smrg fi" 141de2362d3Smrgdone 142de2362d3Smrg 1430d16fef4Smrg# CDPATH. 1440d16fef4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 145de2362d3Smrg 1460d16fef4Smrg# Make sure IFS has a sensible default 1470d16fef4Smrgsp=' ' 1480d16fef4Smrgnl=' 1490d16fef4Smrg' 1500d16fef4SmrgIFS="$sp $nl" 1510d16fef4Smrg 1520d16fef4Smrg# There are apparently some retarded systems that use ';' as a PATH separator! 1530d16fef4Smrgif test "${PATH_SEPARATOR+set}" != set; then 1540d16fef4Smrg PATH_SEPARATOR=: 1550d16fef4Smrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 1560d16fef4Smrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 1570d16fef4Smrg PATH_SEPARATOR=';' 1580d16fef4Smrg } 1590d16fef4Smrgfi 160de2362d3Smrg 161de2362d3Smrg 162de2362d3Smrg 1630d16fef4Smrg## ------------------------- ## 1640d16fef4Smrg## Locate command utilities. ## 1650d16fef4Smrg## ------------------------- ## 1660d16fef4Smrg 1670d16fef4Smrg 1680d16fef4Smrg# func_executable_p FILE 1690d16fef4Smrg# ---------------------- 1700d16fef4Smrg# Check that FILE is an executable regular file. 1710d16fef4Smrgfunc_executable_p () 1720d16fef4Smrg{ 1730d16fef4Smrg test -f "$1" && test -x "$1" 1740d16fef4Smrg} 1750d16fef4Smrg 1760d16fef4Smrg 1770d16fef4Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 1780d16fef4Smrg# -------------------------------------------- 1790d16fef4Smrg# Search for either a program that responds to --version with output 1800d16fef4Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 1810d16fef4Smrg# trying all the directories in PATH with each of the elements of 1820d16fef4Smrg# PROGS_LIST. 1830d16fef4Smrg# 1840d16fef4Smrg# CHECK_FUNC should accept the path to a candidate program, and 1850d16fef4Smrg# set $func_check_prog_result if it truncates its output less than 1860d16fef4Smrg# $_G_path_prog_max characters. 1870d16fef4Smrgfunc_path_progs () 1880d16fef4Smrg{ 1890d16fef4Smrg _G_progs_list=$1 1900d16fef4Smrg _G_check_func=$2 1910d16fef4Smrg _G_PATH=${3-"$PATH"} 1920d16fef4Smrg 1930d16fef4Smrg _G_path_prog_max=0 1940d16fef4Smrg _G_path_prog_found=false 1950d16fef4Smrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 1960d16fef4Smrg for _G_dir in $_G_PATH; do 1970d16fef4Smrg IFS=$_G_save_IFS 1980d16fef4Smrg test -z "$_G_dir" && _G_dir=. 1990d16fef4Smrg for _G_prog_name in $_G_progs_list; do 2000d16fef4Smrg for _exeext in '' .EXE; do 2010d16fef4Smrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 2020d16fef4Smrg func_executable_p "$_G_path_prog" || continue 2030d16fef4Smrg case `"$_G_path_prog" --version 2>&1` in 2040d16fef4Smrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 2050d16fef4Smrg *) $_G_check_func $_G_path_prog 2060d16fef4Smrg func_path_progs_result=$func_check_prog_result 2070d16fef4Smrg ;; 2080d16fef4Smrg esac 2090d16fef4Smrg $_G_path_prog_found && break 3 2100d16fef4Smrg done 2110d16fef4Smrg done 2120d16fef4Smrg done 2130d16fef4Smrg IFS=$_G_save_IFS 2140d16fef4Smrg test -z "$func_path_progs_result" && { 2150d16fef4Smrg echo "no acceptable sed could be found in \$PATH" >&2 2160d16fef4Smrg exit 1 2170d16fef4Smrg } 2180d16fef4Smrg} 2190d16fef4Smrg 2200d16fef4Smrg 2210d16fef4Smrg# We want to be able to use the functions in this file before configure 2220d16fef4Smrg# has figured out where the best binaries are kept, which means we have 2230d16fef4Smrg# to search for them ourselves - except when the results are already set 2240d16fef4Smrg# where we skip the searches. 2250d16fef4Smrg 2260d16fef4Smrg# Unless the user overrides by setting SED, search the path for either GNU 2270d16fef4Smrg# sed, or the sed that truncates its output the least. 2280d16fef4Smrgtest -z "$SED" && { 2290d16fef4Smrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 2300d16fef4Smrg for _G_i in 1 2 3 4 5 6 7; do 2310d16fef4Smrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 2320d16fef4Smrg done 2330d16fef4Smrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 2340d16fef4Smrg _G_sed_script= 2350d16fef4Smrg 2360d16fef4Smrg func_check_prog_sed () 2370d16fef4Smrg { 2380d16fef4Smrg _G_path_prog=$1 2390d16fef4Smrg 2400d16fef4Smrg _G_count=0 2410d16fef4Smrg printf 0123456789 >conftest.in 2420d16fef4Smrg while : 2430d16fef4Smrg do 2440d16fef4Smrg cat conftest.in conftest.in >conftest.tmp 2450d16fef4Smrg mv conftest.tmp conftest.in 2460d16fef4Smrg cp conftest.in conftest.nl 2470d16fef4Smrg echo '' >> conftest.nl 2480d16fef4Smrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 2490d16fef4Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 2500d16fef4Smrg _G_count=`expr $_G_count + 1` 2510d16fef4Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 2520d16fef4Smrg # Best one so far, save it but keep looking for a better one 2530d16fef4Smrg func_check_prog_result=$_G_path_prog 2540d16fef4Smrg _G_path_prog_max=$_G_count 2550d16fef4Smrg fi 2560d16fef4Smrg # 10*(2^10) chars as input seems more than enough 2570d16fef4Smrg test 10 -lt "$_G_count" && break 2580d16fef4Smrg done 2590d16fef4Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 2600d16fef4Smrg } 2610d16fef4Smrg 2620d16fef4Smrg func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 2630d16fef4Smrg rm -f conftest.sed 2640d16fef4Smrg SED=$func_path_progs_result 2650d16fef4Smrg} 2660d16fef4Smrg 2670d16fef4Smrg 2680d16fef4Smrg# Unless the user overrides by setting GREP, search the path for either GNU 2690d16fef4Smrg# grep, or the grep that truncates its output the least. 2700d16fef4Smrgtest -z "$GREP" && { 2710d16fef4Smrg func_check_prog_grep () 2720d16fef4Smrg { 2730d16fef4Smrg _G_path_prog=$1 2740d16fef4Smrg 2750d16fef4Smrg _G_count=0 2760d16fef4Smrg _G_path_prog_max=0 2770d16fef4Smrg printf 0123456789 >conftest.in 2780d16fef4Smrg while : 2790d16fef4Smrg do 2800d16fef4Smrg cat conftest.in conftest.in >conftest.tmp 2810d16fef4Smrg mv conftest.tmp conftest.in 2820d16fef4Smrg cp conftest.in conftest.nl 2830d16fef4Smrg echo 'GREP' >> conftest.nl 2840d16fef4Smrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 2850d16fef4Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 2860d16fef4Smrg _G_count=`expr $_G_count + 1` 2870d16fef4Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 2880d16fef4Smrg # Best one so far, save it but keep looking for a better one 2890d16fef4Smrg func_check_prog_result=$_G_path_prog 2900d16fef4Smrg _G_path_prog_max=$_G_count 2910d16fef4Smrg fi 2920d16fef4Smrg # 10*(2^10) chars as input seems more than enough 2930d16fef4Smrg test 10 -lt "$_G_count" && break 2940d16fef4Smrg done 2950d16fef4Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 2960d16fef4Smrg } 2970d16fef4Smrg 2980d16fef4Smrg func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 2990d16fef4Smrg GREP=$func_path_progs_result 3000d16fef4Smrg} 3010d16fef4Smrg 3020d16fef4Smrg 3030d16fef4Smrg## ------------------------------- ## 3040d16fef4Smrg## User overridable command paths. ## 3050d16fef4Smrg## ------------------------------- ## 3060d16fef4Smrg 3070d16fef4Smrg# All uppercase variable names are used for environment variables. These 3080d16fef4Smrg# variables can be overridden by the user before calling a script that 3090d16fef4Smrg# uses them if a suitable command of that name is not already available 3100d16fef4Smrg# in the command search PATH. 311de2362d3Smrg 312de2362d3Smrg: ${CP="cp -f"} 3130d16fef4Smrg: ${ECHO="printf %s\n"} 3140d16fef4Smrg: ${EGREP="$GREP -E"} 3150d16fef4Smrg: ${FGREP="$GREP -F"} 3160d16fef4Smrg: ${LN_S="ln -s"} 317de2362d3Smrg: ${MAKE="make"} 318de2362d3Smrg: ${MKDIR="mkdir"} 319de2362d3Smrg: ${MV="mv -f"} 320de2362d3Smrg: ${RM="rm -f"} 321de2362d3Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 322de2362d3Smrg 323de2362d3Smrg 3240d16fef4Smrg## -------------------- ## 3250d16fef4Smrg## Useful sed snippets. ## 3260d16fef4Smrg## -------------------- ## 327de2362d3Smrg 3280d16fef4Smrgsed_dirname='s|/[^/]*$||' 3290d16fef4Smrgsed_basename='s|^.*/||' 330de2362d3Smrg 3310d16fef4Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3320d16fef4Smrg# metacharacters that are still active within double-quoted strings. 3330d16fef4Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 334de2362d3Smrg 3350d16fef4Smrg# Same as above, but do not quote variable references. 3360d16fef4Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 337de2362d3Smrg 3380d16fef4Smrg# Sed substitution that turns a string into a regex matching for the 3390d16fef4Smrg# string literally. 3400d16fef4Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 341de2362d3Smrg 3420d16fef4Smrg# Sed substitution that converts a w32 file name or path 3430d16fef4Smrg# that contains forward slashes, into one that contains 3440d16fef4Smrg# (escaped) backslashes. A very naive implementation. 3450d16fef4Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3460d16fef4Smrg 3470d16fef4Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 3480d16fef4Smrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 3490d16fef4Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from 3500d16fef4Smrg# expansion. Since each input '\' is now two '\'s, look for any number 3510d16fef4Smrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 3520d16fef4Smrg_G_bs='\\' 3530d16fef4Smrg_G_bs2='\\\\' 3540d16fef4Smrg_G_bs4='\\\\\\\\' 3550d16fef4Smrg_G_dollar='\$' 3560d16fef4Smrgsed_double_backslash="\ 3570d16fef4Smrg s/$_G_bs4/&\\ 3580d16fef4Smrg/g 3590d16fef4Smrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 3600d16fef4Smrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 3610d16fef4Smrg s/\n//g" 362de2362d3Smrg 363de2362d3Smrg 3640d16fef4Smrg## ----------------- ## 3650d16fef4Smrg## Global variables. ## 3660d16fef4Smrg## ----------------- ## 367de2362d3Smrg 3680d16fef4Smrg# Except for the global variables explicitly listed below, the following 3690d16fef4Smrg# functions in the '^func_' namespace, and the '^require_' namespace 3700d16fef4Smrg# variables initialised in the 'Resource management' section, sourcing 3710d16fef4Smrg# this file will not pollute your global namespace with anything 3720d16fef4Smrg# else. There's no portable way to scope variables in Bourne shell 3730d16fef4Smrg# though, so actually running these functions will sometimes place 3740d16fef4Smrg# results into a variable named after the function, and often use 3750d16fef4Smrg# temporary variables in the '^_G_' namespace. If you are careful to 3760d16fef4Smrg# avoid using those namespaces casually in your sourcing script, things 3770d16fef4Smrg# should continue to work as you expect. And, of course, you can freely 3780d16fef4Smrg# overwrite any of the functions or variables defined here before 3790d16fef4Smrg# calling anything to customize them. 380de2362d3Smrg 3810d16fef4SmrgEXIT_SUCCESS=0 3820d16fef4SmrgEXIT_FAILURE=1 3830d16fef4SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 3840d16fef4SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 385de2362d3Smrg 3860d16fef4Smrg# Allow overriding, eg assuming that you follow the convention of 3870d16fef4Smrg# putting '$debug_cmd' at the start of all your functions, you can get 3880d16fef4Smrg# bash to show function call trace with: 3890d16fef4Smrg# 3900d16fef4Smrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 3910d16fef4Smrgdebug_cmd=${debug_cmd-":"} 3920d16fef4Smrgexit_cmd=: 393de2362d3Smrg 3940d16fef4Smrg# By convention, finish your script with: 3950d16fef4Smrg# 3960d16fef4Smrg# exit $exit_status 3970d16fef4Smrg# 3980d16fef4Smrg# so that you can set exit_status to non-zero if you want to indicate 3990d16fef4Smrg# something went wrong during execution without actually bailing out at 4000d16fef4Smrg# the point of failure. 4010d16fef4Smrgexit_status=$EXIT_SUCCESS 402de2362d3Smrg 4030d16fef4Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 4040d16fef4Smrg# is ksh but when the shell is invoked as "sh" and the current value of 4050d16fef4Smrg# the _XPG environment variable is not equal to 1 (one), the special 4060d16fef4Smrg# positional parameter $0, within a function call, is the name of the 4070d16fef4Smrg# function. 4080d16fef4Smrgprogpath=$0 409de2362d3Smrg 4100d16fef4Smrg# The name of this program. 4110d16fef4Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 412de2362d3Smrg 4130d16fef4Smrg# Make sure we have an absolute progpath for reexecution: 414de2362d3Smrgcase $progpath in 415de2362d3Smrg [\\/]*|[A-Za-z]:\\*) ;; 416de2362d3Smrg *[\\/]*) 4170d16fef4Smrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 418de2362d3Smrg progdir=`cd "$progdir" && pwd` 4190d16fef4Smrg progpath=$progdir/$progname 420de2362d3Smrg ;; 421de2362d3Smrg *) 4220d16fef4Smrg _G_IFS=$IFS 423de2362d3Smrg IFS=${PATH_SEPARATOR-:} 424de2362d3Smrg for progdir in $PATH; do 4250d16fef4Smrg IFS=$_G_IFS 426de2362d3Smrg test -x "$progdir/$progname" && break 427de2362d3Smrg done 4280d16fef4Smrg IFS=$_G_IFS 429de2362d3Smrg test -n "$progdir" || progdir=`pwd` 4300d16fef4Smrg progpath=$progdir/$progname 431de2362d3Smrg ;; 432de2362d3Smrgesac 433de2362d3Smrg 434de2362d3Smrg 4350d16fef4Smrg## ----------------- ## 4360d16fef4Smrg## Standard options. ## 4370d16fef4Smrg## ----------------- ## 438de2362d3Smrg 4390d16fef4Smrg# The following options affect the operation of the functions defined 4400d16fef4Smrg# below, and should be set appropriately depending on run-time para- 4410d16fef4Smrg# meters passed on the command line. 442de2362d3Smrg 443de2362d3Smrgopt_dry_run=false 444de2362d3Smrgopt_quiet=false 445de2362d3Smrgopt_verbose=false 446de2362d3Smrg 4470d16fef4Smrg# Categories 'all' and 'none' are always available. Append any others 4480d16fef4Smrg# you will pass as the first argument to func_warning from your own 4490d16fef4Smrg# code. 4500d16fef4Smrgwarning_categories= 451de2362d3Smrg 4520d16fef4Smrg# By default, display warnings according to 'opt_warning_types'. Set 4530d16fef4Smrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 4540d16fef4Smrg# treat the next displayed warning as a fatal error. 4550d16fef4Smrgwarning_func=func_warn_and_continue 456de2362d3Smrg 4570d16fef4Smrg# Set to 'all' to display all warnings, 'none' to suppress all 4580d16fef4Smrg# warnings, or a space delimited list of some subset of 4590d16fef4Smrg# 'warning_categories' to display only the listed warnings. 4600d16fef4Smrgopt_warning_types=all 461de2362d3Smrg 462de2362d3Smrg 4630d16fef4Smrg## -------------------- ## 4640d16fef4Smrg## Resource management. ## 4650d16fef4Smrg## -------------------- ## 466de2362d3Smrg 4670d16fef4Smrg# This section contains definitions for functions that each ensure a 4680d16fef4Smrg# particular resource (a file, or a non-empty configuration variable for 4690d16fef4Smrg# example) is available, and if appropriate to extract default values 4700d16fef4Smrg# from pertinent package files. Call them using their associated 4710d16fef4Smrg# 'require_*' variable to ensure that they are executed, at most, once. 4720d16fef4Smrg# 4730d16fef4Smrg# It's entirely deliberate that calling these functions can set 4740d16fef4Smrg# variables that don't obey the namespace limitations obeyed by the rest 4750d16fef4Smrg# of this file, in order that that they be as useful as possible to 4760d16fef4Smrg# callers. 477de2362d3Smrg 478de2362d3Smrg 4790d16fef4Smrg# require_term_colors 4800d16fef4Smrg# ------------------- 4810d16fef4Smrg# Allow display of bold text on terminals that support it. 4820d16fef4Smrgrequire_term_colors=func_require_term_colors 4830d16fef4Smrgfunc_require_term_colors () 484de2362d3Smrg{ 4850d16fef4Smrg $debug_cmd 4860d16fef4Smrg 4870d16fef4Smrg test -t 1 && { 4880d16fef4Smrg # COLORTERM and USE_ANSI_COLORS environment variables take 4890d16fef4Smrg # precedence, because most terminfo databases neglect to describe 4900d16fef4Smrg # whether color sequences are supported. 4910d16fef4Smrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 4920d16fef4Smrg 4930d16fef4Smrg if test 1 = "$USE_ANSI_COLORS"; then 4940d16fef4Smrg # Standard ANSI escape sequences 4950d16fef4Smrg tc_reset='[0m' 4960d16fef4Smrg tc_bold='[1m'; tc_standout='[7m' 4970d16fef4Smrg tc_red='[31m'; tc_green='[32m' 4980d16fef4Smrg tc_blue='[34m'; tc_cyan='[36m' 4990d16fef4Smrg else 5000d16fef4Smrg # Otherwise trust the terminfo database after all. 5010d16fef4Smrg test -n "`tput sgr0 2>/dev/null`" && { 5020d16fef4Smrg tc_reset=`tput sgr0` 5030d16fef4Smrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 5040d16fef4Smrg tc_standout=$tc_bold 5050d16fef4Smrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 5060d16fef4Smrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 5070d16fef4Smrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 5080d16fef4Smrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 5090d16fef4Smrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 5100d16fef4Smrg } 5110d16fef4Smrg fi 5120d16fef4Smrg } 513de2362d3Smrg 5140d16fef4Smrg require_term_colors=: 515de2362d3Smrg} 516de2362d3Smrg 517de2362d3Smrg 5180d16fef4Smrg## ----------------- ## 5190d16fef4Smrg## Function library. ## 5200d16fef4Smrg## ----------------- ## 5210d16fef4Smrg 5220d16fef4Smrg# This section contains a variety of useful functions to call in your 5230d16fef4Smrg# scripts. Take note of the portable wrappers for features provided by 5240d16fef4Smrg# some modern shells, which will fall back to slower equivalents on 5250d16fef4Smrg# less featureful shells. 5260d16fef4Smrg 5270d16fef4Smrg 5280d16fef4Smrg# func_append VAR VALUE 5290d16fef4Smrg# --------------------- 5300d16fef4Smrg# Append VALUE onto the existing contents of VAR. 5310d16fef4Smrg 5320d16fef4Smrg # We should try to minimise forks, especially on Windows where they are 5330d16fef4Smrg # unreasonably slow, so skip the feature probes when bash or zsh are 5340d16fef4Smrg # being used: 5350d16fef4Smrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 5360d16fef4Smrg : ${_G_HAVE_ARITH_OP="yes"} 5370d16fef4Smrg : ${_G_HAVE_XSI_OPS="yes"} 5380d16fef4Smrg # The += operator was introduced in bash 3.1 5390d16fef4Smrg case $BASH_VERSION in 5400d16fef4Smrg [12].* | 3.0 | 3.0*) ;; 5410d16fef4Smrg *) 5420d16fef4Smrg : ${_G_HAVE_PLUSEQ_OP="yes"} 5430d16fef4Smrg ;; 5440d16fef4Smrg esac 5450d16fef4Smrg fi 5460d16fef4Smrg 5470d16fef4Smrg # _G_HAVE_PLUSEQ_OP 5480d16fef4Smrg # Can be empty, in which case the shell is probed, "yes" if += is 5490d16fef4Smrg # useable or anything else if it does not work. 5500d16fef4Smrg test -z "$_G_HAVE_PLUSEQ_OP" \ 5510d16fef4Smrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 5520d16fef4Smrg && _G_HAVE_PLUSEQ_OP=yes 5530d16fef4Smrg 5540d16fef4Smrgif test yes = "$_G_HAVE_PLUSEQ_OP" 5550d16fef4Smrgthen 5560d16fef4Smrg # This is an XSI compatible shell, allowing a faster implementation... 5570d16fef4Smrg eval 'func_append () 5580d16fef4Smrg { 5590d16fef4Smrg $debug_cmd 5600d16fef4Smrg 5610d16fef4Smrg eval "$1+=\$2" 5620d16fef4Smrg }' 5630d16fef4Smrgelse 5640d16fef4Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 5650d16fef4Smrg func_append () 5660d16fef4Smrg { 5670d16fef4Smrg $debug_cmd 5680d16fef4Smrg 5690d16fef4Smrg eval "$1=\$$1\$2" 5700d16fef4Smrg } 5710d16fef4Smrgfi 5720d16fef4Smrg 5730d16fef4Smrg 5740d16fef4Smrg# func_append_quoted VAR VALUE 5750d16fef4Smrg# ---------------------------- 5760d16fef4Smrg# Quote VALUE and append to the end of shell variable VAR, separated 5770d16fef4Smrg# by a space. 5780d16fef4Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 5790d16fef4Smrg eval 'func_append_quoted () 5800d16fef4Smrg { 5810d16fef4Smrg $debug_cmd 5820d16fef4Smrg 5830d16fef4Smrg func_quote_for_eval "$2" 5840d16fef4Smrg eval "$1+=\\ \$func_quote_for_eval_result" 5850d16fef4Smrg }' 5860d16fef4Smrgelse 5870d16fef4Smrg func_append_quoted () 5880d16fef4Smrg { 5890d16fef4Smrg $debug_cmd 5900d16fef4Smrg 5910d16fef4Smrg func_quote_for_eval "$2" 5920d16fef4Smrg eval "$1=\$$1\\ \$func_quote_for_eval_result" 5930d16fef4Smrg } 5940d16fef4Smrgfi 5950d16fef4Smrg 5960d16fef4Smrg 5970d16fef4Smrg# func_append_uniq VAR VALUE 5980d16fef4Smrg# -------------------------- 5990d16fef4Smrg# Append unique VALUE onto the existing contents of VAR, assuming 6000d16fef4Smrg# entries are delimited by the first character of VALUE. For example: 6010d16fef4Smrg# 6020d16fef4Smrg# func_append_uniq options " --another-option option-argument" 6030d16fef4Smrg# 6040d16fef4Smrg# will only append to $options if " --another-option option-argument " 6050d16fef4Smrg# is not already present somewhere in $options already (note spaces at 6060d16fef4Smrg# each end implied by leading space in second argument). 6070d16fef4Smrgfunc_append_uniq () 6080d16fef4Smrg{ 6090d16fef4Smrg $debug_cmd 6100d16fef4Smrg 6110d16fef4Smrg eval _G_current_value='`$ECHO $'$1'`' 6120d16fef4Smrg _G_delim=`expr "$2" : '\(.\)'` 6130d16fef4Smrg 6140d16fef4Smrg case $_G_delim$_G_current_value$_G_delim in 6150d16fef4Smrg *"$2$_G_delim"*) ;; 6160d16fef4Smrg *) func_append "$@" ;; 6170d16fef4Smrg esac 6180d16fef4Smrg} 6190d16fef4Smrg 6200d16fef4Smrg 6210d16fef4Smrg# func_arith TERM... 6220d16fef4Smrg# ------------------ 6230d16fef4Smrg# Set func_arith_result to the result of evaluating TERMs. 6240d16fef4Smrg test -z "$_G_HAVE_ARITH_OP" \ 6250d16fef4Smrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 6260d16fef4Smrg && _G_HAVE_ARITH_OP=yes 6270d16fef4Smrg 6280d16fef4Smrgif test yes = "$_G_HAVE_ARITH_OP"; then 6290d16fef4Smrg eval 'func_arith () 6300d16fef4Smrg { 6310d16fef4Smrg $debug_cmd 6320d16fef4Smrg 6330d16fef4Smrg func_arith_result=$(( $* )) 6340d16fef4Smrg }' 6350d16fef4Smrgelse 6360d16fef4Smrg func_arith () 6370d16fef4Smrg { 6380d16fef4Smrg $debug_cmd 6390d16fef4Smrg 6400d16fef4Smrg func_arith_result=`expr "$@"` 6410d16fef4Smrg } 6420d16fef4Smrgfi 6430d16fef4Smrg 6440d16fef4Smrg 6450d16fef4Smrg# func_basename FILE 6460d16fef4Smrg# ------------------ 6470d16fef4Smrg# Set func_basename_result to FILE with everything up to and including 6480d16fef4Smrg# the last / stripped. 6490d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 6500d16fef4Smrg # If this shell supports suffix pattern removal, then use it to avoid 6510d16fef4Smrg # forking. Hide the definitions single quotes in case the shell chokes 6520d16fef4Smrg # on unsupported syntax... 6530d16fef4Smrg _b='func_basename_result=${1##*/}' 6540d16fef4Smrg _d='case $1 in 6550d16fef4Smrg */*) func_dirname_result=${1%/*}$2 ;; 6560d16fef4Smrg * ) func_dirname_result=$3 ;; 6570d16fef4Smrg esac' 6580d16fef4Smrg 6590d16fef4Smrgelse 6600d16fef4Smrg # ...otherwise fall back to using sed. 6610d16fef4Smrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 6620d16fef4Smrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 6630d16fef4Smrg if test "X$func_dirname_result" = "X$1"; then 6640d16fef4Smrg func_dirname_result=$3 6650d16fef4Smrg else 6660d16fef4Smrg func_append func_dirname_result "$2" 6670d16fef4Smrg fi' 6680d16fef4Smrgfi 6690d16fef4Smrg 6700d16fef4Smrgeval 'func_basename () 6710d16fef4Smrg{ 6720d16fef4Smrg $debug_cmd 6730d16fef4Smrg 6740d16fef4Smrg '"$_b"' 6750d16fef4Smrg}' 6760d16fef4Smrg 6770d16fef4Smrg 6780d16fef4Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 6790d16fef4Smrg# ------------------------------------------- 6800d16fef4Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 6810d16fef4Smrg# otherwise set result to NONDIR_REPLACEMENT. 6820d16fef4Smrgeval 'func_dirname () 6830d16fef4Smrg{ 6840d16fef4Smrg $debug_cmd 6850d16fef4Smrg 6860d16fef4Smrg '"$_d"' 6870d16fef4Smrg}' 6880d16fef4Smrg 6890d16fef4Smrg 6900d16fef4Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 6910d16fef4Smrg# -------------------------------------------------------- 6920d16fef4Smrg# Perform func_basename and func_dirname in a single function 6930d16fef4Smrg# call: 6940d16fef4Smrg# dirname: Compute the dirname of FILE. If nonempty, 6950d16fef4Smrg# add APPEND to the result, otherwise set result 6960d16fef4Smrg# to NONDIR_REPLACEMENT. 6970d16fef4Smrg# value returned in "$func_dirname_result" 6980d16fef4Smrg# basename: Compute filename of FILE. 6990d16fef4Smrg# value retuned in "$func_basename_result" 7000d16fef4Smrg# For efficiency, we do not delegate to the functions above but instead 7010d16fef4Smrg# duplicate the functionality here. 7020d16fef4Smrgeval 'func_dirname_and_basename () 7030d16fef4Smrg{ 7040d16fef4Smrg $debug_cmd 7050d16fef4Smrg 7060d16fef4Smrg '"$_b"' 7070d16fef4Smrg '"$_d"' 7080d16fef4Smrg}' 7090d16fef4Smrg 7100d16fef4Smrg 7110d16fef4Smrg# func_echo ARG... 7120d16fef4Smrg# ---------------- 7130d16fef4Smrg# Echo program name prefixed message. 7140d16fef4Smrgfunc_echo () 7150d16fef4Smrg{ 7160d16fef4Smrg $debug_cmd 7170d16fef4Smrg 7180d16fef4Smrg _G_message=$* 7190d16fef4Smrg 7200d16fef4Smrg func_echo_IFS=$IFS 7210d16fef4Smrg IFS=$nl 7220d16fef4Smrg for _G_line in $_G_message; do 7230d16fef4Smrg IFS=$func_echo_IFS 7240d16fef4Smrg $ECHO "$progname: $_G_line" 7250d16fef4Smrg done 7260d16fef4Smrg IFS=$func_echo_IFS 7270d16fef4Smrg} 7280d16fef4Smrg 7290d16fef4Smrg 7300d16fef4Smrg# func_echo_all ARG... 7310d16fef4Smrg# -------------------- 7320d16fef4Smrg# Invoke $ECHO with all args, space-separated. 7330d16fef4Smrgfunc_echo_all () 7340d16fef4Smrg{ 7350d16fef4Smrg $ECHO "$*" 7360d16fef4Smrg} 7370d16fef4Smrg 7380d16fef4Smrg 7390d16fef4Smrg# func_echo_infix_1 INFIX ARG... 7400d16fef4Smrg# ------------------------------ 7410d16fef4Smrg# Echo program name, followed by INFIX on the first line, with any 7420d16fef4Smrg# additional lines not showing INFIX. 7430d16fef4Smrgfunc_echo_infix_1 () 7440d16fef4Smrg{ 7450d16fef4Smrg $debug_cmd 7460d16fef4Smrg 7470d16fef4Smrg $require_term_colors 7480d16fef4Smrg 7490d16fef4Smrg _G_infix=$1; shift 7500d16fef4Smrg _G_indent=$_G_infix 7510d16fef4Smrg _G_prefix="$progname: $_G_infix: " 7520d16fef4Smrg _G_message=$* 7530d16fef4Smrg 7540d16fef4Smrg # Strip color escape sequences before counting printable length 7550d16fef4Smrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 7560d16fef4Smrg do 7570d16fef4Smrg test -n "$_G_tc" && { 7580d16fef4Smrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 7590d16fef4Smrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 7600d16fef4Smrg } 7610d16fef4Smrg done 7620d16fef4Smrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 7630d16fef4Smrg 7640d16fef4Smrg func_echo_infix_1_IFS=$IFS 7650d16fef4Smrg IFS=$nl 7660d16fef4Smrg for _G_line in $_G_message; do 7670d16fef4Smrg IFS=$func_echo_infix_1_IFS 7680d16fef4Smrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 7690d16fef4Smrg _G_prefix=$_G_indent 7700d16fef4Smrg done 7710d16fef4Smrg IFS=$func_echo_infix_1_IFS 7720d16fef4Smrg} 7730d16fef4Smrg 7740d16fef4Smrg 7750d16fef4Smrg# func_error ARG... 7760d16fef4Smrg# ----------------- 7770d16fef4Smrg# Echo program name prefixed message to standard error. 7780d16fef4Smrgfunc_error () 7790d16fef4Smrg{ 7800d16fef4Smrg $debug_cmd 7810d16fef4Smrg 7820d16fef4Smrg $require_term_colors 7830d16fef4Smrg 7840d16fef4Smrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 7850d16fef4Smrg} 7860d16fef4Smrg 7870d16fef4Smrg 7880d16fef4Smrg# func_fatal_error ARG... 7890d16fef4Smrg# ----------------------- 7900d16fef4Smrg# Echo program name prefixed message to standard error, and exit. 7910d16fef4Smrgfunc_fatal_error () 7920d16fef4Smrg{ 7930d16fef4Smrg $debug_cmd 7940d16fef4Smrg 7950d16fef4Smrg func_error "$*" 7960d16fef4Smrg exit $EXIT_FAILURE 7970d16fef4Smrg} 7980d16fef4Smrg 7990d16fef4Smrg 8000d16fef4Smrg# func_grep EXPRESSION FILENAME 8010d16fef4Smrg# ----------------------------- 802de2362d3Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 803de2362d3Smrgfunc_grep () 804de2362d3Smrg{ 8050d16fef4Smrg $debug_cmd 8060d16fef4Smrg 807de2362d3Smrg $GREP "$1" "$2" >/dev/null 2>&1 808de2362d3Smrg} 809de2362d3Smrg 810de2362d3Smrg 8110d16fef4Smrg# func_len STRING 8120d16fef4Smrg# --------------- 8130d16fef4Smrg# Set func_len_result to the length of STRING. STRING may not 8140d16fef4Smrg# start with a hyphen. 8150d16fef4Smrg test -z "$_G_HAVE_XSI_OPS" \ 8160d16fef4Smrg && (eval 'x=a/b/c; 8170d16fef4Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 8180d16fef4Smrg && _G_HAVE_XSI_OPS=yes 8190d16fef4Smrg 8200d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 8210d16fef4Smrg eval 'func_len () 8220d16fef4Smrg { 8230d16fef4Smrg $debug_cmd 8240d16fef4Smrg 8250d16fef4Smrg func_len_result=${#1} 8260d16fef4Smrg }' 8270d16fef4Smrgelse 8280d16fef4Smrg func_len () 8290d16fef4Smrg { 8300d16fef4Smrg $debug_cmd 8310d16fef4Smrg 8320d16fef4Smrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 8330d16fef4Smrg } 8340d16fef4Smrgfi 8350d16fef4Smrg 8360d16fef4Smrg 8370d16fef4Smrg# func_mkdir_p DIRECTORY-PATH 8380d16fef4Smrg# --------------------------- 839de2362d3Smrg# Make sure the entire path to DIRECTORY-PATH is available. 840de2362d3Smrgfunc_mkdir_p () 841de2362d3Smrg{ 8420d16fef4Smrg $debug_cmd 8430d16fef4Smrg 8440d16fef4Smrg _G_directory_path=$1 8450d16fef4Smrg _G_dir_list= 846de2362d3Smrg 8470d16fef4Smrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 848de2362d3Smrg 8490d16fef4Smrg # Protect directory names starting with '-' 8500d16fef4Smrg case $_G_directory_path in 8510d16fef4Smrg -*) _G_directory_path=./$_G_directory_path ;; 852de2362d3Smrg esac 853de2362d3Smrg 854de2362d3Smrg # While some portion of DIR does not yet exist... 8550d16fef4Smrg while test ! -d "$_G_directory_path"; do 856de2362d3Smrg # ...make a list in topmost first order. Use a colon delimited 857de2362d3Smrg # list incase some portion of path contains whitespace. 8580d16fef4Smrg _G_dir_list=$_G_directory_path:$_G_dir_list 859de2362d3Smrg 860de2362d3Smrg # If the last portion added has no slash in it, the list is done 8610d16fef4Smrg case $_G_directory_path in */*) ;; *) break ;; esac 862de2362d3Smrg 863de2362d3Smrg # ...otherwise throw away the child directory and loop 8640d16fef4Smrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 865de2362d3Smrg done 8660d16fef4Smrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 867de2362d3Smrg 8680d16fef4Smrg func_mkdir_p_IFS=$IFS; IFS=: 8690d16fef4Smrg for _G_dir in $_G_dir_list; do 8700d16fef4Smrg IFS=$func_mkdir_p_IFS 8710d16fef4Smrg # mkdir can fail with a 'File exist' error if two processes 872de2362d3Smrg # try to create one of the directories concurrently. Don't 873de2362d3Smrg # stop in that case! 8740d16fef4Smrg $MKDIR "$_G_dir" 2>/dev/null || : 875de2362d3Smrg done 8760d16fef4Smrg IFS=$func_mkdir_p_IFS 877de2362d3Smrg 878de2362d3Smrg # Bail out if we (or some other process) failed to create a directory. 8790d16fef4Smrg test -d "$_G_directory_path" || \ 8800d16fef4Smrg func_fatal_error "Failed to create '$1'" 881de2362d3Smrg fi 882de2362d3Smrg} 883de2362d3Smrg 884de2362d3Smrg 8850d16fef4Smrg# func_mktempdir [BASENAME] 8860d16fef4Smrg# ------------------------- 887de2362d3Smrg# Make a temporary directory that won't clash with other running 888de2362d3Smrg# libtool processes, and avoids race conditions if possible. If 8890d16fef4Smrg# given, BASENAME is the basename for that directory. 890de2362d3Smrgfunc_mktempdir () 891de2362d3Smrg{ 8920d16fef4Smrg $debug_cmd 8930d16fef4Smrg 8940d16fef4Smrg _G_template=${TMPDIR-/tmp}/${1-$progname} 895de2362d3Smrg 8960d16fef4Smrg if test : = "$opt_dry_run"; then 897de2362d3Smrg # Return a directory name, but don't create it in dry-run mode 8980d16fef4Smrg _G_tmpdir=$_G_template-$$ 899de2362d3Smrg else 900de2362d3Smrg 901de2362d3Smrg # If mktemp works, use that first and foremost 9020d16fef4Smrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 903de2362d3Smrg 9040d16fef4Smrg if test ! -d "$_G_tmpdir"; then 905de2362d3Smrg # Failing that, at least try and use $RANDOM to avoid a race 9060d16fef4Smrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 907de2362d3Smrg 9080d16fef4Smrg func_mktempdir_umask=`umask` 909de2362d3Smrg umask 0077 9100d16fef4Smrg $MKDIR "$_G_tmpdir" 9110d16fef4Smrg umask $func_mktempdir_umask 912de2362d3Smrg fi 913de2362d3Smrg 914de2362d3Smrg # If we're not in dry-run mode, bomb out on failure 9150d16fef4Smrg test -d "$_G_tmpdir" || \ 9160d16fef4Smrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 917de2362d3Smrg fi 918de2362d3Smrg 9190d16fef4Smrg $ECHO "$_G_tmpdir" 920de2362d3Smrg} 921de2362d3Smrg 922de2362d3Smrg 9230d16fef4Smrg# func_normal_abspath PATH 9240d16fef4Smrg# ------------------------ 9250d16fef4Smrg# Remove doubled-up and trailing slashes, "." path components, 9260d16fef4Smrg# and cancel out any ".." path components in PATH after making 9270d16fef4Smrg# it an absolute path. 9280d16fef4Smrgfunc_normal_abspath () 929de2362d3Smrg{ 9300d16fef4Smrg $debug_cmd 931de2362d3Smrg 9320d16fef4Smrg # These SED scripts presuppose an absolute path with a trailing slash. 9330d16fef4Smrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 9340d16fef4Smrg _G_pathcdr='s|^/[^/]*||' 9350d16fef4Smrg _G_removedotparts=':dotsl 9360d16fef4Smrg s|/\./|/|g 9370d16fef4Smrg t dotsl 9380d16fef4Smrg s|/\.$|/|' 9390d16fef4Smrg _G_collapseslashes='s|/\{1,\}|/|g' 9400d16fef4Smrg _G_finalslash='s|/*$|/|' 9410d16fef4Smrg 9420d16fef4Smrg # Start from root dir and reassemble the path. 9430d16fef4Smrg func_normal_abspath_result= 9440d16fef4Smrg func_normal_abspath_tpath=$1 9450d16fef4Smrg func_normal_abspath_altnamespace= 9460d16fef4Smrg case $func_normal_abspath_tpath in 9470d16fef4Smrg "") 9480d16fef4Smrg # Empty path, that just means $cwd. 9490d16fef4Smrg func_stripname '' '/' "`pwd`" 9500d16fef4Smrg func_normal_abspath_result=$func_stripname_result 9510d16fef4Smrg return 9520d16fef4Smrg ;; 9530d16fef4Smrg # The next three entries are used to spot a run of precisely 9540d16fef4Smrg # two leading slashes without using negated character classes; 9550d16fef4Smrg # we take advantage of case's first-match behaviour. 9560d16fef4Smrg ///*) 9570d16fef4Smrg # Unusual form of absolute path, do nothing. 9580d16fef4Smrg ;; 9590d16fef4Smrg //*) 9600d16fef4Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 9610d16fef4Smrg # and for example Cygwin uses it to access remote file shares 9620d16fef4Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 9630d16fef4Smrg func_normal_abspath_altnamespace=/ 9640d16fef4Smrg ;; 9650d16fef4Smrg /*) 9660d16fef4Smrg # Absolute path, do nothing. 967de2362d3Smrg ;; 968de2362d3Smrg *) 9690d16fef4Smrg # Relative path, prepend $cwd. 9700d16fef4Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 9710d16fef4Smrg ;; 972de2362d3Smrg esac 9730d16fef4Smrg 9740d16fef4Smrg # Cancel out all the simple stuff to save iterations. We also want 9750d16fef4Smrg # the path to end with a slash for ease of parsing, so make sure 9760d16fef4Smrg # there is one (and only one) here. 9770d16fef4Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9780d16fef4Smrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 9790d16fef4Smrg while :; do 9800d16fef4Smrg # Processed it all yet? 9810d16fef4Smrg if test / = "$func_normal_abspath_tpath"; then 9820d16fef4Smrg # If we ascended to the root using ".." the result may be empty now. 9830d16fef4Smrg if test -z "$func_normal_abspath_result"; then 9840d16fef4Smrg func_normal_abspath_result=/ 9850d16fef4Smrg fi 9860d16fef4Smrg break 9870d16fef4Smrg fi 9880d16fef4Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9890d16fef4Smrg -e "$_G_pathcar"` 9900d16fef4Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9910d16fef4Smrg -e "$_G_pathcdr"` 9920d16fef4Smrg # Figure out what to do with it 9930d16fef4Smrg case $func_normal_abspath_tcomponent in 9940d16fef4Smrg "") 9950d16fef4Smrg # Trailing empty path component, ignore it. 9960d16fef4Smrg ;; 9970d16fef4Smrg ..) 9980d16fef4Smrg # Parent dir; strip last assembled component from result. 9990d16fef4Smrg func_dirname "$func_normal_abspath_result" 10000d16fef4Smrg func_normal_abspath_result=$func_dirname_result 10010d16fef4Smrg ;; 10020d16fef4Smrg *) 10030d16fef4Smrg # Actual path component, append it. 10040d16fef4Smrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 10050d16fef4Smrg ;; 10060d16fef4Smrg esac 10070d16fef4Smrg done 10080d16fef4Smrg # Restore leading double-slash if one was found on entry. 10090d16fef4Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 10100d16fef4Smrg} 10110d16fef4Smrg 10120d16fef4Smrg 10130d16fef4Smrg# func_notquiet ARG... 10140d16fef4Smrg# -------------------- 10150d16fef4Smrg# Echo program name prefixed message only when not in quiet mode. 10160d16fef4Smrgfunc_notquiet () 10170d16fef4Smrg{ 10180d16fef4Smrg $debug_cmd 10190d16fef4Smrg 10200d16fef4Smrg $opt_quiet || func_echo ${1+"$@"} 10210d16fef4Smrg 10220d16fef4Smrg # A bug in bash halts the script if the last line of a function 10230d16fef4Smrg # fails when set -e is in force, so we need another command to 10240d16fef4Smrg # work around that: 10250d16fef4Smrg : 10260d16fef4Smrg} 10270d16fef4Smrg 10280d16fef4Smrg 10290d16fef4Smrg# func_relative_path SRCDIR DSTDIR 10300d16fef4Smrg# -------------------------------- 10310d16fef4Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 10320d16fef4Smrgfunc_relative_path () 10330d16fef4Smrg{ 10340d16fef4Smrg $debug_cmd 10350d16fef4Smrg 10360d16fef4Smrg func_relative_path_result= 10370d16fef4Smrg func_normal_abspath "$1" 10380d16fef4Smrg func_relative_path_tlibdir=$func_normal_abspath_result 10390d16fef4Smrg func_normal_abspath "$2" 10400d16fef4Smrg func_relative_path_tbindir=$func_normal_abspath_result 10410d16fef4Smrg 10420d16fef4Smrg # Ascend the tree starting from libdir 10430d16fef4Smrg while :; do 10440d16fef4Smrg # check if we have found a prefix of bindir 10450d16fef4Smrg case $func_relative_path_tbindir in 10460d16fef4Smrg $func_relative_path_tlibdir) 10470d16fef4Smrg # found an exact match 10480d16fef4Smrg func_relative_path_tcancelled= 10490d16fef4Smrg break 10500d16fef4Smrg ;; 10510d16fef4Smrg $func_relative_path_tlibdir*) 10520d16fef4Smrg # found a matching prefix 10530d16fef4Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 10540d16fef4Smrg func_relative_path_tcancelled=$func_stripname_result 10550d16fef4Smrg if test -z "$func_relative_path_result"; then 10560d16fef4Smrg func_relative_path_result=. 10570d16fef4Smrg fi 10580d16fef4Smrg break 10590d16fef4Smrg ;; 10600d16fef4Smrg *) 10610d16fef4Smrg func_dirname $func_relative_path_tlibdir 10620d16fef4Smrg func_relative_path_tlibdir=$func_dirname_result 10630d16fef4Smrg if test -z "$func_relative_path_tlibdir"; then 10640d16fef4Smrg # Have to descend all the way to the root! 10650d16fef4Smrg func_relative_path_result=../$func_relative_path_result 10660d16fef4Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 10670d16fef4Smrg break 10680d16fef4Smrg fi 10690d16fef4Smrg func_relative_path_result=../$func_relative_path_result 10700d16fef4Smrg ;; 10710d16fef4Smrg esac 10720d16fef4Smrg done 10730d16fef4Smrg 10740d16fef4Smrg # Now calculate path; take care to avoid doubling-up slashes. 10750d16fef4Smrg func_stripname '' '/' "$func_relative_path_result" 10760d16fef4Smrg func_relative_path_result=$func_stripname_result 10770d16fef4Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 10780d16fef4Smrg if test -n "$func_stripname_result"; then 10790d16fef4Smrg func_append func_relative_path_result "/$func_stripname_result" 10800d16fef4Smrg fi 10810d16fef4Smrg 10820d16fef4Smrg # Normalisation. If bindir is libdir, return '.' else relative path. 10830d16fef4Smrg if test -n "$func_relative_path_result"; then 10840d16fef4Smrg func_stripname './' '' "$func_relative_path_result" 10850d16fef4Smrg func_relative_path_result=$func_stripname_result 10860d16fef4Smrg fi 10870d16fef4Smrg 10880d16fef4Smrg test -n "$func_relative_path_result" || func_relative_path_result=. 10890d16fef4Smrg 10900d16fef4Smrg : 1091de2362d3Smrg} 1092de2362d3Smrg 1093de2362d3Smrg 10940d16fef4Smrg# func_quote_for_eval ARG... 10950d16fef4Smrg# -------------------------- 10960d16fef4Smrg# Aesthetically quote ARGs to be evaled later. 10970d16fef4Smrg# This function returns two values: 10980d16fef4Smrg# i) func_quote_for_eval_result 10990d16fef4Smrg# double-quoted, suitable for a subsequent eval 11000d16fef4Smrg# ii) func_quote_for_eval_unquoted_result 11010d16fef4Smrg# has all characters that are still active within double 11020d16fef4Smrg# quotes backslashified. 11030d16fef4Smrgfunc_quote_for_eval () 11040d16fef4Smrg{ 11050d16fef4Smrg $debug_cmd 11060d16fef4Smrg 11070d16fef4Smrg func_quote_for_eval_unquoted_result= 11080d16fef4Smrg func_quote_for_eval_result= 11090d16fef4Smrg while test 0 -lt $#; do 11100d16fef4Smrg case $1 in 11110d16fef4Smrg *[\\\`\"\$]*) 11120d16fef4Smrg _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; 11130d16fef4Smrg *) 11140d16fef4Smrg _G_unquoted_arg=$1 ;; 11150d16fef4Smrg esac 11160d16fef4Smrg if test -n "$func_quote_for_eval_unquoted_result"; then 11170d16fef4Smrg func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 11180d16fef4Smrg else 11190d16fef4Smrg func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 11200d16fef4Smrg fi 11210d16fef4Smrg 11220d16fef4Smrg case $_G_unquoted_arg in 11230d16fef4Smrg # Double-quote args containing shell metacharacters to delay 11240d16fef4Smrg # word splitting, command substitution and variable expansion 11250d16fef4Smrg # for a subsequent eval. 11260d16fef4Smrg # Many Bourne shells cannot handle close brackets correctly 11270d16fef4Smrg # in scan sets, so we specify it separately. 11280d16fef4Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 11290d16fef4Smrg _G_quoted_arg=\"$_G_unquoted_arg\" 11300d16fef4Smrg ;; 11310d16fef4Smrg *) 11320d16fef4Smrg _G_quoted_arg=$_G_unquoted_arg 11330d16fef4Smrg ;; 11340d16fef4Smrg esac 11350d16fef4Smrg 11360d16fef4Smrg if test -n "$func_quote_for_eval_result"; then 11370d16fef4Smrg func_append func_quote_for_eval_result " $_G_quoted_arg" 11380d16fef4Smrg else 11390d16fef4Smrg func_append func_quote_for_eval_result "$_G_quoted_arg" 11400d16fef4Smrg fi 11410d16fef4Smrg shift 11420d16fef4Smrg done 11430d16fef4Smrg} 11440d16fef4Smrg 11450d16fef4Smrg 11460d16fef4Smrg# func_quote_for_expand ARG 11470d16fef4Smrg# ------------------------- 1148de2362d3Smrg# Aesthetically quote ARG to be evaled later; same as above, 1149de2362d3Smrg# but do not quote variable references. 1150de2362d3Smrgfunc_quote_for_expand () 1151de2362d3Smrg{ 11520d16fef4Smrg $debug_cmd 11530d16fef4Smrg 1154de2362d3Smrg case $1 in 1155de2362d3Smrg *[\\\`\"]*) 11560d16fef4Smrg _G_arg=`$ECHO "$1" | $SED \ 11570d16fef4Smrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 1158de2362d3Smrg *) 11590d16fef4Smrg _G_arg=$1 ;; 1160de2362d3Smrg esac 1161de2362d3Smrg 11620d16fef4Smrg case $_G_arg in 1163de2362d3Smrg # Double-quote args containing shell metacharacters to delay 1164de2362d3Smrg # word splitting and command substitution for a subsequent eval. 1165de2362d3Smrg # Many Bourne shells cannot handle close brackets correctly 1166de2362d3Smrg # in scan sets, so we specify it separately. 1167de2362d3Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 11680d16fef4Smrg _G_arg=\"$_G_arg\" 1169de2362d3Smrg ;; 1170de2362d3Smrg esac 1171de2362d3Smrg 11720d16fef4Smrg func_quote_for_expand_result=$_G_arg 11730d16fef4Smrg} 11740d16fef4Smrg 11750d16fef4Smrg 11760d16fef4Smrg# func_stripname PREFIX SUFFIX NAME 11770d16fef4Smrg# --------------------------------- 11780d16fef4Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 11790d16fef4Smrg# PREFIX and SUFFIX must not contain globbing or regex special 11800d16fef4Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 11810d16fef4Smrg# dot (in which case that matches only a dot). 11820d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 11830d16fef4Smrg eval 'func_stripname () 11840d16fef4Smrg { 11850d16fef4Smrg $debug_cmd 11860d16fef4Smrg 11870d16fef4Smrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 11880d16fef4Smrg # positional parameters, so assign one to ordinary variable first. 11890d16fef4Smrg func_stripname_result=$3 11900d16fef4Smrg func_stripname_result=${func_stripname_result#"$1"} 11910d16fef4Smrg func_stripname_result=${func_stripname_result%"$2"} 11920d16fef4Smrg }' 11930d16fef4Smrgelse 11940d16fef4Smrg func_stripname () 11950d16fef4Smrg { 11960d16fef4Smrg $debug_cmd 11970d16fef4Smrg 11980d16fef4Smrg case $2 in 11990d16fef4Smrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 12000d16fef4Smrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 12010d16fef4Smrg esac 12020d16fef4Smrg } 12030d16fef4Smrgfi 12040d16fef4Smrg 12050d16fef4Smrg 12060d16fef4Smrg# func_show_eval CMD [FAIL_EXP] 12070d16fef4Smrg# ----------------------------- 12080d16fef4Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 12090d16fef4Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 12100d16fef4Smrg# is given, then evaluate it. 12110d16fef4Smrgfunc_show_eval () 12120d16fef4Smrg{ 12130d16fef4Smrg $debug_cmd 12140d16fef4Smrg 12150d16fef4Smrg _G_cmd=$1 12160d16fef4Smrg _G_fail_exp=${2-':'} 12170d16fef4Smrg 12180d16fef4Smrg func_quote_for_expand "$_G_cmd" 12190d16fef4Smrg eval "func_notquiet $func_quote_for_expand_result" 12200d16fef4Smrg 12210d16fef4Smrg $opt_dry_run || { 12220d16fef4Smrg eval "$_G_cmd" 12230d16fef4Smrg _G_status=$? 12240d16fef4Smrg if test 0 -ne "$_G_status"; then 12250d16fef4Smrg eval "(exit $_G_status); $_G_fail_exp" 12260d16fef4Smrg fi 12270d16fef4Smrg } 12280d16fef4Smrg} 12290d16fef4Smrg 12300d16fef4Smrg 12310d16fef4Smrg# func_show_eval_locale CMD [FAIL_EXP] 12320d16fef4Smrg# ------------------------------------ 12330d16fef4Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 12340d16fef4Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 12350d16fef4Smrg# is given, then evaluate it. Use the saved locale for evaluation. 12360d16fef4Smrgfunc_show_eval_locale () 12370d16fef4Smrg{ 12380d16fef4Smrg $debug_cmd 12390d16fef4Smrg 12400d16fef4Smrg _G_cmd=$1 12410d16fef4Smrg _G_fail_exp=${2-':'} 12420d16fef4Smrg 12430d16fef4Smrg $opt_quiet || { 12440d16fef4Smrg func_quote_for_expand "$_G_cmd" 12450d16fef4Smrg eval "func_echo $func_quote_for_expand_result" 12460d16fef4Smrg } 12470d16fef4Smrg 12480d16fef4Smrg $opt_dry_run || { 12490d16fef4Smrg eval "$_G_user_locale 12500d16fef4Smrg $_G_cmd" 12510d16fef4Smrg _G_status=$? 12520d16fef4Smrg eval "$_G_safe_locale" 12530d16fef4Smrg if test 0 -ne "$_G_status"; then 12540d16fef4Smrg eval "(exit $_G_status); $_G_fail_exp" 12550d16fef4Smrg fi 12560d16fef4Smrg } 12570d16fef4Smrg} 12580d16fef4Smrg 12590d16fef4Smrg 12600d16fef4Smrg# func_tr_sh 12610d16fef4Smrg# ---------- 12620d16fef4Smrg# Turn $1 into a string suitable for a shell variable name. 12630d16fef4Smrg# Result is stored in $func_tr_sh_result. All characters 12640d16fef4Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 12650d16fef4Smrg# if $1 begins with a digit, a '_' is prepended as well. 12660d16fef4Smrgfunc_tr_sh () 12670d16fef4Smrg{ 12680d16fef4Smrg $debug_cmd 12690d16fef4Smrg 12700d16fef4Smrg case $1 in 12710d16fef4Smrg [0-9]* | *[!a-zA-Z0-9_]*) 12720d16fef4Smrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 12730d16fef4Smrg ;; 12740d16fef4Smrg * ) 12750d16fef4Smrg func_tr_sh_result=$1 12760d16fef4Smrg ;; 12770d16fef4Smrg esac 12780d16fef4Smrg} 12790d16fef4Smrg 12800d16fef4Smrg 12810d16fef4Smrg# func_verbose ARG... 12820d16fef4Smrg# ------------------- 12830d16fef4Smrg# Echo program name prefixed message in verbose mode only. 12840d16fef4Smrgfunc_verbose () 12850d16fef4Smrg{ 12860d16fef4Smrg $debug_cmd 12870d16fef4Smrg 12880d16fef4Smrg $opt_verbose && func_echo "$*" 12890d16fef4Smrg 12900d16fef4Smrg : 12910d16fef4Smrg} 12920d16fef4Smrg 12930d16fef4Smrg 12940d16fef4Smrg# func_warn_and_continue ARG... 12950d16fef4Smrg# ----------------------------- 12960d16fef4Smrg# Echo program name prefixed warning message to standard error. 12970d16fef4Smrgfunc_warn_and_continue () 12980d16fef4Smrg{ 12990d16fef4Smrg $debug_cmd 13000d16fef4Smrg 13010d16fef4Smrg $require_term_colors 13020d16fef4Smrg 13030d16fef4Smrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 13040d16fef4Smrg} 13050d16fef4Smrg 13060d16fef4Smrg 13070d16fef4Smrg# func_warning CATEGORY ARG... 13080d16fef4Smrg# ---------------------------- 13090d16fef4Smrg# Echo program name prefixed warning message to standard error. Warning 13100d16fef4Smrg# messages can be filtered according to CATEGORY, where this function 13110d16fef4Smrg# elides messages where CATEGORY is not listed in the global variable 13120d16fef4Smrg# 'opt_warning_types'. 13130d16fef4Smrgfunc_warning () 13140d16fef4Smrg{ 13150d16fef4Smrg $debug_cmd 13160d16fef4Smrg 13170d16fef4Smrg # CATEGORY must be in the warning_categories list! 13180d16fef4Smrg case " $warning_categories " in 13190d16fef4Smrg *" $1 "*) ;; 13200d16fef4Smrg *) func_internal_error "invalid warning category '$1'" ;; 13210d16fef4Smrg esac 13220d16fef4Smrg 13230d16fef4Smrg _G_category=$1 13240d16fef4Smrg shift 13250d16fef4Smrg 13260d16fef4Smrg case " $opt_warning_types " in 13270d16fef4Smrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 13280d16fef4Smrg esac 1329de2362d3Smrg} 1330de2362d3Smrg 1331de2362d3Smrg 13320d16fef4Smrg# func_sort_ver VER1 VER2 13330d16fef4Smrg# ----------------------- 13340d16fef4Smrg# 'sort -V' is not generally available. 13350d16fef4Smrg# Note this deviates from the version comparison in automake 13360d16fef4Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 13370d16fef4Smrg# but this should suffice as we won't be specifying old 13380d16fef4Smrg# version formats or redundant trailing .0 in bootstrap.conf. 13390d16fef4Smrg# If we did want full compatibility then we should probably 13400d16fef4Smrg# use m4_version_compare from autoconf. 13410d16fef4Smrgfunc_sort_ver () 13420d16fef4Smrg{ 13430d16fef4Smrg $debug_cmd 13440d16fef4Smrg 13450d16fef4Smrg printf '%s\n%s\n' "$1" "$2" \ 13460d16fef4Smrg | 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 13470d16fef4Smrg} 13480d16fef4Smrg 13490d16fef4Smrg# func_lt_ver PREV CURR 13500d16fef4Smrg# --------------------- 13510d16fef4Smrg# Return true if PREV and CURR are in the correct order according to 13520d16fef4Smrg# func_sort_ver, otherwise false. Use it like this: 13530d16fef4Smrg# 13540d16fef4Smrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 13550d16fef4Smrgfunc_lt_ver () 13560d16fef4Smrg{ 13570d16fef4Smrg $debug_cmd 13580d16fef4Smrg 13590d16fef4Smrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 13600d16fef4Smrg} 13610d16fef4Smrg 13620d16fef4Smrg 13630d16fef4Smrg# Local variables: 13640d16fef4Smrg# mode: shell-script 13650d16fef4Smrg# sh-indentation: 2 13660d16fef4Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 13670d16fef4Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 13680d16fef4Smrg# time-stamp-time-zone: "UTC" 13690d16fef4Smrg# End: 13700d16fef4Smrg#! /bin/sh 13710d16fef4Smrg 13720d16fef4Smrg# Set a version string for this script. 13730d16fef4Smrgscriptversion=2014-01-07.03; # UTC 13740d16fef4Smrg 13750d16fef4Smrg# A portable, pluggable option parser for Bourne shell. 13760d16fef4Smrg# Written by Gary V. Vaughan, 2010 13770d16fef4Smrg 13780d16fef4Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc. 13790d16fef4Smrg# This is free software; see the source for copying conditions. There is NO 13800d16fef4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13810d16fef4Smrg 13820d16fef4Smrg# This program is free software: you can redistribute it and/or modify 13830d16fef4Smrg# it under the terms of the GNU General Public License as published by 13840d16fef4Smrg# the Free Software Foundation, either version 3 of the License, or 13850d16fef4Smrg# (at your option) any later version. 13860d16fef4Smrg 13870d16fef4Smrg# This program is distributed in the hope that it will be useful, 13880d16fef4Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 13890d16fef4Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13900d16fef4Smrg# GNU General Public License for more details. 13910d16fef4Smrg 13920d16fef4Smrg# You should have received a copy of the GNU General Public License 13930d16fef4Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 13940d16fef4Smrg 13950d16fef4Smrg# Please report bugs or propose patches to gary@gnu.org. 13960d16fef4Smrg 13970d16fef4Smrg 13980d16fef4Smrg## ------ ## 13990d16fef4Smrg## Usage. ## 14000d16fef4Smrg## ------ ## 14010d16fef4Smrg 14020d16fef4Smrg# This file is a library for parsing options in your shell scripts along 14030d16fef4Smrg# with assorted other useful supporting features that you can make use 14040d16fef4Smrg# of too. 14050d16fef4Smrg# 14060d16fef4Smrg# For the simplest scripts you might need only: 14070d16fef4Smrg# 14080d16fef4Smrg# #!/bin/sh 14090d16fef4Smrg# . relative/path/to/funclib.sh 14100d16fef4Smrg# . relative/path/to/options-parser 14110d16fef4Smrg# scriptversion=1.0 14120d16fef4Smrg# func_options ${1+"$@"} 14130d16fef4Smrg# eval set dummy "$func_options_result"; shift 14140d16fef4Smrg# ...rest of your script... 14150d16fef4Smrg# 14160d16fef4Smrg# In order for the '--version' option to work, you will need to have a 14170d16fef4Smrg# suitably formatted comment like the one at the top of this file 14180d16fef4Smrg# starting with '# Written by ' and ending with '# warranty; '. 14190d16fef4Smrg# 14200d16fef4Smrg# For '-h' and '--help' to work, you will also need a one line 14210d16fef4Smrg# description of your script's purpose in a comment directly above the 14220d16fef4Smrg# '# Written by ' line, like the one at the top of this file. 14230d16fef4Smrg# 14240d16fef4Smrg# The default options also support '--debug', which will turn on shell 14250d16fef4Smrg# execution tracing (see the comment above debug_cmd below for another 14260d16fef4Smrg# use), and '--verbose' and the func_verbose function to allow your script 14270d16fef4Smrg# to display verbose messages only when your user has specified 14280d16fef4Smrg# '--verbose'. 14290d16fef4Smrg# 14300d16fef4Smrg# After sourcing this file, you can plug processing for additional 14310d16fef4Smrg# options by amending the variables from the 'Configuration' section 14320d16fef4Smrg# below, and following the instructions in the 'Option parsing' 14330d16fef4Smrg# section further down. 14340d16fef4Smrg 14350d16fef4Smrg## -------------- ## 14360d16fef4Smrg## Configuration. ## 14370d16fef4Smrg## -------------- ## 14380d16fef4Smrg 14390d16fef4Smrg# You should override these variables in your script after sourcing this 14400d16fef4Smrg# file so that they reflect the customisations you have added to the 14410d16fef4Smrg# option parser. 14420d16fef4Smrg 14430d16fef4Smrg# The usage line for option parsing errors and the start of '-h' and 14440d16fef4Smrg# '--help' output messages. You can embed shell variables for delayed 14450d16fef4Smrg# expansion at the time the message is displayed, but you will need to 14460d16fef4Smrg# quote other shell meta-characters carefully to prevent them being 14470d16fef4Smrg# expanded when the contents are evaled. 14480d16fef4Smrgusage='$progpath [OPTION]...' 14490d16fef4Smrg 14500d16fef4Smrg# Short help message in response to '-h' and '--help'. Add to this or 14510d16fef4Smrg# override it after sourcing this library to reflect the full set of 14520d16fef4Smrg# options your script accepts. 14530d16fef4Smrgusage_message="\ 14540d16fef4Smrg --debug enable verbose shell tracing 14550d16fef4Smrg -W, --warnings=CATEGORY 14560d16fef4Smrg report the warnings falling in CATEGORY [all] 14570d16fef4Smrg -v, --verbose verbosely report processing 14580d16fef4Smrg --version print version information and exit 14590d16fef4Smrg -h, --help print short or long help message and exit 14600d16fef4Smrg" 14610d16fef4Smrg 14620d16fef4Smrg# Additional text appended to 'usage_message' in response to '--help'. 14630d16fef4Smrglong_help_message=" 14640d16fef4SmrgWarning categories include: 14650d16fef4Smrg 'all' show all warnings 14660d16fef4Smrg 'none' turn off all the warnings 14670d16fef4Smrg 'error' warnings are treated as fatal errors" 14680d16fef4Smrg 14690d16fef4Smrg# Help message printed before fatal option parsing errors. 14700d16fef4Smrgfatal_help="Try '\$progname --help' for more information." 14710d16fef4Smrg 14720d16fef4Smrg 14730d16fef4Smrg 14740d16fef4Smrg## ------------------------- ## 14750d16fef4Smrg## Hook function management. ## 14760d16fef4Smrg## ------------------------- ## 14770d16fef4Smrg 14780d16fef4Smrg# This section contains functions for adding, removing, and running hooks 14790d16fef4Smrg# to the main code. A hook is just a named list of of function, that can 14800d16fef4Smrg# be run in order later on. 14810d16fef4Smrg 14820d16fef4Smrg# func_hookable FUNC_NAME 14830d16fef4Smrg# ----------------------- 14840d16fef4Smrg# Declare that FUNC_NAME will run hooks added with 14850d16fef4Smrg# 'func_add_hook FUNC_NAME ...'. 14860d16fef4Smrgfunc_hookable () 14870d16fef4Smrg{ 14880d16fef4Smrg $debug_cmd 14890d16fef4Smrg 14900d16fef4Smrg func_append hookable_fns " $1" 14910d16fef4Smrg} 14920d16fef4Smrg 14930d16fef4Smrg 14940d16fef4Smrg# func_add_hook FUNC_NAME HOOK_FUNC 14950d16fef4Smrg# --------------------------------- 14960d16fef4Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 14970d16fef4Smrg# first have been declared "hookable" by a call to 'func_hookable'. 14980d16fef4Smrgfunc_add_hook () 14990d16fef4Smrg{ 15000d16fef4Smrg $debug_cmd 15010d16fef4Smrg 15020d16fef4Smrg case " $hookable_fns " in 15030d16fef4Smrg *" $1 "*) ;; 15040d16fef4Smrg *) func_fatal_error "'$1' does not accept hook functions." ;; 15050d16fef4Smrg esac 15060d16fef4Smrg 15070d16fef4Smrg eval func_append ${1}_hooks '" $2"' 15080d16fef4Smrg} 15090d16fef4Smrg 15100d16fef4Smrg 15110d16fef4Smrg# func_remove_hook FUNC_NAME HOOK_FUNC 15120d16fef4Smrg# ------------------------------------ 15130d16fef4Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 15140d16fef4Smrgfunc_remove_hook () 15150d16fef4Smrg{ 15160d16fef4Smrg $debug_cmd 15170d16fef4Smrg 15180d16fef4Smrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 15190d16fef4Smrg} 15200d16fef4Smrg 15210d16fef4Smrg 15220d16fef4Smrg# func_run_hooks FUNC_NAME [ARG]... 15230d16fef4Smrg# --------------------------------- 15240d16fef4Smrg# Run all hook functions registered to FUNC_NAME. 15250d16fef4Smrg# It is assumed that the list of hook functions contains nothing more 15260d16fef4Smrg# than a whitespace-delimited list of legal shell function names, and 15270d16fef4Smrg# no effort is wasted trying to catch shell meta-characters or preserve 15280d16fef4Smrg# whitespace. 15290d16fef4Smrgfunc_run_hooks () 15300d16fef4Smrg{ 15310d16fef4Smrg $debug_cmd 15320d16fef4Smrg 15330d16fef4Smrg case " $hookable_fns " in 15340d16fef4Smrg *" $1 "*) ;; 15350d16fef4Smrg *) func_fatal_error "'$1' does not support hook funcions.n" ;; 15360d16fef4Smrg esac 15370d16fef4Smrg 15380d16fef4Smrg eval _G_hook_fns=\$$1_hooks; shift 15390d16fef4Smrg 15400d16fef4Smrg for _G_hook in $_G_hook_fns; do 15410d16fef4Smrg eval $_G_hook '"$@"' 15420d16fef4Smrg 15430d16fef4Smrg # store returned options list back into positional 15440d16fef4Smrg # parameters for next 'cmd' execution. 15450d16fef4Smrg eval _G_hook_result=\$${_G_hook}_result 15460d16fef4Smrg eval set dummy "$_G_hook_result"; shift 15470d16fef4Smrg done 15480d16fef4Smrg 15490d16fef4Smrg func_quote_for_eval ${1+"$@"} 15500d16fef4Smrg func_run_hooks_result=$func_quote_for_eval_result 15510d16fef4Smrg} 15520d16fef4Smrg 15530d16fef4Smrg 15540d16fef4Smrg 15550d16fef4Smrg## --------------- ## 15560d16fef4Smrg## Option parsing. ## 15570d16fef4Smrg## --------------- ## 15580d16fef4Smrg 15590d16fef4Smrg# In order to add your own option parsing hooks, you must accept the 15600d16fef4Smrg# full positional parameter list in your hook function, remove any 15610d16fef4Smrg# options that you action, and then pass back the remaining unprocessed 15620d16fef4Smrg# options in '<hooked_function_name>_result', escaped suitably for 15630d16fef4Smrg# 'eval'. Like this: 15640d16fef4Smrg# 15650d16fef4Smrg# my_options_prep () 15660d16fef4Smrg# { 15670d16fef4Smrg# $debug_cmd 15680d16fef4Smrg# 15690d16fef4Smrg# # Extend the existing usage message. 15700d16fef4Smrg# usage_message=$usage_message' 15710d16fef4Smrg# -s, --silent don'\''t print informational messages 15720d16fef4Smrg# ' 15730d16fef4Smrg# 15740d16fef4Smrg# func_quote_for_eval ${1+"$@"} 15750d16fef4Smrg# my_options_prep_result=$func_quote_for_eval_result 15760d16fef4Smrg# } 15770d16fef4Smrg# func_add_hook func_options_prep my_options_prep 15780d16fef4Smrg# 15790d16fef4Smrg# 15800d16fef4Smrg# my_silent_option () 15810d16fef4Smrg# { 15820d16fef4Smrg# $debug_cmd 15830d16fef4Smrg# 15840d16fef4Smrg# # Note that for efficiency, we parse as many options as we can 15850d16fef4Smrg# # recognise in a loop before passing the remainder back to the 15860d16fef4Smrg# # caller on the first unrecognised argument we encounter. 15870d16fef4Smrg# while test $# -gt 0; do 15880d16fef4Smrg# opt=$1; shift 15890d16fef4Smrg# case $opt in 15900d16fef4Smrg# --silent|-s) opt_silent=: ;; 15910d16fef4Smrg# # Separate non-argument short options: 15920d16fef4Smrg# -s*) func_split_short_opt "$_G_opt" 15930d16fef4Smrg# set dummy "$func_split_short_opt_name" \ 15940d16fef4Smrg# "-$func_split_short_opt_arg" ${1+"$@"} 15950d16fef4Smrg# shift 15960d16fef4Smrg# ;; 15970d16fef4Smrg# *) set dummy "$_G_opt" "$*"; shift; break ;; 15980d16fef4Smrg# esac 15990d16fef4Smrg# done 16000d16fef4Smrg# 16010d16fef4Smrg# func_quote_for_eval ${1+"$@"} 16020d16fef4Smrg# my_silent_option_result=$func_quote_for_eval_result 16030d16fef4Smrg# } 16040d16fef4Smrg# func_add_hook func_parse_options my_silent_option 16050d16fef4Smrg# 16060d16fef4Smrg# 16070d16fef4Smrg# my_option_validation () 16080d16fef4Smrg# { 16090d16fef4Smrg# $debug_cmd 16100d16fef4Smrg# 16110d16fef4Smrg# $opt_silent && $opt_verbose && func_fatal_help "\ 16120d16fef4Smrg# '--silent' and '--verbose' options are mutually exclusive." 16130d16fef4Smrg# 16140d16fef4Smrg# func_quote_for_eval ${1+"$@"} 16150d16fef4Smrg# my_option_validation_result=$func_quote_for_eval_result 16160d16fef4Smrg# } 16170d16fef4Smrg# func_add_hook func_validate_options my_option_validation 16180d16fef4Smrg# 16190d16fef4Smrg# You'll alse need to manually amend $usage_message to reflect the extra 16200d16fef4Smrg# options you parse. It's preferable to append if you can, so that 16210d16fef4Smrg# multiple option parsing hooks can be added safely. 16220d16fef4Smrg 16230d16fef4Smrg 16240d16fef4Smrg# func_options [ARG]... 16250d16fef4Smrg# --------------------- 16260d16fef4Smrg# All the functions called inside func_options are hookable. See the 16270d16fef4Smrg# individual implementations for details. 16280d16fef4Smrgfunc_hookable func_options 16290d16fef4Smrgfunc_options () 1630de2362d3Smrg{ 16310d16fef4Smrg $debug_cmd 1632de2362d3Smrg 16330d16fef4Smrg func_options_prep ${1+"$@"} 16340d16fef4Smrg eval func_parse_options \ 16350d16fef4Smrg ${func_options_prep_result+"$func_options_prep_result"} 16360d16fef4Smrg eval func_validate_options \ 16370d16fef4Smrg ${func_parse_options_result+"$func_parse_options_result"} 1638de2362d3Smrg 16390d16fef4Smrg eval func_run_hooks func_options \ 16400d16fef4Smrg ${func_validate_options_result+"$func_validate_options_result"} 16410d16fef4Smrg 16420d16fef4Smrg # save modified positional parameters for caller 16430d16fef4Smrg func_options_result=$func_run_hooks_result 1644de2362d3Smrg} 1645de2362d3Smrg 1646de2362d3Smrg 16470d16fef4Smrg# func_options_prep [ARG]... 16480d16fef4Smrg# -------------------------- 16490d16fef4Smrg# All initialisations required before starting the option parse loop. 16500d16fef4Smrg# Note that when calling hook functions, we pass through the list of 16510d16fef4Smrg# positional parameters. If a hook function modifies that list, and 16520d16fef4Smrg# needs to propogate that back to rest of this script, then the complete 16530d16fef4Smrg# modified list must be put in 'func_run_hooks_result' before 16540d16fef4Smrg# returning. 16550d16fef4Smrgfunc_hookable func_options_prep 16560d16fef4Smrgfunc_options_prep () 1657de2362d3Smrg{ 16580d16fef4Smrg $debug_cmd 1659de2362d3Smrg 16600d16fef4Smrg # Option defaults: 16610d16fef4Smrg opt_verbose=false 16620d16fef4Smrg opt_warning_types= 1663de2362d3Smrg 16640d16fef4Smrg func_run_hooks func_options_prep ${1+"$@"} 16650d16fef4Smrg 16660d16fef4Smrg # save modified positional parameters for caller 16670d16fef4Smrg func_options_prep_result=$func_run_hooks_result 1668de2362d3Smrg} 1669de2362d3Smrg 16700d16fef4Smrg 16710d16fef4Smrg# func_parse_options [ARG]... 16720d16fef4Smrg# --------------------------- 16730d16fef4Smrg# The main option parsing loop. 16740d16fef4Smrgfunc_hookable func_parse_options 16750d16fef4Smrgfunc_parse_options () 1676de2362d3Smrg{ 16770d16fef4Smrg $debug_cmd 16780d16fef4Smrg 16790d16fef4Smrg func_parse_options_result= 16800d16fef4Smrg 16810d16fef4Smrg # this just eases exit handling 16820d16fef4Smrg while test $# -gt 0; do 16830d16fef4Smrg # Defer to hook functions for initial option parsing, so they 16840d16fef4Smrg # get priority in the event of reusing an option name. 16850d16fef4Smrg func_run_hooks func_parse_options ${1+"$@"} 16860d16fef4Smrg 16870d16fef4Smrg # Adjust func_parse_options positional parameters to match 16880d16fef4Smrg eval set dummy "$func_run_hooks_result"; shift 16890d16fef4Smrg 16900d16fef4Smrg # Break out of the loop if we already parsed every option. 16910d16fef4Smrg test $# -gt 0 || break 16920d16fef4Smrg 16930d16fef4Smrg _G_opt=$1 16940d16fef4Smrg shift 16950d16fef4Smrg case $_G_opt in 16960d16fef4Smrg --debug|-x) debug_cmd='set -x' 16970d16fef4Smrg func_echo "enabling shell trace mode" 16980d16fef4Smrg $debug_cmd 16990d16fef4Smrg ;; 17000d16fef4Smrg 17010d16fef4Smrg --no-warnings|--no-warning|--no-warn) 17020d16fef4Smrg set dummy --warnings none ${1+"$@"} 17030d16fef4Smrg shift 17040d16fef4Smrg ;; 17050d16fef4Smrg 17060d16fef4Smrg --warnings|--warning|-W) 17070d16fef4Smrg test $# = 0 && func_missing_arg $_G_opt && break 17080d16fef4Smrg case " $warning_categories $1" in 17090d16fef4Smrg *" $1 "*) 17100d16fef4Smrg # trailing space prevents matching last $1 above 17110d16fef4Smrg func_append_uniq opt_warning_types " $1" 17120d16fef4Smrg ;; 17130d16fef4Smrg *all) 17140d16fef4Smrg opt_warning_types=$warning_categories 17150d16fef4Smrg ;; 17160d16fef4Smrg *none) 17170d16fef4Smrg opt_warning_types=none 17180d16fef4Smrg warning_func=: 17190d16fef4Smrg ;; 17200d16fef4Smrg *error) 17210d16fef4Smrg opt_warning_types=$warning_categories 17220d16fef4Smrg warning_func=func_fatal_error 17230d16fef4Smrg ;; 17240d16fef4Smrg *) 17250d16fef4Smrg func_fatal_error \ 17260d16fef4Smrg "unsupported warning category: '$1'" 17270d16fef4Smrg ;; 17280d16fef4Smrg esac 17290d16fef4Smrg shift 17300d16fef4Smrg ;; 17310d16fef4Smrg 17320d16fef4Smrg --verbose|-v) opt_verbose=: ;; 17330d16fef4Smrg --version) func_version ;; 17340d16fef4Smrg -\?|-h) func_usage ;; 17350d16fef4Smrg --help) func_help ;; 17360d16fef4Smrg 17370d16fef4Smrg # Separate optargs to long options (plugins may need this): 17380d16fef4Smrg --*=*) func_split_equals "$_G_opt" 17390d16fef4Smrg set dummy "$func_split_equals_lhs" \ 17400d16fef4Smrg "$func_split_equals_rhs" ${1+"$@"} 17410d16fef4Smrg shift 17420d16fef4Smrg ;; 17430d16fef4Smrg 17440d16fef4Smrg # Separate optargs to short options: 17450d16fef4Smrg -W*) 17460d16fef4Smrg func_split_short_opt "$_G_opt" 17470d16fef4Smrg set dummy "$func_split_short_opt_name" \ 17480d16fef4Smrg "$func_split_short_opt_arg" ${1+"$@"} 17490d16fef4Smrg shift 17500d16fef4Smrg ;; 17510d16fef4Smrg 17520d16fef4Smrg # Separate non-argument short options: 17530d16fef4Smrg -\?*|-h*|-v*|-x*) 17540d16fef4Smrg func_split_short_opt "$_G_opt" 17550d16fef4Smrg set dummy "$func_split_short_opt_name" \ 17560d16fef4Smrg "-$func_split_short_opt_arg" ${1+"$@"} 17570d16fef4Smrg shift 17580d16fef4Smrg ;; 17590d16fef4Smrg 17600d16fef4Smrg --) break ;; 17610d16fef4Smrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 17620d16fef4Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 17630d16fef4Smrg esac 17640d16fef4Smrg done 17650d16fef4Smrg 17660d16fef4Smrg # save modified positional parameters for caller 17670d16fef4Smrg func_quote_for_eval ${1+"$@"} 17680d16fef4Smrg func_parse_options_result=$func_quote_for_eval_result 1769de2362d3Smrg} 1770de2362d3Smrg 1771de2362d3Smrg 17720d16fef4Smrg# func_validate_options [ARG]... 17730d16fef4Smrg# ------------------------------ 17740d16fef4Smrg# Perform any sanity checks on option settings and/or unconsumed 17750d16fef4Smrg# arguments. 17760d16fef4Smrgfunc_hookable func_validate_options 17770d16fef4Smrgfunc_validate_options () 1778de2362d3Smrg{ 17790d16fef4Smrg $debug_cmd 1780de2362d3Smrg 17810d16fef4Smrg # Display all warnings if -W was not given. 17820d16fef4Smrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 17830d16fef4Smrg 17840d16fef4Smrg func_run_hooks func_validate_options ${1+"$@"} 17850d16fef4Smrg 17860d16fef4Smrg # Bail if the options were screwed! 17870d16fef4Smrg $exit_cmd $EXIT_FAILURE 17880d16fef4Smrg 17890d16fef4Smrg # save modified positional parameters for caller 17900d16fef4Smrg func_validate_options_result=$func_run_hooks_result 1791de2362d3Smrg} 1792de2362d3Smrg 17930d16fef4Smrg 17940d16fef4Smrg 17950d16fef4Smrg## ----------------- ## 17960d16fef4Smrg## Helper functions. ## 17970d16fef4Smrg## ----------------- ## 17980d16fef4Smrg 17990d16fef4Smrg# This section contains the helper functions used by the rest of the 18000d16fef4Smrg# hookable option parser framework in ascii-betical order. 18010d16fef4Smrg 18020d16fef4Smrg 18030d16fef4Smrg# func_fatal_help ARG... 18040d16fef4Smrg# ---------------------- 18050d16fef4Smrg# Echo program name prefixed message to standard error, followed by 18060d16fef4Smrg# a help hint, and exit. 18070d16fef4Smrgfunc_fatal_help () 1808de2362d3Smrg{ 18090d16fef4Smrg $debug_cmd 1810de2362d3Smrg 18110d16fef4Smrg eval \$ECHO \""Usage: $usage"\" 18120d16fef4Smrg eval \$ECHO \""$fatal_help"\" 18130d16fef4Smrg func_error ${1+"$@"} 18140d16fef4Smrg exit $EXIT_FAILURE 1815de2362d3Smrg} 1816de2362d3Smrg 18170d16fef4Smrg 18180d16fef4Smrg# func_help 18190d16fef4Smrg# --------- 18200d16fef4Smrg# Echo long help message to standard output and exit. 1821de2362d3Smrgfunc_help () 1822de2362d3Smrg{ 18230d16fef4Smrg $debug_cmd 18240d16fef4Smrg 18250d16fef4Smrg func_usage_message 18260d16fef4Smrg $ECHO "$long_help_message" 18270d16fef4Smrg exit 0 1828de2362d3Smrg} 1829de2362d3Smrg 18300d16fef4Smrg 18310d16fef4Smrg# func_missing_arg ARGNAME 18320d16fef4Smrg# ------------------------ 1833de2362d3Smrg# Echo program name prefixed message to standard error and set global 1834de2362d3Smrg# exit_cmd. 1835de2362d3Smrgfunc_missing_arg () 1836de2362d3Smrg{ 18370d16fef4Smrg $debug_cmd 1838de2362d3Smrg 18390d16fef4Smrg func_error "Missing argument for '$1'." 1840de2362d3Smrg exit_cmd=exit 1841de2362d3Smrg} 1842de2362d3Smrg 1843de2362d3Smrg 18440d16fef4Smrg# func_split_equals STRING 18450d16fef4Smrg# ------------------------ 18460d16fef4Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 18470d16fef4Smrg# splitting STRING at the '=' sign. 18480d16fef4Smrgtest -z "$_G_HAVE_XSI_OPS" \ 18490d16fef4Smrg && (eval 'x=a/b/c; 18500d16fef4Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 18510d16fef4Smrg && _G_HAVE_XSI_OPS=yes 18520d16fef4Smrg 18530d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS" 18540d16fef4Smrgthen 18550d16fef4Smrg # This is an XSI compatible shell, allowing a faster implementation... 18560d16fef4Smrg eval 'func_split_equals () 18570d16fef4Smrg { 18580d16fef4Smrg $debug_cmd 18590d16fef4Smrg 18600d16fef4Smrg func_split_equals_lhs=${1%%=*} 18610d16fef4Smrg func_split_equals_rhs=${1#*=} 18620d16fef4Smrg test "x$func_split_equals_lhs" = "x$1" \ 18630d16fef4Smrg && func_split_equals_rhs= 18640d16fef4Smrg }' 18650d16fef4Smrgelse 18660d16fef4Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 18670d16fef4Smrg func_split_equals () 18680d16fef4Smrg { 18690d16fef4Smrg $debug_cmd 18700d16fef4Smrg 18710d16fef4Smrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 18720d16fef4Smrg func_split_equals_rhs= 18730d16fef4Smrg test "x$func_split_equals_lhs" = "x$1" \ 18740d16fef4Smrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 18750d16fef4Smrg } 18760d16fef4Smrgfi #func_split_equals 18770d16fef4Smrg 18780d16fef4Smrg 18790d16fef4Smrg# func_split_short_opt SHORTOPT 18800d16fef4Smrg# ----------------------------- 1881de2362d3Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 1882de2362d3Smrg# variables after splitting SHORTOPT after the 2nd character. 18830d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS" 18840d16fef4Smrgthen 18850d16fef4Smrg # This is an XSI compatible shell, allowing a faster implementation... 18860d16fef4Smrg eval 'func_split_short_opt () 18870d16fef4Smrg { 18880d16fef4Smrg $debug_cmd 18890d16fef4Smrg 18900d16fef4Smrg func_split_short_opt_arg=${1#??} 18910d16fef4Smrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 18920d16fef4Smrg }' 18930d16fef4Smrgelse 18940d16fef4Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 18950d16fef4Smrg func_split_short_opt () 18960d16fef4Smrg { 18970d16fef4Smrg $debug_cmd 18980d16fef4Smrg 18990d16fef4Smrg func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 19000d16fef4Smrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 19010d16fef4Smrg } 19020d16fef4Smrgfi #func_split_short_opt 19030d16fef4Smrg 19040d16fef4Smrg 19050d16fef4Smrg# func_usage 19060d16fef4Smrg# ---------- 19070d16fef4Smrg# Echo short help message to standard output and exit. 19080d16fef4Smrgfunc_usage () 1909de2362d3Smrg{ 19100d16fef4Smrg $debug_cmd 1911de2362d3Smrg 19120d16fef4Smrg func_usage_message 19130d16fef4Smrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 19140d16fef4Smrg exit 0 19150d16fef4Smrg} 1916de2362d3Smrg 1917de2362d3Smrg 19180d16fef4Smrg# func_usage_message 19190d16fef4Smrg# ------------------ 19200d16fef4Smrg# Echo short help message to standard output. 19210d16fef4Smrgfunc_usage_message () 1922de2362d3Smrg{ 19230d16fef4Smrg $debug_cmd 1924de2362d3Smrg 19250d16fef4Smrg eval \$ECHO \""Usage: $usage"\" 19260d16fef4Smrg echo 19270d16fef4Smrg $SED -n 's|^# || 19280d16fef4Smrg /^Written by/{ 19290d16fef4Smrg x;p;x 19300d16fef4Smrg } 19310d16fef4Smrg h 19320d16fef4Smrg /^Written by/q' < "$progpath" 19330d16fef4Smrg echo 19340d16fef4Smrg eval \$ECHO \""$usage_message"\" 19350d16fef4Smrg} 1936de2362d3Smrg 1937de2362d3Smrg 19380d16fef4Smrg# func_version 19390d16fef4Smrg# ------------ 19400d16fef4Smrg# Echo version message to standard output and exit. 19410d16fef4Smrgfunc_version () 19420d16fef4Smrg{ 19430d16fef4Smrg $debug_cmd 1944de2362d3Smrg 19450d16fef4Smrg printf '%s\n' "$progname $scriptversion" 19460d16fef4Smrg $SED -n ' 19470d16fef4Smrg /(C)/!b go 19480d16fef4Smrg :more 19490d16fef4Smrg /\./!{ 19500d16fef4Smrg N 19510d16fef4Smrg s|\n# | | 19520d16fef4Smrg b more 19530d16fef4Smrg } 19540d16fef4Smrg :go 19550d16fef4Smrg /^# Written by /,/# warranty; / { 19560d16fef4Smrg s|^# || 19570d16fef4Smrg s|^# *$|| 19580d16fef4Smrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 19590d16fef4Smrg p 19600d16fef4Smrg } 19610d16fef4Smrg /^# Written by / { 19620d16fef4Smrg s|^# || 19630d16fef4Smrg p 19640d16fef4Smrg } 19650d16fef4Smrg /^warranty; /q' < "$progpath" 1966de2362d3Smrg 19670d16fef4Smrg exit $? 19680d16fef4Smrg} 1969de2362d3Smrg 1970de2362d3Smrg 19710d16fef4Smrg# Local variables: 19720d16fef4Smrg# mode: shell-script 19730d16fef4Smrg# sh-indentation: 2 19740d16fef4Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 19750d16fef4Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 19760d16fef4Smrg# time-stamp-time-zone: "UTC" 19770d16fef4Smrg# End: 1978de2362d3Smrg 19790d16fef4Smrg# Set a version string. 19800d16fef4Smrgscriptversion='(GNU libtool) 2.4.6' 1981de2362d3Smrg 1982de2362d3Smrg 19830d16fef4Smrg# func_echo ARG... 19840d16fef4Smrg# ---------------- 19850d16fef4Smrg# Libtool also displays the current mode in messages, so override 19860d16fef4Smrg# funclib.sh func_echo with this custom definition. 19870d16fef4Smrgfunc_echo () 1988de2362d3Smrg{ 19890d16fef4Smrg $debug_cmd 1990de2362d3Smrg 19910d16fef4Smrg _G_message=$* 19920d16fef4Smrg 19930d16fef4Smrg func_echo_IFS=$IFS 19940d16fef4Smrg IFS=$nl 19950d16fef4Smrg for _G_line in $_G_message; do 19960d16fef4Smrg IFS=$func_echo_IFS 19970d16fef4Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 19980d16fef4Smrg done 19990d16fef4Smrg IFS=$func_echo_IFS 20000d16fef4Smrg} 2001de2362d3Smrg 2002de2362d3Smrg 20030d16fef4Smrg# func_warning ARG... 20040d16fef4Smrg# ------------------- 20050d16fef4Smrg# Libtool warnings are not categorized, so override funclib.sh 20060d16fef4Smrg# func_warning with this simpler definition. 20070d16fef4Smrgfunc_warning () 2008de2362d3Smrg{ 20090d16fef4Smrg $debug_cmd 20100d16fef4Smrg 20110d16fef4Smrg $warning_func ${1+"$@"} 20120d16fef4Smrg} 20130d16fef4Smrg 2014de2362d3Smrg 20150d16fef4Smrg## ---------------- ## 20160d16fef4Smrg## Options parsing. ## 20170d16fef4Smrg## ---------------- ## 20180d16fef4Smrg 20190d16fef4Smrg# Hook in the functions to make sure our own options are parsed during 20200d16fef4Smrg# the option parsing loop. 20210d16fef4Smrg 20220d16fef4Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 20230d16fef4Smrg 20240d16fef4Smrg# Short help message in response to '-h'. 20250d16fef4Smrgusage_message="Options: 20260d16fef4Smrg --config show all configuration variables 20270d16fef4Smrg --debug enable verbose shell tracing 20280d16fef4Smrg -n, --dry-run display commands without modifying any files 20290d16fef4Smrg --features display basic configuration information and exit 20300d16fef4Smrg --mode=MODE use operation mode MODE 20310d16fef4Smrg --no-warnings equivalent to '-Wnone' 20320d16fef4Smrg --preserve-dup-deps don't remove duplicate dependency libraries 20330d16fef4Smrg --quiet, --silent don't print informational messages 20340d16fef4Smrg --tag=TAG use configuration variables from tag TAG 20350d16fef4Smrg -v, --verbose print more informational messages than default 20360d16fef4Smrg --version print version information 20370d16fef4Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 20380d16fef4Smrg -h, --help, --help-all print short, long, or detailed help message 20390d16fef4Smrg" 2040de2362d3Smrg 20410d16fef4Smrg# Additional text appended to 'usage_message' in response to '--help'. 20420d16fef4Smrgfunc_help () 2043de2362d3Smrg{ 20440d16fef4Smrg $debug_cmd 20450d16fef4Smrg 20460d16fef4Smrg func_usage_message 20470d16fef4Smrg $ECHO "$long_help_message 20480d16fef4Smrg 20490d16fef4SmrgMODE must be one of the following: 20500d16fef4Smrg 20510d16fef4Smrg clean remove files from the build directory 20520d16fef4Smrg compile compile a source file into a libtool object 20530d16fef4Smrg execute automatically set library path, then run a program 20540d16fef4Smrg finish complete the installation of libtool libraries 20550d16fef4Smrg install install libraries or executables 20560d16fef4Smrg link create a library or an executable 20570d16fef4Smrg uninstall remove libraries from an installed directory 20580d16fef4Smrg 20590d16fef4SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 20600d16fef4Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 20610d16fef4SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 20620d16fef4Smrg 20630d16fef4SmrgWhen reporting a bug, please describe a test case to reproduce it and 20640d16fef4Smrginclude the following information: 20650d16fef4Smrg 20660d16fef4Smrg host-triplet: $host 20670d16fef4Smrg shell: $SHELL 20680d16fef4Smrg compiler: $LTCC 20690d16fef4Smrg compiler flags: $LTCFLAGS 20700d16fef4Smrg linker: $LD (gnu? $with_gnu_ld) 20710d16fef4Smrg version: $progname (GNU libtool) 2.4.6 20720d16fef4Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 20730d16fef4Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 20740d16fef4Smrg 20750d16fef4SmrgReport bugs to <bug-libtool@gnu.org>. 20760d16fef4SmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>. 20770d16fef4SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 20780d16fef4Smrg exit 0 20790d16fef4Smrg} 2080de2362d3Smrg 2081de2362d3Smrg 20820d16fef4Smrg# func_lo2o OBJECT-NAME 20830d16fef4Smrg# --------------------- 20840d16fef4Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 20850d16fef4Smrg# object suffix. 2086de2362d3Smrg 20870d16fef4Smrglo2o=s/\\.lo\$/.$objext/ 20880d16fef4Smrgo2lo=s/\\.$objext\$/.lo/ 2089de2362d3Smrg 20900d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 20910d16fef4Smrg eval 'func_lo2o () 20920d16fef4Smrg { 20930d16fef4Smrg case $1 in 20940d16fef4Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 20950d16fef4Smrg * ) func_lo2o_result=$1 ;; 20960d16fef4Smrg esac 20970d16fef4Smrg }' 20980d16fef4Smrg 20990d16fef4Smrg # func_xform LIBOBJ-OR-SOURCE 21000d16fef4Smrg # --------------------------- 21010d16fef4Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 21020d16fef4Smrg # suffix to a '.lo' libtool-object suffix. 21030d16fef4Smrg eval 'func_xform () 21040d16fef4Smrg { 21050d16fef4Smrg func_xform_result=${1%.*}.lo 21060d16fef4Smrg }' 21070d16fef4Smrgelse 21080d16fef4Smrg # ...otherwise fall back to using sed. 21090d16fef4Smrg func_lo2o () 21100d16fef4Smrg { 21110d16fef4Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 21120d16fef4Smrg } 21130d16fef4Smrg 21140d16fef4Smrg func_xform () 21150d16fef4Smrg { 21160d16fef4Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 21170d16fef4Smrg } 21180d16fef4Smrgfi 2119de2362d3Smrg 2120de2362d3Smrg 21210d16fef4Smrg# func_fatal_configuration ARG... 21220d16fef4Smrg# ------------------------------- 2123de2362d3Smrg# Echo program name prefixed message to standard error, followed by 2124de2362d3Smrg# a configuration failure hint, and exit. 2125de2362d3Smrgfunc_fatal_configuration () 2126de2362d3Smrg{ 21270d16fef4Smrg func__fatal_error ${1+"$@"} \ 21280d16fef4Smrg "See the $PACKAGE documentation for more information." \ 21290d16fef4Smrg "Fatal configuration error." 2130de2362d3Smrg} 2131de2362d3Smrg 2132de2362d3Smrg 2133de2362d3Smrg# func_config 21340d16fef4Smrg# ----------- 2135de2362d3Smrg# Display the configuration for all the tags in this script. 2136de2362d3Smrgfunc_config () 2137de2362d3Smrg{ 2138de2362d3Smrg re_begincf='^# ### BEGIN LIBTOOL' 2139de2362d3Smrg re_endcf='^# ### END LIBTOOL' 2140de2362d3Smrg 2141de2362d3Smrg # Default configuration. 2142de2362d3Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2143de2362d3Smrg 2144de2362d3Smrg # Now print the configurations for the tags. 2145de2362d3Smrg for tagname in $taglist; do 2146de2362d3Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2147de2362d3Smrg done 2148de2362d3Smrg 2149de2362d3Smrg exit $? 2150de2362d3Smrg} 2151de2362d3Smrg 21520d16fef4Smrg 2153de2362d3Smrg# func_features 21540d16fef4Smrg# ------------- 2155de2362d3Smrg# Display the features supported by this script. 2156de2362d3Smrgfunc_features () 2157de2362d3Smrg{ 2158de2362d3Smrg echo "host: $host" 21590d16fef4Smrg if test yes = "$build_libtool_libs"; then 2160de2362d3Smrg echo "enable shared libraries" 2161de2362d3Smrg else 2162de2362d3Smrg echo "disable shared libraries" 2163de2362d3Smrg fi 21640d16fef4Smrg if test yes = "$build_old_libs"; then 2165de2362d3Smrg echo "enable static libraries" 2166de2362d3Smrg else 2167de2362d3Smrg echo "disable static libraries" 2168de2362d3Smrg fi 2169de2362d3Smrg 2170de2362d3Smrg exit $? 2171de2362d3Smrg} 2172de2362d3Smrg 21730d16fef4Smrg 21740d16fef4Smrg# func_enable_tag TAGNAME 21750d16fef4Smrg# ----------------------- 2176de2362d3Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2177de2362d3Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2178de2362d3Smrg# variable here. 2179de2362d3Smrgfunc_enable_tag () 2180de2362d3Smrg{ 21810d16fef4Smrg # Global variable: 21820d16fef4Smrg tagname=$1 2183de2362d3Smrg 21840d16fef4Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 21850d16fef4Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 21860d16fef4Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 2187de2362d3Smrg 21880d16fef4Smrg # Validate tagname. 21890d16fef4Smrg case $tagname in 21900d16fef4Smrg *[!-_A-Za-z0-9,/]*) 21910d16fef4Smrg func_fatal_error "invalid tag name: $tagname" 21920d16fef4Smrg ;; 21930d16fef4Smrg esac 2194de2362d3Smrg 21950d16fef4Smrg # Don't test for the "default" C tag, as we know it's 21960d16fef4Smrg # there but not specially marked. 21970d16fef4Smrg case $tagname in 21980d16fef4Smrg CC) ;; 2199de2362d3Smrg *) 22000d16fef4Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 22010d16fef4Smrg taglist="$taglist $tagname" 22020d16fef4Smrg 22030d16fef4Smrg # Evaluate the configuration. Be careful to quote the path 22040d16fef4Smrg # and the sed script, to avoid splitting on whitespace, but 22050d16fef4Smrg # also don't use non-portable quotes within backquotes within 22060d16fef4Smrg # quotes we have to do it in 2 steps: 22070d16fef4Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 22080d16fef4Smrg eval "$extractedcf" 22090d16fef4Smrg else 22100d16fef4Smrg func_error "ignoring unknown tag $tagname" 22110d16fef4Smrg fi 22120d16fef4Smrg ;; 22130d16fef4Smrg esac 2214de2362d3Smrg} 2215de2362d3Smrg 22160d16fef4Smrg 2217de2362d3Smrg# func_check_version_match 22180d16fef4Smrg# ------------------------ 2219de2362d3Smrg# Ensure that we are using m4 macros, and libtool script from the same 2220de2362d3Smrg# release of libtool. 2221de2362d3Smrgfunc_check_version_match () 2222de2362d3Smrg{ 22230d16fef4Smrg if test "$package_revision" != "$macro_revision"; then 22240d16fef4Smrg if test "$VERSION" != "$macro_version"; then 22250d16fef4Smrg if test -z "$macro_version"; then 22260d16fef4Smrg cat >&2 <<_LT_EOF 2227de2362d3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2228de2362d3Smrg$progname: definition of this LT_INIT comes from an older release. 2229de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2230de2362d3Smrg$progname: and run autoconf again. 2231de2362d3Smrg_LT_EOF 22320d16fef4Smrg else 22330d16fef4Smrg cat >&2 <<_LT_EOF 2234de2362d3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2235de2362d3Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2236de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2237de2362d3Smrg$progname: and run autoconf again. 2238de2362d3Smrg_LT_EOF 22390d16fef4Smrg fi 22400d16fef4Smrg else 22410d16fef4Smrg cat >&2 <<_LT_EOF 2242de2362d3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2243de2362d3Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2244de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2245de2362d3Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 2246de2362d3Smrg_LT_EOF 22470d16fef4Smrg fi 2248de2362d3Smrg 22490d16fef4Smrg exit $EXIT_MISMATCH 22500d16fef4Smrg fi 2251de2362d3Smrg} 2252de2362d3Smrg 2253de2362d3Smrg 22540d16fef4Smrg# libtool_options_prep [ARG]... 22550d16fef4Smrg# ----------------------------- 22560d16fef4Smrg# Preparation for options parsed by libtool. 22570d16fef4Smrglibtool_options_prep () 22580d16fef4Smrg{ 22590d16fef4Smrg $debug_mode 2260de2362d3Smrg 22610d16fef4Smrg # Option defaults: 22620d16fef4Smrg opt_config=false 22630d16fef4Smrg opt_dlopen= 22640d16fef4Smrg opt_dry_run=false 22650d16fef4Smrg opt_help=false 22660d16fef4Smrg opt_mode= 22670d16fef4Smrg opt_preserve_dup_deps=false 22680d16fef4Smrg opt_quiet=false 2269de2362d3Smrg 22700d16fef4Smrg nonopt= 22710d16fef4Smrg preserve_args= 2272de2362d3Smrg 22730d16fef4Smrg # Shorthand for --mode=foo, only valid as the first argument 22740d16fef4Smrg case $1 in 22750d16fef4Smrg clean|clea|cle|cl) 22760d16fef4Smrg shift; set dummy --mode clean ${1+"$@"}; shift 22770d16fef4Smrg ;; 22780d16fef4Smrg compile|compil|compi|comp|com|co|c) 22790d16fef4Smrg shift; set dummy --mode compile ${1+"$@"}; shift 22800d16fef4Smrg ;; 22810d16fef4Smrg execute|execut|execu|exec|exe|ex|e) 22820d16fef4Smrg shift; set dummy --mode execute ${1+"$@"}; shift 22830d16fef4Smrg ;; 22840d16fef4Smrg finish|finis|fini|fin|fi|f) 22850d16fef4Smrg shift; set dummy --mode finish ${1+"$@"}; shift 22860d16fef4Smrg ;; 22870d16fef4Smrg install|instal|insta|inst|ins|in|i) 22880d16fef4Smrg shift; set dummy --mode install ${1+"$@"}; shift 22890d16fef4Smrg ;; 22900d16fef4Smrg link|lin|li|l) 22910d16fef4Smrg shift; set dummy --mode link ${1+"$@"}; shift 22920d16fef4Smrg ;; 22930d16fef4Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 22940d16fef4Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 22950d16fef4Smrg ;; 22960d16fef4Smrg esac 22970d16fef4Smrg 22980d16fef4Smrg # Pass back the list of options. 22990d16fef4Smrg func_quote_for_eval ${1+"$@"} 23000d16fef4Smrg libtool_options_prep_result=$func_quote_for_eval_result 23010d16fef4Smrg} 23020d16fef4Smrgfunc_add_hook func_options_prep libtool_options_prep 2303de2362d3Smrg 2304de2362d3Smrg 23050d16fef4Smrg# libtool_parse_options [ARG]... 23060d16fef4Smrg# --------------------------------- 23070d16fef4Smrg# Provide handling for libtool specific options. 23080d16fef4Smrglibtool_parse_options () 2309de2362d3Smrg{ 23100d16fef4Smrg $debug_cmd 2311de2362d3Smrg 23120d16fef4Smrg # Perform our own loop to consume as many options as possible in 23130d16fef4Smrg # each iteration. 23140d16fef4Smrg while test $# -gt 0; do 23150d16fef4Smrg _G_opt=$1 23160d16fef4Smrg shift 23170d16fef4Smrg case $_G_opt in 23180d16fef4Smrg --dry-run|--dryrun|-n) 23190d16fef4Smrg opt_dry_run=: 23200d16fef4Smrg ;; 23210d16fef4Smrg 23220d16fef4Smrg --config) func_config ;; 23230d16fef4Smrg 23240d16fef4Smrg --dlopen|-dlopen) 23250d16fef4Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 23260d16fef4Smrg}$1" 23270d16fef4Smrg shift 23280d16fef4Smrg ;; 23290d16fef4Smrg 23300d16fef4Smrg --preserve-dup-deps) 23310d16fef4Smrg opt_preserve_dup_deps=: ;; 23320d16fef4Smrg 23330d16fef4Smrg --features) func_features ;; 23340d16fef4Smrg 23350d16fef4Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 23360d16fef4Smrg 23370d16fef4Smrg --help) opt_help=: ;; 23380d16fef4Smrg 23390d16fef4Smrg --help-all) opt_help=': help-all' ;; 23400d16fef4Smrg 23410d16fef4Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 23420d16fef4Smrg opt_mode=$1 23430d16fef4Smrg case $1 in 23440d16fef4Smrg # Valid mode arguments: 23450d16fef4Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 23460d16fef4Smrg 23470d16fef4Smrg # Catch anything else as an error 23480d16fef4Smrg *) func_error "invalid argument for $_G_opt" 23490d16fef4Smrg exit_cmd=exit 23500d16fef4Smrg break 23510d16fef4Smrg ;; 23520d16fef4Smrg esac 23530d16fef4Smrg shift 23540d16fef4Smrg ;; 23550d16fef4Smrg 23560d16fef4Smrg --no-silent|--no-quiet) 23570d16fef4Smrg opt_quiet=false 23580d16fef4Smrg func_append preserve_args " $_G_opt" 23590d16fef4Smrg ;; 23600d16fef4Smrg 23610d16fef4Smrg --no-warnings|--no-warning|--no-warn) 23620d16fef4Smrg opt_warning=false 23630d16fef4Smrg func_append preserve_args " $_G_opt" 23640d16fef4Smrg ;; 23650d16fef4Smrg 23660d16fef4Smrg --no-verbose) 23670d16fef4Smrg opt_verbose=false 23680d16fef4Smrg func_append preserve_args " $_G_opt" 23690d16fef4Smrg ;; 23700d16fef4Smrg 23710d16fef4Smrg --silent|--quiet) 23720d16fef4Smrg opt_quiet=: 23730d16fef4Smrg opt_verbose=false 23740d16fef4Smrg func_append preserve_args " $_G_opt" 23750d16fef4Smrg ;; 23760d16fef4Smrg 23770d16fef4Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 23780d16fef4Smrg opt_tag=$1 23790d16fef4Smrg func_append preserve_args " $_G_opt $1" 23800d16fef4Smrg func_enable_tag "$1" 23810d16fef4Smrg shift 23820d16fef4Smrg ;; 23830d16fef4Smrg 23840d16fef4Smrg --verbose|-v) opt_quiet=false 23850d16fef4Smrg opt_verbose=: 23860d16fef4Smrg func_append preserve_args " $_G_opt" 23870d16fef4Smrg ;; 23880d16fef4Smrg 23890d16fef4Smrg # An option not handled by this hook function: 23900d16fef4Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 23910d16fef4Smrg esac 23920d16fef4Smrg done 2393de2362d3Smrg 2394de2362d3Smrg 23950d16fef4Smrg # save modified positional parameters for caller 23960d16fef4Smrg func_quote_for_eval ${1+"$@"} 23970d16fef4Smrg libtool_parse_options_result=$func_quote_for_eval_result 23980d16fef4Smrg} 23990d16fef4Smrgfunc_add_hook func_parse_options libtool_parse_options 2400de2362d3Smrg 2401de2362d3Smrg 2402de2362d3Smrg 24030d16fef4Smrg# libtool_validate_options [ARG]... 24040d16fef4Smrg# --------------------------------- 24050d16fef4Smrg# Perform any sanity checks on option settings and/or unconsumed 24060d16fef4Smrg# arguments. 24070d16fef4Smrglibtool_validate_options () 24080d16fef4Smrg{ 24090d16fef4Smrg # save first non-option argument 24100d16fef4Smrg if test 0 -lt $#; then 24110d16fef4Smrg nonopt=$1 24120d16fef4Smrg shift 2413de2362d3Smrg fi 2414de2362d3Smrg 24150d16fef4Smrg # preserve --debug 24160d16fef4Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 2417de2362d3Smrg 24180d16fef4Smrg case $host in 24190d16fef4Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 24200d16fef4Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 24210d16fef4Smrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 24220d16fef4Smrg # don't eliminate duplications in $postdeps and $predeps 24230d16fef4Smrg opt_duplicate_compiler_generated_deps=: 24240d16fef4Smrg ;; 24250d16fef4Smrg *) 24260d16fef4Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 24270d16fef4Smrg ;; 24280d16fef4Smrg esac 2429de2362d3Smrg 24300d16fef4Smrg $opt_help || { 24310d16fef4Smrg # Sanity checks first: 24320d16fef4Smrg func_check_version_match 2433de2362d3Smrg 24340d16fef4Smrg test yes != "$build_libtool_libs" \ 24350d16fef4Smrg && test yes != "$build_old_libs" \ 24360d16fef4Smrg && func_fatal_configuration "not configured to build any kind of library" 2437de2362d3Smrg 24380d16fef4Smrg # Darwin sucks 24390d16fef4Smrg eval std_shrext=\"$shrext_cmds\" 24400d16fef4Smrg 24410d16fef4Smrg # Only execute mode is allowed to have -dlopen flags. 24420d16fef4Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 24430d16fef4Smrg func_error "unrecognized option '-dlopen'" 24440d16fef4Smrg $ECHO "$help" 1>&2 24450d16fef4Smrg exit $EXIT_FAILURE 24460d16fef4Smrg fi 24470d16fef4Smrg 24480d16fef4Smrg # Change the help message to a mode-specific one. 24490d16fef4Smrg generic_help=$help 24500d16fef4Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 24510d16fef4Smrg } 24520d16fef4Smrg 24530d16fef4Smrg # Pass back the unparsed argument list 24540d16fef4Smrg func_quote_for_eval ${1+"$@"} 24550d16fef4Smrg libtool_validate_options_result=$func_quote_for_eval_result 2456de2362d3Smrg} 24570d16fef4Smrgfunc_add_hook func_validate_options libtool_validate_options 24580d16fef4Smrg 2459de2362d3Smrg 24600d16fef4Smrg# Process options as early as possible so that --help and --version 24610d16fef4Smrg# can return quickly. 24620d16fef4Smrgfunc_options ${1+"$@"} 24630d16fef4Smrgeval set dummy "$func_options_result"; shift 2464de2362d3Smrg 2465de2362d3Smrg 2466de2362d3Smrg 2467de2362d3Smrg## ----------- ## 2468de2362d3Smrg## Main. ## 2469de2362d3Smrg## ----------- ## 2470de2362d3Smrg 24710d16fef4Smrgmagic='%%%MAGIC variable%%%' 24720d16fef4Smrgmagic_exe='%%%MAGIC EXE variable%%%' 24730d16fef4Smrg 24740d16fef4Smrg# Global variables. 24750d16fef4Smrgextracted_archives= 24760d16fef4Smrgextracted_serial=0 24770d16fef4Smrg 24780d16fef4Smrg# If this variable is set in any of the actions, the command in it 24790d16fef4Smrg# will be execed at the end. This prevents here-documents from being 24800d16fef4Smrg# left over by shells. 24810d16fef4Smrgexec_cmd= 24820d16fef4Smrg 24830d16fef4Smrg 24840d16fef4Smrg# A function that is used when there is no print builtin or printf. 24850d16fef4Smrgfunc_fallback_echo () 24860d16fef4Smrg{ 24870d16fef4Smrg eval 'cat <<_LTECHO_EOF 24880d16fef4Smrg$1 24890d16fef4Smrg_LTECHO_EOF' 24900d16fef4Smrg} 24910d16fef4Smrg 24920d16fef4Smrg# func_generated_by_libtool 24930d16fef4Smrg# True iff stdin has been generated by Libtool. This function is only 24940d16fef4Smrg# a basic sanity check; it will hardly flush out determined imposters. 24950d16fef4Smrgfunc_generated_by_libtool_p () 24960d16fef4Smrg{ 24970d16fef4Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 24980d16fef4Smrg} 24990d16fef4Smrg 2500de2362d3Smrg# func_lalib_p file 25010d16fef4Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2502de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 2503de2362d3Smrg# determined imposters. 2504de2362d3Smrgfunc_lalib_p () 2505de2362d3Smrg{ 2506de2362d3Smrg test -f "$1" && 25070d16fef4Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2508de2362d3Smrg} 2509de2362d3Smrg 2510de2362d3Smrg# func_lalib_unsafe_p file 25110d16fef4Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2512de2362d3Smrg# This function implements the same check as func_lalib_p without 2513de2362d3Smrg# resorting to external programs. To this end, it redirects stdin and 2514de2362d3Smrg# closes it afterwards, without saving the original file descriptor. 2515de2362d3Smrg# As a safety measure, use it only where a negative result would be 25160d16fef4Smrg# fatal anyway. Works if 'file' does not exist. 2517de2362d3Smrgfunc_lalib_unsafe_p () 2518de2362d3Smrg{ 2519de2362d3Smrg lalib_p=no 2520de2362d3Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2521de2362d3Smrg for lalib_p_l in 1 2 3 4 2522de2362d3Smrg do 2523de2362d3Smrg read lalib_p_line 25240d16fef4Smrg case $lalib_p_line in 2525de2362d3Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2526de2362d3Smrg esac 2527de2362d3Smrg done 2528de2362d3Smrg exec 0<&5 5<&- 2529de2362d3Smrg fi 25300d16fef4Smrg test yes = "$lalib_p" 2531de2362d3Smrg} 2532de2362d3Smrg 2533de2362d3Smrg# func_ltwrapper_script_p file 2534de2362d3Smrg# True iff FILE is a libtool wrapper script 2535de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 2536de2362d3Smrg# determined imposters. 2537de2362d3Smrgfunc_ltwrapper_script_p () 2538de2362d3Smrg{ 25390d16fef4Smrg test -f "$1" && 25400d16fef4Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2541de2362d3Smrg} 2542de2362d3Smrg 2543de2362d3Smrg# func_ltwrapper_executable_p file 2544de2362d3Smrg# True iff FILE is a libtool wrapper executable 2545de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 2546de2362d3Smrg# determined imposters. 2547de2362d3Smrgfunc_ltwrapper_executable_p () 2548de2362d3Smrg{ 2549de2362d3Smrg func_ltwrapper_exec_suffix= 2550de2362d3Smrg case $1 in 2551de2362d3Smrg *.exe) ;; 2552de2362d3Smrg *) func_ltwrapper_exec_suffix=.exe ;; 2553de2362d3Smrg esac 2554de2362d3Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2555de2362d3Smrg} 2556de2362d3Smrg 2557de2362d3Smrg# func_ltwrapper_scriptname file 2558de2362d3Smrg# Assumes file is an ltwrapper_executable 2559de2362d3Smrg# uses $file to determine the appropriate filename for a 2560de2362d3Smrg# temporary ltwrapper_script. 2561de2362d3Smrgfunc_ltwrapper_scriptname () 2562de2362d3Smrg{ 2563de2362d3Smrg func_dirname_and_basename "$1" "" "." 2564de2362d3Smrg func_stripname '' '.exe' "$func_basename_result" 25650d16fef4Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2566de2362d3Smrg} 2567de2362d3Smrg 2568de2362d3Smrg# func_ltwrapper_p file 2569de2362d3Smrg# True iff FILE is a libtool wrapper script or wrapper executable 2570de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out 2571de2362d3Smrg# determined imposters. 2572de2362d3Smrgfunc_ltwrapper_p () 2573de2362d3Smrg{ 2574de2362d3Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2575de2362d3Smrg} 2576de2362d3Smrg 2577de2362d3Smrg 2578de2362d3Smrg# func_execute_cmds commands fail_cmd 2579de2362d3Smrg# Execute tilde-delimited COMMANDS. 2580de2362d3Smrg# If FAIL_CMD is given, eval that upon failure. 2581de2362d3Smrg# FAIL_CMD may read-access the current command in variable CMD! 2582de2362d3Smrgfunc_execute_cmds () 2583de2362d3Smrg{ 25840d16fef4Smrg $debug_cmd 25850d16fef4Smrg 2586de2362d3Smrg save_ifs=$IFS; IFS='~' 2587de2362d3Smrg for cmd in $1; do 25880d16fef4Smrg IFS=$sp$nl 2589de2362d3Smrg eval cmd=\"$cmd\" 25900d16fef4Smrg IFS=$save_ifs 2591de2362d3Smrg func_show_eval "$cmd" "${2-:}" 2592de2362d3Smrg done 2593de2362d3Smrg IFS=$save_ifs 2594de2362d3Smrg} 2595de2362d3Smrg 2596de2362d3Smrg 2597de2362d3Smrg# func_source file 2598de2362d3Smrg# Source FILE, adding directory component if necessary. 2599de2362d3Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 2600de2362d3Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2601de2362d3Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 26020d16fef4Smrg# 'FILE.' does not work on cygwin managed mounts. 2603de2362d3Smrgfunc_source () 2604de2362d3Smrg{ 26050d16fef4Smrg $debug_cmd 26060d16fef4Smrg 2607de2362d3Smrg case $1 in 2608de2362d3Smrg */* | *\\*) . "$1" ;; 2609de2362d3Smrg *) . "./$1" ;; 2610de2362d3Smrg esac 2611de2362d3Smrg} 2612de2362d3Smrg 2613de2362d3Smrg 2614de2362d3Smrg# func_resolve_sysroot PATH 2615de2362d3Smrg# Replace a leading = in PATH with a sysroot. Store the result into 2616de2362d3Smrg# func_resolve_sysroot_result 2617de2362d3Smrgfunc_resolve_sysroot () 2618de2362d3Smrg{ 2619de2362d3Smrg func_resolve_sysroot_result=$1 2620de2362d3Smrg case $func_resolve_sysroot_result in 2621de2362d3Smrg =*) 2622de2362d3Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 2623de2362d3Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2624de2362d3Smrg ;; 2625de2362d3Smrg esac 2626de2362d3Smrg} 2627de2362d3Smrg 2628de2362d3Smrg# func_replace_sysroot PATH 2629de2362d3Smrg# If PATH begins with the sysroot, replace it with = and 2630de2362d3Smrg# store the result into func_replace_sysroot_result. 2631de2362d3Smrgfunc_replace_sysroot () 2632de2362d3Smrg{ 26330d16fef4Smrg case $lt_sysroot:$1 in 2634de2362d3Smrg ?*:"$lt_sysroot"*) 2635de2362d3Smrg func_stripname "$lt_sysroot" '' "$1" 26360d16fef4Smrg func_replace_sysroot_result='='$func_stripname_result 2637de2362d3Smrg ;; 2638de2362d3Smrg *) 2639de2362d3Smrg # Including no sysroot. 2640de2362d3Smrg func_replace_sysroot_result=$1 2641de2362d3Smrg ;; 2642de2362d3Smrg esac 2643de2362d3Smrg} 2644de2362d3Smrg 2645de2362d3Smrg# func_infer_tag arg 2646de2362d3Smrg# Infer tagged configuration to use if any are available and 2647de2362d3Smrg# if one wasn't chosen via the "--tag" command line option. 2648de2362d3Smrg# Only attempt this if the compiler in the base compile 2649de2362d3Smrg# command doesn't match the default compiler. 2650de2362d3Smrg# arg is usually of the form 'gcc ...' 2651de2362d3Smrgfunc_infer_tag () 2652de2362d3Smrg{ 26530d16fef4Smrg $debug_cmd 26540d16fef4Smrg 2655de2362d3Smrg if test -n "$available_tags" && test -z "$tagname"; then 2656de2362d3Smrg CC_quoted= 2657de2362d3Smrg for arg in $CC; do 2658de2362d3Smrg func_append_quoted CC_quoted "$arg" 2659de2362d3Smrg done 2660de2362d3Smrg CC_expanded=`func_echo_all $CC` 2661de2362d3Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2662de2362d3Smrg case $@ in 2663de2362d3Smrg # Blanks in the command may have been stripped by the calling shell, 2664de2362d3Smrg # but not from the CC environment variable when configure was run. 2665de2362d3Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2666de2362d3Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2667de2362d3Smrg # Blanks at the start of $base_compile will cause this to fail 2668de2362d3Smrg # if we don't check for them as well. 2669de2362d3Smrg *) 2670de2362d3Smrg for z in $available_tags; do 2671de2362d3Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2672de2362d3Smrg # Evaluate the configuration. 26730d16fef4Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2674de2362d3Smrg CC_quoted= 2675de2362d3Smrg for arg in $CC; do 2676de2362d3Smrg # Double-quote args containing other shell metacharacters. 2677de2362d3Smrg func_append_quoted CC_quoted "$arg" 2678de2362d3Smrg done 2679de2362d3Smrg CC_expanded=`func_echo_all $CC` 2680de2362d3Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2681de2362d3Smrg case "$@ " in 2682de2362d3Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2683de2362d3Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2684de2362d3Smrg # The compiler in the base compile command matches 2685de2362d3Smrg # the one in the tagged configuration. 2686de2362d3Smrg # Assume this is the tagged configuration we want. 2687de2362d3Smrg tagname=$z 2688de2362d3Smrg break 2689de2362d3Smrg ;; 2690de2362d3Smrg esac 2691de2362d3Smrg fi 2692de2362d3Smrg done 2693de2362d3Smrg # If $tagname still isn't set, then no tagged configuration 2694de2362d3Smrg # was found and let the user know that the "--tag" command 2695de2362d3Smrg # line option must be used. 2696de2362d3Smrg if test -z "$tagname"; then 2697de2362d3Smrg func_echo "unable to infer tagged configuration" 26980d16fef4Smrg func_fatal_error "specify a tag with '--tag'" 2699de2362d3Smrg# else 2700de2362d3Smrg# func_verbose "using $tagname tagged configuration" 2701de2362d3Smrg fi 2702de2362d3Smrg ;; 2703de2362d3Smrg esac 2704de2362d3Smrg fi 2705de2362d3Smrg} 2706de2362d3Smrg 2707de2362d3Smrg 2708de2362d3Smrg 2709de2362d3Smrg# func_write_libtool_object output_name pic_name nonpic_name 2710de2362d3Smrg# Create a libtool object file (analogous to a ".la" file), 2711de2362d3Smrg# but don't create it if we're doing a dry run. 2712de2362d3Smrgfunc_write_libtool_object () 2713de2362d3Smrg{ 27140d16fef4Smrg write_libobj=$1 27150d16fef4Smrg if test yes = "$build_libtool_libs"; then 27160d16fef4Smrg write_lobj=\'$2\' 2717de2362d3Smrg else 2718de2362d3Smrg write_lobj=none 2719de2362d3Smrg fi 2720de2362d3Smrg 27210d16fef4Smrg if test yes = "$build_old_libs"; then 27220d16fef4Smrg write_oldobj=\'$3\' 2723de2362d3Smrg else 2724de2362d3Smrg write_oldobj=none 2725de2362d3Smrg fi 2726de2362d3Smrg 2727de2362d3Smrg $opt_dry_run || { 2728de2362d3Smrg cat >${write_libobj}T <<EOF 2729de2362d3Smrg# $write_libobj - a libtool object file 27300d16fef4Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2731de2362d3Smrg# 2732de2362d3Smrg# Please DO NOT delete this file! 2733de2362d3Smrg# It is necessary for linking the library. 2734de2362d3Smrg 2735de2362d3Smrg# Name of the PIC object. 2736de2362d3Smrgpic_object=$write_lobj 2737de2362d3Smrg 2738de2362d3Smrg# Name of the non-PIC object 2739de2362d3Smrgnon_pic_object=$write_oldobj 2740de2362d3Smrg 2741de2362d3SmrgEOF 27420d16fef4Smrg $MV "${write_libobj}T" "$write_libobj" 2743de2362d3Smrg } 2744de2362d3Smrg} 2745de2362d3Smrg 2746de2362d3Smrg 2747de2362d3Smrg################################################## 2748de2362d3Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 2749de2362d3Smrg################################################## 2750de2362d3Smrg 2751de2362d3Smrg# func_convert_core_file_wine_to_w32 ARG 2752de2362d3Smrg# Helper function used by file name conversion functions when $build is *nix, 2753de2362d3Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 2754de2362d3Smrg# correctly configured wine environment available, with the winepath program 2755de2362d3Smrg# in $build's $PATH. 2756de2362d3Smrg# 2757de2362d3Smrg# ARG is the $build file name to be converted to w32 format. 2758de2362d3Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 2759de2362d3Smrg# be empty on error (or when ARG is empty) 2760de2362d3Smrgfunc_convert_core_file_wine_to_w32 () 2761de2362d3Smrg{ 27620d16fef4Smrg $debug_cmd 27630d16fef4Smrg 27640d16fef4Smrg func_convert_core_file_wine_to_w32_result=$1 2765de2362d3Smrg if test -n "$1"; then 2766de2362d3Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 2767de2362d3Smrg # are forced to check the contents of stdout. On the other hand, if the 2768de2362d3Smrg # command is not found, the shell will set an exit code of 127 and print 2769de2362d3Smrg # *an error message* to stdout. So we must check for both error code of 2770de2362d3Smrg # zero AND non-empty stdout, which explains the odd construction: 2771de2362d3Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 27720d16fef4Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 2773de2362d3Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 27740d16fef4Smrg $SED -e "$sed_naive_backslashify"` 2775de2362d3Smrg else 2776de2362d3Smrg func_convert_core_file_wine_to_w32_result= 2777de2362d3Smrg fi 2778de2362d3Smrg fi 2779de2362d3Smrg} 2780de2362d3Smrg# end: func_convert_core_file_wine_to_w32 2781de2362d3Smrg 2782de2362d3Smrg 2783de2362d3Smrg# func_convert_core_path_wine_to_w32 ARG 2784de2362d3Smrg# Helper function used by path conversion functions when $build is *nix, and 2785de2362d3Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 2786de2362d3Smrg# configured wine environment available, with the winepath program in $build's 2787de2362d3Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 2788de2362d3Smrg# 2789de2362d3Smrg# ARG is path to be converted from $build format to win32. 2790de2362d3Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 2791de2362d3Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 2792de2362d3Smrg# are convertible, then the result may be empty. 2793de2362d3Smrgfunc_convert_core_path_wine_to_w32 () 2794de2362d3Smrg{ 27950d16fef4Smrg $debug_cmd 27960d16fef4Smrg 2797de2362d3Smrg # unfortunately, winepath doesn't convert paths, only file names 27980d16fef4Smrg func_convert_core_path_wine_to_w32_result= 2799de2362d3Smrg if test -n "$1"; then 2800de2362d3Smrg oldIFS=$IFS 2801de2362d3Smrg IFS=: 2802de2362d3Smrg for func_convert_core_path_wine_to_w32_f in $1; do 2803de2362d3Smrg IFS=$oldIFS 2804de2362d3Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 28050d16fef4Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 2806de2362d3Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 28070d16fef4Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 2808de2362d3Smrg else 2809de2362d3Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 2810de2362d3Smrg fi 2811de2362d3Smrg fi 2812de2362d3Smrg done 2813de2362d3Smrg IFS=$oldIFS 2814de2362d3Smrg fi 2815de2362d3Smrg} 2816de2362d3Smrg# end: func_convert_core_path_wine_to_w32 2817de2362d3Smrg 2818de2362d3Smrg 2819de2362d3Smrg# func_cygpath ARGS... 2820de2362d3Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 2821de2362d3Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 2822de2362d3Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 2823de2362d3Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 2824de2362d3Smrg# file name or path is assumed to be in w32 format, as previously converted 2825de2362d3Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 2826de2362d3Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 2827de2362d3Smrg# Cygwin format). Returns an empty string on error. 2828de2362d3Smrg# 2829de2362d3Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 2830de2362d3Smrg# be converted. 2831de2362d3Smrg# 2832de2362d3Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 2833de2362d3Smrg# environment variable; do not put it in $PATH. 2834de2362d3Smrgfunc_cygpath () 2835de2362d3Smrg{ 28360d16fef4Smrg $debug_cmd 28370d16fef4Smrg 2838de2362d3Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 2839de2362d3Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 2840de2362d3Smrg if test "$?" -ne 0; then 2841de2362d3Smrg # on failure, ensure result is empty 2842de2362d3Smrg func_cygpath_result= 2843de2362d3Smrg fi 2844de2362d3Smrg else 2845de2362d3Smrg func_cygpath_result= 28460d16fef4Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 2847de2362d3Smrg fi 2848de2362d3Smrg} 2849de2362d3Smrg#end: func_cygpath 2850de2362d3Smrg 2851de2362d3Smrg 2852de2362d3Smrg# func_convert_core_msys_to_w32 ARG 2853de2362d3Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 2854de2362d3Smrg# result in func_convert_core_msys_to_w32_result. 2855de2362d3Smrgfunc_convert_core_msys_to_w32 () 2856de2362d3Smrg{ 28570d16fef4Smrg $debug_cmd 28580d16fef4Smrg 2859de2362d3Smrg # awkward: cmd appends spaces to result 2860de2362d3Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 28610d16fef4Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 2862de2362d3Smrg} 2863de2362d3Smrg#end: func_convert_core_msys_to_w32 2864de2362d3Smrg 2865de2362d3Smrg 2866de2362d3Smrg# func_convert_file_check ARG1 ARG2 2867de2362d3Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 2868de2362d3Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 2869de2362d3Smrg# func_to_host_file_result to ARG1). 2870de2362d3Smrgfunc_convert_file_check () 2871de2362d3Smrg{ 28720d16fef4Smrg $debug_cmd 28730d16fef4Smrg 28740d16fef4Smrg if test -z "$2" && test -n "$1"; then 2875de2362d3Smrg func_error "Could not determine host file name corresponding to" 28760d16fef4Smrg func_error " '$1'" 2877de2362d3Smrg func_error "Continuing, but uninstalled executables may not work." 2878de2362d3Smrg # Fallback: 28790d16fef4Smrg func_to_host_file_result=$1 2880de2362d3Smrg fi 2881de2362d3Smrg} 2882de2362d3Smrg# end func_convert_file_check 2883de2362d3Smrg 2884de2362d3Smrg 2885de2362d3Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 2886de2362d3Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 2887de2362d3Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 2888de2362d3Smrg# func_to_host_file_result to a simplistic fallback value (see below). 2889de2362d3Smrgfunc_convert_path_check () 2890de2362d3Smrg{ 28910d16fef4Smrg $debug_cmd 28920d16fef4Smrg 2893de2362d3Smrg if test -z "$4" && test -n "$3"; then 2894de2362d3Smrg func_error "Could not determine the host path corresponding to" 28950d16fef4Smrg func_error " '$3'" 2896de2362d3Smrg func_error "Continuing, but uninstalled executables may not work." 2897de2362d3Smrg # Fallback. This is a deliberately simplistic "conversion" and 2898de2362d3Smrg # should not be "improved". See libtool.info. 2899de2362d3Smrg if test "x$1" != "x$2"; then 2900de2362d3Smrg lt_replace_pathsep_chars="s|$1|$2|g" 2901de2362d3Smrg func_to_host_path_result=`echo "$3" | 2902de2362d3Smrg $SED -e "$lt_replace_pathsep_chars"` 2903de2362d3Smrg else 29040d16fef4Smrg func_to_host_path_result=$3 2905de2362d3Smrg fi 2906de2362d3Smrg fi 2907de2362d3Smrg} 2908de2362d3Smrg# end func_convert_path_check 2909de2362d3Smrg 2910de2362d3Smrg 2911de2362d3Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 2912de2362d3Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 2913de2362d3Smrg# and appending REPL if ORIG matches BACKPAT. 2914de2362d3Smrgfunc_convert_path_front_back_pathsep () 2915de2362d3Smrg{ 29160d16fef4Smrg $debug_cmd 29170d16fef4Smrg 2918de2362d3Smrg case $4 in 29190d16fef4Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 2920de2362d3Smrg ;; 2921de2362d3Smrg esac 2922de2362d3Smrg case $4 in 2923de2362d3Smrg $2 ) func_append func_to_host_path_result "$3" 2924de2362d3Smrg ;; 2925de2362d3Smrg esac 2926de2362d3Smrg} 2927de2362d3Smrg# end func_convert_path_front_back_pathsep 2928de2362d3Smrg 2929de2362d3Smrg 2930de2362d3Smrg################################################## 2931de2362d3Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 2932de2362d3Smrg################################################## 29330d16fef4Smrg# invoked via '$to_host_file_cmd ARG' 2934de2362d3Smrg# 2935de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format. 2936de2362d3Smrg# Result will be available in $func_to_host_file_result. 2937de2362d3Smrg 2938de2362d3Smrg 2939de2362d3Smrg# func_to_host_file ARG 2940de2362d3Smrg# Converts the file name ARG from $build format to $host format. Return result 2941de2362d3Smrg# in func_to_host_file_result. 2942de2362d3Smrgfunc_to_host_file () 2943de2362d3Smrg{ 29440d16fef4Smrg $debug_cmd 29450d16fef4Smrg 2946de2362d3Smrg $to_host_file_cmd "$1" 2947de2362d3Smrg} 2948de2362d3Smrg# end func_to_host_file 2949de2362d3Smrg 2950de2362d3Smrg 2951de2362d3Smrg# func_to_tool_file ARG LAZY 2952de2362d3Smrg# converts the file name ARG from $build format to toolchain format. Return 2953de2362d3Smrg# result in func_to_tool_file_result. If the conversion in use is listed 2954de2362d3Smrg# in (the comma separated) LAZY, no conversion takes place. 2955de2362d3Smrgfunc_to_tool_file () 2956de2362d3Smrg{ 29570d16fef4Smrg $debug_cmd 29580d16fef4Smrg 2959de2362d3Smrg case ,$2, in 2960de2362d3Smrg *,"$to_tool_file_cmd",*) 2961de2362d3Smrg func_to_tool_file_result=$1 2962de2362d3Smrg ;; 2963de2362d3Smrg *) 2964de2362d3Smrg $to_tool_file_cmd "$1" 2965de2362d3Smrg func_to_tool_file_result=$func_to_host_file_result 2966de2362d3Smrg ;; 2967de2362d3Smrg esac 2968de2362d3Smrg} 2969de2362d3Smrg# end func_to_tool_file 2970de2362d3Smrg 2971de2362d3Smrg 2972de2362d3Smrg# func_convert_file_noop ARG 2973de2362d3Smrg# Copy ARG to func_to_host_file_result. 2974de2362d3Smrgfunc_convert_file_noop () 2975de2362d3Smrg{ 29760d16fef4Smrg func_to_host_file_result=$1 2977de2362d3Smrg} 2978de2362d3Smrg# end func_convert_file_noop 2979de2362d3Smrg 2980de2362d3Smrg 2981de2362d3Smrg# func_convert_file_msys_to_w32 ARG 2982de2362d3Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 2983de2362d3Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 2984de2362d3Smrg# func_to_host_file_result. 2985de2362d3Smrgfunc_convert_file_msys_to_w32 () 2986de2362d3Smrg{ 29870d16fef4Smrg $debug_cmd 29880d16fef4Smrg 29890d16fef4Smrg func_to_host_file_result=$1 2990de2362d3Smrg if test -n "$1"; then 2991de2362d3Smrg func_convert_core_msys_to_w32 "$1" 29920d16fef4Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 2993de2362d3Smrg fi 2994de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 2995de2362d3Smrg} 2996de2362d3Smrg# end func_convert_file_msys_to_w32 2997de2362d3Smrg 2998de2362d3Smrg 2999de2362d3Smrg# func_convert_file_cygwin_to_w32 ARG 3000de2362d3Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3001de2362d3Smrg# func_to_host_file_result. 3002de2362d3Smrgfunc_convert_file_cygwin_to_w32 () 3003de2362d3Smrg{ 30040d16fef4Smrg $debug_cmd 30050d16fef4Smrg 30060d16fef4Smrg func_to_host_file_result=$1 3007de2362d3Smrg if test -n "$1"; then 3008de2362d3Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3009de2362d3Smrg # LT_CYGPATH in this case. 3010de2362d3Smrg func_to_host_file_result=`cygpath -m "$1"` 3011de2362d3Smrg fi 3012de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3013de2362d3Smrg} 3014de2362d3Smrg# end func_convert_file_cygwin_to_w32 3015de2362d3Smrg 3016de2362d3Smrg 3017de2362d3Smrg# func_convert_file_nix_to_w32 ARG 3018de2362d3Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3019de2362d3Smrg# and a working winepath. Returns result in func_to_host_file_result. 3020de2362d3Smrgfunc_convert_file_nix_to_w32 () 3021de2362d3Smrg{ 30220d16fef4Smrg $debug_cmd 30230d16fef4Smrg 30240d16fef4Smrg func_to_host_file_result=$1 3025de2362d3Smrg if test -n "$1"; then 3026de2362d3Smrg func_convert_core_file_wine_to_w32 "$1" 30270d16fef4Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3028de2362d3Smrg fi 3029de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3030de2362d3Smrg} 3031de2362d3Smrg# end func_convert_file_nix_to_w32 3032de2362d3Smrg 3033de2362d3Smrg 3034de2362d3Smrg# func_convert_file_msys_to_cygwin ARG 3035de2362d3Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3036de2362d3Smrg# Returns result in func_to_host_file_result. 3037de2362d3Smrgfunc_convert_file_msys_to_cygwin () 3038de2362d3Smrg{ 30390d16fef4Smrg $debug_cmd 30400d16fef4Smrg 30410d16fef4Smrg func_to_host_file_result=$1 3042de2362d3Smrg if test -n "$1"; then 3043de2362d3Smrg func_convert_core_msys_to_w32 "$1" 3044de2362d3Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 30450d16fef4Smrg func_to_host_file_result=$func_cygpath_result 3046de2362d3Smrg fi 3047de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3048de2362d3Smrg} 3049de2362d3Smrg# end func_convert_file_msys_to_cygwin 3050de2362d3Smrg 3051de2362d3Smrg 3052de2362d3Smrg# func_convert_file_nix_to_cygwin ARG 3053de2362d3Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3054de2362d3Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3055de2362d3Smrg# in func_to_host_file_result. 3056de2362d3Smrgfunc_convert_file_nix_to_cygwin () 3057de2362d3Smrg{ 30580d16fef4Smrg $debug_cmd 30590d16fef4Smrg 30600d16fef4Smrg func_to_host_file_result=$1 3061de2362d3Smrg if test -n "$1"; then 3062de2362d3Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3063de2362d3Smrg func_convert_core_file_wine_to_w32 "$1" 3064de2362d3Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 30650d16fef4Smrg func_to_host_file_result=$func_cygpath_result 3066de2362d3Smrg fi 3067de2362d3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3068de2362d3Smrg} 3069de2362d3Smrg# end func_convert_file_nix_to_cygwin 3070de2362d3Smrg 3071de2362d3Smrg 3072de2362d3Smrg############################################# 3073de2362d3Smrg# $build to $host PATH CONVERSION FUNCTIONS # 3074de2362d3Smrg############################################# 30750d16fef4Smrg# invoked via '$to_host_path_cmd ARG' 3076de2362d3Smrg# 3077de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format. 3078de2362d3Smrg# The result will be available in $func_to_host_path_result. 3079de2362d3Smrg# 3080de2362d3Smrg# Path separators are also converted from $build format to $host format. If 3081de2362d3Smrg# ARG begins or ends with a path separator character, it is preserved (but 3082de2362d3Smrg# converted to $host format) on output. 3083de2362d3Smrg# 3084de2362d3Smrg# All path conversion functions are named using the following convention: 3085de2362d3Smrg# file name conversion function : func_convert_file_X_to_Y () 3086de2362d3Smrg# path conversion function : func_convert_path_X_to_Y () 3087de2362d3Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3088de2362d3Smrg# same. If conversion functions are added for new $build/$host combinations, 3089de2362d3Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3090de2362d3Smrg# will break. 3091de2362d3Smrg 3092de2362d3Smrg 3093de2362d3Smrg# func_init_to_host_path_cmd 3094de2362d3Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3095de2362d3Smrg# appropriate value, based on the value of $to_host_file_cmd. 3096de2362d3Smrgto_host_path_cmd= 3097de2362d3Smrgfunc_init_to_host_path_cmd () 3098de2362d3Smrg{ 30990d16fef4Smrg $debug_cmd 31000d16fef4Smrg 3101de2362d3Smrg if test -z "$to_host_path_cmd"; then 3102de2362d3Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 31030d16fef4Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 3104de2362d3Smrg fi 3105de2362d3Smrg} 3106de2362d3Smrg 3107de2362d3Smrg 3108de2362d3Smrg# func_to_host_path ARG 3109de2362d3Smrg# Converts the path ARG from $build format to $host format. Return result 3110de2362d3Smrg# in func_to_host_path_result. 3111de2362d3Smrgfunc_to_host_path () 3112de2362d3Smrg{ 31130d16fef4Smrg $debug_cmd 31140d16fef4Smrg 3115de2362d3Smrg func_init_to_host_path_cmd 3116de2362d3Smrg $to_host_path_cmd "$1" 3117de2362d3Smrg} 3118de2362d3Smrg# end func_to_host_path 3119de2362d3Smrg 3120de2362d3Smrg 3121de2362d3Smrg# func_convert_path_noop ARG 3122de2362d3Smrg# Copy ARG to func_to_host_path_result. 3123de2362d3Smrgfunc_convert_path_noop () 3124de2362d3Smrg{ 31250d16fef4Smrg func_to_host_path_result=$1 3126de2362d3Smrg} 3127de2362d3Smrg# end func_convert_path_noop 3128de2362d3Smrg 3129de2362d3Smrg 3130de2362d3Smrg# func_convert_path_msys_to_w32 ARG 3131de2362d3Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3132de2362d3Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3133de2362d3Smrg# func_to_host_path_result. 3134de2362d3Smrgfunc_convert_path_msys_to_w32 () 3135de2362d3Smrg{ 31360d16fef4Smrg $debug_cmd 31370d16fef4Smrg 31380d16fef4Smrg func_to_host_path_result=$1 3139de2362d3Smrg if test -n "$1"; then 3140de2362d3Smrg # Remove leading and trailing path separator characters from ARG. MSYS 3141de2362d3Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3142de2362d3Smrg # and winepath ignores them completely. 3143de2362d3Smrg func_stripname : : "$1" 3144de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 3145de2362d3Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 31460d16fef4Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3147de2362d3Smrg func_convert_path_check : ";" \ 3148de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3149de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3150de2362d3Smrg fi 3151de2362d3Smrg} 3152de2362d3Smrg# end func_convert_path_msys_to_w32 3153de2362d3Smrg 3154de2362d3Smrg 3155de2362d3Smrg# func_convert_path_cygwin_to_w32 ARG 3156de2362d3Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 3157de2362d3Smrg# func_to_host_file_result. 3158de2362d3Smrgfunc_convert_path_cygwin_to_w32 () 3159de2362d3Smrg{ 31600d16fef4Smrg $debug_cmd 31610d16fef4Smrg 31620d16fef4Smrg func_to_host_path_result=$1 3163de2362d3Smrg if test -n "$1"; then 3164de2362d3Smrg # See func_convert_path_msys_to_w32: 3165de2362d3Smrg func_stripname : : "$1" 3166de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 3167de2362d3Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3168de2362d3Smrg func_convert_path_check : ";" \ 3169de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3170de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3171de2362d3Smrg fi 3172de2362d3Smrg} 3173de2362d3Smrg# end func_convert_path_cygwin_to_w32 3174de2362d3Smrg 3175de2362d3Smrg 3176de2362d3Smrg# func_convert_path_nix_to_w32 ARG 3177de2362d3Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3178de2362d3Smrg# a working winepath. Returns result in func_to_host_file_result. 3179de2362d3Smrgfunc_convert_path_nix_to_w32 () 3180de2362d3Smrg{ 31810d16fef4Smrg $debug_cmd 31820d16fef4Smrg 31830d16fef4Smrg func_to_host_path_result=$1 3184de2362d3Smrg if test -n "$1"; then 3185de2362d3Smrg # See func_convert_path_msys_to_w32: 3186de2362d3Smrg func_stripname : : "$1" 3187de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 3188de2362d3Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 31890d16fef4Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3190de2362d3Smrg func_convert_path_check : ";" \ 3191de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3192de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3193de2362d3Smrg fi 3194de2362d3Smrg} 3195de2362d3Smrg# end func_convert_path_nix_to_w32 3196de2362d3Smrg 3197de2362d3Smrg 3198de2362d3Smrg# func_convert_path_msys_to_cygwin ARG 3199de2362d3Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3200de2362d3Smrg# Returns result in func_to_host_file_result. 3201de2362d3Smrgfunc_convert_path_msys_to_cygwin () 3202de2362d3Smrg{ 32030d16fef4Smrg $debug_cmd 32040d16fef4Smrg 32050d16fef4Smrg func_to_host_path_result=$1 3206de2362d3Smrg if test -n "$1"; then 3207de2362d3Smrg # See func_convert_path_msys_to_w32: 3208de2362d3Smrg func_stripname : : "$1" 3209de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 3210de2362d3Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3211de2362d3Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 32120d16fef4Smrg func_to_host_path_result=$func_cygpath_result 3213de2362d3Smrg func_convert_path_check : : \ 3214de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3215de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3216de2362d3Smrg fi 3217de2362d3Smrg} 3218de2362d3Smrg# end func_convert_path_msys_to_cygwin 3219de2362d3Smrg 3220de2362d3Smrg 3221de2362d3Smrg# func_convert_path_nix_to_cygwin ARG 3222de2362d3Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3223de2362d3Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3224de2362d3Smrg# func_to_host_file_result. 3225de2362d3Smrgfunc_convert_path_nix_to_cygwin () 3226de2362d3Smrg{ 32270d16fef4Smrg $debug_cmd 32280d16fef4Smrg 32290d16fef4Smrg func_to_host_path_result=$1 3230de2362d3Smrg if test -n "$1"; then 3231de2362d3Smrg # Remove leading and trailing path separator characters from 3232de2362d3Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3233de2362d3Smrg # into '.;' and ';.', and winepath ignores them completely. 3234de2362d3Smrg func_stripname : : "$1" 3235de2362d3Smrg func_to_host_path_tmp1=$func_stripname_result 3236de2362d3Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3237de2362d3Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 32380d16fef4Smrg func_to_host_path_result=$func_cygpath_result 3239de2362d3Smrg func_convert_path_check : : \ 3240de2362d3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3241de2362d3Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3242de2362d3Smrg fi 3243de2362d3Smrg} 3244de2362d3Smrg# end func_convert_path_nix_to_cygwin 3245de2362d3Smrg 3246de2362d3Smrg 32470d16fef4Smrg# func_dll_def_p FILE 32480d16fef4Smrg# True iff FILE is a Windows DLL '.def' file. 32490d16fef4Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 32500d16fef4Smrgfunc_dll_def_p () 32510d16fef4Smrg{ 32520d16fef4Smrg $debug_cmd 32530d16fef4Smrg 32540d16fef4Smrg func_dll_def_p_tmp=`$SED -n \ 32550d16fef4Smrg -e 's/^[ ]*//' \ 32560d16fef4Smrg -e '/^\(;.*\)*$/d' \ 32570d16fef4Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 32580d16fef4Smrg -e q \ 32590d16fef4Smrg "$1"` 32600d16fef4Smrg test DEF = "$func_dll_def_p_tmp" 32610d16fef4Smrg} 32620d16fef4Smrg 32630d16fef4Smrg 3264de2362d3Smrg# func_mode_compile arg... 3265de2362d3Smrgfunc_mode_compile () 3266de2362d3Smrg{ 32670d16fef4Smrg $debug_cmd 32680d16fef4Smrg 3269de2362d3Smrg # Get the compilation command and the source file. 3270de2362d3Smrg base_compile= 32710d16fef4Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3272de2362d3Smrg suppress_opt=yes 3273de2362d3Smrg suppress_output= 3274de2362d3Smrg arg_mode=normal 3275de2362d3Smrg libobj= 3276de2362d3Smrg later= 3277de2362d3Smrg pie_flag= 3278de2362d3Smrg 3279de2362d3Smrg for arg 3280de2362d3Smrg do 3281de2362d3Smrg case $arg_mode in 3282de2362d3Smrg arg ) 3283de2362d3Smrg # do not "continue". Instead, add this to base_compile 32840d16fef4Smrg lastarg=$arg 3285de2362d3Smrg arg_mode=normal 3286de2362d3Smrg ;; 3287de2362d3Smrg 3288de2362d3Smrg target ) 32890d16fef4Smrg libobj=$arg 3290de2362d3Smrg arg_mode=normal 3291de2362d3Smrg continue 3292de2362d3Smrg ;; 3293de2362d3Smrg 3294de2362d3Smrg normal ) 3295de2362d3Smrg # Accept any command-line options. 3296de2362d3Smrg case $arg in 3297de2362d3Smrg -o) 3298de2362d3Smrg test -n "$libobj" && \ 32990d16fef4Smrg func_fatal_error "you cannot specify '-o' more than once" 3300de2362d3Smrg arg_mode=target 3301de2362d3Smrg continue 3302de2362d3Smrg ;; 3303de2362d3Smrg 3304de2362d3Smrg -pie | -fpie | -fPIE) 3305de2362d3Smrg func_append pie_flag " $arg" 3306de2362d3Smrg continue 3307de2362d3Smrg ;; 3308de2362d3Smrg 3309de2362d3Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 3310de2362d3Smrg func_append later " $arg" 3311de2362d3Smrg continue 3312de2362d3Smrg ;; 3313de2362d3Smrg 3314de2362d3Smrg -no-suppress) 3315de2362d3Smrg suppress_opt=no 3316de2362d3Smrg continue 3317de2362d3Smrg ;; 3318de2362d3Smrg 3319de2362d3Smrg -Xcompiler) 3320de2362d3Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 3321de2362d3Smrg continue # The current "srcfile" will either be retained or 3322de2362d3Smrg ;; # replaced later. I would guess that would be a bug. 3323de2362d3Smrg 3324de2362d3Smrg -Wc,*) 3325de2362d3Smrg func_stripname '-Wc,' '' "$arg" 3326de2362d3Smrg args=$func_stripname_result 3327de2362d3Smrg lastarg= 33280d16fef4Smrg save_ifs=$IFS; IFS=, 3329de2362d3Smrg for arg in $args; do 33300d16fef4Smrg IFS=$save_ifs 3331de2362d3Smrg func_append_quoted lastarg "$arg" 3332de2362d3Smrg done 33330d16fef4Smrg IFS=$save_ifs 3334de2362d3Smrg func_stripname ' ' '' "$lastarg" 3335de2362d3Smrg lastarg=$func_stripname_result 3336de2362d3Smrg 3337de2362d3Smrg # Add the arguments to base_compile. 3338de2362d3Smrg func_append base_compile " $lastarg" 3339de2362d3Smrg continue 3340de2362d3Smrg ;; 3341de2362d3Smrg 3342de2362d3Smrg *) 3343de2362d3Smrg # Accept the current argument as the source file. 3344de2362d3Smrg # The previous "srcfile" becomes the current argument. 3345de2362d3Smrg # 33460d16fef4Smrg lastarg=$srcfile 33470d16fef4Smrg srcfile=$arg 3348de2362d3Smrg ;; 3349de2362d3Smrg esac # case $arg 3350de2362d3Smrg ;; 3351de2362d3Smrg esac # case $arg_mode 3352de2362d3Smrg 3353de2362d3Smrg # Aesthetically quote the previous argument. 3354de2362d3Smrg func_append_quoted base_compile "$lastarg" 3355de2362d3Smrg done # for arg 3356de2362d3Smrg 3357de2362d3Smrg case $arg_mode in 3358de2362d3Smrg arg) 3359de2362d3Smrg func_fatal_error "you must specify an argument for -Xcompile" 3360de2362d3Smrg ;; 3361de2362d3Smrg target) 33620d16fef4Smrg func_fatal_error "you must specify a target with '-o'" 3363de2362d3Smrg ;; 3364de2362d3Smrg *) 3365de2362d3Smrg # Get the name of the library object. 3366de2362d3Smrg test -z "$libobj" && { 3367de2362d3Smrg func_basename "$srcfile" 33680d16fef4Smrg libobj=$func_basename_result 3369de2362d3Smrg } 3370de2362d3Smrg ;; 3371de2362d3Smrg esac 3372de2362d3Smrg 3373de2362d3Smrg # Recognize several different file suffixes. 3374de2362d3Smrg # If the user specifies -o file.o, it is replaced with file.lo 3375de2362d3Smrg case $libobj in 3376de2362d3Smrg *.[cCFSifmso] | \ 3377de2362d3Smrg *.ada | *.adb | *.ads | *.asm | \ 3378de2362d3Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3379de2362d3Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3380de2362d3Smrg func_xform "$libobj" 3381de2362d3Smrg libobj=$func_xform_result 3382de2362d3Smrg ;; 3383de2362d3Smrg esac 3384de2362d3Smrg 3385de2362d3Smrg case $libobj in 3386de2362d3Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3387de2362d3Smrg *) 33880d16fef4Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 3389de2362d3Smrg ;; 3390de2362d3Smrg esac 3391de2362d3Smrg 3392de2362d3Smrg func_infer_tag $base_compile 3393de2362d3Smrg 3394de2362d3Smrg for arg in $later; do 3395de2362d3Smrg case $arg in 3396de2362d3Smrg -shared) 33970d16fef4Smrg test yes = "$build_libtool_libs" \ 33980d16fef4Smrg || func_fatal_configuration "cannot build a shared library" 3399de2362d3Smrg build_old_libs=no 3400de2362d3Smrg continue 3401de2362d3Smrg ;; 3402de2362d3Smrg 3403de2362d3Smrg -static) 3404de2362d3Smrg build_libtool_libs=no 3405de2362d3Smrg build_old_libs=yes 3406de2362d3Smrg continue 3407de2362d3Smrg ;; 3408de2362d3Smrg 3409de2362d3Smrg -prefer-pic) 3410de2362d3Smrg pic_mode=yes 3411de2362d3Smrg continue 3412de2362d3Smrg ;; 3413de2362d3Smrg 3414de2362d3Smrg -prefer-non-pic) 3415de2362d3Smrg pic_mode=no 3416de2362d3Smrg continue 3417de2362d3Smrg ;; 3418de2362d3Smrg esac 3419de2362d3Smrg done 3420de2362d3Smrg 3421de2362d3Smrg func_quote_for_eval "$libobj" 3422de2362d3Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 3423de2362d3Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 34240d16fef4Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3425de2362d3Smrg func_dirname_and_basename "$obj" "/" "" 34260d16fef4Smrg objname=$func_basename_result 34270d16fef4Smrg xdir=$func_dirname_result 34280d16fef4Smrg lobj=$xdir$objdir/$objname 3429de2362d3Smrg 3430de2362d3Smrg test -z "$base_compile" && \ 3431de2362d3Smrg func_fatal_help "you must specify a compilation command" 3432de2362d3Smrg 3433de2362d3Smrg # Delete any leftover library objects. 34340d16fef4Smrg if test yes = "$build_old_libs"; then 3435de2362d3Smrg removelist="$obj $lobj $libobj ${libobj}T" 3436de2362d3Smrg else 3437de2362d3Smrg removelist="$lobj $libobj ${libobj}T" 3438de2362d3Smrg fi 3439de2362d3Smrg 3440de2362d3Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 3441de2362d3Smrg case $host_os in 3442de2362d3Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 3443de2362d3Smrg pic_mode=default 3444de2362d3Smrg ;; 3445de2362d3Smrg esac 34460d16fef4Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3447de2362d3Smrg # non-PIC code in shared libraries is not supported 3448de2362d3Smrg pic_mode=default 3449de2362d3Smrg fi 3450de2362d3Smrg 3451de2362d3Smrg # Calculate the filename of the output object if compiler does 3452de2362d3Smrg # not support -o with -c 34530d16fef4Smrg if test no = "$compiler_c_o"; then 34540d16fef4Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 34550d16fef4Smrg lockfile=$output_obj.lock 3456de2362d3Smrg else 3457de2362d3Smrg output_obj= 3458de2362d3Smrg need_locks=no 3459de2362d3Smrg lockfile= 3460de2362d3Smrg fi 3461de2362d3Smrg 3462de2362d3Smrg # Lock this critical section if it is needed 3463de2362d3Smrg # We use this script file to make the link, it avoids creating a new file 34640d16fef4Smrg if test yes = "$need_locks"; then 3465de2362d3Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3466de2362d3Smrg func_echo "Waiting for $lockfile to be removed" 3467de2362d3Smrg sleep 2 3468de2362d3Smrg done 34690d16fef4Smrg elif test warn = "$need_locks"; then 3470de2362d3Smrg if test -f "$lockfile"; then 3471de2362d3Smrg $ECHO "\ 3472de2362d3Smrg*** ERROR, $lockfile exists and contains: 3473de2362d3Smrg`cat $lockfile 2>/dev/null` 3474de2362d3Smrg 3475de2362d3SmrgThis indicates that another process is trying to use the same 3476de2362d3Smrgtemporary object file, and libtool could not work around it because 34770d16fef4Smrgyour compiler does not support '-c' and '-o' together. If you 3478de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 3479de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better 3480de2362d3Smrgcompiler." 3481de2362d3Smrg 3482de2362d3Smrg $opt_dry_run || $RM $removelist 3483de2362d3Smrg exit $EXIT_FAILURE 3484de2362d3Smrg fi 3485de2362d3Smrg func_append removelist " $output_obj" 3486de2362d3Smrg $ECHO "$srcfile" > "$lockfile" 3487de2362d3Smrg fi 3488de2362d3Smrg 3489de2362d3Smrg $opt_dry_run || $RM $removelist 3490de2362d3Smrg func_append removelist " $lockfile" 3491de2362d3Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3492de2362d3Smrg 3493de2362d3Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3494de2362d3Smrg srcfile=$func_to_tool_file_result 3495de2362d3Smrg func_quote_for_eval "$srcfile" 3496de2362d3Smrg qsrcfile=$func_quote_for_eval_result 3497de2362d3Smrg 3498de2362d3Smrg # Only build a PIC object if we are building libtool libraries. 34990d16fef4Smrg if test yes = "$build_libtool_libs"; then 3500de2362d3Smrg # Without this assignment, base_compile gets emptied. 3501de2362d3Smrg fbsd_hideous_sh_bug=$base_compile 3502de2362d3Smrg 35030d16fef4Smrg if test no != "$pic_mode"; then 3504de2362d3Smrg command="$base_compile $qsrcfile $pic_flag" 3505de2362d3Smrg else 3506de2362d3Smrg # Don't build PIC code 3507de2362d3Smrg command="$base_compile $qsrcfile" 3508de2362d3Smrg fi 3509de2362d3Smrg 3510de2362d3Smrg func_mkdir_p "$xdir$objdir" 3511de2362d3Smrg 3512de2362d3Smrg if test -z "$output_obj"; then 3513de2362d3Smrg # Place PIC objects in $objdir 3514de2362d3Smrg func_append command " -o $lobj" 3515de2362d3Smrg fi 3516de2362d3Smrg 3517de2362d3Smrg func_show_eval_locale "$command" \ 3518de2362d3Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3519de2362d3Smrg 35200d16fef4Smrg if test warn = "$need_locks" && 3521de2362d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3522de2362d3Smrg $ECHO "\ 3523de2362d3Smrg*** ERROR, $lockfile contains: 3524de2362d3Smrg`cat $lockfile 2>/dev/null` 3525de2362d3Smrg 3526de2362d3Smrgbut it should contain: 3527de2362d3Smrg$srcfile 3528de2362d3Smrg 3529de2362d3SmrgThis indicates that another process is trying to use the same 3530de2362d3Smrgtemporary object file, and libtool could not work around it because 35310d16fef4Smrgyour compiler does not support '-c' and '-o' together. If you 3532de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 3533de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better 3534de2362d3Smrgcompiler." 3535de2362d3Smrg 3536de2362d3Smrg $opt_dry_run || $RM $removelist 3537de2362d3Smrg exit $EXIT_FAILURE 3538de2362d3Smrg fi 3539de2362d3Smrg 3540de2362d3Smrg # Just move the object if needed, then go on to compile the next one 3541de2362d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3542de2362d3Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3543de2362d3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3544de2362d3Smrg fi 3545de2362d3Smrg 3546de2362d3Smrg # Allow error messages only from the first compilation. 35470d16fef4Smrg if test yes = "$suppress_opt"; then 3548de2362d3Smrg suppress_output=' >/dev/null 2>&1' 3549de2362d3Smrg fi 3550de2362d3Smrg fi 3551de2362d3Smrg 3552de2362d3Smrg # Only build a position-dependent object if we build old libraries. 35530d16fef4Smrg if test yes = "$build_old_libs"; then 35540d16fef4Smrg if test yes != "$pic_mode"; then 3555de2362d3Smrg # Don't build PIC code 3556de2362d3Smrg command="$base_compile $qsrcfile$pie_flag" 3557de2362d3Smrg else 3558de2362d3Smrg command="$base_compile $qsrcfile $pic_flag" 3559de2362d3Smrg fi 35600d16fef4Smrg if test yes = "$compiler_c_o"; then 3561de2362d3Smrg func_append command " -o $obj" 3562de2362d3Smrg fi 3563de2362d3Smrg 3564de2362d3Smrg # Suppress compiler output if we already did a PIC compilation. 3565de2362d3Smrg func_append command "$suppress_output" 3566de2362d3Smrg func_show_eval_locale "$command" \ 3567de2362d3Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3568de2362d3Smrg 35690d16fef4Smrg if test warn = "$need_locks" && 3570de2362d3Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3571de2362d3Smrg $ECHO "\ 3572de2362d3Smrg*** ERROR, $lockfile contains: 3573de2362d3Smrg`cat $lockfile 2>/dev/null` 3574de2362d3Smrg 3575de2362d3Smrgbut it should contain: 3576de2362d3Smrg$srcfile 3577de2362d3Smrg 3578de2362d3SmrgThis indicates that another process is trying to use the same 3579de2362d3Smrgtemporary object file, and libtool could not work around it because 35800d16fef4Smrgyour compiler does not support '-c' and '-o' together. If you 3581de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better 3582de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better 3583de2362d3Smrgcompiler." 3584de2362d3Smrg 3585de2362d3Smrg $opt_dry_run || $RM $removelist 3586de2362d3Smrg exit $EXIT_FAILURE 3587de2362d3Smrg fi 3588de2362d3Smrg 3589de2362d3Smrg # Just move the object if needed 3590de2362d3Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3591de2362d3Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 3592de2362d3Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3593de2362d3Smrg fi 3594de2362d3Smrg fi 3595de2362d3Smrg 3596de2362d3Smrg $opt_dry_run || { 3597de2362d3Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3598de2362d3Smrg 3599de2362d3Smrg # Unlock the critical section if it was locked 36000d16fef4Smrg if test no != "$need_locks"; then 3601de2362d3Smrg removelist=$lockfile 3602de2362d3Smrg $RM "$lockfile" 3603de2362d3Smrg fi 3604de2362d3Smrg } 3605de2362d3Smrg 3606de2362d3Smrg exit $EXIT_SUCCESS 3607de2362d3Smrg} 3608de2362d3Smrg 3609de2362d3Smrg$opt_help || { 36100d16fef4Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3611de2362d3Smrg} 3612de2362d3Smrg 3613de2362d3Smrgfunc_mode_help () 3614de2362d3Smrg{ 3615de2362d3Smrg # We need to display help for each of the modes. 3616de2362d3Smrg case $opt_mode in 3617de2362d3Smrg "") 3618de2362d3Smrg # Generic help is extracted from the usage comments 3619de2362d3Smrg # at the start of this file. 3620de2362d3Smrg func_help 3621de2362d3Smrg ;; 3622de2362d3Smrg 3623de2362d3Smrg clean) 3624de2362d3Smrg $ECHO \ 3625de2362d3Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3626de2362d3Smrg 3627de2362d3SmrgRemove files from the build directory. 3628de2362d3Smrg 3629de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE 36300d16fef4Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3631de2362d3Smrgto RM. 3632de2362d3Smrg 3633de2362d3SmrgIf FILE is a libtool library, object or program, all the files associated 3634de2362d3Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3635de2362d3Smrg ;; 3636de2362d3Smrg 3637de2362d3Smrg compile) 3638de2362d3Smrg $ECHO \ 3639de2362d3Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3640de2362d3Smrg 3641de2362d3SmrgCompile a source file into a libtool library object. 3642de2362d3Smrg 3643de2362d3SmrgThis mode accepts the following additional options: 3644de2362d3Smrg 3645de2362d3Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3646de2362d3Smrg -no-suppress do not suppress compiler output for multiple passes 3647de2362d3Smrg -prefer-pic try to build PIC objects only 3648de2362d3Smrg -prefer-non-pic try to build non-PIC objects only 36490d16fef4Smrg -shared do not build a '.o' file suitable for static linking 36500d16fef4Smrg -static only build a '.o' file suitable for static linking 3651de2362d3Smrg -Wc,FLAG pass FLAG directly to the compiler 3652de2362d3Smrg 36530d16fef4SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3654de2362d3Smrgfrom the given SOURCEFILE. 3655de2362d3Smrg 3656de2362d3SmrgThe output file name is determined by removing the directory component from 36570d16fef4SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 36580d16fef4Smrglibrary object suffix, '.lo'." 3659de2362d3Smrg ;; 3660de2362d3Smrg 3661de2362d3Smrg execute) 3662de2362d3Smrg $ECHO \ 3663de2362d3Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3664de2362d3Smrg 3665de2362d3SmrgAutomatically set library path, then run a program. 3666de2362d3Smrg 3667de2362d3SmrgThis mode accepts the following additional options: 3668de2362d3Smrg 3669de2362d3Smrg -dlopen FILE add the directory containing FILE to the library path 3670de2362d3Smrg 36710d16fef4SmrgThis mode sets the library path environment variable according to '-dlopen' 3672de2362d3Smrgflags. 3673de2362d3Smrg 3674de2362d3SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 3675de2362d3Smrginto their corresponding uninstalled binary, and any of their required library 3676de2362d3Smrgdirectories are added to the library path. 3677de2362d3Smrg 3678de2362d3SmrgThen, COMMAND is executed, with ARGS as arguments." 3679de2362d3Smrg ;; 3680de2362d3Smrg 3681de2362d3Smrg finish) 3682de2362d3Smrg $ECHO \ 3683de2362d3Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3684de2362d3Smrg 3685de2362d3SmrgComplete the installation of libtool libraries. 3686de2362d3Smrg 3687de2362d3SmrgEach LIBDIR is a directory that contains libtool libraries. 3688de2362d3Smrg 3689de2362d3SmrgThe commands that this mode executes may require superuser privileges. Use 36900d16fef4Smrgthe '--dry-run' option if you just want to see what would be executed." 3691de2362d3Smrg ;; 3692de2362d3Smrg 3693de2362d3Smrg install) 3694de2362d3Smrg $ECHO \ 3695de2362d3Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3696de2362d3Smrg 3697de2362d3SmrgInstall executables or libraries. 3698de2362d3Smrg 3699de2362d3SmrgINSTALL-COMMAND is the installation command. The first component should be 37000d16fef4Smrgeither the 'install' or 'cp' program. 3701de2362d3Smrg 3702de2362d3SmrgThe following components of INSTALL-COMMAND are treated specially: 3703de2362d3Smrg 3704de2362d3Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3705de2362d3Smrg 3706de2362d3SmrgThe rest of the components are interpreted as arguments to that command (only 3707de2362d3SmrgBSD-compatible install options are recognized)." 3708de2362d3Smrg ;; 3709de2362d3Smrg 3710de2362d3Smrg link) 3711de2362d3Smrg $ECHO \ 3712de2362d3Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3713de2362d3Smrg 3714de2362d3SmrgLink object files or libraries together to form another library, or to 3715de2362d3Smrgcreate an executable program. 3716de2362d3Smrg 3717de2362d3SmrgLINK-COMMAND is a command using the C compiler that you would use to create 3718de2362d3Smrga program from several object files. 3719de2362d3Smrg 3720de2362d3SmrgThe following components of LINK-COMMAND are treated specially: 3721de2362d3Smrg 3722de2362d3Smrg -all-static do not do any dynamic linking at all 3723de2362d3Smrg -avoid-version do not add a version suffix if possible 3724de2362d3Smrg -bindir BINDIR specify path to binaries directory (for systems where 3725de2362d3Smrg libraries must be found in the PATH setting at runtime) 37260d16fef4Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3727de2362d3Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3728de2362d3Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3729de2362d3Smrg -export-symbols SYMFILE 3730de2362d3Smrg try to export only the symbols listed in SYMFILE 3731de2362d3Smrg -export-symbols-regex REGEX 3732de2362d3Smrg try to export only the symbols matching REGEX 3733de2362d3Smrg -LLIBDIR search LIBDIR for required installed libraries 3734de2362d3Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 3735de2362d3Smrg -module build a library that can dlopened 3736de2362d3Smrg -no-fast-install disable the fast-install mode 3737de2362d3Smrg -no-install link a not-installable executable 3738de2362d3Smrg -no-undefined declare that a library does not refer to external symbols 3739de2362d3Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 37400d16fef4Smrg -objectlist FILE use a list of object files found in FILE to specify objects 37410d16fef4Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3742de2362d3Smrg -precious-files-regex REGEX 3743de2362d3Smrg don't remove output files matching REGEX 3744de2362d3Smrg -release RELEASE specify package release information 3745de2362d3Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 3746de2362d3Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 3747de2362d3Smrg -shared only do dynamic linking of libtool libraries 3748de2362d3Smrg -shrext SUFFIX override the standard shared library file extension 3749de2362d3Smrg -static do not do any dynamic linking of uninstalled libtool libraries 3750de2362d3Smrg -static-libtool-libs 3751de2362d3Smrg do not do any dynamic linking of libtool libraries 3752de2362d3Smrg -version-info CURRENT[:REVISION[:AGE]] 3753de2362d3Smrg specify library version info [each variable defaults to 0] 3754de2362d3Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 3755de2362d3Smrg -Wc,FLAG 3756de2362d3Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 3757de2362d3Smrg -Wl,FLAG 3758de2362d3Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 3759de2362d3Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 3760de2362d3Smrg 37610d16fef4SmrgAll other options (arguments beginning with '-') are ignored. 3762de2362d3Smrg 37630d16fef4SmrgEvery other argument is treated as a filename. Files ending in '.la' are 3764de2362d3Smrgtreated as uninstalled libtool libraries, other files are standard or library 3765de2362d3Smrgobject files. 3766de2362d3Smrg 37670d16fef4SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 37680d16fef4Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 3769de2362d3Smrgrequired, except when creating a convenience library. 3770de2362d3Smrg 37710d16fef4SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 37720d16fef4Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 3773de2362d3Smrg 37740d16fef4SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 3775de2362d3Smrgis created, otherwise an executable program is created." 3776de2362d3Smrg ;; 3777de2362d3Smrg 3778de2362d3Smrg uninstall) 3779de2362d3Smrg $ECHO \ 3780de2362d3Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 3781de2362d3Smrg 3782de2362d3SmrgRemove libraries from an installation directory. 3783de2362d3Smrg 3784de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE 37850d16fef4Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3786de2362d3Smrgto RM. 3787de2362d3Smrg 3788de2362d3SmrgIf FILE is a libtool library, all the files associated with it are deleted. 3789de2362d3SmrgOtherwise, only FILE itself is deleted using RM." 3790de2362d3Smrg ;; 3791de2362d3Smrg 3792de2362d3Smrg *) 37930d16fef4Smrg func_fatal_help "invalid operation mode '$opt_mode'" 3794de2362d3Smrg ;; 3795de2362d3Smrg esac 3796de2362d3Smrg 3797de2362d3Smrg echo 37980d16fef4Smrg $ECHO "Try '$progname --help' for more information about other modes." 3799de2362d3Smrg} 3800de2362d3Smrg 3801de2362d3Smrg# Now that we've collected a possible --mode arg, show help if necessary 3802de2362d3Smrgif $opt_help; then 38030d16fef4Smrg if test : = "$opt_help"; then 3804de2362d3Smrg func_mode_help 3805de2362d3Smrg else 3806de2362d3Smrg { 3807de2362d3Smrg func_help noexit 3808de2362d3Smrg for opt_mode in compile link execute install finish uninstall clean; do 3809de2362d3Smrg func_mode_help 3810de2362d3Smrg done 38110d16fef4Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 3812de2362d3Smrg { 3813de2362d3Smrg func_help noexit 3814de2362d3Smrg for opt_mode in compile link execute install finish uninstall clean; do 3815de2362d3Smrg echo 3816de2362d3Smrg func_mode_help 3817de2362d3Smrg done 3818de2362d3Smrg } | 38190d16fef4Smrg $SED '1d 3820de2362d3Smrg /^When reporting/,/^Report/{ 3821de2362d3Smrg H 3822de2362d3Smrg d 3823de2362d3Smrg } 3824de2362d3Smrg $x 3825de2362d3Smrg /information about other modes/d 3826de2362d3Smrg /more detailed .*MODE/d 3827de2362d3Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 3828de2362d3Smrg fi 3829de2362d3Smrg exit $? 3830de2362d3Smrgfi 3831de2362d3Smrg 3832de2362d3Smrg 3833de2362d3Smrg# func_mode_execute arg... 3834de2362d3Smrgfunc_mode_execute () 3835de2362d3Smrg{ 38360d16fef4Smrg $debug_cmd 38370d16fef4Smrg 3838de2362d3Smrg # The first argument is the command name. 38390d16fef4Smrg cmd=$nonopt 3840de2362d3Smrg test -z "$cmd" && \ 3841de2362d3Smrg func_fatal_help "you must specify a COMMAND" 3842de2362d3Smrg 3843de2362d3Smrg # Handle -dlopen flags immediately. 3844de2362d3Smrg for file in $opt_dlopen; do 3845de2362d3Smrg test -f "$file" \ 38460d16fef4Smrg || func_fatal_help "'$file' is not a file" 3847de2362d3Smrg 3848de2362d3Smrg dir= 3849de2362d3Smrg case $file in 3850de2362d3Smrg *.la) 3851de2362d3Smrg func_resolve_sysroot "$file" 3852de2362d3Smrg file=$func_resolve_sysroot_result 3853de2362d3Smrg 3854de2362d3Smrg # Check to see that this really is a libtool archive. 3855de2362d3Smrg func_lalib_unsafe_p "$file" \ 38560d16fef4Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 3857de2362d3Smrg 3858de2362d3Smrg # Read the libtool library. 3859de2362d3Smrg dlname= 3860de2362d3Smrg library_names= 3861de2362d3Smrg func_source "$file" 3862de2362d3Smrg 3863de2362d3Smrg # Skip this library if it cannot be dlopened. 3864de2362d3Smrg if test -z "$dlname"; then 3865de2362d3Smrg # Warn if it was a shared library. 3866de2362d3Smrg test -n "$library_names" && \ 38670d16fef4Smrg func_warning "'$file' was not linked with '-export-dynamic'" 3868de2362d3Smrg continue 3869de2362d3Smrg fi 3870de2362d3Smrg 3871de2362d3Smrg func_dirname "$file" "" "." 38720d16fef4Smrg dir=$func_dirname_result 3873de2362d3Smrg 3874de2362d3Smrg if test -f "$dir/$objdir/$dlname"; then 3875de2362d3Smrg func_append dir "/$objdir" 3876de2362d3Smrg else 3877de2362d3Smrg if test ! -f "$dir/$dlname"; then 38780d16fef4Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 3879de2362d3Smrg fi 3880de2362d3Smrg fi 3881de2362d3Smrg ;; 3882de2362d3Smrg 3883de2362d3Smrg *.lo) 3884de2362d3Smrg # Just add the directory containing the .lo file. 3885de2362d3Smrg func_dirname "$file" "" "." 38860d16fef4Smrg dir=$func_dirname_result 3887de2362d3Smrg ;; 3888de2362d3Smrg 3889de2362d3Smrg *) 38900d16fef4Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 3891de2362d3Smrg continue 3892de2362d3Smrg ;; 3893de2362d3Smrg esac 3894de2362d3Smrg 3895de2362d3Smrg # Get the absolute pathname. 3896de2362d3Smrg absdir=`cd "$dir" && pwd` 38970d16fef4Smrg test -n "$absdir" && dir=$absdir 3898de2362d3Smrg 3899de2362d3Smrg # Now add the directory to shlibpath_var. 3900de2362d3Smrg if eval "test -z \"\$$shlibpath_var\""; then 3901de2362d3Smrg eval "$shlibpath_var=\"\$dir\"" 3902de2362d3Smrg else 3903de2362d3Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 3904de2362d3Smrg fi 3905de2362d3Smrg done 3906de2362d3Smrg 3907de2362d3Smrg # This variable tells wrapper scripts just to set shlibpath_var 3908de2362d3Smrg # rather than running their programs. 39090d16fef4Smrg libtool_execute_magic=$magic 3910de2362d3Smrg 3911de2362d3Smrg # Check if any of the arguments is a wrapper script. 3912de2362d3Smrg args= 3913de2362d3Smrg for file 3914de2362d3Smrg do 3915de2362d3Smrg case $file in 3916de2362d3Smrg -* | *.la | *.lo ) ;; 3917de2362d3Smrg *) 3918de2362d3Smrg # Do a test to see if this is really a libtool program. 3919de2362d3Smrg if func_ltwrapper_script_p "$file"; then 3920de2362d3Smrg func_source "$file" 3921de2362d3Smrg # Transform arg to wrapped name. 39220d16fef4Smrg file=$progdir/$program 3923de2362d3Smrg elif func_ltwrapper_executable_p "$file"; then 3924de2362d3Smrg func_ltwrapper_scriptname "$file" 3925de2362d3Smrg func_source "$func_ltwrapper_scriptname_result" 3926de2362d3Smrg # Transform arg to wrapped name. 39270d16fef4Smrg file=$progdir/$program 3928de2362d3Smrg fi 3929de2362d3Smrg ;; 3930de2362d3Smrg esac 3931de2362d3Smrg # Quote arguments (to preserve shell metacharacters). 3932de2362d3Smrg func_append_quoted args "$file" 3933de2362d3Smrg done 3934de2362d3Smrg 39350d16fef4Smrg if $opt_dry_run; then 39360d16fef4Smrg # Display what would be done. 39370d16fef4Smrg if test -n "$shlibpath_var"; then 39380d16fef4Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 39390d16fef4Smrg echo "export $shlibpath_var" 39400d16fef4Smrg fi 39410d16fef4Smrg $ECHO "$cmd$args" 39420d16fef4Smrg exit $EXIT_SUCCESS 39430d16fef4Smrg else 3944de2362d3Smrg if test -n "$shlibpath_var"; then 3945de2362d3Smrg # Export the shlibpath_var. 3946de2362d3Smrg eval "export $shlibpath_var" 3947de2362d3Smrg fi 3948de2362d3Smrg 3949de2362d3Smrg # Restore saved environment variables 3950de2362d3Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 3951de2362d3Smrg do 3952de2362d3Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 3953de2362d3Smrg $lt_var=\$save_$lt_var; export $lt_var 3954de2362d3Smrg else 3955de2362d3Smrg $lt_unset $lt_var 3956de2362d3Smrg fi" 3957de2362d3Smrg done 3958de2362d3Smrg 3959de2362d3Smrg # Now prepare to actually exec the command. 39600d16fef4Smrg exec_cmd=\$cmd$args 3961de2362d3Smrg fi 3962de2362d3Smrg} 3963de2362d3Smrg 39640d16fef4Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 3965de2362d3Smrg 3966de2362d3Smrg 3967de2362d3Smrg# func_mode_finish arg... 3968de2362d3Smrgfunc_mode_finish () 3969de2362d3Smrg{ 39700d16fef4Smrg $debug_cmd 39710d16fef4Smrg 3972de2362d3Smrg libs= 3973de2362d3Smrg libdirs= 3974de2362d3Smrg admincmds= 3975de2362d3Smrg 3976de2362d3Smrg for opt in "$nonopt" ${1+"$@"} 3977de2362d3Smrg do 3978de2362d3Smrg if test -d "$opt"; then 3979de2362d3Smrg func_append libdirs " $opt" 3980de2362d3Smrg 3981de2362d3Smrg elif test -f "$opt"; then 3982de2362d3Smrg if func_lalib_unsafe_p "$opt"; then 3983de2362d3Smrg func_append libs " $opt" 3984de2362d3Smrg else 39850d16fef4Smrg func_warning "'$opt' is not a valid libtool archive" 3986de2362d3Smrg fi 3987de2362d3Smrg 3988de2362d3Smrg else 39890d16fef4Smrg func_fatal_error "invalid argument '$opt'" 3990de2362d3Smrg fi 3991de2362d3Smrg done 3992de2362d3Smrg 3993de2362d3Smrg if test -n "$libs"; then 3994de2362d3Smrg if test -n "$lt_sysroot"; then 3995de2362d3Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 3996de2362d3Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 3997de2362d3Smrg else 3998de2362d3Smrg sysroot_cmd= 3999de2362d3Smrg fi 4000de2362d3Smrg 4001de2362d3Smrg # Remove sysroot references 4002de2362d3Smrg if $opt_dry_run; then 4003de2362d3Smrg for lib in $libs; do 40040d16fef4Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4005de2362d3Smrg done 4006de2362d3Smrg else 4007de2362d3Smrg tmpdir=`func_mktempdir` 4008de2362d3Smrg for lib in $libs; do 40090d16fef4Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4010de2362d3Smrg > $tmpdir/tmp-la 4011de2362d3Smrg mv -f $tmpdir/tmp-la $lib 4012de2362d3Smrg done 4013de2362d3Smrg ${RM}r "$tmpdir" 4014de2362d3Smrg fi 4015de2362d3Smrg fi 4016de2362d3Smrg 4017de2362d3Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4018de2362d3Smrg for libdir in $libdirs; do 4019de2362d3Smrg if test -n "$finish_cmds"; then 4020de2362d3Smrg # Do each command in the finish commands. 4021de2362d3Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4022de2362d3Smrg'"$cmd"'"' 4023de2362d3Smrg fi 4024de2362d3Smrg if test -n "$finish_eval"; then 4025de2362d3Smrg # Do the single finish_eval. 4026de2362d3Smrg eval cmds=\"$finish_eval\" 4027de2362d3Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4028de2362d3Smrg $cmds" 4029de2362d3Smrg fi 4030de2362d3Smrg done 4031de2362d3Smrg fi 4032de2362d3Smrg 4033de2362d3Smrg # Exit here if they wanted silent mode. 40340d16fef4Smrg $opt_quiet && exit $EXIT_SUCCESS 4035de2362d3Smrg 4036de2362d3Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4037de2362d3Smrg echo "----------------------------------------------------------------------" 4038de2362d3Smrg echo "Libraries have been installed in:" 4039de2362d3Smrg for libdir in $libdirs; do 4040de2362d3Smrg $ECHO " $libdir" 4041de2362d3Smrg done 4042de2362d3Smrg echo 4043de2362d3Smrg echo "If you ever happen to want to link against installed libraries" 4044de2362d3Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 40450d16fef4Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4046de2362d3Smrg echo "flag during linking and do at least one of the following:" 4047de2362d3Smrg if test -n "$shlibpath_var"; then 40480d16fef4Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4049de2362d3Smrg echo " during execution" 4050de2362d3Smrg fi 4051de2362d3Smrg if test -n "$runpath_var"; then 40520d16fef4Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4053de2362d3Smrg echo " during linking" 4054de2362d3Smrg fi 4055de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 4056de2362d3Smrg libdir=LIBDIR 4057de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 4058de2362d3Smrg 40590d16fef4Smrg $ECHO " - use the '$flag' linker flag" 4060de2362d3Smrg fi 4061de2362d3Smrg if test -n "$admincmds"; then 4062de2362d3Smrg $ECHO " - have your system administrator run these commands:$admincmds" 4063de2362d3Smrg fi 4064de2362d3Smrg if test -f /etc/ld.so.conf; then 40650d16fef4Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4066de2362d3Smrg fi 4067de2362d3Smrg echo 4068de2362d3Smrg 4069de2362d3Smrg echo "See any operating system documentation about shared libraries for" 4070de2362d3Smrg case $host in 4071de2362d3Smrg solaris2.[6789]|solaris2.1[0-9]) 4072de2362d3Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4073de2362d3Smrg echo "pages." 4074de2362d3Smrg ;; 4075de2362d3Smrg *) 4076de2362d3Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4077de2362d3Smrg ;; 4078de2362d3Smrg esac 4079de2362d3Smrg echo "----------------------------------------------------------------------" 4080de2362d3Smrg fi 4081de2362d3Smrg exit $EXIT_SUCCESS 4082de2362d3Smrg} 4083de2362d3Smrg 40840d16fef4Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4085de2362d3Smrg 4086de2362d3Smrg 4087de2362d3Smrg# func_mode_install arg... 4088de2362d3Smrgfunc_mode_install () 4089de2362d3Smrg{ 40900d16fef4Smrg $debug_cmd 40910d16fef4Smrg 4092de2362d3Smrg # There may be an optional sh(1) argument at the beginning of 4093de2362d3Smrg # install_prog (especially on Windows NT). 40940d16fef4Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4095de2362d3Smrg # Allow the use of GNU shtool's install command. 40960d16fef4Smrg case $nonopt in *shtool*) :;; *) false;; esac 40970d16fef4Smrg then 4098de2362d3Smrg # Aesthetically quote it. 4099de2362d3Smrg func_quote_for_eval "$nonopt" 4100de2362d3Smrg install_prog="$func_quote_for_eval_result " 4101de2362d3Smrg arg=$1 4102de2362d3Smrg shift 4103de2362d3Smrg else 4104de2362d3Smrg install_prog= 4105de2362d3Smrg arg=$nonopt 4106de2362d3Smrg fi 4107de2362d3Smrg 4108de2362d3Smrg # The real first argument should be the name of the installation program. 4109de2362d3Smrg # Aesthetically quote it. 4110de2362d3Smrg func_quote_for_eval "$arg" 4111de2362d3Smrg func_append install_prog "$func_quote_for_eval_result" 4112de2362d3Smrg install_shared_prog=$install_prog 4113de2362d3Smrg case " $install_prog " in 4114de2362d3Smrg *[\\\ /]cp\ *) install_cp=: ;; 4115de2362d3Smrg *) install_cp=false ;; 4116de2362d3Smrg esac 4117de2362d3Smrg 4118de2362d3Smrg # We need to accept at least all the BSD install flags. 4119de2362d3Smrg dest= 4120de2362d3Smrg files= 4121de2362d3Smrg opts= 4122de2362d3Smrg prev= 4123de2362d3Smrg install_type= 41240d16fef4Smrg isdir=false 4125de2362d3Smrg stripme= 4126de2362d3Smrg no_mode=: 4127de2362d3Smrg for arg 4128de2362d3Smrg do 4129de2362d3Smrg arg2= 4130de2362d3Smrg if test -n "$dest"; then 4131de2362d3Smrg func_append files " $dest" 4132de2362d3Smrg dest=$arg 4133de2362d3Smrg continue 4134de2362d3Smrg fi 4135de2362d3Smrg 4136de2362d3Smrg case $arg in 41370d16fef4Smrg -d) isdir=: ;; 4138de2362d3Smrg -f) 4139de2362d3Smrg if $install_cp; then :; else 4140de2362d3Smrg prev=$arg 4141de2362d3Smrg fi 4142de2362d3Smrg ;; 4143de2362d3Smrg -g | -m | -o) 4144de2362d3Smrg prev=$arg 4145de2362d3Smrg ;; 4146de2362d3Smrg -s) 4147de2362d3Smrg stripme=" -s" 4148de2362d3Smrg continue 4149de2362d3Smrg ;; 4150de2362d3Smrg -*) 4151de2362d3Smrg ;; 4152de2362d3Smrg *) 4153de2362d3Smrg # If the previous option needed an argument, then skip it. 4154de2362d3Smrg if test -n "$prev"; then 41550d16fef4Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 4156de2362d3Smrg arg2=$install_override_mode 4157de2362d3Smrg no_mode=false 4158de2362d3Smrg fi 4159de2362d3Smrg prev= 4160de2362d3Smrg else 4161de2362d3Smrg dest=$arg 4162de2362d3Smrg continue 4163de2362d3Smrg fi 4164de2362d3Smrg ;; 4165de2362d3Smrg esac 4166de2362d3Smrg 4167de2362d3Smrg # Aesthetically quote the argument. 4168de2362d3Smrg func_quote_for_eval "$arg" 4169de2362d3Smrg func_append install_prog " $func_quote_for_eval_result" 4170de2362d3Smrg if test -n "$arg2"; then 4171de2362d3Smrg func_quote_for_eval "$arg2" 4172de2362d3Smrg fi 4173de2362d3Smrg func_append install_shared_prog " $func_quote_for_eval_result" 4174de2362d3Smrg done 4175de2362d3Smrg 4176de2362d3Smrg test -z "$install_prog" && \ 4177de2362d3Smrg func_fatal_help "you must specify an install program" 4178de2362d3Smrg 4179de2362d3Smrg test -n "$prev" && \ 41800d16fef4Smrg func_fatal_help "the '$prev' option requires an argument" 4181de2362d3Smrg 4182de2362d3Smrg if test -n "$install_override_mode" && $no_mode; then 4183de2362d3Smrg if $install_cp; then :; else 4184de2362d3Smrg func_quote_for_eval "$install_override_mode" 4185de2362d3Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 4186de2362d3Smrg fi 4187de2362d3Smrg fi 4188de2362d3Smrg 4189de2362d3Smrg if test -z "$files"; then 4190de2362d3Smrg if test -z "$dest"; then 4191de2362d3Smrg func_fatal_help "no file or destination specified" 4192de2362d3Smrg else 4193de2362d3Smrg func_fatal_help "you must specify a destination" 4194de2362d3Smrg fi 4195de2362d3Smrg fi 4196de2362d3Smrg 4197de2362d3Smrg # Strip any trailing slash from the destination. 4198de2362d3Smrg func_stripname '' '/' "$dest" 4199de2362d3Smrg dest=$func_stripname_result 4200de2362d3Smrg 4201de2362d3Smrg # Check to see that the destination is a directory. 42020d16fef4Smrg test -d "$dest" && isdir=: 42030d16fef4Smrg if $isdir; then 42040d16fef4Smrg destdir=$dest 4205de2362d3Smrg destname= 4206de2362d3Smrg else 4207de2362d3Smrg func_dirname_and_basename "$dest" "" "." 42080d16fef4Smrg destdir=$func_dirname_result 42090d16fef4Smrg destname=$func_basename_result 4210de2362d3Smrg 4211de2362d3Smrg # Not a directory, so check to see that there is only one file specified. 4212de2362d3Smrg set dummy $files; shift 4213de2362d3Smrg test "$#" -gt 1 && \ 42140d16fef4Smrg func_fatal_help "'$dest' is not a directory" 4215de2362d3Smrg fi 4216de2362d3Smrg case $destdir in 4217de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4218de2362d3Smrg *) 4219de2362d3Smrg for file in $files; do 4220de2362d3Smrg case $file in 4221de2362d3Smrg *.lo) ;; 4222de2362d3Smrg *) 42230d16fef4Smrg func_fatal_help "'$destdir' must be an absolute directory name" 4224de2362d3Smrg ;; 4225de2362d3Smrg esac 4226de2362d3Smrg done 4227de2362d3Smrg ;; 4228de2362d3Smrg esac 4229de2362d3Smrg 4230de2362d3Smrg # This variable tells wrapper scripts just to set variables rather 4231de2362d3Smrg # than running their programs. 42320d16fef4Smrg libtool_install_magic=$magic 4233de2362d3Smrg 4234de2362d3Smrg staticlibs= 4235de2362d3Smrg future_libdirs= 4236de2362d3Smrg current_libdirs= 4237de2362d3Smrg for file in $files; do 4238de2362d3Smrg 4239de2362d3Smrg # Do each installation. 4240de2362d3Smrg case $file in 4241de2362d3Smrg *.$libext) 4242de2362d3Smrg # Do the static libraries later. 4243de2362d3Smrg func_append staticlibs " $file" 4244de2362d3Smrg ;; 4245de2362d3Smrg 4246de2362d3Smrg *.la) 4247de2362d3Smrg func_resolve_sysroot "$file" 4248de2362d3Smrg file=$func_resolve_sysroot_result 4249de2362d3Smrg 4250de2362d3Smrg # Check to see that this really is a libtool archive. 4251de2362d3Smrg func_lalib_unsafe_p "$file" \ 42520d16fef4Smrg || func_fatal_help "'$file' is not a valid libtool archive" 4253de2362d3Smrg 4254de2362d3Smrg library_names= 4255de2362d3Smrg old_library= 4256de2362d3Smrg relink_command= 4257de2362d3Smrg func_source "$file" 4258de2362d3Smrg 4259de2362d3Smrg # Add the libdir to current_libdirs if it is the destination. 4260de2362d3Smrg if test "X$destdir" = "X$libdir"; then 4261de2362d3Smrg case "$current_libdirs " in 4262de2362d3Smrg *" $libdir "*) ;; 4263de2362d3Smrg *) func_append current_libdirs " $libdir" ;; 4264de2362d3Smrg esac 4265de2362d3Smrg else 4266de2362d3Smrg # Note the libdir as a future libdir. 4267de2362d3Smrg case "$future_libdirs " in 4268de2362d3Smrg *" $libdir "*) ;; 4269de2362d3Smrg *) func_append future_libdirs " $libdir" ;; 4270de2362d3Smrg esac 4271de2362d3Smrg fi 4272de2362d3Smrg 4273de2362d3Smrg func_dirname "$file" "/" "" 42740d16fef4Smrg dir=$func_dirname_result 4275de2362d3Smrg func_append dir "$objdir" 4276de2362d3Smrg 4277de2362d3Smrg if test -n "$relink_command"; then 4278de2362d3Smrg # Determine the prefix the user has applied to our future dir. 4279de2362d3Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4280de2362d3Smrg 4281de2362d3Smrg # Don't allow the user to place us outside of our expected 4282de2362d3Smrg # location b/c this prevents finding dependent libraries that 4283de2362d3Smrg # are installed to the same prefix. 4284de2362d3Smrg # At present, this check doesn't affect windows .dll's that 4285de2362d3Smrg # are installed into $libdir/../bin (currently, that works fine) 4286de2362d3Smrg # but it's something to keep an eye on. 4287de2362d3Smrg test "$inst_prefix_dir" = "$destdir" && \ 42880d16fef4Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4289de2362d3Smrg 4290de2362d3Smrg if test -n "$inst_prefix_dir"; then 4291de2362d3Smrg # Stick the inst_prefix_dir data into the link command. 4292de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4293de2362d3Smrg else 4294de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4295de2362d3Smrg fi 4296de2362d3Smrg 42970d16fef4Smrg func_warning "relinking '$file'" 4298de2362d3Smrg func_show_eval "$relink_command" \ 42990d16fef4Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4300de2362d3Smrg fi 4301de2362d3Smrg 4302de2362d3Smrg # See the names of the shared library. 4303de2362d3Smrg set dummy $library_names; shift 4304de2362d3Smrg if test -n "$1"; then 43050d16fef4Smrg realname=$1 4306de2362d3Smrg shift 4307de2362d3Smrg 43080d16fef4Smrg srcname=$realname 43090d16fef4Smrg test -n "$relink_command" && srcname=${realname}T 4310de2362d3Smrg 4311de2362d3Smrg # Install the shared library and build the symlinks. 4312de2362d3Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4313de2362d3Smrg 'exit $?' 43140d16fef4Smrg tstripme=$stripme 4315de2362d3Smrg case $host_os in 4316de2362d3Smrg cygwin* | mingw* | pw32* | cegcc*) 4317de2362d3Smrg case $realname in 4318de2362d3Smrg *.dll.a) 43190d16fef4Smrg tstripme= 43200d16fef4Smrg ;; 43210d16fef4Smrg esac 43220d16fef4Smrg ;; 43230d16fef4Smrg os2*) 43240d16fef4Smrg case $realname in 43250d16fef4Smrg *_dll.a) 43260d16fef4Smrg tstripme= 4327de2362d3Smrg ;; 4328de2362d3Smrg esac 4329de2362d3Smrg ;; 4330de2362d3Smrg esac 4331de2362d3Smrg if test -n "$tstripme" && test -n "$striplib"; then 4332de2362d3Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 4333de2362d3Smrg fi 4334de2362d3Smrg 4335de2362d3Smrg if test "$#" -gt 0; then 4336de2362d3Smrg # Delete the old symlinks, and create new ones. 43370d16fef4Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4338de2362d3Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4339de2362d3Smrg # so we also need to try rm && ln -s. 4340de2362d3Smrg for linkname 4341de2362d3Smrg do 4342de2362d3Smrg test "$linkname" != "$realname" \ 4343de2362d3Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4344de2362d3Smrg done 4345de2362d3Smrg fi 4346de2362d3Smrg 4347de2362d3Smrg # Do each command in the postinstall commands. 43480d16fef4Smrg lib=$destdir/$realname 4349de2362d3Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 4350de2362d3Smrg fi 4351de2362d3Smrg 4352de2362d3Smrg # Install the pseudo-library for information purposes. 4353de2362d3Smrg func_basename "$file" 43540d16fef4Smrg name=$func_basename_result 43550d16fef4Smrg instname=$dir/${name}i 4356de2362d3Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4357de2362d3Smrg 4358de2362d3Smrg # Maybe install the static library, too. 4359de2362d3Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4360de2362d3Smrg ;; 4361de2362d3Smrg 4362de2362d3Smrg *.lo) 4363de2362d3Smrg # Install (i.e. copy) a libtool object. 4364de2362d3Smrg 4365de2362d3Smrg # Figure out destination file name, if it wasn't already specified. 4366de2362d3Smrg if test -n "$destname"; then 43670d16fef4Smrg destfile=$destdir/$destname 4368de2362d3Smrg else 4369de2362d3Smrg func_basename "$file" 43700d16fef4Smrg destfile=$func_basename_result 43710d16fef4Smrg destfile=$destdir/$destfile 4372de2362d3Smrg fi 4373de2362d3Smrg 4374de2362d3Smrg # Deduce the name of the destination old-style object file. 4375de2362d3Smrg case $destfile in 4376de2362d3Smrg *.lo) 4377de2362d3Smrg func_lo2o "$destfile" 4378de2362d3Smrg staticdest=$func_lo2o_result 4379de2362d3Smrg ;; 4380de2362d3Smrg *.$objext) 43810d16fef4Smrg staticdest=$destfile 4382de2362d3Smrg destfile= 4383de2362d3Smrg ;; 4384de2362d3Smrg *) 43850d16fef4Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4386de2362d3Smrg ;; 4387de2362d3Smrg esac 4388de2362d3Smrg 4389de2362d3Smrg # Install the libtool object if requested. 4390de2362d3Smrg test -n "$destfile" && \ 4391de2362d3Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4392de2362d3Smrg 4393de2362d3Smrg # Install the old object if enabled. 43940d16fef4Smrg if test yes = "$build_old_libs"; then 4395de2362d3Smrg # Deduce the name of the old-style object file. 4396de2362d3Smrg func_lo2o "$file" 4397de2362d3Smrg staticobj=$func_lo2o_result 4398de2362d3Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4399de2362d3Smrg fi 4400de2362d3Smrg exit $EXIT_SUCCESS 4401de2362d3Smrg ;; 4402de2362d3Smrg 4403de2362d3Smrg *) 4404de2362d3Smrg # Figure out destination file name, if it wasn't already specified. 4405de2362d3Smrg if test -n "$destname"; then 44060d16fef4Smrg destfile=$destdir/$destname 4407de2362d3Smrg else 4408de2362d3Smrg func_basename "$file" 44090d16fef4Smrg destfile=$func_basename_result 44100d16fef4Smrg destfile=$destdir/$destfile 4411de2362d3Smrg fi 4412de2362d3Smrg 4413de2362d3Smrg # If the file is missing, and there is a .exe on the end, strip it 4414de2362d3Smrg # because it is most likely a libtool script we actually want to 4415de2362d3Smrg # install 44160d16fef4Smrg stripped_ext= 4417de2362d3Smrg case $file in 4418de2362d3Smrg *.exe) 4419de2362d3Smrg if test ! -f "$file"; then 4420de2362d3Smrg func_stripname '' '.exe' "$file" 4421de2362d3Smrg file=$func_stripname_result 44220d16fef4Smrg stripped_ext=.exe 4423de2362d3Smrg fi 4424de2362d3Smrg ;; 4425de2362d3Smrg esac 4426de2362d3Smrg 4427de2362d3Smrg # Do a test to see if this is really a libtool program. 4428de2362d3Smrg case $host in 4429de2362d3Smrg *cygwin* | *mingw*) 4430de2362d3Smrg if func_ltwrapper_executable_p "$file"; then 4431de2362d3Smrg func_ltwrapper_scriptname "$file" 4432de2362d3Smrg wrapper=$func_ltwrapper_scriptname_result 4433de2362d3Smrg else 4434de2362d3Smrg func_stripname '' '.exe' "$file" 4435de2362d3Smrg wrapper=$func_stripname_result 4436de2362d3Smrg fi 4437de2362d3Smrg ;; 4438de2362d3Smrg *) 4439de2362d3Smrg wrapper=$file 4440de2362d3Smrg ;; 4441de2362d3Smrg esac 4442de2362d3Smrg if func_ltwrapper_script_p "$wrapper"; then 4443de2362d3Smrg notinst_deplibs= 4444de2362d3Smrg relink_command= 4445de2362d3Smrg 4446de2362d3Smrg func_source "$wrapper" 4447de2362d3Smrg 4448de2362d3Smrg # Check the variables that should have been set. 4449de2362d3Smrg test -z "$generated_by_libtool_version" && \ 44500d16fef4Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4451de2362d3Smrg 44520d16fef4Smrg finalize=: 4453de2362d3Smrg for lib in $notinst_deplibs; do 4454de2362d3Smrg # Check to see that each library is installed. 4455de2362d3Smrg libdir= 4456de2362d3Smrg if test -f "$lib"; then 4457de2362d3Smrg func_source "$lib" 4458de2362d3Smrg fi 44590d16fef4Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4460de2362d3Smrg if test -n "$libdir" && test ! -f "$libfile"; then 44610d16fef4Smrg func_warning "'$lib' has not been installed in '$libdir'" 44620d16fef4Smrg finalize=false 4463de2362d3Smrg fi 4464de2362d3Smrg done 4465de2362d3Smrg 4466de2362d3Smrg relink_command= 4467de2362d3Smrg func_source "$wrapper" 4468de2362d3Smrg 4469de2362d3Smrg outputname= 44700d16fef4Smrg if test no = "$fast_install" && test -n "$relink_command"; then 4471de2362d3Smrg $opt_dry_run || { 44720d16fef4Smrg if $finalize; then 4473de2362d3Smrg tmpdir=`func_mktempdir` 4474de2362d3Smrg func_basename "$file$stripped_ext" 44750d16fef4Smrg file=$func_basename_result 44760d16fef4Smrg outputname=$tmpdir/$file 4477de2362d3Smrg # Replace the output file specification. 4478de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4479de2362d3Smrg 44800d16fef4Smrg $opt_quiet || { 4481de2362d3Smrg func_quote_for_expand "$relink_command" 4482de2362d3Smrg eval "func_echo $func_quote_for_expand_result" 4483de2362d3Smrg } 4484de2362d3Smrg if eval "$relink_command"; then : 4485de2362d3Smrg else 44860d16fef4Smrg func_error "error: relink '$file' with the above command before installing it" 4487de2362d3Smrg $opt_dry_run || ${RM}r "$tmpdir" 4488de2362d3Smrg continue 4489de2362d3Smrg fi 44900d16fef4Smrg file=$outputname 4491de2362d3Smrg else 44920d16fef4Smrg func_warning "cannot relink '$file'" 4493de2362d3Smrg fi 4494de2362d3Smrg } 4495de2362d3Smrg else 4496de2362d3Smrg # Install the binary that we compiled earlier. 4497de2362d3Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4498de2362d3Smrg fi 4499de2362d3Smrg fi 4500de2362d3Smrg 4501de2362d3Smrg # remove .exe since cygwin /usr/bin/install will append another 4502de2362d3Smrg # one anyway 4503de2362d3Smrg case $install_prog,$host in 4504de2362d3Smrg */usr/bin/install*,*cygwin*) 4505de2362d3Smrg case $file:$destfile in 4506de2362d3Smrg *.exe:*.exe) 4507de2362d3Smrg # this is ok 4508de2362d3Smrg ;; 4509de2362d3Smrg *.exe:*) 4510de2362d3Smrg destfile=$destfile.exe 4511de2362d3Smrg ;; 4512de2362d3Smrg *:*.exe) 4513de2362d3Smrg func_stripname '' '.exe' "$destfile" 4514de2362d3Smrg destfile=$func_stripname_result 4515de2362d3Smrg ;; 4516de2362d3Smrg esac 4517de2362d3Smrg ;; 4518de2362d3Smrg esac 4519de2362d3Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4520de2362d3Smrg $opt_dry_run || if test -n "$outputname"; then 4521de2362d3Smrg ${RM}r "$tmpdir" 4522de2362d3Smrg fi 4523de2362d3Smrg ;; 4524de2362d3Smrg esac 4525de2362d3Smrg done 4526de2362d3Smrg 4527de2362d3Smrg for file in $staticlibs; do 4528de2362d3Smrg func_basename "$file" 45290d16fef4Smrg name=$func_basename_result 4530de2362d3Smrg 4531de2362d3Smrg # Set up the ranlib parameters. 45320d16fef4Smrg oldlib=$destdir/$name 4533de2362d3Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4534de2362d3Smrg tool_oldlib=$func_to_tool_file_result 4535de2362d3Smrg 4536de2362d3Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4537de2362d3Smrg 4538de2362d3Smrg if test -n "$stripme" && test -n "$old_striplib"; then 4539de2362d3Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4540de2362d3Smrg fi 4541de2362d3Smrg 4542de2362d3Smrg # Do each command in the postinstall commands. 4543de2362d3Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4544de2362d3Smrg done 4545de2362d3Smrg 4546de2362d3Smrg test -n "$future_libdirs" && \ 45470d16fef4Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 4548de2362d3Smrg 4549de2362d3Smrg if test -n "$current_libdirs"; then 4550de2362d3Smrg # Maybe just do a dry run. 4551de2362d3Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 45520d16fef4Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4553de2362d3Smrg else 4554de2362d3Smrg exit $EXIT_SUCCESS 4555de2362d3Smrg fi 4556de2362d3Smrg} 4557de2362d3Smrg 45580d16fef4Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 4559de2362d3Smrg 4560de2362d3Smrg 4561de2362d3Smrg# func_generate_dlsyms outputname originator pic_p 4562de2362d3Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4563de2362d3Smrg# a dlpreopen symbol table. 4564de2362d3Smrgfunc_generate_dlsyms () 4565de2362d3Smrg{ 45660d16fef4Smrg $debug_cmd 45670d16fef4Smrg 45680d16fef4Smrg my_outputname=$1 45690d16fef4Smrg my_originator=$2 45700d16fef4Smrg my_pic_p=${3-false} 45710d16fef4Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4572de2362d3Smrg my_dlsyms= 4573de2362d3Smrg 45740d16fef4Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4575de2362d3Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 45760d16fef4Smrg my_dlsyms=${my_outputname}S.c 4577de2362d3Smrg else 4578de2362d3Smrg func_error "not configured to extract global symbols from dlpreopened files" 4579de2362d3Smrg fi 4580de2362d3Smrg fi 4581de2362d3Smrg 4582de2362d3Smrg if test -n "$my_dlsyms"; then 4583de2362d3Smrg case $my_dlsyms in 4584de2362d3Smrg "") ;; 4585de2362d3Smrg *.c) 4586de2362d3Smrg # Discover the nlist of each of the dlfiles. 45870d16fef4Smrg nlist=$output_objdir/$my_outputname.nm 4588de2362d3Smrg 4589de2362d3Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4590de2362d3Smrg 4591de2362d3Smrg # Parse the name list into a source file. 4592de2362d3Smrg func_verbose "creating $output_objdir/$my_dlsyms" 4593de2362d3Smrg 4594de2362d3Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 45950d16fef4Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 45960d16fef4Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4597de2362d3Smrg 4598de2362d3Smrg#ifdef __cplusplus 4599de2362d3Smrgextern \"C\" { 4600de2362d3Smrg#endif 4601de2362d3Smrg 46020d16fef4Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4603de2362d3Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4604de2362d3Smrg#endif 4605de2362d3Smrg 4606de2362d3Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 46070d16fef4Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 46080d16fef4Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 4609de2362d3Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 4610de2362d3Smrg# define LT_DLSYM_CONST 46110d16fef4Smrg#elif defined __osf__ 4612de2362d3Smrg/* This system does not cope well with relocations in const data. */ 4613de2362d3Smrg# define LT_DLSYM_CONST 4614de2362d3Smrg#else 4615de2362d3Smrg# define LT_DLSYM_CONST const 4616de2362d3Smrg#endif 4617de2362d3Smrg 46180d16fef4Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 46190d16fef4Smrg 4620de2362d3Smrg/* External symbol declarations for the compiler. */\ 4621de2362d3Smrg" 4622de2362d3Smrg 46230d16fef4Smrg if test yes = "$dlself"; then 46240d16fef4Smrg func_verbose "generating symbol list for '$output'" 4625de2362d3Smrg 4626de2362d3Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4627de2362d3Smrg 4628de2362d3Smrg # Add our own program objects to the symbol list. 4629de2362d3Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4630de2362d3Smrg for progfile in $progfiles; do 4631de2362d3Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 46320d16fef4Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4633de2362d3Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4634de2362d3Smrg done 4635de2362d3Smrg 4636de2362d3Smrg if test -n "$exclude_expsyms"; then 4637de2362d3Smrg $opt_dry_run || { 4638de2362d3Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4639de2362d3Smrg eval '$MV "$nlist"T "$nlist"' 4640de2362d3Smrg } 4641de2362d3Smrg fi 4642de2362d3Smrg 4643de2362d3Smrg if test -n "$export_symbols_regex"; then 4644de2362d3Smrg $opt_dry_run || { 4645de2362d3Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4646de2362d3Smrg eval '$MV "$nlist"T "$nlist"' 4647de2362d3Smrg } 4648de2362d3Smrg fi 4649de2362d3Smrg 4650de2362d3Smrg # Prepare the list of exported symbols 4651de2362d3Smrg if test -z "$export_symbols"; then 46520d16fef4Smrg export_symbols=$output_objdir/$outputname.exp 4653de2362d3Smrg $opt_dry_run || { 4654de2362d3Smrg $RM $export_symbols 46550d16fef4Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4656de2362d3Smrg case $host in 4657de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 4658de2362d3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4659de2362d3Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4660de2362d3Smrg ;; 4661de2362d3Smrg esac 4662de2362d3Smrg } 4663de2362d3Smrg else 4664de2362d3Smrg $opt_dry_run || { 46650d16fef4Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4666de2362d3Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4667de2362d3Smrg eval '$MV "$nlist"T "$nlist"' 4668de2362d3Smrg case $host in 4669de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 4670de2362d3Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4671de2362d3Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4672de2362d3Smrg ;; 4673de2362d3Smrg esac 4674de2362d3Smrg } 4675de2362d3Smrg fi 4676de2362d3Smrg fi 4677de2362d3Smrg 4678de2362d3Smrg for dlprefile in $dlprefiles; do 46790d16fef4Smrg func_verbose "extracting global C symbols from '$dlprefile'" 4680de2362d3Smrg func_basename "$dlprefile" 46810d16fef4Smrg name=$func_basename_result 4682de2362d3Smrg case $host in 4683de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 4684de2362d3Smrg # if an import library, we need to obtain dlname 4685de2362d3Smrg if func_win32_import_lib_p "$dlprefile"; then 4686de2362d3Smrg func_tr_sh "$dlprefile" 4687de2362d3Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 46880d16fef4Smrg dlprefile_dlbasename= 4689de2362d3Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4690de2362d3Smrg # Use subshell, to avoid clobbering current variable values 4691de2362d3Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 46920d16fef4Smrg if test -n "$dlprefile_dlname"; then 4693de2362d3Smrg func_basename "$dlprefile_dlname" 46940d16fef4Smrg dlprefile_dlbasename=$func_basename_result 4695de2362d3Smrg else 4696de2362d3Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 4697de2362d3Smrg $sharedlib_from_linklib_cmd "$dlprefile" 4698de2362d3Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 4699de2362d3Smrg fi 4700de2362d3Smrg fi 4701de2362d3Smrg $opt_dry_run || { 47020d16fef4Smrg if test -n "$dlprefile_dlbasename"; then 4703de2362d3Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4704de2362d3Smrg else 4705de2362d3Smrg func_warning "Could not compute DLL name from $name" 4706de2362d3Smrg eval '$ECHO ": $name " >> "$nlist"' 4707de2362d3Smrg fi 4708de2362d3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4709de2362d3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4710de2362d3Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4711de2362d3Smrg } 4712de2362d3Smrg else # not an import lib 4713de2362d3Smrg $opt_dry_run || { 4714de2362d3Smrg eval '$ECHO ": $name " >> "$nlist"' 4715de2362d3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4716de2362d3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4717de2362d3Smrg } 4718de2362d3Smrg fi 4719de2362d3Smrg ;; 4720de2362d3Smrg *) 4721de2362d3Smrg $opt_dry_run || { 4722de2362d3Smrg eval '$ECHO ": $name " >> "$nlist"' 4723de2362d3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4724de2362d3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4725de2362d3Smrg } 4726de2362d3Smrg ;; 4727de2362d3Smrg esac 4728de2362d3Smrg done 4729de2362d3Smrg 4730de2362d3Smrg $opt_dry_run || { 4731de2362d3Smrg # Make sure we have at least an empty file. 4732de2362d3Smrg test -f "$nlist" || : > "$nlist" 4733de2362d3Smrg 4734de2362d3Smrg if test -n "$exclude_expsyms"; then 4735de2362d3Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4736de2362d3Smrg $MV "$nlist"T "$nlist" 4737de2362d3Smrg fi 4738de2362d3Smrg 4739de2362d3Smrg # Try sorting and uniquifying the output. 4740de2362d3Smrg if $GREP -v "^: " < "$nlist" | 4741de2362d3Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 4742de2362d3Smrg sort -k 3 4743de2362d3Smrg else 4744de2362d3Smrg sort +2 4745de2362d3Smrg fi | 4746de2362d3Smrg uniq > "$nlist"S; then 4747de2362d3Smrg : 4748de2362d3Smrg else 4749de2362d3Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 4750de2362d3Smrg fi 4751de2362d3Smrg 4752de2362d3Smrg if test -f "$nlist"S; then 4753de2362d3Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 4754de2362d3Smrg else 4755de2362d3Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 4756de2362d3Smrg fi 4757de2362d3Smrg 47580d16fef4Smrg func_show_eval '$RM "${nlist}I"' 47590d16fef4Smrg if test -n "$global_symbol_to_import"; then 47600d16fef4Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 47610d16fef4Smrg fi 47620d16fef4Smrg 4763de2362d3Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4764de2362d3Smrg 4765de2362d3Smrg/* The mapping between symbol names and symbols. */ 4766de2362d3Smrgtypedef struct { 4767de2362d3Smrg const char *name; 4768de2362d3Smrg void *address; 4769de2362d3Smrg} lt_dlsymlist; 4770de2362d3Smrgextern LT_DLSYM_CONST lt_dlsymlist 47710d16fef4Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 47720d16fef4Smrg" 47730d16fef4Smrg 47740d16fef4Smrg if test -s "$nlist"I; then 47750d16fef4Smrg echo >> "$output_objdir/$my_dlsyms" "\ 47760d16fef4Smrgstatic void lt_syminit(void) 47770d16fef4Smrg{ 47780d16fef4Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 47790d16fef4Smrg for (; symbol->name; ++symbol) 47800d16fef4Smrg {" 47810d16fef4Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 47820d16fef4Smrg echo >> "$output_objdir/$my_dlsyms" "\ 47830d16fef4Smrg } 47840d16fef4Smrg}" 47850d16fef4Smrg fi 47860d16fef4Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4787de2362d3SmrgLT_DLSYM_CONST lt_dlsymlist 4788de2362d3Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 47890d16fef4Smrg{ {\"$my_originator\", (void *) 0}," 47900d16fef4Smrg 47910d16fef4Smrg if test -s "$nlist"I; then 47920d16fef4Smrg echo >> "$output_objdir/$my_dlsyms" "\ 47930d16fef4Smrg {\"@INIT@\", (void *) <_syminit}," 47940d16fef4Smrg fi 4795de2362d3Smrg 4796de2362d3Smrg case $need_lib_prefix in 4797de2362d3Smrg no) 4798de2362d3Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 4799de2362d3Smrg ;; 4800de2362d3Smrg *) 4801de2362d3Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 4802de2362d3Smrg ;; 4803de2362d3Smrg esac 4804de2362d3Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4805de2362d3Smrg {0, (void *) 0} 4806de2362d3Smrg}; 4807de2362d3Smrg 4808de2362d3Smrg/* This works around a problem in FreeBSD linker */ 4809de2362d3Smrg#ifdef FREEBSD_WORKAROUND 4810de2362d3Smrgstatic const void *lt_preloaded_setup() { 4811de2362d3Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 4812de2362d3Smrg} 4813de2362d3Smrg#endif 4814de2362d3Smrg 4815de2362d3Smrg#ifdef __cplusplus 4816de2362d3Smrg} 4817de2362d3Smrg#endif\ 4818de2362d3Smrg" 4819de2362d3Smrg } # !$opt_dry_run 4820de2362d3Smrg 4821de2362d3Smrg pic_flag_for_symtable= 4822de2362d3Smrg case "$compile_command " in 4823de2362d3Smrg *" -static "*) ;; 4824de2362d3Smrg *) 4825de2362d3Smrg case $host in 4826de2362d3Smrg # compiling the symbol table file with pic_flag works around 4827de2362d3Smrg # a FreeBSD bug that causes programs to crash when -lm is 4828de2362d3Smrg # linked before any other PIC object. But we must not use 4829de2362d3Smrg # pic_flag when linking with -static. The problem exists in 4830de2362d3Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 4831de2362d3Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 4832de2362d3Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 4833de2362d3Smrg *-*-hpux*) 4834de2362d3Smrg pic_flag_for_symtable=" $pic_flag" ;; 4835de2362d3Smrg *) 48360d16fef4Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 4837de2362d3Smrg ;; 4838de2362d3Smrg esac 4839de2362d3Smrg ;; 4840de2362d3Smrg esac 4841de2362d3Smrg symtab_cflags= 4842de2362d3Smrg for arg in $LTCFLAGS; do 4843de2362d3Smrg case $arg in 4844de2362d3Smrg -pie | -fpie | -fPIE) ;; 4845de2362d3Smrg *) func_append symtab_cflags " $arg" ;; 4846de2362d3Smrg esac 4847de2362d3Smrg done 4848de2362d3Smrg 4849de2362d3Smrg # Now compile the dynamic symbol file. 4850de2362d3Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 4851de2362d3Smrg 4852de2362d3Smrg # Clean up the generated files. 48530d16fef4Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 4854de2362d3Smrg 4855de2362d3Smrg # Transform the symbol file into the correct name. 48560d16fef4Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 4857de2362d3Smrg case $host in 4858de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 4859de2362d3Smrg if test -f "$output_objdir/$my_outputname.def"; then 4860de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4861de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4862de2362d3Smrg else 4863de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4864de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4865de2362d3Smrg fi 4866de2362d3Smrg ;; 4867de2362d3Smrg *) 4868de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4869de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4870de2362d3Smrg ;; 4871de2362d3Smrg esac 4872de2362d3Smrg ;; 4873de2362d3Smrg *) 48740d16fef4Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 4875de2362d3Smrg ;; 4876de2362d3Smrg esac 4877de2362d3Smrg else 4878de2362d3Smrg # We keep going just in case the user didn't refer to 4879de2362d3Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 4880de2362d3Smrg # really was required. 4881de2362d3Smrg 4882de2362d3Smrg # Nullify the symbol file. 4883de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 4884de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 4885de2362d3Smrg fi 4886de2362d3Smrg} 4887de2362d3Smrg 48880d16fef4Smrg# func_cygming_gnu_implib_p ARG 48890d16fef4Smrg# This predicate returns with zero status (TRUE) if 48900d16fef4Smrg# ARG is a GNU/binutils-style import library. Returns 48910d16fef4Smrg# with nonzero status (FALSE) otherwise. 48920d16fef4Smrgfunc_cygming_gnu_implib_p () 48930d16fef4Smrg{ 48940d16fef4Smrg $debug_cmd 48950d16fef4Smrg 48960d16fef4Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 48970d16fef4Smrg 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)$'` 48980d16fef4Smrg test -n "$func_cygming_gnu_implib_tmp" 48990d16fef4Smrg} 49000d16fef4Smrg 49010d16fef4Smrg# func_cygming_ms_implib_p ARG 49020d16fef4Smrg# This predicate returns with zero status (TRUE) if 49030d16fef4Smrg# ARG is an MS-style import library. Returns 49040d16fef4Smrg# with nonzero status (FALSE) otherwise. 49050d16fef4Smrgfunc_cygming_ms_implib_p () 49060d16fef4Smrg{ 49070d16fef4Smrg $debug_cmd 49080d16fef4Smrg 49090d16fef4Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 49100d16fef4Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 49110d16fef4Smrg test -n "$func_cygming_ms_implib_tmp" 49120d16fef4Smrg} 49130d16fef4Smrg 4914de2362d3Smrg# func_win32_libid arg 4915de2362d3Smrg# return the library type of file 'arg' 4916de2362d3Smrg# 4917de2362d3Smrg# Need a lot of goo to handle *both* DLLs and import libs 4918de2362d3Smrg# Has to be a shell function in order to 'eat' the argument 4919de2362d3Smrg# that is supplied when $file_magic_command is called. 4920de2362d3Smrg# Despite the name, also deal with 64 bit binaries. 4921de2362d3Smrgfunc_win32_libid () 4922de2362d3Smrg{ 49230d16fef4Smrg $debug_cmd 49240d16fef4Smrg 49250d16fef4Smrg win32_libid_type=unknown 4926de2362d3Smrg win32_fileres=`file -L $1 2>/dev/null` 4927de2362d3Smrg case $win32_fileres in 4928de2362d3Smrg *ar\ archive\ import\ library*) # definitely import 4929de2362d3Smrg win32_libid_type="x86 archive import" 4930de2362d3Smrg ;; 4931de2362d3Smrg *ar\ archive*) # could be an import, or static 4932de2362d3Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 4933de2362d3Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 4934de2362d3Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 49350d16fef4Smrg case $nm_interface in 49360d16fef4Smrg "MS dumpbin") 49370d16fef4Smrg if func_cygming_ms_implib_p "$1" || 49380d16fef4Smrg func_cygming_gnu_implib_p "$1" 49390d16fef4Smrg then 49400d16fef4Smrg win32_nmres=import 49410d16fef4Smrg else 49420d16fef4Smrg win32_nmres= 49430d16fef4Smrg fi 49440d16fef4Smrg ;; 49450d16fef4Smrg *) 49460d16fef4Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 49470d16fef4Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 49480d16fef4Smrg $SED -n -e ' 4949de2362d3Smrg 1,100{ 4950de2362d3Smrg / I /{ 49510d16fef4Smrg s|.*|import| 4952de2362d3Smrg p 4953de2362d3Smrg q 4954de2362d3Smrg } 4955de2362d3Smrg }'` 49560d16fef4Smrg ;; 49570d16fef4Smrg esac 4958de2362d3Smrg case $win32_nmres in 4959de2362d3Smrg import*) win32_libid_type="x86 archive import";; 4960de2362d3Smrg *) win32_libid_type="x86 archive static";; 4961de2362d3Smrg esac 4962de2362d3Smrg fi 4963de2362d3Smrg ;; 4964de2362d3Smrg *DLL*) 4965de2362d3Smrg win32_libid_type="x86 DLL" 4966de2362d3Smrg ;; 4967de2362d3Smrg *executable*) # but shell scripts are "executable" too... 4968de2362d3Smrg case $win32_fileres in 4969de2362d3Smrg *MS\ Windows\ PE\ Intel*) 4970de2362d3Smrg win32_libid_type="x86 DLL" 4971de2362d3Smrg ;; 4972de2362d3Smrg esac 4973de2362d3Smrg ;; 4974de2362d3Smrg esac 4975de2362d3Smrg $ECHO "$win32_libid_type" 4976de2362d3Smrg} 4977de2362d3Smrg 4978de2362d3Smrg# func_cygming_dll_for_implib ARG 4979de2362d3Smrg# 4980de2362d3Smrg# Platform-specific function to extract the 4981de2362d3Smrg# name of the DLL associated with the specified 4982de2362d3Smrg# import library ARG. 4983de2362d3Smrg# Invoked by eval'ing the libtool variable 4984de2362d3Smrg# $sharedlib_from_linklib_cmd 4985de2362d3Smrg# Result is available in the variable 4986de2362d3Smrg# $sharedlib_from_linklib_result 4987de2362d3Smrgfunc_cygming_dll_for_implib () 4988de2362d3Smrg{ 49890d16fef4Smrg $debug_cmd 49900d16fef4Smrg 4991de2362d3Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 4992de2362d3Smrg} 4993de2362d3Smrg 4994de2362d3Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 4995de2362d3Smrg# 4996de2362d3Smrg# The is the core of a fallback implementation of a 4997de2362d3Smrg# platform-specific function to extract the name of the 4998de2362d3Smrg# DLL associated with the specified import library LIBNAME. 4999de2362d3Smrg# 5000de2362d3Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5001de2362d3Smrg# on the platform and compiler that created the implib. 5002de2362d3Smrg# 5003de2362d3Smrg# Echos the name of the DLL associated with the 5004de2362d3Smrg# specified import library. 5005de2362d3Smrgfunc_cygming_dll_for_implib_fallback_core () 5006de2362d3Smrg{ 50070d16fef4Smrg $debug_cmd 50080d16fef4Smrg 5009de2362d3Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5010de2362d3Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5011de2362d3Smrg $SED '/^Contents of section '"$match_literal"':/{ 5012de2362d3Smrg # Place marker at beginning of archive member dllname section 5013de2362d3Smrg s/.*/====MARK====/ 5014de2362d3Smrg p 5015de2362d3Smrg d 5016de2362d3Smrg } 5017de2362d3Smrg # These lines can sometimes be longer than 43 characters, but 5018de2362d3Smrg # are always uninteresting 5019de2362d3Smrg /:[ ]*file format pe[i]\{,1\}-/d 5020de2362d3Smrg /^In archive [^:]*:/d 5021de2362d3Smrg # Ensure marker is printed 5022de2362d3Smrg /^====MARK====/p 5023de2362d3Smrg # Remove all lines with less than 43 characters 5024de2362d3Smrg /^.\{43\}/!d 5025de2362d3Smrg # From remaining lines, remove first 43 characters 5026de2362d3Smrg s/^.\{43\}//' | 5027de2362d3Smrg $SED -n ' 5028de2362d3Smrg # Join marker and all lines until next marker into a single line 5029de2362d3Smrg /^====MARK====/ b para 5030de2362d3Smrg H 5031de2362d3Smrg $ b para 5032de2362d3Smrg b 5033de2362d3Smrg :para 5034de2362d3Smrg x 5035de2362d3Smrg s/\n//g 5036de2362d3Smrg # Remove the marker 5037de2362d3Smrg s/^====MARK====// 5038de2362d3Smrg # Remove trailing dots and whitespace 5039de2362d3Smrg s/[\. \t]*$// 5040de2362d3Smrg # Print 5041de2362d3Smrg /./p' | 5042de2362d3Smrg # we now have a list, one entry per line, of the stringified 5043de2362d3Smrg # contents of the appropriate section of all members of the 50440d16fef4Smrg # archive that possess that section. Heuristic: eliminate 50450d16fef4Smrg # all those that have a first or second character that is 5046de2362d3Smrg # a '.' (that is, objdump's representation of an unprintable 5047de2362d3Smrg # character.) This should work for all archives with less than 5048de2362d3Smrg # 0x302f exports -- but will fail for DLLs whose name actually 5049de2362d3Smrg # begins with a literal '.' or a single character followed by 5050de2362d3Smrg # a '.'. 5051de2362d3Smrg # 5052de2362d3Smrg # Of those that remain, print the first one. 5053de2362d3Smrg $SED -e '/^\./d;/^.\./d;q' 5054de2362d3Smrg} 5055de2362d3Smrg 5056de2362d3Smrg# func_cygming_dll_for_implib_fallback ARG 5057de2362d3Smrg# Platform-specific function to extract the 5058de2362d3Smrg# name of the DLL associated with the specified 5059de2362d3Smrg# import library ARG. 5060de2362d3Smrg# 5061de2362d3Smrg# This fallback implementation is for use when $DLLTOOL 5062de2362d3Smrg# does not support the --identify-strict option. 5063de2362d3Smrg# Invoked by eval'ing the libtool variable 5064de2362d3Smrg# $sharedlib_from_linklib_cmd 5065de2362d3Smrg# Result is available in the variable 5066de2362d3Smrg# $sharedlib_from_linklib_result 5067de2362d3Smrgfunc_cygming_dll_for_implib_fallback () 5068de2362d3Smrg{ 50690d16fef4Smrg $debug_cmd 50700d16fef4Smrg 50710d16fef4Smrg if func_cygming_gnu_implib_p "$1"; then 5072de2362d3Smrg # binutils import library 5073de2362d3Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 50740d16fef4Smrg elif func_cygming_ms_implib_p "$1"; then 5075de2362d3Smrg # ms-generated import library 5076de2362d3Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5077de2362d3Smrg else 5078de2362d3Smrg # unknown 50790d16fef4Smrg sharedlib_from_linklib_result= 5080de2362d3Smrg fi 5081de2362d3Smrg} 5082de2362d3Smrg 5083de2362d3Smrg 5084de2362d3Smrg# func_extract_an_archive dir oldlib 5085de2362d3Smrgfunc_extract_an_archive () 5086de2362d3Smrg{ 50870d16fef4Smrg $debug_cmd 50880d16fef4Smrg 50890d16fef4Smrg f_ex_an_ar_dir=$1; shift 50900d16fef4Smrg f_ex_an_ar_oldlib=$1 50910d16fef4Smrg if test yes = "$lock_old_archive_extraction"; then 5092de2362d3Smrg lockfile=$f_ex_an_ar_oldlib.lock 5093de2362d3Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5094de2362d3Smrg func_echo "Waiting for $lockfile to be removed" 5095de2362d3Smrg sleep 2 5096de2362d3Smrg done 5097de2362d3Smrg fi 5098de2362d3Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5099de2362d3Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 51000d16fef4Smrg if test yes = "$lock_old_archive_extraction"; then 5101de2362d3Smrg $opt_dry_run || rm -f "$lockfile" 5102de2362d3Smrg fi 5103de2362d3Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5104de2362d3Smrg : 5105de2362d3Smrg else 5106de2362d3Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5107de2362d3Smrg fi 5108de2362d3Smrg} 5109de2362d3Smrg 5110de2362d3Smrg 5111de2362d3Smrg# func_extract_archives gentop oldlib ... 5112de2362d3Smrgfunc_extract_archives () 5113de2362d3Smrg{ 51140d16fef4Smrg $debug_cmd 51150d16fef4Smrg 51160d16fef4Smrg my_gentop=$1; shift 5117de2362d3Smrg my_oldlibs=${1+"$@"} 51180d16fef4Smrg my_oldobjs= 51190d16fef4Smrg my_xlib= 51200d16fef4Smrg my_xabs= 51210d16fef4Smrg my_xdir= 5122de2362d3Smrg 5123de2362d3Smrg for my_xlib in $my_oldlibs; do 5124de2362d3Smrg # Extract the objects. 5125de2362d3Smrg case $my_xlib in 51260d16fef4Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5127de2362d3Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 5128de2362d3Smrg esac 5129de2362d3Smrg func_basename "$my_xlib" 51300d16fef4Smrg my_xlib=$func_basename_result 5131de2362d3Smrg my_xlib_u=$my_xlib 5132de2362d3Smrg while :; do 5133de2362d3Smrg case " $extracted_archives " in 5134de2362d3Smrg *" $my_xlib_u "*) 5135de2362d3Smrg func_arith $extracted_serial + 1 5136de2362d3Smrg extracted_serial=$func_arith_result 5137de2362d3Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5138de2362d3Smrg *) break ;; 5139de2362d3Smrg esac 5140de2362d3Smrg done 5141de2362d3Smrg extracted_archives="$extracted_archives $my_xlib_u" 51420d16fef4Smrg my_xdir=$my_gentop/$my_xlib_u 5143de2362d3Smrg 5144de2362d3Smrg func_mkdir_p "$my_xdir" 5145de2362d3Smrg 5146de2362d3Smrg case $host in 5147de2362d3Smrg *-darwin*) 5148de2362d3Smrg func_verbose "Extracting $my_xabs" 5149de2362d3Smrg # Do not bother doing anything if just a dry run 5150de2362d3Smrg $opt_dry_run || { 5151de2362d3Smrg darwin_orig_dir=`pwd` 5152de2362d3Smrg cd $my_xdir || exit $? 5153de2362d3Smrg darwin_archive=$my_xabs 5154de2362d3Smrg darwin_curdir=`pwd` 51550d16fef4Smrg func_basename "$darwin_archive" 51560d16fef4Smrg darwin_base_archive=$func_basename_result 5157de2362d3Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5158de2362d3Smrg if test -n "$darwin_arches"; then 5159de2362d3Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5160de2362d3Smrg darwin_arch= 5161de2362d3Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 51620d16fef4Smrg for darwin_arch in $darwin_arches; do 51630d16fef4Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 51640d16fef4Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 51650d16fef4Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 51660d16fef4Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5167de2362d3Smrg cd "$darwin_curdir" 51680d16fef4Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5169de2362d3Smrg done # $darwin_arches 5170de2362d3Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 51710d16fef4Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5172de2362d3Smrg darwin_file= 5173de2362d3Smrg darwin_files= 5174de2362d3Smrg for darwin_file in $darwin_filelist; do 5175de2362d3Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5176de2362d3Smrg $LIPO -create -output "$darwin_file" $darwin_files 5177de2362d3Smrg done # $darwin_filelist 5178de2362d3Smrg $RM -rf unfat-$$ 5179de2362d3Smrg cd "$darwin_orig_dir" 5180de2362d3Smrg else 5181de2362d3Smrg cd $darwin_orig_dir 5182de2362d3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5183de2362d3Smrg fi # $darwin_arches 5184de2362d3Smrg } # !$opt_dry_run 5185de2362d3Smrg ;; 5186de2362d3Smrg *) 5187de2362d3Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5188de2362d3Smrg ;; 5189de2362d3Smrg esac 5190de2362d3Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5191de2362d3Smrg done 5192de2362d3Smrg 51930d16fef4Smrg func_extract_archives_result=$my_oldobjs 5194de2362d3Smrg} 5195de2362d3Smrg 5196de2362d3Smrg 5197de2362d3Smrg# func_emit_wrapper [arg=no] 5198de2362d3Smrg# 5199de2362d3Smrg# Emit a libtool wrapper script on stdout. 5200de2362d3Smrg# Don't directly open a file because we may want to 5201de2362d3Smrg# incorporate the script contents within a cygwin/mingw 5202de2362d3Smrg# wrapper executable. Must ONLY be called from within 5203de2362d3Smrg# func_mode_link because it depends on a number of variables 5204de2362d3Smrg# set therein. 5205de2362d3Smrg# 5206de2362d3Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5207de2362d3Smrg# variable will take. If 'yes', then the emitted script 52080d16fef4Smrg# will assume that the directory where it is stored is 5209de2362d3Smrg# the $objdir directory. This is a cygwin/mingw-specific 5210de2362d3Smrg# behavior. 5211de2362d3Smrgfunc_emit_wrapper () 5212de2362d3Smrg{ 5213de2362d3Smrg func_emit_wrapper_arg1=${1-no} 5214de2362d3Smrg 5215de2362d3Smrg $ECHO "\ 5216de2362d3Smrg#! $SHELL 5217de2362d3Smrg 5218de2362d3Smrg# $output - temporary wrapper script for $objdir/$outputname 52190d16fef4Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5220de2362d3Smrg# 5221de2362d3Smrg# The $output program cannot be directly executed until all the libtool 5222de2362d3Smrg# libraries that it depends on are installed. 5223de2362d3Smrg# 5224de2362d3Smrg# This wrapper script should never be moved out of the build directory. 5225de2362d3Smrg# If it is, it will not operate correctly. 5226de2362d3Smrg 5227de2362d3Smrg# Sed substitution that helps us do robust quoting. It backslashifies 5228de2362d3Smrg# metacharacters that are still active within double-quoted strings. 5229de2362d3Smrgsed_quote_subst='$sed_quote_subst' 5230de2362d3Smrg 5231de2362d3Smrg# Be Bourne compatible 5232de2362d3Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5233de2362d3Smrg emulate sh 5234de2362d3Smrg NULLCMD=: 5235de2362d3Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5236de2362d3Smrg # is contrary to our usage. Disable this feature. 5237de2362d3Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5238de2362d3Smrg setopt NO_GLOB_SUBST 5239de2362d3Smrgelse 5240de2362d3Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5241de2362d3Smrgfi 5242de2362d3SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5243de2362d3SmrgDUALCASE=1; export DUALCASE # for MKS sh 5244de2362d3Smrg 5245de2362d3Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5246de2362d3Smrg# if CDPATH is set. 5247de2362d3Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5248de2362d3Smrg 5249de2362d3Smrgrelink_command=\"$relink_command\" 5250de2362d3Smrg 5251de2362d3Smrg# This environment variable determines our operation mode. 5252de2362d3Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5253de2362d3Smrg # install mode needs the following variables: 5254de2362d3Smrg generated_by_libtool_version='$macro_version' 5255de2362d3Smrg notinst_deplibs='$notinst_deplibs' 5256de2362d3Smrgelse 5257de2362d3Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5258de2362d3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5259de2362d3Smrg file=\"\$0\"" 5260de2362d3Smrg 5261de2362d3Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 5262de2362d3Smrg $ECHO "\ 5263de2362d3Smrg 5264de2362d3Smrg# A function that is used when there is no print builtin or printf. 5265de2362d3Smrgfunc_fallback_echo () 5266de2362d3Smrg{ 5267de2362d3Smrg eval 'cat <<_LTECHO_EOF 5268de2362d3Smrg\$1 5269de2362d3Smrg_LTECHO_EOF' 5270de2362d3Smrg} 5271de2362d3Smrg ECHO=\"$qECHO\" 5272de2362d3Smrg fi 5273de2362d3Smrg 5274de2362d3Smrg# Very basic option parsing. These options are (a) specific to 5275de2362d3Smrg# the libtool wrapper, (b) are identical between the wrapper 52760d16fef4Smrg# /script/ and the wrapper /executable/ that is used only on 5277de2362d3Smrg# windows platforms, and (c) all begin with the string "--lt-" 52780d16fef4Smrg# (application programs are unlikely to have options that match 5279de2362d3Smrg# this pattern). 5280de2362d3Smrg# 5281de2362d3Smrg# There are only two supported options: --lt-debug and 5282de2362d3Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 5283de2362d3Smrg# 5284de2362d3Smrg# The first argument to this parsing function should be the 5285de2362d3Smrg# script's $0 value, followed by "$@". 5286de2362d3Smrglt_option_debug= 5287de2362d3Smrgfunc_parse_lt_options () 5288de2362d3Smrg{ 5289de2362d3Smrg lt_script_arg0=\$0 5290de2362d3Smrg shift 5291de2362d3Smrg for lt_opt 5292de2362d3Smrg do 5293de2362d3Smrg case \"\$lt_opt\" in 5294de2362d3Smrg --lt-debug) lt_option_debug=1 ;; 5295de2362d3Smrg --lt-dump-script) 5296de2362d3Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5297de2362d3Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5298de2362d3Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5299de2362d3Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 5300de2362d3Smrg exit 0 5301de2362d3Smrg ;; 5302de2362d3Smrg --lt-*) 5303de2362d3Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5304de2362d3Smrg exit 1 5305de2362d3Smrg ;; 5306de2362d3Smrg esac 5307de2362d3Smrg done 5308de2362d3Smrg 5309de2362d3Smrg # Print the debug banner immediately: 5310de2362d3Smrg if test -n \"\$lt_option_debug\"; then 53110d16fef4Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5312de2362d3Smrg fi 5313de2362d3Smrg} 5314de2362d3Smrg 5315de2362d3Smrg# Used when --lt-debug. Prints its arguments to stdout 5316de2362d3Smrg# (redirection is the responsibility of the caller) 5317de2362d3Smrgfunc_lt_dump_args () 5318de2362d3Smrg{ 5319de2362d3Smrg lt_dump_args_N=1; 5320de2362d3Smrg for lt_arg 5321de2362d3Smrg do 53220d16fef4Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5323de2362d3Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5324de2362d3Smrg done 5325de2362d3Smrg} 5326de2362d3Smrg 5327de2362d3Smrg# Core function for launching the target application 5328de2362d3Smrgfunc_exec_program_core () 5329de2362d3Smrg{ 5330de2362d3Smrg" 5331de2362d3Smrg case $host in 5332de2362d3Smrg # Backslashes separate directories on plain windows 5333de2362d3Smrg *-*-mingw | *-*-os2* | *-cegcc*) 5334de2362d3Smrg $ECHO "\ 5335de2362d3Smrg if test -n \"\$lt_option_debug\"; then 53360d16fef4Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5337de2362d3Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5338de2362d3Smrg fi 5339de2362d3Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5340de2362d3Smrg" 5341de2362d3Smrg ;; 5342de2362d3Smrg 5343de2362d3Smrg *) 5344de2362d3Smrg $ECHO "\ 5345de2362d3Smrg if test -n \"\$lt_option_debug\"; then 53460d16fef4Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5347de2362d3Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5348de2362d3Smrg fi 5349de2362d3Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5350de2362d3Smrg" 5351de2362d3Smrg ;; 5352de2362d3Smrg esac 5353de2362d3Smrg $ECHO "\ 5354de2362d3Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5355de2362d3Smrg exit 1 5356de2362d3Smrg} 5357de2362d3Smrg 5358de2362d3Smrg# A function to encapsulate launching the target application 5359de2362d3Smrg# Strips options in the --lt-* namespace from \$@ and 5360de2362d3Smrg# launches target application with the remaining arguments. 5361de2362d3Smrgfunc_exec_program () 5362de2362d3Smrg{ 5363de2362d3Smrg case \" \$* \" in 5364de2362d3Smrg *\\ --lt-*) 5365de2362d3Smrg for lt_wr_arg 5366de2362d3Smrg do 5367de2362d3Smrg case \$lt_wr_arg in 5368de2362d3Smrg --lt-*) ;; 5369de2362d3Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5370de2362d3Smrg esac 5371de2362d3Smrg shift 5372de2362d3Smrg done ;; 5373de2362d3Smrg esac 5374de2362d3Smrg func_exec_program_core \${1+\"\$@\"} 5375de2362d3Smrg} 5376de2362d3Smrg 5377de2362d3Smrg # Parse options 5378de2362d3Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5379de2362d3Smrg 5380de2362d3Smrg # Find the directory that this script lives in. 5381de2362d3Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5382de2362d3Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5383de2362d3Smrg 5384de2362d3Smrg # Follow symbolic links until we get to the real thisdir. 5385de2362d3Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5386de2362d3Smrg while test -n \"\$file\"; do 5387de2362d3Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5388de2362d3Smrg 5389de2362d3Smrg # If there was a directory component, then change thisdir. 5390de2362d3Smrg if test \"x\$destdir\" != \"x\$file\"; then 5391de2362d3Smrg case \"\$destdir\" in 5392de2362d3Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5393de2362d3Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5394de2362d3Smrg esac 5395de2362d3Smrg fi 5396de2362d3Smrg 5397de2362d3Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5398de2362d3Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5399de2362d3Smrg done 5400de2362d3Smrg 5401de2362d3Smrg # Usually 'no', except on cygwin/mingw when embedded into 5402de2362d3Smrg # the cwrapper. 5403de2362d3Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5404de2362d3Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5405de2362d3Smrg # special case for '.' 5406de2362d3Smrg if test \"\$thisdir\" = \".\"; then 5407de2362d3Smrg thisdir=\`pwd\` 5408de2362d3Smrg fi 5409de2362d3Smrg # remove .libs from thisdir 5410de2362d3Smrg case \"\$thisdir\" in 5411de2362d3Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5412de2362d3Smrg $objdir ) thisdir=. ;; 5413de2362d3Smrg esac 5414de2362d3Smrg fi 5415de2362d3Smrg 5416de2362d3Smrg # Try to get the absolute directory name. 5417de2362d3Smrg absdir=\`cd \"\$thisdir\" && pwd\` 5418de2362d3Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5419de2362d3Smrg" 5420de2362d3Smrg 54210d16fef4Smrg if test yes = "$fast_install"; then 5422de2362d3Smrg $ECHO "\ 5423de2362d3Smrg program=lt-'$outputname'$exeext 5424de2362d3Smrg progdir=\"\$thisdir/$objdir\" 5425de2362d3Smrg 5426de2362d3Smrg if test ! -f \"\$progdir/\$program\" || 54270d16fef4Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5428de2362d3Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5429de2362d3Smrg 5430de2362d3Smrg file=\"\$\$-\$program\" 5431de2362d3Smrg 5432de2362d3Smrg if test ! -d \"\$progdir\"; then 5433de2362d3Smrg $MKDIR \"\$progdir\" 5434de2362d3Smrg else 5435de2362d3Smrg $RM \"\$progdir/\$file\" 5436de2362d3Smrg fi" 5437de2362d3Smrg 5438de2362d3Smrg $ECHO "\ 5439de2362d3Smrg 5440de2362d3Smrg # relink executable if necessary 5441de2362d3Smrg if test -n \"\$relink_command\"; then 5442de2362d3Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5443de2362d3Smrg else 54440d16fef4Smrg \$ECHO \"\$relink_command_output\" >&2 5445de2362d3Smrg $RM \"\$progdir/\$file\" 5446de2362d3Smrg exit 1 5447de2362d3Smrg fi 5448de2362d3Smrg fi 5449de2362d3Smrg 5450de2362d3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5451de2362d3Smrg { $RM \"\$progdir/\$program\"; 5452de2362d3Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5453de2362d3Smrg $RM \"\$progdir/\$file\" 5454de2362d3Smrg fi" 5455de2362d3Smrg else 5456de2362d3Smrg $ECHO "\ 5457de2362d3Smrg program='$outputname' 5458de2362d3Smrg progdir=\"\$thisdir/$objdir\" 5459de2362d3Smrg" 5460de2362d3Smrg fi 5461de2362d3Smrg 5462de2362d3Smrg $ECHO "\ 5463de2362d3Smrg 5464de2362d3Smrg if test -f \"\$progdir/\$program\"; then" 5465de2362d3Smrg 5466de2362d3Smrg # fixup the dll searchpath if we need to. 5467de2362d3Smrg # 5468de2362d3Smrg # Fix the DLL searchpath if we need to. Do this before prepending 5469de2362d3Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 5470de2362d3Smrg # libraries must come first. 5471de2362d3Smrg if test -n "$dllsearchpath"; then 5472de2362d3Smrg $ECHO "\ 5473de2362d3Smrg # Add the dll search path components to the executable PATH 5474de2362d3Smrg PATH=$dllsearchpath:\$PATH 5475de2362d3Smrg" 5476de2362d3Smrg fi 5477de2362d3Smrg 5478de2362d3Smrg # Export our shlibpath_var if we have one. 54790d16fef4Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5480de2362d3Smrg $ECHO "\ 5481de2362d3Smrg # Add our own library path to $shlibpath_var 5482de2362d3Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5483de2362d3Smrg 5484de2362d3Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 5485de2362d3Smrg # The second colon is a workaround for a bug in BeOS R4 sed 5486de2362d3Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5487de2362d3Smrg 5488de2362d3Smrg export $shlibpath_var 5489de2362d3Smrg" 5490de2362d3Smrg fi 5491de2362d3Smrg 5492de2362d3Smrg $ECHO "\ 5493de2362d3Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5494de2362d3Smrg # Run the actual program with our arguments. 5495de2362d3Smrg func_exec_program \${1+\"\$@\"} 5496de2362d3Smrg fi 5497de2362d3Smrg else 5498de2362d3Smrg # The program doesn't exist. 54990d16fef4Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5500de2362d3Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5501de2362d3Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5502de2362d3Smrg exit 1 5503de2362d3Smrg fi 5504de2362d3Smrgfi\ 5505de2362d3Smrg" 5506de2362d3Smrg} 5507de2362d3Smrg 5508de2362d3Smrg 5509de2362d3Smrg# func_emit_cwrapperexe_src 5510de2362d3Smrg# emit the source code for a wrapper executable on stdout 5511de2362d3Smrg# Must ONLY be called from within func_mode_link because 5512de2362d3Smrg# it depends on a number of variable set therein. 5513de2362d3Smrgfunc_emit_cwrapperexe_src () 5514de2362d3Smrg{ 5515de2362d3Smrg cat <<EOF 5516de2362d3Smrg 5517de2362d3Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 55180d16fef4Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5519de2362d3Smrg 5520de2362d3Smrg The $output program cannot be directly executed until all the libtool 5521de2362d3Smrg libraries that it depends on are installed. 5522de2362d3Smrg 5523de2362d3Smrg This wrapper executable should never be moved out of the build directory. 5524de2362d3Smrg If it is, it will not operate correctly. 5525de2362d3Smrg*/ 5526de2362d3SmrgEOF 5527de2362d3Smrg cat <<"EOF" 5528de2362d3Smrg#ifdef _MSC_VER 5529de2362d3Smrg# define _CRT_SECURE_NO_DEPRECATE 1 5530de2362d3Smrg#endif 5531de2362d3Smrg#include <stdio.h> 5532de2362d3Smrg#include <stdlib.h> 5533de2362d3Smrg#ifdef _MSC_VER 5534de2362d3Smrg# include <direct.h> 5535de2362d3Smrg# include <process.h> 5536de2362d3Smrg# include <io.h> 5537de2362d3Smrg#else 5538de2362d3Smrg# include <unistd.h> 5539de2362d3Smrg# include <stdint.h> 5540de2362d3Smrg# ifdef __CYGWIN__ 5541de2362d3Smrg# include <io.h> 5542de2362d3Smrg# endif 5543de2362d3Smrg#endif 5544de2362d3Smrg#include <malloc.h> 5545de2362d3Smrg#include <stdarg.h> 5546de2362d3Smrg#include <assert.h> 5547de2362d3Smrg#include <string.h> 5548de2362d3Smrg#include <ctype.h> 5549de2362d3Smrg#include <errno.h> 5550de2362d3Smrg#include <fcntl.h> 5551de2362d3Smrg#include <sys/stat.h> 5552de2362d3Smrg 55530d16fef4Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 55540d16fef4Smrg 5555de2362d3Smrg/* declarations of non-ANSI functions */ 55560d16fef4Smrg#if defined __MINGW32__ 5557de2362d3Smrg# ifdef __STRICT_ANSI__ 5558de2362d3Smrgint _putenv (const char *); 5559de2362d3Smrg# endif 55600d16fef4Smrg#elif defined __CYGWIN__ 5561de2362d3Smrg# ifdef __STRICT_ANSI__ 5562de2362d3Smrgchar *realpath (const char *, char *); 5563de2362d3Smrgint putenv (char *); 5564de2362d3Smrgint setenv (const char *, const char *, int); 5565de2362d3Smrg# endif 55660d16fef4Smrg/* #elif defined other_platform || defined ... */ 5567de2362d3Smrg#endif 5568de2362d3Smrg 5569de2362d3Smrg/* portability defines, excluding path handling macros */ 55700d16fef4Smrg#if defined _MSC_VER 5571de2362d3Smrg# define setmode _setmode 5572de2362d3Smrg# define stat _stat 5573de2362d3Smrg# define chmod _chmod 5574de2362d3Smrg# define getcwd _getcwd 5575de2362d3Smrg# define putenv _putenv 5576de2362d3Smrg# define S_IXUSR _S_IEXEC 55770d16fef4Smrg#elif defined __MINGW32__ 5578de2362d3Smrg# define setmode _setmode 5579de2362d3Smrg# define stat _stat 5580de2362d3Smrg# define chmod _chmod 5581de2362d3Smrg# define getcwd _getcwd 5582de2362d3Smrg# define putenv _putenv 55830d16fef4Smrg#elif defined __CYGWIN__ 5584de2362d3Smrg# define HAVE_SETENV 5585de2362d3Smrg# define FOPEN_WB "wb" 55860d16fef4Smrg/* #elif defined other platforms ... */ 5587de2362d3Smrg#endif 5588de2362d3Smrg 55890d16fef4Smrg#if defined PATH_MAX 5590de2362d3Smrg# define LT_PATHMAX PATH_MAX 55910d16fef4Smrg#elif defined MAXPATHLEN 5592de2362d3Smrg# define LT_PATHMAX MAXPATHLEN 5593de2362d3Smrg#else 5594de2362d3Smrg# define LT_PATHMAX 1024 5595de2362d3Smrg#endif 5596de2362d3Smrg 5597de2362d3Smrg#ifndef S_IXOTH 5598de2362d3Smrg# define S_IXOTH 0 5599de2362d3Smrg#endif 5600de2362d3Smrg#ifndef S_IXGRP 5601de2362d3Smrg# define S_IXGRP 0 5602de2362d3Smrg#endif 5603de2362d3Smrg 5604de2362d3Smrg/* path handling portability macros */ 5605de2362d3Smrg#ifndef DIR_SEPARATOR 5606de2362d3Smrg# define DIR_SEPARATOR '/' 5607de2362d3Smrg# define PATH_SEPARATOR ':' 5608de2362d3Smrg#endif 5609de2362d3Smrg 56100d16fef4Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 56110d16fef4Smrg defined __OS2__ 5612de2362d3Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 5613de2362d3Smrg# define FOPEN_WB "wb" 5614de2362d3Smrg# ifndef DIR_SEPARATOR_2 5615de2362d3Smrg# define DIR_SEPARATOR_2 '\\' 5616de2362d3Smrg# endif 5617de2362d3Smrg# ifndef PATH_SEPARATOR_2 5618de2362d3Smrg# define PATH_SEPARATOR_2 ';' 5619de2362d3Smrg# endif 5620de2362d3Smrg#endif 5621de2362d3Smrg 5622de2362d3Smrg#ifndef DIR_SEPARATOR_2 5623de2362d3Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5624de2362d3Smrg#else /* DIR_SEPARATOR_2 */ 5625de2362d3Smrg# define IS_DIR_SEPARATOR(ch) \ 5626de2362d3Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5627de2362d3Smrg#endif /* DIR_SEPARATOR_2 */ 5628de2362d3Smrg 5629de2362d3Smrg#ifndef PATH_SEPARATOR_2 5630de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5631de2362d3Smrg#else /* PATH_SEPARATOR_2 */ 5632de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5633de2362d3Smrg#endif /* PATH_SEPARATOR_2 */ 5634de2362d3Smrg 5635de2362d3Smrg#ifndef FOPEN_WB 5636de2362d3Smrg# define FOPEN_WB "w" 5637de2362d3Smrg#endif 5638de2362d3Smrg#ifndef _O_BINARY 5639de2362d3Smrg# define _O_BINARY 0 5640de2362d3Smrg#endif 5641de2362d3Smrg 5642de2362d3Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5643de2362d3Smrg#define XFREE(stale) do { \ 56440d16fef4Smrg if (stale) { free (stale); stale = 0; } \ 5645de2362d3Smrg} while (0) 5646de2362d3Smrg 56470d16fef4Smrg#if defined LT_DEBUGWRAPPER 5648de2362d3Smrgstatic int lt_debug = 1; 5649de2362d3Smrg#else 5650de2362d3Smrgstatic int lt_debug = 0; 5651de2362d3Smrg#endif 5652de2362d3Smrg 5653de2362d3Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5654de2362d3Smrg 5655de2362d3Smrgvoid *xmalloc (size_t num); 5656de2362d3Smrgchar *xstrdup (const char *string); 5657de2362d3Smrgconst char *base_name (const char *name); 5658de2362d3Smrgchar *find_executable (const char *wrapper); 5659de2362d3Smrgchar *chase_symlinks (const char *pathspec); 5660de2362d3Smrgint make_executable (const char *path); 5661de2362d3Smrgint check_executable (const char *path); 5662de2362d3Smrgchar *strendzap (char *str, const char *pat); 5663de2362d3Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5664de2362d3Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 5665de2362d3Smrgstatic const char *nonnull (const char *s); 5666de2362d3Smrgstatic const char *nonempty (const char *s); 5667de2362d3Smrgvoid lt_setenv (const char *name, const char *value); 5668de2362d3Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5669de2362d3Smrgvoid lt_update_exe_path (const char *name, const char *value); 5670de2362d3Smrgvoid lt_update_lib_path (const char *name, const char *value); 5671de2362d3Smrgchar **prepare_spawn (char **argv); 5672de2362d3Smrgvoid lt_dump_script (FILE *f); 5673de2362d3SmrgEOF 5674de2362d3Smrg 5675de2362d3Smrg cat <<EOF 56760d16fef4Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 56770d16fef4Smrg# define externally_visible volatile 56780d16fef4Smrg#else 56790d16fef4Smrg# define externally_visible __attribute__((externally_visible)) volatile 56800d16fef4Smrg#endif 56810d16fef4Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5682de2362d3Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5683de2362d3SmrgEOF 5684de2362d3Smrg 56850d16fef4Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5686de2362d3Smrg func_to_host_path "$temp_rpath" 5687de2362d3Smrg cat <<EOF 5688de2362d3Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5689de2362d3SmrgEOF 5690de2362d3Smrg else 5691de2362d3Smrg cat <<"EOF" 5692de2362d3Smrgconst char * LIB_PATH_VALUE = ""; 5693de2362d3SmrgEOF 5694de2362d3Smrg fi 5695de2362d3Smrg 5696de2362d3Smrg if test -n "$dllsearchpath"; then 5697de2362d3Smrg func_to_host_path "$dllsearchpath:" 5698de2362d3Smrg cat <<EOF 5699de2362d3Smrgconst char * EXE_PATH_VARNAME = "PATH"; 5700de2362d3Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5701de2362d3SmrgEOF 5702de2362d3Smrg else 5703de2362d3Smrg cat <<"EOF" 5704de2362d3Smrgconst char * EXE_PATH_VARNAME = ""; 5705de2362d3Smrgconst char * EXE_PATH_VALUE = ""; 5706de2362d3SmrgEOF 5707de2362d3Smrg fi 5708de2362d3Smrg 57090d16fef4Smrg if test yes = "$fast_install"; then 5710de2362d3Smrg cat <<EOF 5711de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5712de2362d3SmrgEOF 5713de2362d3Smrg else 5714de2362d3Smrg cat <<EOF 5715de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5716de2362d3SmrgEOF 5717de2362d3Smrg fi 5718de2362d3Smrg 5719de2362d3Smrg 5720de2362d3Smrg cat <<"EOF" 5721de2362d3Smrg 5722de2362d3Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 5723de2362d3Smrg 5724de2362d3Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5725de2362d3Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5726de2362d3Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5727de2362d3Smrg 5728de2362d3Smrgint 5729de2362d3Smrgmain (int argc, char *argv[]) 5730de2362d3Smrg{ 5731de2362d3Smrg char **newargz; 5732de2362d3Smrg int newargc; 5733de2362d3Smrg char *tmp_pathspec; 5734de2362d3Smrg char *actual_cwrapper_path; 5735de2362d3Smrg char *actual_cwrapper_name; 5736de2362d3Smrg char *target_name; 5737de2362d3Smrg char *lt_argv_zero; 57380d16fef4Smrg int rval = 127; 5739de2362d3Smrg 5740de2362d3Smrg int i; 5741de2362d3Smrg 5742de2362d3Smrg program_name = (char *) xstrdup (base_name (argv[0])); 57430d16fef4Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 5744de2362d3Smrg 5745de2362d3Smrg /* very simple arg parsing; don't want to rely on getopt 5746de2362d3Smrg * also, copy all non cwrapper options to newargz, except 5747de2362d3Smrg * argz[0], which is handled differently 5748de2362d3Smrg */ 5749de2362d3Smrg newargc=0; 5750de2362d3Smrg for (i = 1; i < argc; i++) 5751de2362d3Smrg { 57520d16fef4Smrg if (STREQ (argv[i], dumpscript_opt)) 5753de2362d3Smrg { 5754de2362d3SmrgEOF 57550d16fef4Smrg case $host in 5756de2362d3Smrg *mingw* | *cygwin* ) 5757de2362d3Smrg # make stdout use "unix" line endings 5758de2362d3Smrg echo " setmode(1,_O_BINARY);" 5759de2362d3Smrg ;; 5760de2362d3Smrg esac 5761de2362d3Smrg 5762de2362d3Smrg cat <<"EOF" 5763de2362d3Smrg lt_dump_script (stdout); 5764de2362d3Smrg return 0; 5765de2362d3Smrg } 57660d16fef4Smrg if (STREQ (argv[i], debug_opt)) 5767de2362d3Smrg { 5768de2362d3Smrg lt_debug = 1; 5769de2362d3Smrg continue; 5770de2362d3Smrg } 57710d16fef4Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 5772de2362d3Smrg { 5773de2362d3Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 5774de2362d3Smrg namespace, but it is not one of the ones we know about and 5775de2362d3Smrg have already dealt with, above (inluding dump-script), then 5776de2362d3Smrg report an error. Otherwise, targets might begin to believe 5777de2362d3Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 5778de2362d3Smrg namespace. The first time any user complains about this, we'll 5779de2362d3Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 5780de2362d3Smrg or a configure.ac-settable value. 5781de2362d3Smrg */ 5782de2362d3Smrg lt_fatal (__FILE__, __LINE__, 5783de2362d3Smrg "unrecognized %s option: '%s'", 5784de2362d3Smrg ltwrapper_option_prefix, argv[i]); 5785de2362d3Smrg } 5786de2362d3Smrg /* otherwise ... */ 5787de2362d3Smrg newargz[++newargc] = xstrdup (argv[i]); 5788de2362d3Smrg } 5789de2362d3Smrg newargz[++newargc] = NULL; 5790de2362d3Smrg 5791de2362d3SmrgEOF 5792de2362d3Smrg cat <<EOF 5793de2362d3Smrg /* The GNU banner must be the first non-error debug message */ 57940d16fef4Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 5795de2362d3SmrgEOF 5796de2362d3Smrg cat <<"EOF" 5797de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 5798de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 5799de2362d3Smrg 5800de2362d3Smrg tmp_pathspec = find_executable (argv[0]); 5801de2362d3Smrg if (tmp_pathspec == NULL) 5802de2362d3Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 5803de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 5804de2362d3Smrg "(main) found exe (before symlink chase) at: %s\n", 5805de2362d3Smrg tmp_pathspec); 5806de2362d3Smrg 5807de2362d3Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 5808de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 5809de2362d3Smrg "(main) found exe (after symlink chase) at: %s\n", 5810de2362d3Smrg actual_cwrapper_path); 5811de2362d3Smrg XFREE (tmp_pathspec); 5812de2362d3Smrg 5813de2362d3Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 5814de2362d3Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 5815de2362d3Smrg 5816de2362d3Smrg /* wrapper name transforms */ 5817de2362d3Smrg strendzap (actual_cwrapper_name, ".exe"); 5818de2362d3Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 5819de2362d3Smrg XFREE (actual_cwrapper_name); 5820de2362d3Smrg actual_cwrapper_name = tmp_pathspec; 5821de2362d3Smrg tmp_pathspec = 0; 5822de2362d3Smrg 5823de2362d3Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 5824de2362d3Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 5825de2362d3Smrg strendzap (target_name, ".exe"); 5826de2362d3Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 5827de2362d3Smrg XFREE (target_name); 5828de2362d3Smrg target_name = tmp_pathspec; 5829de2362d3Smrg tmp_pathspec = 0; 5830de2362d3Smrg 5831de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 5832de2362d3Smrg "(main) libtool target name: %s\n", 5833de2362d3Smrg target_name); 5834de2362d3SmrgEOF 5835de2362d3Smrg 5836de2362d3Smrg cat <<EOF 5837de2362d3Smrg newargz[0] = 5838de2362d3Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 5839de2362d3Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 5840de2362d3Smrg strcpy (newargz[0], actual_cwrapper_path); 5841de2362d3Smrg strcat (newargz[0], "$objdir"); 5842de2362d3Smrg strcat (newargz[0], "/"); 5843de2362d3SmrgEOF 5844de2362d3Smrg 5845de2362d3Smrg cat <<"EOF" 5846de2362d3Smrg /* stop here, and copy so we don't have to do this twice */ 5847de2362d3Smrg tmp_pathspec = xstrdup (newargz[0]); 5848de2362d3Smrg 5849de2362d3Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 5850de2362d3Smrg strcat (newargz[0], actual_cwrapper_name); 5851de2362d3Smrg 5852de2362d3Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 5853de2362d3Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 5854de2362d3Smrg XFREE (tmp_pathspec); 5855de2362d3Smrg tmp_pathspec = NULL; 5856de2362d3SmrgEOF 5857de2362d3Smrg 5858de2362d3Smrg case $host_os in 5859de2362d3Smrg mingw*) 5860de2362d3Smrg cat <<"EOF" 5861de2362d3Smrg { 5862de2362d3Smrg char* p; 5863de2362d3Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 5864de2362d3Smrg { 5865de2362d3Smrg *p = '/'; 5866de2362d3Smrg } 5867de2362d3Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 5868de2362d3Smrg { 5869de2362d3Smrg *p = '/'; 5870de2362d3Smrg } 5871de2362d3Smrg } 5872de2362d3SmrgEOF 5873de2362d3Smrg ;; 5874de2362d3Smrg esac 5875de2362d3Smrg 5876de2362d3Smrg cat <<"EOF" 5877de2362d3Smrg XFREE (target_name); 5878de2362d3Smrg XFREE (actual_cwrapper_path); 5879de2362d3Smrg XFREE (actual_cwrapper_name); 5880de2362d3Smrg 5881de2362d3Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 5882de2362d3Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 5883de2362d3Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 5884de2362d3Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 5885de2362d3Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 5886de2362d3Smrg libraries must come first. */ 5887de2362d3Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 5888de2362d3Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 5889de2362d3Smrg 5890de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 5891de2362d3Smrg nonnull (lt_argv_zero)); 5892de2362d3Smrg for (i = 0; i < newargc; i++) 5893de2362d3Smrg { 5894de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 5895de2362d3Smrg i, nonnull (newargz[i])); 5896de2362d3Smrg } 5897de2362d3Smrg 5898de2362d3SmrgEOF 5899de2362d3Smrg 5900de2362d3Smrg case $host_os in 5901de2362d3Smrg mingw*) 5902de2362d3Smrg cat <<"EOF" 5903de2362d3Smrg /* execv doesn't actually work on mingw as expected on unix */ 5904de2362d3Smrg newargz = prepare_spawn (newargz); 59050d16fef4Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 5906de2362d3Smrg if (rval == -1) 5907de2362d3Smrg { 5908de2362d3Smrg /* failed to start process */ 5909de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 5910de2362d3Smrg "(main) failed to launch target \"%s\": %s\n", 5911de2362d3Smrg lt_argv_zero, nonnull (strerror (errno))); 5912de2362d3Smrg return 127; 5913de2362d3Smrg } 5914de2362d3Smrg return rval; 5915de2362d3SmrgEOF 5916de2362d3Smrg ;; 5917de2362d3Smrg *) 5918de2362d3Smrg cat <<"EOF" 5919de2362d3Smrg execv (lt_argv_zero, newargz); 5920de2362d3Smrg return rval; /* =127, but avoids unused variable warning */ 5921de2362d3SmrgEOF 5922de2362d3Smrg ;; 5923de2362d3Smrg esac 5924de2362d3Smrg 5925de2362d3Smrg cat <<"EOF" 5926de2362d3Smrg} 5927de2362d3Smrg 5928de2362d3Smrgvoid * 5929de2362d3Smrgxmalloc (size_t num) 5930de2362d3Smrg{ 5931de2362d3Smrg void *p = (void *) malloc (num); 5932de2362d3Smrg if (!p) 5933de2362d3Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 5934de2362d3Smrg 5935de2362d3Smrg return p; 5936de2362d3Smrg} 5937de2362d3Smrg 5938de2362d3Smrgchar * 5939de2362d3Smrgxstrdup (const char *string) 5940de2362d3Smrg{ 5941de2362d3Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 5942de2362d3Smrg string) : NULL; 5943de2362d3Smrg} 5944de2362d3Smrg 5945de2362d3Smrgconst char * 5946de2362d3Smrgbase_name (const char *name) 5947de2362d3Smrg{ 5948de2362d3Smrg const char *base; 5949de2362d3Smrg 59500d16fef4Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 5951de2362d3Smrg /* Skip over the disk name in MSDOS pathnames. */ 5952de2362d3Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 5953de2362d3Smrg name += 2; 5954de2362d3Smrg#endif 5955de2362d3Smrg 5956de2362d3Smrg for (base = name; *name; name++) 5957de2362d3Smrg if (IS_DIR_SEPARATOR (*name)) 5958de2362d3Smrg base = name + 1; 5959de2362d3Smrg return base; 5960de2362d3Smrg} 5961de2362d3Smrg 5962de2362d3Smrgint 5963de2362d3Smrgcheck_executable (const char *path) 5964de2362d3Smrg{ 5965de2362d3Smrg struct stat st; 5966de2362d3Smrg 5967de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 5968de2362d3Smrg nonempty (path)); 5969de2362d3Smrg if ((!path) || (!*path)) 5970de2362d3Smrg return 0; 5971de2362d3Smrg 5972de2362d3Smrg if ((stat (path, &st) >= 0) 5973de2362d3Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 5974de2362d3Smrg return 1; 5975de2362d3Smrg else 5976de2362d3Smrg return 0; 5977de2362d3Smrg} 5978de2362d3Smrg 5979de2362d3Smrgint 5980de2362d3Smrgmake_executable (const char *path) 5981de2362d3Smrg{ 5982de2362d3Smrg int rval = 0; 5983de2362d3Smrg struct stat st; 5984de2362d3Smrg 5985de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 5986de2362d3Smrg nonempty (path)); 5987de2362d3Smrg if ((!path) || (!*path)) 5988de2362d3Smrg return 0; 5989de2362d3Smrg 5990de2362d3Smrg if (stat (path, &st) >= 0) 5991de2362d3Smrg { 5992de2362d3Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 5993de2362d3Smrg } 5994de2362d3Smrg return rval; 5995de2362d3Smrg} 5996de2362d3Smrg 5997de2362d3Smrg/* Searches for the full path of the wrapper. Returns 5998de2362d3Smrg newly allocated full path name if found, NULL otherwise 5999de2362d3Smrg Does not chase symlinks, even on platforms that support them. 6000de2362d3Smrg*/ 6001de2362d3Smrgchar * 6002de2362d3Smrgfind_executable (const char *wrapper) 6003de2362d3Smrg{ 6004de2362d3Smrg int has_slash = 0; 6005de2362d3Smrg const char *p; 6006de2362d3Smrg const char *p_next; 6007de2362d3Smrg /* static buffer for getcwd */ 6008de2362d3Smrg char tmp[LT_PATHMAX + 1]; 60090d16fef4Smrg size_t tmp_len; 6010de2362d3Smrg char *concat_name; 6011de2362d3Smrg 6012de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6013de2362d3Smrg nonempty (wrapper)); 6014de2362d3Smrg 6015de2362d3Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 6016de2362d3Smrg return NULL; 6017de2362d3Smrg 6018de2362d3Smrg /* Absolute path? */ 60190d16fef4Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6020de2362d3Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6021de2362d3Smrg { 6022de2362d3Smrg concat_name = xstrdup (wrapper); 6023de2362d3Smrg if (check_executable (concat_name)) 6024de2362d3Smrg return concat_name; 6025de2362d3Smrg XFREE (concat_name); 6026de2362d3Smrg } 6027de2362d3Smrg else 6028de2362d3Smrg { 6029de2362d3Smrg#endif 6030de2362d3Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 6031de2362d3Smrg { 6032de2362d3Smrg concat_name = xstrdup (wrapper); 6033de2362d3Smrg if (check_executable (concat_name)) 6034de2362d3Smrg return concat_name; 6035de2362d3Smrg XFREE (concat_name); 6036de2362d3Smrg } 60370d16fef4Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6038de2362d3Smrg } 6039de2362d3Smrg#endif 6040de2362d3Smrg 6041de2362d3Smrg for (p = wrapper; *p; p++) 6042de2362d3Smrg if (*p == '/') 6043de2362d3Smrg { 6044de2362d3Smrg has_slash = 1; 6045de2362d3Smrg break; 6046de2362d3Smrg } 6047de2362d3Smrg if (!has_slash) 6048de2362d3Smrg { 6049de2362d3Smrg /* no slashes; search PATH */ 6050de2362d3Smrg const char *path = getenv ("PATH"); 6051de2362d3Smrg if (path != NULL) 6052de2362d3Smrg { 6053de2362d3Smrg for (p = path; *p; p = p_next) 6054de2362d3Smrg { 6055de2362d3Smrg const char *q; 6056de2362d3Smrg size_t p_len; 6057de2362d3Smrg for (q = p; *q; q++) 6058de2362d3Smrg if (IS_PATH_SEPARATOR (*q)) 6059de2362d3Smrg break; 60600d16fef4Smrg p_len = (size_t) (q - p); 6061de2362d3Smrg p_next = (*q == '\0' ? q : q + 1); 6062de2362d3Smrg if (p_len == 0) 6063de2362d3Smrg { 6064de2362d3Smrg /* empty path: current directory */ 6065de2362d3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6066de2362d3Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6067de2362d3Smrg nonnull (strerror (errno))); 6068de2362d3Smrg tmp_len = strlen (tmp); 6069de2362d3Smrg concat_name = 6070de2362d3Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6071de2362d3Smrg memcpy (concat_name, tmp, tmp_len); 6072de2362d3Smrg concat_name[tmp_len] = '/'; 6073de2362d3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6074de2362d3Smrg } 6075de2362d3Smrg else 6076de2362d3Smrg { 6077de2362d3Smrg concat_name = 6078de2362d3Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6079de2362d3Smrg memcpy (concat_name, p, p_len); 6080de2362d3Smrg concat_name[p_len] = '/'; 6081de2362d3Smrg strcpy (concat_name + p_len + 1, wrapper); 6082de2362d3Smrg } 6083de2362d3Smrg if (check_executable (concat_name)) 6084de2362d3Smrg return concat_name; 6085de2362d3Smrg XFREE (concat_name); 6086de2362d3Smrg } 6087de2362d3Smrg } 6088de2362d3Smrg /* not found in PATH; assume curdir */ 6089de2362d3Smrg } 6090de2362d3Smrg /* Relative path | not found in path: prepend cwd */ 6091de2362d3Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6092de2362d3Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6093de2362d3Smrg nonnull (strerror (errno))); 6094de2362d3Smrg tmp_len = strlen (tmp); 6095de2362d3Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6096de2362d3Smrg memcpy (concat_name, tmp, tmp_len); 6097de2362d3Smrg concat_name[tmp_len] = '/'; 6098de2362d3Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6099de2362d3Smrg 6100de2362d3Smrg if (check_executable (concat_name)) 6101de2362d3Smrg return concat_name; 6102de2362d3Smrg XFREE (concat_name); 6103de2362d3Smrg return NULL; 6104de2362d3Smrg} 6105de2362d3Smrg 6106de2362d3Smrgchar * 6107de2362d3Smrgchase_symlinks (const char *pathspec) 6108de2362d3Smrg{ 6109de2362d3Smrg#ifndef S_ISLNK 6110de2362d3Smrg return xstrdup (pathspec); 6111de2362d3Smrg#else 6112de2362d3Smrg char buf[LT_PATHMAX]; 6113de2362d3Smrg struct stat s; 6114de2362d3Smrg char *tmp_pathspec = xstrdup (pathspec); 6115de2362d3Smrg char *p; 6116de2362d3Smrg int has_symlinks = 0; 6117de2362d3Smrg while (strlen (tmp_pathspec) && !has_symlinks) 6118de2362d3Smrg { 6119de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 6120de2362d3Smrg "checking path component for symlinks: %s\n", 6121de2362d3Smrg tmp_pathspec); 6122de2362d3Smrg if (lstat (tmp_pathspec, &s) == 0) 6123de2362d3Smrg { 6124de2362d3Smrg if (S_ISLNK (s.st_mode) != 0) 6125de2362d3Smrg { 6126de2362d3Smrg has_symlinks = 1; 6127de2362d3Smrg break; 6128de2362d3Smrg } 6129de2362d3Smrg 6130de2362d3Smrg /* search backwards for last DIR_SEPARATOR */ 6131de2362d3Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6132de2362d3Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6133de2362d3Smrg p--; 6134de2362d3Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6135de2362d3Smrg { 6136de2362d3Smrg /* no more DIR_SEPARATORS left */ 6137de2362d3Smrg break; 6138de2362d3Smrg } 6139de2362d3Smrg *p = '\0'; 6140de2362d3Smrg } 6141de2362d3Smrg else 6142de2362d3Smrg { 6143de2362d3Smrg lt_fatal (__FILE__, __LINE__, 6144de2362d3Smrg "error accessing file \"%s\": %s", 6145de2362d3Smrg tmp_pathspec, nonnull (strerror (errno))); 6146de2362d3Smrg } 6147de2362d3Smrg } 6148de2362d3Smrg XFREE (tmp_pathspec); 6149de2362d3Smrg 6150de2362d3Smrg if (!has_symlinks) 6151de2362d3Smrg { 6152de2362d3Smrg return xstrdup (pathspec); 6153de2362d3Smrg } 6154de2362d3Smrg 6155de2362d3Smrg tmp_pathspec = realpath (pathspec, buf); 6156de2362d3Smrg if (tmp_pathspec == 0) 6157de2362d3Smrg { 6158de2362d3Smrg lt_fatal (__FILE__, __LINE__, 6159de2362d3Smrg "could not follow symlinks for %s", pathspec); 6160de2362d3Smrg } 6161de2362d3Smrg return xstrdup (tmp_pathspec); 6162de2362d3Smrg#endif 6163de2362d3Smrg} 6164de2362d3Smrg 6165de2362d3Smrgchar * 6166de2362d3Smrgstrendzap (char *str, const char *pat) 6167de2362d3Smrg{ 6168de2362d3Smrg size_t len, patlen; 6169de2362d3Smrg 6170de2362d3Smrg assert (str != NULL); 6171de2362d3Smrg assert (pat != NULL); 6172de2362d3Smrg 6173de2362d3Smrg len = strlen (str); 6174de2362d3Smrg patlen = strlen (pat); 6175de2362d3Smrg 6176de2362d3Smrg if (patlen <= len) 6177de2362d3Smrg { 6178de2362d3Smrg str += len - patlen; 61790d16fef4Smrg if (STREQ (str, pat)) 6180de2362d3Smrg *str = '\0'; 6181de2362d3Smrg } 6182de2362d3Smrg return str; 6183de2362d3Smrg} 6184de2362d3Smrg 6185de2362d3Smrgvoid 6186de2362d3Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 6187de2362d3Smrg{ 6188de2362d3Smrg va_list args; 6189de2362d3Smrg if (lt_debug) 6190de2362d3Smrg { 6191de2362d3Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6192de2362d3Smrg va_start (args, fmt); 6193de2362d3Smrg (void) vfprintf (stderr, fmt, args); 6194de2362d3Smrg va_end (args); 6195de2362d3Smrg } 6196de2362d3Smrg} 6197de2362d3Smrg 6198de2362d3Smrgstatic void 6199de2362d3Smrglt_error_core (int exit_status, const char *file, 6200de2362d3Smrg int line, const char *mode, 6201de2362d3Smrg const char *message, va_list ap) 6202de2362d3Smrg{ 6203de2362d3Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6204de2362d3Smrg vfprintf (stderr, message, ap); 6205de2362d3Smrg fprintf (stderr, ".\n"); 6206de2362d3Smrg 6207de2362d3Smrg if (exit_status >= 0) 6208de2362d3Smrg exit (exit_status); 6209de2362d3Smrg} 6210de2362d3Smrg 6211de2362d3Smrgvoid 6212de2362d3Smrglt_fatal (const char *file, int line, const char *message, ...) 6213de2362d3Smrg{ 6214de2362d3Smrg va_list ap; 6215de2362d3Smrg va_start (ap, message); 6216de2362d3Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6217de2362d3Smrg va_end (ap); 6218de2362d3Smrg} 6219de2362d3Smrg 6220de2362d3Smrgstatic const char * 6221de2362d3Smrgnonnull (const char *s) 6222de2362d3Smrg{ 6223de2362d3Smrg return s ? s : "(null)"; 6224de2362d3Smrg} 6225de2362d3Smrg 6226de2362d3Smrgstatic const char * 6227de2362d3Smrgnonempty (const char *s) 6228de2362d3Smrg{ 6229de2362d3Smrg return (s && !*s) ? "(empty)" : nonnull (s); 6230de2362d3Smrg} 6231de2362d3Smrg 6232de2362d3Smrgvoid 6233de2362d3Smrglt_setenv (const char *name, const char *value) 6234de2362d3Smrg{ 6235de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 6236de2362d3Smrg "(lt_setenv) setting '%s' to '%s'\n", 6237de2362d3Smrg nonnull (name), nonnull (value)); 6238de2362d3Smrg { 6239de2362d3Smrg#ifdef HAVE_SETENV 6240de2362d3Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 6241de2362d3Smrg char *str = xstrdup (value); 6242de2362d3Smrg setenv (name, str, 1); 6243de2362d3Smrg#else 62440d16fef4Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6245de2362d3Smrg char *str = XMALLOC (char, len); 6246de2362d3Smrg sprintf (str, "%s=%s", name, value); 6247de2362d3Smrg if (putenv (str) != EXIT_SUCCESS) 6248de2362d3Smrg { 6249de2362d3Smrg XFREE (str); 6250de2362d3Smrg } 6251de2362d3Smrg#endif 6252de2362d3Smrg } 6253de2362d3Smrg} 6254de2362d3Smrg 6255de2362d3Smrgchar * 6256de2362d3Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 6257de2362d3Smrg{ 6258de2362d3Smrg char *new_value; 6259de2362d3Smrg if (orig_value && *orig_value) 6260de2362d3Smrg { 62610d16fef4Smrg size_t orig_value_len = strlen (orig_value); 62620d16fef4Smrg size_t add_len = strlen (add); 6263de2362d3Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6264de2362d3Smrg if (to_end) 6265de2362d3Smrg { 6266de2362d3Smrg strcpy (new_value, orig_value); 6267de2362d3Smrg strcpy (new_value + orig_value_len, add); 6268de2362d3Smrg } 6269de2362d3Smrg else 6270de2362d3Smrg { 6271de2362d3Smrg strcpy (new_value, add); 6272de2362d3Smrg strcpy (new_value + add_len, orig_value); 6273de2362d3Smrg } 6274de2362d3Smrg } 6275de2362d3Smrg else 6276de2362d3Smrg { 6277de2362d3Smrg new_value = xstrdup (add); 6278de2362d3Smrg } 6279de2362d3Smrg return new_value; 6280de2362d3Smrg} 6281de2362d3Smrg 6282de2362d3Smrgvoid 6283de2362d3Smrglt_update_exe_path (const char *name, const char *value) 6284de2362d3Smrg{ 6285de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 6286de2362d3Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6287de2362d3Smrg nonnull (name), nonnull (value)); 6288de2362d3Smrg 6289de2362d3Smrg if (name && *name && value && *value) 6290de2362d3Smrg { 6291de2362d3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6292de2362d3Smrg /* some systems can't cope with a ':'-terminated path #' */ 62930d16fef4Smrg size_t len = strlen (new_value); 62940d16fef4Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6295de2362d3Smrg { 62960d16fef4Smrg new_value[--len] = '\0'; 6297de2362d3Smrg } 6298de2362d3Smrg lt_setenv (name, new_value); 6299de2362d3Smrg XFREE (new_value); 6300de2362d3Smrg } 6301de2362d3Smrg} 6302de2362d3Smrg 6303de2362d3Smrgvoid 6304de2362d3Smrglt_update_lib_path (const char *name, const char *value) 6305de2362d3Smrg{ 6306de2362d3Smrg lt_debugprintf (__FILE__, __LINE__, 6307de2362d3Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6308de2362d3Smrg nonnull (name), nonnull (value)); 6309de2362d3Smrg 6310de2362d3Smrg if (name && *name && value && *value) 6311de2362d3Smrg { 6312de2362d3Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6313de2362d3Smrg lt_setenv (name, new_value); 6314de2362d3Smrg XFREE (new_value); 6315de2362d3Smrg } 6316de2362d3Smrg} 6317de2362d3Smrg 6318de2362d3SmrgEOF 6319de2362d3Smrg case $host_os in 6320de2362d3Smrg mingw*) 6321de2362d3Smrg cat <<"EOF" 6322de2362d3Smrg 6323de2362d3Smrg/* Prepares an argument vector before calling spawn(). 6324de2362d3Smrg Note that spawn() does not by itself call the command interpreter 6325de2362d3Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6326de2362d3Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6327de2362d3Smrg GetVersionEx(&v); 6328de2362d3Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6329de2362d3Smrg }) ? "cmd.exe" : "command.com"). 6330de2362d3Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 6331de2362d3Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6332de2362d3Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6333de2362d3Smrg special way: 6334de2362d3Smrg - Space and tab are interpreted as delimiters. They are not treated as 6335de2362d3Smrg delimiters if they are surrounded by double quotes: "...". 6336de2362d3Smrg - Unescaped double quotes are removed from the input. Their only effect is 6337de2362d3Smrg that within double quotes, space and tab are treated like normal 6338de2362d3Smrg characters. 6339de2362d3Smrg - Backslashes not followed by double quotes are not special. 6340de2362d3Smrg - But 2*n+1 backslashes followed by a double quote become 6341de2362d3Smrg n backslashes followed by a double quote (n >= 0): 6342de2362d3Smrg \" -> " 6343de2362d3Smrg \\\" -> \" 6344de2362d3Smrg \\\\\" -> \\" 6345de2362d3Smrg */ 6346de2362d3Smrg#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" 6347de2362d3Smrg#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" 6348de2362d3Smrgchar ** 6349de2362d3Smrgprepare_spawn (char **argv) 6350de2362d3Smrg{ 6351de2362d3Smrg size_t argc; 6352de2362d3Smrg char **new_argv; 6353de2362d3Smrg size_t i; 6354de2362d3Smrg 6355de2362d3Smrg /* Count number of arguments. */ 6356de2362d3Smrg for (argc = 0; argv[argc] != NULL; argc++) 6357de2362d3Smrg ; 6358de2362d3Smrg 6359de2362d3Smrg /* Allocate new argument vector. */ 6360de2362d3Smrg new_argv = XMALLOC (char *, argc + 1); 6361de2362d3Smrg 6362de2362d3Smrg /* Put quoted arguments into the new argument vector. */ 6363de2362d3Smrg for (i = 0; i < argc; i++) 6364de2362d3Smrg { 6365de2362d3Smrg const char *string = argv[i]; 6366de2362d3Smrg 6367de2362d3Smrg if (string[0] == '\0') 6368de2362d3Smrg new_argv[i] = xstrdup ("\"\""); 6369de2362d3Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6370de2362d3Smrg { 6371de2362d3Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6372de2362d3Smrg size_t length; 6373de2362d3Smrg unsigned int backslashes; 6374de2362d3Smrg const char *s; 6375de2362d3Smrg char *quoted_string; 6376de2362d3Smrg char *p; 6377de2362d3Smrg 6378de2362d3Smrg length = 0; 6379de2362d3Smrg backslashes = 0; 6380de2362d3Smrg if (quote_around) 6381de2362d3Smrg length++; 6382de2362d3Smrg for (s = string; *s != '\0'; s++) 6383de2362d3Smrg { 6384de2362d3Smrg char c = *s; 6385de2362d3Smrg if (c == '"') 6386de2362d3Smrg length += backslashes + 1; 6387de2362d3Smrg length++; 6388de2362d3Smrg if (c == '\\') 6389de2362d3Smrg backslashes++; 6390de2362d3Smrg else 6391de2362d3Smrg backslashes = 0; 6392de2362d3Smrg } 6393de2362d3Smrg if (quote_around) 6394de2362d3Smrg length += backslashes + 1; 6395de2362d3Smrg 6396de2362d3Smrg quoted_string = XMALLOC (char, length + 1); 6397de2362d3Smrg 6398de2362d3Smrg p = quoted_string; 6399de2362d3Smrg backslashes = 0; 6400de2362d3Smrg if (quote_around) 6401de2362d3Smrg *p++ = '"'; 6402de2362d3Smrg for (s = string; *s != '\0'; s++) 6403de2362d3Smrg { 6404de2362d3Smrg char c = *s; 6405de2362d3Smrg if (c == '"') 6406de2362d3Smrg { 6407de2362d3Smrg unsigned int j; 6408de2362d3Smrg for (j = backslashes + 1; j > 0; j--) 6409de2362d3Smrg *p++ = '\\'; 6410de2362d3Smrg } 6411de2362d3Smrg *p++ = c; 6412de2362d3Smrg if (c == '\\') 6413de2362d3Smrg backslashes++; 6414de2362d3Smrg else 6415de2362d3Smrg backslashes = 0; 6416de2362d3Smrg } 6417de2362d3Smrg if (quote_around) 6418de2362d3Smrg { 6419de2362d3Smrg unsigned int j; 6420de2362d3Smrg for (j = backslashes; j > 0; j--) 6421de2362d3Smrg *p++ = '\\'; 6422de2362d3Smrg *p++ = '"'; 6423de2362d3Smrg } 6424de2362d3Smrg *p = '\0'; 6425de2362d3Smrg 6426de2362d3Smrg new_argv[i] = quoted_string; 6427de2362d3Smrg } 6428de2362d3Smrg else 6429de2362d3Smrg new_argv[i] = (char *) string; 6430de2362d3Smrg } 6431de2362d3Smrg new_argv[argc] = NULL; 6432de2362d3Smrg 6433de2362d3Smrg return new_argv; 6434de2362d3Smrg} 6435de2362d3SmrgEOF 6436de2362d3Smrg ;; 6437de2362d3Smrg esac 6438de2362d3Smrg 6439de2362d3Smrg cat <<"EOF" 6440de2362d3Smrgvoid lt_dump_script (FILE* f) 6441de2362d3Smrg{ 6442de2362d3SmrgEOF 6443de2362d3Smrg func_emit_wrapper yes | 6444de2362d3Smrg $SED -n -e ' 6445de2362d3Smrgs/^\(.\{79\}\)\(..*\)/\1\ 6446de2362d3Smrg\2/ 6447de2362d3Smrgh 6448de2362d3Smrgs/\([\\"]\)/\\\1/g 6449de2362d3Smrgs/$/\\n/ 6450de2362d3Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6451de2362d3Smrgg 6452de2362d3SmrgD' 6453de2362d3Smrg cat <<"EOF" 6454de2362d3Smrg} 6455de2362d3SmrgEOF 6456de2362d3Smrg} 6457de2362d3Smrg# end: func_emit_cwrapperexe_src 6458de2362d3Smrg 6459de2362d3Smrg# func_win32_import_lib_p ARG 6460de2362d3Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 6461de2362d3Smrgfunc_win32_import_lib_p () 6462de2362d3Smrg{ 64630d16fef4Smrg $debug_cmd 64640d16fef4Smrg 6465de2362d3Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6466de2362d3Smrg *import*) : ;; 6467de2362d3Smrg *) false ;; 6468de2362d3Smrg esac 6469de2362d3Smrg} 6470de2362d3Smrg 64710d16fef4Smrg# func_suncc_cstd_abi 64720d16fef4Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 64730d16fef4Smrg# Several compiler flags select an ABI that is incompatible with the 64740d16fef4Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 64750d16fef4Smrgfunc_suncc_cstd_abi () 64760d16fef4Smrg{ 64770d16fef4Smrg $debug_cmd 64780d16fef4Smrg 64790d16fef4Smrg case " $compile_command " in 64800d16fef4Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 64810d16fef4Smrg suncc_use_cstd_abi=no 64820d16fef4Smrg ;; 64830d16fef4Smrg *) 64840d16fef4Smrg suncc_use_cstd_abi=yes 64850d16fef4Smrg ;; 64860d16fef4Smrg esac 64870d16fef4Smrg} 64880d16fef4Smrg 6489de2362d3Smrg# func_mode_link arg... 6490de2362d3Smrgfunc_mode_link () 6491de2362d3Smrg{ 64920d16fef4Smrg $debug_cmd 64930d16fef4Smrg 6494de2362d3Smrg case $host in 6495de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6496de2362d3Smrg # It is impossible to link a dll without this setting, and 6497de2362d3Smrg # we shouldn't force the makefile maintainer to figure out 64980d16fef4Smrg # what system we are compiling for in order to pass an extra 6499de2362d3Smrg # flag for every libtool invocation. 6500de2362d3Smrg # allow_undefined=no 6501de2362d3Smrg 6502de2362d3Smrg # FIXME: Unfortunately, there are problems with the above when trying 65030d16fef4Smrg # to make a dll that has undefined symbols, in which case not 6504de2362d3Smrg # even a static library is built. For now, we need to specify 6505de2362d3Smrg # -no-undefined on the libtool link line when we can be certain 6506de2362d3Smrg # that all symbols are satisfied, otherwise we get a static library. 6507de2362d3Smrg allow_undefined=yes 6508de2362d3Smrg ;; 6509de2362d3Smrg *) 6510de2362d3Smrg allow_undefined=yes 6511de2362d3Smrg ;; 6512de2362d3Smrg esac 6513de2362d3Smrg libtool_args=$nonopt 6514de2362d3Smrg base_compile="$nonopt $@" 6515de2362d3Smrg compile_command=$nonopt 6516de2362d3Smrg finalize_command=$nonopt 6517de2362d3Smrg 6518de2362d3Smrg compile_rpath= 6519de2362d3Smrg finalize_rpath= 6520de2362d3Smrg compile_shlibpath= 6521de2362d3Smrg finalize_shlibpath= 6522de2362d3Smrg convenience= 6523de2362d3Smrg old_convenience= 6524de2362d3Smrg deplibs= 6525de2362d3Smrg old_deplibs= 6526de2362d3Smrg compiler_flags= 6527de2362d3Smrg linker_flags= 6528de2362d3Smrg dllsearchpath= 6529de2362d3Smrg lib_search_path=`pwd` 6530de2362d3Smrg inst_prefix_dir= 6531de2362d3Smrg new_inherited_linker_flags= 6532de2362d3Smrg 6533de2362d3Smrg avoid_version=no 6534de2362d3Smrg bindir= 6535de2362d3Smrg dlfiles= 6536de2362d3Smrg dlprefiles= 6537de2362d3Smrg dlself=no 6538de2362d3Smrg export_dynamic=no 6539de2362d3Smrg export_symbols= 6540de2362d3Smrg export_symbols_regex= 6541de2362d3Smrg generated= 6542de2362d3Smrg libobjs= 6543de2362d3Smrg ltlibs= 6544de2362d3Smrg module=no 6545de2362d3Smrg no_install=no 6546de2362d3Smrg objs= 65470d16fef4Smrg os2dllname= 6548de2362d3Smrg non_pic_objects= 6549de2362d3Smrg precious_files_regex= 6550de2362d3Smrg prefer_static_libs=no 65510d16fef4Smrg preload=false 6552de2362d3Smrg prev= 6553de2362d3Smrg prevarg= 6554de2362d3Smrg release= 6555de2362d3Smrg rpath= 6556de2362d3Smrg xrpath= 6557de2362d3Smrg perm_rpath= 6558de2362d3Smrg temp_rpath= 6559de2362d3Smrg thread_safe=no 6560de2362d3Smrg vinfo= 6561de2362d3Smrg vinfo_number=no 6562de2362d3Smrg weak_libs= 65630d16fef4Smrg single_module=$wl-single_module 6564de2362d3Smrg func_infer_tag $base_compile 6565de2362d3Smrg 6566de2362d3Smrg # We need to know -static, to get the right output filenames. 6567de2362d3Smrg for arg 6568de2362d3Smrg do 6569de2362d3Smrg case $arg in 6570de2362d3Smrg -shared) 65710d16fef4Smrg test yes != "$build_libtool_libs" \ 65720d16fef4Smrg && func_fatal_configuration "cannot build a shared library" 6573de2362d3Smrg build_old_libs=no 6574de2362d3Smrg break 6575de2362d3Smrg ;; 6576de2362d3Smrg -all-static | -static | -static-libtool-libs) 6577de2362d3Smrg case $arg in 6578de2362d3Smrg -all-static) 65790d16fef4Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6580de2362d3Smrg func_warning "complete static linking is impossible in this configuration" 6581de2362d3Smrg fi 6582de2362d3Smrg if test -n "$link_static_flag"; then 6583de2362d3Smrg dlopen_self=$dlopen_self_static 6584de2362d3Smrg fi 6585de2362d3Smrg prefer_static_libs=yes 6586de2362d3Smrg ;; 6587de2362d3Smrg -static) 6588de2362d3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6589de2362d3Smrg dlopen_self=$dlopen_self_static 6590de2362d3Smrg fi 6591de2362d3Smrg prefer_static_libs=built 6592de2362d3Smrg ;; 6593de2362d3Smrg -static-libtool-libs) 6594de2362d3Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6595de2362d3Smrg dlopen_self=$dlopen_self_static 6596de2362d3Smrg fi 6597de2362d3Smrg prefer_static_libs=yes 6598de2362d3Smrg ;; 6599de2362d3Smrg esac 6600de2362d3Smrg build_libtool_libs=no 6601de2362d3Smrg build_old_libs=yes 6602de2362d3Smrg break 6603de2362d3Smrg ;; 6604de2362d3Smrg esac 6605de2362d3Smrg done 6606de2362d3Smrg 6607de2362d3Smrg # See if our shared archives depend on static archives. 6608de2362d3Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6609de2362d3Smrg 6610de2362d3Smrg # Go through the arguments, transforming them on the way. 6611de2362d3Smrg while test "$#" -gt 0; do 66120d16fef4Smrg arg=$1 6613de2362d3Smrg shift 6614de2362d3Smrg func_quote_for_eval "$arg" 6615de2362d3Smrg qarg=$func_quote_for_eval_unquoted_result 6616de2362d3Smrg func_append libtool_args " $func_quote_for_eval_result" 6617de2362d3Smrg 6618de2362d3Smrg # If the previous option needs an argument, assign it. 6619de2362d3Smrg if test -n "$prev"; then 6620de2362d3Smrg case $prev in 6621de2362d3Smrg output) 6622de2362d3Smrg func_append compile_command " @OUTPUT@" 6623de2362d3Smrg func_append finalize_command " @OUTPUT@" 6624de2362d3Smrg ;; 6625de2362d3Smrg esac 6626de2362d3Smrg 6627de2362d3Smrg case $prev in 6628de2362d3Smrg bindir) 66290d16fef4Smrg bindir=$arg 6630de2362d3Smrg prev= 6631de2362d3Smrg continue 6632de2362d3Smrg ;; 6633de2362d3Smrg dlfiles|dlprefiles) 66340d16fef4Smrg $preload || { 6635de2362d3Smrg # Add the symbol object into the linking commands. 6636de2362d3Smrg func_append compile_command " @SYMFILE@" 6637de2362d3Smrg func_append finalize_command " @SYMFILE@" 66380d16fef4Smrg preload=: 66390d16fef4Smrg } 6640de2362d3Smrg case $arg in 6641de2362d3Smrg *.la | *.lo) ;; # We handle these cases below. 6642de2362d3Smrg force) 66430d16fef4Smrg if test no = "$dlself"; then 6644de2362d3Smrg dlself=needless 6645de2362d3Smrg export_dynamic=yes 6646de2362d3Smrg fi 6647de2362d3Smrg prev= 6648de2362d3Smrg continue 6649de2362d3Smrg ;; 6650de2362d3Smrg self) 66510d16fef4Smrg if test dlprefiles = "$prev"; then 6652de2362d3Smrg dlself=yes 66530d16fef4Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6654de2362d3Smrg dlself=yes 6655de2362d3Smrg else 6656de2362d3Smrg dlself=needless 6657de2362d3Smrg export_dynamic=yes 6658de2362d3Smrg fi 6659de2362d3Smrg prev= 6660de2362d3Smrg continue 6661de2362d3Smrg ;; 6662de2362d3Smrg *) 66630d16fef4Smrg if test dlfiles = "$prev"; then 6664de2362d3Smrg func_append dlfiles " $arg" 6665de2362d3Smrg else 6666de2362d3Smrg func_append dlprefiles " $arg" 6667de2362d3Smrg fi 6668de2362d3Smrg prev= 6669de2362d3Smrg continue 6670de2362d3Smrg ;; 6671de2362d3Smrg esac 6672de2362d3Smrg ;; 6673de2362d3Smrg expsyms) 66740d16fef4Smrg export_symbols=$arg 6675de2362d3Smrg test -f "$arg" \ 66760d16fef4Smrg || func_fatal_error "symbol file '$arg' does not exist" 6677de2362d3Smrg prev= 6678de2362d3Smrg continue 6679de2362d3Smrg ;; 6680de2362d3Smrg expsyms_regex) 66810d16fef4Smrg export_symbols_regex=$arg 6682de2362d3Smrg prev= 6683de2362d3Smrg continue 6684de2362d3Smrg ;; 6685de2362d3Smrg framework) 6686de2362d3Smrg case $host in 6687de2362d3Smrg *-*-darwin*) 6688de2362d3Smrg case "$deplibs " in 6689de2362d3Smrg *" $qarg.ltframework "*) ;; 6690de2362d3Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 6691de2362d3Smrg ;; 6692de2362d3Smrg esac 6693de2362d3Smrg ;; 6694de2362d3Smrg esac 6695de2362d3Smrg prev= 6696de2362d3Smrg continue 6697de2362d3Smrg ;; 6698de2362d3Smrg inst_prefix) 66990d16fef4Smrg inst_prefix_dir=$arg 67000d16fef4Smrg prev= 67010d16fef4Smrg continue 67020d16fef4Smrg ;; 67030d16fef4Smrg mllvm) 67040d16fef4Smrg # Clang does not use LLVM to link, so we can simply discard any 67050d16fef4Smrg # '-mllvm $arg' options when doing the link step. 6706de2362d3Smrg prev= 6707de2362d3Smrg continue 6708de2362d3Smrg ;; 6709de2362d3Smrg objectlist) 6710de2362d3Smrg if test -f "$arg"; then 6711de2362d3Smrg save_arg=$arg 6712de2362d3Smrg moreargs= 6713de2362d3Smrg for fil in `cat "$save_arg"` 6714de2362d3Smrg do 6715de2362d3Smrg# func_append moreargs " $fil" 6716de2362d3Smrg arg=$fil 6717de2362d3Smrg # A libtool-controlled object. 6718de2362d3Smrg 6719de2362d3Smrg # Check to see that this really is a libtool object. 6720de2362d3Smrg if func_lalib_unsafe_p "$arg"; then 6721de2362d3Smrg pic_object= 6722de2362d3Smrg non_pic_object= 6723de2362d3Smrg 6724de2362d3Smrg # Read the .lo file 6725de2362d3Smrg func_source "$arg" 6726de2362d3Smrg 6727de2362d3Smrg if test -z "$pic_object" || 6728de2362d3Smrg test -z "$non_pic_object" || 67290d16fef4Smrg test none = "$pic_object" && 67300d16fef4Smrg test none = "$non_pic_object"; then 67310d16fef4Smrg func_fatal_error "cannot find name of object for '$arg'" 6732de2362d3Smrg fi 6733de2362d3Smrg 6734de2362d3Smrg # Extract subdirectory from the argument. 6735de2362d3Smrg func_dirname "$arg" "/" "" 67360d16fef4Smrg xdir=$func_dirname_result 6737de2362d3Smrg 67380d16fef4Smrg if test none != "$pic_object"; then 6739de2362d3Smrg # Prepend the subdirectory the object is found in. 67400d16fef4Smrg pic_object=$xdir$pic_object 6741de2362d3Smrg 67420d16fef4Smrg if test dlfiles = "$prev"; then 67430d16fef4Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 6744de2362d3Smrg func_append dlfiles " $pic_object" 6745de2362d3Smrg prev= 6746de2362d3Smrg continue 6747de2362d3Smrg else 6748de2362d3Smrg # If libtool objects are unsupported, then we need to preload. 6749de2362d3Smrg prev=dlprefiles 6750de2362d3Smrg fi 6751de2362d3Smrg fi 6752de2362d3Smrg 6753de2362d3Smrg # CHECK ME: I think I busted this. -Ossama 67540d16fef4Smrg if test dlprefiles = "$prev"; then 6755de2362d3Smrg # Preload the old-style object. 6756de2362d3Smrg func_append dlprefiles " $pic_object" 6757de2362d3Smrg prev= 6758de2362d3Smrg fi 6759de2362d3Smrg 6760de2362d3Smrg # A PIC object. 6761de2362d3Smrg func_append libobjs " $pic_object" 67620d16fef4Smrg arg=$pic_object 6763de2362d3Smrg fi 6764de2362d3Smrg 6765de2362d3Smrg # Non-PIC object. 67660d16fef4Smrg if test none != "$non_pic_object"; then 6767de2362d3Smrg # Prepend the subdirectory the object is found in. 67680d16fef4Smrg non_pic_object=$xdir$non_pic_object 6769de2362d3Smrg 6770de2362d3Smrg # A standard non-PIC object 6771de2362d3Smrg func_append non_pic_objects " $non_pic_object" 67720d16fef4Smrg if test -z "$pic_object" || test none = "$pic_object"; then 67730d16fef4Smrg arg=$non_pic_object 6774de2362d3Smrg fi 6775de2362d3Smrg else 6776de2362d3Smrg # If the PIC object exists, use it instead. 6777de2362d3Smrg # $xdir was prepended to $pic_object above. 67780d16fef4Smrg non_pic_object=$pic_object 6779de2362d3Smrg func_append non_pic_objects " $non_pic_object" 6780de2362d3Smrg fi 6781de2362d3Smrg else 6782de2362d3Smrg # Only an error if not doing a dry-run. 6783de2362d3Smrg if $opt_dry_run; then 6784de2362d3Smrg # Extract subdirectory from the argument. 6785de2362d3Smrg func_dirname "$arg" "/" "" 67860d16fef4Smrg xdir=$func_dirname_result 6787de2362d3Smrg 6788de2362d3Smrg func_lo2o "$arg" 6789de2362d3Smrg pic_object=$xdir$objdir/$func_lo2o_result 6790de2362d3Smrg non_pic_object=$xdir$func_lo2o_result 6791de2362d3Smrg func_append libobjs " $pic_object" 6792de2362d3Smrg func_append non_pic_objects " $non_pic_object" 6793de2362d3Smrg else 67940d16fef4Smrg func_fatal_error "'$arg' is not a valid libtool object" 6795de2362d3Smrg fi 6796de2362d3Smrg fi 6797de2362d3Smrg done 6798de2362d3Smrg else 67990d16fef4Smrg func_fatal_error "link input file '$arg' does not exist" 6800de2362d3Smrg fi 6801de2362d3Smrg arg=$save_arg 6802de2362d3Smrg prev= 6803de2362d3Smrg continue 6804de2362d3Smrg ;; 68050d16fef4Smrg os2dllname) 68060d16fef4Smrg os2dllname=$arg 68070d16fef4Smrg prev= 68080d16fef4Smrg continue 68090d16fef4Smrg ;; 6810de2362d3Smrg precious_regex) 68110d16fef4Smrg precious_files_regex=$arg 6812de2362d3Smrg prev= 6813de2362d3Smrg continue 6814de2362d3Smrg ;; 6815de2362d3Smrg release) 68160d16fef4Smrg release=-$arg 6817de2362d3Smrg prev= 6818de2362d3Smrg continue 6819de2362d3Smrg ;; 6820de2362d3Smrg rpath | xrpath) 6821de2362d3Smrg # We need an absolute path. 6822de2362d3Smrg case $arg in 6823de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 6824de2362d3Smrg *) 6825de2362d3Smrg func_fatal_error "only absolute run-paths are allowed" 6826de2362d3Smrg ;; 6827de2362d3Smrg esac 68280d16fef4Smrg if test rpath = "$prev"; then 6829de2362d3Smrg case "$rpath " in 6830de2362d3Smrg *" $arg "*) ;; 6831de2362d3Smrg *) func_append rpath " $arg" ;; 6832de2362d3Smrg esac 6833de2362d3Smrg else 6834de2362d3Smrg case "$xrpath " in 6835de2362d3Smrg *" $arg "*) ;; 6836de2362d3Smrg *) func_append xrpath " $arg" ;; 6837de2362d3Smrg esac 6838de2362d3Smrg fi 6839de2362d3Smrg prev= 6840de2362d3Smrg continue 6841de2362d3Smrg ;; 6842de2362d3Smrg shrext) 68430d16fef4Smrg shrext_cmds=$arg 6844de2362d3Smrg prev= 6845de2362d3Smrg continue 6846de2362d3Smrg ;; 6847de2362d3Smrg weak) 6848de2362d3Smrg func_append weak_libs " $arg" 6849de2362d3Smrg prev= 6850de2362d3Smrg continue 6851de2362d3Smrg ;; 6852de2362d3Smrg xcclinker) 6853de2362d3Smrg func_append linker_flags " $qarg" 6854de2362d3Smrg func_append compiler_flags " $qarg" 6855de2362d3Smrg prev= 6856de2362d3Smrg func_append compile_command " $qarg" 6857de2362d3Smrg func_append finalize_command " $qarg" 6858de2362d3Smrg continue 6859de2362d3Smrg ;; 6860de2362d3Smrg xcompiler) 6861de2362d3Smrg func_append compiler_flags " $qarg" 6862de2362d3Smrg prev= 6863de2362d3Smrg func_append compile_command " $qarg" 6864de2362d3Smrg func_append finalize_command " $qarg" 6865de2362d3Smrg continue 6866de2362d3Smrg ;; 6867de2362d3Smrg xlinker) 6868de2362d3Smrg func_append linker_flags " $qarg" 6869de2362d3Smrg func_append compiler_flags " $wl$qarg" 6870de2362d3Smrg prev= 6871de2362d3Smrg func_append compile_command " $wl$qarg" 6872de2362d3Smrg func_append finalize_command " $wl$qarg" 6873de2362d3Smrg continue 6874de2362d3Smrg ;; 6875de2362d3Smrg *) 6876de2362d3Smrg eval "$prev=\"\$arg\"" 6877de2362d3Smrg prev= 6878de2362d3Smrg continue 6879de2362d3Smrg ;; 6880de2362d3Smrg esac 6881de2362d3Smrg fi # test -n "$prev" 6882de2362d3Smrg 68830d16fef4Smrg prevarg=$arg 6884de2362d3Smrg 6885de2362d3Smrg case $arg in 6886de2362d3Smrg -all-static) 6887de2362d3Smrg if test -n "$link_static_flag"; then 6888de2362d3Smrg # See comment for -static flag below, for more details. 6889de2362d3Smrg func_append compile_command " $link_static_flag" 6890de2362d3Smrg func_append finalize_command " $link_static_flag" 6891de2362d3Smrg fi 6892de2362d3Smrg continue 6893de2362d3Smrg ;; 6894de2362d3Smrg 6895de2362d3Smrg -allow-undefined) 6896de2362d3Smrg # FIXME: remove this flag sometime in the future. 68970d16fef4Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 6898de2362d3Smrg ;; 6899de2362d3Smrg 6900de2362d3Smrg -avoid-version) 6901de2362d3Smrg avoid_version=yes 6902de2362d3Smrg continue 6903de2362d3Smrg ;; 6904de2362d3Smrg 6905de2362d3Smrg -bindir) 6906de2362d3Smrg prev=bindir 6907de2362d3Smrg continue 6908de2362d3Smrg ;; 6909de2362d3Smrg 6910de2362d3Smrg -dlopen) 6911de2362d3Smrg prev=dlfiles 6912de2362d3Smrg continue 6913de2362d3Smrg ;; 6914de2362d3Smrg 6915de2362d3Smrg -dlpreopen) 6916de2362d3Smrg prev=dlprefiles 6917de2362d3Smrg continue 6918de2362d3Smrg ;; 6919de2362d3Smrg 6920de2362d3Smrg -export-dynamic) 6921de2362d3Smrg export_dynamic=yes 6922de2362d3Smrg continue 6923de2362d3Smrg ;; 6924de2362d3Smrg 6925de2362d3Smrg -export-symbols | -export-symbols-regex) 6926de2362d3Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 6927de2362d3Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 6928de2362d3Smrg fi 69290d16fef4Smrg if test X-export-symbols = "X$arg"; then 6930de2362d3Smrg prev=expsyms 6931de2362d3Smrg else 6932de2362d3Smrg prev=expsyms_regex 6933de2362d3Smrg fi 6934de2362d3Smrg continue 6935de2362d3Smrg ;; 6936de2362d3Smrg 6937de2362d3Smrg -framework) 6938de2362d3Smrg prev=framework 6939de2362d3Smrg continue 6940de2362d3Smrg ;; 6941de2362d3Smrg 6942de2362d3Smrg -inst-prefix-dir) 6943de2362d3Smrg prev=inst_prefix 6944de2362d3Smrg continue 6945de2362d3Smrg ;; 6946de2362d3Smrg 6947de2362d3Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 6948de2362d3Smrg # so, if we see these flags be careful not to treat them like -L 6949de2362d3Smrg -L[A-Z][A-Z]*:*) 6950de2362d3Smrg case $with_gcc/$host in 6951de2362d3Smrg no/*-*-irix* | /*-*-irix*) 6952de2362d3Smrg func_append compile_command " $arg" 6953de2362d3Smrg func_append finalize_command " $arg" 6954de2362d3Smrg ;; 6955de2362d3Smrg esac 6956de2362d3Smrg continue 6957de2362d3Smrg ;; 6958de2362d3Smrg 6959de2362d3Smrg -L*) 6960de2362d3Smrg func_stripname "-L" '' "$arg" 6961de2362d3Smrg if test -z "$func_stripname_result"; then 6962de2362d3Smrg if test "$#" -gt 0; then 69630d16fef4Smrg func_fatal_error "require no space between '-L' and '$1'" 6964de2362d3Smrg else 69650d16fef4Smrg func_fatal_error "need path for '-L' option" 6966de2362d3Smrg fi 6967de2362d3Smrg fi 6968de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 6969de2362d3Smrg dir=$func_resolve_sysroot_result 6970de2362d3Smrg # We need an absolute path. 6971de2362d3Smrg case $dir in 6972de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 6973de2362d3Smrg *) 6974de2362d3Smrg absdir=`cd "$dir" && pwd` 6975de2362d3Smrg test -z "$absdir" && \ 69760d16fef4Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 69770d16fef4Smrg dir=$absdir 6978de2362d3Smrg ;; 6979de2362d3Smrg esac 6980de2362d3Smrg case "$deplibs " in 6981de2362d3Smrg *" -L$dir "* | *" $arg "*) 6982de2362d3Smrg # Will only happen for absolute or sysroot arguments 6983de2362d3Smrg ;; 6984de2362d3Smrg *) 6985de2362d3Smrg # Preserve sysroot, but never include relative directories 6986de2362d3Smrg case $dir in 6987de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 6988de2362d3Smrg *) func_append deplibs " -L$dir" ;; 6989de2362d3Smrg esac 6990de2362d3Smrg func_append lib_search_path " $dir" 6991de2362d3Smrg ;; 6992de2362d3Smrg esac 6993de2362d3Smrg case $host in 6994de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6995de2362d3Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 6996de2362d3Smrg case :$dllsearchpath: in 6997de2362d3Smrg *":$dir:"*) ;; 6998de2362d3Smrg ::) dllsearchpath=$dir;; 6999de2362d3Smrg *) func_append dllsearchpath ":$dir";; 7000de2362d3Smrg esac 7001de2362d3Smrg case :$dllsearchpath: in 7002de2362d3Smrg *":$testbindir:"*) ;; 7003de2362d3Smrg ::) dllsearchpath=$testbindir;; 7004de2362d3Smrg *) func_append dllsearchpath ":$testbindir";; 7005de2362d3Smrg esac 7006de2362d3Smrg ;; 7007de2362d3Smrg esac 7008de2362d3Smrg continue 7009de2362d3Smrg ;; 7010de2362d3Smrg 7011de2362d3Smrg -l*) 70120d16fef4Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7013de2362d3Smrg case $host in 7014de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7015de2362d3Smrg # These systems don't actually have a C or math library (as such) 7016de2362d3Smrg continue 7017de2362d3Smrg ;; 7018de2362d3Smrg *-*-os2*) 7019de2362d3Smrg # These systems don't actually have a C library (as such) 70200d16fef4Smrg test X-lc = "X$arg" && continue 7021de2362d3Smrg ;; 70220d16fef4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7023de2362d3Smrg # Do not include libc due to us having libc/libc_r. 70240d16fef4Smrg test X-lc = "X$arg" && continue 7025de2362d3Smrg ;; 7026de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7027de2362d3Smrg # Rhapsody C and math libraries are in the System framework 7028de2362d3Smrg func_append deplibs " System.ltframework" 7029de2362d3Smrg continue 7030de2362d3Smrg ;; 7031de2362d3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7032de2362d3Smrg # Causes problems with __ctype 70330d16fef4Smrg test X-lc = "X$arg" && continue 7034de2362d3Smrg ;; 7035de2362d3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7036de2362d3Smrg # Compiler inserts libc in the correct place for threads to work 70370d16fef4Smrg test X-lc = "X$arg" && continue 7038de2362d3Smrg ;; 7039de2362d3Smrg esac 70400d16fef4Smrg elif test X-lc_r = "X$arg"; then 7041de2362d3Smrg case $host in 70420d16fef4Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7043de2362d3Smrg # Do not include libc_r directly, use -pthread flag. 7044de2362d3Smrg continue 7045de2362d3Smrg ;; 7046de2362d3Smrg esac 7047de2362d3Smrg fi 7048de2362d3Smrg func_append deplibs " $arg" 7049de2362d3Smrg continue 7050de2362d3Smrg ;; 7051de2362d3Smrg 70520d16fef4Smrg -mllvm) 70530d16fef4Smrg prev=mllvm 70540d16fef4Smrg continue 70550d16fef4Smrg ;; 70560d16fef4Smrg 7057de2362d3Smrg -module) 7058de2362d3Smrg module=yes 7059de2362d3Smrg continue 7060de2362d3Smrg ;; 7061de2362d3Smrg 7062de2362d3Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7063de2362d3Smrg # classes, name mangling, and exception handling. 7064de2362d3Smrg # Darwin uses the -arch flag to determine output architecture. 7065de2362d3Smrg -model|-arch|-isysroot|--sysroot) 7066de2362d3Smrg func_append compiler_flags " $arg" 7067de2362d3Smrg func_append compile_command " $arg" 7068de2362d3Smrg func_append finalize_command " $arg" 7069de2362d3Smrg prev=xcompiler 7070de2362d3Smrg continue 7071de2362d3Smrg ;; 7072de2362d3Smrg 7073de2362d3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7074de2362d3Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7075de2362d3Smrg func_append compiler_flags " $arg" 7076de2362d3Smrg func_append compile_command " $arg" 7077de2362d3Smrg func_append finalize_command " $arg" 7078de2362d3Smrg case "$new_inherited_linker_flags " in 7079de2362d3Smrg *" $arg "*) ;; 7080de2362d3Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 7081de2362d3Smrg esac 7082de2362d3Smrg continue 7083de2362d3Smrg ;; 7084de2362d3Smrg 7085de2362d3Smrg -multi_module) 70860d16fef4Smrg single_module=$wl-multi_module 7087de2362d3Smrg continue 7088de2362d3Smrg ;; 7089de2362d3Smrg 7090de2362d3Smrg -no-fast-install) 7091de2362d3Smrg fast_install=no 7092de2362d3Smrg continue 7093de2362d3Smrg ;; 7094de2362d3Smrg 7095de2362d3Smrg -no-install) 7096de2362d3Smrg case $host in 7097de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7098de2362d3Smrg # The PATH hackery in wrapper scripts is required on Windows 7099de2362d3Smrg # and Darwin in order for the loader to find any dlls it needs. 71000d16fef4Smrg func_warning "'-no-install' is ignored for $host" 71010d16fef4Smrg func_warning "assuming '-no-fast-install' instead" 7102de2362d3Smrg fast_install=no 7103de2362d3Smrg ;; 7104de2362d3Smrg *) no_install=yes ;; 7105de2362d3Smrg esac 7106de2362d3Smrg continue 7107de2362d3Smrg ;; 7108de2362d3Smrg 7109de2362d3Smrg -no-undefined) 7110de2362d3Smrg allow_undefined=no 7111de2362d3Smrg continue 7112de2362d3Smrg ;; 7113de2362d3Smrg 7114de2362d3Smrg -objectlist) 7115de2362d3Smrg prev=objectlist 7116de2362d3Smrg continue 7117de2362d3Smrg ;; 7118de2362d3Smrg 71190d16fef4Smrg -os2dllname) 71200d16fef4Smrg prev=os2dllname 71210d16fef4Smrg continue 71220d16fef4Smrg ;; 71230d16fef4Smrg 7124de2362d3Smrg -o) prev=output ;; 7125de2362d3Smrg 7126de2362d3Smrg -precious-files-regex) 7127de2362d3Smrg prev=precious_regex 7128de2362d3Smrg continue 7129de2362d3Smrg ;; 7130de2362d3Smrg 7131de2362d3Smrg -release) 7132de2362d3Smrg prev=release 7133de2362d3Smrg continue 7134de2362d3Smrg ;; 7135de2362d3Smrg 7136de2362d3Smrg -rpath) 7137de2362d3Smrg prev=rpath 7138de2362d3Smrg continue 7139de2362d3Smrg ;; 7140de2362d3Smrg 7141de2362d3Smrg -R) 7142de2362d3Smrg prev=xrpath 7143de2362d3Smrg continue 7144de2362d3Smrg ;; 7145de2362d3Smrg 7146de2362d3Smrg -R*) 7147de2362d3Smrg func_stripname '-R' '' "$arg" 7148de2362d3Smrg dir=$func_stripname_result 7149de2362d3Smrg # We need an absolute path. 7150de2362d3Smrg case $dir in 7151de2362d3Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7152de2362d3Smrg =*) 7153de2362d3Smrg func_stripname '=' '' "$dir" 7154de2362d3Smrg dir=$lt_sysroot$func_stripname_result 7155de2362d3Smrg ;; 7156de2362d3Smrg *) 7157de2362d3Smrg func_fatal_error "only absolute run-paths are allowed" 7158de2362d3Smrg ;; 7159de2362d3Smrg esac 7160de2362d3Smrg case "$xrpath " in 7161de2362d3Smrg *" $dir "*) ;; 7162de2362d3Smrg *) func_append xrpath " $dir" ;; 7163de2362d3Smrg esac 7164de2362d3Smrg continue 7165de2362d3Smrg ;; 7166de2362d3Smrg 7167de2362d3Smrg -shared) 7168de2362d3Smrg # The effects of -shared are defined in a previous loop. 7169de2362d3Smrg continue 7170de2362d3Smrg ;; 7171de2362d3Smrg 7172de2362d3Smrg -shrext) 7173de2362d3Smrg prev=shrext 7174de2362d3Smrg continue 7175de2362d3Smrg ;; 7176de2362d3Smrg 7177de2362d3Smrg -static | -static-libtool-libs) 7178de2362d3Smrg # The effects of -static are defined in a previous loop. 7179de2362d3Smrg # We used to do the same as -all-static on platforms that 7180de2362d3Smrg # didn't have a PIC flag, but the assumption that the effects 7181de2362d3Smrg # would be equivalent was wrong. It would break on at least 7182de2362d3Smrg # Digital Unix and AIX. 7183de2362d3Smrg continue 7184de2362d3Smrg ;; 7185de2362d3Smrg 7186de2362d3Smrg -thread-safe) 7187de2362d3Smrg thread_safe=yes 7188de2362d3Smrg continue 7189de2362d3Smrg ;; 7190de2362d3Smrg 7191de2362d3Smrg -version-info) 7192de2362d3Smrg prev=vinfo 7193de2362d3Smrg continue 7194de2362d3Smrg ;; 7195de2362d3Smrg 7196de2362d3Smrg -version-number) 7197de2362d3Smrg prev=vinfo 7198de2362d3Smrg vinfo_number=yes 7199de2362d3Smrg continue 7200de2362d3Smrg ;; 7201de2362d3Smrg 7202de2362d3Smrg -weak) 7203de2362d3Smrg prev=weak 7204de2362d3Smrg continue 7205de2362d3Smrg ;; 7206de2362d3Smrg 7207de2362d3Smrg -Wc,*) 7208de2362d3Smrg func_stripname '-Wc,' '' "$arg" 7209de2362d3Smrg args=$func_stripname_result 7210de2362d3Smrg arg= 72110d16fef4Smrg save_ifs=$IFS; IFS=, 7212de2362d3Smrg for flag in $args; do 72130d16fef4Smrg IFS=$save_ifs 7214de2362d3Smrg func_quote_for_eval "$flag" 7215de2362d3Smrg func_append arg " $func_quote_for_eval_result" 7216de2362d3Smrg func_append compiler_flags " $func_quote_for_eval_result" 7217de2362d3Smrg done 72180d16fef4Smrg IFS=$save_ifs 7219de2362d3Smrg func_stripname ' ' '' "$arg" 7220de2362d3Smrg arg=$func_stripname_result 7221de2362d3Smrg ;; 7222de2362d3Smrg 7223de2362d3Smrg -Wl,*) 7224de2362d3Smrg func_stripname '-Wl,' '' "$arg" 7225de2362d3Smrg args=$func_stripname_result 7226de2362d3Smrg arg= 72270d16fef4Smrg save_ifs=$IFS; IFS=, 7228de2362d3Smrg for flag in $args; do 72290d16fef4Smrg IFS=$save_ifs 7230de2362d3Smrg func_quote_for_eval "$flag" 7231de2362d3Smrg func_append arg " $wl$func_quote_for_eval_result" 7232de2362d3Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 7233de2362d3Smrg func_append linker_flags " $func_quote_for_eval_result" 7234de2362d3Smrg done 72350d16fef4Smrg IFS=$save_ifs 7236de2362d3Smrg func_stripname ' ' '' "$arg" 7237de2362d3Smrg arg=$func_stripname_result 7238de2362d3Smrg ;; 7239de2362d3Smrg 7240de2362d3Smrg -Xcompiler) 7241de2362d3Smrg prev=xcompiler 7242de2362d3Smrg continue 7243de2362d3Smrg ;; 7244de2362d3Smrg 7245de2362d3Smrg -Xlinker) 7246de2362d3Smrg prev=xlinker 7247de2362d3Smrg continue 7248de2362d3Smrg ;; 7249de2362d3Smrg 7250de2362d3Smrg -XCClinker) 7251de2362d3Smrg prev=xcclinker 7252de2362d3Smrg continue 7253de2362d3Smrg ;; 7254de2362d3Smrg 7255de2362d3Smrg # -msg_* for osf cc 7256de2362d3Smrg -msg_*) 7257de2362d3Smrg func_quote_for_eval "$arg" 72580d16fef4Smrg arg=$func_quote_for_eval_result 7259de2362d3Smrg ;; 7260de2362d3Smrg 7261de2362d3Smrg # Flags to be passed through unchanged, with rationale: 7262de2362d3Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7263de2362d3Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 7264de2362d3Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7265de2362d3Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 7266de2362d3Smrg # -q* compiler args for the IBM compiler 7267de2362d3Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7268de2362d3Smrg # -F/path path to uninstalled frameworks, gcc on darwin 7269de2362d3Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 72700d16fef4Smrg # -fstack-protector* stack protector flags for GCC 7271de2362d3Smrg # @file GCC response files 7272de2362d3Smrg # -tp=* Portland pgcc target processor selection 7273de2362d3Smrg # --sysroot=* for sysroot support 72740d16fef4Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 72750d16fef4Smrg # -specs=* GCC specs files 72760d16fef4Smrg # -stdlib=* select c++ std lib with clang 72770d16fef4Smrg # -fsanitize=* Clang/GCC memory and address sanitizer 7278de2362d3Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7279de2362d3Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 72800d16fef4Smrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 72810d16fef4Smrg -specs=*|-fsanitize=*) 7282de2362d3Smrg func_quote_for_eval "$arg" 72830d16fef4Smrg arg=$func_quote_for_eval_result 7284de2362d3Smrg func_append compile_command " $arg" 7285de2362d3Smrg func_append finalize_command " $arg" 7286de2362d3Smrg func_append compiler_flags " $arg" 7287de2362d3Smrg continue 7288de2362d3Smrg ;; 7289de2362d3Smrg 72900d16fef4Smrg -Z*) 72910d16fef4Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 72920d16fef4Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 72930d16fef4Smrg compiler_flags="$compiler_flags $arg" 72940d16fef4Smrg func_append compile_command " $arg" 72950d16fef4Smrg func_append finalize_command " $arg" 72960d16fef4Smrg case $arg in 72970d16fef4Smrg -Zlinker | -Zstack) 72980d16fef4Smrg prev=xcompiler 72990d16fef4Smrg ;; 73000d16fef4Smrg esac 73010d16fef4Smrg continue 73020d16fef4Smrg else 73030d16fef4Smrg # Otherwise treat like 'Some other compiler flag' below 73040d16fef4Smrg func_quote_for_eval "$arg" 73050d16fef4Smrg arg=$func_quote_for_eval_result 73060d16fef4Smrg fi 73070d16fef4Smrg ;; 73080d16fef4Smrg 7309de2362d3Smrg # Some other compiler flag. 7310de2362d3Smrg -* | +*) 7311de2362d3Smrg func_quote_for_eval "$arg" 73120d16fef4Smrg arg=$func_quote_for_eval_result 7313de2362d3Smrg ;; 7314de2362d3Smrg 7315de2362d3Smrg *.$objext) 7316de2362d3Smrg # A standard object. 7317de2362d3Smrg func_append objs " $arg" 7318de2362d3Smrg ;; 7319de2362d3Smrg 7320de2362d3Smrg *.lo) 7321de2362d3Smrg # A libtool-controlled object. 7322de2362d3Smrg 7323de2362d3Smrg # Check to see that this really is a libtool object. 7324de2362d3Smrg if func_lalib_unsafe_p "$arg"; then 7325de2362d3Smrg pic_object= 7326de2362d3Smrg non_pic_object= 7327de2362d3Smrg 7328de2362d3Smrg # Read the .lo file 7329de2362d3Smrg func_source "$arg" 7330de2362d3Smrg 7331de2362d3Smrg if test -z "$pic_object" || 7332de2362d3Smrg test -z "$non_pic_object" || 73330d16fef4Smrg test none = "$pic_object" && 73340d16fef4Smrg test none = "$non_pic_object"; then 73350d16fef4Smrg func_fatal_error "cannot find name of object for '$arg'" 7336de2362d3Smrg fi 7337de2362d3Smrg 7338de2362d3Smrg # Extract subdirectory from the argument. 7339de2362d3Smrg func_dirname "$arg" "/" "" 73400d16fef4Smrg xdir=$func_dirname_result 7341de2362d3Smrg 73420d16fef4Smrg test none = "$pic_object" || { 7343de2362d3Smrg # Prepend the subdirectory the object is found in. 73440d16fef4Smrg pic_object=$xdir$pic_object 7345de2362d3Smrg 73460d16fef4Smrg if test dlfiles = "$prev"; then 73470d16fef4Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7348de2362d3Smrg func_append dlfiles " $pic_object" 7349de2362d3Smrg prev= 7350de2362d3Smrg continue 7351de2362d3Smrg else 7352de2362d3Smrg # If libtool objects are unsupported, then we need to preload. 7353de2362d3Smrg prev=dlprefiles 7354de2362d3Smrg fi 7355de2362d3Smrg fi 7356de2362d3Smrg 7357de2362d3Smrg # CHECK ME: I think I busted this. -Ossama 73580d16fef4Smrg if test dlprefiles = "$prev"; then 7359de2362d3Smrg # Preload the old-style object. 7360de2362d3Smrg func_append dlprefiles " $pic_object" 7361de2362d3Smrg prev= 7362de2362d3Smrg fi 7363de2362d3Smrg 7364de2362d3Smrg # A PIC object. 7365de2362d3Smrg func_append libobjs " $pic_object" 73660d16fef4Smrg arg=$pic_object 73670d16fef4Smrg } 7368de2362d3Smrg 7369de2362d3Smrg # Non-PIC object. 73700d16fef4Smrg if test none != "$non_pic_object"; then 7371de2362d3Smrg # Prepend the subdirectory the object is found in. 73720d16fef4Smrg non_pic_object=$xdir$non_pic_object 7373de2362d3Smrg 7374de2362d3Smrg # A standard non-PIC object 7375de2362d3Smrg func_append non_pic_objects " $non_pic_object" 73760d16fef4Smrg if test -z "$pic_object" || test none = "$pic_object"; then 73770d16fef4Smrg arg=$non_pic_object 7378de2362d3Smrg fi 7379de2362d3Smrg else 7380de2362d3Smrg # If the PIC object exists, use it instead. 7381de2362d3Smrg # $xdir was prepended to $pic_object above. 73820d16fef4Smrg non_pic_object=$pic_object 7383de2362d3Smrg func_append non_pic_objects " $non_pic_object" 7384de2362d3Smrg fi 7385de2362d3Smrg else 7386de2362d3Smrg # Only an error if not doing a dry-run. 7387de2362d3Smrg if $opt_dry_run; then 7388de2362d3Smrg # Extract subdirectory from the argument. 7389de2362d3Smrg func_dirname "$arg" "/" "" 73900d16fef4Smrg xdir=$func_dirname_result 7391de2362d3Smrg 7392de2362d3Smrg func_lo2o "$arg" 7393de2362d3Smrg pic_object=$xdir$objdir/$func_lo2o_result 7394de2362d3Smrg non_pic_object=$xdir$func_lo2o_result 7395de2362d3Smrg func_append libobjs " $pic_object" 7396de2362d3Smrg func_append non_pic_objects " $non_pic_object" 7397de2362d3Smrg else 73980d16fef4Smrg func_fatal_error "'$arg' is not a valid libtool object" 7399de2362d3Smrg fi 7400de2362d3Smrg fi 7401de2362d3Smrg ;; 7402de2362d3Smrg 7403de2362d3Smrg *.$libext) 7404de2362d3Smrg # An archive. 7405de2362d3Smrg func_append deplibs " $arg" 7406de2362d3Smrg func_append old_deplibs " $arg" 7407de2362d3Smrg continue 7408de2362d3Smrg ;; 7409de2362d3Smrg 7410de2362d3Smrg *.la) 7411de2362d3Smrg # A libtool-controlled library. 7412de2362d3Smrg 7413de2362d3Smrg func_resolve_sysroot "$arg" 74140d16fef4Smrg if test dlfiles = "$prev"; then 7415de2362d3Smrg # This library was specified with -dlopen. 7416de2362d3Smrg func_append dlfiles " $func_resolve_sysroot_result" 7417de2362d3Smrg prev= 74180d16fef4Smrg elif test dlprefiles = "$prev"; then 7419de2362d3Smrg # The library was specified with -dlpreopen. 7420de2362d3Smrg func_append dlprefiles " $func_resolve_sysroot_result" 7421de2362d3Smrg prev= 7422de2362d3Smrg else 7423de2362d3Smrg func_append deplibs " $func_resolve_sysroot_result" 7424de2362d3Smrg fi 7425de2362d3Smrg continue 7426de2362d3Smrg ;; 7427de2362d3Smrg 7428de2362d3Smrg # Some other compiler argument. 7429de2362d3Smrg *) 7430de2362d3Smrg # Unknown arguments in both finalize_command and compile_command need 7431de2362d3Smrg # to be aesthetically quoted because they are evaled later. 7432de2362d3Smrg func_quote_for_eval "$arg" 74330d16fef4Smrg arg=$func_quote_for_eval_result 7434de2362d3Smrg ;; 7435de2362d3Smrg esac # arg 7436de2362d3Smrg 7437de2362d3Smrg # Now actually substitute the argument into the commands. 7438de2362d3Smrg if test -n "$arg"; then 7439de2362d3Smrg func_append compile_command " $arg" 7440de2362d3Smrg func_append finalize_command " $arg" 7441de2362d3Smrg fi 7442de2362d3Smrg done # argument parsing loop 7443de2362d3Smrg 7444de2362d3Smrg test -n "$prev" && \ 74450d16fef4Smrg func_fatal_help "the '$prevarg' option requires an argument" 7446de2362d3Smrg 74470d16fef4Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7448de2362d3Smrg eval arg=\"$export_dynamic_flag_spec\" 7449de2362d3Smrg func_append compile_command " $arg" 7450de2362d3Smrg func_append finalize_command " $arg" 7451de2362d3Smrg fi 7452de2362d3Smrg 7453de2362d3Smrg oldlibs= 7454de2362d3Smrg # calculate the name of the file, without its directory 7455de2362d3Smrg func_basename "$output" 74560d16fef4Smrg outputname=$func_basename_result 74570d16fef4Smrg libobjs_save=$libobjs 7458de2362d3Smrg 7459de2362d3Smrg if test -n "$shlibpath_var"; then 7460de2362d3Smrg # get the directories listed in $shlibpath_var 74610d16fef4Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7462de2362d3Smrg else 7463de2362d3Smrg shlib_search_path= 7464de2362d3Smrg fi 7465de2362d3Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7466de2362d3Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7467de2362d3Smrg 74680d16fef4Smrg # Definition is injected by LT_CONFIG during libtool generation. 74690d16fef4Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 74700d16fef4Smrg 7471de2362d3Smrg func_dirname "$output" "/" "" 74720d16fef4Smrg output_objdir=$func_dirname_result$objdir 7473de2362d3Smrg func_to_tool_file "$output_objdir/" 7474de2362d3Smrg tool_output_objdir=$func_to_tool_file_result 7475de2362d3Smrg # Create the object directory. 7476de2362d3Smrg func_mkdir_p "$output_objdir" 7477de2362d3Smrg 7478de2362d3Smrg # Determine the type of output 7479de2362d3Smrg case $output in 7480de2362d3Smrg "") 7481de2362d3Smrg func_fatal_help "you must specify an output file" 7482de2362d3Smrg ;; 7483de2362d3Smrg *.$libext) linkmode=oldlib ;; 7484de2362d3Smrg *.lo | *.$objext) linkmode=obj ;; 7485de2362d3Smrg *.la) linkmode=lib ;; 7486de2362d3Smrg *) linkmode=prog ;; # Anything else should be a program. 7487de2362d3Smrg esac 7488de2362d3Smrg 7489de2362d3Smrg specialdeplibs= 7490de2362d3Smrg 7491de2362d3Smrg libs= 7492de2362d3Smrg # Find all interdependent deplibs by searching for libraries 7493de2362d3Smrg # that are linked more than once (e.g. -la -lb -la) 7494de2362d3Smrg for deplib in $deplibs; do 74950d16fef4Smrg if $opt_preserve_dup_deps; then 7496de2362d3Smrg case "$libs " in 7497de2362d3Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7498de2362d3Smrg esac 7499de2362d3Smrg fi 7500de2362d3Smrg func_append libs " $deplib" 7501de2362d3Smrg done 7502de2362d3Smrg 75030d16fef4Smrg if test lib = "$linkmode"; then 7504de2362d3Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7505de2362d3Smrg 7506de2362d3Smrg # Compute libraries that are listed more than once in $predeps 7507de2362d3Smrg # $postdeps and mark them as special (i.e., whose duplicates are 7508de2362d3Smrg # not to be eliminated). 7509de2362d3Smrg pre_post_deps= 7510de2362d3Smrg if $opt_duplicate_compiler_generated_deps; then 7511de2362d3Smrg for pre_post_dep in $predeps $postdeps; do 7512de2362d3Smrg case "$pre_post_deps " in 7513de2362d3Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7514de2362d3Smrg esac 7515de2362d3Smrg func_append pre_post_deps " $pre_post_dep" 7516de2362d3Smrg done 7517de2362d3Smrg fi 7518de2362d3Smrg pre_post_deps= 7519de2362d3Smrg fi 7520de2362d3Smrg 7521de2362d3Smrg deplibs= 7522de2362d3Smrg newdependency_libs= 7523de2362d3Smrg newlib_search_path= 7524de2362d3Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 7525de2362d3Smrg notinst_deplibs= # not-installed libtool libraries 7526de2362d3Smrg notinst_path= # paths that contain not-installed libtool libraries 7527de2362d3Smrg 7528de2362d3Smrg case $linkmode in 7529de2362d3Smrg lib) 7530de2362d3Smrg passes="conv dlpreopen link" 7531de2362d3Smrg for file in $dlfiles $dlprefiles; do 7532de2362d3Smrg case $file in 7533de2362d3Smrg *.la) ;; 7534de2362d3Smrg *) 75350d16fef4Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7536de2362d3Smrg ;; 7537de2362d3Smrg esac 7538de2362d3Smrg done 7539de2362d3Smrg ;; 7540de2362d3Smrg prog) 7541de2362d3Smrg compile_deplibs= 7542de2362d3Smrg finalize_deplibs= 75430d16fef4Smrg alldeplibs=false 7544de2362d3Smrg newdlfiles= 7545de2362d3Smrg newdlprefiles= 7546de2362d3Smrg passes="conv scan dlopen dlpreopen link" 7547de2362d3Smrg ;; 7548de2362d3Smrg *) passes="conv" 7549de2362d3Smrg ;; 7550de2362d3Smrg esac 7551de2362d3Smrg 7552de2362d3Smrg for pass in $passes; do 7553de2362d3Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 7554de2362d3Smrg # so that -L comes before libs that need it for instance... 75550d16fef4Smrg if test lib,link = "$linkmode,$pass"; then 7556de2362d3Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 7557de2362d3Smrg ## order, and fix it there properly 7558de2362d3Smrg tmp_deplibs= 7559de2362d3Smrg for deplib in $deplibs; do 7560de2362d3Smrg tmp_deplibs="$deplib $tmp_deplibs" 7561de2362d3Smrg done 75620d16fef4Smrg deplibs=$tmp_deplibs 7563de2362d3Smrg fi 7564de2362d3Smrg 75650d16fef4Smrg if test lib,link = "$linkmode,$pass" || 75660d16fef4Smrg test prog,scan = "$linkmode,$pass"; then 75670d16fef4Smrg libs=$deplibs 7568de2362d3Smrg deplibs= 7569de2362d3Smrg fi 75700d16fef4Smrg if test prog = "$linkmode"; then 7571de2362d3Smrg case $pass in 75720d16fef4Smrg dlopen) libs=$dlfiles ;; 75730d16fef4Smrg dlpreopen) libs=$dlprefiles ;; 75740d16fef4Smrg link) 75750d16fef4Smrg libs="$deplibs %DEPLIBS%" 75760d16fef4Smrg test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" 75770d16fef4Smrg ;; 7578de2362d3Smrg esac 7579de2362d3Smrg fi 75800d16fef4Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 7581de2362d3Smrg # Collect and forward deplibs of preopened libtool libs 7582de2362d3Smrg for lib in $dlprefiles; do 7583de2362d3Smrg # Ignore non-libtool-libs 7584de2362d3Smrg dependency_libs= 7585de2362d3Smrg func_resolve_sysroot "$lib" 7586de2362d3Smrg case $lib in 7587de2362d3Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 7588de2362d3Smrg esac 7589de2362d3Smrg 7590de2362d3Smrg # Collect preopened libtool deplibs, except any this library 7591de2362d3Smrg # has declared as weak libs 7592de2362d3Smrg for deplib in $dependency_libs; do 7593de2362d3Smrg func_basename "$deplib" 7594de2362d3Smrg deplib_base=$func_basename_result 7595de2362d3Smrg case " $weak_libs " in 7596de2362d3Smrg *" $deplib_base "*) ;; 7597de2362d3Smrg *) func_append deplibs " $deplib" ;; 7598de2362d3Smrg esac 7599de2362d3Smrg done 7600de2362d3Smrg done 76010d16fef4Smrg libs=$dlprefiles 7602de2362d3Smrg fi 76030d16fef4Smrg if test dlopen = "$pass"; then 7604de2362d3Smrg # Collect dlpreopened libraries 76050d16fef4Smrg save_deplibs=$deplibs 7606de2362d3Smrg deplibs= 7607de2362d3Smrg fi 7608de2362d3Smrg 7609de2362d3Smrg for deplib in $libs; do 7610de2362d3Smrg lib= 76110d16fef4Smrg found=false 7612de2362d3Smrg case $deplib in 7613de2362d3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7614de2362d3Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 76150d16fef4Smrg if test prog,link = "$linkmode,$pass"; then 7616de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 7617de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 7618de2362d3Smrg else 7619de2362d3Smrg func_append compiler_flags " $deplib" 76200d16fef4Smrg if test lib = "$linkmode"; then 7621de2362d3Smrg case "$new_inherited_linker_flags " in 7622de2362d3Smrg *" $deplib "*) ;; 7623de2362d3Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7624de2362d3Smrg esac 7625de2362d3Smrg fi 7626de2362d3Smrg fi 7627de2362d3Smrg continue 7628de2362d3Smrg ;; 7629de2362d3Smrg -l*) 76300d16fef4Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 76310d16fef4Smrg func_warning "'-l' is ignored for archives/objects" 7632de2362d3Smrg continue 7633de2362d3Smrg fi 7634de2362d3Smrg func_stripname '-l' '' "$deplib" 7635de2362d3Smrg name=$func_stripname_result 76360d16fef4Smrg if test lib = "$linkmode"; then 7637de2362d3Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7638de2362d3Smrg else 7639de2362d3Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7640de2362d3Smrg fi 7641de2362d3Smrg for searchdir in $searchdirs; do 7642de2362d3Smrg for search_ext in .la $std_shrext .so .a; do 7643de2362d3Smrg # Search the libtool library 76440d16fef4Smrg lib=$searchdir/lib$name$search_ext 7645de2362d3Smrg if test -f "$lib"; then 76460d16fef4Smrg if test .la = "$search_ext"; then 76470d16fef4Smrg found=: 7648de2362d3Smrg else 76490d16fef4Smrg found=false 7650de2362d3Smrg fi 7651de2362d3Smrg break 2 7652de2362d3Smrg fi 7653de2362d3Smrg done 7654de2362d3Smrg done 76550d16fef4Smrg if $found; then 76560d16fef4Smrg # deplib is a libtool library 7657de2362d3Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7658de2362d3Smrg # We need to do some special things here, and not later. 76590d16fef4Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7660de2362d3Smrg case " $predeps $postdeps " in 7661de2362d3Smrg *" $deplib "*) 7662de2362d3Smrg if func_lalib_p "$lib"; then 7663de2362d3Smrg library_names= 7664de2362d3Smrg old_library= 7665de2362d3Smrg func_source "$lib" 7666de2362d3Smrg for l in $old_library $library_names; do 76670d16fef4Smrg ll=$l 7668de2362d3Smrg done 76690d16fef4Smrg if test "X$ll" = "X$old_library"; then # only static version available 76700d16fef4Smrg found=false 7671de2362d3Smrg func_dirname "$lib" "" "." 76720d16fef4Smrg ladir=$func_dirname_result 7673de2362d3Smrg lib=$ladir/$old_library 76740d16fef4Smrg if test prog,link = "$linkmode,$pass"; then 7675de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 7676de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 7677de2362d3Smrg else 7678de2362d3Smrg deplibs="$deplib $deplibs" 76790d16fef4Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7680de2362d3Smrg fi 7681de2362d3Smrg continue 7682de2362d3Smrg fi 7683de2362d3Smrg fi 7684de2362d3Smrg ;; 7685de2362d3Smrg *) ;; 7686de2362d3Smrg esac 7687de2362d3Smrg fi 76880d16fef4Smrg else 76890d16fef4Smrg # deplib doesn't seem to be a libtool library 76900d16fef4Smrg if test prog,link = "$linkmode,$pass"; then 76910d16fef4Smrg compile_deplibs="$deplib $compile_deplibs" 76920d16fef4Smrg finalize_deplibs="$deplib $finalize_deplibs" 76930d16fef4Smrg else 76940d16fef4Smrg deplibs="$deplib $deplibs" 76950d16fef4Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 76960d16fef4Smrg fi 76970d16fef4Smrg continue 7698de2362d3Smrg fi 7699de2362d3Smrg ;; # -l 7700de2362d3Smrg *.ltframework) 77010d16fef4Smrg if test prog,link = "$linkmode,$pass"; then 7702de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 7703de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 7704de2362d3Smrg else 7705de2362d3Smrg deplibs="$deplib $deplibs" 77060d16fef4Smrg if test lib = "$linkmode"; then 7707de2362d3Smrg case "$new_inherited_linker_flags " in 7708de2362d3Smrg *" $deplib "*) ;; 7709de2362d3Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7710de2362d3Smrg esac 7711de2362d3Smrg fi 7712de2362d3Smrg fi 7713de2362d3Smrg continue 7714de2362d3Smrg ;; 7715de2362d3Smrg -L*) 7716de2362d3Smrg case $linkmode in 7717de2362d3Smrg lib) 7718de2362d3Smrg deplibs="$deplib $deplibs" 77190d16fef4Smrg test conv = "$pass" && continue 7720de2362d3Smrg newdependency_libs="$deplib $newdependency_libs" 7721de2362d3Smrg func_stripname '-L' '' "$deplib" 7722de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 7723de2362d3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 7724de2362d3Smrg ;; 7725de2362d3Smrg prog) 77260d16fef4Smrg if test conv = "$pass"; then 7727de2362d3Smrg deplibs="$deplib $deplibs" 7728de2362d3Smrg continue 7729de2362d3Smrg fi 77300d16fef4Smrg if test scan = "$pass"; then 7731de2362d3Smrg deplibs="$deplib $deplibs" 7732de2362d3Smrg else 7733de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 7734de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 7735de2362d3Smrg fi 7736de2362d3Smrg func_stripname '-L' '' "$deplib" 7737de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 7738de2362d3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 7739de2362d3Smrg ;; 7740de2362d3Smrg *) 77410d16fef4Smrg func_warning "'-L' is ignored for archives/objects" 7742de2362d3Smrg ;; 7743de2362d3Smrg esac # linkmode 7744de2362d3Smrg continue 7745de2362d3Smrg ;; # -L 7746de2362d3Smrg -R*) 77470d16fef4Smrg if test link = "$pass"; then 7748de2362d3Smrg func_stripname '-R' '' "$deplib" 7749de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 7750de2362d3Smrg dir=$func_resolve_sysroot_result 7751de2362d3Smrg # Make sure the xrpath contains only unique directories. 7752de2362d3Smrg case "$xrpath " in 7753de2362d3Smrg *" $dir "*) ;; 7754de2362d3Smrg *) func_append xrpath " $dir" ;; 7755de2362d3Smrg esac 7756de2362d3Smrg fi 7757de2362d3Smrg deplibs="$deplib $deplibs" 7758de2362d3Smrg continue 7759de2362d3Smrg ;; 7760de2362d3Smrg *.la) 7761de2362d3Smrg func_resolve_sysroot "$deplib" 7762de2362d3Smrg lib=$func_resolve_sysroot_result 7763de2362d3Smrg ;; 7764de2362d3Smrg *.$libext) 77650d16fef4Smrg if test conv = "$pass"; then 7766de2362d3Smrg deplibs="$deplib $deplibs" 7767de2362d3Smrg continue 7768de2362d3Smrg fi 7769de2362d3Smrg case $linkmode in 7770de2362d3Smrg lib) 7771de2362d3Smrg # Linking convenience modules into shared libraries is allowed, 7772de2362d3Smrg # but linking other static libraries is non-portable. 7773de2362d3Smrg case " $dlpreconveniencelibs " in 7774de2362d3Smrg *" $deplib "*) ;; 7775de2362d3Smrg *) 77760d16fef4Smrg valid_a_lib=false 7777de2362d3Smrg case $deplibs_check_method in 7778de2362d3Smrg match_pattern*) 7779de2362d3Smrg set dummy $deplibs_check_method; shift 7780de2362d3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7781de2362d3Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7782de2362d3Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 77830d16fef4Smrg valid_a_lib=: 7784de2362d3Smrg fi 7785de2362d3Smrg ;; 7786de2362d3Smrg pass_all) 77870d16fef4Smrg valid_a_lib=: 7788de2362d3Smrg ;; 7789de2362d3Smrg esac 77900d16fef4Smrg if $valid_a_lib; then 77910d16fef4Smrg echo 77920d16fef4Smrg $ECHO "*** Warning: Linking the shared library $output against the" 77930d16fef4Smrg $ECHO "*** static library $deplib is not portable!" 77940d16fef4Smrg deplibs="$deplib $deplibs" 77950d16fef4Smrg else 7796de2362d3Smrg echo 7797de2362d3Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 7798de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 7799de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 7800de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 7801de2362d3Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 7802de2362d3Smrg echo "*** that it is just a static archive that I should not use here." 7803de2362d3Smrg fi 7804de2362d3Smrg ;; 7805de2362d3Smrg esac 7806de2362d3Smrg continue 7807de2362d3Smrg ;; 7808de2362d3Smrg prog) 78090d16fef4Smrg if test link != "$pass"; then 7810de2362d3Smrg deplibs="$deplib $deplibs" 7811de2362d3Smrg else 7812de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 7813de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 7814de2362d3Smrg fi 7815de2362d3Smrg continue 7816de2362d3Smrg ;; 7817de2362d3Smrg esac # linkmode 7818de2362d3Smrg ;; # *.$libext 7819de2362d3Smrg *.lo | *.$objext) 78200d16fef4Smrg if test conv = "$pass"; then 7821de2362d3Smrg deplibs="$deplib $deplibs" 78220d16fef4Smrg elif test prog = "$linkmode"; then 78230d16fef4Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 7824de2362d3Smrg # If there is no dlopen support or we're linking statically, 7825de2362d3Smrg # we need to preload. 7826de2362d3Smrg func_append newdlprefiles " $deplib" 7827de2362d3Smrg compile_deplibs="$deplib $compile_deplibs" 7828de2362d3Smrg finalize_deplibs="$deplib $finalize_deplibs" 7829de2362d3Smrg else 7830de2362d3Smrg func_append newdlfiles " $deplib" 7831de2362d3Smrg fi 7832de2362d3Smrg fi 7833de2362d3Smrg continue 7834de2362d3Smrg ;; 7835de2362d3Smrg %DEPLIBS%) 78360d16fef4Smrg alldeplibs=: 7837de2362d3Smrg continue 7838de2362d3Smrg ;; 7839de2362d3Smrg esac # case $deplib 7840de2362d3Smrg 78410d16fef4Smrg $found || test -f "$lib" \ 78420d16fef4Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 7843de2362d3Smrg 7844de2362d3Smrg # Check to see that this really is a libtool archive. 7845de2362d3Smrg func_lalib_unsafe_p "$lib" \ 78460d16fef4Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 7847de2362d3Smrg 7848de2362d3Smrg func_dirname "$lib" "" "." 78490d16fef4Smrg ladir=$func_dirname_result 7850de2362d3Smrg 7851de2362d3Smrg dlname= 7852de2362d3Smrg dlopen= 7853de2362d3Smrg dlpreopen= 7854de2362d3Smrg libdir= 7855de2362d3Smrg library_names= 7856de2362d3Smrg old_library= 7857de2362d3Smrg inherited_linker_flags= 7858de2362d3Smrg # If the library was installed with an old release of libtool, 7859de2362d3Smrg # it will not redefine variables installed, or shouldnotlink 7860de2362d3Smrg installed=yes 7861de2362d3Smrg shouldnotlink=no 7862de2362d3Smrg avoidtemprpath= 7863de2362d3Smrg 7864de2362d3Smrg 7865de2362d3Smrg # Read the .la file 7866de2362d3Smrg func_source "$lib" 7867de2362d3Smrg 7868de2362d3Smrg # Convert "-framework foo" to "foo.ltframework" 7869de2362d3Smrg if test -n "$inherited_linker_flags"; then 7870de2362d3Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 7871de2362d3Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 7872de2362d3Smrg case " $new_inherited_linker_flags " in 7873de2362d3Smrg *" $tmp_inherited_linker_flag "*) ;; 7874de2362d3Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 7875de2362d3Smrg esac 7876de2362d3Smrg done 7877de2362d3Smrg fi 7878de2362d3Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 78790d16fef4Smrg if test lib,link = "$linkmode,$pass" || 78800d16fef4Smrg test prog,scan = "$linkmode,$pass" || 78810d16fef4Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 7882de2362d3Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 7883de2362d3Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 7884de2362d3Smrg fi 7885de2362d3Smrg 78860d16fef4Smrg if test conv = "$pass"; then 7887de2362d3Smrg # Only check for convenience libraries 7888de2362d3Smrg deplibs="$lib $deplibs" 7889de2362d3Smrg if test -z "$libdir"; then 7890de2362d3Smrg if test -z "$old_library"; then 78910d16fef4Smrg func_fatal_error "cannot find name of link library for '$lib'" 7892de2362d3Smrg fi 7893de2362d3Smrg # It is a libtool convenience library, so add in its objects. 7894de2362d3Smrg func_append convenience " $ladir/$objdir/$old_library" 7895de2362d3Smrg func_append old_convenience " $ladir/$objdir/$old_library" 78960d16fef4Smrg tmp_libs= 78970d16fef4Smrg for deplib in $dependency_libs; do 78980d16fef4Smrg deplibs="$deplib $deplibs" 78990d16fef4Smrg if $opt_preserve_dup_deps; then 79000d16fef4Smrg case "$tmp_libs " in 79010d16fef4Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 79020d16fef4Smrg esac 79030d16fef4Smrg fi 79040d16fef4Smrg func_append tmp_libs " $deplib" 79050d16fef4Smrg done 79060d16fef4Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 79070d16fef4Smrg func_fatal_error "'$lib' is not a convenience library" 7908de2362d3Smrg fi 7909de2362d3Smrg continue 7910de2362d3Smrg fi # $pass = conv 7911de2362d3Smrg 7912de2362d3Smrg 7913de2362d3Smrg # Get the name of the library we link against. 7914de2362d3Smrg linklib= 7915de2362d3Smrg if test -n "$old_library" && 79160d16fef4Smrg { test yes = "$prefer_static_libs" || 79170d16fef4Smrg test built,no = "$prefer_static_libs,$installed"; }; then 7918de2362d3Smrg linklib=$old_library 7919de2362d3Smrg else 7920de2362d3Smrg for l in $old_library $library_names; do 79210d16fef4Smrg linklib=$l 7922de2362d3Smrg done 7923de2362d3Smrg fi 7924de2362d3Smrg if test -z "$linklib"; then 79250d16fef4Smrg func_fatal_error "cannot find name of link library for '$lib'" 7926de2362d3Smrg fi 7927de2362d3Smrg 7928de2362d3Smrg # This library was specified with -dlopen. 79290d16fef4Smrg if test dlopen = "$pass"; then 79300d16fef4Smrg test -z "$libdir" \ 79310d16fef4Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 7932de2362d3Smrg if test -z "$dlname" || 79330d16fef4Smrg test yes != "$dlopen_support" || 79340d16fef4Smrg test no = "$build_libtool_libs" 79350d16fef4Smrg then 7936de2362d3Smrg # If there is no dlname, no dlopen support or we're linking 7937de2362d3Smrg # statically, we need to preload. We also need to preload any 7938de2362d3Smrg # dependent libraries so libltdl's deplib preloader doesn't 7939de2362d3Smrg # bomb out in the load deplibs phase. 7940de2362d3Smrg func_append dlprefiles " $lib $dependency_libs" 7941de2362d3Smrg else 7942de2362d3Smrg func_append newdlfiles " $lib" 7943de2362d3Smrg fi 7944de2362d3Smrg continue 7945de2362d3Smrg fi # $pass = dlopen 7946de2362d3Smrg 7947de2362d3Smrg # We need an absolute path. 7948de2362d3Smrg case $ladir in 79490d16fef4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 7950de2362d3Smrg *) 7951de2362d3Smrg abs_ladir=`cd "$ladir" && pwd` 7952de2362d3Smrg if test -z "$abs_ladir"; then 79530d16fef4Smrg func_warning "cannot determine absolute directory name of '$ladir'" 7954de2362d3Smrg func_warning "passing it literally to the linker, although it might fail" 79550d16fef4Smrg abs_ladir=$ladir 7956de2362d3Smrg fi 7957de2362d3Smrg ;; 7958de2362d3Smrg esac 7959de2362d3Smrg func_basename "$lib" 79600d16fef4Smrg laname=$func_basename_result 7961de2362d3Smrg 7962de2362d3Smrg # Find the relevant object directory and library name. 79630d16fef4Smrg if test yes = "$installed"; then 7964de2362d3Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 79650d16fef4Smrg func_warning "library '$lib' was moved." 79660d16fef4Smrg dir=$ladir 79670d16fef4Smrg absdir=$abs_ladir 79680d16fef4Smrg libdir=$abs_ladir 7969de2362d3Smrg else 79700d16fef4Smrg dir=$lt_sysroot$libdir 79710d16fef4Smrg absdir=$lt_sysroot$libdir 7972de2362d3Smrg fi 79730d16fef4Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 7974de2362d3Smrg else 7975de2362d3Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 79760d16fef4Smrg dir=$ladir 79770d16fef4Smrg absdir=$abs_ladir 7978de2362d3Smrg # Remove this search path later 7979de2362d3Smrg func_append notinst_path " $abs_ladir" 7980de2362d3Smrg else 79810d16fef4Smrg dir=$ladir/$objdir 79820d16fef4Smrg absdir=$abs_ladir/$objdir 7983de2362d3Smrg # Remove this search path later 7984de2362d3Smrg func_append notinst_path " $abs_ladir" 7985de2362d3Smrg fi 7986de2362d3Smrg fi # $installed = yes 7987de2362d3Smrg func_stripname 'lib' '.la' "$laname" 7988de2362d3Smrg name=$func_stripname_result 7989de2362d3Smrg 7990de2362d3Smrg # This library was specified with -dlpreopen. 79910d16fef4Smrg if test dlpreopen = "$pass"; then 79920d16fef4Smrg if test -z "$libdir" && test prog = "$linkmode"; then 79930d16fef4Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 7994de2362d3Smrg fi 79950d16fef4Smrg case $host in 7996de2362d3Smrg # special handling for platforms with PE-DLLs. 7997de2362d3Smrg *cygwin* | *mingw* | *cegcc* ) 7998de2362d3Smrg # Linker will automatically link against shared library if both 7999de2362d3Smrg # static and shared are present. Therefore, ensure we extract 8000de2362d3Smrg # symbols from the import library if a shared library is present 8001de2362d3Smrg # (otherwise, the dlopen module name will be incorrect). We do 8002de2362d3Smrg # this by putting the import library name into $newdlprefiles. 8003de2362d3Smrg # We recover the dlopen module name by 'saving' the la file 8004de2362d3Smrg # name in a special purpose variable, and (later) extracting the 8005de2362d3Smrg # dlname from the la file. 8006de2362d3Smrg if test -n "$dlname"; then 8007de2362d3Smrg func_tr_sh "$dir/$linklib" 8008de2362d3Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8009de2362d3Smrg func_append newdlprefiles " $dir/$linklib" 8010de2362d3Smrg else 8011de2362d3Smrg func_append newdlprefiles " $dir/$old_library" 8012de2362d3Smrg # Keep a list of preopened convenience libraries to check 8013de2362d3Smrg # that they are being used correctly in the link pass. 8014de2362d3Smrg test -z "$libdir" && \ 8015de2362d3Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8016de2362d3Smrg fi 8017de2362d3Smrg ;; 8018de2362d3Smrg * ) 8019de2362d3Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8020de2362d3Smrg # are required to link). 8021de2362d3Smrg if test -n "$old_library"; then 8022de2362d3Smrg func_append newdlprefiles " $dir/$old_library" 8023de2362d3Smrg # Keep a list of preopened convenience libraries to check 8024de2362d3Smrg # that they are being used correctly in the link pass. 8025de2362d3Smrg test -z "$libdir" && \ 8026de2362d3Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8027de2362d3Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8028de2362d3Smrg elif test -n "$dlname"; then 8029de2362d3Smrg func_append newdlprefiles " $dir/$dlname" 8030de2362d3Smrg else 8031de2362d3Smrg func_append newdlprefiles " $dir/$linklib" 8032de2362d3Smrg fi 8033de2362d3Smrg ;; 8034de2362d3Smrg esac 8035de2362d3Smrg fi # $pass = dlpreopen 8036de2362d3Smrg 8037de2362d3Smrg if test -z "$libdir"; then 8038de2362d3Smrg # Link the convenience library 80390d16fef4Smrg if test lib = "$linkmode"; then 8040de2362d3Smrg deplibs="$dir/$old_library $deplibs" 80410d16fef4Smrg elif test prog,link = "$linkmode,$pass"; then 8042de2362d3Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 8043de2362d3Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8044de2362d3Smrg else 8045de2362d3Smrg deplibs="$lib $deplibs" # used for prog,scan pass 8046de2362d3Smrg fi 8047de2362d3Smrg continue 8048de2362d3Smrg fi 8049de2362d3Smrg 8050de2362d3Smrg 80510d16fef4Smrg if test prog = "$linkmode" && test link != "$pass"; then 8052de2362d3Smrg func_append newlib_search_path " $ladir" 8053de2362d3Smrg deplibs="$lib $deplibs" 8054de2362d3Smrg 80550d16fef4Smrg linkalldeplibs=false 80560d16fef4Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 80570d16fef4Smrg test no = "$build_libtool_libs"; then 80580d16fef4Smrg linkalldeplibs=: 8059de2362d3Smrg fi 8060de2362d3Smrg 8061de2362d3Smrg tmp_libs= 8062de2362d3Smrg for deplib in $dependency_libs; do 8063de2362d3Smrg case $deplib in 8064de2362d3Smrg -L*) func_stripname '-L' '' "$deplib" 8065de2362d3Smrg func_resolve_sysroot "$func_stripname_result" 8066de2362d3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8067de2362d3Smrg ;; 8068de2362d3Smrg esac 8069de2362d3Smrg # Need to link against all dependency_libs? 80700d16fef4Smrg if $linkalldeplibs; then 8071de2362d3Smrg deplibs="$deplib $deplibs" 8072de2362d3Smrg else 8073de2362d3Smrg # Need to hardcode shared library paths 8074de2362d3Smrg # or/and link against static libraries 8075de2362d3Smrg newdependency_libs="$deplib $newdependency_libs" 8076de2362d3Smrg fi 80770d16fef4Smrg if $opt_preserve_dup_deps; then 8078de2362d3Smrg case "$tmp_libs " in 8079de2362d3Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8080de2362d3Smrg esac 8081de2362d3Smrg fi 8082de2362d3Smrg func_append tmp_libs " $deplib" 8083de2362d3Smrg done # for deplib 8084de2362d3Smrg continue 8085de2362d3Smrg fi # $linkmode = prog... 8086de2362d3Smrg 80870d16fef4Smrg if test prog,link = "$linkmode,$pass"; then 8088de2362d3Smrg if test -n "$library_names" && 80890d16fef4Smrg { { test no = "$prefer_static_libs" || 80900d16fef4Smrg test built,yes = "$prefer_static_libs,$installed"; } || 8091de2362d3Smrg test -z "$old_library"; }; then 8092de2362d3Smrg # We need to hardcode the library path 80930d16fef4Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8094de2362d3Smrg # Make sure the rpath contains only unique directories. 80950d16fef4Smrg case $temp_rpath: in 8096de2362d3Smrg *"$absdir:"*) ;; 8097de2362d3Smrg *) func_append temp_rpath "$absdir:" ;; 8098de2362d3Smrg esac 8099de2362d3Smrg fi 8100de2362d3Smrg 8101de2362d3Smrg # Hardcode the library path. 8102de2362d3Smrg # Skip directories that are in the system default run-time 8103de2362d3Smrg # search path. 8104de2362d3Smrg case " $sys_lib_dlsearch_path " in 8105de2362d3Smrg *" $absdir "*) ;; 8106de2362d3Smrg *) 8107de2362d3Smrg case "$compile_rpath " in 8108de2362d3Smrg *" $absdir "*) ;; 8109de2362d3Smrg *) func_append compile_rpath " $absdir" ;; 8110de2362d3Smrg esac 8111de2362d3Smrg ;; 8112de2362d3Smrg esac 8113de2362d3Smrg case " $sys_lib_dlsearch_path " in 8114de2362d3Smrg *" $libdir "*) ;; 8115de2362d3Smrg *) 8116de2362d3Smrg case "$finalize_rpath " in 8117de2362d3Smrg *" $libdir "*) ;; 8118de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 8119de2362d3Smrg esac 8120de2362d3Smrg ;; 8121de2362d3Smrg esac 8122de2362d3Smrg fi # $linkmode,$pass = prog,link... 8123de2362d3Smrg 81240d16fef4Smrg if $alldeplibs && 81250d16fef4Smrg { test pass_all = "$deplibs_check_method" || 81260d16fef4Smrg { test yes = "$build_libtool_libs" && 8127de2362d3Smrg test -n "$library_names"; }; }; then 8128de2362d3Smrg # We only need to search for static libraries 8129de2362d3Smrg continue 8130de2362d3Smrg fi 8131de2362d3Smrg fi 8132de2362d3Smrg 8133de2362d3Smrg link_static=no # Whether the deplib will be linked statically 8134de2362d3Smrg use_static_libs=$prefer_static_libs 81350d16fef4Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 8136de2362d3Smrg use_static_libs=no 8137de2362d3Smrg fi 8138de2362d3Smrg if test -n "$library_names" && 81390d16fef4Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8140de2362d3Smrg case $host in 81410d16fef4Smrg *cygwin* | *mingw* | *cegcc* | *os2*) 8142de2362d3Smrg # No point in relinking DLLs because paths are not encoded 8143de2362d3Smrg func_append notinst_deplibs " $lib" 8144de2362d3Smrg need_relink=no 8145de2362d3Smrg ;; 8146de2362d3Smrg *) 81470d16fef4Smrg if test no = "$installed"; then 8148de2362d3Smrg func_append notinst_deplibs " $lib" 8149de2362d3Smrg need_relink=yes 8150de2362d3Smrg fi 8151de2362d3Smrg ;; 8152de2362d3Smrg esac 8153de2362d3Smrg # This is a shared library 8154de2362d3Smrg 8155de2362d3Smrg # Warn about portability, can't link against -module's on some 8156de2362d3Smrg # systems (darwin). Don't bleat about dlopened modules though! 81570d16fef4Smrg dlopenmodule= 8158de2362d3Smrg for dlpremoduletest in $dlprefiles; do 8159de2362d3Smrg if test "X$dlpremoduletest" = "X$lib"; then 81600d16fef4Smrg dlopenmodule=$dlpremoduletest 8161de2362d3Smrg break 8162de2362d3Smrg fi 8163de2362d3Smrg done 81640d16fef4Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8165de2362d3Smrg echo 81660d16fef4Smrg if test prog = "$linkmode"; then 8167de2362d3Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 8168de2362d3Smrg else 8169de2362d3Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8170de2362d3Smrg fi 8171de2362d3Smrg $ECHO "*** $linklib is not portable!" 8172de2362d3Smrg fi 81730d16fef4Smrg if test lib = "$linkmode" && 81740d16fef4Smrg test yes = "$hardcode_into_libs"; then 8175de2362d3Smrg # Hardcode the library path. 8176de2362d3Smrg # Skip directories that are in the system default run-time 8177de2362d3Smrg # search path. 8178de2362d3Smrg case " $sys_lib_dlsearch_path " in 8179de2362d3Smrg *" $absdir "*) ;; 8180de2362d3Smrg *) 8181de2362d3Smrg case "$compile_rpath " in 8182de2362d3Smrg *" $absdir "*) ;; 8183de2362d3Smrg *) func_append compile_rpath " $absdir" ;; 8184de2362d3Smrg esac 8185de2362d3Smrg ;; 8186de2362d3Smrg esac 8187de2362d3Smrg case " $sys_lib_dlsearch_path " in 8188de2362d3Smrg *" $libdir "*) ;; 8189de2362d3Smrg *) 8190de2362d3Smrg case "$finalize_rpath " in 8191de2362d3Smrg *" $libdir "*) ;; 8192de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 8193de2362d3Smrg esac 8194de2362d3Smrg ;; 8195de2362d3Smrg esac 8196de2362d3Smrg fi 8197de2362d3Smrg 8198de2362d3Smrg if test -n "$old_archive_from_expsyms_cmds"; then 8199de2362d3Smrg # figure out the soname 8200de2362d3Smrg set dummy $library_names 8201de2362d3Smrg shift 82020d16fef4Smrg realname=$1 8203de2362d3Smrg shift 8204de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 8205de2362d3Smrg # use dlname if we got it. it's perfectly good, no? 8206de2362d3Smrg if test -n "$dlname"; then 82070d16fef4Smrg soname=$dlname 8208de2362d3Smrg elif test -n "$soname_spec"; then 8209de2362d3Smrg # bleh windows 8210de2362d3Smrg case $host in 82110d16fef4Smrg *cygwin* | mingw* | *cegcc* | *os2*) 8212de2362d3Smrg func_arith $current - $age 8213de2362d3Smrg major=$func_arith_result 82140d16fef4Smrg versuffix=-$major 8215de2362d3Smrg ;; 8216de2362d3Smrg esac 8217de2362d3Smrg eval soname=\"$soname_spec\" 8218de2362d3Smrg else 82190d16fef4Smrg soname=$realname 8220de2362d3Smrg fi 8221de2362d3Smrg 8222de2362d3Smrg # Make a new name for the extract_expsyms_cmds to use 82230d16fef4Smrg soroot=$soname 8224de2362d3Smrg func_basename "$soroot" 82250d16fef4Smrg soname=$func_basename_result 8226de2362d3Smrg func_stripname 'lib' '.dll' "$soname" 8227de2362d3Smrg newlib=libimp-$func_stripname_result.a 8228de2362d3Smrg 8229de2362d3Smrg # If the library has no export list, then create one now 8230de2362d3Smrg if test -f "$output_objdir/$soname-def"; then : 8231de2362d3Smrg else 82320d16fef4Smrg func_verbose "extracting exported symbol list from '$soname'" 8233de2362d3Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8234de2362d3Smrg fi 8235de2362d3Smrg 8236de2362d3Smrg # Create $newlib 8237de2362d3Smrg if test -f "$output_objdir/$newlib"; then :; else 82380d16fef4Smrg func_verbose "generating import library for '$soname'" 8239de2362d3Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8240de2362d3Smrg fi 8241de2362d3Smrg # make sure the library variables are pointing to the new library 8242de2362d3Smrg dir=$output_objdir 8243de2362d3Smrg linklib=$newlib 8244de2362d3Smrg fi # test -n "$old_archive_from_expsyms_cmds" 8245de2362d3Smrg 82460d16fef4Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8247de2362d3Smrg add_shlibpath= 8248de2362d3Smrg add_dir= 8249de2362d3Smrg add= 8250de2362d3Smrg lib_linked=yes 8251de2362d3Smrg case $hardcode_action in 8252de2362d3Smrg immediate | unsupported) 82530d16fef4Smrg if test no = "$hardcode_direct"; then 82540d16fef4Smrg add=$dir/$linklib 8255de2362d3Smrg case $host in 82560d16fef4Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 82570d16fef4Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8258de2362d3Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 82590d16fef4Smrg *-*-unixware7*) add_dir=-L$dir ;; 8260de2362d3Smrg *-*-darwin* ) 82610d16fef4Smrg # if the lib is a (non-dlopened) module then we cannot 8262de2362d3Smrg # link against it, someone is ignoring the earlier warnings 8263de2362d3Smrg if /usr/bin/file -L $add 2> /dev/null | 82640d16fef4Smrg $GREP ": [^:]* bundle" >/dev/null; then 8265de2362d3Smrg if test "X$dlopenmodule" != "X$lib"; then 8266de2362d3Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 82670d16fef4Smrg if test -z "$old_library"; then 8268de2362d3Smrg echo 8269de2362d3Smrg echo "*** And there doesn't seem to be a static archive available" 8270de2362d3Smrg echo "*** The link will probably fail, sorry" 8271de2362d3Smrg else 82720d16fef4Smrg add=$dir/$old_library 8273de2362d3Smrg fi 8274de2362d3Smrg elif test -n "$old_library"; then 82750d16fef4Smrg add=$dir/$old_library 8276de2362d3Smrg fi 8277de2362d3Smrg fi 8278de2362d3Smrg esac 82790d16fef4Smrg elif test no = "$hardcode_minus_L"; then 8280de2362d3Smrg case $host in 82810d16fef4Smrg *-*-sunos*) add_shlibpath=$dir ;; 8282de2362d3Smrg esac 82830d16fef4Smrg add_dir=-L$dir 82840d16fef4Smrg add=-l$name 82850d16fef4Smrg elif test no = "$hardcode_shlibpath_var"; then 82860d16fef4Smrg add_shlibpath=$dir 82870d16fef4Smrg add=-l$name 8288de2362d3Smrg else 8289de2362d3Smrg lib_linked=no 8290de2362d3Smrg fi 8291de2362d3Smrg ;; 8292de2362d3Smrg relink) 82930d16fef4Smrg if test yes = "$hardcode_direct" && 82940d16fef4Smrg test no = "$hardcode_direct_absolute"; then 82950d16fef4Smrg add=$dir/$linklib 82960d16fef4Smrg elif test yes = "$hardcode_minus_L"; then 82970d16fef4Smrg add_dir=-L$absdir 8298de2362d3Smrg # Try looking first in the location we're being installed to. 8299de2362d3Smrg if test -n "$inst_prefix_dir"; then 8300de2362d3Smrg case $libdir in 8301de2362d3Smrg [\\/]*) 8302de2362d3Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8303de2362d3Smrg ;; 8304de2362d3Smrg esac 8305de2362d3Smrg fi 83060d16fef4Smrg add=-l$name 83070d16fef4Smrg elif test yes = "$hardcode_shlibpath_var"; then 83080d16fef4Smrg add_shlibpath=$dir 83090d16fef4Smrg add=-l$name 8310de2362d3Smrg else 8311de2362d3Smrg lib_linked=no 8312de2362d3Smrg fi 8313de2362d3Smrg ;; 8314de2362d3Smrg *) lib_linked=no ;; 8315de2362d3Smrg esac 8316de2362d3Smrg 83170d16fef4Smrg if test yes != "$lib_linked"; then 8318de2362d3Smrg func_fatal_configuration "unsupported hardcode properties" 8319de2362d3Smrg fi 8320de2362d3Smrg 8321de2362d3Smrg if test -n "$add_shlibpath"; then 8322de2362d3Smrg case :$compile_shlibpath: in 8323de2362d3Smrg *":$add_shlibpath:"*) ;; 8324de2362d3Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8325de2362d3Smrg esac 8326de2362d3Smrg fi 83270d16fef4Smrg if test prog = "$linkmode"; then 8328de2362d3Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8329de2362d3Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8330de2362d3Smrg else 8331de2362d3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8332de2362d3Smrg test -n "$add" && deplibs="$add $deplibs" 83330d16fef4Smrg if test yes != "$hardcode_direct" && 83340d16fef4Smrg test yes != "$hardcode_minus_L" && 83350d16fef4Smrg test yes = "$hardcode_shlibpath_var"; then 8336de2362d3Smrg case :$finalize_shlibpath: in 8337de2362d3Smrg *":$libdir:"*) ;; 8338de2362d3Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8339de2362d3Smrg esac 8340de2362d3Smrg fi 8341de2362d3Smrg fi 8342de2362d3Smrg fi 8343de2362d3Smrg 83440d16fef4Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8345de2362d3Smrg add_shlibpath= 8346de2362d3Smrg add_dir= 8347de2362d3Smrg add= 8348de2362d3Smrg # Finalize command for both is simple: just hardcode it. 83490d16fef4Smrg if test yes = "$hardcode_direct" && 83500d16fef4Smrg test no = "$hardcode_direct_absolute"; then 83510d16fef4Smrg add=$libdir/$linklib 83520d16fef4Smrg elif test yes = "$hardcode_minus_L"; then 83530d16fef4Smrg add_dir=-L$libdir 83540d16fef4Smrg add=-l$name 83550d16fef4Smrg elif test yes = "$hardcode_shlibpath_var"; then 8356de2362d3Smrg case :$finalize_shlibpath: in 8357de2362d3Smrg *":$libdir:"*) ;; 8358de2362d3Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8359de2362d3Smrg esac 83600d16fef4Smrg add=-l$name 83610d16fef4Smrg elif test yes = "$hardcode_automatic"; then 8362de2362d3Smrg if test -n "$inst_prefix_dir" && 83630d16fef4Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 83640d16fef4Smrg add=$inst_prefix_dir$libdir/$linklib 8365de2362d3Smrg else 83660d16fef4Smrg add=$libdir/$linklib 8367de2362d3Smrg fi 8368de2362d3Smrg else 8369de2362d3Smrg # We cannot seem to hardcode it, guess we'll fake it. 83700d16fef4Smrg add_dir=-L$libdir 8371de2362d3Smrg # Try looking first in the location we're being installed to. 8372de2362d3Smrg if test -n "$inst_prefix_dir"; then 8373de2362d3Smrg case $libdir in 8374de2362d3Smrg [\\/]*) 8375de2362d3Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8376de2362d3Smrg ;; 8377de2362d3Smrg esac 8378de2362d3Smrg fi 83790d16fef4Smrg add=-l$name 8380de2362d3Smrg fi 8381de2362d3Smrg 83820d16fef4Smrg if test prog = "$linkmode"; then 8383de2362d3Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8384de2362d3Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8385de2362d3Smrg else 8386de2362d3Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8387de2362d3Smrg test -n "$add" && deplibs="$add $deplibs" 8388de2362d3Smrg fi 8389de2362d3Smrg fi 83900d16fef4Smrg elif test prog = "$linkmode"; then 8391de2362d3Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8392de2362d3Smrg # is not unsupported. This is valid on all known static and 8393de2362d3Smrg # shared platforms. 83940d16fef4Smrg if test unsupported != "$hardcode_direct"; then 83950d16fef4Smrg test -n "$old_library" && linklib=$old_library 8396de2362d3Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 8397de2362d3Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8398de2362d3Smrg else 8399de2362d3Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8400de2362d3Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8401de2362d3Smrg fi 84020d16fef4Smrg elif test yes = "$build_libtool_libs"; then 8403de2362d3Smrg # Not a shared library 84040d16fef4Smrg if test pass_all != "$deplibs_check_method"; then 8405de2362d3Smrg # We're trying link a shared library against a static one 8406de2362d3Smrg # but the system doesn't support it. 8407de2362d3Smrg 8408de2362d3Smrg # Just print a warning and add the library to dependency_libs so 8409de2362d3Smrg # that the program can be linked against the static library. 8410de2362d3Smrg echo 84110d16fef4Smrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8412de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 8413de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 8414de2362d3Smrg echo "*** shared version of the library, which you do not appear to have." 84150d16fef4Smrg if test yes = "$module"; then 8416de2362d3Smrg echo "*** But as you try to build a module library, libtool will still create " 8417de2362d3Smrg echo "*** a static module, that should work as long as the dlopening application" 8418de2362d3Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8419de2362d3Smrg if test -z "$global_symbol_pipe"; then 8420de2362d3Smrg echo 8421de2362d3Smrg echo "*** However, this would only work if libtool was able to extract symbol" 84220d16fef4Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8423de2362d3Smrg echo "*** not find such a program. So, this module is probably useless." 84240d16fef4Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 8425de2362d3Smrg fi 84260d16fef4Smrg if test no = "$build_old_libs"; then 8427de2362d3Smrg build_libtool_libs=module 8428de2362d3Smrg build_old_libs=yes 8429de2362d3Smrg else 8430de2362d3Smrg build_libtool_libs=no 8431de2362d3Smrg fi 8432de2362d3Smrg fi 8433de2362d3Smrg else 8434de2362d3Smrg deplibs="$dir/$old_library $deplibs" 8435de2362d3Smrg link_static=yes 8436de2362d3Smrg fi 8437de2362d3Smrg fi # link shared/static library? 8438de2362d3Smrg 84390d16fef4Smrg if test lib = "$linkmode"; then 8440de2362d3Smrg if test -n "$dependency_libs" && 84410d16fef4Smrg { test yes != "$hardcode_into_libs" || 84420d16fef4Smrg test yes = "$build_old_libs" || 84430d16fef4Smrg test yes = "$link_static"; }; then 8444de2362d3Smrg # Extract -R from dependency_libs 8445de2362d3Smrg temp_deplibs= 8446de2362d3Smrg for libdir in $dependency_libs; do 8447de2362d3Smrg case $libdir in 8448de2362d3Smrg -R*) func_stripname '-R' '' "$libdir" 8449de2362d3Smrg temp_xrpath=$func_stripname_result 8450de2362d3Smrg case " $xrpath " in 8451de2362d3Smrg *" $temp_xrpath "*) ;; 8452de2362d3Smrg *) func_append xrpath " $temp_xrpath";; 8453de2362d3Smrg esac;; 8454de2362d3Smrg *) func_append temp_deplibs " $libdir";; 8455de2362d3Smrg esac 8456de2362d3Smrg done 84570d16fef4Smrg dependency_libs=$temp_deplibs 8458de2362d3Smrg fi 8459de2362d3Smrg 8460de2362d3Smrg func_append newlib_search_path " $absdir" 8461de2362d3Smrg # Link against this library 84620d16fef4Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8463de2362d3Smrg # ... and its dependency_libs 8464de2362d3Smrg tmp_libs= 8465de2362d3Smrg for deplib in $dependency_libs; do 8466de2362d3Smrg newdependency_libs="$deplib $newdependency_libs" 8467de2362d3Smrg case $deplib in 8468de2362d3Smrg -L*) func_stripname '-L' '' "$deplib" 8469de2362d3Smrg func_resolve_sysroot "$func_stripname_result";; 8470de2362d3Smrg *) func_resolve_sysroot "$deplib" ;; 8471de2362d3Smrg esac 84720d16fef4Smrg if $opt_preserve_dup_deps; then 8473de2362d3Smrg case "$tmp_libs " in 8474de2362d3Smrg *" $func_resolve_sysroot_result "*) 8475de2362d3Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8476de2362d3Smrg esac 8477de2362d3Smrg fi 8478de2362d3Smrg func_append tmp_libs " $func_resolve_sysroot_result" 8479de2362d3Smrg done 8480de2362d3Smrg 84810d16fef4Smrg if test no != "$link_all_deplibs"; then 8482de2362d3Smrg # Add the search paths of all dependency libraries 8483de2362d3Smrg for deplib in $dependency_libs; do 8484de2362d3Smrg path= 8485de2362d3Smrg case $deplib in 84860d16fef4Smrg -L*) path=$deplib ;; 8487de2362d3Smrg *.la) 8488de2362d3Smrg func_resolve_sysroot "$deplib" 8489de2362d3Smrg deplib=$func_resolve_sysroot_result 8490de2362d3Smrg func_dirname "$deplib" "" "." 8491de2362d3Smrg dir=$func_dirname_result 8492de2362d3Smrg # We need an absolute path. 8493de2362d3Smrg case $dir in 84940d16fef4Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8495de2362d3Smrg *) 8496de2362d3Smrg absdir=`cd "$dir" && pwd` 8497de2362d3Smrg if test -z "$absdir"; then 84980d16fef4Smrg func_warning "cannot determine absolute directory name of '$dir'" 84990d16fef4Smrg absdir=$dir 8500de2362d3Smrg fi 8501de2362d3Smrg ;; 8502de2362d3Smrg esac 8503de2362d3Smrg if $GREP "^installed=no" $deplib > /dev/null; then 8504de2362d3Smrg case $host in 8505de2362d3Smrg *-*-darwin*) 8506de2362d3Smrg depdepl= 85070d16fef4Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 85080d16fef4Smrg if test -n "$deplibrary_names"; then 85090d16fef4Smrg for tmp in $deplibrary_names; do 8510de2362d3Smrg depdepl=$tmp 8511de2362d3Smrg done 85120d16fef4Smrg if test -f "$absdir/$objdir/$depdepl"; then 85130d16fef4Smrg depdepl=$absdir/$objdir/$depdepl 85140d16fef4Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8515de2362d3Smrg if test -z "$darwin_install_name"; then 85160d16fef4Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8517de2362d3Smrg fi 85180d16fef4Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 85190d16fef4Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8520de2362d3Smrg path= 8521de2362d3Smrg fi 8522de2362d3Smrg fi 8523de2362d3Smrg ;; 8524de2362d3Smrg *) 85250d16fef4Smrg path=-L$absdir/$objdir 8526de2362d3Smrg ;; 8527de2362d3Smrg esac 8528de2362d3Smrg else 85290d16fef4Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8530de2362d3Smrg test -z "$libdir" && \ 85310d16fef4Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 8532de2362d3Smrg test "$absdir" != "$libdir" && \ 85330d16fef4Smrg func_warning "'$deplib' seems to be moved" 8534de2362d3Smrg 85350d16fef4Smrg path=-L$absdir 8536de2362d3Smrg fi 8537de2362d3Smrg ;; 8538de2362d3Smrg esac 8539de2362d3Smrg case " $deplibs " in 8540de2362d3Smrg *" $path "*) ;; 8541de2362d3Smrg *) deplibs="$path $deplibs" ;; 8542de2362d3Smrg esac 8543de2362d3Smrg done 8544de2362d3Smrg fi # link_all_deplibs != no 8545de2362d3Smrg fi # linkmode = lib 8546de2362d3Smrg done # for deplib in $libs 85470d16fef4Smrg if test link = "$pass"; then 85480d16fef4Smrg if test prog = "$linkmode"; then 8549de2362d3Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8550de2362d3Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8551de2362d3Smrg else 8552de2362d3Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8553de2362d3Smrg fi 8554de2362d3Smrg fi 85550d16fef4Smrg dependency_libs=$newdependency_libs 85560d16fef4Smrg if test dlpreopen = "$pass"; then 8557de2362d3Smrg # Link the dlpreopened libraries before other libraries 8558de2362d3Smrg for deplib in $save_deplibs; do 8559de2362d3Smrg deplibs="$deplib $deplibs" 8560de2362d3Smrg done 8561de2362d3Smrg fi 85620d16fef4Smrg if test dlopen != "$pass"; then 85630d16fef4Smrg test conv = "$pass" || { 8564de2362d3Smrg # Make sure lib_search_path contains only unique directories. 8565de2362d3Smrg lib_search_path= 8566de2362d3Smrg for dir in $newlib_search_path; do 8567de2362d3Smrg case "$lib_search_path " in 8568de2362d3Smrg *" $dir "*) ;; 8569de2362d3Smrg *) func_append lib_search_path " $dir" ;; 8570de2362d3Smrg esac 8571de2362d3Smrg done 8572de2362d3Smrg newlib_search_path= 85730d16fef4Smrg } 8574de2362d3Smrg 85750d16fef4Smrg if test prog,link = "$linkmode,$pass"; then 8576de2362d3Smrg vars="compile_deplibs finalize_deplibs" 85770d16fef4Smrg else 85780d16fef4Smrg vars=deplibs 8579de2362d3Smrg fi 8580de2362d3Smrg for var in $vars dependency_libs; do 8581de2362d3Smrg # Add libraries to $var in reverse order 8582de2362d3Smrg eval tmp_libs=\"\$$var\" 8583de2362d3Smrg new_libs= 8584de2362d3Smrg for deplib in $tmp_libs; do 8585de2362d3Smrg # FIXME: Pedantically, this is the right thing to do, so 8586de2362d3Smrg # that some nasty dependency loop isn't accidentally 8587de2362d3Smrg # broken: 8588de2362d3Smrg #new_libs="$deplib $new_libs" 8589de2362d3Smrg # Pragmatically, this seems to cause very few problems in 8590de2362d3Smrg # practice: 8591de2362d3Smrg case $deplib in 8592de2362d3Smrg -L*) new_libs="$deplib $new_libs" ;; 8593de2362d3Smrg -R*) ;; 8594de2362d3Smrg *) 8595de2362d3Smrg # And here is the reason: when a library appears more 8596de2362d3Smrg # than once as an explicit dependence of a library, or 8597de2362d3Smrg # is implicitly linked in more than once by the 8598de2362d3Smrg # compiler, it is considered special, and multiple 8599de2362d3Smrg # occurrences thereof are not removed. Compare this 8600de2362d3Smrg # with having the same library being listed as a 8601de2362d3Smrg # dependency of multiple other libraries: in this case, 8602de2362d3Smrg # we know (pedantically, we assume) the library does not 8603de2362d3Smrg # need to be listed more than once, so we keep only the 8604de2362d3Smrg # last copy. This is not always right, but it is rare 8605de2362d3Smrg # enough that we require users that really mean to play 8606de2362d3Smrg # such unportable linking tricks to link the library 8607de2362d3Smrg # using -Wl,-lname, so that libtool does not consider it 8608de2362d3Smrg # for duplicate removal. 8609de2362d3Smrg case " $specialdeplibs " in 8610de2362d3Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 8611de2362d3Smrg *) 8612de2362d3Smrg case " $new_libs " in 8613de2362d3Smrg *" $deplib "*) ;; 8614de2362d3Smrg *) new_libs="$deplib $new_libs" ;; 8615de2362d3Smrg esac 8616de2362d3Smrg ;; 8617de2362d3Smrg esac 8618de2362d3Smrg ;; 8619de2362d3Smrg esac 8620de2362d3Smrg done 8621de2362d3Smrg tmp_libs= 8622de2362d3Smrg for deplib in $new_libs; do 8623de2362d3Smrg case $deplib in 8624de2362d3Smrg -L*) 8625de2362d3Smrg case " $tmp_libs " in 8626de2362d3Smrg *" $deplib "*) ;; 8627de2362d3Smrg *) func_append tmp_libs " $deplib" ;; 8628de2362d3Smrg esac 8629de2362d3Smrg ;; 8630de2362d3Smrg *) func_append tmp_libs " $deplib" ;; 8631de2362d3Smrg esac 8632de2362d3Smrg done 8633de2362d3Smrg eval $var=\"$tmp_libs\" 8634de2362d3Smrg done # for var 8635de2362d3Smrg fi 86360d16fef4Smrg 86370d16fef4Smrg # Add Sun CC postdeps if required: 86380d16fef4Smrg test CXX = "$tagname" && { 86390d16fef4Smrg case $host_os in 86400d16fef4Smrg linux*) 86410d16fef4Smrg case `$CC -V 2>&1 | sed 5q` in 86420d16fef4Smrg *Sun\ C*) # Sun C++ 5.9 86430d16fef4Smrg func_suncc_cstd_abi 86440d16fef4Smrg 86450d16fef4Smrg if test no != "$suncc_use_cstd_abi"; then 86460d16fef4Smrg func_append postdeps ' -library=Cstd -library=Crun' 86470d16fef4Smrg fi 86480d16fef4Smrg ;; 86490d16fef4Smrg esac 86500d16fef4Smrg ;; 86510d16fef4Smrg 86520d16fef4Smrg solaris*) 86530d16fef4Smrg func_cc_basename "$CC" 86540d16fef4Smrg case $func_cc_basename_result in 86550d16fef4Smrg CC* | sunCC*) 86560d16fef4Smrg func_suncc_cstd_abi 86570d16fef4Smrg 86580d16fef4Smrg if test no != "$suncc_use_cstd_abi"; then 86590d16fef4Smrg func_append postdeps ' -library=Cstd -library=Crun' 86600d16fef4Smrg fi 86610d16fef4Smrg ;; 86620d16fef4Smrg esac 86630d16fef4Smrg ;; 86640d16fef4Smrg esac 86650d16fef4Smrg } 86660d16fef4Smrg 8667de2362d3Smrg # Last step: remove runtime libs from dependency_libs 8668de2362d3Smrg # (they stay in deplibs) 8669de2362d3Smrg tmp_libs= 86700d16fef4Smrg for i in $dependency_libs; do 8671de2362d3Smrg case " $predeps $postdeps $compiler_lib_search_path " in 8672de2362d3Smrg *" $i "*) 86730d16fef4Smrg i= 8674de2362d3Smrg ;; 8675de2362d3Smrg esac 86760d16fef4Smrg if test -n "$i"; then 8677de2362d3Smrg func_append tmp_libs " $i" 8678de2362d3Smrg fi 8679de2362d3Smrg done 8680de2362d3Smrg dependency_libs=$tmp_libs 8681de2362d3Smrg done # for pass 86820d16fef4Smrg if test prog = "$linkmode"; then 86830d16fef4Smrg dlfiles=$newdlfiles 8684de2362d3Smrg fi 86850d16fef4Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 86860d16fef4Smrg dlprefiles=$newdlprefiles 8687de2362d3Smrg fi 8688de2362d3Smrg 8689de2362d3Smrg case $linkmode in 8690de2362d3Smrg oldlib) 86910d16fef4Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 86920d16fef4Smrg func_warning "'-dlopen' is ignored for archives" 8693de2362d3Smrg fi 8694de2362d3Smrg 8695de2362d3Smrg case " $deplibs" in 8696de2362d3Smrg *\ -l* | *\ -L*) 86970d16fef4Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 8698de2362d3Smrg esac 8699de2362d3Smrg 8700de2362d3Smrg test -n "$rpath" && \ 87010d16fef4Smrg func_warning "'-rpath' is ignored for archives" 8702de2362d3Smrg 8703de2362d3Smrg test -n "$xrpath" && \ 87040d16fef4Smrg func_warning "'-R' is ignored for archives" 8705de2362d3Smrg 8706de2362d3Smrg test -n "$vinfo" && \ 87070d16fef4Smrg func_warning "'-version-info/-version-number' is ignored for archives" 8708de2362d3Smrg 8709de2362d3Smrg test -n "$release" && \ 87100d16fef4Smrg func_warning "'-release' is ignored for archives" 8711de2362d3Smrg 8712de2362d3Smrg test -n "$export_symbols$export_symbols_regex" && \ 87130d16fef4Smrg func_warning "'-export-symbols' is ignored for archives" 8714de2362d3Smrg 8715de2362d3Smrg # Now set the variables for building old libraries. 8716de2362d3Smrg build_libtool_libs=no 87170d16fef4Smrg oldlibs=$output 8718de2362d3Smrg func_append objs "$old_deplibs" 8719de2362d3Smrg ;; 8720de2362d3Smrg 8721de2362d3Smrg lib) 87220d16fef4Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 8723de2362d3Smrg case $outputname in 8724de2362d3Smrg lib*) 8725de2362d3Smrg func_stripname 'lib' '.la' "$outputname" 8726de2362d3Smrg name=$func_stripname_result 8727de2362d3Smrg eval shared_ext=\"$shrext_cmds\" 8728de2362d3Smrg eval libname=\"$libname_spec\" 8729de2362d3Smrg ;; 8730de2362d3Smrg *) 87310d16fef4Smrg test no = "$module" \ 87320d16fef4Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 8733de2362d3Smrg 87340d16fef4Smrg if test no != "$need_lib_prefix"; then 8735de2362d3Smrg # Add the "lib" prefix for modules if required 8736de2362d3Smrg func_stripname '' '.la' "$outputname" 8737de2362d3Smrg name=$func_stripname_result 8738de2362d3Smrg eval shared_ext=\"$shrext_cmds\" 8739de2362d3Smrg eval libname=\"$libname_spec\" 8740de2362d3Smrg else 8741de2362d3Smrg func_stripname '' '.la' "$outputname" 8742de2362d3Smrg libname=$func_stripname_result 8743de2362d3Smrg fi 8744de2362d3Smrg ;; 8745de2362d3Smrg esac 8746de2362d3Smrg 8747de2362d3Smrg if test -n "$objs"; then 87480d16fef4Smrg if test pass_all != "$deplibs_check_method"; then 87490d16fef4Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8750de2362d3Smrg else 8751de2362d3Smrg echo 8752de2362d3Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8753de2362d3Smrg $ECHO "*** objects $objs is not portable!" 8754de2362d3Smrg func_append libobjs " $objs" 8755de2362d3Smrg fi 8756de2362d3Smrg fi 8757de2362d3Smrg 87580d16fef4Smrg test no = "$dlself" \ 87590d16fef4Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 8760de2362d3Smrg 8761de2362d3Smrg set dummy $rpath 8762de2362d3Smrg shift 87630d16fef4Smrg test 1 -lt "$#" \ 87640d16fef4Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 8765de2362d3Smrg 87660d16fef4Smrg install_libdir=$1 8767de2362d3Smrg 8768de2362d3Smrg oldlibs= 8769de2362d3Smrg if test -z "$rpath"; then 87700d16fef4Smrg if test yes = "$build_libtool_libs"; then 8771de2362d3Smrg # Building a libtool convenience library. 87720d16fef4Smrg # Some compilers have problems with a '.al' extension so 8773de2362d3Smrg # convenience libraries should have the same extension an 8774de2362d3Smrg # archive normally would. 8775de2362d3Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 8776de2362d3Smrg build_libtool_libs=convenience 8777de2362d3Smrg build_old_libs=yes 8778de2362d3Smrg fi 8779de2362d3Smrg 8780de2362d3Smrg test -n "$vinfo" && \ 87810d16fef4Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8782de2362d3Smrg 8783de2362d3Smrg test -n "$release" && \ 87840d16fef4Smrg func_warning "'-release' is ignored for convenience libraries" 8785de2362d3Smrg else 8786de2362d3Smrg 8787de2362d3Smrg # Parse the version information argument. 87880d16fef4Smrg save_ifs=$IFS; IFS=: 8789de2362d3Smrg set dummy $vinfo 0 0 0 8790de2362d3Smrg shift 87910d16fef4Smrg IFS=$save_ifs 8792de2362d3Smrg 8793de2362d3Smrg test -n "$7" && \ 87940d16fef4Smrg func_fatal_help "too many parameters to '-version-info'" 8795de2362d3Smrg 8796de2362d3Smrg # convert absolute version numbers to libtool ages 8797de2362d3Smrg # this retains compatibility with .la files and attempts 8798de2362d3Smrg # to make the code below a bit more comprehensible 8799de2362d3Smrg 8800de2362d3Smrg case $vinfo_number in 8801de2362d3Smrg yes) 88020d16fef4Smrg number_major=$1 88030d16fef4Smrg number_minor=$2 88040d16fef4Smrg number_revision=$3 8805de2362d3Smrg # 8806de2362d3Smrg # There are really only two kinds -- those that 8807de2362d3Smrg # use the current revision as the major version 8808de2362d3Smrg # and those that subtract age and use age as 8809de2362d3Smrg # a minor version. But, then there is irix 88100d16fef4Smrg # that has an extra 1 added just for fun 8811de2362d3Smrg # 8812de2362d3Smrg case $version_type in 8813de2362d3Smrg # correct linux to gnu/linux during the next big refactor 88140d16fef4Smrg darwin|freebsd-elf|linux|osf|windows|none) 8815de2362d3Smrg func_arith $number_major + $number_minor 8816de2362d3Smrg current=$func_arith_result 88170d16fef4Smrg age=$number_minor 88180d16fef4Smrg revision=$number_revision 8819de2362d3Smrg ;; 88200d16fef4Smrg freebsd-aout|qnx|sunos) 88210d16fef4Smrg current=$number_major 88220d16fef4Smrg revision=$number_minor 88230d16fef4Smrg age=0 8824de2362d3Smrg ;; 8825de2362d3Smrg irix|nonstopux) 8826de2362d3Smrg func_arith $number_major + $number_minor 8827de2362d3Smrg current=$func_arith_result 88280d16fef4Smrg age=$number_minor 88290d16fef4Smrg revision=$number_minor 8830de2362d3Smrg lt_irix_increment=no 8831de2362d3Smrg ;; 88320d16fef4Smrg *) 88330d16fef4Smrg func_fatal_configuration "$modename: unknown library version type '$version_type'" 88340d16fef4Smrg ;; 8835de2362d3Smrg esac 8836de2362d3Smrg ;; 8837de2362d3Smrg no) 88380d16fef4Smrg current=$1 88390d16fef4Smrg revision=$2 88400d16fef4Smrg age=$3 8841de2362d3Smrg ;; 8842de2362d3Smrg esac 8843de2362d3Smrg 8844de2362d3Smrg # Check that each of the things are valid numbers. 8845de2362d3Smrg case $current in 8846de2362d3Smrg 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]) ;; 8847de2362d3Smrg *) 88480d16fef4Smrg func_error "CURRENT '$current' must be a nonnegative integer" 88490d16fef4Smrg func_fatal_error "'$vinfo' is not valid version information" 8850de2362d3Smrg ;; 8851de2362d3Smrg esac 8852de2362d3Smrg 8853de2362d3Smrg case $revision in 8854de2362d3Smrg 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]) ;; 8855de2362d3Smrg *) 88560d16fef4Smrg func_error "REVISION '$revision' must be a nonnegative integer" 88570d16fef4Smrg func_fatal_error "'$vinfo' is not valid version information" 8858de2362d3Smrg ;; 8859de2362d3Smrg esac 8860de2362d3Smrg 8861de2362d3Smrg case $age in 8862de2362d3Smrg 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]) ;; 8863de2362d3Smrg *) 88640d16fef4Smrg func_error "AGE '$age' must be a nonnegative integer" 88650d16fef4Smrg func_fatal_error "'$vinfo' is not valid version information" 8866de2362d3Smrg ;; 8867de2362d3Smrg esac 8868de2362d3Smrg 8869de2362d3Smrg if test "$age" -gt "$current"; then 88700d16fef4Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 88710d16fef4Smrg func_fatal_error "'$vinfo' is not valid version information" 8872de2362d3Smrg fi 8873de2362d3Smrg 8874de2362d3Smrg # Calculate the version variables. 8875de2362d3Smrg major= 8876de2362d3Smrg versuffix= 8877de2362d3Smrg verstring= 8878de2362d3Smrg case $version_type in 8879de2362d3Smrg none) ;; 8880de2362d3Smrg 8881de2362d3Smrg darwin) 8882de2362d3Smrg # Like Linux, but with the current version available in 8883de2362d3Smrg # verstring for coding it into the library header 8884de2362d3Smrg func_arith $current - $age 8885de2362d3Smrg major=.$func_arith_result 88860d16fef4Smrg versuffix=$major.$age.$revision 8887de2362d3Smrg # Darwin ld doesn't like 0 for these options... 8888de2362d3Smrg func_arith $current + 1 8889de2362d3Smrg minor_current=$func_arith_result 88900d16fef4Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8891de2362d3Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 88920d16fef4Smrg # On Darwin other compilers 88930d16fef4Smrg case $CC in 88940d16fef4Smrg nagfor*) 88950d16fef4Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 88960d16fef4Smrg ;; 88970d16fef4Smrg *) 88980d16fef4Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 88990d16fef4Smrg ;; 89000d16fef4Smrg esac 8901de2362d3Smrg ;; 8902de2362d3Smrg 8903de2362d3Smrg freebsd-aout) 89040d16fef4Smrg major=.$current 89050d16fef4Smrg versuffix=.$current.$revision 8906de2362d3Smrg ;; 8907de2362d3Smrg 8908de2362d3Smrg freebsd-elf) 89090d16fef4Smrg func_arith $current - $age 89100d16fef4Smrg major=.$func_arith_result 89110d16fef4Smrg versuffix=$major.$age.$revision 8912de2362d3Smrg ;; 8913de2362d3Smrg 8914de2362d3Smrg irix | nonstopux) 89150d16fef4Smrg if test no = "$lt_irix_increment"; then 8916de2362d3Smrg func_arith $current - $age 8917de2362d3Smrg else 8918de2362d3Smrg func_arith $current - $age + 1 8919de2362d3Smrg fi 8920de2362d3Smrg major=$func_arith_result 8921de2362d3Smrg 8922de2362d3Smrg case $version_type in 8923de2362d3Smrg nonstopux) verstring_prefix=nonstopux ;; 8924de2362d3Smrg *) verstring_prefix=sgi ;; 8925de2362d3Smrg esac 89260d16fef4Smrg verstring=$verstring_prefix$major.$revision 8927de2362d3Smrg 8928de2362d3Smrg # Add in all the interfaces that we are compatible with. 8929de2362d3Smrg loop=$revision 89300d16fef4Smrg while test 0 -ne "$loop"; do 8931de2362d3Smrg func_arith $revision - $loop 8932de2362d3Smrg iface=$func_arith_result 8933de2362d3Smrg func_arith $loop - 1 8934de2362d3Smrg loop=$func_arith_result 89350d16fef4Smrg verstring=$verstring_prefix$major.$iface:$verstring 8936de2362d3Smrg done 8937de2362d3Smrg 89380d16fef4Smrg # Before this point, $major must not contain '.'. 8939de2362d3Smrg major=.$major 89400d16fef4Smrg versuffix=$major.$revision 8941de2362d3Smrg ;; 8942de2362d3Smrg 8943de2362d3Smrg linux) # correct to gnu/linux during the next big refactor 8944de2362d3Smrg func_arith $current - $age 8945de2362d3Smrg major=.$func_arith_result 89460d16fef4Smrg versuffix=$major.$age.$revision 8947de2362d3Smrg ;; 8948de2362d3Smrg 8949de2362d3Smrg osf) 8950de2362d3Smrg func_arith $current - $age 8951de2362d3Smrg major=.$func_arith_result 89520d16fef4Smrg versuffix=.$current.$age.$revision 89530d16fef4Smrg verstring=$current.$age.$revision 8954de2362d3Smrg 8955de2362d3Smrg # Add in all the interfaces that we are compatible with. 8956de2362d3Smrg loop=$age 89570d16fef4Smrg while test 0 -ne "$loop"; do 8958de2362d3Smrg func_arith $current - $loop 8959de2362d3Smrg iface=$func_arith_result 8960de2362d3Smrg func_arith $loop - 1 8961de2362d3Smrg loop=$func_arith_result 89620d16fef4Smrg verstring=$verstring:$iface.0 8963de2362d3Smrg done 8964de2362d3Smrg 8965de2362d3Smrg # Make executables depend on our current version. 89660d16fef4Smrg func_append verstring ":$current.0" 8967de2362d3Smrg ;; 8968de2362d3Smrg 8969de2362d3Smrg qnx) 89700d16fef4Smrg major=.$current 89710d16fef4Smrg versuffix=.$current 89720d16fef4Smrg ;; 89730d16fef4Smrg 89740d16fef4Smrg sco) 89750d16fef4Smrg major=.$current 89760d16fef4Smrg versuffix=.$current 8977de2362d3Smrg ;; 8978de2362d3Smrg 8979de2362d3Smrg sunos) 89800d16fef4Smrg major=.$current 89810d16fef4Smrg versuffix=.$current.$revision 8982de2362d3Smrg ;; 8983de2362d3Smrg 8984de2362d3Smrg windows) 8985de2362d3Smrg # Use '-' rather than '.', since we only want one 89860d16fef4Smrg # extension on DOS 8.3 file systems. 8987de2362d3Smrg func_arith $current - $age 8988de2362d3Smrg major=$func_arith_result 89890d16fef4Smrg versuffix=-$major 8990de2362d3Smrg ;; 8991de2362d3Smrg 8992de2362d3Smrg *) 89930d16fef4Smrg func_fatal_configuration "unknown library version type '$version_type'" 8994de2362d3Smrg ;; 8995de2362d3Smrg esac 8996de2362d3Smrg 8997de2362d3Smrg # Clear the version info if we defaulted, and they specified a release. 8998de2362d3Smrg if test -z "$vinfo" && test -n "$release"; then 8999de2362d3Smrg major= 9000de2362d3Smrg case $version_type in 9001de2362d3Smrg darwin) 9002de2362d3Smrg # we can't check for "0.0" in archive_cmds due to quoting 9003de2362d3Smrg # problems, so we reset it completely 9004de2362d3Smrg verstring= 9005de2362d3Smrg ;; 9006de2362d3Smrg *) 90070d16fef4Smrg verstring=0.0 9008de2362d3Smrg ;; 9009de2362d3Smrg esac 90100d16fef4Smrg if test no = "$need_version"; then 9011de2362d3Smrg versuffix= 9012de2362d3Smrg else 90130d16fef4Smrg versuffix=.0.0 9014de2362d3Smrg fi 9015de2362d3Smrg fi 9016de2362d3Smrg 9017de2362d3Smrg # Remove version info from name if versioning should be avoided 90180d16fef4Smrg if test yes,no = "$avoid_version,$need_version"; then 9019de2362d3Smrg major= 9020de2362d3Smrg versuffix= 90210d16fef4Smrg verstring= 9022de2362d3Smrg fi 9023de2362d3Smrg 9024de2362d3Smrg # Check to see if the archive will have undefined symbols. 90250d16fef4Smrg if test yes = "$allow_undefined"; then 90260d16fef4Smrg if test unsupported = "$allow_undefined_flag"; then 90270d16fef4Smrg if test yes = "$build_old_libs"; then 90280d16fef4Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 90290d16fef4Smrg build_libtool_libs=no 90300d16fef4Smrg else 90310d16fef4Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 90320d16fef4Smrg fi 9033de2362d3Smrg fi 9034de2362d3Smrg else 9035de2362d3Smrg # Don't allow undefined symbols. 90360d16fef4Smrg allow_undefined_flag=$no_undefined_flag 9037de2362d3Smrg fi 9038de2362d3Smrg 9039de2362d3Smrg fi 9040de2362d3Smrg 90410d16fef4Smrg func_generate_dlsyms "$libname" "$libname" : 9042de2362d3Smrg func_append libobjs " $symfileobj" 90430d16fef4Smrg test " " = "$libobjs" && libobjs= 9044de2362d3Smrg 90450d16fef4Smrg if test relink != "$opt_mode"; then 9046de2362d3Smrg # Remove our outputs, but don't remove object files since they 9047de2362d3Smrg # may have been created when compiling PIC objects. 9048de2362d3Smrg removelist= 9049de2362d3Smrg tempremovelist=`$ECHO "$output_objdir/*"` 9050de2362d3Smrg for p in $tempremovelist; do 9051de2362d3Smrg case $p in 9052de2362d3Smrg *.$objext | *.gcno) 9053de2362d3Smrg ;; 90540d16fef4Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 90550d16fef4Smrg if test -n "$precious_files_regex"; then 9056de2362d3Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9057de2362d3Smrg then 9058de2362d3Smrg continue 9059de2362d3Smrg fi 9060de2362d3Smrg fi 9061de2362d3Smrg func_append removelist " $p" 9062de2362d3Smrg ;; 9063de2362d3Smrg *) ;; 9064de2362d3Smrg esac 9065de2362d3Smrg done 9066de2362d3Smrg test -n "$removelist" && \ 9067de2362d3Smrg func_show_eval "${RM}r \$removelist" 9068de2362d3Smrg fi 9069de2362d3Smrg 9070de2362d3Smrg # Now set the variables for building old libraries. 90710d16fef4Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9072de2362d3Smrg func_append oldlibs " $output_objdir/$libname.$libext" 9073de2362d3Smrg 9074de2362d3Smrg # Transform .lo files to .o files. 90750d16fef4Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9076de2362d3Smrg fi 9077de2362d3Smrg 9078de2362d3Smrg # Eliminate all temporary directories. 9079de2362d3Smrg #for path in $notinst_path; do 9080de2362d3Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9081de2362d3Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9082de2362d3Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9083de2362d3Smrg #done 9084de2362d3Smrg 9085de2362d3Smrg if test -n "$xrpath"; then 9086de2362d3Smrg # If the user specified any rpath flags, then add them. 9087de2362d3Smrg temp_xrpath= 9088de2362d3Smrg for libdir in $xrpath; do 9089de2362d3Smrg func_replace_sysroot "$libdir" 9090de2362d3Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9091de2362d3Smrg case "$finalize_rpath " in 9092de2362d3Smrg *" $libdir "*) ;; 9093de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 9094de2362d3Smrg esac 9095de2362d3Smrg done 90960d16fef4Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9097de2362d3Smrg dependency_libs="$temp_xrpath $dependency_libs" 9098de2362d3Smrg fi 9099de2362d3Smrg fi 9100de2362d3Smrg 9101de2362d3Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 91020d16fef4Smrg old_dlfiles=$dlfiles 9103de2362d3Smrg dlfiles= 9104de2362d3Smrg for lib in $old_dlfiles; do 9105de2362d3Smrg case " $dlprefiles $dlfiles " in 9106de2362d3Smrg *" $lib "*) ;; 9107de2362d3Smrg *) func_append dlfiles " $lib" ;; 9108de2362d3Smrg esac 9109de2362d3Smrg done 9110de2362d3Smrg 9111de2362d3Smrg # Make sure dlprefiles contains only unique files 91120d16fef4Smrg old_dlprefiles=$dlprefiles 9113de2362d3Smrg dlprefiles= 9114de2362d3Smrg for lib in $old_dlprefiles; do 9115de2362d3Smrg case "$dlprefiles " in 9116de2362d3Smrg *" $lib "*) ;; 9117de2362d3Smrg *) func_append dlprefiles " $lib" ;; 9118de2362d3Smrg esac 9119de2362d3Smrg done 9120de2362d3Smrg 91210d16fef4Smrg if test yes = "$build_libtool_libs"; then 9122de2362d3Smrg if test -n "$rpath"; then 9123de2362d3Smrg case $host in 9124de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9125de2362d3Smrg # these systems don't actually have a c library (as such)! 9126de2362d3Smrg ;; 9127de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9128de2362d3Smrg # Rhapsody C library is in the System framework 9129de2362d3Smrg func_append deplibs " System.ltframework" 9130de2362d3Smrg ;; 9131de2362d3Smrg *-*-netbsd*) 9132de2362d3Smrg # Don't link with libc until the a.out ld.so is fixed. 9133de2362d3Smrg ;; 9134de2362d3Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9135de2362d3Smrg # Do not include libc due to us having libc/libc_r. 9136de2362d3Smrg ;; 9137de2362d3Smrg *-*-sco3.2v5* | *-*-sco5v6*) 9138de2362d3Smrg # Causes problems with __ctype 9139de2362d3Smrg ;; 9140de2362d3Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9141de2362d3Smrg # Compiler inserts libc in the correct place for threads to work 9142de2362d3Smrg ;; 9143de2362d3Smrg *) 9144de2362d3Smrg # Add libc to deplibs on all other systems if necessary. 91450d16fef4Smrg if test yes = "$build_libtool_need_lc"; then 9146de2362d3Smrg func_append deplibs " -lc" 9147de2362d3Smrg fi 9148de2362d3Smrg ;; 9149de2362d3Smrg esac 9150de2362d3Smrg fi 9151de2362d3Smrg 9152de2362d3Smrg # Transform deplibs into only deplibs that can be linked in shared. 9153de2362d3Smrg name_save=$name 9154de2362d3Smrg libname_save=$libname 9155de2362d3Smrg release_save=$release 9156de2362d3Smrg versuffix_save=$versuffix 9157de2362d3Smrg major_save=$major 9158de2362d3Smrg # I'm not sure if I'm treating the release correctly. I think 9159de2362d3Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 9160de2362d3Smrg # add it in twice. Is that correct? 91610d16fef4Smrg release= 91620d16fef4Smrg versuffix= 91630d16fef4Smrg major= 9164de2362d3Smrg newdeplibs= 9165de2362d3Smrg droppeddeps=no 9166de2362d3Smrg case $deplibs_check_method in 9167de2362d3Smrg pass_all) 9168de2362d3Smrg # Don't check for shared/static. Everything works. 9169de2362d3Smrg # This might be a little naive. We might want to check 9170de2362d3Smrg # whether the library exists or not. But this is on 9171de2362d3Smrg # osf3 & osf4 and I'm not really sure... Just 9172de2362d3Smrg # implementing what was already the behavior. 9173de2362d3Smrg newdeplibs=$deplibs 9174de2362d3Smrg ;; 9175de2362d3Smrg test_compile) 9176de2362d3Smrg # This code stresses the "libraries are programs" paradigm to its 9177de2362d3Smrg # limits. Maybe even breaks it. We compile a program, linking it 9178de2362d3Smrg # against the deplibs as a proxy for the library. Then we can check 9179de2362d3Smrg # whether they linked in statically or dynamically with ldd. 9180de2362d3Smrg $opt_dry_run || $RM conftest.c 9181de2362d3Smrg cat > conftest.c <<EOF 9182de2362d3Smrg int main() { return 0; } 9183de2362d3SmrgEOF 9184de2362d3Smrg $opt_dry_run || $RM conftest 9185de2362d3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9186de2362d3Smrg ldd_output=`ldd conftest` 9187de2362d3Smrg for i in $deplibs; do 9188de2362d3Smrg case $i in 9189de2362d3Smrg -l*) 9190de2362d3Smrg func_stripname -l '' "$i" 9191de2362d3Smrg name=$func_stripname_result 91920d16fef4Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9193de2362d3Smrg case " $predeps $postdeps " in 9194de2362d3Smrg *" $i "*) 9195de2362d3Smrg func_append newdeplibs " $i" 91960d16fef4Smrg i= 9197de2362d3Smrg ;; 9198de2362d3Smrg esac 9199de2362d3Smrg fi 92000d16fef4Smrg if test -n "$i"; then 9201de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9202de2362d3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9203de2362d3Smrg set dummy $deplib_matches; shift 9204de2362d3Smrg deplib_match=$1 92050d16fef4Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9206de2362d3Smrg func_append newdeplibs " $i" 9207de2362d3Smrg else 9208de2362d3Smrg droppeddeps=yes 9209de2362d3Smrg echo 9210de2362d3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9211de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 9212de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 9213de2362d3Smrg echo "*** shared version of the library, which I believe you do not have" 9214de2362d3Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 9215de2362d3Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 9216de2362d3Smrg fi 9217de2362d3Smrg fi 9218de2362d3Smrg ;; 9219de2362d3Smrg *) 9220de2362d3Smrg func_append newdeplibs " $i" 9221de2362d3Smrg ;; 9222de2362d3Smrg esac 9223de2362d3Smrg done 9224de2362d3Smrg else 9225de2362d3Smrg # Error occurred in the first compile. Let's try to salvage 9226de2362d3Smrg # the situation: Compile a separate program for each library. 9227de2362d3Smrg for i in $deplibs; do 9228de2362d3Smrg case $i in 9229de2362d3Smrg -l*) 9230de2362d3Smrg func_stripname -l '' "$i" 9231de2362d3Smrg name=$func_stripname_result 9232de2362d3Smrg $opt_dry_run || $RM conftest 9233de2362d3Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9234de2362d3Smrg ldd_output=`ldd conftest` 92350d16fef4Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9236de2362d3Smrg case " $predeps $postdeps " in 9237de2362d3Smrg *" $i "*) 9238de2362d3Smrg func_append newdeplibs " $i" 92390d16fef4Smrg i= 9240de2362d3Smrg ;; 9241de2362d3Smrg esac 9242de2362d3Smrg fi 92430d16fef4Smrg if test -n "$i"; then 9244de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9245de2362d3Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9246de2362d3Smrg set dummy $deplib_matches; shift 9247de2362d3Smrg deplib_match=$1 92480d16fef4Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9249de2362d3Smrg func_append newdeplibs " $i" 9250de2362d3Smrg else 9251de2362d3Smrg droppeddeps=yes 9252de2362d3Smrg echo 9253de2362d3Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9254de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 9255de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 9256de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 9257de2362d3Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 9258de2362d3Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9259de2362d3Smrg fi 9260de2362d3Smrg fi 9261de2362d3Smrg else 9262de2362d3Smrg droppeddeps=yes 9263de2362d3Smrg echo 9264de2362d3Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9265de2362d3Smrg echo "*** make it link in! You will probably need to install it or some" 9266de2362d3Smrg echo "*** library that it depends on before this library will be fully" 9267de2362d3Smrg echo "*** functional. Installing it before continuing would be even better." 9268de2362d3Smrg fi 9269de2362d3Smrg ;; 9270de2362d3Smrg *) 9271de2362d3Smrg func_append newdeplibs " $i" 9272de2362d3Smrg ;; 9273de2362d3Smrg esac 9274de2362d3Smrg done 9275de2362d3Smrg fi 9276de2362d3Smrg ;; 9277de2362d3Smrg file_magic*) 9278de2362d3Smrg set dummy $deplibs_check_method; shift 9279de2362d3Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9280de2362d3Smrg for a_deplib in $deplibs; do 9281de2362d3Smrg case $a_deplib in 9282de2362d3Smrg -l*) 9283de2362d3Smrg func_stripname -l '' "$a_deplib" 9284de2362d3Smrg name=$func_stripname_result 92850d16fef4Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9286de2362d3Smrg case " $predeps $postdeps " in 9287de2362d3Smrg *" $a_deplib "*) 9288de2362d3Smrg func_append newdeplibs " $a_deplib" 92890d16fef4Smrg a_deplib= 9290de2362d3Smrg ;; 9291de2362d3Smrg esac 9292de2362d3Smrg fi 92930d16fef4Smrg if test -n "$a_deplib"; then 9294de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9295de2362d3Smrg if test -n "$file_magic_glob"; then 9296de2362d3Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9297de2362d3Smrg else 9298de2362d3Smrg libnameglob=$libname 9299de2362d3Smrg fi 93000d16fef4Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9301de2362d3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 93020d16fef4Smrg if test yes = "$want_nocaseglob"; then 9303de2362d3Smrg shopt -s nocaseglob 9304de2362d3Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9305de2362d3Smrg $nocaseglob 9306de2362d3Smrg else 9307de2362d3Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9308de2362d3Smrg fi 9309de2362d3Smrg for potent_lib in $potential_libs; do 9310de2362d3Smrg # Follow soft links. 9311de2362d3Smrg if ls -lLd "$potent_lib" 2>/dev/null | 9312de2362d3Smrg $GREP " -> " >/dev/null; then 9313de2362d3Smrg continue 9314de2362d3Smrg fi 9315de2362d3Smrg # The statement above tries to avoid entering an 9316de2362d3Smrg # endless loop below, in case of cyclic links. 9317de2362d3Smrg # We might still enter an endless loop, since a link 9318de2362d3Smrg # loop can be closed while we follow links, 9319de2362d3Smrg # but so what? 93200d16fef4Smrg potlib=$potent_lib 9321de2362d3Smrg while test -h "$potlib" 2>/dev/null; do 93220d16fef4Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9323de2362d3Smrg case $potliblink in 93240d16fef4Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 93250d16fef4Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9326de2362d3Smrg esac 9327de2362d3Smrg done 9328de2362d3Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9329de2362d3Smrg $SED -e 10q | 9330de2362d3Smrg $EGREP "$file_magic_regex" > /dev/null; then 9331de2362d3Smrg func_append newdeplibs " $a_deplib" 93320d16fef4Smrg a_deplib= 9333de2362d3Smrg break 2 9334de2362d3Smrg fi 9335de2362d3Smrg done 9336de2362d3Smrg done 9337de2362d3Smrg fi 93380d16fef4Smrg if test -n "$a_deplib"; then 9339de2362d3Smrg droppeddeps=yes 9340de2362d3Smrg echo 9341de2362d3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9342de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 9343de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 9344de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 9345de2362d3Smrg echo "*** because I did check the linker path looking for a file starting" 93460d16fef4Smrg if test -z "$potlib"; then 9347de2362d3Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9348de2362d3Smrg else 9349de2362d3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9350de2362d3Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 9351de2362d3Smrg fi 9352de2362d3Smrg fi 9353de2362d3Smrg ;; 9354de2362d3Smrg *) 9355de2362d3Smrg # Add a -L argument. 9356de2362d3Smrg func_append newdeplibs " $a_deplib" 9357de2362d3Smrg ;; 9358de2362d3Smrg esac 9359de2362d3Smrg done # Gone through all deplibs. 9360de2362d3Smrg ;; 9361de2362d3Smrg match_pattern*) 9362de2362d3Smrg set dummy $deplibs_check_method; shift 9363de2362d3Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9364de2362d3Smrg for a_deplib in $deplibs; do 9365de2362d3Smrg case $a_deplib in 9366de2362d3Smrg -l*) 9367de2362d3Smrg func_stripname -l '' "$a_deplib" 9368de2362d3Smrg name=$func_stripname_result 93690d16fef4Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9370de2362d3Smrg case " $predeps $postdeps " in 9371de2362d3Smrg *" $a_deplib "*) 9372de2362d3Smrg func_append newdeplibs " $a_deplib" 93730d16fef4Smrg a_deplib= 9374de2362d3Smrg ;; 9375de2362d3Smrg esac 9376de2362d3Smrg fi 93770d16fef4Smrg if test -n "$a_deplib"; then 9378de2362d3Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9379de2362d3Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9380de2362d3Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9381de2362d3Smrg for potent_lib in $potential_libs; do 93820d16fef4Smrg potlib=$potent_lib # see symlink-check above in file_magic test 9383de2362d3Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9384de2362d3Smrg $EGREP "$match_pattern_regex" > /dev/null; then 9385de2362d3Smrg func_append newdeplibs " $a_deplib" 93860d16fef4Smrg a_deplib= 9387de2362d3Smrg break 2 9388de2362d3Smrg fi 9389de2362d3Smrg done 9390de2362d3Smrg done 9391de2362d3Smrg fi 93920d16fef4Smrg if test -n "$a_deplib"; then 9393de2362d3Smrg droppeddeps=yes 9394de2362d3Smrg echo 9395de2362d3Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9396de2362d3Smrg echo "*** I have the capability to make that library automatically link in when" 9397de2362d3Smrg echo "*** you link to this library. But I can only do this if you have a" 9398de2362d3Smrg echo "*** shared version of the library, which you do not appear to have" 9399de2362d3Smrg echo "*** because I did check the linker path looking for a file starting" 94000d16fef4Smrg if test -z "$potlib"; then 9401de2362d3Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9402de2362d3Smrg else 9403de2362d3Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9404de2362d3Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 9405de2362d3Smrg fi 9406de2362d3Smrg fi 9407de2362d3Smrg ;; 9408de2362d3Smrg *) 9409de2362d3Smrg # Add a -L argument. 9410de2362d3Smrg func_append newdeplibs " $a_deplib" 9411de2362d3Smrg ;; 9412de2362d3Smrg esac 9413de2362d3Smrg done # Gone through all deplibs. 9414de2362d3Smrg ;; 9415de2362d3Smrg none | unknown | *) 94160d16fef4Smrg newdeplibs= 9417de2362d3Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 94180d16fef4Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 94190d16fef4Smrg for i in $predeps $postdeps; do 9420de2362d3Smrg # can't use Xsed below, because $i might contain '/' 94210d16fef4Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9422de2362d3Smrg done 9423de2362d3Smrg fi 9424de2362d3Smrg case $tmp_deplibs in 9425de2362d3Smrg *[!\ \ ]*) 9426de2362d3Smrg echo 94270d16fef4Smrg if test none = "$deplibs_check_method"; then 9428de2362d3Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 9429de2362d3Smrg else 9430de2362d3Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 9431de2362d3Smrg fi 9432de2362d3Smrg echo "*** All declared inter-library dependencies are being dropped." 9433de2362d3Smrg droppeddeps=yes 9434de2362d3Smrg ;; 9435de2362d3Smrg esac 9436de2362d3Smrg ;; 9437de2362d3Smrg esac 9438de2362d3Smrg versuffix=$versuffix_save 9439de2362d3Smrg major=$major_save 9440de2362d3Smrg release=$release_save 9441de2362d3Smrg libname=$libname_save 9442de2362d3Smrg name=$name_save 9443de2362d3Smrg 9444de2362d3Smrg case $host in 9445de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9446de2362d3Smrg # On Rhapsody replace the C library with the System framework 9447de2362d3Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9448de2362d3Smrg ;; 9449de2362d3Smrg esac 9450de2362d3Smrg 94510d16fef4Smrg if test yes = "$droppeddeps"; then 94520d16fef4Smrg if test yes = "$module"; then 9453de2362d3Smrg echo 9454de2362d3Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 9455de2362d3Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9456de2362d3Smrg echo "*** a static module, that should work as long as the dlopening" 9457de2362d3Smrg echo "*** application is linked with the -dlopen flag." 9458de2362d3Smrg if test -z "$global_symbol_pipe"; then 9459de2362d3Smrg echo 9460de2362d3Smrg echo "*** However, this would only work if libtool was able to extract symbol" 94610d16fef4Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9462de2362d3Smrg echo "*** not find such a program. So, this module is probably useless." 94630d16fef4Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 9464de2362d3Smrg fi 94650d16fef4Smrg if test no = "$build_old_libs"; then 94660d16fef4Smrg oldlibs=$output_objdir/$libname.$libext 9467de2362d3Smrg build_libtool_libs=module 9468de2362d3Smrg build_old_libs=yes 9469de2362d3Smrg else 9470de2362d3Smrg build_libtool_libs=no 9471de2362d3Smrg fi 9472de2362d3Smrg else 9473de2362d3Smrg echo "*** The inter-library dependencies that have been dropped here will be" 9474de2362d3Smrg echo "*** automatically added whenever a program is linked with this library" 9475de2362d3Smrg echo "*** or is declared to -dlopen it." 9476de2362d3Smrg 94770d16fef4Smrg if test no = "$allow_undefined"; then 9478de2362d3Smrg echo 9479de2362d3Smrg echo "*** Since this library must not contain undefined symbols," 9480de2362d3Smrg echo "*** because either the platform does not support them or" 9481de2362d3Smrg echo "*** it was explicitly requested with -no-undefined," 9482de2362d3Smrg echo "*** libtool will only create a static version of it." 94830d16fef4Smrg if test no = "$build_old_libs"; then 94840d16fef4Smrg oldlibs=$output_objdir/$libname.$libext 9485de2362d3Smrg build_libtool_libs=module 9486de2362d3Smrg build_old_libs=yes 9487de2362d3Smrg else 9488de2362d3Smrg build_libtool_libs=no 9489de2362d3Smrg fi 9490de2362d3Smrg fi 9491de2362d3Smrg fi 9492de2362d3Smrg fi 9493de2362d3Smrg # Done checking deplibs! 9494de2362d3Smrg deplibs=$newdeplibs 9495de2362d3Smrg fi 9496de2362d3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9497de2362d3Smrg case $host in 9498de2362d3Smrg *-*-darwin*) 9499de2362d3Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9500de2362d3Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9501de2362d3Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9502de2362d3Smrg ;; 9503de2362d3Smrg esac 9504de2362d3Smrg 9505de2362d3Smrg # move library search paths that coincide with paths to not yet 9506de2362d3Smrg # installed libraries to the beginning of the library search list 9507de2362d3Smrg new_libs= 9508de2362d3Smrg for path in $notinst_path; do 9509de2362d3Smrg case " $new_libs " in 9510de2362d3Smrg *" -L$path/$objdir "*) ;; 9511de2362d3Smrg *) 9512de2362d3Smrg case " $deplibs " in 9513de2362d3Smrg *" -L$path/$objdir "*) 9514de2362d3Smrg func_append new_libs " -L$path/$objdir" ;; 9515de2362d3Smrg esac 9516de2362d3Smrg ;; 9517de2362d3Smrg esac 9518de2362d3Smrg done 9519de2362d3Smrg for deplib in $deplibs; do 9520de2362d3Smrg case $deplib in 9521de2362d3Smrg -L*) 9522de2362d3Smrg case " $new_libs " in 9523de2362d3Smrg *" $deplib "*) ;; 9524de2362d3Smrg *) func_append new_libs " $deplib" ;; 9525de2362d3Smrg esac 9526de2362d3Smrg ;; 9527de2362d3Smrg *) func_append new_libs " $deplib" ;; 9528de2362d3Smrg esac 9529de2362d3Smrg done 95300d16fef4Smrg deplibs=$new_libs 9531de2362d3Smrg 9532de2362d3Smrg # All the library-specific variables (install_libdir is set above). 9533de2362d3Smrg library_names= 9534de2362d3Smrg old_library= 9535de2362d3Smrg dlname= 9536de2362d3Smrg 9537de2362d3Smrg # Test again, we may have decided not to build it any more 95380d16fef4Smrg if test yes = "$build_libtool_libs"; then 95390d16fef4Smrg # Remove $wl instances when linking with ld. 9540de2362d3Smrg # FIXME: should test the right _cmds variable. 9541de2362d3Smrg case $archive_cmds in 9542de2362d3Smrg *\$LD\ *) wl= ;; 9543de2362d3Smrg esac 95440d16fef4Smrg if test yes = "$hardcode_into_libs"; then 9545de2362d3Smrg # Hardcode the library paths 9546de2362d3Smrg hardcode_libdirs= 9547de2362d3Smrg dep_rpath= 95480d16fef4Smrg rpath=$finalize_rpath 95490d16fef4Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9550de2362d3Smrg for libdir in $rpath; do 9551de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 9552de2362d3Smrg if test -n "$hardcode_libdir_separator"; then 9553de2362d3Smrg func_replace_sysroot "$libdir" 9554de2362d3Smrg libdir=$func_replace_sysroot_result 9555de2362d3Smrg if test -z "$hardcode_libdirs"; then 95560d16fef4Smrg hardcode_libdirs=$libdir 9557de2362d3Smrg else 9558de2362d3Smrg # Just accumulate the unique libdirs. 9559de2362d3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9560de2362d3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9561de2362d3Smrg ;; 9562de2362d3Smrg *) 9563de2362d3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9564de2362d3Smrg ;; 9565de2362d3Smrg esac 9566de2362d3Smrg fi 9567de2362d3Smrg else 9568de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 9569de2362d3Smrg func_append dep_rpath " $flag" 9570de2362d3Smrg fi 9571de2362d3Smrg elif test -n "$runpath_var"; then 9572de2362d3Smrg case "$perm_rpath " in 9573de2362d3Smrg *" $libdir "*) ;; 9574de2362d3Smrg *) func_append perm_rpath " $libdir" ;; 9575de2362d3Smrg esac 9576de2362d3Smrg fi 9577de2362d3Smrg done 9578de2362d3Smrg # Substitute the hardcoded libdirs into the rpath. 9579de2362d3Smrg if test -n "$hardcode_libdir_separator" && 9580de2362d3Smrg test -n "$hardcode_libdirs"; then 95810d16fef4Smrg libdir=$hardcode_libdirs 9582de2362d3Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9583de2362d3Smrg fi 9584de2362d3Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9585de2362d3Smrg # We should set the runpath_var. 9586de2362d3Smrg rpath= 9587de2362d3Smrg for dir in $perm_rpath; do 9588de2362d3Smrg func_append rpath "$dir:" 9589de2362d3Smrg done 9590de2362d3Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9591de2362d3Smrg fi 9592de2362d3Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9593de2362d3Smrg fi 9594de2362d3Smrg 95950d16fef4Smrg shlibpath=$finalize_shlibpath 95960d16fef4Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9597de2362d3Smrg if test -n "$shlibpath"; then 9598de2362d3Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9599de2362d3Smrg fi 9600de2362d3Smrg 9601de2362d3Smrg # Get the real and link names of the library. 9602de2362d3Smrg eval shared_ext=\"$shrext_cmds\" 9603de2362d3Smrg eval library_names=\"$library_names_spec\" 9604de2362d3Smrg set dummy $library_names 9605de2362d3Smrg shift 96060d16fef4Smrg realname=$1 9607de2362d3Smrg shift 9608de2362d3Smrg 9609de2362d3Smrg if test -n "$soname_spec"; then 9610de2362d3Smrg eval soname=\"$soname_spec\" 9611de2362d3Smrg else 96120d16fef4Smrg soname=$realname 9613de2362d3Smrg fi 9614de2362d3Smrg if test -z "$dlname"; then 9615de2362d3Smrg dlname=$soname 9616de2362d3Smrg fi 9617de2362d3Smrg 96180d16fef4Smrg lib=$output_objdir/$realname 9619de2362d3Smrg linknames= 9620de2362d3Smrg for link 9621de2362d3Smrg do 9622de2362d3Smrg func_append linknames " $link" 9623de2362d3Smrg done 9624de2362d3Smrg 9625de2362d3Smrg # Use standard objects if they are pic 9626de2362d3Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9627de2362d3Smrg test "X$libobjs" = "X " && libobjs= 9628de2362d3Smrg 9629de2362d3Smrg delfiles= 9630de2362d3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9631de2362d3Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 96320d16fef4Smrg export_symbols=$output_objdir/$libname.uexp 9633de2362d3Smrg func_append delfiles " $export_symbols" 9634de2362d3Smrg fi 9635de2362d3Smrg 9636de2362d3Smrg orig_export_symbols= 9637de2362d3Smrg case $host_os in 9638de2362d3Smrg cygwin* | mingw* | cegcc*) 9639de2362d3Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9640de2362d3Smrg # exporting using user supplied symfile 96410d16fef4Smrg func_dll_def_p "$export_symbols" || { 9642de2362d3Smrg # and it's NOT already a .def file. Must figure out 9643de2362d3Smrg # which of the given symbols are data symbols and tag 9644de2362d3Smrg # them as such. So, trigger use of export_symbols_cmds. 9645de2362d3Smrg # export_symbols gets reassigned inside the "prepare 9646de2362d3Smrg # the list of exported symbols" if statement, so the 9647de2362d3Smrg # include_expsyms logic still works. 96480d16fef4Smrg orig_export_symbols=$export_symbols 9649de2362d3Smrg export_symbols= 9650de2362d3Smrg always_export_symbols=yes 96510d16fef4Smrg } 9652de2362d3Smrg fi 9653de2362d3Smrg ;; 9654de2362d3Smrg esac 9655de2362d3Smrg 9656de2362d3Smrg # Prepare the list of exported symbols 9657de2362d3Smrg if test -z "$export_symbols"; then 96580d16fef4Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 96590d16fef4Smrg func_verbose "generating symbol list for '$libname.la'" 96600d16fef4Smrg export_symbols=$output_objdir/$libname.exp 9661de2362d3Smrg $opt_dry_run || $RM $export_symbols 9662de2362d3Smrg cmds=$export_symbols_cmds 96630d16fef4Smrg save_ifs=$IFS; IFS='~' 9664de2362d3Smrg for cmd1 in $cmds; do 96650d16fef4Smrg IFS=$save_ifs 9666de2362d3Smrg # Take the normal branch if the nm_file_list_spec branch 9667de2362d3Smrg # doesn't work or if tool conversion is not needed. 9668de2362d3Smrg case $nm_file_list_spec~$to_tool_file_cmd in 9669de2362d3Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9670de2362d3Smrg try_normal_branch=yes 9671de2362d3Smrg eval cmd=\"$cmd1\" 9672de2362d3Smrg func_len " $cmd" 9673de2362d3Smrg len=$func_len_result 9674de2362d3Smrg ;; 9675de2362d3Smrg *) 9676de2362d3Smrg try_normal_branch=no 9677de2362d3Smrg ;; 9678de2362d3Smrg esac 96790d16fef4Smrg if test yes = "$try_normal_branch" \ 9680de2362d3Smrg && { test "$len" -lt "$max_cmd_len" \ 9681de2362d3Smrg || test "$max_cmd_len" -le -1; } 9682de2362d3Smrg then 9683de2362d3Smrg func_show_eval "$cmd" 'exit $?' 9684de2362d3Smrg skipped_export=false 9685de2362d3Smrg elif test -n "$nm_file_list_spec"; then 9686de2362d3Smrg func_basename "$output" 9687de2362d3Smrg output_la=$func_basename_result 9688de2362d3Smrg save_libobjs=$libobjs 9689de2362d3Smrg save_output=$output 96900d16fef4Smrg output=$output_objdir/$output_la.nm 9691de2362d3Smrg func_to_tool_file "$output" 9692de2362d3Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 9693de2362d3Smrg func_append delfiles " $output" 9694de2362d3Smrg func_verbose "creating $NM input file list: $output" 9695de2362d3Smrg for obj in $save_libobjs; do 9696de2362d3Smrg func_to_tool_file "$obj" 9697de2362d3Smrg $ECHO "$func_to_tool_file_result" 9698de2362d3Smrg done > "$output" 9699de2362d3Smrg eval cmd=\"$cmd1\" 9700de2362d3Smrg func_show_eval "$cmd" 'exit $?' 9701de2362d3Smrg output=$save_output 9702de2362d3Smrg libobjs=$save_libobjs 9703de2362d3Smrg skipped_export=false 9704de2362d3Smrg else 9705de2362d3Smrg # The command line is too long to execute in one step. 9706de2362d3Smrg func_verbose "using reloadable object file for export list..." 9707de2362d3Smrg skipped_export=: 9708de2362d3Smrg # Break out early, otherwise skipped_export may be 9709de2362d3Smrg # set to false by a later but shorter cmd. 9710de2362d3Smrg break 9711de2362d3Smrg fi 9712de2362d3Smrg done 97130d16fef4Smrg IFS=$save_ifs 97140d16fef4Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9715de2362d3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9716de2362d3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9717de2362d3Smrg fi 9718de2362d3Smrg fi 9719de2362d3Smrg fi 9720de2362d3Smrg 9721de2362d3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 97220d16fef4Smrg tmp_export_symbols=$export_symbols 97230d16fef4Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9724de2362d3Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9725de2362d3Smrg fi 9726de2362d3Smrg 97270d16fef4Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9728de2362d3Smrg # The given exports_symbols file has to be filtered, so filter it. 97290d16fef4Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9730de2362d3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 97310d16fef4Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 9732de2362d3Smrg # though. Also, the filter scales superlinearly with the number of 9733de2362d3Smrg # global variables. join(1) would be nice here, but unfortunately 9734de2362d3Smrg # isn't a blessed tool. 9735de2362d3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9736de2362d3Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9737de2362d3Smrg export_symbols=$output_objdir/$libname.def 9738de2362d3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9739de2362d3Smrg fi 9740de2362d3Smrg 9741de2362d3Smrg tmp_deplibs= 9742de2362d3Smrg for test_deplib in $deplibs; do 9743de2362d3Smrg case " $convenience " in 9744de2362d3Smrg *" $test_deplib "*) ;; 9745de2362d3Smrg *) 9746de2362d3Smrg func_append tmp_deplibs " $test_deplib" 9747de2362d3Smrg ;; 9748de2362d3Smrg esac 9749de2362d3Smrg done 97500d16fef4Smrg deplibs=$tmp_deplibs 9751de2362d3Smrg 9752de2362d3Smrg if test -n "$convenience"; then 9753de2362d3Smrg if test -n "$whole_archive_flag_spec" && 97540d16fef4Smrg test yes = "$compiler_needs_object" && 9755de2362d3Smrg test -z "$libobjs"; then 9756de2362d3Smrg # extract the archives, so we have objects to list. 9757de2362d3Smrg # TODO: could optimize this to just extract one archive. 9758de2362d3Smrg whole_archive_flag_spec= 9759de2362d3Smrg fi 9760de2362d3Smrg if test -n "$whole_archive_flag_spec"; then 9761de2362d3Smrg save_libobjs=$libobjs 9762de2362d3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9763de2362d3Smrg test "X$libobjs" = "X " && libobjs= 9764de2362d3Smrg else 97650d16fef4Smrg gentop=$output_objdir/${outputname}x 9766de2362d3Smrg func_append generated " $gentop" 9767de2362d3Smrg 9768de2362d3Smrg func_extract_archives $gentop $convenience 9769de2362d3Smrg func_append libobjs " $func_extract_archives_result" 9770de2362d3Smrg test "X$libobjs" = "X " && libobjs= 9771de2362d3Smrg fi 9772de2362d3Smrg fi 9773de2362d3Smrg 97740d16fef4Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9775de2362d3Smrg eval flag=\"$thread_safe_flag_spec\" 9776de2362d3Smrg func_append linker_flags " $flag" 9777de2362d3Smrg fi 9778de2362d3Smrg 9779de2362d3Smrg # Make a backup of the uninstalled library when relinking 97800d16fef4Smrg if test relink = "$opt_mode"; then 9781de2362d3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9782de2362d3Smrg fi 9783de2362d3Smrg 9784de2362d3Smrg # Do each of the archive commands. 97850d16fef4Smrg if test yes = "$module" && test -n "$module_cmds"; then 9786de2362d3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9787de2362d3Smrg eval test_cmds=\"$module_expsym_cmds\" 9788de2362d3Smrg cmds=$module_expsym_cmds 9789de2362d3Smrg else 9790de2362d3Smrg eval test_cmds=\"$module_cmds\" 9791de2362d3Smrg cmds=$module_cmds 9792de2362d3Smrg fi 9793de2362d3Smrg else 9794de2362d3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 9795de2362d3Smrg eval test_cmds=\"$archive_expsym_cmds\" 9796de2362d3Smrg cmds=$archive_expsym_cmds 9797de2362d3Smrg else 9798de2362d3Smrg eval test_cmds=\"$archive_cmds\" 9799de2362d3Smrg cmds=$archive_cmds 9800de2362d3Smrg fi 9801de2362d3Smrg fi 9802de2362d3Smrg 98030d16fef4Smrg if test : != "$skipped_export" && 9804de2362d3Smrg func_len " $test_cmds" && 9805de2362d3Smrg len=$func_len_result && 9806de2362d3Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9807de2362d3Smrg : 9808de2362d3Smrg else 9809de2362d3Smrg # The command line is too long to link in one step, link piecewise 9810de2362d3Smrg # or, if using GNU ld and skipped_export is not :, use a linker 9811de2362d3Smrg # script. 9812de2362d3Smrg 9813de2362d3Smrg # Save the value of $output and $libobjs because we want to 9814de2362d3Smrg # use them later. If we have whole_archive_flag_spec, we 9815de2362d3Smrg # want to use save_libobjs as it was before 9816de2362d3Smrg # whole_archive_flag_spec was expanded, because we can't 9817de2362d3Smrg # assume the linker understands whole_archive_flag_spec. 9818de2362d3Smrg # This may have to be revisited, in case too many 9819de2362d3Smrg # convenience libraries get linked in and end up exceeding 9820de2362d3Smrg # the spec. 9821de2362d3Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 9822de2362d3Smrg save_libobjs=$libobjs 9823de2362d3Smrg fi 9824de2362d3Smrg save_output=$output 9825de2362d3Smrg func_basename "$output" 9826de2362d3Smrg output_la=$func_basename_result 9827de2362d3Smrg 9828de2362d3Smrg # Clear the reloadable object creation command queue and 9829de2362d3Smrg # initialize k to one. 9830de2362d3Smrg test_cmds= 9831de2362d3Smrg concat_cmds= 9832de2362d3Smrg objlist= 9833de2362d3Smrg last_robj= 9834de2362d3Smrg k=1 9835de2362d3Smrg 98360d16fef4Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 98370d16fef4Smrg output=$output_objdir/$output_la.lnkscript 9838de2362d3Smrg func_verbose "creating GNU ld script: $output" 9839de2362d3Smrg echo 'INPUT (' > $output 9840de2362d3Smrg for obj in $save_libobjs 9841de2362d3Smrg do 9842de2362d3Smrg func_to_tool_file "$obj" 9843de2362d3Smrg $ECHO "$func_to_tool_file_result" >> $output 9844de2362d3Smrg done 9845de2362d3Smrg echo ')' >> $output 9846de2362d3Smrg func_append delfiles " $output" 9847de2362d3Smrg func_to_tool_file "$output" 9848de2362d3Smrg output=$func_to_tool_file_result 98490d16fef4Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 98500d16fef4Smrg output=$output_objdir/$output_la.lnk 9851de2362d3Smrg func_verbose "creating linker input file list: $output" 9852de2362d3Smrg : > $output 9853de2362d3Smrg set x $save_libobjs 9854de2362d3Smrg shift 9855de2362d3Smrg firstobj= 98560d16fef4Smrg if test yes = "$compiler_needs_object"; then 9857de2362d3Smrg firstobj="$1 " 9858de2362d3Smrg shift 9859de2362d3Smrg fi 9860de2362d3Smrg for obj 9861de2362d3Smrg do 9862de2362d3Smrg func_to_tool_file "$obj" 9863de2362d3Smrg $ECHO "$func_to_tool_file_result" >> $output 9864de2362d3Smrg done 9865de2362d3Smrg func_append delfiles " $output" 9866de2362d3Smrg func_to_tool_file "$output" 9867de2362d3Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 9868de2362d3Smrg else 9869de2362d3Smrg if test -n "$save_libobjs"; then 9870de2362d3Smrg func_verbose "creating reloadable object files..." 98710d16fef4Smrg output=$output_objdir/$output_la-$k.$objext 9872de2362d3Smrg eval test_cmds=\"$reload_cmds\" 9873de2362d3Smrg func_len " $test_cmds" 9874de2362d3Smrg len0=$func_len_result 9875de2362d3Smrg len=$len0 9876de2362d3Smrg 9877de2362d3Smrg # Loop over the list of objects to be linked. 9878de2362d3Smrg for obj in $save_libobjs 9879de2362d3Smrg do 9880de2362d3Smrg func_len " $obj" 9881de2362d3Smrg func_arith $len + $func_len_result 9882de2362d3Smrg len=$func_arith_result 98830d16fef4Smrg if test -z "$objlist" || 9884de2362d3Smrg test "$len" -lt "$max_cmd_len"; then 9885de2362d3Smrg func_append objlist " $obj" 9886de2362d3Smrg else 9887de2362d3Smrg # The command $test_cmds is almost too long, add a 9888de2362d3Smrg # command to the queue. 98890d16fef4Smrg if test 1 -eq "$k"; then 9890de2362d3Smrg # The first file doesn't have a previous command to add. 9891de2362d3Smrg reload_objs=$objlist 9892de2362d3Smrg eval concat_cmds=\"$reload_cmds\" 9893de2362d3Smrg else 9894de2362d3Smrg # All subsequent reloadable object files will link in 9895de2362d3Smrg # the last one created. 9896de2362d3Smrg reload_objs="$objlist $last_robj" 9897de2362d3Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 9898de2362d3Smrg fi 98990d16fef4Smrg last_robj=$output_objdir/$output_la-$k.$objext 9900de2362d3Smrg func_arith $k + 1 9901de2362d3Smrg k=$func_arith_result 99020d16fef4Smrg output=$output_objdir/$output_la-$k.$objext 9903de2362d3Smrg objlist=" $obj" 9904de2362d3Smrg func_len " $last_robj" 9905de2362d3Smrg func_arith $len0 + $func_len_result 9906de2362d3Smrg len=$func_arith_result 9907de2362d3Smrg fi 9908de2362d3Smrg done 9909de2362d3Smrg # Handle the remaining objects by creating one last 9910de2362d3Smrg # reloadable object file. All subsequent reloadable object 9911de2362d3Smrg # files will link in the last one created. 9912de2362d3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9913de2362d3Smrg reload_objs="$objlist $last_robj" 99140d16fef4Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 9915de2362d3Smrg if test -n "$last_robj"; then 99160d16fef4Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9917de2362d3Smrg fi 9918de2362d3Smrg func_append delfiles " $output" 9919de2362d3Smrg 9920de2362d3Smrg else 9921de2362d3Smrg output= 9922de2362d3Smrg fi 9923de2362d3Smrg 99240d16fef4Smrg ${skipped_export-false} && { 99250d16fef4Smrg func_verbose "generating symbol list for '$libname.la'" 99260d16fef4Smrg export_symbols=$output_objdir/$libname.exp 9927de2362d3Smrg $opt_dry_run || $RM $export_symbols 9928de2362d3Smrg libobjs=$output 9929de2362d3Smrg # Append the command to create the export file. 9930de2362d3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9931de2362d3Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 9932de2362d3Smrg if test -n "$last_robj"; then 9933de2362d3Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9934de2362d3Smrg fi 99350d16fef4Smrg } 9936de2362d3Smrg 9937de2362d3Smrg test -n "$save_libobjs" && 9938de2362d3Smrg func_verbose "creating a temporary reloadable object file: $output" 9939de2362d3Smrg 9940de2362d3Smrg # Loop through the commands generated above and execute them. 99410d16fef4Smrg save_ifs=$IFS; IFS='~' 9942de2362d3Smrg for cmd in $concat_cmds; do 99430d16fef4Smrg IFS=$save_ifs 99440d16fef4Smrg $opt_quiet || { 9945de2362d3Smrg func_quote_for_expand "$cmd" 9946de2362d3Smrg eval "func_echo $func_quote_for_expand_result" 9947de2362d3Smrg } 9948de2362d3Smrg $opt_dry_run || eval "$cmd" || { 9949de2362d3Smrg lt_exit=$? 9950de2362d3Smrg 9951de2362d3Smrg # Restore the uninstalled library and exit 99520d16fef4Smrg if test relink = "$opt_mode"; then 9953de2362d3Smrg ( cd "$output_objdir" && \ 9954de2362d3Smrg $RM "${realname}T" && \ 9955de2362d3Smrg $MV "${realname}U" "$realname" ) 9956de2362d3Smrg fi 9957de2362d3Smrg 9958de2362d3Smrg exit $lt_exit 9959de2362d3Smrg } 9960de2362d3Smrg done 99610d16fef4Smrg IFS=$save_ifs 9962de2362d3Smrg 9963de2362d3Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 9964de2362d3Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9965de2362d3Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9966de2362d3Smrg fi 9967de2362d3Smrg fi 9968de2362d3Smrg 99690d16fef4Smrg ${skipped_export-false} && { 9970de2362d3Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 99710d16fef4Smrg tmp_export_symbols=$export_symbols 99720d16fef4Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9973de2362d3Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9974de2362d3Smrg fi 9975de2362d3Smrg 9976de2362d3Smrg if test -n "$orig_export_symbols"; then 9977de2362d3Smrg # The given exports_symbols file has to be filtered, so filter it. 99780d16fef4Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9979de2362d3Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 99800d16fef4Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 9981de2362d3Smrg # though. Also, the filter scales superlinearly with the number of 9982de2362d3Smrg # global variables. join(1) would be nice here, but unfortunately 9983de2362d3Smrg # isn't a blessed tool. 9984de2362d3Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9985de2362d3Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9986de2362d3Smrg export_symbols=$output_objdir/$libname.def 9987de2362d3Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9988de2362d3Smrg fi 99890d16fef4Smrg } 9990de2362d3Smrg 9991de2362d3Smrg libobjs=$output 9992de2362d3Smrg # Restore the value of output. 9993de2362d3Smrg output=$save_output 9994de2362d3Smrg 9995de2362d3Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 9996de2362d3Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9997de2362d3Smrg test "X$libobjs" = "X " && libobjs= 9998de2362d3Smrg fi 9999de2362d3Smrg # Expand the library linking commands again to reset the 10000de2362d3Smrg # value of $libobjs for piecewise linking. 10001de2362d3Smrg 10002de2362d3Smrg # Do each of the archive commands. 100030d16fef4Smrg if test yes = "$module" && test -n "$module_cmds"; then 10004de2362d3Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10005de2362d3Smrg cmds=$module_expsym_cmds 10006de2362d3Smrg else 10007de2362d3Smrg cmds=$module_cmds 10008de2362d3Smrg fi 10009de2362d3Smrg else 10010de2362d3Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10011de2362d3Smrg cmds=$archive_expsym_cmds 10012de2362d3Smrg else 10013de2362d3Smrg cmds=$archive_cmds 10014de2362d3Smrg fi 10015de2362d3Smrg fi 10016de2362d3Smrg fi 10017de2362d3Smrg 10018de2362d3Smrg if test -n "$delfiles"; then 10019de2362d3Smrg # Append the command to remove temporary files to $cmds. 10020de2362d3Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 10021de2362d3Smrg fi 10022de2362d3Smrg 10023de2362d3Smrg # Add any objects from preloaded convenience libraries 10024de2362d3Smrg if test -n "$dlprefiles"; then 100250d16fef4Smrg gentop=$output_objdir/${outputname}x 10026de2362d3Smrg func_append generated " $gentop" 10027de2362d3Smrg 10028de2362d3Smrg func_extract_archives $gentop $dlprefiles 10029de2362d3Smrg func_append libobjs " $func_extract_archives_result" 10030de2362d3Smrg test "X$libobjs" = "X " && libobjs= 10031de2362d3Smrg fi 10032de2362d3Smrg 100330d16fef4Smrg save_ifs=$IFS; IFS='~' 10034de2362d3Smrg for cmd in $cmds; do 100350d16fef4Smrg IFS=$sp$nl 10036de2362d3Smrg eval cmd=\"$cmd\" 100370d16fef4Smrg IFS=$save_ifs 100380d16fef4Smrg $opt_quiet || { 10039de2362d3Smrg func_quote_for_expand "$cmd" 10040de2362d3Smrg eval "func_echo $func_quote_for_expand_result" 10041de2362d3Smrg } 10042de2362d3Smrg $opt_dry_run || eval "$cmd" || { 10043de2362d3Smrg lt_exit=$? 10044de2362d3Smrg 10045de2362d3Smrg # Restore the uninstalled library and exit 100460d16fef4Smrg if test relink = "$opt_mode"; then 10047de2362d3Smrg ( cd "$output_objdir" && \ 10048de2362d3Smrg $RM "${realname}T" && \ 10049de2362d3Smrg $MV "${realname}U" "$realname" ) 10050de2362d3Smrg fi 10051de2362d3Smrg 10052de2362d3Smrg exit $lt_exit 10053de2362d3Smrg } 10054de2362d3Smrg done 100550d16fef4Smrg IFS=$save_ifs 10056de2362d3Smrg 10057de2362d3Smrg # Restore the uninstalled library and exit 100580d16fef4Smrg if test relink = "$opt_mode"; then 10059de2362d3Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10060de2362d3Smrg 10061de2362d3Smrg if test -n "$convenience"; then 10062de2362d3Smrg if test -z "$whole_archive_flag_spec"; then 10063de2362d3Smrg func_show_eval '${RM}r "$gentop"' 10064de2362d3Smrg fi 10065de2362d3Smrg fi 10066de2362d3Smrg 10067de2362d3Smrg exit $EXIT_SUCCESS 10068de2362d3Smrg fi 10069de2362d3Smrg 10070de2362d3Smrg # Create links to the real library. 10071de2362d3Smrg for linkname in $linknames; do 10072de2362d3Smrg if test "$realname" != "$linkname"; then 10073de2362d3Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10074de2362d3Smrg fi 10075de2362d3Smrg done 10076de2362d3Smrg 10077de2362d3Smrg # If -module or -export-dynamic was specified, set the dlname. 100780d16fef4Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 10079de2362d3Smrg # On all known operating systems, these are identical. 100800d16fef4Smrg dlname=$soname 10081de2362d3Smrg fi 10082de2362d3Smrg fi 10083de2362d3Smrg ;; 10084de2362d3Smrg 10085de2362d3Smrg obj) 100860d16fef4Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 100870d16fef4Smrg func_warning "'-dlopen' is ignored for objects" 10088de2362d3Smrg fi 10089de2362d3Smrg 10090de2362d3Smrg case " $deplibs" in 10091de2362d3Smrg *\ -l* | *\ -L*) 100920d16fef4Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 10093de2362d3Smrg esac 10094de2362d3Smrg 10095de2362d3Smrg test -n "$rpath" && \ 100960d16fef4Smrg func_warning "'-rpath' is ignored for objects" 10097de2362d3Smrg 10098de2362d3Smrg test -n "$xrpath" && \ 100990d16fef4Smrg func_warning "'-R' is ignored for objects" 10100de2362d3Smrg 10101de2362d3Smrg test -n "$vinfo" && \ 101020d16fef4Smrg func_warning "'-version-info' is ignored for objects" 10103de2362d3Smrg 10104de2362d3Smrg test -n "$release" && \ 101050d16fef4Smrg func_warning "'-release' is ignored for objects" 10106de2362d3Smrg 10107de2362d3Smrg case $output in 10108de2362d3Smrg *.lo) 10109de2362d3Smrg test -n "$objs$old_deplibs" && \ 101100d16fef4Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10111de2362d3Smrg 10112de2362d3Smrg libobj=$output 10113de2362d3Smrg func_lo2o "$libobj" 10114de2362d3Smrg obj=$func_lo2o_result 10115de2362d3Smrg ;; 10116de2362d3Smrg *) 10117de2362d3Smrg libobj= 101180d16fef4Smrg obj=$output 10119de2362d3Smrg ;; 10120de2362d3Smrg esac 10121de2362d3Smrg 10122de2362d3Smrg # Delete the old objects. 10123de2362d3Smrg $opt_dry_run || $RM $obj $libobj 10124de2362d3Smrg 10125de2362d3Smrg # Objects from convenience libraries. This assumes 10126de2362d3Smrg # single-version convenience libraries. Whenever we create 10127de2362d3Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 10128de2362d3Smrg # the extraction. 10129de2362d3Smrg reload_conv_objs= 10130de2362d3Smrg gentop= 101310d16fef4Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 101320d16fef4Smrg # whole_archive_flag_spec and hope we can get by with turning comma 101330d16fef4Smrg # into space. 101340d16fef4Smrg case $reload_cmds in 101350d16fef4Smrg *\$LD[\ \$]*) wl= ;; 101360d16fef4Smrg esac 10137de2362d3Smrg if test -n "$convenience"; then 10138de2362d3Smrg if test -n "$whole_archive_flag_spec"; then 10139de2362d3Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 101400d16fef4Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 101410d16fef4Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10142de2362d3Smrg else 101430d16fef4Smrg gentop=$output_objdir/${obj}x 10144de2362d3Smrg func_append generated " $gentop" 10145de2362d3Smrg 10146de2362d3Smrg func_extract_archives $gentop $convenience 10147de2362d3Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10148de2362d3Smrg fi 10149de2362d3Smrg fi 10150de2362d3Smrg 10151de2362d3Smrg # If we're not building shared, we need to use non_pic_objs 101520d16fef4Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10153de2362d3Smrg 10154de2362d3Smrg # Create the old-style object. 101550d16fef4Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10156de2362d3Smrg 101570d16fef4Smrg output=$obj 10158de2362d3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10159de2362d3Smrg 10160de2362d3Smrg # Exit if we aren't doing a library object file. 10161de2362d3Smrg if test -z "$libobj"; then 10162de2362d3Smrg if test -n "$gentop"; then 10163de2362d3Smrg func_show_eval '${RM}r "$gentop"' 10164de2362d3Smrg fi 10165de2362d3Smrg 10166de2362d3Smrg exit $EXIT_SUCCESS 10167de2362d3Smrg fi 10168de2362d3Smrg 101690d16fef4Smrg test yes = "$build_libtool_libs" || { 10170de2362d3Smrg if test -n "$gentop"; then 10171de2362d3Smrg func_show_eval '${RM}r "$gentop"' 10172de2362d3Smrg fi 10173de2362d3Smrg 10174de2362d3Smrg # Create an invalid libtool object if no PIC, so that we don't 10175de2362d3Smrg # accidentally link it into a program. 10176de2362d3Smrg # $show "echo timestamp > $libobj" 10177de2362d3Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10178de2362d3Smrg exit $EXIT_SUCCESS 101790d16fef4Smrg } 10180de2362d3Smrg 101810d16fef4Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10182de2362d3Smrg # Only do commands if we really have different PIC objects. 10183de2362d3Smrg reload_objs="$libobjs $reload_conv_objs" 101840d16fef4Smrg output=$libobj 10185de2362d3Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10186de2362d3Smrg fi 10187de2362d3Smrg 10188de2362d3Smrg if test -n "$gentop"; then 10189de2362d3Smrg func_show_eval '${RM}r "$gentop"' 10190de2362d3Smrg fi 10191de2362d3Smrg 10192de2362d3Smrg exit $EXIT_SUCCESS 10193de2362d3Smrg ;; 10194de2362d3Smrg 10195de2362d3Smrg prog) 10196de2362d3Smrg case $host in 10197de2362d3Smrg *cygwin*) func_stripname '' '.exe' "$output" 10198de2362d3Smrg output=$func_stripname_result.exe;; 10199de2362d3Smrg esac 10200de2362d3Smrg test -n "$vinfo" && \ 102010d16fef4Smrg func_warning "'-version-info' is ignored for programs" 10202de2362d3Smrg 10203de2362d3Smrg test -n "$release" && \ 102040d16fef4Smrg func_warning "'-release' is ignored for programs" 10205de2362d3Smrg 102060d16fef4Smrg $preload \ 102070d16fef4Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 102080d16fef4Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10209de2362d3Smrg 10210de2362d3Smrg case $host in 10211de2362d3Smrg *-*-rhapsody* | *-*-darwin1.[012]) 10212de2362d3Smrg # On Rhapsody replace the C library is the System framework 10213de2362d3Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10214de2362d3Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10215de2362d3Smrg ;; 10216de2362d3Smrg esac 10217de2362d3Smrg 10218de2362d3Smrg case $host in 10219de2362d3Smrg *-*-darwin*) 10220de2362d3Smrg # Don't allow lazy linking, it breaks C++ global constructors 10221de2362d3Smrg # But is supposedly fixed on 10.4 or later (yay!). 102220d16fef4Smrg if test CXX = "$tagname"; then 10223de2362d3Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10224de2362d3Smrg 10.[0123]) 102250d16fef4Smrg func_append compile_command " $wl-bind_at_load" 102260d16fef4Smrg func_append finalize_command " $wl-bind_at_load" 10227de2362d3Smrg ;; 10228de2362d3Smrg esac 10229de2362d3Smrg fi 10230de2362d3Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10231de2362d3Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10232de2362d3Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10233de2362d3Smrg ;; 10234de2362d3Smrg esac 10235de2362d3Smrg 10236de2362d3Smrg 10237de2362d3Smrg # move library search paths that coincide with paths to not yet 10238de2362d3Smrg # installed libraries to the beginning of the library search list 10239de2362d3Smrg new_libs= 10240de2362d3Smrg for path in $notinst_path; do 10241de2362d3Smrg case " $new_libs " in 10242de2362d3Smrg *" -L$path/$objdir "*) ;; 10243de2362d3Smrg *) 10244de2362d3Smrg case " $compile_deplibs " in 10245de2362d3Smrg *" -L$path/$objdir "*) 10246de2362d3Smrg func_append new_libs " -L$path/$objdir" ;; 10247de2362d3Smrg esac 10248de2362d3Smrg ;; 10249de2362d3Smrg esac 10250de2362d3Smrg done 10251de2362d3Smrg for deplib in $compile_deplibs; do 10252de2362d3Smrg case $deplib in 10253de2362d3Smrg -L*) 10254de2362d3Smrg case " $new_libs " in 10255de2362d3Smrg *" $deplib "*) ;; 10256de2362d3Smrg *) func_append new_libs " $deplib" ;; 10257de2362d3Smrg esac 10258de2362d3Smrg ;; 10259de2362d3Smrg *) func_append new_libs " $deplib" ;; 10260de2362d3Smrg esac 10261de2362d3Smrg done 102620d16fef4Smrg compile_deplibs=$new_libs 10263de2362d3Smrg 10264de2362d3Smrg 10265de2362d3Smrg func_append compile_command " $compile_deplibs" 10266de2362d3Smrg func_append finalize_command " $finalize_deplibs" 10267de2362d3Smrg 10268de2362d3Smrg if test -n "$rpath$xrpath"; then 10269de2362d3Smrg # If the user specified any rpath flags, then add them. 10270de2362d3Smrg for libdir in $rpath $xrpath; do 10271de2362d3Smrg # This is the magic to use -rpath. 10272de2362d3Smrg case "$finalize_rpath " in 10273de2362d3Smrg *" $libdir "*) ;; 10274de2362d3Smrg *) func_append finalize_rpath " $libdir" ;; 10275de2362d3Smrg esac 10276de2362d3Smrg done 10277de2362d3Smrg fi 10278de2362d3Smrg 10279de2362d3Smrg # Now hardcode the library paths 10280de2362d3Smrg rpath= 10281de2362d3Smrg hardcode_libdirs= 10282de2362d3Smrg for libdir in $compile_rpath $finalize_rpath; do 10283de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 10284de2362d3Smrg if test -n "$hardcode_libdir_separator"; then 10285de2362d3Smrg if test -z "$hardcode_libdirs"; then 102860d16fef4Smrg hardcode_libdirs=$libdir 10287de2362d3Smrg else 10288de2362d3Smrg # Just accumulate the unique libdirs. 10289de2362d3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10290de2362d3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10291de2362d3Smrg ;; 10292de2362d3Smrg *) 10293de2362d3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10294de2362d3Smrg ;; 10295de2362d3Smrg esac 10296de2362d3Smrg fi 10297de2362d3Smrg else 10298de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10299de2362d3Smrg func_append rpath " $flag" 10300de2362d3Smrg fi 10301de2362d3Smrg elif test -n "$runpath_var"; then 10302de2362d3Smrg case "$perm_rpath " in 10303de2362d3Smrg *" $libdir "*) ;; 10304de2362d3Smrg *) func_append perm_rpath " $libdir" ;; 10305de2362d3Smrg esac 10306de2362d3Smrg fi 10307de2362d3Smrg case $host in 10308de2362d3Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 103090d16fef4Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10310de2362d3Smrg case :$dllsearchpath: in 10311de2362d3Smrg *":$libdir:"*) ;; 10312de2362d3Smrg ::) dllsearchpath=$libdir;; 10313de2362d3Smrg *) func_append dllsearchpath ":$libdir";; 10314de2362d3Smrg esac 10315de2362d3Smrg case :$dllsearchpath: in 10316de2362d3Smrg *":$testbindir:"*) ;; 10317de2362d3Smrg ::) dllsearchpath=$testbindir;; 10318de2362d3Smrg *) func_append dllsearchpath ":$testbindir";; 10319de2362d3Smrg esac 10320de2362d3Smrg ;; 10321de2362d3Smrg esac 10322de2362d3Smrg done 10323de2362d3Smrg # Substitute the hardcoded libdirs into the rpath. 10324de2362d3Smrg if test -n "$hardcode_libdir_separator" && 10325de2362d3Smrg test -n "$hardcode_libdirs"; then 103260d16fef4Smrg libdir=$hardcode_libdirs 10327de2362d3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10328de2362d3Smrg fi 103290d16fef4Smrg compile_rpath=$rpath 10330de2362d3Smrg 10331de2362d3Smrg rpath= 10332de2362d3Smrg hardcode_libdirs= 10333de2362d3Smrg for libdir in $finalize_rpath; do 10334de2362d3Smrg if test -n "$hardcode_libdir_flag_spec"; then 10335de2362d3Smrg if test -n "$hardcode_libdir_separator"; then 10336de2362d3Smrg if test -z "$hardcode_libdirs"; then 103370d16fef4Smrg hardcode_libdirs=$libdir 10338de2362d3Smrg else 10339de2362d3Smrg # Just accumulate the unique libdirs. 10340de2362d3Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10341de2362d3Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10342de2362d3Smrg ;; 10343de2362d3Smrg *) 10344de2362d3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10345de2362d3Smrg ;; 10346de2362d3Smrg esac 10347de2362d3Smrg fi 10348de2362d3Smrg else 10349de2362d3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10350de2362d3Smrg func_append rpath " $flag" 10351de2362d3Smrg fi 10352de2362d3Smrg elif test -n "$runpath_var"; then 10353de2362d3Smrg case "$finalize_perm_rpath " in 10354de2362d3Smrg *" $libdir "*) ;; 10355de2362d3Smrg *) func_append finalize_perm_rpath " $libdir" ;; 10356de2362d3Smrg esac 10357de2362d3Smrg fi 10358de2362d3Smrg done 10359de2362d3Smrg # Substitute the hardcoded libdirs into the rpath. 10360de2362d3Smrg if test -n "$hardcode_libdir_separator" && 10361de2362d3Smrg test -n "$hardcode_libdirs"; then 103620d16fef4Smrg libdir=$hardcode_libdirs 10363de2362d3Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10364de2362d3Smrg fi 103650d16fef4Smrg finalize_rpath=$rpath 10366de2362d3Smrg 103670d16fef4Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10368de2362d3Smrg # Transform all the library objects into standard objects. 10369de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10370de2362d3Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10371de2362d3Smrg fi 10372de2362d3Smrg 103730d16fef4Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 10374de2362d3Smrg 10375de2362d3Smrg # template prelinking step 10376de2362d3Smrg if test -n "$prelink_cmds"; then 10377de2362d3Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 10378de2362d3Smrg fi 10379de2362d3Smrg 103800d16fef4Smrg wrappers_required=: 10381de2362d3Smrg case $host in 10382de2362d3Smrg *cegcc* | *mingw32ce*) 10383de2362d3Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 103840d16fef4Smrg wrappers_required=false 10385de2362d3Smrg ;; 10386de2362d3Smrg *cygwin* | *mingw* ) 103870d16fef4Smrg test yes = "$build_libtool_libs" || wrappers_required=false 10388de2362d3Smrg ;; 10389de2362d3Smrg *) 103900d16fef4Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 103910d16fef4Smrg wrappers_required=false 10392de2362d3Smrg fi 10393de2362d3Smrg ;; 10394de2362d3Smrg esac 103950d16fef4Smrg $wrappers_required || { 10396de2362d3Smrg # Replace the output file specification. 10397de2362d3Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 103980d16fef4Smrg link_command=$compile_command$compile_rpath 10399de2362d3Smrg 10400de2362d3Smrg # We have no uninstalled library dependencies, so finalize right now. 10401de2362d3Smrg exit_status=0 10402de2362d3Smrg func_show_eval "$link_command" 'exit_status=$?' 10403de2362d3Smrg 10404de2362d3Smrg if test -n "$postlink_cmds"; then 10405de2362d3Smrg func_to_tool_file "$output" 10406de2362d3Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10407de2362d3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10408de2362d3Smrg fi 10409de2362d3Smrg 10410de2362d3Smrg # Delete the generated files. 104110d16fef4Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 104120d16fef4Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10413de2362d3Smrg fi 10414de2362d3Smrg 10415de2362d3Smrg exit $exit_status 104160d16fef4Smrg } 10417de2362d3Smrg 10418de2362d3Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10419de2362d3Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10420de2362d3Smrg fi 10421de2362d3Smrg if test -n "$finalize_shlibpath"; then 10422de2362d3Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10423de2362d3Smrg fi 10424de2362d3Smrg 10425de2362d3Smrg compile_var= 10426de2362d3Smrg finalize_var= 10427de2362d3Smrg if test -n "$runpath_var"; then 10428de2362d3Smrg if test -n "$perm_rpath"; then 10429de2362d3Smrg # We should set the runpath_var. 10430de2362d3Smrg rpath= 10431de2362d3Smrg for dir in $perm_rpath; do 10432de2362d3Smrg func_append rpath "$dir:" 10433de2362d3Smrg done 10434de2362d3Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10435de2362d3Smrg fi 10436de2362d3Smrg if test -n "$finalize_perm_rpath"; then 10437de2362d3Smrg # We should set the runpath_var. 10438de2362d3Smrg rpath= 10439de2362d3Smrg for dir in $finalize_perm_rpath; do 10440de2362d3Smrg func_append rpath "$dir:" 10441de2362d3Smrg done 10442de2362d3Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10443de2362d3Smrg fi 10444de2362d3Smrg fi 10445de2362d3Smrg 104460d16fef4Smrg if test yes = "$no_install"; then 10447de2362d3Smrg # We don't need to create a wrapper script. 104480d16fef4Smrg link_command=$compile_var$compile_command$compile_rpath 10449de2362d3Smrg # Replace the output file specification. 10450de2362d3Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10451de2362d3Smrg # Delete the old output file. 10452de2362d3Smrg $opt_dry_run || $RM $output 10453de2362d3Smrg # Link the executable and exit 10454de2362d3Smrg func_show_eval "$link_command" 'exit $?' 10455de2362d3Smrg 10456de2362d3Smrg if test -n "$postlink_cmds"; then 10457de2362d3Smrg func_to_tool_file "$output" 10458de2362d3Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10459de2362d3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10460de2362d3Smrg fi 10461de2362d3Smrg 10462de2362d3Smrg exit $EXIT_SUCCESS 10463de2362d3Smrg fi 10464de2362d3Smrg 104650d16fef4Smrg case $hardcode_action,$fast_install in 104660d16fef4Smrg relink,*) 104670d16fef4Smrg # Fast installation is not supported 104680d16fef4Smrg link_command=$compile_var$compile_command$compile_rpath 104690d16fef4Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 10470de2362d3Smrg 104710d16fef4Smrg func_warning "this platform does not like uninstalled shared libraries" 104720d16fef4Smrg func_warning "'$output' will be relinked during installation" 104730d16fef4Smrg ;; 104740d16fef4Smrg *,yes) 104750d16fef4Smrg link_command=$finalize_var$compile_command$finalize_rpath 104760d16fef4Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 104770d16fef4Smrg ;; 104780d16fef4Smrg *,no) 104790d16fef4Smrg link_command=$compile_var$compile_command$compile_rpath 104800d16fef4Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 104810d16fef4Smrg ;; 104820d16fef4Smrg *,needless) 104830d16fef4Smrg link_command=$finalize_var$compile_command$finalize_rpath 104840d16fef4Smrg relink_command= 104850d16fef4Smrg ;; 104860d16fef4Smrg esac 10487de2362d3Smrg 10488de2362d3Smrg # Replace the output file specification. 10489de2362d3Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10490de2362d3Smrg 10491de2362d3Smrg # Delete the old output files. 10492de2362d3Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10493de2362d3Smrg 10494de2362d3Smrg func_show_eval "$link_command" 'exit $?' 10495de2362d3Smrg 10496de2362d3Smrg if test -n "$postlink_cmds"; then 10497de2362d3Smrg func_to_tool_file "$output_objdir/$outputname" 10498de2362d3Smrg 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'` 10499de2362d3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10500de2362d3Smrg fi 10501de2362d3Smrg 10502de2362d3Smrg # Now create the wrapper script. 10503de2362d3Smrg func_verbose "creating $output" 10504de2362d3Smrg 10505de2362d3Smrg # Quote the relink command for shipping. 10506de2362d3Smrg if test -n "$relink_command"; then 10507de2362d3Smrg # Preserve any variables that may affect compiler behavior 10508de2362d3Smrg for var in $variables_saved_for_relink; do 10509de2362d3Smrg if eval test -z \"\${$var+set}\"; then 10510de2362d3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10511de2362d3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10512de2362d3Smrg relink_command="$var=; export $var; $relink_command" 10513de2362d3Smrg else 10514de2362d3Smrg func_quote_for_eval "$var_value" 10515de2362d3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10516de2362d3Smrg fi 10517de2362d3Smrg done 10518de2362d3Smrg relink_command="(cd `pwd`; $relink_command)" 10519de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10520de2362d3Smrg fi 10521de2362d3Smrg 10522de2362d3Smrg # Only actually do things if not in dry run mode. 10523de2362d3Smrg $opt_dry_run || { 10524de2362d3Smrg # win32 will think the script is a binary if it has 10525de2362d3Smrg # a .exe suffix, so we strip it off here. 10526de2362d3Smrg case $output in 10527de2362d3Smrg *.exe) func_stripname '' '.exe' "$output" 10528de2362d3Smrg output=$func_stripname_result ;; 10529de2362d3Smrg esac 10530de2362d3Smrg # test for cygwin because mv fails w/o .exe extensions 10531de2362d3Smrg case $host in 10532de2362d3Smrg *cygwin*) 10533de2362d3Smrg exeext=.exe 10534de2362d3Smrg func_stripname '' '.exe' "$outputname" 10535de2362d3Smrg outputname=$func_stripname_result ;; 10536de2362d3Smrg *) exeext= ;; 10537de2362d3Smrg esac 10538de2362d3Smrg case $host in 10539de2362d3Smrg *cygwin* | *mingw* ) 10540de2362d3Smrg func_dirname_and_basename "$output" "" "." 10541de2362d3Smrg output_name=$func_basename_result 10542de2362d3Smrg output_path=$func_dirname_result 105430d16fef4Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 105440d16fef4Smrg cwrapper=$output_path/$output_name.exe 10545de2362d3Smrg $RM $cwrappersource $cwrapper 10546de2362d3Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10547de2362d3Smrg 10548de2362d3Smrg func_emit_cwrapperexe_src > $cwrappersource 10549de2362d3Smrg 10550de2362d3Smrg # The wrapper executable is built using the $host compiler, 10551de2362d3Smrg # because it contains $host paths and files. If cross- 10552de2362d3Smrg # compiling, it, like the target executable, must be 10553de2362d3Smrg # executed on the $host or under an emulation environment. 10554de2362d3Smrg $opt_dry_run || { 10555de2362d3Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10556de2362d3Smrg $STRIP $cwrapper 10557de2362d3Smrg } 10558de2362d3Smrg 10559de2362d3Smrg # Now, create the wrapper script for func_source use: 10560de2362d3Smrg func_ltwrapper_scriptname $cwrapper 10561de2362d3Smrg $RM $func_ltwrapper_scriptname_result 10562de2362d3Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10563de2362d3Smrg $opt_dry_run || { 10564de2362d3Smrg # note: this script will not be executed, so do not chmod. 105650d16fef4Smrg if test "x$build" = "x$host"; then 10566de2362d3Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10567de2362d3Smrg else 10568de2362d3Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 10569de2362d3Smrg fi 10570de2362d3Smrg } 10571de2362d3Smrg ;; 10572de2362d3Smrg * ) 10573de2362d3Smrg $RM $output 10574de2362d3Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10575de2362d3Smrg 10576de2362d3Smrg func_emit_wrapper no > $output 10577de2362d3Smrg chmod +x $output 10578de2362d3Smrg ;; 10579de2362d3Smrg esac 10580de2362d3Smrg } 10581de2362d3Smrg exit $EXIT_SUCCESS 10582de2362d3Smrg ;; 10583de2362d3Smrg esac 10584de2362d3Smrg 10585de2362d3Smrg # See if we need to build an old-fashioned archive. 10586de2362d3Smrg for oldlib in $oldlibs; do 10587de2362d3Smrg 105880d16fef4Smrg case $build_libtool_libs in 105890d16fef4Smrg convenience) 105900d16fef4Smrg oldobjs="$libobjs_save $symfileobj" 105910d16fef4Smrg addlibs=$convenience 10592de2362d3Smrg build_libtool_libs=no 105930d16fef4Smrg ;; 105940d16fef4Smrg module) 105950d16fef4Smrg oldobjs=$libobjs_save 105960d16fef4Smrg addlibs=$old_convenience 105970d16fef4Smrg build_libtool_libs=no 105980d16fef4Smrg ;; 105990d16fef4Smrg *) 10600de2362d3Smrg oldobjs="$old_deplibs $non_pic_objects" 106010d16fef4Smrg $preload && test -f "$symfileobj" \ 106020d16fef4Smrg && func_append oldobjs " $symfileobj" 106030d16fef4Smrg addlibs=$old_convenience 106040d16fef4Smrg ;; 106050d16fef4Smrg esac 10606de2362d3Smrg 10607de2362d3Smrg if test -n "$addlibs"; then 106080d16fef4Smrg gentop=$output_objdir/${outputname}x 10609de2362d3Smrg func_append generated " $gentop" 10610de2362d3Smrg 10611de2362d3Smrg func_extract_archives $gentop $addlibs 10612de2362d3Smrg func_append oldobjs " $func_extract_archives_result" 10613de2362d3Smrg fi 10614de2362d3Smrg 10615de2362d3Smrg # Do each command in the archive commands. 106160d16fef4Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10617de2362d3Smrg cmds=$old_archive_from_new_cmds 10618de2362d3Smrg else 10619de2362d3Smrg 10620de2362d3Smrg # Add any objects from preloaded convenience libraries 10621de2362d3Smrg if test -n "$dlprefiles"; then 106220d16fef4Smrg gentop=$output_objdir/${outputname}x 10623de2362d3Smrg func_append generated " $gentop" 10624de2362d3Smrg 10625de2362d3Smrg func_extract_archives $gentop $dlprefiles 10626de2362d3Smrg func_append oldobjs " $func_extract_archives_result" 10627de2362d3Smrg fi 10628de2362d3Smrg 10629de2362d3Smrg # POSIX demands no paths to be encoded in archives. We have 10630de2362d3Smrg # to avoid creating archives with duplicate basenames if we 10631de2362d3Smrg # might have to extract them afterwards, e.g., when creating a 10632de2362d3Smrg # static archive out of a convenience library, or when linking 10633de2362d3Smrg # the entirety of a libtool archive into another (currently 10634de2362d3Smrg # not supported by libtool). 10635de2362d3Smrg if (for obj in $oldobjs 10636de2362d3Smrg do 10637de2362d3Smrg func_basename "$obj" 10638de2362d3Smrg $ECHO "$func_basename_result" 10639de2362d3Smrg done | sort | sort -uc >/dev/null 2>&1); then 10640de2362d3Smrg : 10641de2362d3Smrg else 10642de2362d3Smrg echo "copying selected object files to avoid basename conflicts..." 106430d16fef4Smrg gentop=$output_objdir/${outputname}x 10644de2362d3Smrg func_append generated " $gentop" 10645de2362d3Smrg func_mkdir_p "$gentop" 10646de2362d3Smrg save_oldobjs=$oldobjs 10647de2362d3Smrg oldobjs= 10648de2362d3Smrg counter=1 10649de2362d3Smrg for obj in $save_oldobjs 10650de2362d3Smrg do 10651de2362d3Smrg func_basename "$obj" 106520d16fef4Smrg objbase=$func_basename_result 10653de2362d3Smrg case " $oldobjs " in 10654de2362d3Smrg " ") oldobjs=$obj ;; 10655de2362d3Smrg *[\ /]"$objbase "*) 10656de2362d3Smrg while :; do 10657de2362d3Smrg # Make sure we don't pick an alternate name that also 10658de2362d3Smrg # overlaps. 10659de2362d3Smrg newobj=lt$counter-$objbase 10660de2362d3Smrg func_arith $counter + 1 10661de2362d3Smrg counter=$func_arith_result 10662de2362d3Smrg case " $oldobjs " in 10663de2362d3Smrg *[\ /]"$newobj "*) ;; 10664de2362d3Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10665de2362d3Smrg esac 10666de2362d3Smrg done 10667de2362d3Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10668de2362d3Smrg func_append oldobjs " $gentop/$newobj" 10669de2362d3Smrg ;; 10670de2362d3Smrg *) func_append oldobjs " $obj" ;; 10671de2362d3Smrg esac 10672de2362d3Smrg done 10673de2362d3Smrg fi 10674de2362d3Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10675de2362d3Smrg tool_oldlib=$func_to_tool_file_result 10676de2362d3Smrg eval cmds=\"$old_archive_cmds\" 10677de2362d3Smrg 10678de2362d3Smrg func_len " $cmds" 10679de2362d3Smrg len=$func_len_result 10680de2362d3Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10681de2362d3Smrg cmds=$old_archive_cmds 10682de2362d3Smrg elif test -n "$archiver_list_spec"; then 10683de2362d3Smrg func_verbose "using command file archive linking..." 10684de2362d3Smrg for obj in $oldobjs 10685de2362d3Smrg do 10686de2362d3Smrg func_to_tool_file "$obj" 10687de2362d3Smrg $ECHO "$func_to_tool_file_result" 10688de2362d3Smrg done > $output_objdir/$libname.libcmd 10689de2362d3Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 10690de2362d3Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10691de2362d3Smrg cmds=$old_archive_cmds 10692de2362d3Smrg else 10693de2362d3Smrg # the command line is too long to link in one step, link in parts 10694de2362d3Smrg func_verbose "using piecewise archive linking..." 10695de2362d3Smrg save_RANLIB=$RANLIB 10696de2362d3Smrg RANLIB=: 10697de2362d3Smrg objlist= 10698de2362d3Smrg concat_cmds= 10699de2362d3Smrg save_oldobjs=$oldobjs 10700de2362d3Smrg oldobjs= 10701de2362d3Smrg # Is there a better way of finding the last object in the list? 10702de2362d3Smrg for obj in $save_oldobjs 10703de2362d3Smrg do 10704de2362d3Smrg last_oldobj=$obj 10705de2362d3Smrg done 10706de2362d3Smrg eval test_cmds=\"$old_archive_cmds\" 10707de2362d3Smrg func_len " $test_cmds" 10708de2362d3Smrg len0=$func_len_result 10709de2362d3Smrg len=$len0 10710de2362d3Smrg for obj in $save_oldobjs 10711de2362d3Smrg do 10712de2362d3Smrg func_len " $obj" 10713de2362d3Smrg func_arith $len + $func_len_result 10714de2362d3Smrg len=$func_arith_result 10715de2362d3Smrg func_append objlist " $obj" 10716de2362d3Smrg if test "$len" -lt "$max_cmd_len"; then 10717de2362d3Smrg : 10718de2362d3Smrg else 10719de2362d3Smrg # the above command should be used before it gets too long 10720de2362d3Smrg oldobjs=$objlist 107210d16fef4Smrg if test "$obj" = "$last_oldobj"; then 10722de2362d3Smrg RANLIB=$save_RANLIB 10723de2362d3Smrg fi 10724de2362d3Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 107250d16fef4Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10726de2362d3Smrg objlist= 10727de2362d3Smrg len=$len0 10728de2362d3Smrg fi 10729de2362d3Smrg done 10730de2362d3Smrg RANLIB=$save_RANLIB 10731de2362d3Smrg oldobjs=$objlist 107320d16fef4Smrg if test -z "$oldobjs"; then 10733de2362d3Smrg eval cmds=\"\$concat_cmds\" 10734de2362d3Smrg else 10735de2362d3Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10736de2362d3Smrg fi 10737de2362d3Smrg fi 10738de2362d3Smrg fi 10739de2362d3Smrg func_execute_cmds "$cmds" 'exit $?' 10740de2362d3Smrg done 10741de2362d3Smrg 10742de2362d3Smrg test -n "$generated" && \ 10743de2362d3Smrg func_show_eval "${RM}r$generated" 10744de2362d3Smrg 10745de2362d3Smrg # Now create the libtool archive. 10746de2362d3Smrg case $output in 10747de2362d3Smrg *.la) 10748de2362d3Smrg old_library= 107490d16fef4Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 10750de2362d3Smrg func_verbose "creating $output" 10751de2362d3Smrg 10752de2362d3Smrg # Preserve any variables that may affect compiler behavior 10753de2362d3Smrg for var in $variables_saved_for_relink; do 10754de2362d3Smrg if eval test -z \"\${$var+set}\"; then 10755de2362d3Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10756de2362d3Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10757de2362d3Smrg relink_command="$var=; export $var; $relink_command" 10758de2362d3Smrg else 10759de2362d3Smrg func_quote_for_eval "$var_value" 10760de2362d3Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10761de2362d3Smrg fi 10762de2362d3Smrg done 10763de2362d3Smrg # Quote the link command for shipping. 107640d16fef4Smrg relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 10765de2362d3Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 107660d16fef4Smrg if test yes = "$hardcode_automatic"; then 10767de2362d3Smrg relink_command= 10768de2362d3Smrg fi 10769de2362d3Smrg 10770de2362d3Smrg # Only create the output if not a dry run. 10771de2362d3Smrg $opt_dry_run || { 10772de2362d3Smrg for installed in no yes; do 107730d16fef4Smrg if test yes = "$installed"; then 10774de2362d3Smrg if test -z "$install_libdir"; then 10775de2362d3Smrg break 10776de2362d3Smrg fi 107770d16fef4Smrg output=$output_objdir/${outputname}i 10778de2362d3Smrg # Replace all uninstalled libtool libraries with the installed ones 10779de2362d3Smrg newdependency_libs= 10780de2362d3Smrg for deplib in $dependency_libs; do 10781de2362d3Smrg case $deplib in 10782de2362d3Smrg *.la) 10783de2362d3Smrg func_basename "$deplib" 107840d16fef4Smrg name=$func_basename_result 10785de2362d3Smrg func_resolve_sysroot "$deplib" 107860d16fef4Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 10787de2362d3Smrg test -z "$libdir" && \ 107880d16fef4Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 10789de2362d3Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 10790de2362d3Smrg ;; 10791de2362d3Smrg -L*) 10792de2362d3Smrg func_stripname -L '' "$deplib" 10793de2362d3Smrg func_replace_sysroot "$func_stripname_result" 10794de2362d3Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 10795de2362d3Smrg ;; 10796de2362d3Smrg -R*) 10797de2362d3Smrg func_stripname -R '' "$deplib" 10798de2362d3Smrg func_replace_sysroot "$func_stripname_result" 10799de2362d3Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 10800de2362d3Smrg ;; 10801de2362d3Smrg *) func_append newdependency_libs " $deplib" ;; 10802de2362d3Smrg esac 10803de2362d3Smrg done 108040d16fef4Smrg dependency_libs=$newdependency_libs 10805de2362d3Smrg newdlfiles= 10806de2362d3Smrg 10807de2362d3Smrg for lib in $dlfiles; do 10808de2362d3Smrg case $lib in 10809de2362d3Smrg *.la) 10810de2362d3Smrg func_basename "$lib" 108110d16fef4Smrg name=$func_basename_result 108120d16fef4Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10813de2362d3Smrg test -z "$libdir" && \ 108140d16fef4Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10815de2362d3Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 10816de2362d3Smrg ;; 10817de2362d3Smrg *) func_append newdlfiles " $lib" ;; 10818de2362d3Smrg esac 10819de2362d3Smrg done 108200d16fef4Smrg dlfiles=$newdlfiles 10821de2362d3Smrg newdlprefiles= 10822de2362d3Smrg for lib in $dlprefiles; do 10823de2362d3Smrg case $lib in 10824de2362d3Smrg *.la) 10825de2362d3Smrg # Only pass preopened files to the pseudo-archive (for 10826de2362d3Smrg # eventual linking with the app. that links it) if we 10827de2362d3Smrg # didn't already link the preopened objects directly into 10828de2362d3Smrg # the library: 10829de2362d3Smrg func_basename "$lib" 108300d16fef4Smrg name=$func_basename_result 108310d16fef4Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10832de2362d3Smrg test -z "$libdir" && \ 108330d16fef4Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10834de2362d3Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 10835de2362d3Smrg ;; 10836de2362d3Smrg esac 10837de2362d3Smrg done 108380d16fef4Smrg dlprefiles=$newdlprefiles 10839de2362d3Smrg else 10840de2362d3Smrg newdlfiles= 10841de2362d3Smrg for lib in $dlfiles; do 10842de2362d3Smrg case $lib in 108430d16fef4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10844de2362d3Smrg *) abs=`pwd`"/$lib" ;; 10845de2362d3Smrg esac 10846de2362d3Smrg func_append newdlfiles " $abs" 10847de2362d3Smrg done 108480d16fef4Smrg dlfiles=$newdlfiles 10849de2362d3Smrg newdlprefiles= 10850de2362d3Smrg for lib in $dlprefiles; do 10851de2362d3Smrg case $lib in 108520d16fef4Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10853de2362d3Smrg *) abs=`pwd`"/$lib" ;; 10854de2362d3Smrg esac 10855de2362d3Smrg func_append newdlprefiles " $abs" 10856de2362d3Smrg done 108570d16fef4Smrg dlprefiles=$newdlprefiles 10858de2362d3Smrg fi 10859de2362d3Smrg $RM $output 10860de2362d3Smrg # place dlname in correct position for cygwin 10861de2362d3Smrg # In fact, it would be nice if we could use this code for all target 10862de2362d3Smrg # systems that can't hard-code library paths into their executables 10863de2362d3Smrg # and that have no shared library path variable independent of PATH, 10864de2362d3Smrg # but it turns out we can't easily determine that from inspecting 10865de2362d3Smrg # libtool variables, so we have to hard-code the OSs to which it 10866de2362d3Smrg # applies here; at the moment, that means platforms that use the PE 10867de2362d3Smrg # object format with DLL files. See the long comment at the top of 10868de2362d3Smrg # tests/bindir.at for full details. 10869de2362d3Smrg tdlname=$dlname 10870de2362d3Smrg case $host,$output,$installed,$module,$dlname in 10871de2362d3Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 10872de2362d3Smrg # If a -bindir argument was supplied, place the dll there. 108730d16fef4Smrg if test -n "$bindir"; then 10874de2362d3Smrg func_relative_path "$install_libdir" "$bindir" 108750d16fef4Smrg tdlname=$func_relative_path_result/$dlname 10876de2362d3Smrg else 10877de2362d3Smrg # Otherwise fall back on heuristic. 10878de2362d3Smrg tdlname=../bin/$dlname 10879de2362d3Smrg fi 10880de2362d3Smrg ;; 10881de2362d3Smrg esac 10882de2362d3Smrg $ECHO > $output "\ 10883de2362d3Smrg# $outputname - a libtool library file 108840d16fef4Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 10885de2362d3Smrg# 10886de2362d3Smrg# Please DO NOT delete this file! 10887de2362d3Smrg# It is necessary for linking the library. 10888de2362d3Smrg 10889de2362d3Smrg# The name that we can dlopen(3). 10890de2362d3Smrgdlname='$tdlname' 10891de2362d3Smrg 10892de2362d3Smrg# Names of this library. 10893de2362d3Smrglibrary_names='$library_names' 10894de2362d3Smrg 10895de2362d3Smrg# The name of the static archive. 10896de2362d3Smrgold_library='$old_library' 10897de2362d3Smrg 108980d16fef4Smrg# Linker flags that cannot go in dependency_libs. 10899de2362d3Smrginherited_linker_flags='$new_inherited_linker_flags' 10900de2362d3Smrg 10901de2362d3Smrg# Libraries that this one depends upon. 10902de2362d3Smrgdependency_libs='$dependency_libs' 10903de2362d3Smrg 10904de2362d3Smrg# Names of additional weak libraries provided by this library 10905de2362d3Smrgweak_library_names='$weak_libs' 10906de2362d3Smrg 10907de2362d3Smrg# Version information for $libname. 10908de2362d3Smrgcurrent=$current 10909de2362d3Smrgage=$age 10910de2362d3Smrgrevision=$revision 10911de2362d3Smrg 10912de2362d3Smrg# Is this an already installed library? 10913de2362d3Smrginstalled=$installed 10914de2362d3Smrg 10915de2362d3Smrg# Should we warn about portability when linking against -modules? 10916de2362d3Smrgshouldnotlink=$module 10917de2362d3Smrg 10918de2362d3Smrg# Files to dlopen/dlpreopen 10919de2362d3Smrgdlopen='$dlfiles' 10920de2362d3Smrgdlpreopen='$dlprefiles' 10921de2362d3Smrg 10922de2362d3Smrg# Directory that this library needs to be installed in: 10923de2362d3Smrglibdir='$install_libdir'" 109240d16fef4Smrg if test no,yes = "$installed,$need_relink"; then 10925de2362d3Smrg $ECHO >> $output "\ 10926de2362d3Smrgrelink_command=\"$relink_command\"" 10927de2362d3Smrg fi 10928de2362d3Smrg done 10929de2362d3Smrg } 10930de2362d3Smrg 10931de2362d3Smrg # Do a symbolic link so that the libtool archive can be found in 10932de2362d3Smrg # LD_LIBRARY_PATH before the program is installed. 10933de2362d3Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 10934de2362d3Smrg ;; 10935de2362d3Smrg esac 10936de2362d3Smrg exit $EXIT_SUCCESS 10937de2362d3Smrg} 10938de2362d3Smrg 109390d16fef4Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 109400d16fef4Smrg func_mode_link ${1+"$@"} 109410d16fef4Smrgfi 10942de2362d3Smrg 10943de2362d3Smrg 10944de2362d3Smrg# func_mode_uninstall arg... 10945de2362d3Smrgfunc_mode_uninstall () 10946de2362d3Smrg{ 109470d16fef4Smrg $debug_cmd 109480d16fef4Smrg 109490d16fef4Smrg RM=$nonopt 10950de2362d3Smrg files= 109510d16fef4Smrg rmforce=false 10952de2362d3Smrg exit_status=0 10953de2362d3Smrg 10954de2362d3Smrg # This variable tells wrapper scripts just to set variables rather 10955de2362d3Smrg # than running their programs. 109560d16fef4Smrg libtool_install_magic=$magic 10957de2362d3Smrg 10958de2362d3Smrg for arg 10959de2362d3Smrg do 10960de2362d3Smrg case $arg in 109610d16fef4Smrg -f) func_append RM " $arg"; rmforce=: ;; 10962de2362d3Smrg -*) func_append RM " $arg" ;; 10963de2362d3Smrg *) func_append files " $arg" ;; 10964de2362d3Smrg esac 10965de2362d3Smrg done 10966de2362d3Smrg 10967de2362d3Smrg test -z "$RM" && \ 10968de2362d3Smrg func_fatal_help "you must specify an RM program" 10969de2362d3Smrg 10970de2362d3Smrg rmdirs= 10971de2362d3Smrg 10972de2362d3Smrg for file in $files; do 10973de2362d3Smrg func_dirname "$file" "" "." 109740d16fef4Smrg dir=$func_dirname_result 109750d16fef4Smrg if test . = "$dir"; then 109760d16fef4Smrg odir=$objdir 10977de2362d3Smrg else 109780d16fef4Smrg odir=$dir/$objdir 10979de2362d3Smrg fi 10980de2362d3Smrg func_basename "$file" 109810d16fef4Smrg name=$func_basename_result 109820d16fef4Smrg test uninstall = "$opt_mode" && odir=$dir 10983de2362d3Smrg 10984de2362d3Smrg # Remember odir for removal later, being careful to avoid duplicates 109850d16fef4Smrg if test clean = "$opt_mode"; then 10986de2362d3Smrg case " $rmdirs " in 10987de2362d3Smrg *" $odir "*) ;; 10988de2362d3Smrg *) func_append rmdirs " $odir" ;; 10989de2362d3Smrg esac 10990de2362d3Smrg fi 10991de2362d3Smrg 10992de2362d3Smrg # Don't error if the file doesn't exist and rm -f was used. 10993de2362d3Smrg if { test -L "$file"; } >/dev/null 2>&1 || 10994de2362d3Smrg { test -h "$file"; } >/dev/null 2>&1 || 10995de2362d3Smrg test -f "$file"; then 10996de2362d3Smrg : 10997de2362d3Smrg elif test -d "$file"; then 10998de2362d3Smrg exit_status=1 10999de2362d3Smrg continue 110000d16fef4Smrg elif $rmforce; then 11001de2362d3Smrg continue 11002de2362d3Smrg fi 11003de2362d3Smrg 110040d16fef4Smrg rmfiles=$file 11005de2362d3Smrg 11006de2362d3Smrg case $name in 11007de2362d3Smrg *.la) 11008de2362d3Smrg # Possibly a libtool archive, so verify it. 11009de2362d3Smrg if func_lalib_p "$file"; then 11010de2362d3Smrg func_source $dir/$name 11011de2362d3Smrg 11012de2362d3Smrg # Delete the libtool libraries and symlinks. 11013de2362d3Smrg for n in $library_names; do 11014de2362d3Smrg func_append rmfiles " $odir/$n" 11015de2362d3Smrg done 11016de2362d3Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11017de2362d3Smrg 110180d16fef4Smrg case $opt_mode in 11019de2362d3Smrg clean) 11020de2362d3Smrg case " $library_names " in 11021de2362d3Smrg *" $dlname "*) ;; 11022de2362d3Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11023de2362d3Smrg esac 11024de2362d3Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11025de2362d3Smrg ;; 11026de2362d3Smrg uninstall) 11027de2362d3Smrg if test -n "$library_names"; then 11028de2362d3Smrg # Do each command in the postuninstall commands. 110290d16fef4Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11030de2362d3Smrg fi 11031de2362d3Smrg 11032de2362d3Smrg if test -n "$old_library"; then 11033de2362d3Smrg # Do each command in the old_postuninstall commands. 110340d16fef4Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11035de2362d3Smrg fi 11036de2362d3Smrg # FIXME: should reinstall the best remaining shared library. 11037de2362d3Smrg ;; 11038de2362d3Smrg esac 11039de2362d3Smrg fi 11040de2362d3Smrg ;; 11041de2362d3Smrg 11042de2362d3Smrg *.lo) 11043de2362d3Smrg # Possibly a libtool object, so verify it. 11044de2362d3Smrg if func_lalib_p "$file"; then 11045de2362d3Smrg 11046de2362d3Smrg # Read the .lo file 11047de2362d3Smrg func_source $dir/$name 11048de2362d3Smrg 11049de2362d3Smrg # Add PIC object to the list of files to remove. 110500d16fef4Smrg if test -n "$pic_object" && test none != "$pic_object"; then 11051de2362d3Smrg func_append rmfiles " $dir/$pic_object" 11052de2362d3Smrg fi 11053de2362d3Smrg 11054de2362d3Smrg # Add non-PIC object to the list of files to remove. 110550d16fef4Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11056de2362d3Smrg func_append rmfiles " $dir/$non_pic_object" 11057de2362d3Smrg fi 11058de2362d3Smrg fi 11059de2362d3Smrg ;; 11060de2362d3Smrg 11061de2362d3Smrg *) 110620d16fef4Smrg if test clean = "$opt_mode"; then 11063de2362d3Smrg noexename=$name 11064de2362d3Smrg case $file in 11065de2362d3Smrg *.exe) 11066de2362d3Smrg func_stripname '' '.exe' "$file" 11067de2362d3Smrg file=$func_stripname_result 11068de2362d3Smrg func_stripname '' '.exe' "$name" 11069de2362d3Smrg noexename=$func_stripname_result 11070de2362d3Smrg # $file with .exe has already been added to rmfiles, 11071de2362d3Smrg # add $file without .exe 11072de2362d3Smrg func_append rmfiles " $file" 11073de2362d3Smrg ;; 11074de2362d3Smrg esac 11075de2362d3Smrg # Do a test to see if this is a libtool program. 11076de2362d3Smrg if func_ltwrapper_p "$file"; then 11077de2362d3Smrg if func_ltwrapper_executable_p "$file"; then 11078de2362d3Smrg func_ltwrapper_scriptname "$file" 11079de2362d3Smrg relink_command= 11080de2362d3Smrg func_source $func_ltwrapper_scriptname_result 11081de2362d3Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11082de2362d3Smrg else 11083de2362d3Smrg relink_command= 11084de2362d3Smrg func_source $dir/$noexename 11085de2362d3Smrg fi 11086de2362d3Smrg 11087de2362d3Smrg # note $name still contains .exe if it was in $file originally 11088de2362d3Smrg # as does the version of $file that was added into $rmfiles 110890d16fef4Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 110900d16fef4Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 11091de2362d3Smrg func_append rmfiles " $odir/lt-$name" 11092de2362d3Smrg fi 110930d16fef4Smrg if test "X$noexename" != "X$name"; then 110940d16fef4Smrg func_append rmfiles " $odir/lt-$noexename.c" 11095de2362d3Smrg fi 11096de2362d3Smrg fi 11097de2362d3Smrg fi 11098de2362d3Smrg ;; 11099de2362d3Smrg esac 11100de2362d3Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 11101de2362d3Smrg done 11102de2362d3Smrg 111030d16fef4Smrg # Try to remove the $objdir's in the directories where we deleted files 11104de2362d3Smrg for dir in $rmdirs; do 11105de2362d3Smrg if test -d "$dir"; then 11106de2362d3Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 11107de2362d3Smrg fi 11108de2362d3Smrg done 11109de2362d3Smrg 11110de2362d3Smrg exit $exit_status 11111de2362d3Smrg} 11112de2362d3Smrg 111130d16fef4Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 111140d16fef4Smrg func_mode_uninstall ${1+"$@"} 111150d16fef4Smrgfi 11116de2362d3Smrg 11117de2362d3Smrgtest -z "$opt_mode" && { 111180d16fef4Smrg help=$generic_help 11119de2362d3Smrg func_fatal_help "you must specify a MODE" 11120de2362d3Smrg} 11121de2362d3Smrg 11122de2362d3Smrgtest -z "$exec_cmd" && \ 111230d16fef4Smrg func_fatal_help "invalid operation mode '$opt_mode'" 11124de2362d3Smrg 11125de2362d3Smrgif test -n "$exec_cmd"; then 11126de2362d3Smrg eval exec "$exec_cmd" 11127de2362d3Smrg exit $EXIT_FAILURE 11128de2362d3Smrgfi 11129de2362d3Smrg 11130de2362d3Smrgexit $exit_status 11131de2362d3Smrg 11132de2362d3Smrg 11133de2362d3Smrg# The TAGs below are defined such that we never get into a situation 111340d16fef4Smrg# where we disable both kinds of libraries. Given conflicting 11135de2362d3Smrg# choices, we go for a static library, that is the most portable, 11136de2362d3Smrg# since we can't tell whether shared libraries were disabled because 11137de2362d3Smrg# the user asked for that or because the platform doesn't support 11138de2362d3Smrg# them. This is particularly important on AIX, because we don't 11139de2362d3Smrg# support having both static and shared libraries enabled at the same 11140de2362d3Smrg# time on that platform, so we default to a shared-only configuration. 11141de2362d3Smrg# If a disable-shared tag is given, we'll fallback to a static-only 11142de2362d3Smrg# configuration. But we'll never go from static-only to shared-only. 11143de2362d3Smrg 11144de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11145de2362d3Smrgbuild_libtool_libs=no 11146de2362d3Smrgbuild_old_libs=yes 11147de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 11148de2362d3Smrg 11149de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11150de2362d3Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11151de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-static 11152de2362d3Smrg 11153de2362d3Smrg# Local Variables: 11154de2362d3Smrg# mode:shell-script 11155de2362d3Smrg# sh-indentation:2 11156de2362d3Smrg# End: 11157