13b97a967SRobert Watson#! /bin/sh 23b97a967SRobert Watson## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 33b97a967SRobert Watson## by inline-source v2014-01-03.01 4eb336521SRobert Watson 5eb336521SRobert Watson# libtool (GNU libtool) 2.4.6 63b97a967SRobert Watson# Provide generalized library-building support services. 73b97a967SRobert Watson# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 83b97a967SRobert Watson 93b97a967SRobert Watson# Copyright (C) 1996-2015 Free Software Foundation, Inc. 103b97a967SRobert Watson# This is free software; see the source for copying conditions. There is NO 113b97a967SRobert Watson# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 123b97a967SRobert Watson 133b97a967SRobert Watson# GNU Libtool is free software; you can redistribute it and/or modify 143b97a967SRobert Watson# it under the terms of the GNU General Public License as published by 153b97a967SRobert Watson# the Free Software Foundation; either version 2 of the License, or 163b97a967SRobert Watson# (at your option) any later version. 173b97a967SRobert Watson# 183b97a967SRobert Watson# As a special exception to the GNU General Public License, 193b97a967SRobert Watson# if you distribute this file as part of a program or library that 203b97a967SRobert Watson# is built using GNU Libtool, you may include this file under the 213b97a967SRobert Watson# same distribution terms that you use for the rest of that program. 223b97a967SRobert Watson# 233b97a967SRobert Watson# GNU Libtool is distributed in the hope that it will be useful, but 243b97a967SRobert Watson# WITHOUT ANY WARRANTY; without even the implied warranty of 253b97a967SRobert Watson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 263b97a967SRobert Watson# General Public License for more details. 273b97a967SRobert Watson# 283b97a967SRobert Watson# You should have received a copy of the GNU General Public License 293b97a967SRobert Watson# along with this program. If not, see <http://www.gnu.org/licenses/>. 303b97a967SRobert Watson 313b97a967SRobert Watson 323b97a967SRobert WatsonPROGRAM=libtool 333b97a967SRobert WatsonPACKAGE=libtool 343b97a967SRobert WatsonVERSION=2.4.6 353b97a967SRobert Watsonpackage_revision=2.4.6 363b97a967SRobert Watson 373b97a967SRobert Watson 383b97a967SRobert Watson## ------ ## 393b97a967SRobert Watson## Usage. ## 403b97a967SRobert Watson## ------ ## 413b97a967SRobert Watson 423b97a967SRobert Watson# Run './libtool --help' for help with using this script from the 433b97a967SRobert Watson# command line. 443b97a967SRobert Watson 453b97a967SRobert Watson 46eb336521SRobert Watson## ------------------------------- ## 47eb336521SRobert Watson## User overridable command paths. ## 483b97a967SRobert Watson## ------------------------------- ## 49eb336521SRobert Watson 50eb336521SRobert Watson# After configure completes, it has a better idea of some of the 51eb336521SRobert Watson# shell tools we need than the defaults used by the functions shared 52eb336521SRobert Watson# with bootstrap, so set those here where they can still be over- 53eb336521SRobert Watson# ridden by the user, but otherwise take precedence. 54eb336521SRobert Watson 55eb336521SRobert Watson: ${AUTOCONF="autoconf"} 563b97a967SRobert Watson: ${AUTOMAKE="automake"} 57eb336521SRobert Watson 58eb336521SRobert Watson 593b97a967SRobert Watson## -------------------------- ## 60eb336521SRobert Watson## Source external libraries. ## 61eb336521SRobert Watson## -------------------------- ## 623b97a967SRobert Watson 633b97a967SRobert Watson# Much of our low-level functionality needs to be sourced from external 643b97a967SRobert Watson# libraries, which are installed to $pkgauxdir. 653b97a967SRobert Watson 663b97a967SRobert Watson# Set a version string for this script. 673b97a967SRobert Watsonscriptversion=2015-01-20.17; # UTC 683b97a967SRobert Watson 693b97a967SRobert Watson# General shell script boiler plate, and helper functions. 703b97a967SRobert Watson# Written by Gary V. Vaughan, 2004 713b97a967SRobert Watson 723b97a967SRobert Watson# Copyright (C) 2004-2015 Free Software Foundation, Inc. 733b97a967SRobert Watson# This is free software; see the source for copying conditions. There is NO 743b97a967SRobert Watson# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 753b97a967SRobert Watson 763b97a967SRobert Watson# This program is free software; you can redistribute it and/or modify 773b97a967SRobert Watson# it under the terms of the GNU General Public License as published by 783b97a967SRobert Watson# the Free Software Foundation; either version 3 of the License, or 793b97a967SRobert Watson# (at your option) any later version. 803b97a967SRobert Watson 813b97a967SRobert Watson# As a special exception to the GNU General Public License, if you distribute 823b97a967SRobert Watson# this file as part of a program or library that is built using GNU Libtool, 833b97a967SRobert Watson# you may include this file under the same distribution terms that you use 843b97a967SRobert Watson# for the rest of that program. 853b97a967SRobert Watson 863b97a967SRobert Watson# This program is distributed in the hope that it will be useful, 873b97a967SRobert Watson# but WITHOUT ANY WARRANTY; without even the implied warranty of 883b97a967SRobert Watson# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 893b97a967SRobert Watson# General Public License for more details. 903b97a967SRobert Watson 913b97a967SRobert Watson# You should have received a copy of the GNU General Public License 923b97a967SRobert Watson# along with this program. If not, see <http://www.gnu.org/licenses/>. 933b97a967SRobert Watson 943b97a967SRobert Watson# Please report bugs or propose patches to gary@gnu.org. 953b97a967SRobert Watson 963b97a967SRobert Watson 973b97a967SRobert Watson## ------ ## 983b97a967SRobert Watson## Usage. ## 993b97a967SRobert Watson## ------ ## 1003b97a967SRobert Watson 1013b97a967SRobert Watson# Evaluate this file near the top of your script to gain access to 1023b97a967SRobert Watson# the functions and variables defined here: 1033b97a967SRobert Watson# 1043b97a967SRobert Watson# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 1053b97a967SRobert Watson# 1063b97a967SRobert Watson# If you need to override any of the default environment variable 1073b97a967SRobert Watson# settings, do that before evaluating this file. 1083b97a967SRobert Watson 1093b97a967SRobert Watson 1103b97a967SRobert Watson## -------------------- ## 1113b97a967SRobert Watson## Shell normalisation. ## 1123b97a967SRobert Watson## -------------------- ## 1133b97a967SRobert Watson 1143b97a967SRobert Watson# Some shells need a little help to be as Bourne compatible as possible. 1153b97a967SRobert Watson# Before doing anything else, make sure all that help has been provided! 116eb336521SRobert Watson 117eb336521SRobert WatsonDUALCASE=1; export DUALCASE # for MKS sh 118eb336521SRobert Watsonif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 119eb336521SRobert Watson emulate sh 120eb336521SRobert Watson NULLCMD=: 121eb336521SRobert Watson # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 122eb336521SRobert Watson # is contrary to our usage. Disable this feature. 123eb336521SRobert Watson alias -g '${1+"$@"}'='"$@"' 1243b97a967SRobert Watson setopt NO_GLOB_SUBST 1253b97a967SRobert Watsonelse 1263b97a967SRobert Watson case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 1273b97a967SRobert Watsonfi 1283b97a967SRobert Watson 1293b97a967SRobert Watson# NLS nuisances: We save the old values in case they are required later. 1303b97a967SRobert Watson_G_user_locale= 1313b97a967SRobert Watson_G_safe_locale= 1323b97a967SRobert Watsonfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1333b97a967SRobert Watsondo 1343b97a967SRobert Watson eval "if test set = \"\${$_G_var+set}\"; then 1353b97a967SRobert Watson save_$_G_var=\$$_G_var 1363b97a967SRobert Watson $_G_var=C 1373b97a967SRobert Watson export $_G_var 1383b97a967SRobert Watson _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 1393b97a967SRobert Watson _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 1403b97a967SRobert Watson fi" 1413b97a967SRobert Watsondone 1423b97a967SRobert Watson 1433b97a967SRobert Watson# CDPATH. 1443b97a967SRobert Watson(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 145d9af45c4SRobert Watson 146d9af45c4SRobert Watson# Make sure IFS has a sensible default 1473b97a967SRobert Watsonsp=' ' 1483b97a967SRobert Watsonnl=' 149eb336521SRobert Watson' 150eb336521SRobert WatsonIFS="$sp $nl" 1513b97a967SRobert Watson 1523b97a967SRobert Watson# There are apparently some retarded systems that use ';' as a PATH separator! 1533b97a967SRobert Watsonif test "${PATH_SEPARATOR+set}" != set; then 1543b97a967SRobert Watson PATH_SEPARATOR=: 1553b97a967SRobert Watson (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 156d9af45c4SRobert Watson (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 157d9af45c4SRobert Watson PATH_SEPARATOR=';' 158d9af45c4SRobert Watson } 159d9af45c4SRobert Watsonfi 160d9af45c4SRobert Watson 161d9af45c4SRobert Watson 162d9af45c4SRobert Watson 163d9af45c4SRobert Watson## ------------------------- ## 164d9af45c4SRobert Watson## Locate command utilities. ## 165d9af45c4SRobert Watson## ------------------------- ## 166d9af45c4SRobert Watson 167d9af45c4SRobert Watson 168d9af45c4SRobert Watson# func_executable_p FILE 169d9af45c4SRobert Watson# ---------------------- 170d9af45c4SRobert Watson# Check that FILE is an executable regular file. 171d9af45c4SRobert Watsonfunc_executable_p () 172d9af45c4SRobert Watson{ 173d9af45c4SRobert Watson test -f "$1" && test -x "$1" 174d9af45c4SRobert Watson} 175d9af45c4SRobert Watson 176d9af45c4SRobert Watson 177d9af45c4SRobert Watson# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 178d9af45c4SRobert Watson# -------------------------------------------- 179d9af45c4SRobert Watson# Search for either a program that responds to --version with output 180d9af45c4SRobert Watson# containing "GNU", or else returned by CHECK_FUNC otherwise, by 181d9af45c4SRobert Watson# trying all the directories in PATH with each of the elements of 182d9af45c4SRobert Watson# PROGS_LIST. 183d9af45c4SRobert Watson# 184d9af45c4SRobert Watson# CHECK_FUNC should accept the path to a candidate program, and 185d9af45c4SRobert Watson# set $func_check_prog_result if it truncates its output less than 186d9af45c4SRobert Watson# $_G_path_prog_max characters. 187d9af45c4SRobert Watsonfunc_path_progs () 188d9af45c4SRobert Watson{ 189d9af45c4SRobert Watson _G_progs_list=$1 190d9af45c4SRobert Watson _G_check_func=$2 191d9af45c4SRobert Watson _G_PATH=${3-"$PATH"} 192d9af45c4SRobert Watson 1933b97a967SRobert Watson _G_path_prog_max=0 1943b97a967SRobert Watson _G_path_prog_found=false 1953b97a967SRobert Watson _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 1963b97a967SRobert Watson for _G_dir in $_G_PATH; do 1973b97a967SRobert Watson IFS=$_G_save_IFS 1983b97a967SRobert Watson test -z "$_G_dir" && _G_dir=. 1993b97a967SRobert Watson for _G_prog_name in $_G_progs_list; do 2003b97a967SRobert Watson for _exeext in '' .EXE; do 2013b97a967SRobert Watson _G_path_prog=$_G_dir/$_G_prog_name$_exeext 2023b97a967SRobert Watson func_executable_p "$_G_path_prog" || continue 2033b97a967SRobert Watson case `"$_G_path_prog" --version 2>&1` in 2043b97a967SRobert Watson *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 2053b97a967SRobert Watson *) $_G_check_func $_G_path_prog 2063b97a967SRobert Watson func_path_progs_result=$func_check_prog_result 2073b97a967SRobert Watson ;; 2083b97a967SRobert Watson esac 2093b97a967SRobert Watson $_G_path_prog_found && break 3 2103b97a967SRobert Watson done 211eb336521SRobert Watson done 212eb336521SRobert Watson done 213eb336521SRobert Watson IFS=$_G_save_IFS 214eb336521SRobert Watson test -z "$func_path_progs_result" && { 215eb336521SRobert Watson echo "no acceptable sed could be found in \$PATH" >&2 216eb336521SRobert Watson exit 1 217eb336521SRobert Watson } 218d9af45c4SRobert Watson} 219d9af45c4SRobert Watson 220d9af45c4SRobert Watson 221d9af45c4SRobert Watson# We want to be able to use the functions in this file before configure 2223b97a967SRobert Watson# has figured out where the best binaries are kept, which means we have 2233b97a967SRobert Watson# to search for them ourselves - except when the results are already set 2243b97a967SRobert Watson# where we skip the searches. 2253b97a967SRobert Watson 2263b97a967SRobert Watson# Unless the user overrides by setting SED, search the path for either GNU 2273b97a967SRobert Watson# sed, or the sed that truncates its output the least. 2283b97a967SRobert Watsontest -z "$SED" && { 2293b97a967SRobert Watson _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 2303b97a967SRobert Watson for _G_i in 1 2 3 4 5 6 7; do 2313b97a967SRobert Watson _G_sed_script=$_G_sed_script$nl$_G_sed_script 2323b97a967SRobert Watson done 2333b97a967SRobert Watson echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 2343b97a967SRobert Watson _G_sed_script= 2353b97a967SRobert Watson 2363b97a967SRobert Watson func_check_prog_sed () 2373b97a967SRobert Watson { 2383b97a967SRobert Watson _G_path_prog=$1 2393b97a967SRobert Watson 2403b97a967SRobert Watson _G_count=0 2413b97a967SRobert Watson printf 0123456789 >conftest.in 2423b97a967SRobert Watson while : 2433b97a967SRobert Watson do 2443b97a967SRobert Watson cat conftest.in conftest.in >conftest.tmp 2453b97a967SRobert Watson mv conftest.tmp conftest.in 2463b97a967SRobert Watson cp conftest.in conftest.nl 247d9af45c4SRobert Watson echo '' >> conftest.nl 248d9af45c4SRobert Watson "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 249d9af45c4SRobert Watson diff conftest.out conftest.nl >/dev/null 2>&1 || break 250d9af45c4SRobert Watson _G_count=`expr $_G_count + 1` 251d9af45c4SRobert Watson if test "$_G_count" -gt "$_G_path_prog_max"; then 252d9af45c4SRobert Watson # Best one so far, save it but keep looking for a better one 253d9af45c4SRobert Watson func_check_prog_result=$_G_path_prog 254d9af45c4SRobert Watson _G_path_prog_max=$_G_count 255d9af45c4SRobert Watson fi 256d9af45c4SRobert Watson # 10*(2^10) chars as input seems more than enough 257d9af45c4SRobert Watson test 10 -lt "$_G_count" && break 258d9af45c4SRobert Watson done 259d9af45c4SRobert Watson rm -f conftest.in conftest.tmp conftest.nl conftest.out 260d9af45c4SRobert Watson } 2613b97a967SRobert Watson 2623b97a967SRobert Watson func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 2633b97a967SRobert Watson rm -f conftest.sed 2643b97a967SRobert Watson SED=$func_path_progs_result 2653b97a967SRobert Watson} 2663b97a967SRobert Watson 2673b97a967SRobert Watson 2683b97a967SRobert Watson# Unless the user overrides by setting GREP, search the path for either GNU 2693b97a967SRobert Watson# grep, or the grep that truncates its output the least. 2703b97a967SRobert Watsontest -z "$GREP" && { 2713b97a967SRobert Watson func_check_prog_grep () 2723b97a967SRobert Watson { 2733b97a967SRobert Watson _G_path_prog=$1 2743b97a967SRobert Watson 2753b97a967SRobert Watson _G_count=0 2763b97a967SRobert Watson _G_path_prog_max=0 2773b97a967SRobert Watson printf 0123456789 >conftest.in 2783b97a967SRobert Watson while : 2793b97a967SRobert Watson do 2803b97a967SRobert Watson cat conftest.in conftest.in >conftest.tmp 2813b97a967SRobert Watson mv conftest.tmp conftest.in 2823b97a967SRobert Watson cp conftest.in conftest.nl 2833b97a967SRobert Watson echo 'GREP' >> conftest.nl 2843b97a967SRobert Watson "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 2853b97a967SRobert Watson diff conftest.out conftest.nl >/dev/null 2>&1 || break 2863b97a967SRobert Watson _G_count=`expr $_G_count + 1` 2873b97a967SRobert Watson if test "$_G_count" -gt "$_G_path_prog_max"; then 2883b97a967SRobert Watson # Best one so far, save it but keep looking for a better one 2893b97a967SRobert Watson func_check_prog_result=$_G_path_prog 2903b97a967SRobert Watson _G_path_prog_max=$_G_count 2913b97a967SRobert Watson fi 2923b97a967SRobert Watson # 10*(2^10) chars as input seems more than enough 2933b97a967SRobert Watson test 10 -lt "$_G_count" && break 2943b97a967SRobert Watson done 2953b97a967SRobert Watson rm -f conftest.in conftest.tmp conftest.nl conftest.out 2963b97a967SRobert Watson } 2973b97a967SRobert Watson 2983b97a967SRobert Watson func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 2993b97a967SRobert Watson GREP=$func_path_progs_result 3003b97a967SRobert Watson} 301d9af45c4SRobert Watson 302d9af45c4SRobert Watson 303d9af45c4SRobert Watson## ------------------------------- ## 304d9af45c4SRobert Watson## User overridable command paths. ## 305d9af45c4SRobert Watson## ------------------------------- ## 306d9af45c4SRobert Watson 307d9af45c4SRobert Watson# All uppercase variable names are used for environment variables. These 308d9af45c4SRobert Watson# variables can be overridden by the user before calling a script that 309d9af45c4SRobert Watson# uses them if a suitable command of that name is not already available 310d9af45c4SRobert Watson# in the command search PATH. 311d9af45c4SRobert Watson 312d9af45c4SRobert Watson: ${CP="cp -f"} 313d9af45c4SRobert Watson: ${ECHO="printf %s\n"} 314d9af45c4SRobert Watson: ${EGREP="$GREP -E"} 315d9af45c4SRobert Watson: ${FGREP="$GREP -F"} 3163b97a967SRobert Watson: ${LN_S="ln -s"} 3173b97a967SRobert Watson: ${MAKE="make"} 3183b97a967SRobert Watson: ${MKDIR="mkdir"} 3193b97a967SRobert Watson: ${MV="mv -f"} 3203b97a967SRobert Watson: ${RM="rm -f"} 3213b97a967SRobert Watson: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 3223b97a967SRobert Watson 3233b97a967SRobert Watson 3243b97a967SRobert Watson## -------------------- ## 3253b97a967SRobert Watson## Useful sed snippets. ## 3263b97a967SRobert Watson## -------------------- ## 3273b97a967SRobert Watson 3283b97a967SRobert Watsonsed_dirname='s|/[^/]*$||' 3293b97a967SRobert Watsonsed_basename='s|^.*/||' 3303b97a967SRobert Watson 3313b97a967SRobert Watson# Sed substitution that helps us do robust quoting. It backslashifies 3323b97a967SRobert Watson# metacharacters that are still active within double-quoted strings. 3333b97a967SRobert Watsonsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 3343b97a967SRobert Watson 3353b97a967SRobert Watson# Same as above, but do not quote variable references. 3363b97a967SRobert Watsonsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 3373b97a967SRobert Watson 3383b97a967SRobert Watson# Sed substitution that turns a string into a regex matching for the 3393b97a967SRobert Watson# string literally. 3403b97a967SRobert Watsonsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 3413b97a967SRobert Watson 3423b97a967SRobert Watson# Sed substitution that converts a w32 file name or path 3433b97a967SRobert Watson# that contains forward slashes, into one that contains 3443b97a967SRobert Watson# (escaped) backslashes. A very naive implementation. 3453b97a967SRobert Watsonsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3463b97a967SRobert Watson 3473b97a967SRobert Watson# Re-'\' parameter expansions in output of sed_double_quote_subst that 3483b97a967SRobert Watson# were '\'-ed in input to the same. If an odd number of '\' preceded a 3493b97a967SRobert Watson# '$' in input to sed_double_quote_subst, that '$' was protected from 3503b97a967SRobert Watson# expansion. Since each input '\' is now two '\'s, look for any number 3513b97a967SRobert Watson# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 3523b97a967SRobert Watson_G_bs='\\' 3533b97a967SRobert Watson_G_bs2='\\\\' 3543b97a967SRobert Watson_G_bs4='\\\\\\\\' 3553b97a967SRobert Watson_G_dollar='\$' 3563b97a967SRobert Watsonsed_double_backslash="\ 3573b97a967SRobert Watson s/$_G_bs4/&\\ 3583b97a967SRobert Watson/g 3593b97a967SRobert Watson s/^$_G_bs2$_G_dollar/$_G_bs&/ 3603b97a967SRobert Watson s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 3613b97a967SRobert Watson s/\n//g" 3623b97a967SRobert Watson 3633b97a967SRobert Watson 3643b97a967SRobert Watson## ----------------- ## 3653b97a967SRobert Watson## Global variables. ## 3663b97a967SRobert Watson## ----------------- ## 3673b97a967SRobert Watson 3683b97a967SRobert Watson# Except for the global variables explicitly listed below, the following 3693b97a967SRobert Watson# functions in the '^func_' namespace, and the '^require_' namespace 3703b97a967SRobert Watson# variables initialised in the 'Resource management' section, sourcing 3713b97a967SRobert Watson# this file will not pollute your global namespace with anything 3723b97a967SRobert Watson# else. There's no portable way to scope variables in Bourne shell 3733b97a967SRobert Watson# though, so actually running these functions will sometimes place 3743b97a967SRobert Watson# results into a variable named after the function, and often use 3753b97a967SRobert Watson# temporary variables in the '^_G_' namespace. If you are careful to 3763b97a967SRobert Watson# avoid using those namespaces casually in your sourcing script, things 377eb336521SRobert Watson# should continue to work as you expect. And, of course, you can freely 378eb336521SRobert Watson# overwrite any of the functions or variables defined here before 379eb336521SRobert Watson# calling anything to customize them. 380eb336521SRobert Watson 381eb336521SRobert WatsonEXIT_SUCCESS=0 382eb336521SRobert WatsonEXIT_FAILURE=1 383eb336521SRobert WatsonEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 384eb336521SRobert WatsonEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 385eb336521SRobert Watson 386eb336521SRobert Watson# Allow overriding, eg assuming that you follow the convention of 387eb336521SRobert Watson# putting '$debug_cmd' at the start of all your functions, you can get 3883b97a967SRobert Watson# bash to show function call trace with: 3893b97a967SRobert Watson# 3903b97a967SRobert Watson# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 3913b97a967SRobert Watsondebug_cmd=${debug_cmd-":"} 3923b97a967SRobert Watsonexit_cmd=: 393d9af45c4SRobert Watson 394d9af45c4SRobert Watson# By convention, finish your script with: 395d9af45c4SRobert Watson# 3963b97a967SRobert Watson# exit $exit_status 3973b97a967SRobert Watson# 3983b97a967SRobert Watson# so that you can set exit_status to non-zero if you want to indicate 3993b97a967SRobert Watson# something went wrong during execution without actually bailing out at 4003b97a967SRobert Watson# the point of failure. 4013b97a967SRobert Watsonexit_status=$EXIT_SUCCESS 4023b97a967SRobert Watson 4033b97a967SRobert Watson# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 4043b97a967SRobert Watson# is ksh but when the shell is invoked as "sh" and the current value of 4053b97a967SRobert Watson# the _XPG environment variable is not equal to 1 (one), the special 4063b97a967SRobert Watson# positional parameter $0, within a function call, is the name of the 4073b97a967SRobert Watson# function. 4083b97a967SRobert Watsonprogpath=$0 4093b97a967SRobert Watson 4103b97a967SRobert Watson# The name of this program. 4113b97a967SRobert Watsonprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 4123b97a967SRobert Watson 4133b97a967SRobert Watson# Make sure we have an absolute progpath for reexecution: 4143b97a967SRobert Watsoncase $progpath in 4153b97a967SRobert Watson [\\/]*|[A-Za-z]:\\*) ;; 4163b97a967SRobert Watson *[\\/]*) 4173b97a967SRobert Watson progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 4183b97a967SRobert Watson progdir=`cd "$progdir" && pwd` 4193b97a967SRobert Watson progpath=$progdir/$progname 4203b97a967SRobert Watson ;; 4213b97a967SRobert Watson *) 4223b97a967SRobert Watson _G_IFS=$IFS 4233b97a967SRobert Watson IFS=${PATH_SEPARATOR-:} 4243b97a967SRobert Watson for progdir in $PATH; do 4253b97a967SRobert Watson IFS=$_G_IFS 4263b97a967SRobert Watson test -x "$progdir/$progname" && break 4273b97a967SRobert Watson done 4283b97a967SRobert Watson IFS=$_G_IFS 4293b97a967SRobert Watson test -n "$progdir" || progdir=`pwd` 4303b97a967SRobert Watson progpath=$progdir/$progname 4313b97a967SRobert Watson ;; 4323b97a967SRobert Watsonesac 4333b97a967SRobert Watson 4343b97a967SRobert Watson 4353b97a967SRobert Watson## ----------------- ## 4363b97a967SRobert Watson## Standard options. ## 4373b97a967SRobert Watson## ----------------- ## 4383b97a967SRobert Watson 4393b97a967SRobert Watson# The following options affect the operation of the functions defined 4403b97a967SRobert Watson# below, and should be set appropriately depending on run-time para- 4413b97a967SRobert Watson# meters passed on the command line. 4423b97a967SRobert Watson 4433b97a967SRobert Watsonopt_dry_run=false 4443b97a967SRobert Watsonopt_quiet=false 4453b97a967SRobert Watsonopt_verbose=false 4463b97a967SRobert Watson 4473b97a967SRobert Watson# Categories 'all' and 'none' are always available. Append any others 4483b97a967SRobert Watson# you will pass as the first argument to func_warning from your own 4493b97a967SRobert Watson# code. 450d9af45c4SRobert Watsonwarning_categories= 451d9af45c4SRobert Watson 4523b97a967SRobert Watson# By default, display warnings according to 'opt_warning_types'. Set 4533b97a967SRobert Watson# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 4543b97a967SRobert Watson# treat the next displayed warning as a fatal error. 4553b97a967SRobert Watsonwarning_func=func_warn_and_continue 4563b97a967SRobert Watson 4573b97a967SRobert Watson# Set to 'all' to display all warnings, 'none' to suppress all 4583b97a967SRobert Watson# warnings, or a space delimited list of some subset of 4593b97a967SRobert Watson# 'warning_categories' to display only the listed warnings. 4603b97a967SRobert Watsonopt_warning_types=all 4613b97a967SRobert Watson 4623b97a967SRobert Watson 4633b97a967SRobert Watson## -------------------- ## 4643b97a967SRobert Watson## Resource management. ## 4653b97a967SRobert Watson## -------------------- ## 4663b97a967SRobert Watson 4673b97a967SRobert Watson# This section contains definitions for functions that each ensure a 4683b97a967SRobert Watson# particular resource (a file, or a non-empty configuration variable for 4693b97a967SRobert Watson# example) is available, and if appropriate to extract default values 4703b97a967SRobert Watson# from pertinent package files. Call them using their associated 4713b97a967SRobert Watson# 'require_*' variable to ensure that they are executed, at most, once. 4723b97a967SRobert Watson# 4733b97a967SRobert Watson# It's entirely deliberate that calling these functions can set 4743b97a967SRobert Watson# variables that don't obey the namespace limitations obeyed by the rest 4753b97a967SRobert Watson# of this file, in order that that they be as useful as possible to 4763b97a967SRobert Watson# callers. 4773b97a967SRobert Watson 4783b97a967SRobert Watson 4793b97a967SRobert Watson# require_term_colors 4803b97a967SRobert Watson# ------------------- 4813b97a967SRobert Watson# Allow display of bold text on terminals that support it. 4823b97a967SRobert Watsonrequire_term_colors=func_require_term_colors 4833b97a967SRobert Watsonfunc_require_term_colors () 4843b97a967SRobert Watson{ 4853b97a967SRobert Watson $debug_cmd 4863b97a967SRobert Watson 4873b97a967SRobert Watson test -t 1 && { 4883b97a967SRobert Watson # COLORTERM and USE_ANSI_COLORS environment variables take 4893b97a967SRobert Watson # precedence, because most terminfo databases neglect to describe 4903b97a967SRobert Watson # whether color sequences are supported. 4913b97a967SRobert Watson test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 4923b97a967SRobert Watson 4933b97a967SRobert Watson if test 1 = "$USE_ANSI_COLORS"; then 4943b97a967SRobert Watson # Standard ANSI escape sequences 4953b97a967SRobert Watson tc_reset='[0m' 4963b97a967SRobert Watson tc_bold='[1m'; tc_standout='[7m' 4973b97a967SRobert Watson tc_red='[31m'; tc_green='[32m' 4983b97a967SRobert Watson tc_blue='[34m'; tc_cyan='[36m' 4993b97a967SRobert Watson else 5003b97a967SRobert Watson # Otherwise trust the terminfo database after all. 5013b97a967SRobert Watson test -n "`tput sgr0 2>/dev/null`" && { 5023b97a967SRobert Watson tc_reset=`tput sgr0` 5033b97a967SRobert Watson test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 5043b97a967SRobert Watson tc_standout=$tc_bold 5053b97a967SRobert Watson test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 5063b97a967SRobert Watson test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 5073b97a967SRobert Watson test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 5083b97a967SRobert Watson test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 5093b97a967SRobert Watson test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 5103b97a967SRobert Watson } 5113b97a967SRobert Watson fi 5123b97a967SRobert Watson } 5133b97a967SRobert Watson 514eb336521SRobert Watson require_term_colors=: 515eb336521SRobert Watson} 516eb336521SRobert Watson 517eb336521SRobert Watson 518eb336521SRobert Watson## ----------------- ## 519eb336521SRobert Watson## Function library. ## 5203b97a967SRobert Watson## ----------------- ## 5213b97a967SRobert Watson 5223b97a967SRobert Watson# This section contains a variety of useful functions to call in your 5233b97a967SRobert Watson# scripts. Take note of the portable wrappers for features provided by 5243b97a967SRobert Watson# some modern shells, which will fall back to slower equivalents on 5253b97a967SRobert Watson# less featureful shells. 5263b97a967SRobert Watson 5273b97a967SRobert Watson 5283b97a967SRobert Watson# func_append VAR VALUE 5293b97a967SRobert Watson# --------------------- 5303b97a967SRobert Watson# Append VALUE onto the existing contents of VAR. 5313b97a967SRobert Watson 5323b97a967SRobert Watson # We should try to minimise forks, especially on Windows where they are 5333b97a967SRobert Watson # unreasonably slow, so skip the feature probes when bash or zsh are 5343b97a967SRobert Watson # being used: 5353b97a967SRobert Watson if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 5363b97a967SRobert Watson : ${_G_HAVE_ARITH_OP="yes"} 5373b97a967SRobert Watson : ${_G_HAVE_XSI_OPS="yes"} 5383b97a967SRobert Watson # The += operator was introduced in bash 3.1 5393b97a967SRobert Watson case $BASH_VERSION in 5403b97a967SRobert Watson [12].* | 3.0 | 3.0*) ;; 5413b97a967SRobert Watson *) 5423b97a967SRobert Watson : ${_G_HAVE_PLUSEQ_OP="yes"} 5433b97a967SRobert Watson ;; 5443b97a967SRobert Watson esac 5453b97a967SRobert Watson fi 5463b97a967SRobert Watson 5473b97a967SRobert Watson # _G_HAVE_PLUSEQ_OP 5483b97a967SRobert Watson # Can be empty, in which case the shell is probed, "yes" if += is 5493b97a967SRobert Watson # useable or anything else if it does not work. 5503b97a967SRobert Watson test -z "$_G_HAVE_PLUSEQ_OP" \ 5513b97a967SRobert Watson && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 5523b97a967SRobert Watson && _G_HAVE_PLUSEQ_OP=yes 5533b97a967SRobert Watson 5543b97a967SRobert Watsonif test yes = "$_G_HAVE_PLUSEQ_OP" 5553b97a967SRobert Watsonthen 5563b97a967SRobert Watson # This is an XSI compatible shell, allowing a faster implementation... 5573b97a967SRobert Watson eval 'func_append () 5583b97a967SRobert Watson { 5593b97a967SRobert Watson $debug_cmd 5603b97a967SRobert Watson 5613b97a967SRobert Watson eval "$1+=\$2" 5623b97a967SRobert Watson }' 5633b97a967SRobert Watsonelse 5643b97a967SRobert Watson # ...otherwise fall back to using expr, which is often a shell builtin. 5653b97a967SRobert Watson func_append () 5663b97a967SRobert Watson { 5673b97a967SRobert Watson $debug_cmd 5683b97a967SRobert Watson 569d9af45c4SRobert Watson eval "$1=\$$1\$2" 570d9af45c4SRobert Watson } 571d9af45c4SRobert Watsonfi 572d9af45c4SRobert Watson 573d9af45c4SRobert Watson 5743b97a967SRobert Watson# func_append_quoted VAR VALUE 5753b97a967SRobert Watson# ---------------------------- 5763b97a967SRobert Watson# Quote VALUE and append to the end of shell variable VAR, separated 5773b97a967SRobert Watson# by a space. 5783b97a967SRobert Watsonif test yes = "$_G_HAVE_PLUSEQ_OP"; then 5793b97a967SRobert Watson eval 'func_append_quoted () 5803b97a967SRobert Watson { 5813b97a967SRobert Watson $debug_cmd 5823b97a967SRobert Watson 5833b97a967SRobert Watson func_quote_for_eval "$2" 5843b97a967SRobert Watson eval "$1+=\\ \$func_quote_for_eval_result" 5853b97a967SRobert Watson }' 5863b97a967SRobert Watsonelse 5873b97a967SRobert Watson func_append_quoted () 5883b97a967SRobert Watson { 5893b97a967SRobert Watson $debug_cmd 5903b97a967SRobert Watson 5913b97a967SRobert Watson func_quote_for_eval "$2" 5923b97a967SRobert Watson eval "$1=\$$1\\ \$func_quote_for_eval_result" 5933b97a967SRobert Watson } 5943b97a967SRobert Watsonfi 5953b97a967SRobert Watson 5963b97a967SRobert Watson 5973b97a967SRobert Watson# func_append_uniq VAR VALUE 5983b97a967SRobert Watson# -------------------------- 5993b97a967SRobert Watson# Append unique VALUE onto the existing contents of VAR, assuming 6003b97a967SRobert Watson# entries are delimited by the first character of VALUE. For example: 6013b97a967SRobert Watson# 6023b97a967SRobert Watson# func_append_uniq options " --another-option option-argument" 6033b97a967SRobert Watson# 6043b97a967SRobert Watson# will only append to $options if " --another-option option-argument " 605d9af45c4SRobert Watson# is not already present somewhere in $options already (note spaces at 606d9af45c4SRobert Watson# each end implied by leading space in second argument). 607d9af45c4SRobert Watsonfunc_append_uniq () 608d9af45c4SRobert Watson{ 609d9af45c4SRobert Watson $debug_cmd 610d9af45c4SRobert Watson 611d9af45c4SRobert Watson eval _G_current_value='`$ECHO $'$1'`' 612d9af45c4SRobert Watson _G_delim=`expr "$2" : '\(.\)'` 613d9af45c4SRobert Watson 614d9af45c4SRobert Watson case $_G_delim$_G_current_value$_G_delim in 615d9af45c4SRobert Watson *"$2$_G_delim"*) ;; 616d9af45c4SRobert Watson *) func_append "$@" ;; 6173b97a967SRobert Watson esac 6183b97a967SRobert Watson} 6193b97a967SRobert Watson 6203b97a967SRobert Watson 6213b97a967SRobert Watson# func_arith TERM... 6223b97a967SRobert Watson# ------------------ 6233b97a967SRobert Watson# Set func_arith_result to the result of evaluating TERMs. 6243b97a967SRobert Watson test -z "$_G_HAVE_ARITH_OP" \ 6253b97a967SRobert Watson && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 6263b97a967SRobert Watson && _G_HAVE_ARITH_OP=yes 6273b97a967SRobert Watson 6283b97a967SRobert Watsonif test yes = "$_G_HAVE_ARITH_OP"; then 6293b97a967SRobert Watson eval 'func_arith () 6303b97a967SRobert Watson { 6313b97a967SRobert Watson $debug_cmd 6323b97a967SRobert Watson 6333b97a967SRobert Watson func_arith_result=$(( $* )) 6343b97a967SRobert Watson }' 6353b97a967SRobert Watsonelse 6363b97a967SRobert Watson func_arith () 6373b97a967SRobert Watson { 6383b97a967SRobert Watson $debug_cmd 6393b97a967SRobert Watson 6403b97a967SRobert Watson func_arith_result=`expr "$@"` 6413b97a967SRobert Watson } 6423b97a967SRobert Watsonfi 6433b97a967SRobert Watson 6443b97a967SRobert Watson 6453b97a967SRobert Watson# func_basename FILE 6463b97a967SRobert Watson# ------------------ 6473b97a967SRobert Watson# Set func_basename_result to FILE with everything up to and including 6483b97a967SRobert Watson# the last / stripped. 6493b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then 6503b97a967SRobert Watson # If this shell supports suffix pattern removal, then use it to avoid 6513b97a967SRobert Watson # forking. Hide the definitions single quotes in case the shell chokes 6523b97a967SRobert Watson # on unsupported syntax... 6533b97a967SRobert Watson _b='func_basename_result=${1##*/}' 6543b97a967SRobert Watson _d='case $1 in 6553b97a967SRobert Watson */*) func_dirname_result=${1%/*}$2 ;; 6563b97a967SRobert Watson * ) func_dirname_result=$3 ;; 6573b97a967SRobert Watson esac' 6583b97a967SRobert Watson 6593b97a967SRobert Watsonelse 6603b97a967SRobert Watson # ...otherwise fall back to using sed. 6613b97a967SRobert Watson _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 6623b97a967SRobert Watson _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 6633b97a967SRobert Watson if test "X$func_dirname_result" = "X$1"; then 6643b97a967SRobert Watson func_dirname_result=$3 6653b97a967SRobert Watson else 6663b97a967SRobert Watson func_append func_dirname_result "$2" 6673b97a967SRobert Watson fi' 6683b97a967SRobert Watsonfi 6693b97a967SRobert Watson 6703b97a967SRobert Watsoneval 'func_basename () 6713b97a967SRobert Watson{ 6723b97a967SRobert Watson $debug_cmd 6733b97a967SRobert Watson 6743b97a967SRobert Watson '"$_b"' 6753b97a967SRobert Watson}' 6763b97a967SRobert Watson 6773b97a967SRobert Watson 6783b97a967SRobert Watson# func_dirname FILE APPEND NONDIR_REPLACEMENT 6793b97a967SRobert Watson# ------------------------------------------- 6803b97a967SRobert Watson# Compute the dirname of FILE. If nonempty, add APPEND to the result, 6813b97a967SRobert Watson# otherwise set result to NONDIR_REPLACEMENT. 6823b97a967SRobert Watsoneval 'func_dirname () 6833b97a967SRobert Watson{ 6843b97a967SRobert Watson $debug_cmd 6853b97a967SRobert Watson 6863b97a967SRobert Watson '"$_d"' 6873b97a967SRobert Watson}' 6883b97a967SRobert Watson 6893b97a967SRobert Watson 6903b97a967SRobert Watson# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 6913b97a967SRobert Watson# -------------------------------------------------------- 6923b97a967SRobert Watson# Perform func_basename and func_dirname in a single function 6933b97a967SRobert Watson# call: 6943b97a967SRobert Watson# dirname: Compute the dirname of FILE. If nonempty, 6953b97a967SRobert Watson# add APPEND to the result, otherwise set result 6963b97a967SRobert Watson# to NONDIR_REPLACEMENT. 6973b97a967SRobert Watson# value returned in "$func_dirname_result" 6983b97a967SRobert Watson# basename: Compute filename of FILE. 6993b97a967SRobert Watson# value retuned in "$func_basename_result" 7003b97a967SRobert Watson# For efficiency, we do not delegate to the functions above but instead 7013b97a967SRobert Watson# duplicate the functionality here. 7023b97a967SRobert Watsoneval 'func_dirname_and_basename () 7033b97a967SRobert Watson{ 7043b97a967SRobert Watson $debug_cmd 7053b97a967SRobert Watson 7063b97a967SRobert Watson '"$_b"' 7073b97a967SRobert Watson '"$_d"' 7083b97a967SRobert Watson}' 7093b97a967SRobert Watson 7103b97a967SRobert Watson 7113b97a967SRobert Watson# func_echo ARG... 7123b97a967SRobert Watson# ---------------- 7133b97a967SRobert Watson# Echo program name prefixed message. 7143b97a967SRobert Watsonfunc_echo () 7153b97a967SRobert Watson{ 7163b97a967SRobert Watson $debug_cmd 7173b97a967SRobert Watson 7183b97a967SRobert Watson _G_message=$* 7193b97a967SRobert Watson 7203b97a967SRobert Watson func_echo_IFS=$IFS 7213b97a967SRobert Watson IFS=$nl 7223b97a967SRobert Watson for _G_line in $_G_message; do 7233b97a967SRobert Watson IFS=$func_echo_IFS 7243b97a967SRobert Watson $ECHO "$progname: $_G_line" 7253b97a967SRobert Watson done 7263b97a967SRobert Watson IFS=$func_echo_IFS 7273b97a967SRobert Watson} 7283b97a967SRobert Watson 7293b97a967SRobert Watson 7303b97a967SRobert Watson# func_echo_all ARG... 7313b97a967SRobert Watson# -------------------- 7323b97a967SRobert Watson# Invoke $ECHO with all args, space-separated. 7333b97a967SRobert Watsonfunc_echo_all () 7343b97a967SRobert Watson{ 7353b97a967SRobert Watson $ECHO "$*" 7363b97a967SRobert Watson} 7373b97a967SRobert Watson 7383b97a967SRobert Watson 7393b97a967SRobert Watson# func_echo_infix_1 INFIX ARG... 7403b97a967SRobert Watson# ------------------------------ 7413b97a967SRobert Watson# Echo program name, followed by INFIX on the first line, with any 7423b97a967SRobert Watson# additional lines not showing INFIX. 7433b97a967SRobert Watsonfunc_echo_infix_1 () 7443b97a967SRobert Watson{ 7453b97a967SRobert Watson $debug_cmd 7463b97a967SRobert Watson 7473b97a967SRobert Watson $require_term_colors 7483b97a967SRobert Watson 7493b97a967SRobert Watson _G_infix=$1; shift 7503b97a967SRobert Watson _G_indent=$_G_infix 7513b97a967SRobert Watson _G_prefix="$progname: $_G_infix: " 7523b97a967SRobert Watson _G_message=$* 7533b97a967SRobert Watson 7543b97a967SRobert Watson # Strip color escape sequences before counting printable length 7553b97a967SRobert Watson for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 7563b97a967SRobert Watson do 7573b97a967SRobert Watson test -n "$_G_tc" && { 7583b97a967SRobert Watson _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 7593b97a967SRobert Watson _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 7603b97a967SRobert Watson } 7613b97a967SRobert Watson done 7623b97a967SRobert Watson _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 7633b97a967SRobert Watson 7643b97a967SRobert Watson func_echo_infix_1_IFS=$IFS 7653b97a967SRobert Watson IFS=$nl 7663b97a967SRobert Watson for _G_line in $_G_message; do 7673b97a967SRobert Watson IFS=$func_echo_infix_1_IFS 7683b97a967SRobert Watson $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 7693b97a967SRobert Watson _G_prefix=$_G_indent 7703b97a967SRobert Watson done 7713b97a967SRobert Watson IFS=$func_echo_infix_1_IFS 7723b97a967SRobert Watson} 7733b97a967SRobert Watson 7743b97a967SRobert Watson 7753b97a967SRobert Watson# func_error ARG... 7763b97a967SRobert Watson# ----------------- 7773b97a967SRobert Watson# Echo program name prefixed message to standard error. 7783b97a967SRobert Watsonfunc_error () 7793b97a967SRobert Watson{ 7803b97a967SRobert Watson $debug_cmd 7813b97a967SRobert Watson 7823b97a967SRobert Watson $require_term_colors 7833b97a967SRobert Watson 7843b97a967SRobert Watson func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 7853b97a967SRobert Watson} 7863b97a967SRobert Watson 7873b97a967SRobert Watson 7883b97a967SRobert Watson# func_fatal_error ARG... 7893b97a967SRobert Watson# ----------------------- 7903b97a967SRobert Watson# Echo program name prefixed message to standard error, and exit. 7913b97a967SRobert Watsonfunc_fatal_error () 7923b97a967SRobert Watson{ 7933b97a967SRobert Watson $debug_cmd 7943b97a967SRobert Watson 7953b97a967SRobert Watson func_error "$*" 7963b97a967SRobert Watson exit $EXIT_FAILURE 7973b97a967SRobert Watson} 7983b97a967SRobert Watson 7993b97a967SRobert Watson 8003b97a967SRobert Watson# func_grep EXPRESSION FILENAME 8013b97a967SRobert Watson# ----------------------------- 8023b97a967SRobert Watson# Check whether EXPRESSION matches any line of FILENAME, without output. 8033b97a967SRobert Watsonfunc_grep () 8043b97a967SRobert Watson{ 8053b97a967SRobert Watson $debug_cmd 8063b97a967SRobert Watson 8073b97a967SRobert Watson $GREP "$1" "$2" >/dev/null 2>&1 8083b97a967SRobert Watson} 8093b97a967SRobert Watson 8103b97a967SRobert Watson 8113b97a967SRobert Watson# func_len STRING 8123b97a967SRobert Watson# --------------- 8133b97a967SRobert Watson# Set func_len_result to the length of STRING. STRING may not 8143b97a967SRobert Watson# start with a hyphen. 8153b97a967SRobert Watson test -z "$_G_HAVE_XSI_OPS" \ 816eb336521SRobert Watson && (eval 'x=a/b/c; 8173b97a967SRobert Watson test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 8183b97a967SRobert Watson && _G_HAVE_XSI_OPS=yes 819eb336521SRobert Watson 8203b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then 8213b97a967SRobert Watson eval 'func_len () 8223b97a967SRobert Watson { 8233b97a967SRobert Watson $debug_cmd 8243b97a967SRobert Watson 8253b97a967SRobert Watson func_len_result=${#1} 8263b97a967SRobert Watson }' 8273b97a967SRobert Watsonelse 8283b97a967SRobert Watson func_len () 8293b97a967SRobert Watson { 8303b97a967SRobert Watson $debug_cmd 8313b97a967SRobert Watson 8323b97a967SRobert Watson func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 8333b97a967SRobert Watson } 8343b97a967SRobert Watsonfi 8353b97a967SRobert Watson 8363b97a967SRobert Watson 8373b97a967SRobert Watson# func_mkdir_p DIRECTORY-PATH 8383b97a967SRobert Watson# --------------------------- 8393b97a967SRobert Watson# Make sure the entire path to DIRECTORY-PATH is available. 8403b97a967SRobert Watsonfunc_mkdir_p () 8413b97a967SRobert Watson{ 8423b97a967SRobert Watson $debug_cmd 8433b97a967SRobert Watson 8443b97a967SRobert Watson _G_directory_path=$1 8453b97a967SRobert Watson _G_dir_list= 8463b97a967SRobert Watson 8473b97a967SRobert Watson if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 8483b97a967SRobert Watson 8493b97a967SRobert Watson # Protect directory names starting with '-' 8503b97a967SRobert Watson case $_G_directory_path in 8513b97a967SRobert Watson -*) _G_directory_path=./$_G_directory_path ;; 8523b97a967SRobert Watson esac 8533b97a967SRobert Watson 8543b97a967SRobert Watson # While some portion of DIR does not yet exist... 8553b97a967SRobert Watson while test ! -d "$_G_directory_path"; do 8563b97a967SRobert Watson # ...make a list in topmost first order. Use a colon delimited 8573b97a967SRobert Watson # list incase some portion of path contains whitespace. 8583b97a967SRobert Watson _G_dir_list=$_G_directory_path:$_G_dir_list 8593b97a967SRobert Watson 8603b97a967SRobert Watson # If the last portion added has no slash in it, the list is done 8613b97a967SRobert Watson case $_G_directory_path in */*) ;; *) break ;; esac 8623b97a967SRobert Watson 8633b97a967SRobert Watson # ...otherwise throw away the child directory and loop 8643b97a967SRobert Watson _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 8653b97a967SRobert Watson done 8663b97a967SRobert Watson _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 8673b97a967SRobert Watson 8683b97a967SRobert Watson func_mkdir_p_IFS=$IFS; IFS=: 8693b97a967SRobert Watson for _G_dir in $_G_dir_list; do 8703b97a967SRobert Watson IFS=$func_mkdir_p_IFS 8713b97a967SRobert Watson # mkdir can fail with a 'File exist' error if two processes 8723b97a967SRobert Watson # try to create one of the directories concurrently. Don't 8733b97a967SRobert Watson # stop in that case! 8743b97a967SRobert Watson $MKDIR "$_G_dir" 2>/dev/null || : 8753b97a967SRobert Watson done 8763b97a967SRobert Watson IFS=$func_mkdir_p_IFS 8773b97a967SRobert Watson 8783b97a967SRobert Watson # Bail out if we (or some other process) failed to create a directory. 8793b97a967SRobert Watson test -d "$_G_directory_path" || \ 8803b97a967SRobert Watson func_fatal_error "Failed to create '$1'" 8813b97a967SRobert Watson fi 8823b97a967SRobert Watson} 8833b97a967SRobert Watson 8843b97a967SRobert Watson 8853b97a967SRobert Watson# func_mktempdir [BASENAME] 8863b97a967SRobert Watson# ------------------------- 8873b97a967SRobert Watson# Make a temporary directory that won't clash with other running 8883b97a967SRobert Watson# libtool processes, and avoids race conditions if possible. If 8893b97a967SRobert Watson# given, BASENAME is the basename for that directory. 8903b97a967SRobert Watsonfunc_mktempdir () 8913b97a967SRobert Watson{ 8923b97a967SRobert Watson $debug_cmd 8933b97a967SRobert Watson 8943b97a967SRobert Watson _G_template=${TMPDIR-/tmp}/${1-$progname} 8953b97a967SRobert Watson 8963b97a967SRobert Watson if test : = "$opt_dry_run"; then 8973b97a967SRobert Watson # Return a directory name, but don't create it in dry-run mode 8983b97a967SRobert Watson _G_tmpdir=$_G_template-$$ 8993b97a967SRobert Watson else 9003b97a967SRobert Watson 9013b97a967SRobert Watson # If mktemp works, use that first and foremost 9023b97a967SRobert Watson _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 9033b97a967SRobert Watson 9043b97a967SRobert Watson if test ! -d "$_G_tmpdir"; then 9053b97a967SRobert Watson # Failing that, at least try and use $RANDOM to avoid a race 9063b97a967SRobert Watson _G_tmpdir=$_G_template-${RANDOM-0}$$ 9073b97a967SRobert Watson 9083b97a967SRobert Watson func_mktempdir_umask=`umask` 9093b97a967SRobert Watson umask 0077 9103b97a967SRobert Watson $MKDIR "$_G_tmpdir" 9113b97a967SRobert Watson umask $func_mktempdir_umask 9123b97a967SRobert Watson fi 9133b97a967SRobert Watson 9143b97a967SRobert Watson # If we're not in dry-run mode, bomb out on failure 9153b97a967SRobert Watson test -d "$_G_tmpdir" || \ 9163b97a967SRobert Watson func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 9173b97a967SRobert Watson fi 9183b97a967SRobert Watson 9193b97a967SRobert Watson $ECHO "$_G_tmpdir" 9203b97a967SRobert Watson} 9213b97a967SRobert Watson 9223b97a967SRobert Watson 9233b97a967SRobert Watson# func_normal_abspath PATH 9243b97a967SRobert Watson# ------------------------ 9253b97a967SRobert Watson# Remove doubled-up and trailing slashes, "." path components, 9263b97a967SRobert Watson# and cancel out any ".." path components in PATH after making 9273b97a967SRobert Watson# it an absolute path. 9283b97a967SRobert Watsonfunc_normal_abspath () 9293b97a967SRobert Watson{ 9303b97a967SRobert Watson $debug_cmd 9313b97a967SRobert Watson 9323b97a967SRobert Watson # These SED scripts presuppose an absolute path with a trailing slash. 9333b97a967SRobert Watson _G_pathcar='s|^/\([^/]*\).*$|\1|' 9343b97a967SRobert Watson _G_pathcdr='s|^/[^/]*||' 9353b97a967SRobert Watson _G_removedotparts=':dotsl 9363b97a967SRobert Watson s|/\./|/|g 9373b97a967SRobert Watson t dotsl 9383b97a967SRobert Watson s|/\.$|/|' 9393b97a967SRobert Watson _G_collapseslashes='s|/\{1,\}|/|g' 9403b97a967SRobert Watson _G_finalslash='s|/*$|/|' 9413b97a967SRobert Watson 9423b97a967SRobert Watson # Start from root dir and reassemble the path. 9433b97a967SRobert Watson func_normal_abspath_result= 9443b97a967SRobert Watson func_normal_abspath_tpath=$1 9453b97a967SRobert Watson func_normal_abspath_altnamespace= 9463b97a967SRobert Watson case $func_normal_abspath_tpath in 9473b97a967SRobert Watson "") 9483b97a967SRobert Watson # Empty path, that just means $cwd. 9493b97a967SRobert Watson func_stripname '' '/' "`pwd`" 9503b97a967SRobert Watson func_normal_abspath_result=$func_stripname_result 9513b97a967SRobert Watson return 9523b97a967SRobert Watson ;; 9533b97a967SRobert Watson # The next three entries are used to spot a run of precisely 9543b97a967SRobert Watson # two leading slashes without using negated character classes; 9553b97a967SRobert Watson # we take advantage of case's first-match behaviour. 9563b97a967SRobert Watson ///*) 9573b97a967SRobert Watson # Unusual form of absolute path, do nothing. 9583b97a967SRobert Watson ;; 9593b97a967SRobert Watson //*) 9603b97a967SRobert Watson # Not necessarily an ordinary path; POSIX reserves leading '//' 9613b97a967SRobert Watson # and for example Cygwin uses it to access remote file shares 9623b97a967SRobert Watson # over CIFS/SMB, so we conserve a leading double slash if found. 9633b97a967SRobert Watson func_normal_abspath_altnamespace=/ 9643b97a967SRobert Watson ;; 9653b97a967SRobert Watson /*) 9663b97a967SRobert Watson # Absolute path, do nothing. 9673b97a967SRobert Watson ;; 9683b97a967SRobert Watson *) 9693b97a967SRobert Watson # Relative path, prepend $cwd. 9703b97a967SRobert Watson func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 9713b97a967SRobert Watson ;; 9723b97a967SRobert Watson esac 9733b97a967SRobert Watson 974d9af45c4SRobert Watson # Cancel out all the simple stuff to save iterations. We also want 975d9af45c4SRobert Watson # the path to end with a slash for ease of parsing, so make sure 976d9af45c4SRobert Watson # there is one (and only one) here. 9773b97a967SRobert Watson func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9783b97a967SRobert Watson -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 9793b97a967SRobert Watson while :; do 9803b97a967SRobert Watson # Processed it all yet? 9813b97a967SRobert Watson if test / = "$func_normal_abspath_tpath"; then 9823b97a967SRobert Watson # If we ascended to the root using ".." the result may be empty now. 9833b97a967SRobert Watson if test -z "$func_normal_abspath_result"; then 9843b97a967SRobert Watson func_normal_abspath_result=/ 9853b97a967SRobert Watson fi 9863b97a967SRobert Watson break 9873b97a967SRobert Watson fi 9883b97a967SRobert Watson func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9893b97a967SRobert Watson -e "$_G_pathcar"` 9903b97a967SRobert Watson func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 9913b97a967SRobert Watson -e "$_G_pathcdr"` 9923b97a967SRobert Watson # Figure out what to do with it 9933b97a967SRobert Watson case $func_normal_abspath_tcomponent in 9943b97a967SRobert Watson "") 9953b97a967SRobert Watson # Trailing empty path component, ignore it. 9963b97a967SRobert Watson ;; 9973b97a967SRobert Watson ..) 9983b97a967SRobert Watson # Parent dir; strip last assembled component from result. 9993b97a967SRobert Watson func_dirname "$func_normal_abspath_result" 10003b97a967SRobert Watson func_normal_abspath_result=$func_dirname_result 10013b97a967SRobert Watson ;; 10023b97a967SRobert Watson *) 10033b97a967SRobert Watson # Actual path component, append it. 10043b97a967SRobert Watson func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 10053b97a967SRobert Watson ;; 10063b97a967SRobert Watson esac 10073b97a967SRobert Watson done 10083b97a967SRobert Watson # Restore leading double-slash if one was found on entry. 10093b97a967SRobert Watson func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 10103b97a967SRobert Watson} 10113b97a967SRobert Watson 10123b97a967SRobert Watson 10133b97a967SRobert Watson# func_notquiet ARG... 10143b97a967SRobert Watson# -------------------- 10153b97a967SRobert Watson# Echo program name prefixed message only when not in quiet mode. 10163b97a967SRobert Watsonfunc_notquiet () 10173b97a967SRobert Watson{ 10183b97a967SRobert Watson $debug_cmd 10193b97a967SRobert Watson 10203b97a967SRobert Watson $opt_quiet || func_echo ${1+"$@"} 10213b97a967SRobert Watson 10223b97a967SRobert Watson # A bug in bash halts the script if the last line of a function 10233b97a967SRobert Watson # fails when set -e is in force, so we need another command to 10243b97a967SRobert Watson # work around that: 10253b97a967SRobert Watson : 10263b97a967SRobert Watson} 10273b97a967SRobert Watson 10283b97a967SRobert Watson 10293b97a967SRobert Watson# func_relative_path SRCDIR DSTDIR 10303b97a967SRobert Watson# -------------------------------- 10313b97a967SRobert Watson# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 10323b97a967SRobert Watsonfunc_relative_path () 10333b97a967SRobert Watson{ 10343b97a967SRobert Watson $debug_cmd 10353b97a967SRobert Watson 10363b97a967SRobert Watson func_relative_path_result= 10373b97a967SRobert Watson func_normal_abspath "$1" 10383b97a967SRobert Watson func_relative_path_tlibdir=$func_normal_abspath_result 10393b97a967SRobert Watson func_normal_abspath "$2" 10403b97a967SRobert Watson func_relative_path_tbindir=$func_normal_abspath_result 10413b97a967SRobert Watson 10423b97a967SRobert Watson # Ascend the tree starting from libdir 10433b97a967SRobert Watson while :; do 10443b97a967SRobert Watson # check if we have found a prefix of bindir 10453b97a967SRobert Watson case $func_relative_path_tbindir in 10463b97a967SRobert Watson $func_relative_path_tlibdir) 10473b97a967SRobert Watson # found an exact match 10483b97a967SRobert Watson func_relative_path_tcancelled= 10493b97a967SRobert Watson break 10503b97a967SRobert Watson ;; 10513b97a967SRobert Watson $func_relative_path_tlibdir*) 10523b97a967SRobert Watson # found a matching prefix 10533b97a967SRobert Watson func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 10543b97a967SRobert Watson func_relative_path_tcancelled=$func_stripname_result 10553b97a967SRobert Watson if test -z "$func_relative_path_result"; then 10563b97a967SRobert Watson func_relative_path_result=. 10573b97a967SRobert Watson fi 10583b97a967SRobert Watson break 10593b97a967SRobert Watson ;; 10603b97a967SRobert Watson *) 10613b97a967SRobert Watson func_dirname $func_relative_path_tlibdir 10623b97a967SRobert Watson func_relative_path_tlibdir=$func_dirname_result 10633b97a967SRobert Watson if test -z "$func_relative_path_tlibdir"; then 10643b97a967SRobert Watson # Have to descend all the way to the root! 10653b97a967SRobert Watson func_relative_path_result=../$func_relative_path_result 10663b97a967SRobert Watson func_relative_path_tcancelled=$func_relative_path_tbindir 10673b97a967SRobert Watson break 10683b97a967SRobert Watson fi 10693b97a967SRobert Watson func_relative_path_result=../$func_relative_path_result 10703b97a967SRobert Watson ;; 10713b97a967SRobert Watson esac 10723b97a967SRobert Watson done 10733b97a967SRobert Watson 10743b97a967SRobert Watson # Now calculate path; take care to avoid doubling-up slashes. 10753b97a967SRobert Watson func_stripname '' '/' "$func_relative_path_result" 10763b97a967SRobert Watson func_relative_path_result=$func_stripname_result 10773b97a967SRobert Watson func_stripname '/' '/' "$func_relative_path_tcancelled" 10783b97a967SRobert Watson if test -n "$func_stripname_result"; then 10793b97a967SRobert Watson func_append func_relative_path_result "/$func_stripname_result" 10803b97a967SRobert Watson fi 10813b97a967SRobert Watson 10823b97a967SRobert Watson # Normalisation. If bindir is libdir, return '.' else relative path. 10833b97a967SRobert Watson if test -n "$func_relative_path_result"; then 10843b97a967SRobert Watson func_stripname './' '' "$func_relative_path_result" 10853b97a967SRobert Watson func_relative_path_result=$func_stripname_result 10863b97a967SRobert Watson fi 10873b97a967SRobert Watson 10883b97a967SRobert Watson test -n "$func_relative_path_result" || func_relative_path_result=. 10893b97a967SRobert Watson 10903b97a967SRobert Watson : 10913b97a967SRobert Watson} 10923b97a967SRobert Watson 10933b97a967SRobert Watson 10943b97a967SRobert Watson# func_quote_for_eval ARG... 10953b97a967SRobert Watson# -------------------------- 10963b97a967SRobert Watson# Aesthetically quote ARGs to be evaled later. 10973b97a967SRobert Watson# This function returns two values: 10983b97a967SRobert Watson# i) func_quote_for_eval_result 10993b97a967SRobert Watson# double-quoted, suitable for a subsequent eval 11003b97a967SRobert Watson# ii) func_quote_for_eval_unquoted_result 11013b97a967SRobert Watson# has all characters that are still active within double 11023b97a967SRobert Watson# quotes backslashified. 11033b97a967SRobert Watsonfunc_quote_for_eval () 11043b97a967SRobert Watson{ 11053b97a967SRobert Watson $debug_cmd 11063b97a967SRobert Watson 11073b97a967SRobert Watson func_quote_for_eval_unquoted_result= 11083b97a967SRobert Watson func_quote_for_eval_result= 11093b97a967SRobert Watson while test 0 -lt $#; do 11103b97a967SRobert Watson case $1 in 11113b97a967SRobert Watson *[\\\`\"\$]*) 11123b97a967SRobert Watson _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; 11133b97a967SRobert Watson *) 11143b97a967SRobert Watson _G_unquoted_arg=$1 ;; 11153b97a967SRobert Watson esac 11163b97a967SRobert Watson if test -n "$func_quote_for_eval_unquoted_result"; then 11173b97a967SRobert Watson func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 11183b97a967SRobert Watson else 11193b97a967SRobert Watson func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 11203b97a967SRobert Watson fi 11213b97a967SRobert Watson 11223b97a967SRobert Watson case $_G_unquoted_arg in 11233b97a967SRobert Watson # Double-quote args containing shell metacharacters to delay 11243b97a967SRobert Watson # word splitting, command substitution and variable expansion 11253b97a967SRobert Watson # for a subsequent eval. 11263b97a967SRobert Watson # Many Bourne shells cannot handle close brackets correctly 11273b97a967SRobert Watson # in scan sets, so we specify it separately. 11283b97a967SRobert Watson *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 11293b97a967SRobert Watson _G_quoted_arg=\"$_G_unquoted_arg\" 11303b97a967SRobert Watson ;; 11313b97a967SRobert Watson *) 11323b97a967SRobert Watson _G_quoted_arg=$_G_unquoted_arg 11333b97a967SRobert Watson ;; 11343b97a967SRobert Watson esac 11353b97a967SRobert Watson 11363b97a967SRobert Watson if test -n "$func_quote_for_eval_result"; then 11373b97a967SRobert Watson func_append func_quote_for_eval_result " $_G_quoted_arg" 11383b97a967SRobert Watson else 11393b97a967SRobert Watson func_append func_quote_for_eval_result "$_G_quoted_arg" 11403b97a967SRobert Watson fi 11413b97a967SRobert Watson shift 11423b97a967SRobert Watson done 11433b97a967SRobert Watson} 11443b97a967SRobert Watson 11453b97a967SRobert Watson 11463b97a967SRobert Watson# func_quote_for_expand ARG 11473b97a967SRobert Watson# ------------------------- 11483b97a967SRobert Watson# Aesthetically quote ARG to be evaled later; same as above, 11493b97a967SRobert Watson# but do not quote variable references. 11503b97a967SRobert Watsonfunc_quote_for_expand () 11513b97a967SRobert Watson{ 11523b97a967SRobert Watson $debug_cmd 11533b97a967SRobert Watson 11543b97a967SRobert Watson case $1 in 11553b97a967SRobert Watson *[\\\`\"]*) 11563b97a967SRobert Watson _G_arg=`$ECHO "$1" | $SED \ 11573b97a967SRobert Watson -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 11583b97a967SRobert Watson *) 11593b97a967SRobert Watson _G_arg=$1 ;; 11603b97a967SRobert Watson esac 11613b97a967SRobert Watson 11623b97a967SRobert Watson case $_G_arg in 11633b97a967SRobert Watson # Double-quote args containing shell metacharacters to delay 11643b97a967SRobert Watson # word splitting and command substitution for a subsequent eval. 11653b97a967SRobert Watson # Many Bourne shells cannot handle close brackets correctly 11663b97a967SRobert Watson # in scan sets, so we specify it separately. 11673b97a967SRobert Watson *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 11683b97a967SRobert Watson _G_arg=\"$_G_arg\" 11693b97a967SRobert Watson ;; 11703b97a967SRobert Watson esac 11713b97a967SRobert Watson 11723b97a967SRobert Watson func_quote_for_expand_result=$_G_arg 11733b97a967SRobert Watson} 11743b97a967SRobert Watson 11753b97a967SRobert Watson 11763b97a967SRobert Watson# func_stripname PREFIX SUFFIX NAME 11773b97a967SRobert Watson# --------------------------------- 11783b97a967SRobert Watson# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1179d9af45c4SRobert Watson# PREFIX and SUFFIX must not contain globbing or regex special 11803b97a967SRobert Watson# characters, hashes, percent signs, but SUFFIX may contain a leading 11813b97a967SRobert Watson# dot (in which case that matches only a dot). 11823b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then 11833b97a967SRobert Watson eval 'func_stripname () 11843b97a967SRobert Watson { 11853b97a967SRobert Watson $debug_cmd 11863b97a967SRobert Watson 11873b97a967SRobert Watson # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 11883b97a967SRobert Watson # positional parameters, so assign one to ordinary variable first. 11893b97a967SRobert Watson func_stripname_result=$3 11903b97a967SRobert Watson func_stripname_result=${func_stripname_result#"$1"} 11913b97a967SRobert Watson func_stripname_result=${func_stripname_result%"$2"} 11923b97a967SRobert Watson }' 11933b97a967SRobert Watsonelse 11943b97a967SRobert Watson func_stripname () 11953b97a967SRobert Watson { 11963b97a967SRobert Watson $debug_cmd 11973b97a967SRobert Watson 11983b97a967SRobert Watson case $2 in 11993b97a967SRobert Watson .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1200eb336521SRobert Watson *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1201eb336521SRobert Watson esac 1202eb336521SRobert Watson } 12033b97a967SRobert Watsonfi 12043b97a967SRobert Watson 12053b97a967SRobert Watson 12063b97a967SRobert Watson# func_show_eval CMD [FAIL_EXP] 12073b97a967SRobert Watson# ----------------------------- 12083b97a967SRobert Watson# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1209d9af45c4SRobert Watson# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1210eb336521SRobert Watson# is given, then evaluate it. 1211eb336521SRobert Watsonfunc_show_eval () 12123b97a967SRobert Watson{ 12133b97a967SRobert Watson $debug_cmd 12143b97a967SRobert Watson 1215d9af45c4SRobert Watson _G_cmd=$1 1216eb336521SRobert Watson _G_fail_exp=${2-':'} 1217eb336521SRobert Watson 1218eb336521SRobert Watson func_quote_for_expand "$_G_cmd" 1219eb336521SRobert Watson eval "func_notquiet $func_quote_for_expand_result" 12203b97a967SRobert Watson 1221eb336521SRobert Watson $opt_dry_run || { 1222eb336521SRobert Watson eval "$_G_cmd" 1223eb336521SRobert Watson _G_status=$? 12243b97a967SRobert Watson if test 0 -ne "$_G_status"; then 12253b97a967SRobert Watson eval "(exit $_G_status); $_G_fail_exp" 12263b97a967SRobert Watson fi 12273b97a967SRobert Watson } 12283b97a967SRobert Watson} 12293b97a967SRobert Watson 12303b97a967SRobert Watson 12313b97a967SRobert Watson# func_show_eval_locale CMD [FAIL_EXP] 12323b97a967SRobert Watson# ------------------------------------ 12333b97a967SRobert Watson# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 12343b97a967SRobert Watson# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 12353b97a967SRobert Watson# is given, then evaluate it. Use the saved locale for evaluation. 12363b97a967SRobert Watsonfunc_show_eval_locale () 12373b97a967SRobert Watson{ 12383b97a967SRobert Watson $debug_cmd 12393b97a967SRobert Watson 12403b97a967SRobert Watson _G_cmd=$1 12413b97a967SRobert Watson _G_fail_exp=${2-':'} 12423b97a967SRobert Watson 12433b97a967SRobert Watson $opt_quiet || { 12443b97a967SRobert Watson func_quote_for_expand "$_G_cmd" 12453b97a967SRobert Watson eval "func_echo $func_quote_for_expand_result" 12463b97a967SRobert Watson } 12473b97a967SRobert Watson 12483b97a967SRobert Watson $opt_dry_run || { 12493b97a967SRobert Watson eval "$_G_user_locale 12503b97a967SRobert Watson $_G_cmd" 12513b97a967SRobert Watson _G_status=$? 12523b97a967SRobert Watson eval "$_G_safe_locale" 12533b97a967SRobert Watson if test 0 -ne "$_G_status"; then 12543b97a967SRobert Watson eval "(exit $_G_status); $_G_fail_exp" 12553b97a967SRobert Watson fi 12563b97a967SRobert Watson } 12573b97a967SRobert Watson} 12583b97a967SRobert Watson 12593b97a967SRobert Watson 12603b97a967SRobert Watson# func_tr_sh 12613b97a967SRobert Watson# ---------- 12623b97a967SRobert Watson# Turn $1 into a string suitable for a shell variable name. 12633b97a967SRobert Watson# Result is stored in $func_tr_sh_result. All characters 12643b97a967SRobert Watson# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 12653b97a967SRobert Watson# if $1 begins with a digit, a '_' is prepended as well. 12663b97a967SRobert Watsonfunc_tr_sh () 12673b97a967SRobert Watson{ 12683b97a967SRobert Watson $debug_cmd 12693b97a967SRobert Watson 12703b97a967SRobert Watson case $1 in 12713b97a967SRobert Watson [0-9]* | *[!a-zA-Z0-9_]*) 12723b97a967SRobert Watson func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 12733b97a967SRobert Watson ;; 12743b97a967SRobert Watson * ) 12753b97a967SRobert Watson func_tr_sh_result=$1 12763b97a967SRobert Watson ;; 12773b97a967SRobert Watson esac 12783b97a967SRobert Watson} 12793b97a967SRobert Watson 12803b97a967SRobert Watson 12813b97a967SRobert Watson# func_verbose ARG... 12823b97a967SRobert Watson# ------------------- 12833b97a967SRobert Watson# Echo program name prefixed message in verbose mode only. 12843b97a967SRobert Watsonfunc_verbose () 12853b97a967SRobert Watson{ 12863b97a967SRobert Watson $debug_cmd 12873b97a967SRobert Watson 12883b97a967SRobert Watson $opt_verbose && func_echo "$*" 12893b97a967SRobert Watson 12903b97a967SRobert Watson : 12913b97a967SRobert Watson} 12923b97a967SRobert Watson 12933b97a967SRobert Watson 12943b97a967SRobert Watson# func_warn_and_continue ARG... 12953b97a967SRobert Watson# ----------------------------- 12963b97a967SRobert Watson# Echo program name prefixed warning message to standard error. 12973b97a967SRobert Watsonfunc_warn_and_continue () 12983b97a967SRobert Watson{ 12993b97a967SRobert Watson $debug_cmd 13003b97a967SRobert Watson 13013b97a967SRobert Watson $require_term_colors 13023b97a967SRobert Watson 13033b97a967SRobert Watson func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 13043b97a967SRobert Watson} 13053b97a967SRobert Watson 13063b97a967SRobert Watson 13073b97a967SRobert Watson# func_warning CATEGORY ARG... 13083b97a967SRobert Watson# ---------------------------- 13093b97a967SRobert Watson# Echo program name prefixed warning message to standard error. Warning 13103b97a967SRobert Watson# messages can be filtered according to CATEGORY, where this function 13113b97a967SRobert Watson# elides messages where CATEGORY is not listed in the global variable 13123b97a967SRobert Watson# 'opt_warning_types'. 13133b97a967SRobert Watsonfunc_warning () 13143b97a967SRobert Watson{ 13153b97a967SRobert Watson $debug_cmd 13163b97a967SRobert Watson 13173b97a967SRobert Watson # CATEGORY must be in the warning_categories list! 13183b97a967SRobert Watson case " $warning_categories " in 13193b97a967SRobert Watson *" $1 "*) ;; 13203b97a967SRobert Watson *) func_internal_error "invalid warning category '$1'" ;; 13213b97a967SRobert Watson esac 13223b97a967SRobert Watson 13233b97a967SRobert Watson _G_category=$1 13243b97a967SRobert Watson shift 13253b97a967SRobert Watson 13263b97a967SRobert Watson case " $opt_warning_types " in 13273b97a967SRobert Watson *" $_G_category "*) $warning_func ${1+"$@"} ;; 13283b97a967SRobert Watson esac 13293b97a967SRobert Watson} 13303b97a967SRobert Watson 13313b97a967SRobert Watson 13323b97a967SRobert Watson# func_sort_ver VER1 VER2 13333b97a967SRobert Watson# ----------------------- 13343b97a967SRobert Watson# 'sort -V' is not generally available. 13353b97a967SRobert Watson# Note this deviates from the version comparison in automake 13363b97a967SRobert Watson# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 13373b97a967SRobert Watson# but this should suffice as we won't be specifying old 13383b97a967SRobert Watson# version formats or redundant trailing .0 in bootstrap.conf. 13393b97a967SRobert Watson# If we did want full compatibility then we should probably 13403b97a967SRobert Watson# use m4_version_compare from autoconf. 13413b97a967SRobert Watsonfunc_sort_ver () 13423b97a967SRobert Watson{ 13433b97a967SRobert Watson $debug_cmd 13443b97a967SRobert Watson 13453b97a967SRobert Watson printf '%s\n%s\n' "$1" "$2" \ 13463b97a967SRobert Watson | 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 13473b97a967SRobert Watson} 13483b97a967SRobert Watson 13493b97a967SRobert Watson# func_lt_ver PREV CURR 13503b97a967SRobert Watson# --------------------- 13513b97a967SRobert Watson# Return true if PREV and CURR are in the correct order according to 13523b97a967SRobert Watson# func_sort_ver, otherwise false. Use it like this: 13533b97a967SRobert Watson# 13543b97a967SRobert Watson# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 13553b97a967SRobert Watsonfunc_lt_ver () 13563b97a967SRobert Watson{ 13573b97a967SRobert Watson $debug_cmd 13583b97a967SRobert Watson 13593b97a967SRobert Watson test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 13603b97a967SRobert Watson} 13613b97a967SRobert Watson 13623b97a967SRobert Watson 13633b97a967SRobert Watson# Local variables: 13643b97a967SRobert Watson# mode: shell-script 13653b97a967SRobert Watson# sh-indentation: 2 13663b97a967SRobert Watson# eval: (add-hook 'before-save-hook 'time-stamp) 13673b97a967SRobert Watson# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 13683b97a967SRobert Watson# time-stamp-time-zone: "UTC" 13693b97a967SRobert Watson# End: 13703b97a967SRobert Watson#! /bin/sh 13713b97a967SRobert Watson 13723b97a967SRobert Watson# Set a version string for this script. 13733b97a967SRobert Watsonscriptversion=2014-01-07.03; # UTC 13743b97a967SRobert Watson 13753b97a967SRobert Watson# A portable, pluggable option parser for Bourne shell. 13763b97a967SRobert Watson# Written by Gary V. Vaughan, 2010 13773b97a967SRobert Watson 13783b97a967SRobert Watson# Copyright (C) 2010-2015 Free Software Foundation, Inc. 13793b97a967SRobert Watson# This is free software; see the source for copying conditions. There is NO 13803b97a967SRobert Watson# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13813b97a967SRobert Watson 13823b97a967SRobert Watson# This program is free software: you can redistribute it and/or modify 13833b97a967SRobert Watson# it under the terms of the GNU General Public License as published by 13843b97a967SRobert Watson# the Free Software Foundation, either version 3 of the License, or 13853b97a967SRobert Watson# (at your option) any later version. 13863b97a967SRobert Watson 13873b97a967SRobert Watson# This program is distributed in the hope that it will be useful, 13883b97a967SRobert Watson# but WITHOUT ANY WARRANTY; without even the implied warranty of 13893b97a967SRobert Watson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13903b97a967SRobert Watson# GNU General Public License for more details. 13913b97a967SRobert Watson 13923b97a967SRobert Watson# You should have received a copy of the GNU General Public License 13933b97a967SRobert Watson# along with this program. If not, see <http://www.gnu.org/licenses/>. 13943b97a967SRobert Watson 13953b97a967SRobert Watson# Please report bugs or propose patches to gary@gnu.org. 13963b97a967SRobert Watson 13973b97a967SRobert Watson 13983b97a967SRobert Watson## ------ ## 13993b97a967SRobert Watson## Usage. ## 1400d9af45c4SRobert Watson## ------ ## 1401d9af45c4SRobert Watson 1402d9af45c4SRobert Watson# This file is a library for parsing options in your shell scripts along 1403d9af45c4SRobert Watson# with assorted other useful supporting features that you can make use 1404d9af45c4SRobert Watson# of too. 14053b97a967SRobert Watson# 14063b97a967SRobert Watson# For the simplest scripts you might need only: 14073b97a967SRobert Watson# 14083b97a967SRobert Watson# #!/bin/sh 14093b97a967SRobert Watson# . relative/path/to/funclib.sh 14103b97a967SRobert Watson# . relative/path/to/options-parser 14113b97a967SRobert Watson# scriptversion=1.0 14123b97a967SRobert Watson# func_options ${1+"$@"} 14133b97a967SRobert Watson# eval set dummy "$func_options_result"; shift 14143b97a967SRobert Watson# ...rest of your script... 14153b97a967SRobert Watson# 14163b97a967SRobert Watson# In order for the '--version' option to work, you will need to have a 14173b97a967SRobert Watson# suitably formatted comment like the one at the top of this file 14183b97a967SRobert Watson# starting with '# Written by ' and ending with '# warranty; '. 14193b97a967SRobert Watson# 14203b97a967SRobert Watson# For '-h' and '--help' to work, you will also need a one line 14213b97a967SRobert Watson# description of your script's purpose in a comment directly above the 14223b97a967SRobert Watson# '# Written by ' line, like the one at the top of this file. 14233b97a967SRobert Watson# 14243b97a967SRobert Watson# The default options also support '--debug', which will turn on shell 14253b97a967SRobert Watson# execution tracing (see the comment above debug_cmd below for another 14263b97a967SRobert Watson# use), and '--verbose' and the func_verbose function to allow your script 14273b97a967SRobert Watson# to display verbose messages only when your user has specified 14283b97a967SRobert Watson# '--verbose'. 14293b97a967SRobert Watson# 14303b97a967SRobert Watson# After sourcing this file, you can plug processing for additional 14313b97a967SRobert Watson# options by amending the variables from the 'Configuration' section 14323b97a967SRobert Watson# below, and following the instructions in the 'Option parsing' 14333b97a967SRobert Watson# section further down. 14343b97a967SRobert Watson 14353b97a967SRobert Watson## -------------- ## 14363b97a967SRobert Watson## Configuration. ## 14373b97a967SRobert Watson## -------------- ## 14383b97a967SRobert Watson 14393b97a967SRobert Watson# You should override these variables in your script after sourcing this 14403b97a967SRobert Watson# file so that they reflect the customisations you have added to the 14413b97a967SRobert Watson# option parser. 14423b97a967SRobert Watson 14433b97a967SRobert Watson# The usage line for option parsing errors and the start of '-h' and 14443b97a967SRobert Watson# '--help' output messages. You can embed shell variables for delayed 14453b97a967SRobert Watson# expansion at the time the message is displayed, but you will need to 14463b97a967SRobert Watson# quote other shell meta-characters carefully to prevent them being 14473b97a967SRobert Watson# expanded when the contents are evaled. 14483b97a967SRobert Watsonusage='$progpath [OPTION]...' 14493b97a967SRobert Watson 14503b97a967SRobert Watson# Short help message in response to '-h' and '--help'. Add to this or 14513b97a967SRobert Watson# override it after sourcing this library to reflect the full set of 14523b97a967SRobert Watson# options your script accepts. 14533b97a967SRobert Watsonusage_message="\ 14543b97a967SRobert Watson --debug enable verbose shell tracing 14553b97a967SRobert Watson -W, --warnings=CATEGORY 14563b97a967SRobert Watson report the warnings falling in CATEGORY [all] 14573b97a967SRobert Watson -v, --verbose verbosely report processing 14583b97a967SRobert Watson --version print version information and exit 14593b97a967SRobert Watson -h, --help print short or long help message and exit 14603b97a967SRobert Watson" 14613b97a967SRobert Watson 14623b97a967SRobert Watson# Additional text appended to 'usage_message' in response to '--help'. 14633b97a967SRobert Watsonlong_help_message=" 14643b97a967SRobert WatsonWarning categories include: 14653b97a967SRobert Watson 'all' show all warnings 14663b97a967SRobert Watson 'none' turn off all the warnings 14673b97a967SRobert Watson 'error' warnings are treated as fatal errors" 14683b97a967SRobert Watson 14693b97a967SRobert Watson# Help message printed before fatal option parsing errors. 14703b97a967SRobert Watsonfatal_help="Try '\$progname --help' for more information." 14713b97a967SRobert Watson 14723b97a967SRobert Watson 14733b97a967SRobert Watson 14743b97a967SRobert Watson## ------------------------- ## 14753b97a967SRobert Watson## Hook function management. ## 14763b97a967SRobert Watson## ------------------------- ## 14773b97a967SRobert Watson 14783b97a967SRobert Watson# This section contains functions for adding, removing, and running hooks 14793b97a967SRobert Watson# to the main code. A hook is just a named list of of function, that can 14803b97a967SRobert Watson# be run in order later on. 14813b97a967SRobert Watson 14823b97a967SRobert Watson# func_hookable FUNC_NAME 14833b97a967SRobert Watson# ----------------------- 14843b97a967SRobert Watson# Declare that FUNC_NAME will run hooks added with 14853b97a967SRobert Watson# 'func_add_hook FUNC_NAME ...'. 14863b97a967SRobert Watsonfunc_hookable () 14873b97a967SRobert Watson{ 1488d9af45c4SRobert Watson $debug_cmd 1489d9af45c4SRobert Watson 14903b97a967SRobert Watson func_append hookable_fns " $1" 14913b97a967SRobert Watson} 14923b97a967SRobert Watson 14933b97a967SRobert Watson 14943b97a967SRobert Watson# func_add_hook FUNC_NAME HOOK_FUNC 14953b97a967SRobert Watson# --------------------------------- 14963b97a967SRobert Watson# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 14973b97a967SRobert Watson# first have been declared "hookable" by a call to 'func_hookable'. 14983b97a967SRobert Watsonfunc_add_hook () 14993b97a967SRobert Watson{ 15003b97a967SRobert Watson $debug_cmd 15013b97a967SRobert Watson 15023b97a967SRobert Watson case " $hookable_fns " in 15033b97a967SRobert Watson *" $1 "*) ;; 15043b97a967SRobert Watson *) func_fatal_error "'$1' does not accept hook functions." ;; 15053b97a967SRobert Watson esac 15063b97a967SRobert Watson 15073b97a967SRobert Watson eval func_append ${1}_hooks '" $2"' 15083b97a967SRobert Watson} 15093b97a967SRobert Watson 15103b97a967SRobert Watson 15113b97a967SRobert Watson# func_remove_hook FUNC_NAME HOOK_FUNC 15123b97a967SRobert Watson# ------------------------------------ 15133b97a967SRobert Watson# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 15143b97a967SRobert Watsonfunc_remove_hook () 15153b97a967SRobert Watson{ 15163b97a967SRobert Watson $debug_cmd 15173b97a967SRobert Watson 15183b97a967SRobert Watson eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 15193b97a967SRobert Watson} 15203b97a967SRobert Watson 15213b97a967SRobert Watson 15223b97a967SRobert Watson# func_run_hooks FUNC_NAME [ARG]... 15233b97a967SRobert Watson# --------------------------------- 15243b97a967SRobert Watson# Run all hook functions registered to FUNC_NAME. 15253b97a967SRobert Watson# It is assumed that the list of hook functions contains nothing more 15263b97a967SRobert Watson# than a whitespace-delimited list of legal shell function names, and 15273b97a967SRobert Watson# no effort is wasted trying to catch shell meta-characters or preserve 15283b97a967SRobert Watson# whitespace. 15293b97a967SRobert Watsonfunc_run_hooks () 15303b97a967SRobert Watson{ 15313b97a967SRobert Watson $debug_cmd 15323b97a967SRobert Watson 15333b97a967SRobert Watson case " $hookable_fns " in 15343b97a967SRobert Watson *" $1 "*) ;; 15353b97a967SRobert Watson *) func_fatal_error "'$1' does not support hook funcions.n" ;; 15363b97a967SRobert Watson esac 15373b97a967SRobert Watson 15383b97a967SRobert Watson eval _G_hook_fns=\$$1_hooks; shift 15393b97a967SRobert Watson 15403b97a967SRobert Watson for _G_hook in $_G_hook_fns; do 15413b97a967SRobert Watson eval $_G_hook '"$@"' 15423b97a967SRobert Watson 15433b97a967SRobert Watson # store returned options list back into positional 15443b97a967SRobert Watson # parameters for next 'cmd' execution. 15453b97a967SRobert Watson eval _G_hook_result=\$${_G_hook}_result 15463b97a967SRobert Watson eval set dummy "$_G_hook_result"; shift 15473b97a967SRobert Watson done 15483b97a967SRobert Watson 15493b97a967SRobert Watson func_quote_for_eval ${1+"$@"} 15503b97a967SRobert Watson func_run_hooks_result=$func_quote_for_eval_result 15513b97a967SRobert Watson} 15523b97a967SRobert Watson 1553d9af45c4SRobert Watson 1554d9af45c4SRobert Watson 1555d9af45c4SRobert Watson## --------------- ## 1556d9af45c4SRobert Watson## Option parsing. ## 1557d9af45c4SRobert Watson## --------------- ## 1558d9af45c4SRobert Watson 1559d9af45c4SRobert Watson# In order to add your own option parsing hooks, you must accept the 15603b97a967SRobert Watson# full positional parameter list in your hook function, remove any 15613b97a967SRobert Watson# options that you action, and then pass back the remaining unprocessed 15623b97a967SRobert Watson# options in '<hooked_function_name>_result', escaped suitably for 15633b97a967SRobert Watson# 'eval'. Like this: 15643b97a967SRobert Watson# 15653b97a967SRobert Watson# my_options_prep () 15663b97a967SRobert Watson# { 15673b97a967SRobert Watson# $debug_cmd 15683b97a967SRobert Watson# 15693b97a967SRobert Watson# # Extend the existing usage message. 15703b97a967SRobert Watson# usage_message=$usage_message' 15713b97a967SRobert Watson# -s, --silent don'\''t print informational messages 15723b97a967SRobert Watson# ' 15733b97a967SRobert Watson# 15743b97a967SRobert Watson# func_quote_for_eval ${1+"$@"} 15753b97a967SRobert Watson# my_options_prep_result=$func_quote_for_eval_result 15763b97a967SRobert Watson# } 15773b97a967SRobert Watson# func_add_hook func_options_prep my_options_prep 15783b97a967SRobert Watson# 15793b97a967SRobert Watson# 15803b97a967SRobert Watson# my_silent_option () 15813b97a967SRobert Watson# { 15823b97a967SRobert Watson# $debug_cmd 15833b97a967SRobert Watson# 15843b97a967SRobert Watson# # Note that for efficiency, we parse as many options as we can 15853b97a967SRobert Watson# # recognise in a loop before passing the remainder back to the 15863b97a967SRobert Watson# # caller on the first unrecognised argument we encounter. 15873b97a967SRobert Watson# while test $# -gt 0; do 15883b97a967SRobert Watson# opt=$1; shift 15893b97a967SRobert Watson# case $opt in 15903b97a967SRobert Watson# --silent|-s) opt_silent=: ;; 1591d9af45c4SRobert Watson# # Separate non-argument short options: 1592d9af45c4SRobert Watson# -s*) func_split_short_opt "$_G_opt" 15933b97a967SRobert Watson# set dummy "$func_split_short_opt_name" \ 15943b97a967SRobert Watson# "-$func_split_short_opt_arg" ${1+"$@"} 15953b97a967SRobert Watson# shift 15963b97a967SRobert Watson# ;; 15973b97a967SRobert Watson# *) set dummy "$_G_opt" "$*"; shift; break ;; 15983b97a967SRobert Watson# esac 15993b97a967SRobert Watson# done 16003b97a967SRobert Watson# 16013b97a967SRobert Watson# func_quote_for_eval ${1+"$@"} 16023b97a967SRobert Watson# my_silent_option_result=$func_quote_for_eval_result 16033b97a967SRobert Watson# } 16043b97a967SRobert Watson# func_add_hook func_parse_options my_silent_option 16053b97a967SRobert Watson# 1606d9af45c4SRobert Watson# 16073b97a967SRobert Watson# my_option_validation () 16083b97a967SRobert Watson# { 16093b97a967SRobert Watson# $debug_cmd 16103b97a967SRobert Watson# 1611d9af45c4SRobert Watson# $opt_silent && $opt_verbose && func_fatal_help "\ 1612d9af45c4SRobert Watson# '--silent' and '--verbose' options are mutually exclusive." 1613d9af45c4SRobert Watson# 1614d9af45c4SRobert Watson# func_quote_for_eval ${1+"$@"} 16153b97a967SRobert Watson# my_option_validation_result=$func_quote_for_eval_result 16163b97a967SRobert Watson# } 16173b97a967SRobert Watson# func_add_hook func_validate_options my_option_validation 16183b97a967SRobert Watson# 16193b97a967SRobert Watson# You'll alse need to manually amend $usage_message to reflect the extra 16203b97a967SRobert Watson# options you parse. It's preferable to append if you can, so that 16213b97a967SRobert Watson# multiple option parsing hooks can be added safely. 16223b97a967SRobert Watson 1623d9af45c4SRobert Watson 16243b97a967SRobert Watson# func_options [ARG]... 16253b97a967SRobert Watson# --------------------- 16263b97a967SRobert Watson# All the functions called inside func_options are hookable. See the 1627d9af45c4SRobert Watson# individual implementations for details. 16283b97a967SRobert Watsonfunc_hookable func_options 16293b97a967SRobert Watsonfunc_options () 16303b97a967SRobert Watson{ 16313b97a967SRobert Watson $debug_cmd 16323b97a967SRobert Watson 16333b97a967SRobert Watson func_options_prep ${1+"$@"} 16343b97a967SRobert Watson eval func_parse_options \ 16353b97a967SRobert Watson ${func_options_prep_result+"$func_options_prep_result"} 16363b97a967SRobert Watson eval func_validate_options \ 16373b97a967SRobert Watson ${func_parse_options_result+"$func_parse_options_result"} 16383b97a967SRobert Watson 1639d9af45c4SRobert Watson eval func_run_hooks func_options \ 1640d9af45c4SRobert Watson ${func_validate_options_result+"$func_validate_options_result"} 1641d9af45c4SRobert Watson 1642d9af45c4SRobert Watson # save modified positional parameters for caller 1643d9af45c4SRobert Watson func_options_result=$func_run_hooks_result 1644d9af45c4SRobert Watson} 1645d9af45c4SRobert Watson 1646d9af45c4SRobert Watson 1647d9af45c4SRobert Watson# func_options_prep [ARG]... 16483b97a967SRobert Watson# -------------------------- 16493b97a967SRobert Watson# All initialisations required before starting the option parse loop. 16503b97a967SRobert Watson# Note that when calling hook functions, we pass through the list of 16513b97a967SRobert Watson# positional parameters. If a hook function modifies that list, and 16523b97a967SRobert Watson# needs to propogate that back to rest of this script, then the complete 16533b97a967SRobert Watson# modified list must be put in 'func_run_hooks_result' before 16543b97a967SRobert Watson# returning. 16553b97a967SRobert Watsonfunc_hookable func_options_prep 16563b97a967SRobert Watsonfunc_options_prep () 16573b97a967SRobert Watson{ 16583b97a967SRobert Watson $debug_cmd 16593b97a967SRobert Watson 16603b97a967SRobert Watson # Option defaults: 16613b97a967SRobert Watson opt_verbose=false 16623b97a967SRobert Watson opt_warning_types= 16633b97a967SRobert Watson 16643b97a967SRobert Watson func_run_hooks func_options_prep ${1+"$@"} 16653b97a967SRobert Watson 16663b97a967SRobert Watson # save modified positional parameters for caller 16673b97a967SRobert Watson func_options_prep_result=$func_run_hooks_result 16683b97a967SRobert Watson} 16693b97a967SRobert Watson 16703b97a967SRobert Watson 1671eb336521SRobert Watson# func_parse_options [ARG]... 16723b97a967SRobert Watson# --------------------------- 16733b97a967SRobert Watson# The main option parsing loop. 16743b97a967SRobert Watsonfunc_hookable func_parse_options 1675d9af45c4SRobert Watsonfunc_parse_options () 16763b97a967SRobert Watson{ 16773b97a967SRobert Watson $debug_cmd 16783b97a967SRobert Watson 16793b97a967SRobert Watson func_parse_options_result= 16803b97a967SRobert Watson 16813b97a967SRobert Watson # this just eases exit handling 16823b97a967SRobert Watson while test $# -gt 0; do 16833b97a967SRobert Watson # Defer to hook functions for initial option parsing, so they 16843b97a967SRobert Watson # get priority in the event of reusing an option name. 16853b97a967SRobert Watson func_run_hooks func_parse_options ${1+"$@"} 16863b97a967SRobert Watson 16873b97a967SRobert Watson # Adjust func_parse_options positional parameters to match 16883b97a967SRobert Watson eval set dummy "$func_run_hooks_result"; shift 16893b97a967SRobert Watson 1690d9af45c4SRobert Watson # Break out of the loop if we already parsed every option. 1691d9af45c4SRobert Watson test $# -gt 0 || break 1692eb336521SRobert Watson 1693eb336521SRobert Watson _G_opt=$1 1694d9af45c4SRobert Watson shift 1695eb336521SRobert Watson case $_G_opt in 1696eb336521SRobert Watson --debug|-x) debug_cmd='set -x' 16973b97a967SRobert Watson func_echo "enabling shell trace mode" 16983b97a967SRobert Watson $debug_cmd 16993b97a967SRobert Watson ;; 17003b97a967SRobert Watson 17013b97a967SRobert Watson --no-warnings|--no-warning|--no-warn) 17023b97a967SRobert Watson set dummy --warnings none ${1+"$@"} 17033b97a967SRobert Watson shift 17043b97a967SRobert Watson ;; 17053b97a967SRobert Watson 17063b97a967SRobert Watson --warnings|--warning|-W) 17073b97a967SRobert Watson test $# = 0 && func_missing_arg $_G_opt && break 17083b97a967SRobert Watson case " $warning_categories $1" in 17093b97a967SRobert Watson *" $1 "*) 17103b97a967SRobert Watson # trailing space prevents matching last $1 above 17113b97a967SRobert Watson func_append_uniq opt_warning_types " $1" 17123b97a967SRobert Watson ;; 17133b97a967SRobert Watson *all) 17143b97a967SRobert Watson opt_warning_types=$warning_categories 17153b97a967SRobert Watson ;; 17163b97a967SRobert Watson *none) 17173b97a967SRobert Watson opt_warning_types=none 17183b97a967SRobert Watson warning_func=: 17193b97a967SRobert Watson ;; 17203b97a967SRobert Watson *error) 17213b97a967SRobert Watson opt_warning_types=$warning_categories 17223b97a967SRobert Watson warning_func=func_fatal_error 17233b97a967SRobert Watson ;; 1724eb336521SRobert Watson *) 17253b97a967SRobert Watson func_fatal_error \ 1726eb336521SRobert Watson "unsupported warning category: '$1'" 17273b97a967SRobert Watson ;; 17283b97a967SRobert Watson esac 17293b97a967SRobert Watson shift 17303b97a967SRobert Watson ;; 17313b97a967SRobert Watson 17323b97a967SRobert Watson --verbose|-v) opt_verbose=: ;; 17333b97a967SRobert Watson --version) func_version ;; 17343b97a967SRobert Watson -\?|-h) func_usage ;; 17353b97a967SRobert Watson --help) func_help ;; 17363b97a967SRobert Watson 17373b97a967SRobert Watson # Separate optargs to long options (plugins may need this): 17383b97a967SRobert Watson --*=*) func_split_equals "$_G_opt" 17393b97a967SRobert Watson set dummy "$func_split_equals_lhs" \ 17403b97a967SRobert Watson "$func_split_equals_rhs" ${1+"$@"} 17413b97a967SRobert Watson shift 17423b97a967SRobert Watson ;; 17433b97a967SRobert Watson 17443b97a967SRobert Watson # Separate optargs to short options: 17453b97a967SRobert Watson -W*) 17463b97a967SRobert Watson func_split_short_opt "$_G_opt" 17473b97a967SRobert Watson set dummy "$func_split_short_opt_name" \ 17483b97a967SRobert Watson "$func_split_short_opt_arg" ${1+"$@"} 17493b97a967SRobert Watson shift 17503b97a967SRobert Watson ;; 17513b97a967SRobert Watson 17523b97a967SRobert Watson # Separate non-argument short options: 17533b97a967SRobert Watson -\?*|-h*|-v*|-x*) 17543b97a967SRobert Watson func_split_short_opt "$_G_opt" 17553b97a967SRobert Watson set dummy "$func_split_short_opt_name" \ 17563b97a967SRobert Watson "-$func_split_short_opt_arg" ${1+"$@"} 17573b97a967SRobert Watson shift 17583b97a967SRobert Watson ;; 17593b97a967SRobert Watson 17603b97a967SRobert Watson --) break ;; 17613b97a967SRobert Watson -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 17623b97a967SRobert Watson *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 17633b97a967SRobert Watson esac 17643b97a967SRobert Watson done 17653b97a967SRobert Watson 17663b97a967SRobert Watson # save modified positional parameters for caller 17673b97a967SRobert Watson func_quote_for_eval ${1+"$@"} 17683b97a967SRobert Watson func_parse_options_result=$func_quote_for_eval_result 17693b97a967SRobert Watson} 17703b97a967SRobert Watson 17713b97a967SRobert Watson 17723b97a967SRobert Watson# func_validate_options [ARG]... 17733b97a967SRobert Watson# ------------------------------ 17743b97a967SRobert Watson# Perform any sanity checks on option settings and/or unconsumed 17753b97a967SRobert Watson# arguments. 17763b97a967SRobert Watsonfunc_hookable func_validate_options 17773b97a967SRobert Watsonfunc_validate_options () 17783b97a967SRobert Watson{ 17793b97a967SRobert Watson $debug_cmd 17803b97a967SRobert Watson 17813b97a967SRobert Watson # Display all warnings if -W was not given. 17823b97a967SRobert Watson test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 17833b97a967SRobert Watson 17843b97a967SRobert Watson func_run_hooks func_validate_options ${1+"$@"} 1785eb336521SRobert Watson 17863b97a967SRobert Watson # Bail if the options were screwed! 17873b97a967SRobert Watson $exit_cmd $EXIT_FAILURE 17883b97a967SRobert Watson 17893b97a967SRobert Watson # save modified positional parameters for caller 17903b97a967SRobert Watson func_validate_options_result=$func_run_hooks_result 17913b97a967SRobert Watson} 17923b97a967SRobert Watson 17933b97a967SRobert Watson 17943b97a967SRobert Watson 17953b97a967SRobert Watson## ----------------- ## 17963b97a967SRobert Watson## Helper functions. ## 17973b97a967SRobert Watson## ----------------- ## 17983b97a967SRobert Watson 17993b97a967SRobert Watson# This section contains the helper functions used by the rest of the 18003b97a967SRobert Watson# hookable option parser framework in ascii-betical order. 18013b97a967SRobert Watson 18023b97a967SRobert Watson 18033b97a967SRobert Watson# func_fatal_help ARG... 18043b97a967SRobert Watson# ---------------------- 18053b97a967SRobert Watson# Echo program name prefixed message to standard error, followed by 18063b97a967SRobert Watson# a help hint, and exit. 18073b97a967SRobert Watsonfunc_fatal_help () 18083b97a967SRobert Watson{ 18093b97a967SRobert Watson $debug_cmd 18103b97a967SRobert Watson 18113b97a967SRobert Watson eval \$ECHO \""Usage: $usage"\" 18123b97a967SRobert Watson eval \$ECHO \""$fatal_help"\" 18133b97a967SRobert Watson func_error ${1+"$@"} 18143b97a967SRobert Watson exit $EXIT_FAILURE 18153b97a967SRobert Watson} 18163b97a967SRobert Watson 18173b97a967SRobert Watson 18183b97a967SRobert Watson# func_help 18193b97a967SRobert Watson# --------- 18203b97a967SRobert Watson# Echo long help message to standard output and exit. 18213b97a967SRobert Watsonfunc_help () 18223b97a967SRobert Watson{ 18233b97a967SRobert Watson $debug_cmd 18243b97a967SRobert Watson 18253b97a967SRobert Watson func_usage_message 18263b97a967SRobert Watson $ECHO "$long_help_message" 18273b97a967SRobert Watson exit 0 18283b97a967SRobert Watson} 18293b97a967SRobert Watson 18303b97a967SRobert Watson 18313b97a967SRobert Watson# func_missing_arg ARGNAME 18323b97a967SRobert Watson# ------------------------ 18333b97a967SRobert Watson# Echo program name prefixed message to standard error and set global 18343b97a967SRobert Watson# exit_cmd. 18353b97a967SRobert Watsonfunc_missing_arg () 18363b97a967SRobert Watson{ 18373b97a967SRobert Watson $debug_cmd 18383b97a967SRobert Watson 18393b97a967SRobert Watson func_error "Missing argument for '$1'." 18403b97a967SRobert Watson exit_cmd=exit 18413b97a967SRobert Watson} 18423b97a967SRobert Watson 18433b97a967SRobert Watson 18443b97a967SRobert Watson# func_split_equals STRING 18453b97a967SRobert Watson# ------------------------ 18463b97a967SRobert Watson# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 18473b97a967SRobert Watson# splitting STRING at the '=' sign. 18483b97a967SRobert Watsontest -z "$_G_HAVE_XSI_OPS" \ 18493b97a967SRobert Watson && (eval 'x=a/b/c; 18503b97a967SRobert Watson test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 18513b97a967SRobert Watson && _G_HAVE_XSI_OPS=yes 18523b97a967SRobert Watson 18533b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS" 18543b97a967SRobert Watsonthen 18553b97a967SRobert Watson # This is an XSI compatible shell, allowing a faster implementation... 18563b97a967SRobert Watson eval 'func_split_equals () 18573b97a967SRobert Watson { 18583b97a967SRobert Watson $debug_cmd 18593b97a967SRobert Watson 18603b97a967SRobert Watson func_split_equals_lhs=${1%%=*} 18613b97a967SRobert Watson func_split_equals_rhs=${1#*=} 18623b97a967SRobert Watson test "x$func_split_equals_lhs" = "x$1" \ 18633b97a967SRobert Watson && func_split_equals_rhs= 18643b97a967SRobert Watson }' 18653b97a967SRobert Watsonelse 18663b97a967SRobert Watson # ...otherwise fall back to using expr, which is often a shell builtin. 18673b97a967SRobert Watson func_split_equals () 18683b97a967SRobert Watson { 18693b97a967SRobert Watson $debug_cmd 18703b97a967SRobert Watson 18713b97a967SRobert Watson func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 18723b97a967SRobert Watson func_split_equals_rhs= 18733b97a967SRobert Watson test "x$func_split_equals_lhs" = "x$1" \ 18743b97a967SRobert Watson || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 18753b97a967SRobert Watson } 18763b97a967SRobert Watsonfi #func_split_equals 18773b97a967SRobert Watson 18783b97a967SRobert Watson 18793b97a967SRobert Watson# func_split_short_opt SHORTOPT 18803b97a967SRobert Watson# ----------------------------- 18813b97a967SRobert Watson# Set func_split_short_opt_name and func_split_short_opt_arg shell 18823b97a967SRobert Watson# variables after splitting SHORTOPT after the 2nd character. 18833b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS" 18843b97a967SRobert Watsonthen 18853b97a967SRobert Watson # This is an XSI compatible shell, allowing a faster implementation... 18863b97a967SRobert Watson eval 'func_split_short_opt () 18873b97a967SRobert Watson { 18883b97a967SRobert Watson $debug_cmd 18893b97a967SRobert Watson 18903b97a967SRobert Watson func_split_short_opt_arg=${1#??} 18913b97a967SRobert Watson func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 18923b97a967SRobert Watson }' 18933b97a967SRobert Watsonelse 18943b97a967SRobert Watson # ...otherwise fall back to using expr, which is often a shell builtin. 18953b97a967SRobert Watson func_split_short_opt () 18963b97a967SRobert Watson { 18973b97a967SRobert Watson $debug_cmd 18983b97a967SRobert Watson 18993b97a967SRobert Watson func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 19003b97a967SRobert Watson func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 19013b97a967SRobert Watson } 19023b97a967SRobert Watsonfi #func_split_short_opt 19033b97a967SRobert Watson 19043b97a967SRobert Watson 19053b97a967SRobert Watson# func_usage 19063b97a967SRobert Watson# ---------- 19073b97a967SRobert Watson# Echo short help message to standard output and exit. 19083b97a967SRobert Watsonfunc_usage () 19093b97a967SRobert Watson{ 19103b97a967SRobert Watson $debug_cmd 19113b97a967SRobert Watson 19123b97a967SRobert Watson func_usage_message 19133b97a967SRobert Watson $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 19143b97a967SRobert Watson exit 0 19153b97a967SRobert Watson} 19163b97a967SRobert Watson 19173b97a967SRobert Watson 19183b97a967SRobert Watson# func_usage_message 19193b97a967SRobert Watson# ------------------ 19203b97a967SRobert Watson# Echo short help message to standard output. 19213b97a967SRobert Watsonfunc_usage_message () 19223b97a967SRobert Watson{ 19233b97a967SRobert Watson $debug_cmd 19243b97a967SRobert Watson 19253b97a967SRobert Watson eval \$ECHO \""Usage: $usage"\" 19263b97a967SRobert Watson echo 19273b97a967SRobert Watson $SED -n 's|^# || 19283b97a967SRobert Watson /^Written by/{ 19293b97a967SRobert Watson x;p;x 19303b97a967SRobert Watson } 19313b97a967SRobert Watson h 19323b97a967SRobert Watson /^Written by/q' < "$progpath" 19333b97a967SRobert Watson echo 19343b97a967SRobert Watson eval \$ECHO \""$usage_message"\" 19353b97a967SRobert Watson} 19363b97a967SRobert Watson 19373b97a967SRobert Watson 19383b97a967SRobert Watson# func_version 19393b97a967SRobert Watson# ------------ 19403b97a967SRobert Watson# Echo version message to standard output and exit. 19413b97a967SRobert Watsonfunc_version () 19423b97a967SRobert Watson{ 19433b97a967SRobert Watson $debug_cmd 19443b97a967SRobert Watson 19453b97a967SRobert Watson printf '%s\n' "$progname $scriptversion" 1946d9af45c4SRobert Watson $SED -n ' 1947d9af45c4SRobert Watson /(C)/!b go 1948d9af45c4SRobert Watson :more 1949d9af45c4SRobert Watson /\./!{ 1950d9af45c4SRobert Watson N 19513b97a967SRobert Watson s|\n# | | 19523b97a967SRobert Watson b more 19533b97a967SRobert Watson } 19543b97a967SRobert Watson :go 19553b97a967SRobert Watson /^# Written by /,/# warranty; / { 19563b97a967SRobert Watson s|^# || 19573b97a967SRobert Watson s|^# *$|| 19583b97a967SRobert Watson s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 19593b97a967SRobert Watson p 19603b97a967SRobert Watson } 19613b97a967SRobert Watson /^# Written by / { 19623b97a967SRobert Watson s|^# || 19633b97a967SRobert Watson p 19643b97a967SRobert Watson } 19653b97a967SRobert Watson /^warranty; /q' < "$progpath" 19663b97a967SRobert Watson 19673b97a967SRobert Watson exit $? 19683b97a967SRobert Watson} 19693b97a967SRobert Watson 19703b97a967SRobert Watson 19713b97a967SRobert Watson# Local variables: 19723b97a967SRobert Watson# mode: shell-script 19733b97a967SRobert Watson# sh-indentation: 2 19743b97a967SRobert Watson# eval: (add-hook 'before-save-hook 'time-stamp) 19753b97a967SRobert Watson# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 19763b97a967SRobert Watson# time-stamp-time-zone: "UTC" 19773b97a967SRobert Watson# End: 19783b97a967SRobert Watson 19793b97a967SRobert Watson# Set a version string. 19803b97a967SRobert Watsonscriptversion='(GNU libtool) 2.4.6' 19813b97a967SRobert Watson 19823b97a967SRobert Watson 19833b97a967SRobert Watson# func_echo ARG... 19843b97a967SRobert Watson# ---------------- 19853b97a967SRobert Watson# Libtool also displays the current mode in messages, so override 19863b97a967SRobert Watson# funclib.sh func_echo with this custom definition. 19873b97a967SRobert Watsonfunc_echo () 19883b97a967SRobert Watson{ 19893b97a967SRobert Watson $debug_cmd 19903b97a967SRobert Watson 19913b97a967SRobert Watson _G_message=$* 19923b97a967SRobert Watson 19933b97a967SRobert Watson func_echo_IFS=$IFS 19943b97a967SRobert Watson IFS=$nl 19953b97a967SRobert Watson for _G_line in $_G_message; do 19963b97a967SRobert Watson IFS=$func_echo_IFS 19973b97a967SRobert Watson $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 19983b97a967SRobert Watson done 19993b97a967SRobert Watson IFS=$func_echo_IFS 20003b97a967SRobert Watson} 20013b97a967SRobert Watson 20023b97a967SRobert Watson 20033b97a967SRobert Watson# func_warning ARG... 20043b97a967SRobert Watson# ------------------- 20053b97a967SRobert Watson# Libtool warnings are not categorized, so override funclib.sh 20063b97a967SRobert Watson# func_warning with this simpler definition. 20073b97a967SRobert Watsonfunc_warning () 20083b97a967SRobert Watson{ 20093b97a967SRobert Watson $debug_cmd 20103b97a967SRobert Watson 20113b97a967SRobert Watson $warning_func ${1+"$@"} 20123b97a967SRobert Watson} 20133b97a967SRobert Watson 20143b97a967SRobert Watson 20153b97a967SRobert Watson## ---------------- ## 20163b97a967SRobert Watson## Options parsing. ## 20173b97a967SRobert Watson## ---------------- ## 20183b97a967SRobert Watson 20193b97a967SRobert Watson# Hook in the functions to make sure our own options are parsed during 20203b97a967SRobert Watson# the option parsing loop. 20213b97a967SRobert Watson 20223b97a967SRobert Watsonusage='$progpath [OPTION]... [MODE-ARG]...' 20233b97a967SRobert Watson 20243b97a967SRobert Watson# Short help message in response to '-h'. 20253b97a967SRobert Watsonusage_message="Options: 20263b97a967SRobert Watson --config show all configuration variables 20273b97a967SRobert Watson --debug enable verbose shell tracing 20283b97a967SRobert Watson -n, --dry-run display commands without modifying any files 20293b97a967SRobert Watson --features display basic configuration information and exit 20303b97a967SRobert Watson --mode=MODE use operation mode MODE 20313b97a967SRobert Watson --no-warnings equivalent to '-Wnone' 20323b97a967SRobert Watson --preserve-dup-deps don't remove duplicate dependency libraries 20333b97a967SRobert Watson --quiet, --silent don't print informational messages 20343b97a967SRobert Watson --tag=TAG use configuration variables from tag TAG 20353b97a967SRobert Watson -v, --verbose print more informational messages than default 20363b97a967SRobert Watson --version print version information 20373b97a967SRobert Watson -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 20383b97a967SRobert Watson -h, --help, --help-all print short, long, or detailed help message 20393b97a967SRobert Watson" 20403b97a967SRobert Watson 20413b97a967SRobert Watson# Additional text appended to 'usage_message' in response to '--help'. 20423b97a967SRobert Watsonfunc_help () 20433b97a967SRobert Watson{ 20443b97a967SRobert Watson $debug_cmd 20453b97a967SRobert Watson 20463b97a967SRobert Watson func_usage_message 20473b97a967SRobert Watson $ECHO "$long_help_message 20483b97a967SRobert Watson 20493b97a967SRobert WatsonMODE must be one of the following: 20503b97a967SRobert Watson 20513b97a967SRobert Watson clean remove files from the build directory 20523b97a967SRobert Watson compile compile a source file into a libtool object 20533b97a967SRobert Watson execute automatically set library path, then run a program 20543b97a967SRobert Watson finish complete the installation of libtool libraries 20553b97a967SRobert Watson install install libraries or executables 2056d9af45c4SRobert Watson link create a library or an executable 2057d9af45c4SRobert Watson uninstall remove libraries from an installed directory 2058d9af45c4SRobert Watson 20593b97a967SRobert WatsonMODE-ARGS vary depending on the MODE. When passed as first option, 20603b97a967SRobert Watson'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 20613b97a967SRobert WatsonTry '$progname --help --mode=MODE' for a more detailed description of MODE. 20623b97a967SRobert Watson 20633b97a967SRobert WatsonWhen reporting a bug, please describe a test case to reproduce it and 20643b97a967SRobert Watsoninclude the following information: 20653b97a967SRobert Watson 20663b97a967SRobert Watson host-triplet: $host 20673b97a967SRobert Watson shell: $SHELL 20683b97a967SRobert Watson compiler: $LTCC 20693b97a967SRobert Watson compiler flags: $LTCFLAGS 20703b97a967SRobert Watson linker: $LD (gnu? $with_gnu_ld) 20713b97a967SRobert Watson version: $progname (GNU libtool) 2.4.6 20723b97a967SRobert Watson automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 20733b97a967SRobert Watson autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 20743b97a967SRobert Watson 20753b97a967SRobert WatsonReport bugs to <bug-libtool@gnu.org>. 20763b97a967SRobert WatsonGNU libtool home page: <http://www.gnu.org/software/libtool/>. 20773b97a967SRobert WatsonGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 20783b97a967SRobert Watson exit 0 20793b97a967SRobert Watson} 20803b97a967SRobert Watson 20813b97a967SRobert Watson 20823b97a967SRobert Watson# func_lo2o OBJECT-NAME 20833b97a967SRobert Watson# --------------------- 20843b97a967SRobert Watson# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 20853b97a967SRobert Watson# object suffix. 20863b97a967SRobert Watson 20873b97a967SRobert Watsonlo2o=s/\\.lo\$/.$objext/ 20883b97a967SRobert Watsono2lo=s/\\.$objext\$/.lo/ 20893b97a967SRobert Watson 20903b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then 20913b97a967SRobert Watson eval 'func_lo2o () 20923b97a967SRobert Watson { 20933b97a967SRobert Watson case $1 in 20943b97a967SRobert Watson *.lo) func_lo2o_result=${1%.lo}.$objext ;; 20953b97a967SRobert Watson * ) func_lo2o_result=$1 ;; 20963b97a967SRobert Watson esac 20973b97a967SRobert Watson }' 20983b97a967SRobert Watson 20993b97a967SRobert Watson # func_xform LIBOBJ-OR-SOURCE 21003b97a967SRobert Watson # --------------------------- 21013b97a967SRobert Watson # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 21023b97a967SRobert Watson # suffix to a '.lo' libtool-object suffix. 21033b97a967SRobert Watson eval 'func_xform () 21043b97a967SRobert Watson { 21053b97a967SRobert Watson func_xform_result=${1%.*}.lo 21063b97a967SRobert Watson }' 21073b97a967SRobert Watsonelse 21083b97a967SRobert Watson # ...otherwise fall back to using sed. 21093b97a967SRobert Watson func_lo2o () 21103b97a967SRobert Watson { 21113b97a967SRobert Watson func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 21123b97a967SRobert Watson } 21133b97a967SRobert Watson 21143b97a967SRobert Watson func_xform () 21153b97a967SRobert Watson { 21163b97a967SRobert Watson func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 21173b97a967SRobert Watson } 21183b97a967SRobert Watsonfi 21193b97a967SRobert Watson 21203b97a967SRobert Watson 21213b97a967SRobert Watson# func_fatal_configuration ARG... 21223b97a967SRobert Watson# ------------------------------- 21233b97a967SRobert Watson# Echo program name prefixed message to standard error, followed by 21243b97a967SRobert Watson# a configuration failure hint, and exit. 21253b97a967SRobert Watsonfunc_fatal_configuration () 21263b97a967SRobert Watson{ 21273b97a967SRobert Watson func__fatal_error ${1+"$@"} \ 21283b97a967SRobert Watson "See the $PACKAGE documentation for more information." \ 21293b97a967SRobert Watson "Fatal configuration error." 21303b97a967SRobert Watson} 21313b97a967SRobert Watson 21323b97a967SRobert Watson 21333b97a967SRobert Watson# func_config 21343b97a967SRobert Watson# ----------- 21353b97a967SRobert Watson# Display the configuration for all the tags in this script. 21363b97a967SRobert Watsonfunc_config () 21373b97a967SRobert Watson{ 21383b97a967SRobert Watson re_begincf='^# ### BEGIN LIBTOOL' 21393b97a967SRobert Watson re_endcf='^# ### END LIBTOOL' 21403b97a967SRobert Watson 21413b97a967SRobert Watson # Default configuration. 21423b97a967SRobert Watson $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 21433b97a967SRobert Watson 21443b97a967SRobert Watson # Now print the configurations for the tags. 21453b97a967SRobert Watson for tagname in $taglist; do 21463b97a967SRobert Watson $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 21473b97a967SRobert Watson done 21483b97a967SRobert Watson 21493b97a967SRobert Watson exit $? 21503b97a967SRobert Watson} 21513b97a967SRobert Watson 21523b97a967SRobert Watson 21533b97a967SRobert Watson# func_features 21543b97a967SRobert Watson# ------------- 21553b97a967SRobert Watson# Display the features supported by this script. 21563b97a967SRobert Watsonfunc_features () 21573b97a967SRobert Watson{ 21583b97a967SRobert Watson echo "host: $host" 21593b97a967SRobert Watson if test yes = "$build_libtool_libs"; then 21603b97a967SRobert Watson echo "enable shared libraries" 21613b97a967SRobert Watson else 21623b97a967SRobert Watson echo "disable shared libraries" 21633b97a967SRobert Watson fi 21643b97a967SRobert Watson if test yes = "$build_old_libs"; then 21653b97a967SRobert Watson echo "enable static libraries" 21663b97a967SRobert Watson else 2167eb336521SRobert Watson echo "disable static libraries" 21683b97a967SRobert Watson fi 21693b97a967SRobert Watson 21703b97a967SRobert Watson exit $? 21713b97a967SRobert Watson} 21723b97a967SRobert Watson 21733b97a967SRobert Watson 2174d9af45c4SRobert Watson# func_enable_tag TAGNAME 2175d9af45c4SRobert Watson# ----------------------- 2176d9af45c4SRobert Watson# Verify that TAGNAME is valid, and either flag an error and exit, or 2177d9af45c4SRobert Watson# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2178d9af45c4SRobert Watson# variable here. 2179d9af45c4SRobert Watsonfunc_enable_tag () 2180d9af45c4SRobert Watson{ 2181d9af45c4SRobert Watson # Global variable: 2182d9af45c4SRobert Watson tagname=$1 2183d9af45c4SRobert Watson 2184d9af45c4SRobert Watson re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2185d9af45c4SRobert Watson re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2186d9af45c4SRobert Watson sed_extractcf=/$re_begincf/,/$re_endcf/p 2187d9af45c4SRobert Watson 2188d9af45c4SRobert Watson # Validate tagname. 2189d9af45c4SRobert Watson case $tagname in 2190d9af45c4SRobert Watson *[!-_A-Za-z0-9,/]*) 2191d9af45c4SRobert Watson func_fatal_error "invalid tag name: $tagname" 2192d9af45c4SRobert Watson ;; 2193d9af45c4SRobert Watson esac 2194d9af45c4SRobert Watson 2195d9af45c4SRobert Watson # Don't test for the "default" C tag, as we know it's 2196d9af45c4SRobert Watson # there but not specially marked. 21973b97a967SRobert Watson case $tagname in 21983b97a967SRobert Watson CC) ;; 21993b97a967SRobert Watson *) 22003b97a967SRobert Watson if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 22013b97a967SRobert Watson taglist="$taglist $tagname" 22023b97a967SRobert Watson 22033b97a967SRobert Watson # Evaluate the configuration. Be careful to quote the path 22043b97a967SRobert Watson # and the sed script, to avoid splitting on whitespace, but 22053b97a967SRobert Watson # also don't use non-portable quotes within backquotes within 22063b97a967SRobert Watson # quotes we have to do it in 2 steps: 22073b97a967SRobert Watson extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 22083b97a967SRobert Watson eval "$extractedcf" 22093b97a967SRobert Watson else 22103b97a967SRobert Watson func_error "ignoring unknown tag $tagname" 22113b97a967SRobert Watson fi 22123b97a967SRobert Watson ;; 22133b97a967SRobert Watson esac 22143b97a967SRobert Watson} 22153b97a967SRobert Watson 22163b97a967SRobert Watson 22173b97a967SRobert Watson# func_check_version_match 22183b97a967SRobert Watson# ------------------------ 22193b97a967SRobert Watson# Ensure that we are using m4 macros, and libtool script from the same 22203b97a967SRobert Watson# release of libtool. 22213b97a967SRobert Watsonfunc_check_version_match () 22223b97a967SRobert Watson{ 22233b97a967SRobert Watson if test "$package_revision" != "$macro_revision"; then 22243b97a967SRobert Watson if test "$VERSION" != "$macro_version"; then 22253b97a967SRobert Watson if test -z "$macro_version"; then 22263b97a967SRobert Watson cat >&2 <<_LT_EOF 22273b97a967SRobert Watson$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 22283b97a967SRobert Watson$progname: definition of this LT_INIT comes from an older release. 22293b97a967SRobert Watson$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 22303b97a967SRobert Watson$progname: and run autoconf again. 22313b97a967SRobert Watson_LT_EOF 22323b97a967SRobert Watson else 22333b97a967SRobert Watson cat >&2 <<_LT_EOF 22343b97a967SRobert Watson$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 22353b97a967SRobert Watson$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 22363b97a967SRobert Watson$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 22373b97a967SRobert Watson$progname: and run autoconf again. 22383b97a967SRobert Watson_LT_EOF 22393b97a967SRobert Watson fi 22403b97a967SRobert Watson else 22413b97a967SRobert Watson cat >&2 <<_LT_EOF 22423b97a967SRobert Watson$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 22433b97a967SRobert Watson$progname: but the definition of this LT_INIT comes from revision $macro_revision. 22443b97a967SRobert Watson$progname: You should recreate aclocal.m4 with macros from revision $package_revision 22453b97a967SRobert Watson$progname: of $PACKAGE $VERSION and run autoconf again. 22463b97a967SRobert Watson_LT_EOF 22473b97a967SRobert Watson fi 22483b97a967SRobert Watson 22493b97a967SRobert Watson exit $EXIT_MISMATCH 22503b97a967SRobert Watson fi 22513b97a967SRobert Watson} 22523b97a967SRobert Watson 22533b97a967SRobert Watson 22543b97a967SRobert Watson# libtool_options_prep [ARG]... 22553b97a967SRobert Watson# ----------------------------- 22563b97a967SRobert Watson# Preparation for options parsed by libtool. 22573b97a967SRobert Watsonlibtool_options_prep () 22583b97a967SRobert Watson{ 22593b97a967SRobert Watson $debug_mode 22603b97a967SRobert Watson 22613b97a967SRobert Watson # Option defaults: 22623b97a967SRobert Watson opt_config=false 22633b97a967SRobert Watson opt_dlopen= 22643b97a967SRobert Watson opt_dry_run=false 22653b97a967SRobert Watson opt_help=false 22663b97a967SRobert Watson opt_mode= 22673b97a967SRobert Watson opt_preserve_dup_deps=false 22683b97a967SRobert Watson opt_quiet=false 22693b97a967SRobert Watson 22703b97a967SRobert Watson nonopt= 22713b97a967SRobert Watson preserve_args= 22723b97a967SRobert Watson 22733b97a967SRobert Watson # Shorthand for --mode=foo, only valid as the first argument 22743b97a967SRobert Watson case $1 in 22753b97a967SRobert Watson clean|clea|cle|cl) 22763b97a967SRobert Watson shift; set dummy --mode clean ${1+"$@"}; shift 22773b97a967SRobert Watson ;; 22783b97a967SRobert Watson compile|compil|compi|comp|com|co|c) 22793b97a967SRobert Watson shift; set dummy --mode compile ${1+"$@"}; shift 22803b97a967SRobert Watson ;; 22813b97a967SRobert Watson execute|execut|execu|exec|exe|ex|e) 22823b97a967SRobert Watson shift; set dummy --mode execute ${1+"$@"}; shift 22833b97a967SRobert Watson ;; 22843b97a967SRobert Watson finish|finis|fini|fin|fi|f) 22853b97a967SRobert Watson shift; set dummy --mode finish ${1+"$@"}; shift 22863b97a967SRobert Watson ;; 22873b97a967SRobert Watson install|instal|insta|inst|ins|in|i) 22883b97a967SRobert Watson shift; set dummy --mode install ${1+"$@"}; shift 22893b97a967SRobert Watson ;; 22903b97a967SRobert Watson link|lin|li|l) 22913b97a967SRobert Watson shift; set dummy --mode link ${1+"$@"}; shift 22923b97a967SRobert Watson ;; 22933b97a967SRobert Watson uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 22943b97a967SRobert Watson shift; set dummy --mode uninstall ${1+"$@"}; shift 22953b97a967SRobert Watson ;; 22963b97a967SRobert Watson esac 22973b97a967SRobert Watson 22983b97a967SRobert Watson # Pass back the list of options. 22993b97a967SRobert Watson func_quote_for_eval ${1+"$@"} 23003b97a967SRobert Watson libtool_options_prep_result=$func_quote_for_eval_result 23013b97a967SRobert Watson} 23023b97a967SRobert Watsonfunc_add_hook func_options_prep libtool_options_prep 23033b97a967SRobert Watson 23043b97a967SRobert Watson 23053b97a967SRobert Watson# libtool_parse_options [ARG]... 23063b97a967SRobert Watson# --------------------------------- 23073b97a967SRobert Watson# Provide handling for libtool specific options. 23083b97a967SRobert Watsonlibtool_parse_options () 23093b97a967SRobert Watson{ 23103b97a967SRobert Watson $debug_cmd 23113b97a967SRobert Watson 23123b97a967SRobert Watson # Perform our own loop to consume as many options as possible in 23133b97a967SRobert Watson # each iteration. 23143b97a967SRobert Watson while test $# -gt 0; do 23153b97a967SRobert Watson _G_opt=$1 23163b97a967SRobert Watson shift 23173b97a967SRobert Watson case $_G_opt in 23183b97a967SRobert Watson --dry-run|--dryrun|-n) 23193b97a967SRobert Watson opt_dry_run=: 23203b97a967SRobert Watson ;; 23213b97a967SRobert Watson 23223b97a967SRobert Watson --config) func_config ;; 23233b97a967SRobert Watson 23243b97a967SRobert Watson --dlopen|-dlopen) 23253b97a967SRobert Watson opt_dlopen="${opt_dlopen+$opt_dlopen 23263b97a967SRobert Watson}$1" 23273b97a967SRobert Watson shift 23283b97a967SRobert Watson ;; 23293b97a967SRobert Watson 23303b97a967SRobert Watson --preserve-dup-deps) 23313b97a967SRobert Watson opt_preserve_dup_deps=: ;; 23323b97a967SRobert Watson 23333b97a967SRobert Watson --features) func_features ;; 23343b97a967SRobert Watson 23353b97a967SRobert Watson --finish) set dummy --mode finish ${1+"$@"}; shift ;; 23363b97a967SRobert Watson 23373b97a967SRobert Watson --help) opt_help=: ;; 23383b97a967SRobert Watson 23393b97a967SRobert Watson --help-all) opt_help=': help-all' ;; 23403b97a967SRobert Watson 23413b97a967SRobert Watson --mode) test $# = 0 && func_missing_arg $_G_opt && break 23423b97a967SRobert Watson opt_mode=$1 23433b97a967SRobert Watson case $1 in 23443b97a967SRobert Watson # Valid mode arguments: 23453b97a967SRobert Watson clean|compile|execute|finish|install|link|relink|uninstall) ;; 23463b97a967SRobert Watson 23473b97a967SRobert Watson # Catch anything else as an error 23483b97a967SRobert Watson *) func_error "invalid argument for $_G_opt" 23493b97a967SRobert Watson exit_cmd=exit 23503b97a967SRobert Watson break 23513b97a967SRobert Watson ;; 23523b97a967SRobert Watson esac 23533b97a967SRobert Watson shift 23543b97a967SRobert Watson ;; 23553b97a967SRobert Watson 23563b97a967SRobert Watson --no-silent|--no-quiet) 23573b97a967SRobert Watson opt_quiet=false 23583b97a967SRobert Watson func_append preserve_args " $_G_opt" 23593b97a967SRobert Watson ;; 23603b97a967SRobert Watson 23613b97a967SRobert Watson --no-warnings|--no-warning|--no-warn) 23623b97a967SRobert Watson opt_warning=false 23633b97a967SRobert Watson func_append preserve_args " $_G_opt" 23643b97a967SRobert Watson ;; 23653b97a967SRobert Watson 23663b97a967SRobert Watson --no-verbose) 23673b97a967SRobert Watson opt_verbose=false 23683b97a967SRobert Watson func_append preserve_args " $_G_opt" 23693b97a967SRobert Watson ;; 23703b97a967SRobert Watson 23713b97a967SRobert Watson --silent|--quiet) 23723b97a967SRobert Watson opt_quiet=: 23733b97a967SRobert Watson opt_verbose=false 23743b97a967SRobert Watson func_append preserve_args " $_G_opt" 23753b97a967SRobert Watson ;; 23763b97a967SRobert Watson 23773b97a967SRobert Watson --tag) test $# = 0 && func_missing_arg $_G_opt && break 23783b97a967SRobert Watson opt_tag=$1 2379d9af45c4SRobert Watson func_append preserve_args " $_G_opt $1" 23803b97a967SRobert Watson func_enable_tag "$1" 23813b97a967SRobert Watson shift 23823b97a967SRobert Watson ;; 23833b97a967SRobert Watson 23843b97a967SRobert Watson --verbose|-v) opt_quiet=false 23853b97a967SRobert Watson opt_verbose=: 23863b97a967SRobert Watson func_append preserve_args " $_G_opt" 23873b97a967SRobert Watson ;; 23883b97a967SRobert Watson 23893b97a967SRobert Watson # An option not handled by this hook function: 23903b97a967SRobert Watson *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 23913b97a967SRobert Watson esac 23923b97a967SRobert Watson done 23933b97a967SRobert Watson 23943b97a967SRobert Watson 23953b97a967SRobert Watson # save modified positional parameters for caller 23963b97a967SRobert Watson func_quote_for_eval ${1+"$@"} 23973b97a967SRobert Watson libtool_parse_options_result=$func_quote_for_eval_result 23983b97a967SRobert Watson} 23993b97a967SRobert Watsonfunc_add_hook func_parse_options libtool_parse_options 24003b97a967SRobert Watson 24013b97a967SRobert Watson 24023b97a967SRobert Watson 24033b97a967SRobert Watson# libtool_validate_options [ARG]... 24043b97a967SRobert Watson# --------------------------------- 24053b97a967SRobert Watson# Perform any sanity checks on option settings and/or unconsumed 24063b97a967SRobert Watson# arguments. 24073b97a967SRobert Watsonlibtool_validate_options () 24083b97a967SRobert Watson{ 24093b97a967SRobert Watson # save first non-option argument 24103b97a967SRobert Watson if test 0 -lt $#; then 24113b97a967SRobert Watson nonopt=$1 24123b97a967SRobert Watson shift 24133b97a967SRobert Watson fi 24143b97a967SRobert Watson 24153b97a967SRobert Watson # preserve --debug 24163b97a967SRobert Watson test : = "$debug_cmd" || func_append preserve_args " --debug" 24173b97a967SRobert Watson 24183b97a967SRobert Watson case $host in 24193b97a967SRobert Watson # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 24203b97a967SRobert Watson # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 24213b97a967SRobert Watson *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 24223b97a967SRobert Watson # don't eliminate duplications in $postdeps and $predeps 24233b97a967SRobert Watson opt_duplicate_compiler_generated_deps=: 24243b97a967SRobert Watson ;; 24253b97a967SRobert Watson *) 24263b97a967SRobert Watson opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 24273b97a967SRobert Watson ;; 24283b97a967SRobert Watson esac 24293b97a967SRobert Watson 24303b97a967SRobert Watson $opt_help || { 24313b97a967SRobert Watson # Sanity checks first: 24323b97a967SRobert Watson func_check_version_match 24333b97a967SRobert Watson 24343b97a967SRobert Watson test yes != "$build_libtool_libs" \ 24353b97a967SRobert Watson && test yes != "$build_old_libs" \ 24363b97a967SRobert Watson && func_fatal_configuration "not configured to build any kind of library" 24373b97a967SRobert Watson 24383b97a967SRobert Watson # Darwin sucks 24393b97a967SRobert Watson eval std_shrext=\"$shrext_cmds\" 24403b97a967SRobert Watson 24413b97a967SRobert Watson # Only execute mode is allowed to have -dlopen flags. 24423b97a967SRobert Watson if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 24433b97a967SRobert Watson func_error "unrecognized option '-dlopen'" 24443b97a967SRobert Watson $ECHO "$help" 1>&2 24453b97a967SRobert Watson exit $EXIT_FAILURE 24463b97a967SRobert Watson fi 24473b97a967SRobert Watson 24483b97a967SRobert Watson # Change the help message to a mode-specific one. 24493b97a967SRobert Watson generic_help=$help 24503b97a967SRobert Watson help="Try '$progname --help --mode=$opt_mode' for more information." 24513b97a967SRobert Watson } 24523b97a967SRobert Watson 24533b97a967SRobert Watson # Pass back the unparsed argument list 24543b97a967SRobert Watson func_quote_for_eval ${1+"$@"} 24553b97a967SRobert Watson libtool_validate_options_result=$func_quote_for_eval_result 24563b97a967SRobert Watson} 24573b97a967SRobert Watsonfunc_add_hook func_validate_options libtool_validate_options 24583b97a967SRobert Watson 24593b97a967SRobert Watson 24603b97a967SRobert Watson# Process options as early as possible so that --help and --version 24613b97a967SRobert Watson# can return quickly. 24623b97a967SRobert Watsonfunc_options ${1+"$@"} 24633b97a967SRobert Watsoneval set dummy "$func_options_result"; shift 24643b97a967SRobert Watson 24653b97a967SRobert Watson 24663b97a967SRobert Watson 24673b97a967SRobert Watson## ----------- ## 24683b97a967SRobert Watson## Main. ## 24693b97a967SRobert Watson## ----------- ## 24703b97a967SRobert Watson 24713b97a967SRobert Watsonmagic='%%%MAGIC variable%%%' 24723b97a967SRobert Watsonmagic_exe='%%%MAGIC EXE variable%%%' 24733b97a967SRobert Watson 24743b97a967SRobert Watson# Global variables. 24753b97a967SRobert Watsonextracted_archives= 24763b97a967SRobert Watsonextracted_serial=0 24773b97a967SRobert Watson 24783b97a967SRobert Watson# If this variable is set in any of the actions, the command in it 24793b97a967SRobert Watson# will be execed at the end. This prevents here-documents from being 24803b97a967SRobert Watson# left over by shells. 24813b97a967SRobert Watsonexec_cmd= 24823b97a967SRobert Watson 24833b97a967SRobert Watson 24843b97a967SRobert Watson# A function that is used when there is no print builtin or printf. 24853b97a967SRobert Watsonfunc_fallback_echo () 24863b97a967SRobert Watson{ 24873b97a967SRobert Watson eval 'cat <<_LTECHO_EOF 24883b97a967SRobert Watson$1 24893b97a967SRobert Watson_LTECHO_EOF' 24903b97a967SRobert Watson} 24913b97a967SRobert Watson 24923b97a967SRobert Watson# func_generated_by_libtool 24933b97a967SRobert Watson# True iff stdin has been generated by Libtool. This function is only 24943b97a967SRobert Watson# a basic sanity check; it will hardly flush out determined imposters. 24953b97a967SRobert Watsonfunc_generated_by_libtool_p () 24963b97a967SRobert Watson{ 24973b97a967SRobert Watson $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 24983b97a967SRobert Watson} 24993b97a967SRobert Watson 25003b97a967SRobert Watson# func_lalib_p file 25013b97a967SRobert Watson# True iff FILE is a libtool '.la' library or '.lo' object file. 25023b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out 25033b97a967SRobert Watson# determined imposters. 25043b97a967SRobert Watsonfunc_lalib_p () 25053b97a967SRobert Watson{ 25063b97a967SRobert Watson test -f "$1" && 25073b97a967SRobert Watson $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 25083b97a967SRobert Watson} 25093b97a967SRobert Watson 25103b97a967SRobert Watson# func_lalib_unsafe_p file 25113b97a967SRobert Watson# True iff FILE is a libtool '.la' library or '.lo' object file. 25123b97a967SRobert Watson# This function implements the same check as func_lalib_p without 25133b97a967SRobert Watson# resorting to external programs. To this end, it redirects stdin and 25143b97a967SRobert Watson# closes it afterwards, without saving the original file descriptor. 25153b97a967SRobert Watson# As a safety measure, use it only where a negative result would be 25163b97a967SRobert Watson# fatal anyway. Works if 'file' does not exist. 25173b97a967SRobert Watsonfunc_lalib_unsafe_p () 25183b97a967SRobert Watson{ 25193b97a967SRobert Watson lalib_p=no 25203b97a967SRobert Watson if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 25213b97a967SRobert Watson for lalib_p_l in 1 2 3 4 25223b97a967SRobert Watson do 25233b97a967SRobert Watson read lalib_p_line 25243b97a967SRobert Watson case $lalib_p_line in 25253b97a967SRobert Watson \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 25263b97a967SRobert Watson esac 25273b97a967SRobert Watson done 25283b97a967SRobert Watson exec 0<&5 5<&- 25293b97a967SRobert Watson fi 25303b97a967SRobert Watson test yes = "$lalib_p" 25313b97a967SRobert Watson} 25323b97a967SRobert Watson 25333b97a967SRobert Watson# func_ltwrapper_script_p file 25343b97a967SRobert Watson# True iff FILE is a libtool wrapper script 25353b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out 25363b97a967SRobert Watson# determined imposters. 25373b97a967SRobert Watsonfunc_ltwrapper_script_p () 25383b97a967SRobert Watson{ 25393b97a967SRobert Watson test -f "$1" && 25403b97a967SRobert Watson $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 25413b97a967SRobert Watson} 25423b97a967SRobert Watson 25433b97a967SRobert Watson# func_ltwrapper_executable_p file 25443b97a967SRobert Watson# True iff FILE is a libtool wrapper executable 25453b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out 25463b97a967SRobert Watson# determined imposters. 25473b97a967SRobert Watsonfunc_ltwrapper_executable_p () 25483b97a967SRobert Watson{ 25493b97a967SRobert Watson func_ltwrapper_exec_suffix= 25503b97a967SRobert Watson case $1 in 25513b97a967SRobert Watson *.exe) ;; 25523b97a967SRobert Watson *) func_ltwrapper_exec_suffix=.exe ;; 25533b97a967SRobert Watson esac 25543b97a967SRobert Watson $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 25553b97a967SRobert Watson} 25563b97a967SRobert Watson 25573b97a967SRobert Watson# func_ltwrapper_scriptname file 25583b97a967SRobert Watson# Assumes file is an ltwrapper_executable 25593b97a967SRobert Watson# uses $file to determine the appropriate filename for a 25603b97a967SRobert Watson# temporary ltwrapper_script. 25613b97a967SRobert Watsonfunc_ltwrapper_scriptname () 25623b97a967SRobert Watson{ 25633b97a967SRobert Watson func_dirname_and_basename "$1" "" "." 25643b97a967SRobert Watson func_stripname '' '.exe' "$func_basename_result" 25653b97a967SRobert Watson func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 25663b97a967SRobert Watson} 25673b97a967SRobert Watson 25683b97a967SRobert Watson# func_ltwrapper_p file 25693b97a967SRobert Watson# True iff FILE is a libtool wrapper script or wrapper executable 25703b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out 25713b97a967SRobert Watson# determined imposters. 25723b97a967SRobert Watsonfunc_ltwrapper_p () 25733b97a967SRobert Watson{ 25743b97a967SRobert Watson func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 25753b97a967SRobert Watson} 25763b97a967SRobert Watson 25773b97a967SRobert Watson 25783b97a967SRobert Watson# func_execute_cmds commands fail_cmd 25793b97a967SRobert Watson# Execute tilde-delimited COMMANDS. 25803b97a967SRobert Watson# If FAIL_CMD is given, eval that upon failure. 25813b97a967SRobert Watson# FAIL_CMD may read-access the current command in variable CMD! 25823b97a967SRobert Watsonfunc_execute_cmds () 25833b97a967SRobert Watson{ 25843b97a967SRobert Watson $debug_cmd 25853b97a967SRobert Watson 2586eb336521SRobert Watson save_ifs=$IFS; IFS='~' 2587eb336521SRobert Watson for cmd in $1; do 2588eb336521SRobert Watson IFS=$sp$nl 25893b97a967SRobert Watson eval cmd=\"$cmd\" 25903b97a967SRobert Watson IFS=$save_ifs 25913b97a967SRobert Watson func_show_eval "$cmd" "${2-:}" 25923b97a967SRobert Watson done 25933b97a967SRobert Watson IFS=$save_ifs 25943b97a967SRobert Watson} 25953b97a967SRobert Watson 25963b97a967SRobert Watson 25973b97a967SRobert Watson# func_source file 25983b97a967SRobert Watson# Source FILE, adding directory component if necessary. 25993b97a967SRobert Watson# Note that it is not necessary on cygwin/mingw to append a dot to 26003b97a967SRobert Watson# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 26013b97a967SRobert Watson# behavior happens only for exec(3), not for open(2)! Also, sourcing 26023b97a967SRobert Watson# 'FILE.' does not work on cygwin managed mounts. 26033b97a967SRobert Watsonfunc_source () 26043b97a967SRobert Watson{ 26053b97a967SRobert Watson $debug_cmd 26063b97a967SRobert Watson 26073b97a967SRobert Watson case $1 in 26083b97a967SRobert Watson */* | *\\*) . "$1" ;; 26093b97a967SRobert Watson *) . "./$1" ;; 26103b97a967SRobert Watson esac 26113b97a967SRobert Watson} 26123b97a967SRobert Watson 26133b97a967SRobert Watson 26143b97a967SRobert Watson# func_resolve_sysroot PATH 26153b97a967SRobert Watson# Replace a leading = in PATH with a sysroot. Store the result into 26163b97a967SRobert Watson# func_resolve_sysroot_result 26173b97a967SRobert Watsonfunc_resolve_sysroot () 26183b97a967SRobert Watson{ 26193b97a967SRobert Watson func_resolve_sysroot_result=$1 26203b97a967SRobert Watson case $func_resolve_sysroot_result in 26213b97a967SRobert Watson =*) 26223b97a967SRobert Watson func_stripname '=' '' "$func_resolve_sysroot_result" 26233b97a967SRobert Watson func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 26243b97a967SRobert Watson ;; 26253b97a967SRobert Watson esac 26263b97a967SRobert Watson} 26273b97a967SRobert Watson 26283b97a967SRobert Watson# func_replace_sysroot PATH 26293b97a967SRobert Watson# If PATH begins with the sysroot, replace it with = and 26303b97a967SRobert Watson# store the result into func_replace_sysroot_result. 26313b97a967SRobert Watsonfunc_replace_sysroot () 2632d9af45c4SRobert Watson{ 2633d9af45c4SRobert Watson case $lt_sysroot:$1 in 2634d9af45c4SRobert Watson ?*:"$lt_sysroot"*) 2635d9af45c4SRobert Watson func_stripname "$lt_sysroot" '' "$1" 26363b97a967SRobert Watson func_replace_sysroot_result='='$func_stripname_result 2637d9af45c4SRobert Watson ;; 26383b97a967SRobert Watson *) 26393b97a967SRobert Watson # Including no sysroot. 26403b97a967SRobert Watson func_replace_sysroot_result=$1 26413b97a967SRobert Watson ;; 26423b97a967SRobert Watson esac 26433b97a967SRobert Watson} 26443b97a967SRobert Watson 26453b97a967SRobert Watson# func_infer_tag arg 26463b97a967SRobert Watson# Infer tagged configuration to use if any are available and 26473b97a967SRobert Watson# if one wasn't chosen via the "--tag" command line option. 26483b97a967SRobert Watson# Only attempt this if the compiler in the base compile 26493b97a967SRobert Watson# command doesn't match the default compiler. 26503b97a967SRobert Watson# arg is usually of the form 'gcc ...' 26513b97a967SRobert Watsonfunc_infer_tag () 26523b97a967SRobert Watson{ 26533b97a967SRobert Watson $debug_cmd 26543b97a967SRobert Watson 26553b97a967SRobert Watson if test -n "$available_tags" && test -z "$tagname"; then 26563b97a967SRobert Watson CC_quoted= 26573b97a967SRobert Watson for arg in $CC; do 26583b97a967SRobert Watson func_append_quoted CC_quoted "$arg" 26593b97a967SRobert Watson done 26603b97a967SRobert Watson CC_expanded=`func_echo_all $CC` 26613b97a967SRobert Watson CC_quoted_expanded=`func_echo_all $CC_quoted` 26623b97a967SRobert Watson case $@ in 26633b97a967SRobert Watson # Blanks in the command may have been stripped by the calling shell, 26643b97a967SRobert Watson # but not from the CC environment variable when configure was run. 26653b97a967SRobert Watson " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 26663b97a967SRobert Watson " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 26673b97a967SRobert Watson # Blanks at the start of $base_compile will cause this to fail 26683b97a967SRobert Watson # if we don't check for them as well. 26693b97a967SRobert Watson *) 26703b97a967SRobert Watson for z in $available_tags; do 26713b97a967SRobert Watson if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 26723b97a967SRobert Watson # Evaluate the configuration. 26733b97a967SRobert Watson eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 26743b97a967SRobert Watson CC_quoted= 26753b97a967SRobert Watson for arg in $CC; do 26763b97a967SRobert Watson # Double-quote args containing other shell metacharacters. 26773b97a967SRobert Watson func_append_quoted CC_quoted "$arg" 26783b97a967SRobert Watson done 26793b97a967SRobert Watson CC_expanded=`func_echo_all $CC` 26803b97a967SRobert Watson CC_quoted_expanded=`func_echo_all $CC_quoted` 26813b97a967SRobert Watson case "$@ " in 26823b97a967SRobert Watson " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 26833b97a967SRobert Watson " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 26843b97a967SRobert Watson # The compiler in the base compile command matches 26853b97a967SRobert Watson # the one in the tagged configuration. 26863b97a967SRobert Watson # Assume this is the tagged configuration we want. 26873b97a967SRobert Watson tagname=$z 26883b97a967SRobert Watson break 26893b97a967SRobert Watson ;; 26903b97a967SRobert Watson esac 26913b97a967SRobert Watson fi 26923b97a967SRobert Watson done 26933b97a967SRobert Watson # If $tagname still isn't set, then no tagged configuration 26943b97a967SRobert Watson # was found and let the user know that the "--tag" command 26953b97a967SRobert Watson # line option must be used. 26963b97a967SRobert Watson if test -z "$tagname"; then 26973b97a967SRobert Watson func_echo "unable to infer tagged configuration" 26983b97a967SRobert Watson func_fatal_error "specify a tag with '--tag'" 26993b97a967SRobert Watson# else 27003b97a967SRobert Watson# func_verbose "using $tagname tagged configuration" 27013b97a967SRobert Watson fi 27023b97a967SRobert Watson ;; 27033b97a967SRobert Watson esac 27043b97a967SRobert Watson fi 27053b97a967SRobert Watson} 27063b97a967SRobert Watson 27073b97a967SRobert Watson 27083b97a967SRobert Watson 27093b97a967SRobert Watson# func_write_libtool_object output_name pic_name nonpic_name 27103b97a967SRobert Watson# Create a libtool object file (analogous to a ".la" file), 27113b97a967SRobert Watson# but don't create it if we're doing a dry run. 27123b97a967SRobert Watsonfunc_write_libtool_object () 27133b97a967SRobert Watson{ 27143b97a967SRobert Watson write_libobj=$1 27153b97a967SRobert Watson if test yes = "$build_libtool_libs"; then 27163b97a967SRobert Watson write_lobj=\'$2\' 27173b97a967SRobert Watson else 27183b97a967SRobert Watson write_lobj=none 27193b97a967SRobert Watson fi 27203b97a967SRobert Watson 27213b97a967SRobert Watson if test yes = "$build_old_libs"; then 27223b97a967SRobert Watson write_oldobj=\'$3\' 27233b97a967SRobert Watson else 27243b97a967SRobert Watson write_oldobj=none 27253b97a967SRobert Watson fi 27263b97a967SRobert Watson 27273b97a967SRobert Watson $opt_dry_run || { 27283b97a967SRobert Watson cat >${write_libobj}T <<EOF 27293b97a967SRobert Watson# $write_libobj - a libtool object file 27303b97a967SRobert Watson# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 27313b97a967SRobert Watson# 27323b97a967SRobert Watson# Please DO NOT delete this file! 27333b97a967SRobert Watson# It is necessary for linking the library. 27343b97a967SRobert Watson 27353b97a967SRobert Watson# Name of the PIC object. 27363b97a967SRobert Watsonpic_object=$write_lobj 27373b97a967SRobert Watson 27383b97a967SRobert Watson# Name of the non-PIC object 27393b97a967SRobert Watsonnon_pic_object=$write_oldobj 27403b97a967SRobert Watson 27413b97a967SRobert WatsonEOF 27423b97a967SRobert Watson $MV "${write_libobj}T" "$write_libobj" 27433b97a967SRobert Watson } 27443b97a967SRobert Watson} 27453b97a967SRobert Watson 27463b97a967SRobert Watson 27473b97a967SRobert Watson################################################## 27483b97a967SRobert Watson# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 27493b97a967SRobert Watson################################################## 2750d9af45c4SRobert Watson 2751d9af45c4SRobert Watson# func_convert_core_file_wine_to_w32 ARG 2752d9af45c4SRobert Watson# Helper function used by file name conversion functions when $build is *nix, 2753d9af45c4SRobert Watson# and $host is mingw, cygwin, or some other w32 environment. Relies on a 27543b97a967SRobert Watson# correctly configured wine environment available, with the winepath program 27553b97a967SRobert Watson# in $build's $PATH. 27563b97a967SRobert Watson# 2757d9af45c4SRobert Watson# ARG is the $build file name to be converted to w32 format. 2758d9af45c4SRobert Watson# Result is available in $func_convert_core_file_wine_to_w32_result, and will 27593b97a967SRobert Watson# be empty on error (or when ARG is empty) 27603b97a967SRobert Watsonfunc_convert_core_file_wine_to_w32 () 27613b97a967SRobert Watson{ 27623b97a967SRobert Watson $debug_cmd 27633b97a967SRobert Watson 27643b97a967SRobert Watson func_convert_core_file_wine_to_w32_result=$1 27653b97a967SRobert Watson if test -n "$1"; then 27663b97a967SRobert Watson # Unfortunately, winepath does not exit with a non-zero error code, so we 27673b97a967SRobert Watson # are forced to check the contents of stdout. On the other hand, if the 27683b97a967SRobert Watson # command is not found, the shell will set an exit code of 127 and print 27693b97a967SRobert Watson # *an error message* to stdout. So we must check for both error code of 27703b97a967SRobert Watson # zero AND non-empty stdout, which explains the odd construction: 27713b97a967SRobert Watson func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 27723b97a967SRobert Watson if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 27733b97a967SRobert Watson func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 27743b97a967SRobert Watson $SED -e "$sed_naive_backslashify"` 27753b97a967SRobert Watson else 27763b97a967SRobert Watson func_convert_core_file_wine_to_w32_result= 27773b97a967SRobert Watson fi 27783b97a967SRobert Watson fi 27793b97a967SRobert Watson} 27803b97a967SRobert Watson# end: func_convert_core_file_wine_to_w32 27813b97a967SRobert Watson 27823b97a967SRobert Watson 27833b97a967SRobert Watson# func_convert_core_path_wine_to_w32 ARG 27843b97a967SRobert Watson# Helper function used by path conversion functions when $build is *nix, and 27853b97a967SRobert Watson# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 27863b97a967SRobert Watson# configured wine environment available, with the winepath program in $build's 27873b97a967SRobert Watson# $PATH. Assumes ARG has no leading or trailing path separator characters. 27883b97a967SRobert Watson# 27893b97a967SRobert Watson# ARG is path to be converted from $build format to win32. 27903b97a967SRobert Watson# Result is available in $func_convert_core_path_wine_to_w32_result. 27913b97a967SRobert Watson# Unconvertible file (directory) names in ARG are skipped; if no directory names 27923b97a967SRobert Watson# are convertible, then the result may be empty. 27933b97a967SRobert Watsonfunc_convert_core_path_wine_to_w32 () 27943b97a967SRobert Watson{ 27953b97a967SRobert Watson $debug_cmd 27963b97a967SRobert Watson 27973b97a967SRobert Watson # unfortunately, winepath doesn't convert paths, only file names 27983b97a967SRobert Watson func_convert_core_path_wine_to_w32_result= 27993b97a967SRobert Watson if test -n "$1"; then 28003b97a967SRobert Watson oldIFS=$IFS 28013b97a967SRobert Watson IFS=: 28023b97a967SRobert Watson for func_convert_core_path_wine_to_w32_f in $1; do 28033b97a967SRobert Watson IFS=$oldIFS 28043b97a967SRobert Watson func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 28053b97a967SRobert Watson if test -n "$func_convert_core_file_wine_to_w32_result"; then 28063b97a967SRobert Watson if test -z "$func_convert_core_path_wine_to_w32_result"; then 28073b97a967SRobert Watson func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 28083b97a967SRobert Watson else 28093b97a967SRobert Watson func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 28103b97a967SRobert Watson fi 28113b97a967SRobert Watson fi 28123b97a967SRobert Watson done 28133b97a967SRobert Watson IFS=$oldIFS 28143b97a967SRobert Watson fi 28153b97a967SRobert Watson} 28163b97a967SRobert Watson# end: func_convert_core_path_wine_to_w32 28173b97a967SRobert Watson 28183b97a967SRobert Watson 28193b97a967SRobert Watson# func_cygpath ARGS... 28203b97a967SRobert Watson# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 28213b97a967SRobert Watson# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 28223b97a967SRobert Watson# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 28233b97a967SRobert Watson# (2), returns the Cygwin file name or path in func_cygpath_result (input 28243b97a967SRobert Watson# file name or path is assumed to be in w32 format, as previously converted 28253b97a967SRobert Watson# from $build's *nix or MSYS format). In case (3), returns the w32 file name 28263b97a967SRobert Watson# or path in func_cygpath_result (input file name or path is assumed to be in 28273b97a967SRobert Watson# Cygwin format). Returns an empty string on error. 28283b97a967SRobert Watson# 28293b97a967SRobert Watson# ARGS are passed to cygpath, with the last one being the file name or path to 28303b97a967SRobert Watson# be converted. 28313b97a967SRobert Watson# 28323b97a967SRobert Watson# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 28333b97a967SRobert Watson# environment variable; do not put it in $PATH. 28343b97a967SRobert Watsonfunc_cygpath () 28353b97a967SRobert Watson{ 28363b97a967SRobert Watson $debug_cmd 28373b97a967SRobert Watson 28383b97a967SRobert Watson if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 28393b97a967SRobert Watson func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 28403b97a967SRobert Watson if test "$?" -ne 0; then 28413b97a967SRobert Watson # on failure, ensure result is empty 28423b97a967SRobert Watson func_cygpath_result= 28433b97a967SRobert Watson fi 28443b97a967SRobert Watson else 28453b97a967SRobert Watson func_cygpath_result= 28463b97a967SRobert Watson func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 28473b97a967SRobert Watson fi 28483b97a967SRobert Watson} 28493b97a967SRobert Watson#end: func_cygpath 28503b97a967SRobert Watson 28513b97a967SRobert Watson 28523b97a967SRobert Watson# func_convert_core_msys_to_w32 ARG 28533b97a967SRobert Watson# Convert file name or path ARG from MSYS format to w32 format. Return 28543b97a967SRobert Watson# result in func_convert_core_msys_to_w32_result. 28553b97a967SRobert Watsonfunc_convert_core_msys_to_w32 () 28563b97a967SRobert Watson{ 28573b97a967SRobert Watson $debug_cmd 28583b97a967SRobert Watson 28593b97a967SRobert Watson # awkward: cmd appends spaces to result 28603b97a967SRobert Watson func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 28613b97a967SRobert Watson $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 28623b97a967SRobert Watson} 28633b97a967SRobert Watson#end: func_convert_core_msys_to_w32 28643b97a967SRobert Watson 28653b97a967SRobert Watson 28663b97a967SRobert Watson# func_convert_file_check ARG1 ARG2 28673b97a967SRobert Watson# Verify that ARG1 (a file name in $build format) was converted to $host 28683b97a967SRobert Watson# format in ARG2. Otherwise, emit an error message, but continue (resetting 28693b97a967SRobert Watson# func_to_host_file_result to ARG1). 28703b97a967SRobert Watsonfunc_convert_file_check () 28713b97a967SRobert Watson{ 28723b97a967SRobert Watson $debug_cmd 28733b97a967SRobert Watson 28743b97a967SRobert Watson if test -z "$2" && test -n "$1"; then 28753b97a967SRobert Watson func_error "Could not determine host file name corresponding to" 28763b97a967SRobert Watson func_error " '$1'" 28773b97a967SRobert Watson func_error "Continuing, but uninstalled executables may not work." 28783b97a967SRobert Watson # Fallback: 28793b97a967SRobert Watson func_to_host_file_result=$1 28803b97a967SRobert Watson fi 28813b97a967SRobert Watson} 28823b97a967SRobert Watson# end func_convert_file_check 28833b97a967SRobert Watson 28843b97a967SRobert Watson 28853b97a967SRobert Watson# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 28863b97a967SRobert Watson# Verify that FROM_PATH (a path in $build format) was converted to $host 28873b97a967SRobert Watson# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 28883b97a967SRobert Watson# func_to_host_file_result to a simplistic fallback value (see below). 28893b97a967SRobert Watsonfunc_convert_path_check () 28903b97a967SRobert Watson{ 28913b97a967SRobert Watson $debug_cmd 28923b97a967SRobert Watson 28933b97a967SRobert Watson if test -z "$4" && test -n "$3"; then 28943b97a967SRobert Watson func_error "Could not determine the host path corresponding to" 28953b97a967SRobert Watson func_error " '$3'" 28963b97a967SRobert Watson func_error "Continuing, but uninstalled executables may not work." 28973b97a967SRobert Watson # Fallback. This is a deliberately simplistic "conversion" and 28983b97a967SRobert Watson # should not be "improved". See libtool.info. 28993b97a967SRobert Watson if test "x$1" != "x$2"; then 29003b97a967SRobert Watson lt_replace_pathsep_chars="s|$1|$2|g" 29013b97a967SRobert Watson func_to_host_path_result=`echo "$3" | 29023b97a967SRobert Watson $SED -e "$lt_replace_pathsep_chars"` 29033b97a967SRobert Watson else 29043b97a967SRobert Watson func_to_host_path_result=$3 29053b97a967SRobert Watson fi 29063b97a967SRobert Watson fi 29073b97a967SRobert Watson} 29083b97a967SRobert Watson# end func_convert_path_check 29093b97a967SRobert Watson 29103b97a967SRobert Watson 29113b97a967SRobert Watson# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 29123b97a967SRobert Watson# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 29133b97a967SRobert Watson# and appending REPL if ORIG matches BACKPAT. 29143b97a967SRobert Watsonfunc_convert_path_front_back_pathsep () 29153b97a967SRobert Watson{ 29163b97a967SRobert Watson $debug_cmd 29173b97a967SRobert Watson 29183b97a967SRobert Watson case $4 in 29193b97a967SRobert Watson $1 ) func_to_host_path_result=$3$func_to_host_path_result 29203b97a967SRobert Watson ;; 29213b97a967SRobert Watson esac 29223b97a967SRobert Watson case $4 in 29233b97a967SRobert Watson $2 ) func_append func_to_host_path_result "$3" 29243b97a967SRobert Watson ;; 29253b97a967SRobert Watson esac 29263b97a967SRobert Watson} 29273b97a967SRobert Watson# end func_convert_path_front_back_pathsep 29283b97a967SRobert Watson 29293b97a967SRobert Watson 29303b97a967SRobert Watson################################################## 29313b97a967SRobert Watson# $build to $host FILE NAME CONVERSION FUNCTIONS # 29323b97a967SRobert Watson################################################## 29333b97a967SRobert Watson# invoked via '$to_host_file_cmd ARG' 29343b97a967SRobert Watson# 29353b97a967SRobert Watson# In each case, ARG is the path to be converted from $build to $host format. 29363b97a967SRobert Watson# Result will be available in $func_to_host_file_result. 29373b97a967SRobert Watson 29383b97a967SRobert Watson 29393b97a967SRobert Watson# func_to_host_file ARG 29403b97a967SRobert Watson# Converts the file name ARG from $build format to $host format. Return result 29413b97a967SRobert Watson# in func_to_host_file_result. 29423b97a967SRobert Watsonfunc_to_host_file () 29433b97a967SRobert Watson{ 29443b97a967SRobert Watson $debug_cmd 29453b97a967SRobert Watson 29463b97a967SRobert Watson $to_host_file_cmd "$1" 29473b97a967SRobert Watson} 29483b97a967SRobert Watson# end func_to_host_file 29493b97a967SRobert Watson 29503b97a967SRobert Watson 29513b97a967SRobert Watson# func_to_tool_file ARG LAZY 29523b97a967SRobert Watson# converts the file name ARG from $build format to toolchain format. Return 29533b97a967SRobert Watson# result in func_to_tool_file_result. If the conversion in use is listed 29543b97a967SRobert Watson# in (the comma separated) LAZY, no conversion takes place. 29553b97a967SRobert Watsonfunc_to_tool_file () 29563b97a967SRobert Watson{ 29573b97a967SRobert Watson $debug_cmd 29583b97a967SRobert Watson 29593b97a967SRobert Watson case ,$2, in 29603b97a967SRobert Watson *,"$to_tool_file_cmd",*) 29613b97a967SRobert Watson func_to_tool_file_result=$1 29623b97a967SRobert Watson ;; 29633b97a967SRobert Watson *) 29643b97a967SRobert Watson $to_tool_file_cmd "$1" 29653b97a967SRobert Watson func_to_tool_file_result=$func_to_host_file_result 29663b97a967SRobert Watson ;; 29673b97a967SRobert Watson esac 29683b97a967SRobert Watson} 29693b97a967SRobert Watson# end func_to_tool_file 29703b97a967SRobert Watson 29713b97a967SRobert Watson 29723b97a967SRobert Watson# func_convert_file_noop ARG 29733b97a967SRobert Watson# Copy ARG to func_to_host_file_result. 29743b97a967SRobert Watsonfunc_convert_file_noop () 29753b97a967SRobert Watson{ 29763b97a967SRobert Watson func_to_host_file_result=$1 29773b97a967SRobert Watson} 29783b97a967SRobert Watson# end func_convert_file_noop 29793b97a967SRobert Watson 29803b97a967SRobert Watson 29813b97a967SRobert Watson# func_convert_file_msys_to_w32 ARG 29823b97a967SRobert Watson# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 29833b97a967SRobert Watson# conversion to w32 is not available inside the cwrapper. Returns result in 29843b97a967SRobert Watson# func_to_host_file_result. 29853b97a967SRobert Watsonfunc_convert_file_msys_to_w32 () 29863b97a967SRobert Watson{ 29873b97a967SRobert Watson $debug_cmd 29883b97a967SRobert Watson 29893b97a967SRobert Watson func_to_host_file_result=$1 29903b97a967SRobert Watson if test -n "$1"; then 29913b97a967SRobert Watson func_convert_core_msys_to_w32 "$1" 29923b97a967SRobert Watson func_to_host_file_result=$func_convert_core_msys_to_w32_result 29933b97a967SRobert Watson fi 29943b97a967SRobert Watson func_convert_file_check "$1" "$func_to_host_file_result" 29953b97a967SRobert Watson} 29963b97a967SRobert Watson# end func_convert_file_msys_to_w32 29973b97a967SRobert Watson 29983b97a967SRobert Watson 29993b97a967SRobert Watson# func_convert_file_cygwin_to_w32 ARG 30003b97a967SRobert Watson# Convert file name ARG from Cygwin to w32 format. Returns result in 30013b97a967SRobert Watson# func_to_host_file_result. 30023b97a967SRobert Watsonfunc_convert_file_cygwin_to_w32 () 30033b97a967SRobert Watson{ 30043b97a967SRobert Watson $debug_cmd 30053b97a967SRobert Watson 30063b97a967SRobert Watson func_to_host_file_result=$1 30073b97a967SRobert Watson if test -n "$1"; then 30083b97a967SRobert Watson # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 30093b97a967SRobert Watson # LT_CYGPATH in this case. 30103b97a967SRobert Watson func_to_host_file_result=`cygpath -m "$1"` 30113b97a967SRobert Watson fi 30123b97a967SRobert Watson func_convert_file_check "$1" "$func_to_host_file_result" 30133b97a967SRobert Watson} 30143b97a967SRobert Watson# end func_convert_file_cygwin_to_w32 30153b97a967SRobert Watson 30163b97a967SRobert Watson 30173b97a967SRobert Watson# func_convert_file_nix_to_w32 ARG 30183b97a967SRobert Watson# Convert file name ARG from *nix to w32 format. Requires a wine environment 30193b97a967SRobert Watson# and a working winepath. Returns result in func_to_host_file_result. 30203b97a967SRobert Watsonfunc_convert_file_nix_to_w32 () 30213b97a967SRobert Watson{ 30223b97a967SRobert Watson $debug_cmd 30233b97a967SRobert Watson 30243b97a967SRobert Watson func_to_host_file_result=$1 30253b97a967SRobert Watson if test -n "$1"; then 30263b97a967SRobert Watson func_convert_core_file_wine_to_w32 "$1" 30273b97a967SRobert Watson func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 30283b97a967SRobert Watson fi 30293b97a967SRobert Watson func_convert_file_check "$1" "$func_to_host_file_result" 30303b97a967SRobert Watson} 30313b97a967SRobert Watson# end func_convert_file_nix_to_w32 30323b97a967SRobert Watson 30333b97a967SRobert Watson 30343b97a967SRobert Watson# func_convert_file_msys_to_cygwin ARG 30353b97a967SRobert Watson# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 30363b97a967SRobert Watson# Returns result in func_to_host_file_result. 30373b97a967SRobert Watsonfunc_convert_file_msys_to_cygwin () 30383b97a967SRobert Watson{ 30393b97a967SRobert Watson $debug_cmd 30403b97a967SRobert Watson 30413b97a967SRobert Watson func_to_host_file_result=$1 30423b97a967SRobert Watson if test -n "$1"; then 30433b97a967SRobert Watson func_convert_core_msys_to_w32 "$1" 30443b97a967SRobert Watson func_cygpath -u "$func_convert_core_msys_to_w32_result" 30453b97a967SRobert Watson func_to_host_file_result=$func_cygpath_result 30463b97a967SRobert Watson fi 30473b97a967SRobert Watson func_convert_file_check "$1" "$func_to_host_file_result" 30483b97a967SRobert Watson} 30493b97a967SRobert Watson# end func_convert_file_msys_to_cygwin 30503b97a967SRobert Watson 30513b97a967SRobert Watson 30523b97a967SRobert Watson# func_convert_file_nix_to_cygwin ARG 30533b97a967SRobert Watson# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 30543b97a967SRobert Watson# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 30553b97a967SRobert Watson# in func_to_host_file_result. 30563b97a967SRobert Watsonfunc_convert_file_nix_to_cygwin () 30573b97a967SRobert Watson{ 30583b97a967SRobert Watson $debug_cmd 30593b97a967SRobert Watson 30603b97a967SRobert Watson func_to_host_file_result=$1 30613b97a967SRobert Watson if test -n "$1"; then 30623b97a967SRobert Watson # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 30633b97a967SRobert Watson func_convert_core_file_wine_to_w32 "$1" 30643b97a967SRobert Watson func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 30653b97a967SRobert Watson func_to_host_file_result=$func_cygpath_result 30663b97a967SRobert Watson fi 30673b97a967SRobert Watson func_convert_file_check "$1" "$func_to_host_file_result" 30683b97a967SRobert Watson} 30693b97a967SRobert Watson# end func_convert_file_nix_to_cygwin 30703b97a967SRobert Watson 30713b97a967SRobert Watson 30723b97a967SRobert Watson############################################# 30733b97a967SRobert Watson# $build to $host PATH CONVERSION FUNCTIONS # 30743b97a967SRobert Watson############################################# 30753b97a967SRobert Watson# invoked via '$to_host_path_cmd ARG' 30763b97a967SRobert Watson# 30773b97a967SRobert Watson# In each case, ARG is the path to be converted from $build to $host format. 30783b97a967SRobert Watson# The result will be available in $func_to_host_path_result. 30793b97a967SRobert Watson# 30803b97a967SRobert Watson# Path separators are also converted from $build format to $host format. If 30813b97a967SRobert Watson# ARG begins or ends with a path separator character, it is preserved (but 30823b97a967SRobert Watson# converted to $host format) on output. 30833b97a967SRobert Watson# 30843b97a967SRobert Watson# All path conversion functions are named using the following convention: 30853b97a967SRobert Watson# file name conversion function : func_convert_file_X_to_Y () 30863b97a967SRobert Watson# path conversion function : func_convert_path_X_to_Y () 30873b97a967SRobert Watson# where, for any given $build/$host combination the 'X_to_Y' value is the 30883b97a967SRobert Watson# same. If conversion functions are added for new $build/$host combinations, 30893b97a967SRobert Watson# the two new functions must follow this pattern, or func_init_to_host_path_cmd 30903b97a967SRobert Watson# will break. 30913b97a967SRobert Watson 30923b97a967SRobert Watson 30933b97a967SRobert Watson# func_init_to_host_path_cmd 30943b97a967SRobert Watson# Ensures that function "pointer" variable $to_host_path_cmd is set to the 30953b97a967SRobert Watson# appropriate value, based on the value of $to_host_file_cmd. 30963b97a967SRobert Watsonto_host_path_cmd= 30973b97a967SRobert Watsonfunc_init_to_host_path_cmd () 30983b97a967SRobert Watson{ 30993b97a967SRobert Watson $debug_cmd 31003b97a967SRobert Watson 31013b97a967SRobert Watson if test -z "$to_host_path_cmd"; then 31023b97a967SRobert Watson func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 31033b97a967SRobert Watson to_host_path_cmd=func_convert_path_$func_stripname_result 31043b97a967SRobert Watson fi 31053b97a967SRobert Watson} 31063b97a967SRobert Watson 31073b97a967SRobert Watson 31083b97a967SRobert Watson# func_to_host_path ARG 31093b97a967SRobert Watson# Converts the path ARG from $build format to $host format. Return result 31103b97a967SRobert Watson# in func_to_host_path_result. 31113b97a967SRobert Watsonfunc_to_host_path () 31123b97a967SRobert Watson{ 31133b97a967SRobert Watson $debug_cmd 31143b97a967SRobert Watson 31153b97a967SRobert Watson func_init_to_host_path_cmd 31163b97a967SRobert Watson $to_host_path_cmd "$1" 31173b97a967SRobert Watson} 31183b97a967SRobert Watson# end func_to_host_path 31193b97a967SRobert Watson 31203b97a967SRobert Watson 31213b97a967SRobert Watson# func_convert_path_noop ARG 31223b97a967SRobert Watson# Copy ARG to func_to_host_path_result. 31233b97a967SRobert Watsonfunc_convert_path_noop () 31243b97a967SRobert Watson{ 31253b97a967SRobert Watson func_to_host_path_result=$1 31263b97a967SRobert Watson} 31273b97a967SRobert Watson# end func_convert_path_noop 31283b97a967SRobert Watson 31293b97a967SRobert Watson 31303b97a967SRobert Watson# func_convert_path_msys_to_w32 ARG 31313b97a967SRobert Watson# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 31323b97a967SRobert Watson# conversion to w32 is not available inside the cwrapper. Returns result in 31333b97a967SRobert Watson# func_to_host_path_result. 31343b97a967SRobert Watsonfunc_convert_path_msys_to_w32 () 31353b97a967SRobert Watson{ 31363b97a967SRobert Watson $debug_cmd 31373b97a967SRobert Watson 31383b97a967SRobert Watson func_to_host_path_result=$1 31393b97a967SRobert Watson if test -n "$1"; then 31403b97a967SRobert Watson # Remove leading and trailing path separator characters from ARG. MSYS 31413b97a967SRobert Watson # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 31423b97a967SRobert Watson # and winepath ignores them completely. 31433b97a967SRobert Watson func_stripname : : "$1" 31443b97a967SRobert Watson func_to_host_path_tmp1=$func_stripname_result 31453b97a967SRobert Watson func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 31463b97a967SRobert Watson func_to_host_path_result=$func_convert_core_msys_to_w32_result 31473b97a967SRobert Watson func_convert_path_check : ";" \ 31483b97a967SRobert Watson "$func_to_host_path_tmp1" "$func_to_host_path_result" 31493b97a967SRobert Watson func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 31503b97a967SRobert Watson fi 31513b97a967SRobert Watson} 31523b97a967SRobert Watson# end func_convert_path_msys_to_w32 31533b97a967SRobert Watson 31543b97a967SRobert Watson 31553b97a967SRobert Watson# func_convert_path_cygwin_to_w32 ARG 31563b97a967SRobert Watson# Convert path ARG from Cygwin to w32 format. Returns result in 31573b97a967SRobert Watson# func_to_host_file_result. 31583b97a967SRobert Watsonfunc_convert_path_cygwin_to_w32 () 31593b97a967SRobert Watson{ 31603b97a967SRobert Watson $debug_cmd 31613b97a967SRobert Watson 31623b97a967SRobert Watson func_to_host_path_result=$1 31633b97a967SRobert Watson if test -n "$1"; then 31643b97a967SRobert Watson # See func_convert_path_msys_to_w32: 31653b97a967SRobert Watson func_stripname : : "$1" 31663b97a967SRobert Watson func_to_host_path_tmp1=$func_stripname_result 31673b97a967SRobert Watson func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 31683b97a967SRobert Watson func_convert_path_check : ";" \ 31693b97a967SRobert Watson "$func_to_host_path_tmp1" "$func_to_host_path_result" 31703b97a967SRobert Watson func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 31713b97a967SRobert Watson fi 31723b97a967SRobert Watson} 31733b97a967SRobert Watson# end func_convert_path_cygwin_to_w32 31743b97a967SRobert Watson 31753b97a967SRobert Watson 31763b97a967SRobert Watson# func_convert_path_nix_to_w32 ARG 31773b97a967SRobert Watson# Convert path ARG from *nix to w32 format. Requires a wine environment and 31783b97a967SRobert Watson# a working winepath. Returns result in func_to_host_file_result. 31793b97a967SRobert Watsonfunc_convert_path_nix_to_w32 () 31803b97a967SRobert Watson{ 31813b97a967SRobert Watson $debug_cmd 31823b97a967SRobert Watson 31833b97a967SRobert Watson func_to_host_path_result=$1 31843b97a967SRobert Watson if test -n "$1"; then 31853b97a967SRobert Watson # See func_convert_path_msys_to_w32: 31863b97a967SRobert Watson func_stripname : : "$1" 31873b97a967SRobert Watson func_to_host_path_tmp1=$func_stripname_result 31883b97a967SRobert Watson func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 31893b97a967SRobert Watson func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 31903b97a967SRobert Watson func_convert_path_check : ";" \ 31913b97a967SRobert Watson "$func_to_host_path_tmp1" "$func_to_host_path_result" 31923b97a967SRobert Watson func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 31933b97a967SRobert Watson fi 31943b97a967SRobert Watson} 31953b97a967SRobert Watson# end func_convert_path_nix_to_w32 31963b97a967SRobert Watson 31973b97a967SRobert Watson 31983b97a967SRobert Watson# func_convert_path_msys_to_cygwin ARG 31993b97a967SRobert Watson# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 32003b97a967SRobert Watson# Returns result in func_to_host_file_result. 32013b97a967SRobert Watsonfunc_convert_path_msys_to_cygwin () 32023b97a967SRobert Watson{ 32033b97a967SRobert Watson $debug_cmd 32043b97a967SRobert Watson 32053b97a967SRobert Watson func_to_host_path_result=$1 32063b97a967SRobert Watson if test -n "$1"; then 32073b97a967SRobert Watson # See func_convert_path_msys_to_w32: 32083b97a967SRobert Watson func_stripname : : "$1" 32093b97a967SRobert Watson func_to_host_path_tmp1=$func_stripname_result 32103b97a967SRobert Watson func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 32113b97a967SRobert Watson func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 32123b97a967SRobert Watson func_to_host_path_result=$func_cygpath_result 32133b97a967SRobert Watson func_convert_path_check : : \ 32143b97a967SRobert Watson "$func_to_host_path_tmp1" "$func_to_host_path_result" 32153b97a967SRobert Watson func_convert_path_front_back_pathsep ":*" "*:" : "$1" 32163b97a967SRobert Watson fi 32173b97a967SRobert Watson} 32183b97a967SRobert Watson# end func_convert_path_msys_to_cygwin 32193b97a967SRobert Watson 32203b97a967SRobert Watson 32213b97a967SRobert Watson# func_convert_path_nix_to_cygwin ARG 32223b97a967SRobert Watson# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 32233b97a967SRobert Watson# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 32243b97a967SRobert Watson# func_to_host_file_result. 32253b97a967SRobert Watsonfunc_convert_path_nix_to_cygwin () 32263b97a967SRobert Watson{ 32273b97a967SRobert Watson $debug_cmd 32283b97a967SRobert Watson 32293b97a967SRobert Watson func_to_host_path_result=$1 32303b97a967SRobert Watson if test -n "$1"; then 32313b97a967SRobert Watson # Remove leading and trailing path separator characters from 32323b97a967SRobert Watson # ARG. msys behavior is inconsistent here, cygpath turns them 32333b97a967SRobert Watson # into '.;' and ';.', and winepath ignores them completely. 32343b97a967SRobert Watson func_stripname : : "$1" 32353b97a967SRobert Watson func_to_host_path_tmp1=$func_stripname_result 32363b97a967SRobert Watson func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 32373b97a967SRobert Watson func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 32383b97a967SRobert Watson func_to_host_path_result=$func_cygpath_result 32393b97a967SRobert Watson func_convert_path_check : : \ 32403b97a967SRobert Watson "$func_to_host_path_tmp1" "$func_to_host_path_result" 32413b97a967SRobert Watson func_convert_path_front_back_pathsep ":*" "*:" : "$1" 32423b97a967SRobert Watson fi 32433b97a967SRobert Watson} 32443b97a967SRobert Watson# end func_convert_path_nix_to_cygwin 32453b97a967SRobert Watson 32463b97a967SRobert Watson 32473b97a967SRobert Watson# func_dll_def_p FILE 32483b97a967SRobert Watson# True iff FILE is a Windows DLL '.def' file. 32493b97a967SRobert Watson# Keep in sync with _LT_DLL_DEF_P in libtool.m4 32503b97a967SRobert Watsonfunc_dll_def_p () 32513b97a967SRobert Watson{ 32523b97a967SRobert Watson $debug_cmd 32533b97a967SRobert Watson 32543b97a967SRobert Watson func_dll_def_p_tmp=`$SED -n \ 32553b97a967SRobert Watson -e 's/^[ ]*//' \ 32563b97a967SRobert Watson -e '/^\(;.*\)*$/d' \ 32573b97a967SRobert Watson -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 32583b97a967SRobert Watson -e q \ 32593b97a967SRobert Watson "$1"` 32603b97a967SRobert Watson test DEF = "$func_dll_def_p_tmp" 32613b97a967SRobert Watson} 32623b97a967SRobert Watson 32633b97a967SRobert Watson 32643b97a967SRobert Watson# func_mode_compile arg... 32653b97a967SRobert Watsonfunc_mode_compile () 32663b97a967SRobert Watson{ 32673b97a967SRobert Watson $debug_cmd 32683b97a967SRobert Watson 32693b97a967SRobert Watson # Get the compilation command and the source file. 32703b97a967SRobert Watson base_compile= 32713b97a967SRobert Watson srcfile=$nonopt # always keep a non-empty value in "srcfile" 32723b97a967SRobert Watson suppress_opt=yes 32733b97a967SRobert Watson suppress_output= 32743b97a967SRobert Watson arg_mode=normal 32753b97a967SRobert Watson libobj= 32763b97a967SRobert Watson later= 32773b97a967SRobert Watson pie_flag= 32783b97a967SRobert Watson 32793b97a967SRobert Watson for arg 32803b97a967SRobert Watson do 32813b97a967SRobert Watson case $arg_mode in 32823b97a967SRobert Watson arg ) 32833b97a967SRobert Watson # do not "continue". Instead, add this to base_compile 3284eb336521SRobert Watson lastarg=$arg 32853b97a967SRobert Watson arg_mode=normal 32863b97a967SRobert Watson ;; 32873b97a967SRobert Watson 32883b97a967SRobert Watson target ) 32893b97a967SRobert Watson libobj=$arg 32903b97a967SRobert Watson arg_mode=normal 32913b97a967SRobert Watson continue 32923b97a967SRobert Watson ;; 32933b97a967SRobert Watson 32943b97a967SRobert Watson normal ) 3295eb336521SRobert Watson # Accept any command-line options. 32963b97a967SRobert Watson case $arg in 32973b97a967SRobert Watson -o) 3298eb336521SRobert Watson test -n "$libobj" && \ 32993b97a967SRobert Watson func_fatal_error "you cannot specify '-o' more than once" 33003b97a967SRobert Watson arg_mode=target 33013b97a967SRobert Watson continue 33023b97a967SRobert Watson ;; 33033b97a967SRobert Watson 33043b97a967SRobert Watson -pie | -fpie | -fPIE) 33053b97a967SRobert Watson func_append pie_flag " $arg" 33063b97a967SRobert Watson continue 33073b97a967SRobert Watson ;; 33083b97a967SRobert Watson 33093b97a967SRobert Watson -shared | -static | -prefer-pic | -prefer-non-pic) 33103b97a967SRobert Watson func_append later " $arg" 33113b97a967SRobert Watson continue 33123b97a967SRobert Watson ;; 33133b97a967SRobert Watson 33143b97a967SRobert Watson -no-suppress) 33153b97a967SRobert Watson suppress_opt=no 33163b97a967SRobert Watson continue 33173b97a967SRobert Watson ;; 33183b97a967SRobert Watson 33193b97a967SRobert Watson -Xcompiler) 33203b97a967SRobert Watson arg_mode=arg # the next one goes into the "base_compile" arg list 33213b97a967SRobert Watson continue # The current "srcfile" will either be retained or 33223b97a967SRobert Watson ;; # replaced later. I would guess that would be a bug. 33233b97a967SRobert Watson 33243b97a967SRobert Watson -Wc,*) 33253b97a967SRobert Watson func_stripname '-Wc,' '' "$arg" 33263b97a967SRobert Watson args=$func_stripname_result 33273b97a967SRobert Watson lastarg= 33283b97a967SRobert Watson save_ifs=$IFS; IFS=, 33293b97a967SRobert Watson for arg in $args; do 33303b97a967SRobert Watson IFS=$save_ifs 33313b97a967SRobert Watson func_append_quoted lastarg "$arg" 33323b97a967SRobert Watson done 33333b97a967SRobert Watson IFS=$save_ifs 33343b97a967SRobert Watson func_stripname ' ' '' "$lastarg" 33353b97a967SRobert Watson lastarg=$func_stripname_result 33363b97a967SRobert Watson 33373b97a967SRobert Watson # Add the arguments to base_compile. 33383b97a967SRobert Watson func_append base_compile " $lastarg" 33393b97a967SRobert Watson continue 33403b97a967SRobert Watson ;; 33413b97a967SRobert Watson 33423b97a967SRobert Watson *) 33433b97a967SRobert Watson # Accept the current argument as the source file. 33443b97a967SRobert Watson # The previous "srcfile" becomes the current argument. 33453b97a967SRobert Watson # 33463b97a967SRobert Watson lastarg=$srcfile 33473b97a967SRobert Watson srcfile=$arg 33483b97a967SRobert Watson ;; 33493b97a967SRobert Watson esac # case $arg 33503b97a967SRobert Watson ;; 33513b97a967SRobert Watson esac # case $arg_mode 33523b97a967SRobert Watson 33533b97a967SRobert Watson # Aesthetically quote the previous argument. 33543b97a967SRobert Watson func_append_quoted base_compile "$lastarg" 33553b97a967SRobert Watson done # for arg 33563b97a967SRobert Watson 3357eb336521SRobert Watson case $arg_mode in 3358eb336521SRobert Watson arg) 33593b97a967SRobert Watson func_fatal_error "you must specify an argument for -Xcompile" 33603b97a967SRobert Watson ;; 33613b97a967SRobert Watson target) 33623b97a967SRobert Watson func_fatal_error "you must specify a target with '-o'" 33633b97a967SRobert Watson ;; 33643b97a967SRobert Watson *) 33653b97a967SRobert Watson # Get the name of the library object. 33663b97a967SRobert Watson test -z "$libobj" && { 33673b97a967SRobert Watson func_basename "$srcfile" 33683b97a967SRobert Watson libobj=$func_basename_result 33693b97a967SRobert Watson } 33703b97a967SRobert Watson ;; 33713b97a967SRobert Watson esac 3372eb336521SRobert Watson 3373eb336521SRobert Watson # Recognize several different file suffixes. 3374eb336521SRobert Watson # If the user specifies -o file.o, it is replaced with file.lo 33753b97a967SRobert Watson case $libobj in 3376eb336521SRobert Watson *.[cCFSifmso] | \ 33773b97a967SRobert Watson *.ada | *.adb | *.ads | *.asm | \ 33783b97a967SRobert Watson *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 33793b97a967SRobert Watson *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 33803b97a967SRobert Watson func_xform "$libobj" 33813b97a967SRobert Watson libobj=$func_xform_result 33823b97a967SRobert Watson ;; 33833b97a967SRobert Watson esac 33843b97a967SRobert Watson 33853b97a967SRobert Watson case $libobj in 33863b97a967SRobert Watson *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 33873b97a967SRobert Watson *) 33883b97a967SRobert Watson func_fatal_error "cannot determine name of library object from '$libobj'" 33893b97a967SRobert Watson ;; 33903b97a967SRobert Watson esac 33913b97a967SRobert Watson 33923b97a967SRobert Watson func_infer_tag $base_compile 33933b97a967SRobert Watson 33943b97a967SRobert Watson for arg in $later; do 33953b97a967SRobert Watson case $arg in 33963b97a967SRobert Watson -shared) 33973b97a967SRobert Watson test yes = "$build_libtool_libs" \ 33983b97a967SRobert Watson || func_fatal_configuration "cannot build a shared library" 33993b97a967SRobert Watson build_old_libs=no 34003b97a967SRobert Watson continue 34013b97a967SRobert Watson ;; 34023b97a967SRobert Watson 34033b97a967SRobert Watson -static) 34043b97a967SRobert Watson build_libtool_libs=no 34053b97a967SRobert Watson build_old_libs=yes 34063b97a967SRobert Watson continue 34073b97a967SRobert Watson ;; 34083b97a967SRobert Watson 34093b97a967SRobert Watson -prefer-pic) 34103b97a967SRobert Watson pic_mode=yes 34113b97a967SRobert Watson continue 34123b97a967SRobert Watson ;; 34133b97a967SRobert Watson 34143b97a967SRobert Watson -prefer-non-pic) 34153b97a967SRobert Watson pic_mode=no 34163b97a967SRobert Watson continue 34173b97a967SRobert Watson ;; 34183b97a967SRobert Watson esac 34193b97a967SRobert Watson done 34203b97a967SRobert Watson 34213b97a967SRobert Watson func_quote_for_eval "$libobj" 34223b97a967SRobert Watson test "X$libobj" != "X$func_quote_for_eval_result" \ 34233b97a967SRobert Watson && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 34243b97a967SRobert Watson && func_warning "libobj name '$libobj' may not contain shell special characters." 34253b97a967SRobert Watson func_dirname_and_basename "$obj" "/" "" 34263b97a967SRobert Watson objname=$func_basename_result 34273b97a967SRobert Watson xdir=$func_dirname_result 34283b97a967SRobert Watson lobj=$xdir$objdir/$objname 34293b97a967SRobert Watson 34303b97a967SRobert Watson test -z "$base_compile" && \ 34313b97a967SRobert Watson func_fatal_help "you must specify a compilation command" 34323b97a967SRobert Watson 34333b97a967SRobert Watson # Delete any leftover library objects. 34343b97a967SRobert Watson if test yes = "$build_old_libs"; then 34353b97a967SRobert Watson removelist="$obj $lobj $libobj ${libobj}T" 34363b97a967SRobert Watson else 34373b97a967SRobert Watson removelist="$lobj $libobj ${libobj}T" 34383b97a967SRobert Watson fi 34393b97a967SRobert Watson 34403b97a967SRobert Watson # On Cygwin there's no "real" PIC flag so we must build both object types 34413b97a967SRobert Watson case $host_os in 34423b97a967SRobert Watson cygwin* | mingw* | pw32* | os2* | cegcc*) 34433b97a967SRobert Watson pic_mode=default 34443b97a967SRobert Watson ;; 34453b97a967SRobert Watson esac 34463b97a967SRobert Watson if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 34473b97a967SRobert Watson # non-PIC code in shared libraries is not supported 34483b97a967SRobert Watson pic_mode=default 34493b97a967SRobert Watson fi 34503b97a967SRobert Watson 34513b97a967SRobert Watson # Calculate the filename of the output object if compiler does 34523b97a967SRobert Watson # not support -o with -c 34533b97a967SRobert Watson if test no = "$compiler_c_o"; then 34543b97a967SRobert Watson output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 34553b97a967SRobert Watson lockfile=$output_obj.lock 34563b97a967SRobert Watson else 34573b97a967SRobert Watson output_obj= 34583b97a967SRobert Watson need_locks=no 34593b97a967SRobert Watson lockfile= 34603b97a967SRobert Watson fi 34613b97a967SRobert Watson 34623b97a967SRobert Watson # Lock this critical section if it is needed 34633b97a967SRobert Watson # We use this script file to make the link, it avoids creating a new file 34643b97a967SRobert Watson if test yes = "$need_locks"; then 34653b97a967SRobert Watson until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 34663b97a967SRobert Watson func_echo "Waiting for $lockfile to be removed" 34673b97a967SRobert Watson sleep 2 34683b97a967SRobert Watson done 34693b97a967SRobert Watson elif test warn = "$need_locks"; then 34703b97a967SRobert Watson if test -f "$lockfile"; then 34713b97a967SRobert Watson $ECHO "\ 34723b97a967SRobert Watson*** ERROR, $lockfile exists and contains: 34733b97a967SRobert Watson`cat $lockfile 2>/dev/null` 34743b97a967SRobert Watson 34753b97a967SRobert WatsonThis indicates that another process is trying to use the same 34763b97a967SRobert Watsontemporary object file, and libtool could not work around it because 34773b97a967SRobert Watsonyour compiler does not support '-c' and '-o' together. If you 34783b97a967SRobert Watsonrepeat this compilation, it may succeed, by chance, but you had better 34793b97a967SRobert Watsonavoid parallel builds (make -j) in this platform, or get a better 34803b97a967SRobert Watsoncompiler." 34813b97a967SRobert Watson 34823b97a967SRobert Watson $opt_dry_run || $RM $removelist 34833b97a967SRobert Watson exit $EXIT_FAILURE 34843b97a967SRobert Watson fi 34853b97a967SRobert Watson func_append removelist " $output_obj" 34863b97a967SRobert Watson $ECHO "$srcfile" > "$lockfile" 34873b97a967SRobert Watson fi 34883b97a967SRobert Watson 34893b97a967SRobert Watson $opt_dry_run || $RM $removelist 34903b97a967SRobert Watson func_append removelist " $lockfile" 34913b97a967SRobert Watson trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 34923b97a967SRobert Watson 34933b97a967SRobert Watson func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 34943b97a967SRobert Watson srcfile=$func_to_tool_file_result 34953b97a967SRobert Watson func_quote_for_eval "$srcfile" 34963b97a967SRobert Watson qsrcfile=$func_quote_for_eval_result 34973b97a967SRobert Watson 34983b97a967SRobert Watson # Only build a PIC object if we are building libtool libraries. 34993b97a967SRobert Watson if test yes = "$build_libtool_libs"; then 35003b97a967SRobert Watson # Without this assignment, base_compile gets emptied. 35013b97a967SRobert Watson fbsd_hideous_sh_bug=$base_compile 35023b97a967SRobert Watson 35033b97a967SRobert Watson if test no != "$pic_mode"; then 35043b97a967SRobert Watson command="$base_compile $qsrcfile $pic_flag" 35053b97a967SRobert Watson else 35063b97a967SRobert Watson # Don't build PIC code 35073b97a967SRobert Watson command="$base_compile $qsrcfile" 35083b97a967SRobert Watson fi 35093b97a967SRobert Watson 35103b97a967SRobert Watson func_mkdir_p "$xdir$objdir" 35113b97a967SRobert Watson 35123b97a967SRobert Watson if test -z "$output_obj"; then 3513eb336521SRobert Watson # Place PIC objects in $objdir 3514eb336521SRobert Watson func_append command " -o $lobj" 3515eb336521SRobert Watson fi 3516eb336521SRobert Watson 3517eb336521SRobert Watson func_show_eval_locale "$command" \ 35183b97a967SRobert Watson 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 35193b97a967SRobert Watson 35203b97a967SRobert Watson if test warn = "$need_locks" && 35213b97a967SRobert Watson test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 35223b97a967SRobert Watson $ECHO "\ 35233b97a967SRobert Watson*** ERROR, $lockfile contains: 35243b97a967SRobert Watson`cat $lockfile 2>/dev/null` 35253b97a967SRobert Watson 35263b97a967SRobert Watsonbut it should contain: 35273b97a967SRobert Watson$srcfile 35283b97a967SRobert Watson 35293b97a967SRobert WatsonThis indicates that another process is trying to use the same 35303b97a967SRobert Watsontemporary object file, and libtool could not work around it because 35313b97a967SRobert Watsonyour compiler does not support '-c' and '-o' together. If you 35323b97a967SRobert Watsonrepeat this compilation, it may succeed, by chance, but you had better 35333b97a967SRobert Watsonavoid parallel builds (make -j) in this platform, or get a better 35343b97a967SRobert Watsoncompiler." 35353b97a967SRobert Watson 35363b97a967SRobert Watson $opt_dry_run || $RM $removelist 35373b97a967SRobert Watson exit $EXIT_FAILURE 35383b97a967SRobert Watson fi 35393b97a967SRobert Watson 35403b97a967SRobert Watson # Just move the object if needed, then go on to compile the next one 35413b97a967SRobert Watson if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 35423b97a967SRobert Watson func_show_eval '$MV "$output_obj" "$lobj"' \ 35433b97a967SRobert Watson 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 35443b97a967SRobert Watson fi 35453b97a967SRobert Watson 35463b97a967SRobert Watson # Allow error messages only from the first compilation. 35473b97a967SRobert Watson if test yes = "$suppress_opt"; then 35483b97a967SRobert Watson suppress_output=' >/dev/null 2>&1' 35493b97a967SRobert Watson fi 35503b97a967SRobert Watson fi 35513b97a967SRobert Watson 35523b97a967SRobert Watson # Only build a position-dependent object if we build old libraries. 35533b97a967SRobert Watson if test yes = "$build_old_libs"; then 35543b97a967SRobert Watson if test yes != "$pic_mode"; then 35553b97a967SRobert Watson # Don't build PIC code 35563b97a967SRobert Watson command="$base_compile $qsrcfile$pie_flag" 35573b97a967SRobert Watson else 35583b97a967SRobert Watson command="$base_compile $qsrcfile $pic_flag" 35593b97a967SRobert Watson fi 35603b97a967SRobert Watson if test yes = "$compiler_c_o"; then 35613b97a967SRobert Watson func_append command " -o $obj" 35623b97a967SRobert Watson fi 35633b97a967SRobert Watson 35643b97a967SRobert Watson # Suppress compiler output if we already did a PIC compilation. 35653b97a967SRobert Watson func_append command "$suppress_output" 35663b97a967SRobert Watson func_show_eval_locale "$command" \ 35673b97a967SRobert Watson '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 35683b97a967SRobert Watson 3569d9af45c4SRobert Watson if test warn = "$need_locks" && 3570d9af45c4SRobert Watson test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3571d9af45c4SRobert Watson $ECHO "\ 3572d9af45c4SRobert Watson*** ERROR, $lockfile contains: 3573d9af45c4SRobert Watson`cat $lockfile 2>/dev/null` 3574d9af45c4SRobert Watson 35753b97a967SRobert Watsonbut it should contain: 35763b97a967SRobert Watson$srcfile 35773b97a967SRobert Watson 35783b97a967SRobert WatsonThis indicates that another process is trying to use the same 35793b97a967SRobert Watsontemporary object file, and libtool could not work around it because 35803b97a967SRobert Watsonyour compiler does not support '-c' and '-o' together. If you 35813b97a967SRobert Watsonrepeat this compilation, it may succeed, by chance, but you had better 35823b97a967SRobert Watsonavoid parallel builds (make -j) in this platform, or get a better 35833b97a967SRobert Watsoncompiler." 35843b97a967SRobert Watson 35853b97a967SRobert Watson $opt_dry_run || $RM $removelist 35863b97a967SRobert Watson exit $EXIT_FAILURE 35873b97a967SRobert Watson fi 35883b97a967SRobert Watson 35893b97a967SRobert Watson # Just move the object if needed 35903b97a967SRobert Watson if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 35913b97a967SRobert Watson func_show_eval '$MV "$output_obj" "$obj"' \ 35923b97a967SRobert Watson 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 35933b97a967SRobert Watson fi 35943b97a967SRobert Watson fi 35953b97a967SRobert Watson 35963b97a967SRobert Watson $opt_dry_run || { 35973b97a967SRobert Watson func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 35983b97a967SRobert Watson 35993b97a967SRobert Watson # Unlock the critical section if it was locked 36003b97a967SRobert Watson if test no != "$need_locks"; then 36013b97a967SRobert Watson removelist=$lockfile 36023b97a967SRobert Watson $RM "$lockfile" 36033b97a967SRobert Watson fi 36043b97a967SRobert Watson } 36053b97a967SRobert Watson 36063b97a967SRobert Watson exit $EXIT_SUCCESS 36073b97a967SRobert Watson} 36083b97a967SRobert Watson 36093b97a967SRobert Watson$opt_help || { 36103b97a967SRobert Watson test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 36113b97a967SRobert Watson} 36123b97a967SRobert Watson 36133b97a967SRobert Watsonfunc_mode_help () 36143b97a967SRobert Watson{ 36153b97a967SRobert Watson # We need to display help for each of the modes. 36163b97a967SRobert Watson case $opt_mode in 36173b97a967SRobert Watson "") 3618eb336521SRobert Watson # Generic help is extracted from the usage comments 36193b97a967SRobert Watson # at the start of this file. 36203b97a967SRobert Watson func_help 36213b97a967SRobert Watson ;; 36223b97a967SRobert Watson 3623eb336521SRobert Watson clean) 36243b97a967SRobert Watson $ECHO \ 36253b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 36263b97a967SRobert Watson 36273b97a967SRobert WatsonRemove files from the build directory. 36283b97a967SRobert Watson 36293b97a967SRobert WatsonRM is the name of the program to use to delete files associated with each FILE 36303b97a967SRobert Watson(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 36313b97a967SRobert Watsonto RM. 36323b97a967SRobert Watson 36333b97a967SRobert WatsonIf FILE is a libtool library, object or program, all the files associated 36343b97a967SRobert Watsonwith it are deleted. Otherwise, only FILE itself is deleted using RM." 36353b97a967SRobert Watson ;; 36363b97a967SRobert Watson 36373b97a967SRobert Watson compile) 36383b97a967SRobert Watson $ECHO \ 36393b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 36403b97a967SRobert Watson 36413b97a967SRobert WatsonCompile a source file into a libtool library object. 36423b97a967SRobert Watson 36433b97a967SRobert WatsonThis mode accepts the following additional options: 36443b97a967SRobert Watson 36453b97a967SRobert Watson -o OUTPUT-FILE set the output file name to OUTPUT-FILE 36463b97a967SRobert Watson -no-suppress do not suppress compiler output for multiple passes 36473b97a967SRobert Watson -prefer-pic try to build PIC objects only 36483b97a967SRobert Watson -prefer-non-pic try to build non-PIC objects only 36493b97a967SRobert Watson -shared do not build a '.o' file suitable for static linking 36503b97a967SRobert Watson -static only build a '.o' file suitable for static linking 36513b97a967SRobert Watson -Wc,FLAG pass FLAG directly to the compiler 36523b97a967SRobert Watson 36533b97a967SRobert WatsonCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 36543b97a967SRobert Watsonfrom the given SOURCEFILE. 36553b97a967SRobert Watson 36563b97a967SRobert WatsonThe output file name is determined by removing the directory component from 36573b97a967SRobert WatsonSOURCEFILE, then substituting the C source code suffix '.c' with the 36583b97a967SRobert Watsonlibrary object suffix, '.lo'." 36593b97a967SRobert Watson ;; 36603b97a967SRobert Watson 36613b97a967SRobert Watson execute) 3662eb336521SRobert Watson $ECHO \ 36633b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 36643b97a967SRobert Watson 36653b97a967SRobert WatsonAutomatically set library path, then run a program. 36663b97a967SRobert Watson 36673b97a967SRobert WatsonThis mode accepts the following additional options: 36683b97a967SRobert Watson 36693b97a967SRobert Watson -dlopen FILE add the directory containing FILE to the library path 36703b97a967SRobert Watson 36713b97a967SRobert WatsonThis mode sets the library path environment variable according to '-dlopen' 36723b97a967SRobert Watsonflags. 36733b97a967SRobert Watson 36743b97a967SRobert WatsonIf any of the ARGS are libtool executable wrappers, then they are translated 36753b97a967SRobert Watsoninto their corresponding uninstalled binary, and any of their required library 36763b97a967SRobert Watsondirectories are added to the library path. 36773b97a967SRobert Watson 36783b97a967SRobert WatsonThen, COMMAND is executed, with ARGS as arguments." 36793b97a967SRobert Watson ;; 36803b97a967SRobert Watson 36813b97a967SRobert Watson finish) 36823b97a967SRobert Watson $ECHO \ 36833b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 36843b97a967SRobert Watson 36853b97a967SRobert WatsonComplete the installation of libtool libraries. 36863b97a967SRobert Watson 36873b97a967SRobert WatsonEach LIBDIR is a directory that contains libtool libraries. 36883b97a967SRobert Watson 36893b97a967SRobert WatsonThe commands that this mode executes may require superuser privileges. Use 36903b97a967SRobert Watsonthe '--dry-run' option if you just want to see what would be executed." 36913b97a967SRobert Watson ;; 36923b97a967SRobert Watson 36933b97a967SRobert Watson install) 36943b97a967SRobert Watson $ECHO \ 36953b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 36963b97a967SRobert Watson 36973b97a967SRobert WatsonInstall executables or libraries. 36983b97a967SRobert Watson 36993b97a967SRobert WatsonINSTALL-COMMAND is the installation command. The first component should be 37003b97a967SRobert Watsoneither the 'install' or 'cp' program. 37013b97a967SRobert Watson 37023b97a967SRobert WatsonThe following components of INSTALL-COMMAND are treated specially: 37033b97a967SRobert Watson 37043b97a967SRobert Watson -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 37053b97a967SRobert Watson 37063b97a967SRobert WatsonThe rest of the components are interpreted as arguments to that command (only 37073b97a967SRobert WatsonBSD-compatible install options are recognized)." 37083b97a967SRobert Watson ;; 37093b97a967SRobert Watson 37103b97a967SRobert Watson link) 37113b97a967SRobert Watson $ECHO \ 37123b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 37133b97a967SRobert Watson 37143b97a967SRobert WatsonLink object files or libraries together to form another library, or to 37153b97a967SRobert Watsoncreate an executable program. 37163b97a967SRobert Watson 37173b97a967SRobert WatsonLINK-COMMAND is a command using the C compiler that you would use to create 37183b97a967SRobert Watsona program from several object files. 37193b97a967SRobert Watson 37203b97a967SRobert WatsonThe following components of LINK-COMMAND are treated specially: 37213b97a967SRobert Watson 37223b97a967SRobert Watson -all-static do not do any dynamic linking at all 37233b97a967SRobert Watson -avoid-version do not add a version suffix if possible 37243b97a967SRobert Watson -bindir BINDIR specify path to binaries directory (for systems where 37253b97a967SRobert Watson libraries must be found in the PATH setting at runtime) 37263b97a967SRobert Watson -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 37273b97a967SRobert Watson -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 37283b97a967SRobert Watson -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 37293b97a967SRobert Watson -export-symbols SYMFILE 37303b97a967SRobert Watson try to export only the symbols listed in SYMFILE 37313b97a967SRobert Watson -export-symbols-regex REGEX 37323b97a967SRobert Watson try to export only the symbols matching REGEX 37333b97a967SRobert Watson -LLIBDIR search LIBDIR for required installed libraries 37343b97a967SRobert Watson -lNAME OUTPUT-FILE requires the installed library libNAME 37353b97a967SRobert Watson -module build a library that can dlopened 37363b97a967SRobert Watson -no-fast-install disable the fast-install mode 37373b97a967SRobert Watson -no-install link a not-installable executable 37383b97a967SRobert Watson -no-undefined declare that a library does not refer to external symbols 37393b97a967SRobert Watson -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 37403b97a967SRobert Watson -objectlist FILE use a list of object files found in FILE to specify objects 37413b97a967SRobert Watson -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 37423b97a967SRobert Watson -precious-files-regex REGEX 37433b97a967SRobert Watson don't remove output files matching REGEX 37443b97a967SRobert Watson -release RELEASE specify package release information 37453b97a967SRobert Watson -rpath LIBDIR the created library will eventually be installed in LIBDIR 37463b97a967SRobert Watson -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 37473b97a967SRobert Watson -shared only do dynamic linking of libtool libraries 37483b97a967SRobert Watson -shrext SUFFIX override the standard shared library file extension 37493b97a967SRobert Watson -static do not do any dynamic linking of uninstalled libtool libraries 37503b97a967SRobert Watson -static-libtool-libs 37513b97a967SRobert Watson do not do any dynamic linking of libtool libraries 37523b97a967SRobert Watson -version-info CURRENT[:REVISION[:AGE]] 37533b97a967SRobert Watson specify library version info [each variable defaults to 0] 37543b97a967SRobert Watson -weak LIBNAME declare that the target provides the LIBNAME interface 37553b97a967SRobert Watson -Wc,FLAG 37563b97a967SRobert Watson -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 37573b97a967SRobert Watson -Wl,FLAG 37583b97a967SRobert Watson -Xlinker FLAG pass linker-specific FLAG directly to the linker 37593b97a967SRobert Watson -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 37603b97a967SRobert Watson 37613b97a967SRobert WatsonAll other options (arguments beginning with '-') are ignored. 37623b97a967SRobert Watson 37633b97a967SRobert WatsonEvery other argument is treated as a filename. Files ending in '.la' are 37643b97a967SRobert Watsontreated as uninstalled libtool libraries, other files are standard or library 37653b97a967SRobert Watsonobject files. 37663b97a967SRobert Watson 37673b97a967SRobert WatsonIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 37683b97a967SRobert Watsononly library objects ('.lo' files) may be specified, and '-rpath' is 37693b97a967SRobert Watsonrequired, except when creating a convenience library. 37703b97a967SRobert Watson 37713b97a967SRobert WatsonIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 37723b97a967SRobert Watsonusing 'ar' and 'ranlib', or on Windows using 'lib'. 37733b97a967SRobert Watson 37743b97a967SRobert WatsonIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 37753b97a967SRobert Watsonis created, otherwise an executable program is created." 37763b97a967SRobert Watson ;; 37773b97a967SRobert Watson 37783b97a967SRobert Watson uninstall) 37793b97a967SRobert Watson $ECHO \ 37803b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 37813b97a967SRobert Watson 37823b97a967SRobert WatsonRemove libraries from an installation directory. 37833b97a967SRobert Watson 37843b97a967SRobert WatsonRM is the name of the program to use to delete files associated with each FILE 37853b97a967SRobert Watson(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 37863b97a967SRobert Watsonto RM. 37873b97a967SRobert Watson 37883b97a967SRobert WatsonIf FILE is a libtool library, all the files associated with it are deleted. 37893b97a967SRobert WatsonOtherwise, only FILE itself is deleted using RM." 37903b97a967SRobert Watson ;; 37913b97a967SRobert Watson 37923b97a967SRobert Watson *) 37933b97a967SRobert Watson func_fatal_help "invalid operation mode '$opt_mode'" 37943b97a967SRobert Watson ;; 37953b97a967SRobert Watson esac 37963b97a967SRobert Watson 37973b97a967SRobert Watson echo 37983b97a967SRobert Watson $ECHO "Try '$progname --help' for more information about other modes." 37993b97a967SRobert Watson} 38003b97a967SRobert Watson 38013b97a967SRobert Watson# Now that we've collected a possible --mode arg, show help if necessary 38023b97a967SRobert Watsonif $opt_help; then 38033b97a967SRobert Watson if test : = "$opt_help"; then 38043b97a967SRobert Watson func_mode_help 38053b97a967SRobert Watson else 38063b97a967SRobert Watson { 38073b97a967SRobert Watson func_help noexit 38083b97a967SRobert Watson for opt_mode in compile link execute install finish uninstall clean; do 38093b97a967SRobert Watson func_mode_help 38103b97a967SRobert Watson done 38113b97a967SRobert Watson } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 38123b97a967SRobert Watson { 38133b97a967SRobert Watson func_help noexit 38143b97a967SRobert Watson for opt_mode in compile link execute install finish uninstall clean; do 38153b97a967SRobert Watson echo 38163b97a967SRobert Watson func_mode_help 38173b97a967SRobert Watson done 38183b97a967SRobert Watson } | 38193b97a967SRobert Watson $SED '1d 38203b97a967SRobert Watson /^When reporting/,/^Report/{ 38213b97a967SRobert Watson H 38223b97a967SRobert Watson d 38233b97a967SRobert Watson } 38243b97a967SRobert Watson $x 38253b97a967SRobert Watson /information about other modes/d 38263b97a967SRobert Watson /more detailed .*MODE/d 38273b97a967SRobert Watson s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 38283b97a967SRobert Watson fi 38293b97a967SRobert Watson exit $? 38303b97a967SRobert Watsonfi 38313b97a967SRobert Watson 38323b97a967SRobert Watson 38333b97a967SRobert Watson# func_mode_execute arg... 38343b97a967SRobert Watsonfunc_mode_execute () 38353b97a967SRobert Watson{ 38363b97a967SRobert Watson $debug_cmd 38373b97a967SRobert Watson 38383b97a967SRobert Watson # The first argument is the command name. 38393b97a967SRobert Watson cmd=$nonopt 38403b97a967SRobert Watson test -z "$cmd" && \ 38413b97a967SRobert Watson func_fatal_help "you must specify a COMMAND" 38423b97a967SRobert Watson 38433b97a967SRobert Watson # Handle -dlopen flags immediately. 38443b97a967SRobert Watson for file in $opt_dlopen; do 38453b97a967SRobert Watson test -f "$file" \ 38463b97a967SRobert Watson || func_fatal_help "'$file' is not a file" 38473b97a967SRobert Watson 38483b97a967SRobert Watson dir= 38493b97a967SRobert Watson case $file in 38503b97a967SRobert Watson *.la) 38513b97a967SRobert Watson func_resolve_sysroot "$file" 38523b97a967SRobert Watson file=$func_resolve_sysroot_result 38533b97a967SRobert Watson 38543b97a967SRobert Watson # Check to see that this really is a libtool archive. 38553b97a967SRobert Watson func_lalib_unsafe_p "$file" \ 38563b97a967SRobert Watson || func_fatal_help "'$lib' is not a valid libtool archive" 38573b97a967SRobert Watson 38583b97a967SRobert Watson # Read the libtool library. 38593b97a967SRobert Watson dlname= 38603b97a967SRobert Watson library_names= 38613b97a967SRobert Watson func_source "$file" 38623b97a967SRobert Watson 38633b97a967SRobert Watson # Skip this library if it cannot be dlopened. 38643b97a967SRobert Watson if test -z "$dlname"; then 38653b97a967SRobert Watson # Warn if it was a shared library. 38663b97a967SRobert Watson test -n "$library_names" && \ 38673b97a967SRobert Watson func_warning "'$file' was not linked with '-export-dynamic'" 38683b97a967SRobert Watson continue 38693b97a967SRobert Watson fi 38703b97a967SRobert Watson 38713b97a967SRobert Watson func_dirname "$file" "" "." 38723b97a967SRobert Watson dir=$func_dirname_result 38733b97a967SRobert Watson 38743b97a967SRobert Watson if test -f "$dir/$objdir/$dlname"; then 38753b97a967SRobert Watson func_append dir "/$objdir" 38763b97a967SRobert Watson else 38773b97a967SRobert Watson if test ! -f "$dir/$dlname"; then 38783b97a967SRobert Watson func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 38793b97a967SRobert Watson fi 38803b97a967SRobert Watson fi 38813b97a967SRobert Watson ;; 38823b97a967SRobert Watson 38833b97a967SRobert Watson *.lo) 38843b97a967SRobert Watson # Just add the directory containing the .lo file. 38853b97a967SRobert Watson func_dirname "$file" "" "." 38863b97a967SRobert Watson dir=$func_dirname_result 38873b97a967SRobert Watson ;; 38883b97a967SRobert Watson 38893b97a967SRobert Watson *) 38903b97a967SRobert Watson func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 38913b97a967SRobert Watson continue 38923b97a967SRobert Watson ;; 38933b97a967SRobert Watson esac 38943b97a967SRobert Watson 38953b97a967SRobert Watson # Get the absolute pathname. 38963b97a967SRobert Watson absdir=`cd "$dir" && pwd` 38973b97a967SRobert Watson test -n "$absdir" && dir=$absdir 38983b97a967SRobert Watson 38993b97a967SRobert Watson # Now add the directory to shlibpath_var. 39003b97a967SRobert Watson if eval "test -z \"\$$shlibpath_var\""; then 39013b97a967SRobert Watson eval "$shlibpath_var=\"\$dir\"" 39023b97a967SRobert Watson else 39033b97a967SRobert Watson eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 39043b97a967SRobert Watson fi 39053b97a967SRobert Watson done 39063b97a967SRobert Watson 3907d9af45c4SRobert Watson # This variable tells wrapper scripts just to set shlibpath_var 3908d9af45c4SRobert Watson # rather than running their programs. 3909d9af45c4SRobert Watson libtool_execute_magic=$magic 3910d9af45c4SRobert Watson 3911d9af45c4SRobert Watson # Check if any of the arguments is a wrapper script. 3912d9af45c4SRobert Watson args= 3913d9af45c4SRobert Watson for file 3914d9af45c4SRobert Watson do 3915d9af45c4SRobert Watson case $file in 3916d9af45c4SRobert Watson -* | *.la | *.lo ) ;; 3917d9af45c4SRobert Watson *) 3918d9af45c4SRobert Watson # Do a test to see if this is really a libtool program. 3919d9af45c4SRobert Watson if func_ltwrapper_script_p "$file"; then 3920d9af45c4SRobert Watson func_source "$file" 3921d9af45c4SRobert Watson # Transform arg to wrapped name. 3922d9af45c4SRobert Watson file=$progdir/$program 3923d9af45c4SRobert Watson elif func_ltwrapper_executable_p "$file"; then 3924d9af45c4SRobert Watson func_ltwrapper_scriptname "$file" 3925d9af45c4SRobert Watson func_source "$func_ltwrapper_scriptname_result" 3926d9af45c4SRobert Watson # Transform arg to wrapped name. 3927d9af45c4SRobert Watson file=$progdir/$program 3928d9af45c4SRobert Watson fi 3929d9af45c4SRobert Watson ;; 3930d9af45c4SRobert Watson esac 3931d9af45c4SRobert Watson # Quote arguments (to preserve shell metacharacters). 3932d9af45c4SRobert Watson func_append_quoted args "$file" 3933d9af45c4SRobert Watson done 3934d9af45c4SRobert Watson 3935d9af45c4SRobert Watson if $opt_dry_run; then 39363b97a967SRobert Watson # Display what would be done. 39373b97a967SRobert Watson if test -n "$shlibpath_var"; then 39383b97a967SRobert Watson eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 39393b97a967SRobert Watson echo "export $shlibpath_var" 39403b97a967SRobert Watson fi 39413b97a967SRobert Watson $ECHO "$cmd$args" 39423b97a967SRobert Watson exit $EXIT_SUCCESS 39433b97a967SRobert Watson else 39443b97a967SRobert Watson if test -n "$shlibpath_var"; then 39453b97a967SRobert Watson # Export the shlibpath_var. 39463b97a967SRobert Watson eval "export $shlibpath_var" 39473b97a967SRobert Watson fi 39483b97a967SRobert Watson 39493b97a967SRobert Watson # Restore saved environment variables 39503b97a967SRobert Watson for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 39513b97a967SRobert Watson do 39523b97a967SRobert Watson eval "if test \"\${save_$lt_var+set}\" = set; then 39533b97a967SRobert Watson $lt_var=\$save_$lt_var; export $lt_var 39543b97a967SRobert Watson else 39553b97a967SRobert Watson $lt_unset $lt_var 39563b97a967SRobert Watson fi" 39573b97a967SRobert Watson done 39583b97a967SRobert Watson 39593b97a967SRobert Watson # Now prepare to actually exec the command. 39603b97a967SRobert Watson exec_cmd=\$cmd$args 39613b97a967SRobert Watson fi 39623b97a967SRobert Watson} 39633b97a967SRobert Watson 39643b97a967SRobert Watsontest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 39653b97a967SRobert Watson 39663b97a967SRobert Watson 39673b97a967SRobert Watson# func_mode_finish arg... 39683b97a967SRobert Watsonfunc_mode_finish () 39693b97a967SRobert Watson{ 39703b97a967SRobert Watson $debug_cmd 39713b97a967SRobert Watson 39723b97a967SRobert Watson libs= 39733b97a967SRobert Watson libdirs= 39743b97a967SRobert Watson admincmds= 39753b97a967SRobert Watson 39763b97a967SRobert Watson for opt in "$nonopt" ${1+"$@"} 39773b97a967SRobert Watson do 39783b97a967SRobert Watson if test -d "$opt"; then 39793b97a967SRobert Watson func_append libdirs " $opt" 3980eb336521SRobert Watson 3981eb336521SRobert Watson elif test -f "$opt"; then 3982eb336521SRobert Watson if func_lalib_unsafe_p "$opt"; then 3983eb336521SRobert Watson func_append libs " $opt" 39843b97a967SRobert Watson else 39853b97a967SRobert Watson func_warning "'$opt' is not a valid libtool archive" 39863b97a967SRobert Watson fi 39873b97a967SRobert Watson 39883b97a967SRobert Watson else 39893b97a967SRobert Watson func_fatal_error "invalid argument '$opt'" 39903b97a967SRobert Watson fi 39913b97a967SRobert Watson done 39923b97a967SRobert Watson 39933b97a967SRobert Watson if test -n "$libs"; then 39943b97a967SRobert Watson if test -n "$lt_sysroot"; then 39953b97a967SRobert Watson sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 39963b97a967SRobert Watson sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 39973b97a967SRobert Watson else 39983b97a967SRobert Watson sysroot_cmd= 39993b97a967SRobert Watson fi 40003b97a967SRobert Watson 40013b97a967SRobert Watson # Remove sysroot references 40023b97a967SRobert Watson if $opt_dry_run; then 40033b97a967SRobert Watson for lib in $libs; do 40043b97a967SRobert Watson echo "removing references to $lt_sysroot and '=' prefixes from $lib" 40053b97a967SRobert Watson done 40063b97a967SRobert Watson else 40073b97a967SRobert Watson tmpdir=`func_mktempdir` 40083b97a967SRobert Watson for lib in $libs; do 40093b97a967SRobert Watson $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 40103b97a967SRobert Watson > $tmpdir/tmp-la 40113b97a967SRobert Watson mv -f $tmpdir/tmp-la $lib 40123b97a967SRobert Watson done 40133b97a967SRobert Watson ${RM}r "$tmpdir" 40143b97a967SRobert Watson fi 40153b97a967SRobert Watson fi 40163b97a967SRobert Watson 40173b97a967SRobert Watson if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 40183b97a967SRobert Watson for libdir in $libdirs; do 40193b97a967SRobert Watson if test -n "$finish_cmds"; then 40203b97a967SRobert Watson # Do each command in the finish commands. 40213b97a967SRobert Watson func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4022d9af45c4SRobert Watson'"$cmd"'"' 40233b97a967SRobert Watson fi 40243b97a967SRobert Watson if test -n "$finish_eval"; then 40253b97a967SRobert Watson # Do the single finish_eval. 40263b97a967SRobert Watson eval cmds=\"$finish_eval\" 40273b97a967SRobert Watson $opt_dry_run || eval "$cmds" || func_append admincmds " 40283b97a967SRobert Watson $cmds" 40293b97a967SRobert Watson fi 40303b97a967SRobert Watson done 40313b97a967SRobert Watson fi 40323b97a967SRobert Watson 40333b97a967SRobert Watson # Exit here if they wanted silent mode. 40343b97a967SRobert Watson $opt_quiet && exit $EXIT_SUCCESS 40353b97a967SRobert Watson 40363b97a967SRobert Watson if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 40373b97a967SRobert Watson echo "----------------------------------------------------------------------" 40383b97a967SRobert Watson echo "Libraries have been installed in:" 40393b97a967SRobert Watson for libdir in $libdirs; do 40403b97a967SRobert Watson $ECHO " $libdir" 40413b97a967SRobert Watson done 40423b97a967SRobert Watson echo 40433b97a967SRobert Watson echo "If you ever happen to want to link against installed libraries" 40443b97a967SRobert Watson echo "in a given directory, LIBDIR, you must either use libtool, and" 40453b97a967SRobert Watson echo "specify the full pathname of the library, or use the '-LLIBDIR'" 40463b97a967SRobert Watson echo "flag during linking and do at least one of the following:" 40473b97a967SRobert Watson if test -n "$shlibpath_var"; then 40483b97a967SRobert Watson echo " - add LIBDIR to the '$shlibpath_var' environment variable" 40493b97a967SRobert Watson echo " during execution" 40503b97a967SRobert Watson fi 40513b97a967SRobert Watson if test -n "$runpath_var"; then 40523b97a967SRobert Watson echo " - add LIBDIR to the '$runpath_var' environment variable" 40533b97a967SRobert Watson echo " during linking" 40543b97a967SRobert Watson fi 40553b97a967SRobert Watson if test -n "$hardcode_libdir_flag_spec"; then 40563b97a967SRobert Watson libdir=LIBDIR 40573b97a967SRobert Watson eval flag=\"$hardcode_libdir_flag_spec\" 40583b97a967SRobert Watson 40593b97a967SRobert Watson $ECHO " - use the '$flag' linker flag" 40603b97a967SRobert Watson fi 40613b97a967SRobert Watson if test -n "$admincmds"; then 40623b97a967SRobert Watson $ECHO " - have your system administrator run these commands:$admincmds" 40633b97a967SRobert Watson fi 40643b97a967SRobert Watson if test -f /etc/ld.so.conf; then 40653b97a967SRobert Watson echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 40663b97a967SRobert Watson fi 40673b97a967SRobert Watson echo 40683b97a967SRobert Watson 40693b97a967SRobert Watson echo "See any operating system documentation about shared libraries for" 40703b97a967SRobert Watson case $host in 40713b97a967SRobert Watson solaris2.[6789]|solaris2.1[0-9]) 40723b97a967SRobert Watson echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 40733b97a967SRobert Watson echo "pages." 40743b97a967SRobert Watson ;; 40753b97a967SRobert Watson *) 40763b97a967SRobert Watson echo "more information, such as the ld(1) and ld.so(8) manual pages." 40773b97a967SRobert Watson ;; 40783b97a967SRobert Watson esac 40793b97a967SRobert Watson echo "----------------------------------------------------------------------" 40803b97a967SRobert Watson fi 40813b97a967SRobert Watson exit $EXIT_SUCCESS 40823b97a967SRobert Watson} 40833b97a967SRobert Watson 40843b97a967SRobert Watsontest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 40853b97a967SRobert Watson 40863b97a967SRobert Watson 40873b97a967SRobert Watson# func_mode_install arg... 40883b97a967SRobert Watsonfunc_mode_install () 40893b97a967SRobert Watson{ 40903b97a967SRobert Watson $debug_cmd 40913b97a967SRobert Watson 40923b97a967SRobert Watson # There may be an optional sh(1) argument at the beginning of 40933b97a967SRobert Watson # install_prog (especially on Windows NT). 40943b97a967SRobert Watson if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 40953b97a967SRobert Watson # Allow the use of GNU shtool's install command. 40963b97a967SRobert Watson case $nonopt in *shtool*) :;; *) false;; esac 40973b97a967SRobert Watson then 40983b97a967SRobert Watson # Aesthetically quote it. 40993b97a967SRobert Watson func_quote_for_eval "$nonopt" 41003b97a967SRobert Watson install_prog="$func_quote_for_eval_result " 41013b97a967SRobert Watson arg=$1 41023b97a967SRobert Watson shift 41033b97a967SRobert Watson else 41043b97a967SRobert Watson install_prog= 41053b97a967SRobert Watson arg=$nonopt 41063b97a967SRobert Watson fi 41073b97a967SRobert Watson 41083b97a967SRobert Watson # The real first argument should be the name of the installation program. 41093b97a967SRobert Watson # Aesthetically quote it. 41103b97a967SRobert Watson func_quote_for_eval "$arg" 41113b97a967SRobert Watson func_append install_prog "$func_quote_for_eval_result" 41123b97a967SRobert Watson install_shared_prog=$install_prog 41133b97a967SRobert Watson case " $install_prog " in 41143b97a967SRobert Watson *[\\\ /]cp\ *) install_cp=: ;; 41153b97a967SRobert Watson *) install_cp=false ;; 41163b97a967SRobert Watson esac 41173b97a967SRobert Watson 41183b97a967SRobert Watson # We need to accept at least all the BSD install flags. 41193b97a967SRobert Watson dest= 41203b97a967SRobert Watson files= 41213b97a967SRobert Watson opts= 41223b97a967SRobert Watson prev= 41233b97a967SRobert Watson install_type= 41243b97a967SRobert Watson isdir=false 41253b97a967SRobert Watson stripme= 41263b97a967SRobert Watson no_mode=: 41273b97a967SRobert Watson for arg 41283b97a967SRobert Watson do 41293b97a967SRobert Watson arg2= 41303b97a967SRobert Watson if test -n "$dest"; then 41313b97a967SRobert Watson func_append files " $dest" 41323b97a967SRobert Watson dest=$arg 41333b97a967SRobert Watson continue 41343b97a967SRobert Watson fi 41353b97a967SRobert Watson 41363b97a967SRobert Watson case $arg in 41373b97a967SRobert Watson -d) isdir=: ;; 41383b97a967SRobert Watson -f) 41393b97a967SRobert Watson if $install_cp; then :; else 41403b97a967SRobert Watson prev=$arg 41413b97a967SRobert Watson fi 41423b97a967SRobert Watson ;; 41433b97a967SRobert Watson -g | -m | -o) 41443b97a967SRobert Watson prev=$arg 41453b97a967SRobert Watson ;; 41463b97a967SRobert Watson -s) 41473b97a967SRobert Watson stripme=" -s" 41483b97a967SRobert Watson continue 41493b97a967SRobert Watson ;; 41503b97a967SRobert Watson -*) 41513b97a967SRobert Watson ;; 41523b97a967SRobert Watson *) 41533b97a967SRobert Watson # If the previous option needed an argument, then skip it. 41543b97a967SRobert Watson if test -n "$prev"; then 41553b97a967SRobert Watson if test X-m = "X$prev" && test -n "$install_override_mode"; then 41563b97a967SRobert Watson arg2=$install_override_mode 41573b97a967SRobert Watson no_mode=false 41583b97a967SRobert Watson fi 41593b97a967SRobert Watson prev= 41603b97a967SRobert Watson else 41613b97a967SRobert Watson dest=$arg 41623b97a967SRobert Watson continue 41633b97a967SRobert Watson fi 41643b97a967SRobert Watson ;; 41653b97a967SRobert Watson esac 41663b97a967SRobert Watson 41673b97a967SRobert Watson # Aesthetically quote the argument. 41683b97a967SRobert Watson func_quote_for_eval "$arg" 41693b97a967SRobert Watson func_append install_prog " $func_quote_for_eval_result" 41703b97a967SRobert Watson if test -n "$arg2"; then 41713b97a967SRobert Watson func_quote_for_eval "$arg2" 41723b97a967SRobert Watson fi 41733b97a967SRobert Watson func_append install_shared_prog " $func_quote_for_eval_result" 41743b97a967SRobert Watson done 41753b97a967SRobert Watson 41763b97a967SRobert Watson test -z "$install_prog" && \ 41773b97a967SRobert Watson func_fatal_help "you must specify an install program" 41783b97a967SRobert Watson 41793b97a967SRobert Watson test -n "$prev" && \ 41803b97a967SRobert Watson func_fatal_help "the '$prev' option requires an argument" 41813b97a967SRobert Watson 41823b97a967SRobert Watson if test -n "$install_override_mode" && $no_mode; then 41833b97a967SRobert Watson if $install_cp; then :; else 41843b97a967SRobert Watson func_quote_for_eval "$install_override_mode" 41853b97a967SRobert Watson func_append install_shared_prog " -m $func_quote_for_eval_result" 41863b97a967SRobert Watson fi 41873b97a967SRobert Watson fi 41883b97a967SRobert Watson 41893b97a967SRobert Watson if test -z "$files"; then 41903b97a967SRobert Watson if test -z "$dest"; then 41913b97a967SRobert Watson func_fatal_help "no file or destination specified" 41923b97a967SRobert Watson else 41933b97a967SRobert Watson func_fatal_help "you must specify a destination" 41943b97a967SRobert Watson fi 41953b97a967SRobert Watson fi 41963b97a967SRobert Watson 41973b97a967SRobert Watson # Strip any trailing slash from the destination. 41983b97a967SRobert Watson func_stripname '' '/' "$dest" 41993b97a967SRobert Watson dest=$func_stripname_result 42003b97a967SRobert Watson 42013b97a967SRobert Watson # Check to see that the destination is a directory. 42023b97a967SRobert Watson test -d "$dest" && isdir=: 42033b97a967SRobert Watson if $isdir; then 42043b97a967SRobert Watson destdir=$dest 42053b97a967SRobert Watson destname= 42063b97a967SRobert Watson else 42073b97a967SRobert Watson func_dirname_and_basename "$dest" "" "." 42083b97a967SRobert Watson destdir=$func_dirname_result 42093b97a967SRobert Watson destname=$func_basename_result 42103b97a967SRobert Watson 42113b97a967SRobert Watson # Not a directory, so check to see that there is only one file specified. 42123b97a967SRobert Watson set dummy $files; shift 42133b97a967SRobert Watson test "$#" -gt 1 && \ 42143b97a967SRobert Watson func_fatal_help "'$dest' is not a directory" 42153b97a967SRobert Watson fi 42163b97a967SRobert Watson case $destdir in 42173b97a967SRobert Watson [\\/]* | [A-Za-z]:[\\/]*) ;; 42183b97a967SRobert Watson *) 42193b97a967SRobert Watson for file in $files; do 42203b97a967SRobert Watson case $file in 42213b97a967SRobert Watson *.lo) ;; 42223b97a967SRobert Watson *) 42233b97a967SRobert Watson func_fatal_help "'$destdir' must be an absolute directory name" 42243b97a967SRobert Watson ;; 42253b97a967SRobert Watson esac 42263b97a967SRobert Watson done 42273b97a967SRobert Watson ;; 42283b97a967SRobert Watson esac 42293b97a967SRobert Watson 42303b97a967SRobert Watson # This variable tells wrapper scripts just to set variables rather 42313b97a967SRobert Watson # than running their programs. 42323b97a967SRobert Watson libtool_install_magic=$magic 42333b97a967SRobert Watson 42343b97a967SRobert Watson staticlibs= 42353b97a967SRobert Watson future_libdirs= 42363b97a967SRobert Watson current_libdirs= 42373b97a967SRobert Watson for file in $files; do 42383b97a967SRobert Watson 42393b97a967SRobert Watson # Do each installation. 42403b97a967SRobert Watson case $file in 42413b97a967SRobert Watson *.$libext) 42423b97a967SRobert Watson # Do the static libraries later. 42433b97a967SRobert Watson func_append staticlibs " $file" 42443b97a967SRobert Watson ;; 42453b97a967SRobert Watson 42463b97a967SRobert Watson *.la) 42473b97a967SRobert Watson func_resolve_sysroot "$file" 42483b97a967SRobert Watson file=$func_resolve_sysroot_result 42493b97a967SRobert Watson 42503b97a967SRobert Watson # Check to see that this really is a libtool archive. 42513b97a967SRobert Watson func_lalib_unsafe_p "$file" \ 42523b97a967SRobert Watson || func_fatal_help "'$file' is not a valid libtool archive" 42533b97a967SRobert Watson 42543b97a967SRobert Watson library_names= 42553b97a967SRobert Watson old_library= 42563b97a967SRobert Watson relink_command= 42573b97a967SRobert Watson func_source "$file" 42583b97a967SRobert Watson 42593b97a967SRobert Watson # Add the libdir to current_libdirs if it is the destination. 42603b97a967SRobert Watson if test "X$destdir" = "X$libdir"; then 42613b97a967SRobert Watson case "$current_libdirs " in 42623b97a967SRobert Watson *" $libdir "*) ;; 42633b97a967SRobert Watson *) func_append current_libdirs " $libdir" ;; 42643b97a967SRobert Watson esac 42653b97a967SRobert Watson else 42663b97a967SRobert Watson # Note the libdir as a future libdir. 42673b97a967SRobert Watson case "$future_libdirs " in 42683b97a967SRobert Watson *" $libdir "*) ;; 42693b97a967SRobert Watson *) func_append future_libdirs " $libdir" ;; 42703b97a967SRobert Watson esac 42713b97a967SRobert Watson fi 42723b97a967SRobert Watson 42733b97a967SRobert Watson func_dirname "$file" "/" "" 42743b97a967SRobert Watson dir=$func_dirname_result 42753b97a967SRobert Watson func_append dir "$objdir" 42763b97a967SRobert Watson 42773b97a967SRobert Watson if test -n "$relink_command"; then 42783b97a967SRobert Watson # Determine the prefix the user has applied to our future dir. 42793b97a967SRobert Watson inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 42803b97a967SRobert Watson 42813b97a967SRobert Watson # Don't allow the user to place us outside of our expected 42823b97a967SRobert Watson # location b/c this prevents finding dependent libraries that 42833b97a967SRobert Watson # are installed to the same prefix. 42843b97a967SRobert Watson # At present, this check doesn't affect windows .dll's that 42853b97a967SRobert Watson # are installed into $libdir/../bin (currently, that works fine) 42863b97a967SRobert Watson # but it's something to keep an eye on. 42873b97a967SRobert Watson test "$inst_prefix_dir" = "$destdir" && \ 42883b97a967SRobert Watson func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 42893b97a967SRobert Watson 42903b97a967SRobert Watson if test -n "$inst_prefix_dir"; then 42913b97a967SRobert Watson # Stick the inst_prefix_dir data into the link command. 42923b97a967SRobert Watson relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 42933b97a967SRobert Watson else 42943b97a967SRobert Watson relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 42953b97a967SRobert Watson fi 42963b97a967SRobert Watson 42973b97a967SRobert Watson func_warning "relinking '$file'" 42983b97a967SRobert Watson func_show_eval "$relink_command" \ 42993b97a967SRobert Watson 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 43003b97a967SRobert Watson fi 43013b97a967SRobert Watson 43023b97a967SRobert Watson # See the names of the shared library. 43033b97a967SRobert Watson set dummy $library_names; shift 43043b97a967SRobert Watson if test -n "$1"; then 43053b97a967SRobert Watson realname=$1 43063b97a967SRobert Watson shift 43073b97a967SRobert Watson 43083b97a967SRobert Watson srcname=$realname 43093b97a967SRobert Watson test -n "$relink_command" && srcname=${realname}T 43103b97a967SRobert Watson 43113b97a967SRobert Watson # Install the shared library and build the symlinks. 43123b97a967SRobert Watson func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 43133b97a967SRobert Watson 'exit $?' 43143b97a967SRobert Watson tstripme=$stripme 43153b97a967SRobert Watson case $host_os in 43163b97a967SRobert Watson cygwin* | mingw* | pw32* | cegcc*) 43173b97a967SRobert Watson case $realname in 43183b97a967SRobert Watson *.dll.a) 43193b97a967SRobert Watson tstripme= 43203b97a967SRobert Watson ;; 43213b97a967SRobert Watson esac 43223b97a967SRobert Watson ;; 43233b97a967SRobert Watson os2*) 43243b97a967SRobert Watson case $realname in 43253b97a967SRobert Watson *_dll.a) 43263b97a967SRobert Watson tstripme= 43273b97a967SRobert Watson ;; 43283b97a967SRobert Watson esac 43293b97a967SRobert Watson ;; 43303b97a967SRobert Watson esac 43313b97a967SRobert Watson if test -n "$tstripme" && test -n "$striplib"; then 43323b97a967SRobert Watson func_show_eval "$striplib $destdir/$realname" 'exit $?' 43333b97a967SRobert Watson fi 43343b97a967SRobert Watson 43353b97a967SRobert Watson if test "$#" -gt 0; then 43363b97a967SRobert Watson # Delete the old symlinks, and create new ones. 43373b97a967SRobert Watson # Try 'ln -sf' first, because the 'ln' binary might depend on 43383b97a967SRobert Watson # the symlink we replace! Solaris /bin/ln does not understand -f, 43393b97a967SRobert Watson # so we also need to try rm && ln -s. 43403b97a967SRobert Watson for linkname 43413b97a967SRobert Watson do 4342eb336521SRobert Watson test "$linkname" != "$realname" \ 4343eb336521SRobert Watson && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 43443b97a967SRobert Watson done 43453b97a967SRobert Watson fi 43463b97a967SRobert Watson 43473b97a967SRobert Watson # Do each command in the postinstall commands. 4348eb336521SRobert Watson lib=$destdir/$realname 4349eb336521SRobert Watson func_execute_cmds "$postinstall_cmds" 'exit $?' 43503b97a967SRobert Watson fi 43513b97a967SRobert Watson 43523b97a967SRobert Watson # Install the pseudo-library for information purposes. 43533b97a967SRobert Watson func_basename "$file" 43543b97a967SRobert Watson name=$func_basename_result 43553b97a967SRobert Watson instname=$dir/${name}i 43563b97a967SRobert Watson func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 43573b97a967SRobert Watson 43583b97a967SRobert Watson # Maybe install the static library, too. 43593b97a967SRobert Watson test -n "$old_library" && func_append staticlibs " $dir/$old_library" 43603b97a967SRobert Watson ;; 43613b97a967SRobert Watson 43623b97a967SRobert Watson *.lo) 43633b97a967SRobert Watson # Install (i.e. copy) a libtool object. 43643b97a967SRobert Watson 43653b97a967SRobert Watson # Figure out destination file name, if it wasn't already specified. 43663b97a967SRobert Watson if test -n "$destname"; then 43673b97a967SRobert Watson destfile=$destdir/$destname 43683b97a967SRobert Watson else 43693b97a967SRobert Watson func_basename "$file" 43703b97a967SRobert Watson destfile=$func_basename_result 43713b97a967SRobert Watson destfile=$destdir/$destfile 43723b97a967SRobert Watson fi 43733b97a967SRobert Watson 43743b97a967SRobert Watson # Deduce the name of the destination old-style object file. 43753b97a967SRobert Watson case $destfile in 43763b97a967SRobert Watson *.lo) 43773b97a967SRobert Watson func_lo2o "$destfile" 43783b97a967SRobert Watson staticdest=$func_lo2o_result 43793b97a967SRobert Watson ;; 43803b97a967SRobert Watson *.$objext) 43813b97a967SRobert Watson staticdest=$destfile 43823b97a967SRobert Watson destfile= 43833b97a967SRobert Watson ;; 43843b97a967SRobert Watson *) 43853b97a967SRobert Watson func_fatal_help "cannot copy a libtool object to '$destfile'" 43863b97a967SRobert Watson ;; 43873b97a967SRobert Watson esac 43883b97a967SRobert Watson 43893b97a967SRobert Watson # Install the libtool object if requested. 43903b97a967SRobert Watson test -n "$destfile" && \ 43913b97a967SRobert Watson func_show_eval "$install_prog $file $destfile" 'exit $?' 43923b97a967SRobert Watson 43933b97a967SRobert Watson # Install the old object if enabled. 43943b97a967SRobert Watson if test yes = "$build_old_libs"; then 43953b97a967SRobert Watson # Deduce the name of the old-style object file. 43963b97a967SRobert Watson func_lo2o "$file" 43973b97a967SRobert Watson staticobj=$func_lo2o_result 43983b97a967SRobert Watson func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 43993b97a967SRobert Watson fi 44003b97a967SRobert Watson exit $EXIT_SUCCESS 44013b97a967SRobert Watson ;; 44023b97a967SRobert Watson 44033b97a967SRobert Watson *) 44043b97a967SRobert Watson # Figure out destination file name, if it wasn't already specified. 44053b97a967SRobert Watson if test -n "$destname"; then 44063b97a967SRobert Watson destfile=$destdir/$destname 44073b97a967SRobert Watson else 44083b97a967SRobert Watson func_basename "$file" 44093b97a967SRobert Watson destfile=$func_basename_result 44103b97a967SRobert Watson destfile=$destdir/$destfile 44113b97a967SRobert Watson fi 44123b97a967SRobert Watson 44133b97a967SRobert Watson # If the file is missing, and there is a .exe on the end, strip it 44143b97a967SRobert Watson # because it is most likely a libtool script we actually want to 44153b97a967SRobert Watson # install 44163b97a967SRobert Watson stripped_ext= 44173b97a967SRobert Watson case $file in 44183b97a967SRobert Watson *.exe) 44193b97a967SRobert Watson if test ! -f "$file"; then 44203b97a967SRobert Watson func_stripname '' '.exe' "$file" 44213b97a967SRobert Watson file=$func_stripname_result 44223b97a967SRobert Watson stripped_ext=.exe 44233b97a967SRobert Watson fi 44243b97a967SRobert Watson ;; 44253b97a967SRobert Watson esac 44263b97a967SRobert Watson 44273b97a967SRobert Watson # Do a test to see if this is really a libtool program. 44283b97a967SRobert Watson case $host in 44293b97a967SRobert Watson *cygwin* | *mingw*) 44303b97a967SRobert Watson if func_ltwrapper_executable_p "$file"; then 44313b97a967SRobert Watson func_ltwrapper_scriptname "$file" 44323b97a967SRobert Watson wrapper=$func_ltwrapper_scriptname_result 44333b97a967SRobert Watson else 44343b97a967SRobert Watson func_stripname '' '.exe' "$file" 44353b97a967SRobert Watson wrapper=$func_stripname_result 44363b97a967SRobert Watson fi 44373b97a967SRobert Watson ;; 44383b97a967SRobert Watson *) 44393b97a967SRobert Watson wrapper=$file 44403b97a967SRobert Watson ;; 44413b97a967SRobert Watson esac 44423b97a967SRobert Watson if func_ltwrapper_script_p "$wrapper"; then 44433b97a967SRobert Watson notinst_deplibs= 44443b97a967SRobert Watson relink_command= 44453b97a967SRobert Watson 44463b97a967SRobert Watson func_source "$wrapper" 44473b97a967SRobert Watson 44483b97a967SRobert Watson # Check the variables that should have been set. 44493b97a967SRobert Watson test -z "$generated_by_libtool_version" && \ 44503b97a967SRobert Watson func_fatal_error "invalid libtool wrapper script '$wrapper'" 44513b97a967SRobert Watson 44523b97a967SRobert Watson finalize=: 44533b97a967SRobert Watson for lib in $notinst_deplibs; do 44543b97a967SRobert Watson # Check to see that each library is installed. 44553b97a967SRobert Watson libdir= 4456d9af45c4SRobert Watson if test -f "$lib"; then 4457d9af45c4SRobert Watson func_source "$lib" 4458d9af45c4SRobert Watson fi 4459d9af45c4SRobert Watson libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4460d9af45c4SRobert Watson if test -n "$libdir" && test ! -f "$libfile"; then 4461d9af45c4SRobert Watson func_warning "'$lib' has not been installed in '$libdir'" 4462d9af45c4SRobert Watson finalize=false 4463d9af45c4SRobert Watson fi 4464d9af45c4SRobert Watson done 4465d9af45c4SRobert Watson 4466d9af45c4SRobert Watson relink_command= 4467d9af45c4SRobert Watson func_source "$wrapper" 4468d9af45c4SRobert Watson 4469d9af45c4SRobert Watson outputname= 4470d9af45c4SRobert Watson if test no = "$fast_install" && test -n "$relink_command"; then 4471d9af45c4SRobert Watson $opt_dry_run || { 4472d9af45c4SRobert Watson if $finalize; then 4473d9af45c4SRobert Watson tmpdir=`func_mktempdir` 4474d9af45c4SRobert Watson func_basename "$file$stripped_ext" 4475d9af45c4SRobert Watson file=$func_basename_result 4476d9af45c4SRobert Watson outputname=$tmpdir/$file 4477d9af45c4SRobert Watson # Replace the output file specification. 4478d9af45c4SRobert Watson relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4479d9af45c4SRobert Watson 4480d9af45c4SRobert Watson $opt_quiet || { 4481d9af45c4SRobert Watson func_quote_for_expand "$relink_command" 4482d9af45c4SRobert Watson eval "func_echo $func_quote_for_expand_result" 4483d9af45c4SRobert Watson } 4484d9af45c4SRobert Watson if eval "$relink_command"; then : 44853b97a967SRobert Watson else 44863b97a967SRobert Watson func_error "error: relink '$file' with the above command before installing it" 44873b97a967SRobert Watson $opt_dry_run || ${RM}r "$tmpdir" 44883b97a967SRobert Watson continue 44893b97a967SRobert Watson fi 44903b97a967SRobert Watson file=$outputname 44913b97a967SRobert Watson else 44923b97a967SRobert Watson func_warning "cannot relink '$file'" 44933b97a967SRobert Watson fi 44943b97a967SRobert Watson } 44953b97a967SRobert Watson else 44963b97a967SRobert Watson # Install the binary that we compiled earlier. 44973b97a967SRobert Watson file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 44983b97a967SRobert Watson fi 44993b97a967SRobert Watson fi 45003b97a967SRobert Watson 45013b97a967SRobert Watson # remove .exe since cygwin /usr/bin/install will append another 45023b97a967SRobert Watson # one anyway 45033b97a967SRobert Watson case $install_prog,$host in 45043b97a967SRobert Watson */usr/bin/install*,*cygwin*) 45053b97a967SRobert Watson case $file:$destfile in 45063b97a967SRobert Watson *.exe:*.exe) 45073b97a967SRobert Watson # this is ok 45083b97a967SRobert Watson ;; 45093b97a967SRobert Watson *.exe:*) 45103b97a967SRobert Watson destfile=$destfile.exe 45113b97a967SRobert Watson ;; 45123b97a967SRobert Watson *:*.exe) 45133b97a967SRobert Watson func_stripname '' '.exe' "$destfile" 45143b97a967SRobert Watson destfile=$func_stripname_result 45153b97a967SRobert Watson ;; 45163b97a967SRobert Watson esac 45173b97a967SRobert Watson ;; 45183b97a967SRobert Watson esac 45193b97a967SRobert Watson func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 45203b97a967SRobert Watson $opt_dry_run || if test -n "$outputname"; then 45213b97a967SRobert Watson ${RM}r "$tmpdir" 45223b97a967SRobert Watson fi 45233b97a967SRobert Watson ;; 45243b97a967SRobert Watson esac 45253b97a967SRobert Watson done 45263b97a967SRobert Watson 45273b97a967SRobert Watson for file in $staticlibs; do 45283b97a967SRobert Watson func_basename "$file" 4529d9af45c4SRobert Watson name=$func_basename_result 45303b97a967SRobert Watson 45313b97a967SRobert Watson # Set up the ranlib parameters. 45323b97a967SRobert Watson oldlib=$destdir/$name 45333b97a967SRobert Watson func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4534d9af45c4SRobert Watson tool_oldlib=$func_to_tool_file_result 4535d9af45c4SRobert Watson 4536d9af45c4SRobert Watson func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4537d9af45c4SRobert Watson 45383b97a967SRobert Watson if test -n "$stripme" && test -n "$old_striplib"; then 45393b97a967SRobert Watson func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 45403b97a967SRobert Watson fi 45413b97a967SRobert Watson 45423b97a967SRobert Watson # Do each command in the postinstall commands. 45433b97a967SRobert Watson func_execute_cmds "$old_postinstall_cmds" 'exit $?' 45443b97a967SRobert Watson done 45453b97a967SRobert Watson 45463b97a967SRobert Watson test -n "$future_libdirs" && \ 45473b97a967SRobert Watson func_warning "remember to run '$progname --finish$future_libdirs'" 45483b97a967SRobert Watson 45493b97a967SRobert Watson if test -n "$current_libdirs"; then 45503b97a967SRobert Watson # Maybe just do a dry run. 45513b97a967SRobert Watson $opt_dry_run && current_libdirs=" -n$current_libdirs" 45523b97a967SRobert Watson exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 45533b97a967SRobert Watson else 45543b97a967SRobert Watson exit $EXIT_SUCCESS 45553b97a967SRobert Watson fi 45563b97a967SRobert Watson} 45573b97a967SRobert Watson 45583b97a967SRobert Watsontest install = "$opt_mode" && func_mode_install ${1+"$@"} 45593b97a967SRobert Watson 45603b97a967SRobert Watson 45613b97a967SRobert Watson# func_generate_dlsyms outputname originator pic_p 45623b97a967SRobert Watson# Extract symbols from dlprefiles and create ${outputname}S.o with 45633b97a967SRobert Watson# a dlpreopen symbol table. 45643b97a967SRobert Watsonfunc_generate_dlsyms () 45653b97a967SRobert Watson{ 45663b97a967SRobert Watson $debug_cmd 45673b97a967SRobert Watson 45683b97a967SRobert Watson my_outputname=$1 45693b97a967SRobert Watson my_originator=$2 45703b97a967SRobert Watson my_pic_p=${3-false} 45713b97a967SRobert Watson my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 45723b97a967SRobert Watson my_dlsyms= 45733b97a967SRobert Watson 45743b97a967SRobert Watson if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 45753b97a967SRobert Watson if test -n "$NM" && test -n "$global_symbol_pipe"; then 45763b97a967SRobert Watson my_dlsyms=${my_outputname}S.c 45773b97a967SRobert Watson else 45783b97a967SRobert Watson func_error "not configured to extract global symbols from dlpreopened files" 45793b97a967SRobert Watson fi 45803b97a967SRobert Watson fi 45813b97a967SRobert Watson 45823b97a967SRobert Watson if test -n "$my_dlsyms"; then 45833b97a967SRobert Watson case $my_dlsyms in 45843b97a967SRobert Watson "") ;; 45853b97a967SRobert Watson *.c) 45863b97a967SRobert Watson # Discover the nlist of each of the dlfiles. 45873b97a967SRobert Watson nlist=$output_objdir/$my_outputname.nm 45883b97a967SRobert Watson 45893b97a967SRobert Watson func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 45903b97a967SRobert Watson 45913b97a967SRobert Watson # Parse the name list into a source file. 45923b97a967SRobert Watson func_verbose "creating $output_objdir/$my_dlsyms" 45933b97a967SRobert Watson 45943b97a967SRobert Watson $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 45953b97a967SRobert Watson/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 45963b97a967SRobert Watson/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 45973b97a967SRobert Watson 45983b97a967SRobert Watson#ifdef __cplusplus 45993b97a967SRobert Watsonextern \"C\" { 46003b97a967SRobert Watson#endif 46013b97a967SRobert Watson 46023b97a967SRobert Watson#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 46033b97a967SRobert Watson#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 46043b97a967SRobert Watson#endif 46053b97a967SRobert Watson 46063b97a967SRobert Watson/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 46073b97a967SRobert Watson#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 46083b97a967SRobert Watson/* DATA imports from DLLs on WIN32 can't be const, because runtime 46093b97a967SRobert Watson relocations are performed -- see ld's documentation on pseudo-relocs. */ 46103b97a967SRobert Watson# define LT_DLSYM_CONST 46113b97a967SRobert Watson#elif defined __osf__ 46123b97a967SRobert Watson/* This system does not cope well with relocations in const data. */ 46133b97a967SRobert Watson# define LT_DLSYM_CONST 46143b97a967SRobert Watson#else 46153b97a967SRobert Watson# define LT_DLSYM_CONST const 46163b97a967SRobert Watson#endif 46173b97a967SRobert Watson 46183b97a967SRobert Watson#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 46193b97a967SRobert Watson 46203b97a967SRobert Watson/* External symbol declarations for the compiler. */\ 46213b97a967SRobert Watson" 46223b97a967SRobert Watson 46233b97a967SRobert Watson if test yes = "$dlself"; then 46243b97a967SRobert Watson func_verbose "generating symbol list for '$output'" 46253b97a967SRobert Watson 46263b97a967SRobert Watson $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 46273b97a967SRobert Watson 46283b97a967SRobert Watson # Add our own program objects to the symbol list. 46293b97a967SRobert Watson progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 46303b97a967SRobert Watson for progfile in $progfiles; do 46313b97a967SRobert Watson func_to_tool_file "$progfile" func_convert_file_msys_to_w32 46323b97a967SRobert Watson func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 46333b97a967SRobert Watson $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 46343b97a967SRobert Watson done 46353b97a967SRobert Watson 46363b97a967SRobert Watson if test -n "$exclude_expsyms"; then 46373b97a967SRobert Watson $opt_dry_run || { 46383b97a967SRobert Watson eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 46393b97a967SRobert Watson eval '$MV "$nlist"T "$nlist"' 46403b97a967SRobert Watson } 46413b97a967SRobert Watson fi 46423b97a967SRobert Watson 46433b97a967SRobert Watson if test -n "$export_symbols_regex"; then 46443b97a967SRobert Watson $opt_dry_run || { 46453b97a967SRobert Watson eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 46463b97a967SRobert Watson eval '$MV "$nlist"T "$nlist"' 46473b97a967SRobert Watson } 46483b97a967SRobert Watson fi 46493b97a967SRobert Watson 46503b97a967SRobert Watson # Prepare the list of exported symbols 46513b97a967SRobert Watson if test -z "$export_symbols"; then 46523b97a967SRobert Watson export_symbols=$output_objdir/$outputname.exp 46533b97a967SRobert Watson $opt_dry_run || { 4654d9af45c4SRobert Watson $RM $export_symbols 4655d9af45c4SRobert Watson eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4656d9af45c4SRobert Watson case $host in 4657d9af45c4SRobert Watson *cygwin* | *mingw* | *cegcc* ) 4658d9af45c4SRobert Watson eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4659d9af45c4SRobert Watson eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 46603b97a967SRobert Watson ;; 4661d9af45c4SRobert Watson esac 46623b97a967SRobert Watson } 46633b97a967SRobert Watson else 4664d9af45c4SRobert Watson $opt_dry_run || { 4665d9af45c4SRobert Watson eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4666d9af45c4SRobert Watson eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4667d9af45c4SRobert Watson eval '$MV "$nlist"T "$nlist"' 4668d9af45c4SRobert Watson case $host in 4669d9af45c4SRobert Watson *cygwin* | *mingw* | *cegcc* ) 46703b97a967SRobert Watson eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 46713b97a967SRobert Watson eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 46723b97a967SRobert Watson ;; 46733b97a967SRobert Watson esac 46743b97a967SRobert Watson } 46753b97a967SRobert Watson fi 46763b97a967SRobert Watson fi 46773b97a967SRobert Watson 46783b97a967SRobert Watson for dlprefile in $dlprefiles; do 46793b97a967SRobert Watson func_verbose "extracting global C symbols from '$dlprefile'" 46803b97a967SRobert Watson func_basename "$dlprefile" 46813b97a967SRobert Watson name=$func_basename_result 46823b97a967SRobert Watson case $host in 46833b97a967SRobert Watson *cygwin* | *mingw* | *cegcc* ) 46843b97a967SRobert Watson # if an import library, we need to obtain dlname 46853b97a967SRobert Watson if func_win32_import_lib_p "$dlprefile"; then 46863b97a967SRobert Watson func_tr_sh "$dlprefile" 46873b97a967SRobert Watson eval "curr_lafile=\$libfile_$func_tr_sh_result" 46883b97a967SRobert Watson dlprefile_dlbasename= 46893b97a967SRobert Watson if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 46903b97a967SRobert Watson # Use subshell, to avoid clobbering current variable values 46913b97a967SRobert Watson dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 46923b97a967SRobert Watson if test -n "$dlprefile_dlname"; then 46933b97a967SRobert Watson func_basename "$dlprefile_dlname" 46943b97a967SRobert Watson dlprefile_dlbasename=$func_basename_result 46953b97a967SRobert Watson else 46963b97a967SRobert Watson # no lafile. user explicitly requested -dlpreopen <import library>. 46973b97a967SRobert Watson $sharedlib_from_linklib_cmd "$dlprefile" 46983b97a967SRobert Watson dlprefile_dlbasename=$sharedlib_from_linklib_result 46993b97a967SRobert Watson fi 47003b97a967SRobert Watson fi 47013b97a967SRobert Watson $opt_dry_run || { 47023b97a967SRobert Watson if test -n "$dlprefile_dlbasename"; then 47033b97a967SRobert Watson eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 47043b97a967SRobert Watson else 47053b97a967SRobert Watson func_warning "Could not compute DLL name from $name" 47063b97a967SRobert Watson eval '$ECHO ": $name " >> "$nlist"' 47073b97a967SRobert Watson fi 47083b97a967SRobert Watson func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 47093b97a967SRobert Watson eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 47103b97a967SRobert Watson $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 47113b97a967SRobert Watson } 47123b97a967SRobert Watson else # not an import lib 47133b97a967SRobert Watson $opt_dry_run || { 47143b97a967SRobert Watson eval '$ECHO ": $name " >> "$nlist"' 47153b97a967SRobert Watson func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 47163b97a967SRobert Watson eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 47173b97a967SRobert Watson } 47183b97a967SRobert Watson fi 47193b97a967SRobert Watson ;; 47203b97a967SRobert Watson *) 47213b97a967SRobert Watson $opt_dry_run || { 47223b97a967SRobert Watson eval '$ECHO ": $name " >> "$nlist"' 47233b97a967SRobert Watson func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 47243b97a967SRobert Watson eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 47253b97a967SRobert Watson } 47263b97a967SRobert Watson ;; 47273b97a967SRobert Watson esac 47283b97a967SRobert Watson done 47293b97a967SRobert Watson 47303b97a967SRobert Watson $opt_dry_run || { 47313b97a967SRobert Watson # Make sure we have at least an empty file. 47323b97a967SRobert Watson test -f "$nlist" || : > "$nlist" 47333b97a967SRobert Watson 47343b97a967SRobert Watson if test -n "$exclude_expsyms"; then 47353b97a967SRobert Watson $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 47363b97a967SRobert Watson $MV "$nlist"T "$nlist" 47373b97a967SRobert Watson fi 47383b97a967SRobert Watson 47393b97a967SRobert Watson # Try sorting and uniquifying the output. 47403b97a967SRobert Watson if $GREP -v "^: " < "$nlist" | 47413b97a967SRobert Watson if sort -k 3 </dev/null >/dev/null 2>&1; then 47423b97a967SRobert Watson sort -k 3 47433b97a967SRobert Watson else 47443b97a967SRobert Watson sort +2 47453b97a967SRobert Watson fi | 47463b97a967SRobert Watson uniq > "$nlist"S; then 47473b97a967SRobert Watson : 47483b97a967SRobert Watson else 47493b97a967SRobert Watson $GREP -v "^: " < "$nlist" > "$nlist"S 47503b97a967SRobert Watson fi 47513b97a967SRobert Watson 47523b97a967SRobert Watson if test -f "$nlist"S; then 47533b97a967SRobert Watson eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 47543b97a967SRobert Watson else 47553b97a967SRobert Watson echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 47563b97a967SRobert Watson fi 47573b97a967SRobert Watson 47583b97a967SRobert Watson func_show_eval '$RM "${nlist}I"' 47593b97a967SRobert Watson if test -n "$global_symbol_to_import"; then 47603b97a967SRobert Watson eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 47613b97a967SRobert Watson fi 47623b97a967SRobert Watson 47633b97a967SRobert Watson echo >> "$output_objdir/$my_dlsyms" "\ 47643b97a967SRobert Watson 47653b97a967SRobert Watson/* The mapping between symbol names and symbols. */ 47663b97a967SRobert Watsontypedef struct { 47673b97a967SRobert Watson const char *name; 47683b97a967SRobert Watson void *address; 47693b97a967SRobert Watson} lt_dlsymlist; 47703b97a967SRobert Watsonextern LT_DLSYM_CONST lt_dlsymlist 47713b97a967SRobert Watsonlt_${my_prefix}_LTX_preloaded_symbols[];\ 47723b97a967SRobert Watson" 47733b97a967SRobert Watson 47743b97a967SRobert Watson if test -s "$nlist"I; then 47753b97a967SRobert Watson echo >> "$output_objdir/$my_dlsyms" "\ 47763b97a967SRobert Watsonstatic void lt_syminit(void) 47773b97a967SRobert Watson{ 47783b97a967SRobert Watson LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 47793b97a967SRobert Watson for (; symbol->name; ++symbol) 47803b97a967SRobert Watson {" 47813b97a967SRobert Watson $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 47823b97a967SRobert Watson echo >> "$output_objdir/$my_dlsyms" "\ 47833b97a967SRobert Watson } 47843b97a967SRobert Watson}" 47853b97a967SRobert Watson fi 4786d9af45c4SRobert Watson echo >> "$output_objdir/$my_dlsyms" "\ 4787d9af45c4SRobert WatsonLT_DLSYM_CONST lt_dlsymlist 47883b97a967SRobert Watsonlt_${my_prefix}_LTX_preloaded_symbols[] = 47893b97a967SRobert Watson{ {\"$my_originator\", (void *) 0}," 47903b97a967SRobert Watson 47913b97a967SRobert Watson if test -s "$nlist"I; then 47923b97a967SRobert Watson echo >> "$output_objdir/$my_dlsyms" "\ 47933b97a967SRobert Watson {\"@INIT@\", (void *) <_syminit}," 4794d9af45c4SRobert Watson fi 4795d9af45c4SRobert Watson 4796d9af45c4SRobert Watson case $need_lib_prefix in 4797eb336521SRobert Watson no) 4798eb336521SRobert Watson eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 4799d9af45c4SRobert Watson ;; 4800eb336521SRobert Watson *) 4801eb336521SRobert Watson eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 4802d9af45c4SRobert Watson ;; 4803d9af45c4SRobert Watson esac 4804d9af45c4SRobert Watson echo >> "$output_objdir/$my_dlsyms" "\ 4805eb336521SRobert Watson {0, (void *) 0} 4806eb336521SRobert Watson}; 4807d9af45c4SRobert Watson 4808d9af45c4SRobert Watson/* This works around a problem in FreeBSD linker */ 4809d9af45c4SRobert Watson#ifdef FREEBSD_WORKAROUND 4810d9af45c4SRobert Watsonstatic const void *lt_preloaded_setup() { 4811d9af45c4SRobert Watson return lt_${my_prefix}_LTX_preloaded_symbols; 48123b97a967SRobert Watson} 48133b97a967SRobert Watson#endif 48143b97a967SRobert Watson 48153b97a967SRobert Watson#ifdef __cplusplus 48163b97a967SRobert Watson} 48173b97a967SRobert Watson#endif\ 48183b97a967SRobert Watson" 48193b97a967SRobert Watson } # !$opt_dry_run 48203b97a967SRobert Watson 48213b97a967SRobert Watson pic_flag_for_symtable= 48223b97a967SRobert Watson case "$compile_command " in 48233b97a967SRobert Watson *" -static "*) ;; 4824eb336521SRobert Watson *) 4825eb336521SRobert Watson case $host in 48263b97a967SRobert Watson # compiling the symbol table file with pic_flag works around 48273b97a967SRobert Watson # a FreeBSD bug that causes programs to crash when -lm is 48283b97a967SRobert Watson # linked before any other PIC object. But we must not use 48293b97a967SRobert Watson # pic_flag when linking with -static. The problem exists in 4830eb336521SRobert Watson # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 48313b97a967SRobert Watson *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 48323b97a967SRobert Watson pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 48333b97a967SRobert Watson *-*-hpux*) 48343b97a967SRobert Watson pic_flag_for_symtable=" $pic_flag" ;; 48353b97a967SRobert Watson *) 4836d9af45c4SRobert Watson $my_pic_p && pic_flag_for_symtable=" $pic_flag" 48373b97a967SRobert Watson ;; 48383b97a967SRobert Watson esac 48393b97a967SRobert Watson ;; 48403b97a967SRobert Watson esac 48413b97a967SRobert Watson symtab_cflags= 48423b97a967SRobert Watson for arg in $LTCFLAGS; do 48433b97a967SRobert Watson case $arg in 4844d9af45c4SRobert Watson -pie | -fpie | -fPIE) ;; 48453b97a967SRobert Watson *) func_append symtab_cflags " $arg" ;; 48463b97a967SRobert Watson esac 48473b97a967SRobert Watson done 48483b97a967SRobert Watson 48493b97a967SRobert Watson # Now compile the dynamic symbol file. 48503b97a967SRobert Watson func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 48513b97a967SRobert Watson 48523b97a967SRobert Watson # Clean up the generated files. 48533b97a967SRobert Watson func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 48543b97a967SRobert Watson 48553b97a967SRobert Watson # Transform the symbol file into the correct name. 48563b97a967SRobert Watson symfileobj=$output_objdir/${my_outputname}S.$objext 48573b97a967SRobert Watson case $host in 48583b97a967SRobert Watson *cygwin* | *mingw* | *cegcc* ) 48593b97a967SRobert Watson if test -f "$output_objdir/$my_outputname.def"; then 48603b97a967SRobert Watson compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 48613b97a967SRobert Watson finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 48623b97a967SRobert Watson else 48633b97a967SRobert Watson compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 48643b97a967SRobert Watson finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 48653b97a967SRobert Watson fi 48663b97a967SRobert Watson ;; 48673b97a967SRobert Watson *) 48683b97a967SRobert Watson compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 48693b97a967SRobert Watson finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 48703b97a967SRobert Watson ;; 48713b97a967SRobert Watson esac 48723b97a967SRobert Watson ;; 48733b97a967SRobert Watson *) 48743b97a967SRobert Watson func_fatal_error "unknown suffix for '$my_dlsyms'" 48753b97a967SRobert Watson ;; 48763b97a967SRobert Watson esac 48773b97a967SRobert Watson else 48783b97a967SRobert Watson # We keep going just in case the user didn't refer to 48793b97a967SRobert Watson # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 48803b97a967SRobert Watson # really was required. 48813b97a967SRobert Watson 48823b97a967SRobert Watson # Nullify the symbol file. 48833b97a967SRobert Watson compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 48843b97a967SRobert Watson finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 48853b97a967SRobert Watson fi 48863b97a967SRobert Watson} 48873b97a967SRobert Watson 48883b97a967SRobert Watson# func_cygming_gnu_implib_p ARG 48893b97a967SRobert Watson# This predicate returns with zero status (TRUE) if 48903b97a967SRobert Watson# ARG is a GNU/binutils-style import library. Returns 48913b97a967SRobert Watson# with nonzero status (FALSE) otherwise. 48923b97a967SRobert Watsonfunc_cygming_gnu_implib_p () 48933b97a967SRobert Watson{ 48943b97a967SRobert Watson $debug_cmd 48953b97a967SRobert Watson 48963b97a967SRobert Watson func_to_tool_file "$1" func_convert_file_msys_to_w32 48973b97a967SRobert Watson 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)$'` 48983b97a967SRobert Watson test -n "$func_cygming_gnu_implib_tmp" 48993b97a967SRobert Watson} 49003b97a967SRobert Watson 49013b97a967SRobert Watson# func_cygming_ms_implib_p ARG 49023b97a967SRobert Watson# This predicate returns with zero status (TRUE) if 49033b97a967SRobert Watson# ARG is an MS-style import library. Returns 49043b97a967SRobert Watson# with nonzero status (FALSE) otherwise. 49053b97a967SRobert Watsonfunc_cygming_ms_implib_p () 49063b97a967SRobert Watson{ 49073b97a967SRobert Watson $debug_cmd 49083b97a967SRobert Watson 49093b97a967SRobert Watson func_to_tool_file "$1" func_convert_file_msys_to_w32 49103b97a967SRobert Watson func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 49113b97a967SRobert Watson test -n "$func_cygming_ms_implib_tmp" 49123b97a967SRobert Watson} 49133b97a967SRobert Watson 49143b97a967SRobert Watson# func_win32_libid arg 49153b97a967SRobert Watson# return the library type of file 'arg' 49163b97a967SRobert Watson# 4917eb336521SRobert Watson# Need a lot of goo to handle *both* DLLs and import libs 49183b97a967SRobert Watson# Has to be a shell function in order to 'eat' the argument 49193b97a967SRobert Watson# that is supplied when $file_magic_command is called. 49203b97a967SRobert Watson# Despite the name, also deal with 64 bit binaries. 49213b97a967SRobert Watsonfunc_win32_libid () 49223b97a967SRobert Watson{ 49233b97a967SRobert Watson $debug_cmd 49243b97a967SRobert Watson 49253b97a967SRobert Watson win32_libid_type=unknown 49263b97a967SRobert Watson win32_fileres=`file -L $1 2>/dev/null` 49273b97a967SRobert Watson case $win32_fileres in 49283b97a967SRobert Watson *ar\ archive\ import\ library*) # definitely import 49293b97a967SRobert Watson win32_libid_type="x86 archive import" 49303b97a967SRobert Watson ;; 49313b97a967SRobert Watson *ar\ archive*) # could be an import, or static 49323b97a967SRobert Watson # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 49333b97a967SRobert Watson if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 49343b97a967SRobert Watson $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 49353b97a967SRobert Watson case $nm_interface in 49363b97a967SRobert Watson "MS dumpbin") 49373b97a967SRobert Watson if func_cygming_ms_implib_p "$1" || 49383b97a967SRobert Watson func_cygming_gnu_implib_p "$1" 49393b97a967SRobert Watson then 49403b97a967SRobert Watson win32_nmres=import 49413b97a967SRobert Watson else 49423b97a967SRobert Watson win32_nmres= 49433b97a967SRobert Watson fi 49443b97a967SRobert Watson ;; 49453b97a967SRobert Watson *) 49463b97a967SRobert Watson func_to_tool_file "$1" func_convert_file_msys_to_w32 49473b97a967SRobert Watson win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 49483b97a967SRobert Watson $SED -n -e ' 49493b97a967SRobert Watson 1,100{ 49503b97a967SRobert Watson / I /{ 49513b97a967SRobert Watson s|.*|import| 49523b97a967SRobert Watson p 49533b97a967SRobert Watson q 4954eb336521SRobert Watson } 49553b97a967SRobert Watson }'` 49563b97a967SRobert Watson ;; 49573b97a967SRobert Watson esac 49583b97a967SRobert Watson case $win32_nmres in 49593b97a967SRobert Watson import*) win32_libid_type="x86 archive import";; 49603b97a967SRobert Watson *) win32_libid_type="x86 archive static";; 49613b97a967SRobert Watson esac 49623b97a967SRobert Watson fi 49633b97a967SRobert Watson ;; 49643b97a967SRobert Watson *DLL*) 49653b97a967SRobert Watson win32_libid_type="x86 DLL" 49663b97a967SRobert Watson ;; 49673b97a967SRobert Watson *executable*) # but shell scripts are "executable" too... 49683b97a967SRobert Watson case $win32_fileres in 49693b97a967SRobert Watson *MS\ Windows\ PE\ Intel*) 49703b97a967SRobert Watson win32_libid_type="x86 DLL" 49713b97a967SRobert Watson ;; 49723b97a967SRobert Watson esac 49733b97a967SRobert Watson ;; 49743b97a967SRobert Watson esac 49753b97a967SRobert Watson $ECHO "$win32_libid_type" 49763b97a967SRobert Watson} 49773b97a967SRobert Watson 49783b97a967SRobert Watson# func_cygming_dll_for_implib ARG 49793b97a967SRobert Watson# 49803b97a967SRobert Watson# Platform-specific function to extract the 49813b97a967SRobert Watson# name of the DLL associated with the specified 49823b97a967SRobert Watson# import library ARG. 49833b97a967SRobert Watson# Invoked by eval'ing the libtool variable 4984d9af45c4SRobert Watson# $sharedlib_from_linklib_cmd 4985d9af45c4SRobert Watson# Result is available in the variable 4986d9af45c4SRobert Watson# $sharedlib_from_linklib_result 4987d9af45c4SRobert Watsonfunc_cygming_dll_for_implib () 49883b97a967SRobert Watson{ 49893b97a967SRobert Watson $debug_cmd 49903b97a967SRobert Watson 49913b97a967SRobert Watson sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 49923b97a967SRobert Watson} 49933b97a967SRobert Watson 49943b97a967SRobert Watson# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 49953b97a967SRobert Watson# 49963b97a967SRobert Watson# The is the core of a fallback implementation of a 49973b97a967SRobert Watson# platform-specific function to extract the name of the 49983b97a967SRobert Watson# DLL associated with the specified import library LIBNAME. 49993b97a967SRobert Watson# 50003b97a967SRobert Watson# SECTION_NAME is either .idata$6 or .idata$7, depending 50013b97a967SRobert Watson# on the platform and compiler that created the implib. 50023b97a967SRobert Watson# 50033b97a967SRobert Watson# Echos the name of the DLL associated with the 50043b97a967SRobert Watson# specified import library. 50053b97a967SRobert Watsonfunc_cygming_dll_for_implib_fallback_core () 50063b97a967SRobert Watson{ 50073b97a967SRobert Watson $debug_cmd 50083b97a967SRobert Watson 50093b97a967SRobert Watson match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 50103b97a967SRobert Watson $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 50113b97a967SRobert Watson $SED '/^Contents of section '"$match_literal"':/{ 50123b97a967SRobert Watson # Place marker at beginning of archive member dllname section 50133b97a967SRobert Watson s/.*/====MARK====/ 5014d9af45c4SRobert Watson p 5015d9af45c4SRobert Watson d 5016d9af45c4SRobert Watson } 50173b97a967SRobert Watson # These lines can sometimes be longer than 43 characters, but 50183b97a967SRobert Watson # are always uninteresting 50193b97a967SRobert Watson /:[ ]*file format pe[i]\{,1\}-/d 50203b97a967SRobert Watson /^In archive [^:]*:/d 50213b97a967SRobert Watson # Ensure marker is printed 50223b97a967SRobert Watson /^====MARK====/p 50233b97a967SRobert Watson # Remove all lines with less than 43 characters 50243b97a967SRobert Watson /^.\{43\}/!d 50253b97a967SRobert Watson # From remaining lines, remove first 43 characters 50263b97a967SRobert Watson s/^.\{43\}//' | 50273b97a967SRobert Watson $SED -n ' 5028d9af45c4SRobert Watson # Join marker and all lines until next marker into a single line 50293b97a967SRobert Watson /^====MARK====/ b para 50303b97a967SRobert Watson H 50313b97a967SRobert Watson $ b para 50323b97a967SRobert Watson b 50333b97a967SRobert Watson :para 50343b97a967SRobert Watson x 50353b97a967SRobert Watson s/\n//g 50363b97a967SRobert Watson # Remove the marker 5037d9af45c4SRobert Watson s/^====MARK====// 5038d9af45c4SRobert Watson # Remove trailing dots and whitespace 5039d9af45c4SRobert Watson s/[\. \t]*$// 50403b97a967SRobert Watson # Print 50413b97a967SRobert Watson /./p' | 50423b97a967SRobert Watson # we now have a list, one entry per line, of the stringified 50433b97a967SRobert Watson # contents of the appropriate section of all members of the 50443b97a967SRobert Watson # archive that possess that section. Heuristic: eliminate 50453b97a967SRobert Watson # all those that have a first or second character that is 50463b97a967SRobert Watson # a '.' (that is, objdump's representation of an unprintable 50473b97a967SRobert Watson # character.) This should work for all archives with less than 50483b97a967SRobert Watson # 0x302f exports -- but will fail for DLLs whose name actually 5049d9af45c4SRobert Watson # begins with a literal '.' or a single character followed by 5050d9af45c4SRobert Watson # a '.'. 5051d9af45c4SRobert Watson # 5052d9af45c4SRobert Watson # Of those that remain, print the first one. 5053d9af45c4SRobert Watson $SED -e '/^\./d;/^.\./d;q' 5054d9af45c4SRobert Watson} 50553b97a967SRobert Watson 50563b97a967SRobert Watson# func_cygming_dll_for_implib_fallback ARG 50573b97a967SRobert Watson# Platform-specific function to extract the 50583b97a967SRobert Watson# name of the DLL associated with the specified 50593b97a967SRobert Watson# import library ARG. 5060d9af45c4SRobert Watson# 5061d9af45c4SRobert Watson# This fallback implementation is for use when $DLLTOOL 5062d9af45c4SRobert Watson# does not support the --identify-strict option. 5063d9af45c4SRobert Watson# Invoked by eval'ing the libtool variable 5064d9af45c4SRobert Watson# $sharedlib_from_linklib_cmd 5065d9af45c4SRobert Watson# Result is available in the variable 5066d9af45c4SRobert Watson# $sharedlib_from_linklib_result 5067d9af45c4SRobert Watsonfunc_cygming_dll_for_implib_fallback () 50683b97a967SRobert Watson{ 50693b97a967SRobert Watson $debug_cmd 50703b97a967SRobert Watson 50713b97a967SRobert Watson if func_cygming_gnu_implib_p "$1"; then 5072d9af45c4SRobert Watson # binutils import library 5073d9af45c4SRobert Watson sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5074d9af45c4SRobert Watson elif func_cygming_ms_implib_p "$1"; then 50753b97a967SRobert Watson # ms-generated import library 50763b97a967SRobert Watson sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 50773b97a967SRobert Watson else 50783b97a967SRobert Watson # unknown 50793b97a967SRobert Watson sharedlib_from_linklib_result= 50803b97a967SRobert Watson fi 50813b97a967SRobert Watson} 50823b97a967SRobert Watson 50833b97a967SRobert Watson 5084d9af45c4SRobert Watson# func_extract_an_archive dir oldlib 5085d9af45c4SRobert Watsonfunc_extract_an_archive () 5086d9af45c4SRobert Watson{ 50873b97a967SRobert Watson $debug_cmd 50883b97a967SRobert Watson 50893b97a967SRobert Watson f_ex_an_ar_dir=$1; shift 50903b97a967SRobert Watson f_ex_an_ar_oldlib=$1 5091d9af45c4SRobert Watson if test yes = "$lock_old_archive_extraction"; then 50923b97a967SRobert Watson lockfile=$f_ex_an_ar_oldlib.lock 50933b97a967SRobert Watson until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 50943b97a967SRobert Watson func_echo "Waiting for $lockfile to be removed" 5095d9af45c4SRobert Watson sleep 2 5096d9af45c4SRobert Watson done 5097d9af45c4SRobert Watson fi 5098d9af45c4SRobert Watson func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 50993b97a967SRobert Watson 'stat=$?; rm -f "$lockfile"; exit $stat' 51003b97a967SRobert Watson if test yes = "$lock_old_archive_extraction"; then 51013b97a967SRobert Watson $opt_dry_run || rm -f "$lockfile" 51023b97a967SRobert Watson fi 51033b97a967SRobert Watson if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 51043b97a967SRobert Watson : 5105d9af45c4SRobert Watson else 5106d9af45c4SRobert Watson func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5107d9af45c4SRobert Watson fi 5108d9af45c4SRobert Watson} 5109d9af45c4SRobert Watson 5110d9af45c4SRobert Watson 5111d9af45c4SRobert Watson# func_extract_archives gentop oldlib ... 51123b97a967SRobert Watsonfunc_extract_archives () 51133b97a967SRobert Watson{ 5114d9af45c4SRobert Watson $debug_cmd 5115d9af45c4SRobert Watson 5116d9af45c4SRobert Watson my_gentop=$1; shift 5117d9af45c4SRobert Watson my_oldlibs=${1+"$@"} 5118d9af45c4SRobert Watson my_oldobjs= 5119d9af45c4SRobert Watson my_xlib= 5120d9af45c4SRobert Watson my_xabs= 51213b97a967SRobert Watson my_xdir= 51223b97a967SRobert Watson 51233b97a967SRobert Watson for my_xlib in $my_oldlibs; do 5124d9af45c4SRobert Watson # Extract the objects. 5125d9af45c4SRobert Watson case $my_xlib in 51263b97a967SRobert Watson [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 51273b97a967SRobert Watson *) my_xabs=`pwd`"/$my_xlib" ;; 51283b97a967SRobert Watson esac 51293b97a967SRobert Watson func_basename "$my_xlib" 51303b97a967SRobert Watson my_xlib=$func_basename_result 51313b97a967SRobert Watson my_xlib_u=$my_xlib 51323b97a967SRobert Watson while :; do 51333b97a967SRobert Watson case " $extracted_archives " in 51343b97a967SRobert Watson *" $my_xlib_u "*) 51353b97a967SRobert Watson func_arith $extracted_serial + 1 51363b97a967SRobert Watson extracted_serial=$func_arith_result 51373b97a967SRobert Watson my_xlib_u=lt$extracted_serial-$my_xlib ;; 51383b97a967SRobert Watson *) break ;; 51393b97a967SRobert Watson esac 51403b97a967SRobert Watson done 51413b97a967SRobert Watson extracted_archives="$extracted_archives $my_xlib_u" 51423b97a967SRobert Watson my_xdir=$my_gentop/$my_xlib_u 51433b97a967SRobert Watson 51443b97a967SRobert Watson func_mkdir_p "$my_xdir" 51453b97a967SRobert Watson 51463b97a967SRobert Watson case $host in 51473b97a967SRobert Watson *-darwin*) 5148d9af45c4SRobert Watson func_verbose "Extracting $my_xabs" 5149d9af45c4SRobert Watson # Do not bother doing anything if just a dry run 51503b97a967SRobert Watson $opt_dry_run || { 51513b97a967SRobert Watson darwin_orig_dir=`pwd` 51523b97a967SRobert Watson cd $my_xdir || exit $? 51533b97a967SRobert Watson darwin_archive=$my_xabs 51543b97a967SRobert Watson darwin_curdir=`pwd` 5155d9af45c4SRobert Watson func_basename "$darwin_archive" 51563b97a967SRobert Watson darwin_base_archive=$func_basename_result 51573b97a967SRobert Watson darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 51583b97a967SRobert Watson if test -n "$darwin_arches"; then 51593b97a967SRobert Watson darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 51603b97a967SRobert Watson darwin_arch= 51613b97a967SRobert Watson func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5162d9af45c4SRobert Watson for darwin_arch in $darwin_arches; do 51633b97a967SRobert Watson func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 51643b97a967SRobert Watson $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5165d9af45c4SRobert Watson cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5166d9af45c4SRobert Watson func_extract_an_archive "`pwd`" "$darwin_base_archive" 51673b97a967SRobert Watson cd "$darwin_curdir" 5168d9af45c4SRobert Watson $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 51693b97a967SRobert Watson done # $darwin_arches 5170d9af45c4SRobert Watson ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5171d9af45c4SRobert Watson darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5172d9af45c4SRobert Watson darwin_file= 51733b97a967SRobert Watson darwin_files= 5174d9af45c4SRobert Watson for darwin_file in $darwin_filelist; do 5175d9af45c4SRobert Watson darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5176d9af45c4SRobert Watson $LIPO -create -output "$darwin_file" $darwin_files 5177d9af45c4SRobert Watson done # $darwin_filelist 5178d9af45c4SRobert Watson $RM -rf unfat-$$ 51793b97a967SRobert Watson cd "$darwin_orig_dir" 5180d9af45c4SRobert Watson else 5181d9af45c4SRobert Watson cd $darwin_orig_dir 5182d9af45c4SRobert Watson func_extract_an_archive "$my_xdir" "$my_xabs" 5183d9af45c4SRobert Watson fi # $darwin_arches 5184d9af45c4SRobert Watson } # !$opt_dry_run 5185d9af45c4SRobert Watson ;; 5186d9af45c4SRobert Watson *) 5187d9af45c4SRobert Watson func_extract_an_archive "$my_xdir" "$my_xabs" 5188d9af45c4SRobert Watson ;; 51893b97a967SRobert Watson esac 5190d9af45c4SRobert Watson my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5191d9af45c4SRobert Watson done 5192d9af45c4SRobert Watson 5193d9af45c4SRobert Watson func_extract_archives_result=$my_oldobjs 5194d9af45c4SRobert Watson} 5195d9af45c4SRobert Watson 5196d9af45c4SRobert Watson 5197d9af45c4SRobert Watson# func_emit_wrapper [arg=no] 5198d9af45c4SRobert Watson# 5199d9af45c4SRobert Watson# Emit a libtool wrapper script on stdout. 5200d9af45c4SRobert Watson# Don't directly open a file because we may want to 5201d9af45c4SRobert Watson# incorporate the script contents within a cygwin/mingw 5202d9af45c4SRobert Watson# wrapper executable. Must ONLY be called from within 5203d9af45c4SRobert Watson# func_mode_link because it depends on a number of variables 5204d9af45c4SRobert Watson# set therein. 5205d9af45c4SRobert Watson# 5206d9af45c4SRobert Watson# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5207d9af45c4SRobert Watson# variable will take. If 'yes', then the emitted script 5208d9af45c4SRobert Watson# will assume that the directory where it is stored is 5209d9af45c4SRobert Watson# the $objdir directory. This is a cygwin/mingw-specific 5210d9af45c4SRobert Watson# behavior. 5211d9af45c4SRobert Watsonfunc_emit_wrapper () 5212d9af45c4SRobert Watson{ 5213d9af45c4SRobert Watson func_emit_wrapper_arg1=${1-no} 5214d9af45c4SRobert Watson 5215d9af45c4SRobert Watson $ECHO "\ 5216d9af45c4SRobert Watson#! $SHELL 5217d9af45c4SRobert Watson 5218d9af45c4SRobert Watson# $output - temporary wrapper script for $objdir/$outputname 5219d9af45c4SRobert Watson# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5220d9af45c4SRobert Watson# 5221d9af45c4SRobert Watson# The $output program cannot be directly executed until all the libtool 5222d9af45c4SRobert Watson# libraries that it depends on are installed. 5223d9af45c4SRobert Watson# 5224d9af45c4SRobert Watson# This wrapper script should never be moved out of the build directory. 5225d9af45c4SRobert Watson# If it is, it will not operate correctly. 5226d9af45c4SRobert Watson 5227d9af45c4SRobert Watson# Sed substitution that helps us do robust quoting. It backslashifies 5228d9af45c4SRobert Watson# metacharacters that are still active within double-quoted strings. 5229d9af45c4SRobert Watsonsed_quote_subst='$sed_quote_subst' 5230d9af45c4SRobert Watson 5231d9af45c4SRobert Watson# Be Bourne compatible 5232d9af45c4SRobert Watsonif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5233d9af45c4SRobert Watson emulate sh 5234d9af45c4SRobert Watson NULLCMD=: 5235d9af45c4SRobert Watson # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5236d9af45c4SRobert Watson # is contrary to our usage. Disable this feature. 5237d9af45c4SRobert Watson alias -g '\${1+\"\$@\"}'='\"\$@\"' 5238d9af45c4SRobert Watson setopt NO_GLOB_SUBST 5239d9af45c4SRobert Watsonelse 5240d9af45c4SRobert Watson case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5241d9af45c4SRobert Watsonfi 5242d9af45c4SRobert WatsonBIN_SH=xpg4; export BIN_SH # for Tru64 5243d9af45c4SRobert WatsonDUALCASE=1; export DUALCASE # for MKS sh 5244d9af45c4SRobert Watson 5245d9af45c4SRobert Watson# The HP-UX ksh and POSIX shell print the target directory to stdout 5246d9af45c4SRobert Watson# if CDPATH is set. 5247d9af45c4SRobert Watson(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5248d9af45c4SRobert Watson 5249d9af45c4SRobert Watsonrelink_command=\"$relink_command\" 5250d9af45c4SRobert Watson 5251d9af45c4SRobert Watson# This environment variable determines our operation mode. 5252d9af45c4SRobert Watsonif test \"\$libtool_install_magic\" = \"$magic\"; then 5253d9af45c4SRobert Watson # install mode needs the following variables: 5254d9af45c4SRobert Watson generated_by_libtool_version='$macro_version' 52553b97a967SRobert Watson notinst_deplibs='$notinst_deplibs' 52563b97a967SRobert Watsonelse 5257d9af45c4SRobert Watson # When we are sourced in execute mode, \$file and \$ECHO are already set. 5258d9af45c4SRobert Watson if test \"\$libtool_execute_magic\" != \"$magic\"; then 5259d9af45c4SRobert Watson file=\"\$0\"" 5260d9af45c4SRobert Watson 5261d9af45c4SRobert Watson qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 5262d9af45c4SRobert Watson $ECHO "\ 5263d9af45c4SRobert Watson 5264d9af45c4SRobert Watson# A function that is used when there is no print builtin or printf. 5265d9af45c4SRobert Watsonfunc_fallback_echo () 5266d9af45c4SRobert Watson{ 5267d9af45c4SRobert Watson eval 'cat <<_LTECHO_EOF 5268d9af45c4SRobert Watson\$1 5269d9af45c4SRobert Watson_LTECHO_EOF' 5270d9af45c4SRobert Watson} 5271d9af45c4SRobert Watson ECHO=\"$qECHO\" 5272d9af45c4SRobert Watson fi 5273d9af45c4SRobert Watson 5274d9af45c4SRobert Watson# Very basic option parsing. These options are (a) specific to 5275d9af45c4SRobert Watson# the libtool wrapper, (b) are identical between the wrapper 5276d9af45c4SRobert Watson# /script/ and the wrapper /executable/ that is used only on 5277d9af45c4SRobert Watson# windows platforms, and (c) all begin with the string "--lt-" 5278d9af45c4SRobert Watson# (application programs are unlikely to have options that match 5279d9af45c4SRobert Watson# this pattern). 5280d9af45c4SRobert Watson# 5281d9af45c4SRobert Watson# There are only two supported options: --lt-debug and 5282d9af45c4SRobert Watson# --lt-dump-script. There is, deliberately, no --lt-help. 5283d9af45c4SRobert Watson# 5284d9af45c4SRobert Watson# The first argument to this parsing function should be the 5285d9af45c4SRobert Watson# script's $0 value, followed by "$@". 5286d9af45c4SRobert Watsonlt_option_debug= 5287d9af45c4SRobert Watsonfunc_parse_lt_options () 5288d9af45c4SRobert Watson{ 5289d9af45c4SRobert Watson lt_script_arg0=\$0 52903b97a967SRobert Watson shift 52913b97a967SRobert Watson for lt_opt 52923b97a967SRobert Watson do 52933b97a967SRobert Watson case \"\$lt_opt\" in 52943b97a967SRobert Watson --lt-debug) lt_option_debug=1 ;; 52953b97a967SRobert Watson --lt-dump-script) 52963b97a967SRobert Watson lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 52973b97a967SRobert Watson test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 52983b97a967SRobert Watson lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 52993b97a967SRobert Watson cat \"\$lt_dump_D/\$lt_dump_F\" 53003b97a967SRobert Watson exit 0 53013b97a967SRobert Watson ;; 53023b97a967SRobert Watson --lt-*) 53033b97a967SRobert Watson \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 53043b97a967SRobert Watson exit 1 53053b97a967SRobert Watson ;; 53063b97a967SRobert Watson esac 53073b97a967SRobert Watson done 53083b97a967SRobert Watson 53093b97a967SRobert Watson # Print the debug banner immediately: 53103b97a967SRobert Watson if test -n \"\$lt_option_debug\"; then 53113b97a967SRobert Watson echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 53123b97a967SRobert Watson fi 53133b97a967SRobert Watson} 53143b97a967SRobert Watson 53153b97a967SRobert Watson# Used when --lt-debug. Prints its arguments to stdout 53163b97a967SRobert Watson# (redirection is the responsibility of the caller) 53173b97a967SRobert Watsonfunc_lt_dump_args () 53183b97a967SRobert Watson{ 53193b97a967SRobert Watson lt_dump_args_N=1; 53203b97a967SRobert Watson for lt_arg 53213b97a967SRobert Watson do 53223b97a967SRobert Watson \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 53233b97a967SRobert Watson lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 53243b97a967SRobert Watson done 53253b97a967SRobert Watson} 53263b97a967SRobert Watson 53273b97a967SRobert Watson# Core function for launching the target application 53283b97a967SRobert Watsonfunc_exec_program_core () 53293b97a967SRobert Watson{ 53303b97a967SRobert Watson" 53313b97a967SRobert Watson case $host in 53323b97a967SRobert Watson # Backslashes separate directories on plain windows 53333b97a967SRobert Watson *-*-mingw | *-*-os2* | *-cegcc*) 53343b97a967SRobert Watson $ECHO "\ 53353b97a967SRobert Watson if test -n \"\$lt_option_debug\"; then 53363b97a967SRobert Watson \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 53373b97a967SRobert Watson func_lt_dump_args \${1+\"\$@\"} 1>&2 5338d9af45c4SRobert Watson fi 53393b97a967SRobert Watson exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 53403b97a967SRobert Watson" 53413b97a967SRobert Watson ;; 53423b97a967SRobert Watson 53433b97a967SRobert Watson *) 53443b97a967SRobert Watson $ECHO "\ 53453b97a967SRobert Watson if test -n \"\$lt_option_debug\"; then 53463b97a967SRobert Watson \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 53473b97a967SRobert Watson func_lt_dump_args \${1+\"\$@\"} 1>&2 53483b97a967SRobert Watson fi 53493b97a967SRobert Watson exec \"\$progdir/\$program\" \${1+\"\$@\"} 53503b97a967SRobert Watson" 53513b97a967SRobert Watson ;; 53523b97a967SRobert Watson esac 53533b97a967SRobert Watson $ECHO "\ 53543b97a967SRobert Watson \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 53553b97a967SRobert Watson exit 1 53563b97a967SRobert Watson} 53573b97a967SRobert Watson 53583b97a967SRobert Watson# A function to encapsulate launching the target application 53593b97a967SRobert Watson# Strips options in the --lt-* namespace from \$@ and 53603b97a967SRobert Watson# launches target application with the remaining arguments. 5361eb336521SRobert Watsonfunc_exec_program () 5362eb336521SRobert Watson{ 5363eb336521SRobert Watson case \" \$* \" in 5364eb336521SRobert Watson *\\ --lt-*) 5365eb336521SRobert Watson for lt_wr_arg 5366eb336521SRobert Watson do 5367eb336521SRobert Watson case \$lt_wr_arg in 5368eb336521SRobert Watson --lt-*) ;; 5369eb336521SRobert Watson *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5370eb336521SRobert Watson esac 5371eb336521SRobert Watson shift 5372eb336521SRobert Watson done ;; 5373eb336521SRobert Watson esac 5374eb336521SRobert Watson func_exec_program_core \${1+\"\$@\"} 53753b97a967SRobert Watson} 53763b97a967SRobert Watson 53773b97a967SRobert Watson # Parse options 53783b97a967SRobert Watson func_parse_lt_options \"\$0\" \${1+\"\$@\"} 53793b97a967SRobert Watson 53803b97a967SRobert Watson # Find the directory that this script lives in. 53813b97a967SRobert Watson thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 53823b97a967SRobert Watson test \"x\$thisdir\" = \"x\$file\" && thisdir=. 53833b97a967SRobert Watson 53843b97a967SRobert Watson # Follow symbolic links until we get to the real thisdir. 53853b97a967SRobert Watson file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 53863b97a967SRobert Watson while test -n \"\$file\"; do 53873b97a967SRobert Watson destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 53883b97a967SRobert Watson 53893b97a967SRobert Watson # If there was a directory component, then change thisdir. 53903b97a967SRobert Watson if test \"x\$destdir\" != \"x\$file\"; then 53913b97a967SRobert Watson case \"\$destdir\" in 53923b97a967SRobert Watson [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 53933b97a967SRobert Watson *) thisdir=\"\$thisdir/\$destdir\" ;; 53943b97a967SRobert Watson esac 53953b97a967SRobert Watson fi 53963b97a967SRobert Watson 53973b97a967SRobert Watson file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 53983b97a967SRobert Watson file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 53993b97a967SRobert Watson done 54003b97a967SRobert Watson 54013b97a967SRobert Watson # Usually 'no', except on cygwin/mingw when embedded into 54023b97a967SRobert Watson # the cwrapper. 54033b97a967SRobert Watson WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 54043b97a967SRobert Watson if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 54053b97a967SRobert Watson # special case for '.' 54063b97a967SRobert Watson if test \"\$thisdir\" = \".\"; then 54073b97a967SRobert Watson thisdir=\`pwd\` 54083b97a967SRobert Watson fi 54093b97a967SRobert Watson # remove .libs from thisdir 54103b97a967SRobert Watson case \"\$thisdir\" in 54113b97a967SRobert Watson *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 54123b97a967SRobert Watson $objdir ) thisdir=. ;; 54133b97a967SRobert Watson esac 54143b97a967SRobert Watson fi 54153b97a967SRobert Watson 54163b97a967SRobert Watson # Try to get the absolute directory name. 54173b97a967SRobert Watson absdir=\`cd \"\$thisdir\" && pwd\` 54183b97a967SRobert Watson test -n \"\$absdir\" && thisdir=\"\$absdir\" 54193b97a967SRobert Watson" 54203b97a967SRobert Watson 54213b97a967SRobert Watson if test yes = "$fast_install"; then 54223b97a967SRobert Watson $ECHO "\ 54233b97a967SRobert Watson program=lt-'$outputname'$exeext 54243b97a967SRobert Watson progdir=\"\$thisdir/$objdir\" 54253b97a967SRobert Watson 54263b97a967SRobert Watson if test ! -f \"\$progdir/\$program\" || 54273b97a967SRobert Watson { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 54283b97a967SRobert Watson test \"X\$file\" != \"X\$progdir/\$program\"; }; then 54293b97a967SRobert Watson 54303b97a967SRobert Watson file=\"\$\$-\$program\" 54313b97a967SRobert Watson 54323b97a967SRobert Watson if test ! -d \"\$progdir\"; then 54333b97a967SRobert Watson $MKDIR \"\$progdir\" 54343b97a967SRobert Watson else 54353b97a967SRobert Watson $RM \"\$progdir/\$file\" 54363b97a967SRobert Watson fi" 54373b97a967SRobert Watson 54383b97a967SRobert Watson $ECHO "\ 54393b97a967SRobert Watson 54403b97a967SRobert Watson # relink executable if necessary 54413b97a967SRobert Watson if test -n \"\$relink_command\"; then 54423b97a967SRobert Watson if relink_command_output=\`eval \$relink_command 2>&1\`; then : 54433b97a967SRobert Watson else 54443b97a967SRobert Watson \$ECHO \"\$relink_command_output\" >&2 54453b97a967SRobert Watson $RM \"\$progdir/\$file\" 54463b97a967SRobert Watson exit 1 54473b97a967SRobert Watson fi 54483b97a967SRobert Watson fi 54493b97a967SRobert Watson 54503b97a967SRobert Watson $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 54513b97a967SRobert Watson { $RM \"\$progdir/\$program\"; 54523b97a967SRobert Watson $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 54533b97a967SRobert Watson $RM \"\$progdir/\$file\" 54543b97a967SRobert Watson fi" 54553b97a967SRobert Watson else 54563b97a967SRobert Watson $ECHO "\ 54573b97a967SRobert Watson program='$outputname' 54583b97a967SRobert Watson progdir=\"\$thisdir/$objdir\" 54593b97a967SRobert Watson" 54603b97a967SRobert Watson fi 54613b97a967SRobert Watson 54623b97a967SRobert Watson $ECHO "\ 54633b97a967SRobert Watson 54643b97a967SRobert Watson if test -f \"\$progdir/\$program\"; then" 54653b97a967SRobert Watson 54663b97a967SRobert Watson # fixup the dll searchpath if we need to. 54673b97a967SRobert Watson # 54683b97a967SRobert Watson # Fix the DLL searchpath if we need to. Do this before prepending 54693b97a967SRobert Watson # to shlibpath, because on Windows, both are PATH and uninstalled 54703b97a967SRobert Watson # libraries must come first. 54713b97a967SRobert Watson if test -n "$dllsearchpath"; then 54723b97a967SRobert Watson $ECHO "\ 54733b97a967SRobert Watson # Add the dll search path components to the executable PATH 54743b97a967SRobert Watson PATH=$dllsearchpath:\$PATH 54753b97a967SRobert Watson" 54763b97a967SRobert Watson fi 54773b97a967SRobert Watson 54783b97a967SRobert Watson # Export our shlibpath_var if we have one. 54793b97a967SRobert Watson if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 54803b97a967SRobert Watson $ECHO "\ 54813b97a967SRobert Watson # Add our own library path to $shlibpath_var 54823b97a967SRobert Watson $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 54833b97a967SRobert Watson 54843b97a967SRobert Watson # Some systems cannot cope with colon-terminated $shlibpath_var 54853b97a967SRobert Watson # The second colon is a workaround for a bug in BeOS R4 sed 54863b97a967SRobert Watson $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 54873b97a967SRobert Watson 54883b97a967SRobert Watson export $shlibpath_var 54893b97a967SRobert Watson" 54903b97a967SRobert Watson fi 54913b97a967SRobert Watson 54923b97a967SRobert Watson $ECHO "\ 54933b97a967SRobert Watson if test \"\$libtool_execute_magic\" != \"$magic\"; then 54943b97a967SRobert Watson # Run the actual program with our arguments. 54953b97a967SRobert Watson func_exec_program \${1+\"\$@\"} 54963b97a967SRobert Watson fi 54973b97a967SRobert Watson else 54983b97a967SRobert Watson # The program doesn't exist. 54993b97a967SRobert Watson \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 55003b97a967SRobert Watson \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 55013b97a967SRobert Watson \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 55023b97a967SRobert Watson exit 1 55033b97a967SRobert Watson fi 55043b97a967SRobert Watsonfi\ 55053b97a967SRobert Watson" 55063b97a967SRobert Watson} 55073b97a967SRobert Watson 55083b97a967SRobert Watson 55093b97a967SRobert Watson# func_emit_cwrapperexe_src 55103b97a967SRobert Watson# emit the source code for a wrapper executable on stdout 55113b97a967SRobert Watson# Must ONLY be called from within func_mode_link because 55123b97a967SRobert Watson# it depends on a number of variable set therein. 55133b97a967SRobert Watsonfunc_emit_cwrapperexe_src () 55143b97a967SRobert Watson{ 55153b97a967SRobert Watson cat <<EOF 55163b97a967SRobert Watson 5517eb336521SRobert Watson/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 55183b97a967SRobert Watson Generated by $PROGRAM (GNU $PACKAGE) $VERSION 55193b97a967SRobert Watson 55203b97a967SRobert Watson The $output program cannot be directly executed until all the libtool 55213b97a967SRobert Watson libraries that it depends on are installed. 55223b97a967SRobert Watson 55233b97a967SRobert Watson This wrapper executable should never be moved out of the build directory. 55243b97a967SRobert Watson If it is, it will not operate correctly. 55253b97a967SRobert Watson*/ 55263b97a967SRobert WatsonEOF 55273b97a967SRobert Watson cat <<"EOF" 55283b97a967SRobert Watson#ifdef _MSC_VER 55293b97a967SRobert Watson# define _CRT_SECURE_NO_DEPRECATE 1 55303b97a967SRobert Watson#endif 55313b97a967SRobert Watson#include <stdio.h> 55323b97a967SRobert Watson#include <stdlib.h> 55333b97a967SRobert Watson#ifdef _MSC_VER 55343b97a967SRobert Watson# include <direct.h> 55353b97a967SRobert Watson# include <process.h> 55363b97a967SRobert Watson# include <io.h> 55373b97a967SRobert Watson#else 55383b97a967SRobert Watson# include <unistd.h> 55393b97a967SRobert Watson# include <stdint.h> 55403b97a967SRobert Watson# ifdef __CYGWIN__ 55413b97a967SRobert Watson# include <io.h> 55423b97a967SRobert Watson# endif 55433b97a967SRobert Watson#endif 55443b97a967SRobert Watson#include <malloc.h> 55453b97a967SRobert Watson#include <stdarg.h> 55463b97a967SRobert Watson#include <assert.h> 55473b97a967SRobert Watson#include <string.h> 55483b97a967SRobert Watson#include <ctype.h> 55493b97a967SRobert Watson#include <errno.h> 55503b97a967SRobert Watson#include <fcntl.h> 55513b97a967SRobert Watson#include <sys/stat.h> 55523b97a967SRobert Watson 55533b97a967SRobert Watson#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 55543b97a967SRobert Watson 55553b97a967SRobert Watson/* declarations of non-ANSI functions */ 55563b97a967SRobert Watson#if defined __MINGW32__ 55573b97a967SRobert Watson# ifdef __STRICT_ANSI__ 55583b97a967SRobert Watsonint _putenv (const char *); 55593b97a967SRobert Watson# endif 55603b97a967SRobert Watson#elif defined __CYGWIN__ 55613b97a967SRobert Watson# ifdef __STRICT_ANSI__ 55623b97a967SRobert Watsonchar *realpath (const char *, char *); 55633b97a967SRobert Watsonint putenv (char *); 55643b97a967SRobert Watsonint setenv (const char *, const char *, int); 55653b97a967SRobert Watson# endif 55663b97a967SRobert Watson/* #elif defined other_platform || defined ... */ 55673b97a967SRobert Watson#endif 55683b97a967SRobert Watson 55693b97a967SRobert Watson/* portability defines, excluding path handling macros */ 55703b97a967SRobert Watson#if defined _MSC_VER 55713b97a967SRobert Watson# define setmode _setmode 55723b97a967SRobert Watson# define stat _stat 55733b97a967SRobert Watson# define chmod _chmod 55743b97a967SRobert Watson# define getcwd _getcwd 55753b97a967SRobert Watson# define putenv _putenv 55763b97a967SRobert Watson# define S_IXUSR _S_IEXEC 55773b97a967SRobert Watson#elif defined __MINGW32__ 55783b97a967SRobert Watson# define setmode _setmode 55793b97a967SRobert Watson# define stat _stat 55803b97a967SRobert Watson# define chmod _chmod 55813b97a967SRobert Watson# define getcwd _getcwd 55823b97a967SRobert Watson# define putenv _putenv 55833b97a967SRobert Watson#elif defined __CYGWIN__ 55843b97a967SRobert Watson# define HAVE_SETENV 55853b97a967SRobert Watson# define FOPEN_WB "wb" 5586d9af45c4SRobert Watson/* #elif defined other platforms ... */ 5587d9af45c4SRobert Watson#endif 5588d9af45c4SRobert Watson 55893b97a967SRobert Watson#if defined PATH_MAX 55903b97a967SRobert Watson# define LT_PATHMAX PATH_MAX 55913b97a967SRobert Watson#elif defined MAXPATHLEN 55923b97a967SRobert Watson# define LT_PATHMAX MAXPATHLEN 55933b97a967SRobert Watson#else 55943b97a967SRobert Watson# define LT_PATHMAX 1024 55953b97a967SRobert Watson#endif 55963b97a967SRobert Watson 55973b97a967SRobert Watson#ifndef S_IXOTH 55983b97a967SRobert Watson# define S_IXOTH 0 55993b97a967SRobert Watson#endif 56003b97a967SRobert Watson#ifndef S_IXGRP 56013b97a967SRobert Watson# define S_IXGRP 0 56023b97a967SRobert Watson#endif 56033b97a967SRobert Watson 56043b97a967SRobert Watson/* path handling portability macros */ 56053b97a967SRobert Watson#ifndef DIR_SEPARATOR 56063b97a967SRobert Watson# define DIR_SEPARATOR '/' 56073b97a967SRobert Watson# define PATH_SEPARATOR ':' 56083b97a967SRobert Watson#endif 56093b97a967SRobert Watson 56103b97a967SRobert Watson#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 56113b97a967SRobert Watson defined __OS2__ 56123b97a967SRobert Watson# define HAVE_DOS_BASED_FILE_SYSTEM 56133b97a967SRobert Watson# define FOPEN_WB "wb" 56143b97a967SRobert Watson# ifndef DIR_SEPARATOR_2 56153b97a967SRobert Watson# define DIR_SEPARATOR_2 '\\' 56163b97a967SRobert Watson# endif 56173b97a967SRobert Watson# ifndef PATH_SEPARATOR_2 56183b97a967SRobert Watson# define PATH_SEPARATOR_2 ';' 56193b97a967SRobert Watson# endif 56203b97a967SRobert Watson#endif 56213b97a967SRobert Watson 56223b97a967SRobert Watson#ifndef DIR_SEPARATOR_2 56233b97a967SRobert Watson# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 56243b97a967SRobert Watson#else /* DIR_SEPARATOR_2 */ 56253b97a967SRobert Watson# define IS_DIR_SEPARATOR(ch) \ 56263b97a967SRobert Watson (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 56273b97a967SRobert Watson#endif /* DIR_SEPARATOR_2 */ 56283b97a967SRobert Watson 56293b97a967SRobert Watson#ifndef PATH_SEPARATOR_2 56303b97a967SRobert Watson# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 56313b97a967SRobert Watson#else /* PATH_SEPARATOR_2 */ 56323b97a967SRobert Watson# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 56333b97a967SRobert Watson#endif /* PATH_SEPARATOR_2 */ 56343b97a967SRobert Watson 56353b97a967SRobert Watson#ifndef FOPEN_WB 56363b97a967SRobert Watson# define FOPEN_WB "w" 56373b97a967SRobert Watson#endif 56383b97a967SRobert Watson#ifndef _O_BINARY 56393b97a967SRobert Watson# define _O_BINARY 0 56403b97a967SRobert Watson#endif 56413b97a967SRobert Watson 56423b97a967SRobert Watson#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 56433b97a967SRobert Watson#define XFREE(stale) do { \ 56443b97a967SRobert Watson if (stale) { free (stale); stale = 0; } \ 56453b97a967SRobert Watson} while (0) 56463b97a967SRobert Watson 56473b97a967SRobert Watson#if defined LT_DEBUGWRAPPER 56483b97a967SRobert Watsonstatic int lt_debug = 1; 56493b97a967SRobert Watson#else 56503b97a967SRobert Watsonstatic int lt_debug = 0; 56513b97a967SRobert Watson#endif 56523b97a967SRobert Watson 56533b97a967SRobert Watsonconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 56543b97a967SRobert Watson 56553b97a967SRobert Watsonvoid *xmalloc (size_t num); 56563b97a967SRobert Watsonchar *xstrdup (const char *string); 56573b97a967SRobert Watsonconst char *base_name (const char *name); 56583b97a967SRobert Watsonchar *find_executable (const char *wrapper); 56593b97a967SRobert Watsonchar *chase_symlinks (const char *pathspec); 56603b97a967SRobert Watsonint make_executable (const char *path); 56613b97a967SRobert Watsonint check_executable (const char *path); 56623b97a967SRobert Watsonchar *strendzap (char *str, const char *pat); 56633b97a967SRobert Watsonvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 56643b97a967SRobert Watsonvoid lt_fatal (const char *file, int line, const char *message, ...); 56653b97a967SRobert Watsonstatic const char *nonnull (const char *s); 56663b97a967SRobert Watsonstatic const char *nonempty (const char *s); 56673b97a967SRobert Watsonvoid lt_setenv (const char *name, const char *value); 56683b97a967SRobert Watsonchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 56693b97a967SRobert Watsonvoid lt_update_exe_path (const char *name, const char *value); 56703b97a967SRobert Watsonvoid lt_update_lib_path (const char *name, const char *value); 56713b97a967SRobert Watsonchar **prepare_spawn (char **argv); 56723b97a967SRobert Watsonvoid lt_dump_script (FILE *f); 56733b97a967SRobert WatsonEOF 56743b97a967SRobert Watson 56753b97a967SRobert Watson cat <<EOF 56763b97a967SRobert Watson#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 56773b97a967SRobert Watson# define externally_visible volatile 56783b97a967SRobert Watson#else 56793b97a967SRobert Watson# define externally_visible __attribute__((externally_visible)) volatile 56803b97a967SRobert Watson#endif 56813b97a967SRobert Watsonexternally_visible const char * MAGIC_EXE = "$magic_exe"; 56823b97a967SRobert Watsonconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 56833b97a967SRobert WatsonEOF 56843b97a967SRobert Watson 56853b97a967SRobert Watson if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 56863b97a967SRobert Watson func_to_host_path "$temp_rpath" 56873b97a967SRobert Watson cat <<EOF 56883b97a967SRobert Watsonconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 56893b97a967SRobert WatsonEOF 56903b97a967SRobert Watson else 56913b97a967SRobert Watson cat <<"EOF" 56923b97a967SRobert Watsonconst char * LIB_PATH_VALUE = ""; 56933b97a967SRobert WatsonEOF 56943b97a967SRobert Watson fi 56953b97a967SRobert Watson 56963b97a967SRobert Watson if test -n "$dllsearchpath"; then 56973b97a967SRobert Watson func_to_host_path "$dllsearchpath:" 56983b97a967SRobert Watson cat <<EOF 56993b97a967SRobert Watsonconst char * EXE_PATH_VARNAME = "PATH"; 57003b97a967SRobert Watsonconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 57013b97a967SRobert WatsonEOF 57023b97a967SRobert Watson else 5703eb336521SRobert Watson cat <<"EOF" 57043b97a967SRobert Watsonconst char * EXE_PATH_VARNAME = ""; 57053b97a967SRobert Watsonconst char * EXE_PATH_VALUE = ""; 57063b97a967SRobert WatsonEOF 57073b97a967SRobert Watson fi 57083b97a967SRobert Watson 57093b97a967SRobert Watson if test yes = "$fast_install"; then 57103b97a967SRobert Watson cat <<EOF 57113b97a967SRobert Watsonconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 57123b97a967SRobert WatsonEOF 57133b97a967SRobert Watson else 57143b97a967SRobert Watson cat <<EOF 57153b97a967SRobert Watsonconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 57163b97a967SRobert WatsonEOF 57173b97a967SRobert Watson fi 57183b97a967SRobert Watson 57193b97a967SRobert Watson 57203b97a967SRobert Watson cat <<"EOF" 57213b97a967SRobert Watson 57223b97a967SRobert Watson#define LTWRAPPER_OPTION_PREFIX "--lt-" 57233b97a967SRobert Watson 57243b97a967SRobert Watsonstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 57253b97a967SRobert Watsonstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 57263b97a967SRobert Watsonstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 57273b97a967SRobert Watson 57283b97a967SRobert Watsonint 57293b97a967SRobert Watsonmain (int argc, char *argv[]) 57303b97a967SRobert Watson{ 57313b97a967SRobert Watson char **newargz; 57323b97a967SRobert Watson int newargc; 57333b97a967SRobert Watson char *tmp_pathspec; 57343b97a967SRobert Watson char *actual_cwrapper_path; 57353b97a967SRobert Watson char *actual_cwrapper_name; 57363b97a967SRobert Watson char *target_name; 57373b97a967SRobert Watson char *lt_argv_zero; 57383b97a967SRobert Watson int rval = 127; 57393b97a967SRobert Watson 57403b97a967SRobert Watson int i; 57413b97a967SRobert Watson 57423b97a967SRobert Watson program_name = (char *) xstrdup (base_name (argv[0])); 57433b97a967SRobert Watson newargz = XMALLOC (char *, (size_t) argc + 1); 57443b97a967SRobert Watson 57453b97a967SRobert Watson /* very simple arg parsing; don't want to rely on getopt 57463b97a967SRobert Watson * also, copy all non cwrapper options to newargz, except 57473b97a967SRobert Watson * argz[0], which is handled differently 57483b97a967SRobert Watson */ 57493b97a967SRobert Watson newargc=0; 57503b97a967SRobert Watson for (i = 1; i < argc; i++) 57513b97a967SRobert Watson { 57523b97a967SRobert Watson if (STREQ (argv[i], dumpscript_opt)) 57533b97a967SRobert Watson { 57543b97a967SRobert WatsonEOF 57553b97a967SRobert Watson case $host in 57563b97a967SRobert Watson *mingw* | *cygwin* ) 57573b97a967SRobert Watson # make stdout use "unix" line endings 57583b97a967SRobert Watson echo " setmode(1,_O_BINARY);" 57593b97a967SRobert Watson ;; 57603b97a967SRobert Watson esac 57613b97a967SRobert Watson 57623b97a967SRobert Watson cat <<"EOF" 57633b97a967SRobert Watson lt_dump_script (stdout); 57643b97a967SRobert Watson return 0; 57653b97a967SRobert Watson } 57663b97a967SRobert Watson if (STREQ (argv[i], debug_opt)) 57673b97a967SRobert Watson { 57683b97a967SRobert Watson lt_debug = 1; 57693b97a967SRobert Watson continue; 57703b97a967SRobert Watson } 57713b97a967SRobert Watson if (STREQ (argv[i], ltwrapper_option_prefix)) 57723b97a967SRobert Watson { 57733b97a967SRobert Watson /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 57743b97a967SRobert Watson namespace, but it is not one of the ones we know about and 57753b97a967SRobert Watson have already dealt with, above (inluding dump-script), then 57763b97a967SRobert Watson report an error. Otherwise, targets might begin to believe 57773b97a967SRobert Watson they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 57783b97a967SRobert Watson namespace. The first time any user complains about this, we'll 57793b97a967SRobert Watson need to make LTWRAPPER_OPTION_PREFIX a configure-time option 57803b97a967SRobert Watson or a configure.ac-settable value. 57813b97a967SRobert Watson */ 57823b97a967SRobert Watson lt_fatal (__FILE__, __LINE__, 57833b97a967SRobert Watson "unrecognized %s option: '%s'", 57843b97a967SRobert Watson ltwrapper_option_prefix, argv[i]); 57853b97a967SRobert Watson } 57863b97a967SRobert Watson /* otherwise ... */ 57873b97a967SRobert Watson newargz[++newargc] = xstrdup (argv[i]); 57883b97a967SRobert Watson } 57893b97a967SRobert Watson newargz[++newargc] = NULL; 57903b97a967SRobert Watson 57913b97a967SRobert WatsonEOF 57923b97a967SRobert Watson cat <<EOF 57933b97a967SRobert Watson /* The GNU banner must be the first non-error debug message */ 57943b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 57953b97a967SRobert WatsonEOF 57963b97a967SRobert Watson cat <<"EOF" 57973b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 57983b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 57993b97a967SRobert Watson 58003b97a967SRobert Watson tmp_pathspec = find_executable (argv[0]); 58013b97a967SRobert Watson if (tmp_pathspec == NULL) 58023b97a967SRobert Watson lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 58033b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 58043b97a967SRobert Watson "(main) found exe (before symlink chase) at: %s\n", 58053b97a967SRobert Watson tmp_pathspec); 58063b97a967SRobert Watson 58073b97a967SRobert Watson actual_cwrapper_path = chase_symlinks (tmp_pathspec); 58083b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 58093b97a967SRobert Watson "(main) found exe (after symlink chase) at: %s\n", 58103b97a967SRobert Watson actual_cwrapper_path); 58113b97a967SRobert Watson XFREE (tmp_pathspec); 58123b97a967SRobert Watson 58133b97a967SRobert Watson actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 58143b97a967SRobert Watson strendzap (actual_cwrapper_path, actual_cwrapper_name); 58153b97a967SRobert Watson 58163b97a967SRobert Watson /* wrapper name transforms */ 58173b97a967SRobert Watson strendzap (actual_cwrapper_name, ".exe"); 58183b97a967SRobert Watson tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 58193b97a967SRobert Watson XFREE (actual_cwrapper_name); 58203b97a967SRobert Watson actual_cwrapper_name = tmp_pathspec; 58213b97a967SRobert Watson tmp_pathspec = 0; 58223b97a967SRobert Watson 58233b97a967SRobert Watson /* target_name transforms -- use actual target program name; might have lt- prefix */ 58243b97a967SRobert Watson target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 58253b97a967SRobert Watson strendzap (target_name, ".exe"); 58263b97a967SRobert Watson tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 58273b97a967SRobert Watson XFREE (target_name); 58283b97a967SRobert Watson target_name = tmp_pathspec; 58293b97a967SRobert Watson tmp_pathspec = 0; 58303b97a967SRobert Watson 58313b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 58323b97a967SRobert Watson "(main) libtool target name: %s\n", 58333b97a967SRobert Watson target_name); 58343b97a967SRobert WatsonEOF 58353b97a967SRobert Watson 58363b97a967SRobert Watson cat <<EOF 58373b97a967SRobert Watson newargz[0] = 58383b97a967SRobert Watson XMALLOC (char, (strlen (actual_cwrapper_path) + 58393b97a967SRobert Watson strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 58403b97a967SRobert Watson strcpy (newargz[0], actual_cwrapper_path); 58413b97a967SRobert Watson strcat (newargz[0], "$objdir"); 58423b97a967SRobert Watson strcat (newargz[0], "/"); 58433b97a967SRobert WatsonEOF 58443b97a967SRobert Watson 58453b97a967SRobert Watson cat <<"EOF" 58463b97a967SRobert Watson /* stop here, and copy so we don't have to do this twice */ 58473b97a967SRobert Watson tmp_pathspec = xstrdup (newargz[0]); 58483b97a967SRobert Watson 58493b97a967SRobert Watson /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 58503b97a967SRobert Watson strcat (newargz[0], actual_cwrapper_name); 58513b97a967SRobert Watson 58523b97a967SRobert Watson /* DO want the lt- prefix here if it exists, so use target_name */ 58533b97a967SRobert Watson lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 58543b97a967SRobert Watson XFREE (tmp_pathspec); 58553b97a967SRobert Watson tmp_pathspec = NULL; 58563b97a967SRobert WatsonEOF 58573b97a967SRobert Watson 58583b97a967SRobert Watson case $host_os in 58593b97a967SRobert Watson mingw*) 58603b97a967SRobert Watson cat <<"EOF" 58613b97a967SRobert Watson { 58623b97a967SRobert Watson char* p; 58633b97a967SRobert Watson while ((p = strchr (newargz[0], '\\')) != NULL) 58643b97a967SRobert Watson { 58653b97a967SRobert Watson *p = '/'; 58663b97a967SRobert Watson } 58673b97a967SRobert Watson while ((p = strchr (lt_argv_zero, '\\')) != NULL) 58683b97a967SRobert Watson { 58693b97a967SRobert Watson *p = '/'; 58703b97a967SRobert Watson } 58713b97a967SRobert Watson } 58723b97a967SRobert WatsonEOF 58733b97a967SRobert Watson ;; 58743b97a967SRobert Watson esac 58753b97a967SRobert Watson 58763b97a967SRobert Watson cat <<"EOF" 58773b97a967SRobert Watson XFREE (target_name); 58783b97a967SRobert Watson XFREE (actual_cwrapper_path); 58793b97a967SRobert Watson XFREE (actual_cwrapper_name); 58803b97a967SRobert Watson 58813b97a967SRobert Watson lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 58823b97a967SRobert Watson lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 58833b97a967SRobert Watson /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 58843b97a967SRobert Watson be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 58853b97a967SRobert Watson because on Windows, both *_VARNAMEs are PATH but uninstalled 58863b97a967SRobert Watson libraries must come first. */ 58873b97a967SRobert Watson lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 58883b97a967SRobert Watson lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 58893b97a967SRobert Watson 58903b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 58913b97a967SRobert Watson nonnull (lt_argv_zero)); 58923b97a967SRobert Watson for (i = 0; i < newargc; i++) 58933b97a967SRobert Watson { 58943b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 58953b97a967SRobert Watson i, nonnull (newargz[i])); 58963b97a967SRobert Watson } 58973b97a967SRobert Watson 58983b97a967SRobert WatsonEOF 58993b97a967SRobert Watson 59003b97a967SRobert Watson case $host_os in 59013b97a967SRobert Watson mingw*) 59023b97a967SRobert Watson cat <<"EOF" 59033b97a967SRobert Watson /* execv doesn't actually work on mingw as expected on unix */ 59043b97a967SRobert Watson newargz = prepare_spawn (newargz); 59053b97a967SRobert Watson rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 59063b97a967SRobert Watson if (rval == -1) 59073b97a967SRobert Watson { 59083b97a967SRobert Watson /* failed to start process */ 59093b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 59103b97a967SRobert Watson "(main) failed to launch target \"%s\": %s\n", 59113b97a967SRobert Watson lt_argv_zero, nonnull (strerror (errno))); 59123b97a967SRobert Watson return 127; 59133b97a967SRobert Watson } 59143b97a967SRobert Watson return rval; 59153b97a967SRobert WatsonEOF 59163b97a967SRobert Watson ;; 59173b97a967SRobert Watson *) 59183b97a967SRobert Watson cat <<"EOF" 59193b97a967SRobert Watson execv (lt_argv_zero, newargz); 59203b97a967SRobert Watson return rval; /* =127, but avoids unused variable warning */ 59213b97a967SRobert WatsonEOF 59223b97a967SRobert Watson ;; 59233b97a967SRobert Watson esac 59243b97a967SRobert Watson 59253b97a967SRobert Watson cat <<"EOF" 59263b97a967SRobert Watson} 59273b97a967SRobert Watson 59283b97a967SRobert Watsonvoid * 59293b97a967SRobert Watsonxmalloc (size_t num) 59303b97a967SRobert Watson{ 59313b97a967SRobert Watson void *p = (void *) malloc (num); 59323b97a967SRobert Watson if (!p) 59333b97a967SRobert Watson lt_fatal (__FILE__, __LINE__, "memory exhausted"); 59343b97a967SRobert Watson 59353b97a967SRobert Watson return p; 59363b97a967SRobert Watson} 59373b97a967SRobert Watson 59383b97a967SRobert Watsonchar * 59393b97a967SRobert Watsonxstrdup (const char *string) 59403b97a967SRobert Watson{ 59413b97a967SRobert Watson return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 59423b97a967SRobert Watson string) : NULL; 59433b97a967SRobert Watson} 59443b97a967SRobert Watson 59453b97a967SRobert Watsonconst char * 59463b97a967SRobert Watsonbase_name (const char *name) 59473b97a967SRobert Watson{ 59483b97a967SRobert Watson const char *base; 59493b97a967SRobert Watson 59503b97a967SRobert Watson#if defined HAVE_DOS_BASED_FILE_SYSTEM 59513b97a967SRobert Watson /* Skip over the disk name in MSDOS pathnames. */ 59523b97a967SRobert Watson if (isalpha ((unsigned char) name[0]) && name[1] == ':') 59533b97a967SRobert Watson name += 2; 59543b97a967SRobert Watson#endif 59553b97a967SRobert Watson 59563b97a967SRobert Watson for (base = name; *name; name++) 59573b97a967SRobert Watson if (IS_DIR_SEPARATOR (*name)) 59583b97a967SRobert Watson base = name + 1; 59593b97a967SRobert Watson return base; 59603b97a967SRobert Watson} 59613b97a967SRobert Watson 59623b97a967SRobert Watsonint 59633b97a967SRobert Watsoncheck_executable (const char *path) 59643b97a967SRobert Watson{ 59653b97a967SRobert Watson struct stat st; 59663b97a967SRobert Watson 59673b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 59683b97a967SRobert Watson nonempty (path)); 59693b97a967SRobert Watson if ((!path) || (!*path)) 59703b97a967SRobert Watson return 0; 59713b97a967SRobert Watson 59723b97a967SRobert Watson if ((stat (path, &st) >= 0) 59733b97a967SRobert Watson && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 59743b97a967SRobert Watson return 1; 59753b97a967SRobert Watson else 59763b97a967SRobert Watson return 0; 59773b97a967SRobert Watson} 59783b97a967SRobert Watson 59793b97a967SRobert Watsonint 59803b97a967SRobert Watsonmake_executable (const char *path) 59813b97a967SRobert Watson{ 59823b97a967SRobert Watson int rval = 0; 59833b97a967SRobert Watson struct stat st; 59843b97a967SRobert Watson 59853b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 59863b97a967SRobert Watson nonempty (path)); 59873b97a967SRobert Watson if ((!path) || (!*path)) 59883b97a967SRobert Watson return 0; 59893b97a967SRobert Watson 59903b97a967SRobert Watson if (stat (path, &st) >= 0) 59913b97a967SRobert Watson { 59923b97a967SRobert Watson rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 59933b97a967SRobert Watson } 59943b97a967SRobert Watson return rval; 59953b97a967SRobert Watson} 59963b97a967SRobert Watson 59973b97a967SRobert Watson/* Searches for the full path of the wrapper. Returns 59983b97a967SRobert Watson newly allocated full path name if found, NULL otherwise 59993b97a967SRobert Watson Does not chase symlinks, even on platforms that support them. 60003b97a967SRobert Watson*/ 60013b97a967SRobert Watsonchar * 60023b97a967SRobert Watsonfind_executable (const char *wrapper) 60033b97a967SRobert Watson{ 60043b97a967SRobert Watson int has_slash = 0; 60053b97a967SRobert Watson const char *p; 60063b97a967SRobert Watson const char *p_next; 60073b97a967SRobert Watson /* static buffer for getcwd */ 60083b97a967SRobert Watson char tmp[LT_PATHMAX + 1]; 60093b97a967SRobert Watson size_t tmp_len; 60103b97a967SRobert Watson char *concat_name; 60113b97a967SRobert Watson 60123b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 60133b97a967SRobert Watson nonempty (wrapper)); 60143b97a967SRobert Watson 60153b97a967SRobert Watson if ((wrapper == NULL) || (*wrapper == '\0')) 60163b97a967SRobert Watson return NULL; 60173b97a967SRobert Watson 60183b97a967SRobert Watson /* Absolute path? */ 60193b97a967SRobert Watson#if defined HAVE_DOS_BASED_FILE_SYSTEM 60203b97a967SRobert Watson if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 60213b97a967SRobert Watson { 60223b97a967SRobert Watson concat_name = xstrdup (wrapper); 60233b97a967SRobert Watson if (check_executable (concat_name)) 60243b97a967SRobert Watson return concat_name; 60253b97a967SRobert Watson XFREE (concat_name); 60263b97a967SRobert Watson } 60273b97a967SRobert Watson else 60283b97a967SRobert Watson { 60293b97a967SRobert Watson#endif 60303b97a967SRobert Watson if (IS_DIR_SEPARATOR (wrapper[0])) 60313b97a967SRobert Watson { 60323b97a967SRobert Watson concat_name = xstrdup (wrapper); 60333b97a967SRobert Watson if (check_executable (concat_name)) 60343b97a967SRobert Watson return concat_name; 60353b97a967SRobert Watson XFREE (concat_name); 60363b97a967SRobert Watson } 60373b97a967SRobert Watson#if defined HAVE_DOS_BASED_FILE_SYSTEM 60383b97a967SRobert Watson } 60393b97a967SRobert Watson#endif 60403b97a967SRobert Watson 60413b97a967SRobert Watson for (p = wrapper; *p; p++) 60423b97a967SRobert Watson if (*p == '/') 60433b97a967SRobert Watson { 60443b97a967SRobert Watson has_slash = 1; 60453b97a967SRobert Watson break; 60463b97a967SRobert Watson } 60473b97a967SRobert Watson if (!has_slash) 6048eb336521SRobert Watson { 60493b97a967SRobert Watson /* no slashes; search PATH */ 6050eb336521SRobert Watson const char *path = getenv ("PATH"); 60513b97a967SRobert Watson if (path != NULL) 60523b97a967SRobert Watson { 60533b97a967SRobert Watson for (p = path; *p; p = p_next) 60543b97a967SRobert Watson { 60553b97a967SRobert Watson const char *q; 60563b97a967SRobert Watson size_t p_len; 60573b97a967SRobert Watson for (q = p; *q; q++) 60583b97a967SRobert Watson if (IS_PATH_SEPARATOR (*q)) 60593b97a967SRobert Watson break; 60603b97a967SRobert Watson p_len = (size_t) (q - p); 60613b97a967SRobert Watson p_next = (*q == '\0' ? q : q + 1); 60623b97a967SRobert Watson if (p_len == 0) 60633b97a967SRobert Watson { 60643b97a967SRobert Watson /* empty path: current directory */ 60653b97a967SRobert Watson if (getcwd (tmp, LT_PATHMAX) == NULL) 60663b97a967SRobert Watson lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 60673b97a967SRobert Watson nonnull (strerror (errno))); 60683b97a967SRobert Watson tmp_len = strlen (tmp); 60693b97a967SRobert Watson concat_name = 60703b97a967SRobert Watson XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 60713b97a967SRobert Watson memcpy (concat_name, tmp, tmp_len); 60723b97a967SRobert Watson concat_name[tmp_len] = '/'; 60733b97a967SRobert Watson strcpy (concat_name + tmp_len + 1, wrapper); 60743b97a967SRobert Watson } 60753b97a967SRobert Watson else 60763b97a967SRobert Watson { 60773b97a967SRobert Watson concat_name = 60783b97a967SRobert Watson XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 60793b97a967SRobert Watson memcpy (concat_name, p, p_len); 60803b97a967SRobert Watson concat_name[p_len] = '/'; 60813b97a967SRobert Watson strcpy (concat_name + p_len + 1, wrapper); 60823b97a967SRobert Watson } 60833b97a967SRobert Watson if (check_executable (concat_name)) 60843b97a967SRobert Watson return concat_name; 60853b97a967SRobert Watson XFREE (concat_name); 60863b97a967SRobert Watson } 60873b97a967SRobert Watson } 60883b97a967SRobert Watson /* not found in PATH; assume curdir */ 60893b97a967SRobert Watson } 60903b97a967SRobert Watson /* Relative path | not found in path: prepend cwd */ 60913b97a967SRobert Watson if (getcwd (tmp, LT_PATHMAX) == NULL) 60923b97a967SRobert Watson lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 60933b97a967SRobert Watson nonnull (strerror (errno))); 60943b97a967SRobert Watson tmp_len = strlen (tmp); 60953b97a967SRobert Watson concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 60963b97a967SRobert Watson memcpy (concat_name, tmp, tmp_len); 60973b97a967SRobert Watson concat_name[tmp_len] = '/'; 60983b97a967SRobert Watson strcpy (concat_name + tmp_len + 1, wrapper); 60993b97a967SRobert Watson 61003b97a967SRobert Watson if (check_executable (concat_name)) 61013b97a967SRobert Watson return concat_name; 61023b97a967SRobert Watson XFREE (concat_name); 61033b97a967SRobert Watson return NULL; 61043b97a967SRobert Watson} 61053b97a967SRobert Watson 61063b97a967SRobert Watsonchar * 61073b97a967SRobert Watsonchase_symlinks (const char *pathspec) 61083b97a967SRobert Watson{ 61093b97a967SRobert Watson#ifndef S_ISLNK 61103b97a967SRobert Watson return xstrdup (pathspec); 61113b97a967SRobert Watson#else 61123b97a967SRobert Watson char buf[LT_PATHMAX]; 61133b97a967SRobert Watson struct stat s; 61143b97a967SRobert Watson char *tmp_pathspec = xstrdup (pathspec); 61153b97a967SRobert Watson char *p; 61163b97a967SRobert Watson int has_symlinks = 0; 61173b97a967SRobert Watson while (strlen (tmp_pathspec) && !has_symlinks) 61183b97a967SRobert Watson { 61193b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 61203b97a967SRobert Watson "checking path component for symlinks: %s\n", 61213b97a967SRobert Watson tmp_pathspec); 61223b97a967SRobert Watson if (lstat (tmp_pathspec, &s) == 0) 61233b97a967SRobert Watson { 61243b97a967SRobert Watson if (S_ISLNK (s.st_mode) != 0) 61253b97a967SRobert Watson { 61263b97a967SRobert Watson has_symlinks = 1; 61273b97a967SRobert Watson break; 61283b97a967SRobert Watson } 61293b97a967SRobert Watson 61303b97a967SRobert Watson /* search backwards for last DIR_SEPARATOR */ 61313b97a967SRobert Watson p = tmp_pathspec + strlen (tmp_pathspec) - 1; 61323b97a967SRobert Watson while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 61333b97a967SRobert Watson p--; 61343b97a967SRobert Watson if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 61353b97a967SRobert Watson { 61363b97a967SRobert Watson /* no more DIR_SEPARATORS left */ 61373b97a967SRobert Watson break; 61383b97a967SRobert Watson } 61393b97a967SRobert Watson *p = '\0'; 61403b97a967SRobert Watson } 61413b97a967SRobert Watson else 61423b97a967SRobert Watson { 61433b97a967SRobert Watson lt_fatal (__FILE__, __LINE__, 61443b97a967SRobert Watson "error accessing file \"%s\": %s", 61453b97a967SRobert Watson tmp_pathspec, nonnull (strerror (errno))); 61463b97a967SRobert Watson } 61473b97a967SRobert Watson } 61483b97a967SRobert Watson XFREE (tmp_pathspec); 61493b97a967SRobert Watson 61503b97a967SRobert Watson if (!has_symlinks) 61513b97a967SRobert Watson { 61523b97a967SRobert Watson return xstrdup (pathspec); 61533b97a967SRobert Watson } 61543b97a967SRobert Watson 61553b97a967SRobert Watson tmp_pathspec = realpath (pathspec, buf); 61563b97a967SRobert Watson if (tmp_pathspec == 0) 61573b97a967SRobert Watson { 61583b97a967SRobert Watson lt_fatal (__FILE__, __LINE__, 61593b97a967SRobert Watson "could not follow symlinks for %s", pathspec); 61603b97a967SRobert Watson } 61613b97a967SRobert Watson return xstrdup (tmp_pathspec); 61623b97a967SRobert Watson#endif 61633b97a967SRobert Watson} 61643b97a967SRobert Watson 61653b97a967SRobert Watsonchar * 61663b97a967SRobert Watsonstrendzap (char *str, const char *pat) 61673b97a967SRobert Watson{ 61683b97a967SRobert Watson size_t len, patlen; 61693b97a967SRobert Watson 61703b97a967SRobert Watson assert (str != NULL); 61713b97a967SRobert Watson assert (pat != NULL); 61723b97a967SRobert Watson 61733b97a967SRobert Watson len = strlen (str); 61743b97a967SRobert Watson patlen = strlen (pat); 61753b97a967SRobert Watson 61763b97a967SRobert Watson if (patlen <= len) 61773b97a967SRobert Watson { 61783b97a967SRobert Watson str += len - patlen; 61793b97a967SRobert Watson if (STREQ (str, pat)) 61803b97a967SRobert Watson *str = '\0'; 61813b97a967SRobert Watson } 61823b97a967SRobert Watson return str; 61833b97a967SRobert Watson} 61843b97a967SRobert Watson 61853b97a967SRobert Watsonvoid 61863b97a967SRobert Watsonlt_debugprintf (const char *file, int line, const char *fmt, ...) 61873b97a967SRobert Watson{ 61883b97a967SRobert Watson va_list args; 61893b97a967SRobert Watson if (lt_debug) 61903b97a967SRobert Watson { 61913b97a967SRobert Watson (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 61923b97a967SRobert Watson va_start (args, fmt); 61933b97a967SRobert Watson (void) vfprintf (stderr, fmt, args); 61943b97a967SRobert Watson va_end (args); 61953b97a967SRobert Watson } 61963b97a967SRobert Watson} 61973b97a967SRobert Watson 61983b97a967SRobert Watsonstatic void 61993b97a967SRobert Watsonlt_error_core (int exit_status, const char *file, 62003b97a967SRobert Watson int line, const char *mode, 62013b97a967SRobert Watson const char *message, va_list ap) 62023b97a967SRobert Watson{ 62033b97a967SRobert Watson fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 62043b97a967SRobert Watson vfprintf (stderr, message, ap); 62053b97a967SRobert Watson fprintf (stderr, ".\n"); 62063b97a967SRobert Watson 62073b97a967SRobert Watson if (exit_status >= 0) 62083b97a967SRobert Watson exit (exit_status); 62093b97a967SRobert Watson} 62103b97a967SRobert Watson 62113b97a967SRobert Watsonvoid 62123b97a967SRobert Watsonlt_fatal (const char *file, int line, const char *message, ...) 62133b97a967SRobert Watson{ 62143b97a967SRobert Watson va_list ap; 62153b97a967SRobert Watson va_start (ap, message); 62163b97a967SRobert Watson lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 62173b97a967SRobert Watson va_end (ap); 62183b97a967SRobert Watson} 62193b97a967SRobert Watson 62203b97a967SRobert Watsonstatic const char * 62213b97a967SRobert Watsonnonnull (const char *s) 62223b97a967SRobert Watson{ 62233b97a967SRobert Watson return s ? s : "(null)"; 62243b97a967SRobert Watson} 62253b97a967SRobert Watson 62263b97a967SRobert Watsonstatic const char * 62273b97a967SRobert Watsonnonempty (const char *s) 62283b97a967SRobert Watson{ 62293b97a967SRobert Watson return (s && !*s) ? "(empty)" : nonnull (s); 62303b97a967SRobert Watson} 62313b97a967SRobert Watson 62323b97a967SRobert Watsonvoid 62333b97a967SRobert Watsonlt_setenv (const char *name, const char *value) 62343b97a967SRobert Watson{ 62353b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 62363b97a967SRobert Watson "(lt_setenv) setting '%s' to '%s'\n", 62373b97a967SRobert Watson nonnull (name), nonnull (value)); 62383b97a967SRobert Watson { 62393b97a967SRobert Watson#ifdef HAVE_SETENV 62403b97a967SRobert Watson /* always make a copy, for consistency with !HAVE_SETENV */ 62413b97a967SRobert Watson char *str = xstrdup (value); 62423b97a967SRobert Watson setenv (name, str, 1); 62433b97a967SRobert Watson#else 62443b97a967SRobert Watson size_t len = strlen (name) + 1 + strlen (value) + 1; 62453b97a967SRobert Watson char *str = XMALLOC (char, len); 62463b97a967SRobert Watson sprintf (str, "%s=%s", name, value); 62473b97a967SRobert Watson if (putenv (str) != EXIT_SUCCESS) 62483b97a967SRobert Watson { 62493b97a967SRobert Watson XFREE (str); 62503b97a967SRobert Watson } 62513b97a967SRobert Watson#endif 62523b97a967SRobert Watson } 62533b97a967SRobert Watson} 62543b97a967SRobert Watson 6255d9af45c4SRobert Watsonchar * 62563b97a967SRobert Watsonlt_extend_str (const char *orig_value, const char *add, int to_end) 62573b97a967SRobert Watson{ 62583b97a967SRobert Watson char *new_value; 6259eb336521SRobert Watson if (orig_value && *orig_value) 62603b97a967SRobert Watson { 62613b97a967SRobert Watson size_t orig_value_len = strlen (orig_value); 62623b97a967SRobert Watson size_t add_len = strlen (add); 62633b97a967SRobert Watson new_value = XMALLOC (char, add_len + orig_value_len + 1); 62643b97a967SRobert Watson if (to_end) 62653b97a967SRobert Watson { 62663b97a967SRobert Watson strcpy (new_value, orig_value); 62673b97a967SRobert Watson strcpy (new_value + orig_value_len, add); 62683b97a967SRobert Watson } 62693b97a967SRobert Watson else 62703b97a967SRobert Watson { 62713b97a967SRobert Watson strcpy (new_value, add); 62723b97a967SRobert Watson strcpy (new_value + add_len, orig_value); 62733b97a967SRobert Watson } 62743b97a967SRobert Watson } 62753b97a967SRobert Watson else 62763b97a967SRobert Watson { 62773b97a967SRobert Watson new_value = xstrdup (add); 62783b97a967SRobert Watson } 62793b97a967SRobert Watson return new_value; 62803b97a967SRobert Watson} 62813b97a967SRobert Watson 62823b97a967SRobert Watsonvoid 62833b97a967SRobert Watsonlt_update_exe_path (const char *name, const char *value) 62843b97a967SRobert Watson{ 62853b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 62863b97a967SRobert Watson "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 62873b97a967SRobert Watson nonnull (name), nonnull (value)); 62883b97a967SRobert Watson 62893b97a967SRobert Watson if (name && *name && value && *value) 62903b97a967SRobert Watson { 62913b97a967SRobert Watson char *new_value = lt_extend_str (getenv (name), value, 0); 62923b97a967SRobert Watson /* some systems can't cope with a ':'-terminated path #' */ 62933b97a967SRobert Watson size_t len = strlen (new_value); 62943b97a967SRobert Watson while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 62953b97a967SRobert Watson { 62963b97a967SRobert Watson new_value[--len] = '\0'; 62973b97a967SRobert Watson } 62983b97a967SRobert Watson lt_setenv (name, new_value); 62993b97a967SRobert Watson XFREE (new_value); 63003b97a967SRobert Watson } 63013b97a967SRobert Watson} 63023b97a967SRobert Watson 63033b97a967SRobert Watsonvoid 63043b97a967SRobert Watsonlt_update_lib_path (const char *name, const char *value) 63053b97a967SRobert Watson{ 63063b97a967SRobert Watson lt_debugprintf (__FILE__, __LINE__, 63073b97a967SRobert Watson "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 63083b97a967SRobert Watson nonnull (name), nonnull (value)); 63093b97a967SRobert Watson 63103b97a967SRobert Watson if (name && *name && value && *value) 63113b97a967SRobert Watson { 63123b97a967SRobert Watson char *new_value = lt_extend_str (getenv (name), value, 0); 63133b97a967SRobert Watson lt_setenv (name, new_value); 63143b97a967SRobert Watson XFREE (new_value); 63153b97a967SRobert Watson } 63163b97a967SRobert Watson} 63173b97a967SRobert Watson 63183b97a967SRobert WatsonEOF 63193b97a967SRobert Watson case $host_os in 63203b97a967SRobert Watson mingw*) 63213b97a967SRobert Watson cat <<"EOF" 63223b97a967SRobert Watson 63233b97a967SRobert Watson/* Prepares an argument vector before calling spawn(). 63243b97a967SRobert Watson Note that spawn() does not by itself call the command interpreter 63253b97a967SRobert Watson (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 63263b97a967SRobert Watson ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 63273b97a967SRobert Watson GetVersionEx(&v); 63283b97a967SRobert Watson v.dwPlatformId == VER_PLATFORM_WIN32_NT; 63293b97a967SRobert Watson }) ? "cmd.exe" : "command.com"). 63303b97a967SRobert Watson Instead it simply concatenates the arguments, separated by ' ', and calls 63313b97a967SRobert Watson CreateProcess(). We must quote the arguments since Win32 CreateProcess() 63323b97a967SRobert Watson interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 63333b97a967SRobert Watson special way: 63343b97a967SRobert Watson - Space and tab are interpreted as delimiters. They are not treated as 63353b97a967SRobert Watson delimiters if they are surrounded by double quotes: "...". 63363b97a967SRobert Watson - Unescaped double quotes are removed from the input. Their only effect is 63373b97a967SRobert Watson that within double quotes, space and tab are treated like normal 63383b97a967SRobert Watson characters. 63393b97a967SRobert Watson - Backslashes not followed by double quotes are not special. 63403b97a967SRobert Watson - But 2*n+1 backslashes followed by a double quote become 63413b97a967SRobert Watson n backslashes followed by a double quote (n >= 0): 63423b97a967SRobert Watson \" -> " 63433b97a967SRobert Watson \\\" -> \" 63443b97a967SRobert Watson \\\\\" -> \\" 63453b97a967SRobert Watson */ 63463b97a967SRobert Watson#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" 63473b97a967SRobert Watson#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" 63483b97a967SRobert Watsonchar ** 63493b97a967SRobert Watsonprepare_spawn (char **argv) 63503b97a967SRobert Watson{ 63513b97a967SRobert Watson size_t argc; 63523b97a967SRobert Watson char **new_argv; 63533b97a967SRobert Watson size_t i; 63543b97a967SRobert Watson 63553b97a967SRobert Watson /* Count number of arguments. */ 63563b97a967SRobert Watson for (argc = 0; argv[argc] != NULL; argc++) 63573b97a967SRobert Watson ; 63583b97a967SRobert Watson 63593b97a967SRobert Watson /* Allocate new argument vector. */ 63603b97a967SRobert Watson new_argv = XMALLOC (char *, argc + 1); 63613b97a967SRobert Watson 63623b97a967SRobert Watson /* Put quoted arguments into the new argument vector. */ 63633b97a967SRobert Watson for (i = 0; i < argc; i++) 63643b97a967SRobert Watson { 63653b97a967SRobert Watson const char *string = argv[i]; 63663b97a967SRobert Watson 63673b97a967SRobert Watson if (string[0] == '\0') 63683b97a967SRobert Watson new_argv[i] = xstrdup ("\"\""); 63693b97a967SRobert Watson else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 63703b97a967SRobert Watson { 63713b97a967SRobert Watson int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 63723b97a967SRobert Watson size_t length; 63733b97a967SRobert Watson unsigned int backslashes; 63743b97a967SRobert Watson const char *s; 63753b97a967SRobert Watson char *quoted_string; 63763b97a967SRobert Watson char *p; 63773b97a967SRobert Watson 63783b97a967SRobert Watson length = 0; 6379d9af45c4SRobert Watson backslashes = 0; 63803b97a967SRobert Watson if (quote_around) 63813b97a967SRobert Watson length++; 63823b97a967SRobert Watson for (s = string; *s != '\0'; s++) 63833b97a967SRobert Watson { 63843b97a967SRobert Watson char c = *s; 63853b97a967SRobert Watson if (c == '"') 63863b97a967SRobert Watson length += backslashes + 1; 63873b97a967SRobert Watson length++; 63883b97a967SRobert Watson if (c == '\\') 63893b97a967SRobert Watson backslashes++; 63903b97a967SRobert Watson else 63913b97a967SRobert Watson backslashes = 0; 63923b97a967SRobert Watson } 63933b97a967SRobert Watson if (quote_around) 63943b97a967SRobert Watson length += backslashes + 1; 63953b97a967SRobert Watson 63963b97a967SRobert Watson quoted_string = XMALLOC (char, length + 1); 63973b97a967SRobert Watson 63983b97a967SRobert Watson p = quoted_string; 63993b97a967SRobert Watson backslashes = 0; 64003b97a967SRobert Watson if (quote_around) 64013b97a967SRobert Watson *p++ = '"'; 64023b97a967SRobert Watson for (s = string; *s != '\0'; s++) 64033b97a967SRobert Watson { 64043b97a967SRobert Watson char c = *s; 64053b97a967SRobert Watson if (c == '"') 64063b97a967SRobert Watson { 64073b97a967SRobert Watson unsigned int j; 64083b97a967SRobert Watson for (j = backslashes + 1; j > 0; j--) 64093b97a967SRobert Watson *p++ = '\\'; 64103b97a967SRobert Watson } 64113b97a967SRobert Watson *p++ = c; 6412d9af45c4SRobert Watson if (c == '\\') 64133b97a967SRobert Watson backslashes++; 64143b97a967SRobert Watson else 64153b97a967SRobert Watson backslashes = 0; 64163b97a967SRobert Watson } 64173b97a967SRobert Watson if (quote_around) 64183b97a967SRobert Watson { 64193b97a967SRobert Watson unsigned int j; 64203b97a967SRobert Watson for (j = backslashes; j > 0; j--) 64213b97a967SRobert Watson *p++ = '\\'; 64223b97a967SRobert Watson *p++ = '"'; 64233b97a967SRobert Watson } 64243b97a967SRobert Watson *p = '\0'; 64253b97a967SRobert Watson 64263b97a967SRobert Watson new_argv[i] = quoted_string; 64273b97a967SRobert Watson } 64283b97a967SRobert Watson else 64293b97a967SRobert Watson new_argv[i] = (char *) string; 64303b97a967SRobert Watson } 64313b97a967SRobert Watson new_argv[argc] = NULL; 64323b97a967SRobert Watson 64333b97a967SRobert Watson return new_argv; 64343b97a967SRobert Watson} 64353b97a967SRobert WatsonEOF 64363b97a967SRobert Watson ;; 64373b97a967SRobert Watson esac 64383b97a967SRobert Watson 64393b97a967SRobert Watson cat <<"EOF" 64403b97a967SRobert Watsonvoid lt_dump_script (FILE* f) 64413b97a967SRobert Watson{ 64423b97a967SRobert WatsonEOF 64433b97a967SRobert Watson func_emit_wrapper yes | 64443b97a967SRobert Watson $SED -n -e ' 64453b97a967SRobert Watsons/^\(.\{79\}\)\(..*\)/\1\ 64463b97a967SRobert Watson\2/ 64473b97a967SRobert Watsonh 64483b97a967SRobert Watsons/\([\\"]\)/\\\1/g 64493b97a967SRobert Watsons/$/\\n/ 64503b97a967SRobert Watsons/\([^\n]*\).*/ fputs ("\1", f);/p 64513b97a967SRobert Watsong 64523b97a967SRobert WatsonD' 64533b97a967SRobert Watson cat <<"EOF" 64543b97a967SRobert Watson} 64553b97a967SRobert WatsonEOF 64563b97a967SRobert Watson} 64573b97a967SRobert Watson# end: func_emit_cwrapperexe_src 64583b97a967SRobert Watson 64593b97a967SRobert Watson# func_win32_import_lib_p ARG 64603b97a967SRobert Watson# True if ARG is an import lib, as indicated by $file_magic_cmd 64613b97a967SRobert Watsonfunc_win32_import_lib_p () 64623b97a967SRobert Watson{ 64633b97a967SRobert Watson $debug_cmd 64643b97a967SRobert Watson 64653b97a967SRobert Watson case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 64663b97a967SRobert Watson *import*) : ;; 64673b97a967SRobert Watson *) false ;; 64683b97a967SRobert Watson esac 64693b97a967SRobert Watson} 6470eb336521SRobert Watson 64713b97a967SRobert Watson# func_suncc_cstd_abi 64723b97a967SRobert Watson# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 64733b97a967SRobert Watson# Several compiler flags select an ABI that is incompatible with the 6474eb336521SRobert Watson# Cstd library. Avoid specifying it if any are in CXXFLAGS. 64753b97a967SRobert Watsonfunc_suncc_cstd_abi () 64763b97a967SRobert Watson{ 64773b97a967SRobert Watson $debug_cmd 64783b97a967SRobert Watson 64793b97a967SRobert Watson case " $compile_command " in 64803b97a967SRobert Watson *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 64813b97a967SRobert Watson suncc_use_cstd_abi=no 64823b97a967SRobert Watson ;; 64833b97a967SRobert Watson *) 64843b97a967SRobert Watson suncc_use_cstd_abi=yes 64853b97a967SRobert Watson ;; 64863b97a967SRobert Watson esac 64873b97a967SRobert Watson} 64883b97a967SRobert Watson 64893b97a967SRobert Watson# func_mode_link arg... 64903b97a967SRobert Watsonfunc_mode_link () 64913b97a967SRobert Watson{ 64923b97a967SRobert Watson $debug_cmd 64933b97a967SRobert Watson 64943b97a967SRobert Watson case $host in 64953b97a967SRobert Watson *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 64963b97a967SRobert Watson # It is impossible to link a dll without this setting, and 64973b97a967SRobert Watson # we shouldn't force the makefile maintainer to figure out 64983b97a967SRobert Watson # what system we are compiling for in order to pass an extra 64993b97a967SRobert Watson # flag for every libtool invocation. 65003b97a967SRobert Watson # allow_undefined=no 65013b97a967SRobert Watson 65023b97a967SRobert Watson # FIXME: Unfortunately, there are problems with the above when trying 65033b97a967SRobert Watson # to make a dll that has undefined symbols, in which case not 65043b97a967SRobert Watson # even a static library is built. For now, we need to specify 65053b97a967SRobert Watson # -no-undefined on the libtool link line when we can be certain 65063b97a967SRobert Watson # that all symbols are satisfied, otherwise we get a static library. 65073b97a967SRobert Watson allow_undefined=yes 65083b97a967SRobert Watson ;; 65093b97a967SRobert Watson *) 65103b97a967SRobert Watson allow_undefined=yes 65113b97a967SRobert Watson ;; 65123b97a967SRobert Watson esac 65133b97a967SRobert Watson libtool_args=$nonopt 65143b97a967SRobert Watson base_compile="$nonopt $@" 65153b97a967SRobert Watson compile_command=$nonopt 65163b97a967SRobert Watson finalize_command=$nonopt 65173b97a967SRobert Watson 65183b97a967SRobert Watson compile_rpath= 65193b97a967SRobert Watson finalize_rpath= 65203b97a967SRobert Watson compile_shlibpath= 65213b97a967SRobert Watson finalize_shlibpath= 65223b97a967SRobert Watson convenience= 65233b97a967SRobert Watson old_convenience= 65243b97a967SRobert Watson deplibs= 65253b97a967SRobert Watson old_deplibs= 65263b97a967SRobert Watson compiler_flags= 65273b97a967SRobert Watson linker_flags= 65283b97a967SRobert Watson dllsearchpath= 65293b97a967SRobert Watson lib_search_path=`pwd` 65303b97a967SRobert Watson inst_prefix_dir= 65313b97a967SRobert Watson new_inherited_linker_flags= 65323b97a967SRobert Watson 65333b97a967SRobert Watson avoid_version=no 65343b97a967SRobert Watson bindir= 65353b97a967SRobert Watson dlfiles= 65363b97a967SRobert Watson dlprefiles= 6537eb336521SRobert Watson dlself=no 6538eb336521SRobert Watson export_dynamic=no 6539eb336521SRobert Watson export_symbols= 6540eb336521SRobert Watson export_symbols_regex= 6541eb336521SRobert Watson generated= 6542eb336521SRobert Watson libobjs= 65433b97a967SRobert Watson ltlibs= 65443b97a967SRobert Watson module=no 65453b97a967SRobert Watson no_install=no 65463b97a967SRobert Watson objs= 65473b97a967SRobert Watson os2dllname= 65483b97a967SRobert Watson non_pic_objects= 65493b97a967SRobert Watson precious_files_regex= 65503b97a967SRobert Watson prefer_static_libs=no 65513b97a967SRobert Watson preload=false 65523b97a967SRobert Watson prev= 65533b97a967SRobert Watson prevarg= 65543b97a967SRobert Watson release= 65553b97a967SRobert Watson rpath= 65563b97a967SRobert Watson xrpath= 65573b97a967SRobert Watson perm_rpath= 65583b97a967SRobert Watson temp_rpath= 65593b97a967SRobert Watson thread_safe=no 65603b97a967SRobert Watson vinfo= 65613b97a967SRobert Watson vinfo_number=no 65623b97a967SRobert Watson weak_libs= 65633b97a967SRobert Watson single_module=$wl-single_module 65643b97a967SRobert Watson func_infer_tag $base_compile 65653b97a967SRobert Watson 65663b97a967SRobert Watson # We need to know -static, to get the right output filenames. 65673b97a967SRobert Watson for arg 65683b97a967SRobert Watson do 65693b97a967SRobert Watson case $arg in 65703b97a967SRobert Watson -shared) 65713b97a967SRobert Watson test yes != "$build_libtool_libs" \ 65723b97a967SRobert Watson && func_fatal_configuration "cannot build a shared library" 65733b97a967SRobert Watson build_old_libs=no 65743b97a967SRobert Watson break 65753b97a967SRobert Watson ;; 65763b97a967SRobert Watson -all-static | -static | -static-libtool-libs) 65773b97a967SRobert Watson case $arg in 65783b97a967SRobert Watson -all-static) 65793b97a967SRobert Watson if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 65803b97a967SRobert Watson func_warning "complete static linking is impossible in this configuration" 65813b97a967SRobert Watson fi 65823b97a967SRobert Watson if test -n "$link_static_flag"; then 65833b97a967SRobert Watson dlopen_self=$dlopen_self_static 65843b97a967SRobert Watson fi 65853b97a967SRobert Watson prefer_static_libs=yes 65863b97a967SRobert Watson ;; 65873b97a967SRobert Watson -static) 65883b97a967SRobert Watson if test -z "$pic_flag" && test -n "$link_static_flag"; then 65893b97a967SRobert Watson dlopen_self=$dlopen_self_static 65903b97a967SRobert Watson fi 65913b97a967SRobert Watson prefer_static_libs=built 65923b97a967SRobert Watson ;; 65933b97a967SRobert Watson -static-libtool-libs) 65943b97a967SRobert Watson if test -z "$pic_flag" && test -n "$link_static_flag"; then 65953b97a967SRobert Watson dlopen_self=$dlopen_self_static 65963b97a967SRobert Watson fi 65973b97a967SRobert Watson prefer_static_libs=yes 65983b97a967SRobert Watson ;; 65993b97a967SRobert Watson esac 66003b97a967SRobert Watson build_libtool_libs=no 66013b97a967SRobert Watson build_old_libs=yes 66023b97a967SRobert Watson break 66033b97a967SRobert Watson ;; 66043b97a967SRobert Watson esac 66053b97a967SRobert Watson done 66063b97a967SRobert Watson 66073b97a967SRobert Watson # See if our shared archives depend on static archives. 66083b97a967SRobert Watson test -n "$old_archive_from_new_cmds" && build_old_libs=yes 66093b97a967SRobert Watson 66103b97a967SRobert Watson # Go through the arguments, transforming them on the way. 66113b97a967SRobert Watson while test "$#" -gt 0; do 66123b97a967SRobert Watson arg=$1 66133b97a967SRobert Watson shift 66143b97a967SRobert Watson func_quote_for_eval "$arg" 66153b97a967SRobert Watson qarg=$func_quote_for_eval_unquoted_result 66163b97a967SRobert Watson func_append libtool_args " $func_quote_for_eval_result" 66173b97a967SRobert Watson 66183b97a967SRobert Watson # If the previous option needs an argument, assign it. 66193b97a967SRobert Watson if test -n "$prev"; then 66203b97a967SRobert Watson case $prev in 66213b97a967SRobert Watson output) 66223b97a967SRobert Watson func_append compile_command " @OUTPUT@" 66233b97a967SRobert Watson func_append finalize_command " @OUTPUT@" 66243b97a967SRobert Watson ;; 66253b97a967SRobert Watson esac 66263b97a967SRobert Watson 66273b97a967SRobert Watson case $prev in 66283b97a967SRobert Watson bindir) 66293b97a967SRobert Watson bindir=$arg 66303b97a967SRobert Watson prev= 66313b97a967SRobert Watson continue 6632d9af45c4SRobert Watson ;; 6633d9af45c4SRobert Watson dlfiles|dlprefiles) 6634d9af45c4SRobert Watson $preload || { 6635d9af45c4SRobert Watson # Add the symbol object into the linking commands. 6636d9af45c4SRobert Watson func_append compile_command " @SYMFILE@" 6637d9af45c4SRobert Watson func_append finalize_command " @SYMFILE@" 6638d9af45c4SRobert Watson preload=: 6639d9af45c4SRobert Watson } 6640d9af45c4SRobert Watson case $arg in 6641d9af45c4SRobert Watson *.la | *.lo) ;; # We handle these cases below. 66423b97a967SRobert Watson force) 66433b97a967SRobert Watson if test no = "$dlself"; then 66443b97a967SRobert Watson dlself=needless 66453b97a967SRobert Watson export_dynamic=yes 66463b97a967SRobert Watson fi 66473b97a967SRobert Watson prev= 66483b97a967SRobert Watson continue 66493b97a967SRobert Watson ;; 66503b97a967SRobert Watson self) 66513b97a967SRobert Watson if test dlprefiles = "$prev"; then 66523b97a967SRobert Watson dlself=yes 66533b97a967SRobert Watson elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 66543b97a967SRobert Watson dlself=yes 66553b97a967SRobert Watson else 66563b97a967SRobert Watson dlself=needless 66573b97a967SRobert Watson export_dynamic=yes 66583b97a967SRobert Watson fi 66593b97a967SRobert Watson prev= 66603b97a967SRobert Watson continue 66613b97a967SRobert Watson ;; 66623b97a967SRobert Watson *) 66633b97a967SRobert Watson if test dlfiles = "$prev"; then 66643b97a967SRobert Watson func_append dlfiles " $arg" 66653b97a967SRobert Watson else 66663b97a967SRobert Watson func_append dlprefiles " $arg" 66673b97a967SRobert Watson fi 66683b97a967SRobert Watson prev= 66693b97a967SRobert Watson continue 66703b97a967SRobert Watson ;; 66713b97a967SRobert Watson esac 66723b97a967SRobert Watson ;; 66733b97a967SRobert Watson expsyms) 6674d9af45c4SRobert Watson export_symbols=$arg 6675d9af45c4SRobert Watson test -f "$arg" \ 66763b97a967SRobert Watson || func_fatal_error "symbol file '$arg' does not exist" 66773b97a967SRobert Watson prev= 66783b97a967SRobert Watson continue 66793b97a967SRobert Watson ;; 66803b97a967SRobert Watson expsyms_regex) 66813b97a967SRobert Watson export_symbols_regex=$arg 66823b97a967SRobert Watson prev= 66833b97a967SRobert Watson continue 66843b97a967SRobert Watson ;; 66853b97a967SRobert Watson framework) 66863b97a967SRobert Watson case $host in 66873b97a967SRobert Watson *-*-darwin*) 66883b97a967SRobert Watson case "$deplibs " in 66893b97a967SRobert Watson *" $qarg.ltframework "*) ;; 66903b97a967SRobert Watson *) func_append deplibs " $qarg.ltframework" # this is fixed later 66913b97a967SRobert Watson ;; 66923b97a967SRobert Watson esac 66933b97a967SRobert Watson ;; 66943b97a967SRobert Watson esac 66953b97a967SRobert Watson prev= 66963b97a967SRobert Watson continue 66973b97a967SRobert Watson ;; 66983b97a967SRobert Watson inst_prefix) 66993b97a967SRobert Watson inst_prefix_dir=$arg 67003b97a967SRobert Watson prev= 67013b97a967SRobert Watson continue 67023b97a967SRobert Watson ;; 67033b97a967SRobert Watson mllvm) 67043b97a967SRobert Watson # Clang does not use LLVM to link, so we can simply discard any 67053b97a967SRobert Watson # '-mllvm $arg' options when doing the link step. 67063b97a967SRobert Watson prev= 67073b97a967SRobert Watson continue 67083b97a967SRobert Watson ;; 67093b97a967SRobert Watson objectlist) 67103b97a967SRobert Watson if test -f "$arg"; then 67113b97a967SRobert Watson save_arg=$arg 67123b97a967SRobert Watson moreargs= 67133b97a967SRobert Watson for fil in `cat "$save_arg"` 67143b97a967SRobert Watson do 67153b97a967SRobert Watson# func_append moreargs " $fil" 67163b97a967SRobert Watson arg=$fil 67173b97a967SRobert Watson # A libtool-controlled object. 67183b97a967SRobert Watson 67193b97a967SRobert Watson # Check to see that this really is a libtool object. 67203b97a967SRobert Watson if func_lalib_unsafe_p "$arg"; then 67213b97a967SRobert Watson pic_object= 67223b97a967SRobert Watson non_pic_object= 67233b97a967SRobert Watson 67243b97a967SRobert Watson # Read the .lo file 67253b97a967SRobert Watson func_source "$arg" 67263b97a967SRobert Watson 67273b97a967SRobert Watson if test -z "$pic_object" || 67283b97a967SRobert Watson test -z "$non_pic_object" || 67293b97a967SRobert Watson test none = "$pic_object" && 67303b97a967SRobert Watson test none = "$non_pic_object"; then 67313b97a967SRobert Watson func_fatal_error "cannot find name of object for '$arg'" 67323b97a967SRobert Watson fi 67333b97a967SRobert Watson 67343b97a967SRobert Watson # Extract subdirectory from the argument. 67353b97a967SRobert Watson func_dirname "$arg" "/" "" 67363b97a967SRobert Watson xdir=$func_dirname_result 67373b97a967SRobert Watson 67383b97a967SRobert Watson if test none != "$pic_object"; then 67393b97a967SRobert Watson # Prepend the subdirectory the object is found in. 67403b97a967SRobert Watson pic_object=$xdir$pic_object 67413b97a967SRobert Watson 67423b97a967SRobert Watson if test dlfiles = "$prev"; then 67433b97a967SRobert Watson if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 67443b97a967SRobert Watson func_append dlfiles " $pic_object" 67453b97a967SRobert Watson prev= 67463b97a967SRobert Watson continue 67473b97a967SRobert Watson else 67483b97a967SRobert Watson # If libtool objects are unsupported, then we need to preload. 67493b97a967SRobert Watson prev=dlprefiles 67503b97a967SRobert Watson fi 67513b97a967SRobert Watson fi 67523b97a967SRobert Watson 67533b97a967SRobert Watson # CHECK ME: I think I busted this. -Ossama 67543b97a967SRobert Watson if test dlprefiles = "$prev"; then 67553b97a967SRobert Watson # Preload the old-style object. 67563b97a967SRobert Watson func_append dlprefiles " $pic_object" 67573b97a967SRobert Watson prev= 67583b97a967SRobert Watson fi 67593b97a967SRobert Watson 67603b97a967SRobert Watson # A PIC object. 67613b97a967SRobert Watson func_append libobjs " $pic_object" 67623b97a967SRobert Watson arg=$pic_object 67633b97a967SRobert Watson fi 67643b97a967SRobert Watson 67653b97a967SRobert Watson # Non-PIC object. 67663b97a967SRobert Watson if test none != "$non_pic_object"; then 67673b97a967SRobert Watson # Prepend the subdirectory the object is found in. 67683b97a967SRobert Watson non_pic_object=$xdir$non_pic_object 67693b97a967SRobert Watson 67703b97a967SRobert Watson # A standard non-PIC object 67713b97a967SRobert Watson func_append non_pic_objects " $non_pic_object" 67723b97a967SRobert Watson if test -z "$pic_object" || test none = "$pic_object"; then 67733b97a967SRobert Watson arg=$non_pic_object 67743b97a967SRobert Watson fi 67753b97a967SRobert Watson else 67763b97a967SRobert Watson # If the PIC object exists, use it instead. 67773b97a967SRobert Watson # $xdir was prepended to $pic_object above. 67783b97a967SRobert Watson non_pic_object=$pic_object 67793b97a967SRobert Watson func_append non_pic_objects " $non_pic_object" 67803b97a967SRobert Watson fi 67813b97a967SRobert Watson else 67823b97a967SRobert Watson # Only an error if not doing a dry-run. 67833b97a967SRobert Watson if $opt_dry_run; then 67843b97a967SRobert Watson # Extract subdirectory from the argument. 67853b97a967SRobert Watson func_dirname "$arg" "/" "" 67863b97a967SRobert Watson xdir=$func_dirname_result 67873b97a967SRobert Watson 67883b97a967SRobert Watson func_lo2o "$arg" 67893b97a967SRobert Watson pic_object=$xdir$objdir/$func_lo2o_result 67903b97a967SRobert Watson non_pic_object=$xdir$func_lo2o_result 67913b97a967SRobert Watson func_append libobjs " $pic_object" 67923b97a967SRobert Watson func_append non_pic_objects " $non_pic_object" 67933b97a967SRobert Watson else 67943b97a967SRobert Watson func_fatal_error "'$arg' is not a valid libtool object" 67953b97a967SRobert Watson fi 67963b97a967SRobert Watson fi 67973b97a967SRobert Watson done 67983b97a967SRobert Watson else 67993b97a967SRobert Watson func_fatal_error "link input file '$arg' does not exist" 68003b97a967SRobert Watson fi 68013b97a967SRobert Watson arg=$save_arg 68023b97a967SRobert Watson prev= 68033b97a967SRobert Watson continue 68043b97a967SRobert Watson ;; 68053b97a967SRobert Watson os2dllname) 68063b97a967SRobert Watson os2dllname=$arg 68073b97a967SRobert Watson prev= 68083b97a967SRobert Watson continue 68093b97a967SRobert Watson ;; 68103b97a967SRobert Watson precious_regex) 68113b97a967SRobert Watson precious_files_regex=$arg 68123b97a967SRobert Watson prev= 68133b97a967SRobert Watson continue 68143b97a967SRobert Watson ;; 68153b97a967SRobert Watson release) 68163b97a967SRobert Watson release=-$arg 68173b97a967SRobert Watson prev= 68183b97a967SRobert Watson continue 68193b97a967SRobert Watson ;; 68203b97a967SRobert Watson rpath | xrpath) 68213b97a967SRobert Watson # We need an absolute path. 68223b97a967SRobert Watson case $arg in 68233b97a967SRobert Watson [\\/]* | [A-Za-z]:[\\/]*) ;; 68243b97a967SRobert Watson *) 68253b97a967SRobert Watson func_fatal_error "only absolute run-paths are allowed" 68263b97a967SRobert Watson ;; 68273b97a967SRobert Watson esac 68283b97a967SRobert Watson if test rpath = "$prev"; then 68293b97a967SRobert Watson case "$rpath " in 68303b97a967SRobert Watson *" $arg "*) ;; 68313b97a967SRobert Watson *) func_append rpath " $arg" ;; 68323b97a967SRobert Watson esac 68333b97a967SRobert Watson else 68343b97a967SRobert Watson case "$xrpath " in 68353b97a967SRobert Watson *" $arg "*) ;; 68363b97a967SRobert Watson *) func_append xrpath " $arg" ;; 68373b97a967SRobert Watson esac 68383b97a967SRobert Watson fi 68393b97a967SRobert Watson prev= 68403b97a967SRobert Watson continue 68413b97a967SRobert Watson ;; 68423b97a967SRobert Watson shrext) 68433b97a967SRobert Watson shrext_cmds=$arg 68443b97a967SRobert Watson prev= 68453b97a967SRobert Watson continue 68463b97a967SRobert Watson ;; 68473b97a967SRobert Watson weak) 68483b97a967SRobert Watson func_append weak_libs " $arg" 68493b97a967SRobert Watson prev= 68503b97a967SRobert Watson continue 68513b97a967SRobert Watson ;; 68523b97a967SRobert Watson xcclinker) 68533b97a967SRobert Watson func_append linker_flags " $qarg" 68543b97a967SRobert Watson func_append compiler_flags " $qarg" 68553b97a967SRobert Watson prev= 68563b97a967SRobert Watson func_append compile_command " $qarg" 68573b97a967SRobert Watson func_append finalize_command " $qarg" 68583b97a967SRobert Watson continue 68593b97a967SRobert Watson ;; 68603b97a967SRobert Watson xcompiler) 68613b97a967SRobert Watson func_append compiler_flags " $qarg" 68623b97a967SRobert Watson prev= 68633b97a967SRobert Watson func_append compile_command " $qarg" 68643b97a967SRobert Watson func_append finalize_command " $qarg" 68653b97a967SRobert Watson continue 68663b97a967SRobert Watson ;; 68673b97a967SRobert Watson xlinker) 68683b97a967SRobert Watson func_append linker_flags " $qarg" 68693b97a967SRobert Watson func_append compiler_flags " $wl$qarg" 68703b97a967SRobert Watson prev= 68713b97a967SRobert Watson func_append compile_command " $wl$qarg" 68723b97a967SRobert Watson func_append finalize_command " $wl$qarg" 68733b97a967SRobert Watson continue 68743b97a967SRobert Watson ;; 68753b97a967SRobert Watson *) 68763b97a967SRobert Watson eval "$prev=\"\$arg\"" 68773b97a967SRobert Watson prev= 68783b97a967SRobert Watson continue 68793b97a967SRobert Watson ;; 68803b97a967SRobert Watson esac 68813b97a967SRobert Watson fi # test -n "$prev" 68823b97a967SRobert Watson 68833b97a967SRobert Watson prevarg=$arg 68843b97a967SRobert Watson 68853b97a967SRobert Watson case $arg in 68863b97a967SRobert Watson -all-static) 68873b97a967SRobert Watson if test -n "$link_static_flag"; then 68883b97a967SRobert Watson # See comment for -static flag below, for more details. 68893b97a967SRobert Watson func_append compile_command " $link_static_flag" 68903b97a967SRobert Watson func_append finalize_command " $link_static_flag" 68913b97a967SRobert Watson fi 68923b97a967SRobert Watson continue 68933b97a967SRobert Watson ;; 68943b97a967SRobert Watson 68953b97a967SRobert Watson -allow-undefined) 68963b97a967SRobert Watson # FIXME: remove this flag sometime in the future. 68973b97a967SRobert Watson func_fatal_error "'-allow-undefined' must not be used because it is the default" 68983b97a967SRobert Watson ;; 68993b97a967SRobert Watson 69003b97a967SRobert Watson -avoid-version) 69013b97a967SRobert Watson avoid_version=yes 69023b97a967SRobert Watson continue 69033b97a967SRobert Watson ;; 69043b97a967SRobert Watson 69053b97a967SRobert Watson -bindir) 69063b97a967SRobert Watson prev=bindir 69073b97a967SRobert Watson continue 69083b97a967SRobert Watson ;; 69093b97a967SRobert Watson 69103b97a967SRobert Watson -dlopen) 69113b97a967SRobert Watson prev=dlfiles 69123b97a967SRobert Watson continue 69133b97a967SRobert Watson ;; 69143b97a967SRobert Watson 6915eb336521SRobert Watson -dlpreopen) 6916eb336521SRobert Watson prev=dlprefiles 6917eb336521SRobert Watson continue 69183b97a967SRobert Watson ;; 69193b97a967SRobert Watson 69203b97a967SRobert Watson -export-dynamic) 69213b97a967SRobert Watson export_dynamic=yes 69223b97a967SRobert Watson continue 69233b97a967SRobert Watson ;; 69243b97a967SRobert Watson 69253b97a967SRobert Watson -export-symbols | -export-symbols-regex) 69263b97a967SRobert Watson if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 69273b97a967SRobert Watson func_fatal_error "more than one -exported-symbols argument is not allowed" 69283b97a967SRobert Watson fi 69293b97a967SRobert Watson if test X-export-symbols = "X$arg"; then 69303b97a967SRobert Watson prev=expsyms 69313b97a967SRobert Watson else 69323b97a967SRobert Watson prev=expsyms_regex 69333b97a967SRobert Watson fi 69343b97a967SRobert Watson continue 69353b97a967SRobert Watson ;; 69363b97a967SRobert Watson 69373b97a967SRobert Watson -framework) 69383b97a967SRobert Watson prev=framework 69393b97a967SRobert Watson continue 69403b97a967SRobert Watson ;; 69413b97a967SRobert Watson 69423b97a967SRobert Watson -inst-prefix-dir) 69433b97a967SRobert Watson prev=inst_prefix 69443b97a967SRobert Watson continue 69453b97a967SRobert Watson ;; 69463b97a967SRobert Watson 69473b97a967SRobert Watson # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 69483b97a967SRobert Watson # so, if we see these flags be careful not to treat them like -L 69493b97a967SRobert Watson -L[A-Z][A-Z]*:*) 69503b97a967SRobert Watson case $with_gcc/$host in 69513b97a967SRobert Watson no/*-*-irix* | /*-*-irix*) 69523b97a967SRobert Watson func_append compile_command " $arg" 69533b97a967SRobert Watson func_append finalize_command " $arg" 69543b97a967SRobert Watson ;; 69553b97a967SRobert Watson esac 69563b97a967SRobert Watson continue 69573b97a967SRobert Watson ;; 69583b97a967SRobert Watson 69593b97a967SRobert Watson -L*) 69603b97a967SRobert Watson func_stripname "-L" '' "$arg" 69613b97a967SRobert Watson if test -z "$func_stripname_result"; then 69623b97a967SRobert Watson if test "$#" -gt 0; then 69633b97a967SRobert Watson func_fatal_error "require no space between '-L' and '$1'" 69643b97a967SRobert Watson else 69653b97a967SRobert Watson func_fatal_error "need path for '-L' option" 69663b97a967SRobert Watson fi 69673b97a967SRobert Watson fi 69683b97a967SRobert Watson func_resolve_sysroot "$func_stripname_result" 69693b97a967SRobert Watson dir=$func_resolve_sysroot_result 69703b97a967SRobert Watson # We need an absolute path. 69713b97a967SRobert Watson case $dir in 69723b97a967SRobert Watson [\\/]* | [A-Za-z]:[\\/]*) ;; 69733b97a967SRobert Watson *) 69743b97a967SRobert Watson absdir=`cd "$dir" && pwd` 69753b97a967SRobert Watson test -z "$absdir" && \ 6976d9af45c4SRobert Watson func_fatal_error "cannot determine absolute directory name of '$dir'" 69773b97a967SRobert Watson dir=$absdir 69783b97a967SRobert Watson ;; 69793b97a967SRobert Watson esac 6980d9af45c4SRobert Watson case "$deplibs " in 69813b97a967SRobert Watson *" -L$dir "* | *" $arg "*) 69823b97a967SRobert Watson # Will only happen for absolute or sysroot arguments 69833b97a967SRobert Watson ;; 69843b97a967SRobert Watson *) 69853b97a967SRobert Watson # Preserve sysroot, but never include relative directories 69863b97a967SRobert Watson case $dir in 6987 [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 6988 *) func_append deplibs " -L$dir" ;; 6989 esac 6990 func_append lib_search_path " $dir" 6991 ;; 6992 esac 6993 case $host in 6994 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6995 testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 6996 case :$dllsearchpath: in 6997 *":$dir:"*) ;; 6998 ::) dllsearchpath=$dir;; 6999 *) func_append dllsearchpath ":$dir";; 7000 esac 7001 case :$dllsearchpath: in 7002 *":$testbindir:"*) ;; 7003 ::) dllsearchpath=$testbindir;; 7004 *) func_append dllsearchpath ":$testbindir";; 7005 esac 7006 ;; 7007 esac 7008 continue 7009 ;; 7010 7011 -l*) 7012 if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7013 case $host in 7014 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7015 # These systems don't actually have a C or math library (as such) 7016 continue 7017 ;; 7018 *-*-os2*) 7019 # These systems don't actually have a C library (as such) 7020 test X-lc = "X$arg" && continue 7021 ;; 7022 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7023 # Do not include libc due to us having libc/libc_r. 7024 test X-lc = "X$arg" && continue 7025 ;; 7026 *-*-rhapsody* | *-*-darwin1.[012]) 7027 # Rhapsody C and math libraries are in the System framework 7028 func_append deplibs " System.ltframework" 7029 continue 7030 ;; 7031 *-*-sco3.2v5* | *-*-sco5v6*) 7032 # Causes problems with __ctype 7033 test X-lc = "X$arg" && continue 7034 ;; 7035 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7036 # Compiler inserts libc in the correct place for threads to work 7037 test X-lc = "X$arg" && continue 7038 ;; 7039 esac 7040 elif test X-lc_r = "X$arg"; then 7041 case $host in 7042 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7043 # Do not include libc_r directly, use -pthread flag. 7044 continue 7045 ;; 7046 esac 7047 fi 7048 func_append deplibs " $arg" 7049 continue 7050 ;; 7051 7052 -mllvm) 7053 prev=mllvm 7054 continue 7055 ;; 7056 7057 -module) 7058 module=yes 7059 continue 7060 ;; 7061 7062 # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7063 # classes, name mangling, and exception handling. 7064 # Darwin uses the -arch flag to determine output architecture. 7065 -model|-arch|-isysroot|--sysroot) 7066 func_append compiler_flags " $arg" 7067 func_append compile_command " $arg" 7068 func_append finalize_command " $arg" 7069 prev=xcompiler 7070 continue 7071 ;; 7072 7073 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7074 |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7075 func_append compiler_flags " $arg" 7076 func_append compile_command " $arg" 7077 func_append finalize_command " $arg" 7078 case "$new_inherited_linker_flags " in 7079 *" $arg "*) ;; 7080 * ) func_append new_inherited_linker_flags " $arg" ;; 7081 esac 7082 continue 7083 ;; 7084 7085 -multi_module) 7086 single_module=$wl-multi_module 7087 continue 7088 ;; 7089 7090 -no-fast-install) 7091 fast_install=no 7092 continue 7093 ;; 7094 7095 -no-install) 7096 case $host in 7097 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7098 # The PATH hackery in wrapper scripts is required on Windows 7099 # and Darwin in order for the loader to find any dlls it needs. 7100 func_warning "'-no-install' is ignored for $host" 7101 func_warning "assuming '-no-fast-install' instead" 7102 fast_install=no 7103 ;; 7104 *) no_install=yes ;; 7105 esac 7106 continue 7107 ;; 7108 7109 -no-undefined) 7110 allow_undefined=no 7111 continue 7112 ;; 7113 7114 -objectlist) 7115 prev=objectlist 7116 continue 7117 ;; 7118 7119 -os2dllname) 7120 prev=os2dllname 7121 continue 7122 ;; 7123 7124 -o) prev=output ;; 7125 7126 -precious-files-regex) 7127 prev=precious_regex 7128 continue 7129 ;; 7130 7131 -release) 7132 prev=release 7133 continue 7134 ;; 7135 7136 -rpath) 7137 prev=rpath 7138 continue 7139 ;; 7140 7141 -R) 7142 prev=xrpath 7143 continue 7144 ;; 7145 7146 -R*) 7147 func_stripname '-R' '' "$arg" 7148 dir=$func_stripname_result 7149 # We need an absolute path. 7150 case $dir in 7151 [\\/]* | [A-Za-z]:[\\/]*) ;; 7152 =*) 7153 func_stripname '=' '' "$dir" 7154 dir=$lt_sysroot$func_stripname_result 7155 ;; 7156 *) 7157 func_fatal_error "only absolute run-paths are allowed" 7158 ;; 7159 esac 7160 case "$xrpath " in 7161 *" $dir "*) ;; 7162 *) func_append xrpath " $dir" ;; 7163 esac 7164 continue 7165 ;; 7166 7167 -shared) 7168 # The effects of -shared are defined in a previous loop. 7169 continue 7170 ;; 7171 7172 -shrext) 7173 prev=shrext 7174 continue 7175 ;; 7176 7177 -static | -static-libtool-libs) 7178 # The effects of -static are defined in a previous loop. 7179 # We used to do the same as -all-static on platforms that 7180 # didn't have a PIC flag, but the assumption that the effects 7181 # would be equivalent was wrong. It would break on at least 7182 # Digital Unix and AIX. 7183 continue 7184 ;; 7185 7186 -thread-safe) 7187 thread_safe=yes 7188 continue 7189 ;; 7190 7191 -version-info) 7192 prev=vinfo 7193 continue 7194 ;; 7195 7196 -version-number) 7197 prev=vinfo 7198 vinfo_number=yes 7199 continue 7200 ;; 7201 7202 -weak) 7203 prev=weak 7204 continue 7205 ;; 7206 7207 -Wc,*) 7208 func_stripname '-Wc,' '' "$arg" 7209 args=$func_stripname_result 7210 arg= 7211 save_ifs=$IFS; IFS=, 7212 for flag in $args; do 7213 IFS=$save_ifs 7214 func_quote_for_eval "$flag" 7215 func_append arg " $func_quote_for_eval_result" 7216 func_append compiler_flags " $func_quote_for_eval_result" 7217 done 7218 IFS=$save_ifs 7219 func_stripname ' ' '' "$arg" 7220 arg=$func_stripname_result 7221 ;; 7222 7223 -Wl,*) 7224 func_stripname '-Wl,' '' "$arg" 7225 args=$func_stripname_result 7226 arg= 7227 save_ifs=$IFS; IFS=, 7228 for flag in $args; do 7229 IFS=$save_ifs 7230 func_quote_for_eval "$flag" 7231 func_append arg " $wl$func_quote_for_eval_result" 7232 func_append compiler_flags " $wl$func_quote_for_eval_result" 7233 func_append linker_flags " $func_quote_for_eval_result" 7234 done 7235 IFS=$save_ifs 7236 func_stripname ' ' '' "$arg" 7237 arg=$func_stripname_result 7238 ;; 7239 7240 -Xcompiler) 7241 prev=xcompiler 7242 continue 7243 ;; 7244 7245 -Xlinker) 7246 prev=xlinker 7247 continue 7248 ;; 7249 7250 -XCClinker) 7251 prev=xcclinker 7252 continue 7253 ;; 7254 7255 # -msg_* for osf cc 7256 -msg_*) 7257 func_quote_for_eval "$arg" 7258 arg=$func_quote_for_eval_result 7259 ;; 7260 7261 # Flags to be passed through unchanged, with rationale: 7262 # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7263 # -r[0-9][0-9]* specify processor for the SGI compiler 7264 # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7265 # +DA*, +DD* enable 64-bit mode for the HP compiler 7266 # -q* compiler args for the IBM compiler 7267 # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7268 # -F/path path to uninstalled frameworks, gcc on darwin 7269 # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7270 # -fstack-protector* stack protector flags for GCC 7271 # @file GCC response files 7272 # -tp=* Portland pgcc target processor selection 7273 # --sysroot=* for sysroot support 7274 # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7275 # -stdlib=* select c++ std lib with clang 7276 -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7277 -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7278 -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) 7279 func_quote_for_eval "$arg" 7280 arg=$func_quote_for_eval_result 7281 func_append compile_command " $arg" 7282 func_append finalize_command " $arg" 7283 func_append compiler_flags " $arg" 7284 continue 7285 ;; 7286 7287 -Z*) 7288 if test os2 = "`expr $host : '.*\(os2\)'`"; then 7289 # OS/2 uses -Zxxx to specify OS/2-specific options 7290 compiler_flags="$compiler_flags $arg" 7291 func_append compile_command " $arg" 7292 func_append finalize_command " $arg" 7293 case $arg in 7294 -Zlinker | -Zstack) 7295 prev=xcompiler 7296 ;; 7297 esac 7298 continue 7299 else 7300 # Otherwise treat like 'Some other compiler flag' below 7301 func_quote_for_eval "$arg" 7302 arg=$func_quote_for_eval_result 7303 fi 7304 ;; 7305 7306 # Some other compiler flag. 7307 -* | +*) 7308 func_quote_for_eval "$arg" 7309 arg=$func_quote_for_eval_result 7310 ;; 7311 7312 *.$objext) 7313 # A standard object. 7314 func_append objs " $arg" 7315 ;; 7316 7317 *.lo) 7318 # A libtool-controlled object. 7319 7320 # Check to see that this really is a libtool object. 7321 if func_lalib_unsafe_p "$arg"; then 7322 pic_object= 7323 non_pic_object= 7324 7325 # Read the .lo file 7326 func_source "$arg" 7327 7328 if test -z "$pic_object" || 7329 test -z "$non_pic_object" || 7330 test none = "$pic_object" && 7331 test none = "$non_pic_object"; then 7332 func_fatal_error "cannot find name of object for '$arg'" 7333 fi 7334 7335 # Extract subdirectory from the argument. 7336 func_dirname "$arg" "/" "" 7337 xdir=$func_dirname_result 7338 7339 test none = "$pic_object" || { 7340 # Prepend the subdirectory the object is found in. 7341 pic_object=$xdir$pic_object 7342 7343 if test dlfiles = "$prev"; then 7344 if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7345 func_append dlfiles " $pic_object" 7346 prev= 7347 continue 7348 else 7349 # If libtool objects are unsupported, then we need to preload. 7350 prev=dlprefiles 7351 fi 7352 fi 7353 7354 # CHECK ME: I think I busted this. -Ossama 7355 if test dlprefiles = "$prev"; then 7356 # Preload the old-style object. 7357 func_append dlprefiles " $pic_object" 7358 prev= 7359 fi 7360 7361 # A PIC object. 7362 func_append libobjs " $pic_object" 7363 arg=$pic_object 7364 } 7365 7366 # Non-PIC object. 7367 if test none != "$non_pic_object"; then 7368 # Prepend the subdirectory the object is found in. 7369 non_pic_object=$xdir$non_pic_object 7370 7371 # A standard non-PIC object 7372 func_append non_pic_objects " $non_pic_object" 7373 if test -z "$pic_object" || test none = "$pic_object"; then 7374 arg=$non_pic_object 7375 fi 7376 else 7377 # If the PIC object exists, use it instead. 7378 # $xdir was prepended to $pic_object above. 7379 non_pic_object=$pic_object 7380 func_append non_pic_objects " $non_pic_object" 7381 fi 7382 else 7383 # Only an error if not doing a dry-run. 7384 if $opt_dry_run; then 7385 # Extract subdirectory from the argument. 7386 func_dirname "$arg" "/" "" 7387 xdir=$func_dirname_result 7388 7389 func_lo2o "$arg" 7390 pic_object=$xdir$objdir/$func_lo2o_result 7391 non_pic_object=$xdir$func_lo2o_result 7392 func_append libobjs " $pic_object" 7393 func_append non_pic_objects " $non_pic_object" 7394 else 7395 func_fatal_error "'$arg' is not a valid libtool object" 7396 fi 7397 fi 7398 ;; 7399 7400 *.$libext) 7401 # An archive. 7402 func_append deplibs " $arg" 7403 func_append old_deplibs " $arg" 7404 continue 7405 ;; 7406 7407 *.la) 7408 # A libtool-controlled library. 7409 7410 func_resolve_sysroot "$arg" 7411 if test dlfiles = "$prev"; then 7412 # This library was specified with -dlopen. 7413 func_append dlfiles " $func_resolve_sysroot_result" 7414 prev= 7415 elif test dlprefiles = "$prev"; then 7416 # The library was specified with -dlpreopen. 7417 func_append dlprefiles " $func_resolve_sysroot_result" 7418 prev= 7419 else 7420 func_append deplibs " $func_resolve_sysroot_result" 7421 fi 7422 continue 7423 ;; 7424 7425 # Some other compiler argument. 7426 *) 7427 # Unknown arguments in both finalize_command and compile_command need 7428 # to be aesthetically quoted because they are evaled later. 7429 func_quote_for_eval "$arg" 7430 arg=$func_quote_for_eval_result 7431 ;; 7432 esac # arg 7433 7434 # Now actually substitute the argument into the commands. 7435 if test -n "$arg"; then 7436 func_append compile_command " $arg" 7437 func_append finalize_command " $arg" 7438 fi 7439 done # argument parsing loop 7440 7441 test -n "$prev" && \ 7442 func_fatal_help "the '$prevarg' option requires an argument" 7443 7444 if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7445 eval arg=\"$export_dynamic_flag_spec\" 7446 func_append compile_command " $arg" 7447 func_append finalize_command " $arg" 7448 fi 7449 7450 oldlibs= 7451 # calculate the name of the file, without its directory 7452 func_basename "$output" 7453 outputname=$func_basename_result 7454 libobjs_save=$libobjs 7455 7456 if test -n "$shlibpath_var"; then 7457 # get the directories listed in $shlibpath_var 7458 eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7459 else 7460 shlib_search_path= 7461 fi 7462 eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7463 eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7464 7465 # Definition is injected by LT_CONFIG during libtool generation. 7466 func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7467 7468 func_dirname "$output" "/" "" 7469 output_objdir=$func_dirname_result$objdir 7470 func_to_tool_file "$output_objdir/" 7471 tool_output_objdir=$func_to_tool_file_result 7472 # Create the object directory. 7473 func_mkdir_p "$output_objdir" 7474 7475 # Determine the type of output 7476 case $output in 7477 "") 7478 func_fatal_help "you must specify an output file" 7479 ;; 7480 *.$libext) linkmode=oldlib ;; 7481 *.lo | *.$objext) linkmode=obj ;; 7482 *.la) linkmode=lib ;; 7483 *) linkmode=prog ;; # Anything else should be a program. 7484 esac 7485 7486 specialdeplibs= 7487 7488 libs= 7489 # Find all interdependent deplibs by searching for libraries 7490 # that are linked more than once (e.g. -la -lb -la) 7491 for deplib in $deplibs; do 7492 if $opt_preserve_dup_deps; then 7493 case "$libs " in 7494 *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7495 esac 7496 fi 7497 func_append libs " $deplib" 7498 done 7499 7500 if test lib = "$linkmode"; then 7501 libs="$predeps $libs $compiler_lib_search_path $postdeps" 7502 7503 # Compute libraries that are listed more than once in $predeps 7504 # $postdeps and mark them as special (i.e., whose duplicates are 7505 # not to be eliminated). 7506 pre_post_deps= 7507 if $opt_duplicate_compiler_generated_deps; then 7508 for pre_post_dep in $predeps $postdeps; do 7509 case "$pre_post_deps " in 7510 *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7511 esac 7512 func_append pre_post_deps " $pre_post_dep" 7513 done 7514 fi 7515 pre_post_deps= 7516 fi 7517 7518 deplibs= 7519 newdependency_libs= 7520 newlib_search_path= 7521 need_relink=no # whether we're linking any uninstalled libtool libraries 7522 notinst_deplibs= # not-installed libtool libraries 7523 notinst_path= # paths that contain not-installed libtool libraries 7524 7525 case $linkmode in 7526 lib) 7527 passes="conv dlpreopen link" 7528 for file in $dlfiles $dlprefiles; do 7529 case $file in 7530 *.la) ;; 7531 *) 7532 func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7533 ;; 7534 esac 7535 done 7536 ;; 7537 prog) 7538 compile_deplibs= 7539 finalize_deplibs= 7540 alldeplibs=false 7541 newdlfiles= 7542 newdlprefiles= 7543 passes="conv scan dlopen dlpreopen link" 7544 ;; 7545 *) passes="conv" 7546 ;; 7547 esac 7548 7549 for pass in $passes; do 7550 # The preopen pass in lib mode reverses $deplibs; put it back here 7551 # so that -L comes before libs that need it for instance... 7552 if test lib,link = "$linkmode,$pass"; then 7553 ## FIXME: Find the place where the list is rebuilt in the wrong 7554 ## order, and fix it there properly 7555 tmp_deplibs= 7556 for deplib in $deplibs; do 7557 tmp_deplibs="$deplib $tmp_deplibs" 7558 done 7559 deplibs=$tmp_deplibs 7560 fi 7561 7562 if test lib,link = "$linkmode,$pass" || 7563 test prog,scan = "$linkmode,$pass"; then 7564 libs=$deplibs 7565 deplibs= 7566 fi 7567 if test prog = "$linkmode"; then 7568 case $pass in 7569 dlopen) libs=$dlfiles ;; 7570 dlpreopen) libs=$dlprefiles ;; 7571 link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7572 esac 7573 fi 7574 if test lib,dlpreopen = "$linkmode,$pass"; then 7575 # Collect and forward deplibs of preopened libtool libs 7576 for lib in $dlprefiles; do 7577 # Ignore non-libtool-libs 7578 dependency_libs= 7579 func_resolve_sysroot "$lib" 7580 case $lib in 7581 *.la) func_source "$func_resolve_sysroot_result" ;; 7582 esac 7583 7584 # Collect preopened libtool deplibs, except any this library 7585 # has declared as weak libs 7586 for deplib in $dependency_libs; do 7587 func_basename "$deplib" 7588 deplib_base=$func_basename_result 7589 case " $weak_libs " in 7590 *" $deplib_base "*) ;; 7591 *) func_append deplibs " $deplib" ;; 7592 esac 7593 done 7594 done 7595 libs=$dlprefiles 7596 fi 7597 if test dlopen = "$pass"; then 7598 # Collect dlpreopened libraries 7599 save_deplibs=$deplibs 7600 deplibs= 7601 fi 7602 7603 for deplib in $libs; do 7604 lib= 7605 found=false 7606 case $deplib in 7607 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7608 |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7609 if test prog,link = "$linkmode,$pass"; then 7610 compile_deplibs="$deplib $compile_deplibs" 7611 finalize_deplibs="$deplib $finalize_deplibs" 7612 else 7613 func_append compiler_flags " $deplib" 7614 if test lib = "$linkmode"; then 7615 case "$new_inherited_linker_flags " in 7616 *" $deplib "*) ;; 7617 * ) func_append new_inherited_linker_flags " $deplib" ;; 7618 esac 7619 fi 7620 fi 7621 continue 7622 ;; 7623 -l*) 7624 if test lib != "$linkmode" && test prog != "$linkmode"; then 7625 func_warning "'-l' is ignored for archives/objects" 7626 continue 7627 fi 7628 func_stripname '-l' '' "$deplib" 7629 name=$func_stripname_result 7630 if test lib = "$linkmode"; then 7631 searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7632 else 7633 searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7634 fi 7635 for searchdir in $searchdirs; do 7636 for search_ext in .la $std_shrext .so .a; do 7637 # Search the libtool library 7638 lib=$searchdir/lib$name$search_ext 7639 if test -f "$lib"; then 7640 if test .la = "$search_ext"; then 7641 found=: 7642 else 7643 found=false 7644 fi 7645 break 2 7646 fi 7647 done 7648 done 7649 if $found; then 7650 # deplib is a libtool library 7651 # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7652 # We need to do some special things here, and not later. 7653 if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7654 case " $predeps $postdeps " in 7655 *" $deplib "*) 7656 if func_lalib_p "$lib"; then 7657 library_names= 7658 old_library= 7659 func_source "$lib" 7660 for l in $old_library $library_names; do 7661 ll=$l 7662 done 7663 if test "X$ll" = "X$old_library"; then # only static version available 7664 found=false 7665 func_dirname "$lib" "" "." 7666 ladir=$func_dirname_result 7667 lib=$ladir/$old_library 7668 if test prog,link = "$linkmode,$pass"; then 7669 compile_deplibs="$deplib $compile_deplibs" 7670 finalize_deplibs="$deplib $finalize_deplibs" 7671 else 7672 deplibs="$deplib $deplibs" 7673 test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7674 fi 7675 continue 7676 fi 7677 fi 7678 ;; 7679 *) ;; 7680 esac 7681 fi 7682 else 7683 # deplib doesn't seem to be a libtool library 7684 if test prog,link = "$linkmode,$pass"; then 7685 compile_deplibs="$deplib $compile_deplibs" 7686 finalize_deplibs="$deplib $finalize_deplibs" 7687 else 7688 deplibs="$deplib $deplibs" 7689 test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7690 fi 7691 continue 7692 fi 7693 ;; # -l 7694 *.ltframework) 7695 if test prog,link = "$linkmode,$pass"; then 7696 compile_deplibs="$deplib $compile_deplibs" 7697 finalize_deplibs="$deplib $finalize_deplibs" 7698 else 7699 deplibs="$deplib $deplibs" 7700 if test lib = "$linkmode"; then 7701 case "$new_inherited_linker_flags " in 7702 *" $deplib "*) ;; 7703 * ) func_append new_inherited_linker_flags " $deplib" ;; 7704 esac 7705 fi 7706 fi 7707 continue 7708 ;; 7709 -L*) 7710 case $linkmode in 7711 lib) 7712 deplibs="$deplib $deplibs" 7713 test conv = "$pass" && continue 7714 newdependency_libs="$deplib $newdependency_libs" 7715 func_stripname '-L' '' "$deplib" 7716 func_resolve_sysroot "$func_stripname_result" 7717 func_append newlib_search_path " $func_resolve_sysroot_result" 7718 ;; 7719 prog) 7720 if test conv = "$pass"; then 7721 deplibs="$deplib $deplibs" 7722 continue 7723 fi 7724 if test scan = "$pass"; then 7725 deplibs="$deplib $deplibs" 7726 else 7727 compile_deplibs="$deplib $compile_deplibs" 7728 finalize_deplibs="$deplib $finalize_deplibs" 7729 fi 7730 func_stripname '-L' '' "$deplib" 7731 func_resolve_sysroot "$func_stripname_result" 7732 func_append newlib_search_path " $func_resolve_sysroot_result" 7733 ;; 7734 *) 7735 func_warning "'-L' is ignored for archives/objects" 7736 ;; 7737 esac # linkmode 7738 continue 7739 ;; # -L 7740 -R*) 7741 if test link = "$pass"; then 7742 func_stripname '-R' '' "$deplib" 7743 func_resolve_sysroot "$func_stripname_result" 7744 dir=$func_resolve_sysroot_result 7745 # Make sure the xrpath contains only unique directories. 7746 case "$xrpath " in 7747 *" $dir "*) ;; 7748 *) func_append xrpath " $dir" ;; 7749 esac 7750 fi 7751 deplibs="$deplib $deplibs" 7752 continue 7753 ;; 7754 *.la) 7755 func_resolve_sysroot "$deplib" 7756 lib=$func_resolve_sysroot_result 7757 ;; 7758 *.$libext) 7759 if test conv = "$pass"; then 7760 deplibs="$deplib $deplibs" 7761 continue 7762 fi 7763 case $linkmode in 7764 lib) 7765 # Linking convenience modules into shared libraries is allowed, 7766 # but linking other static libraries is non-portable. 7767 case " $dlpreconveniencelibs " in 7768 *" $deplib "*) ;; 7769 *) 7770 valid_a_lib=false 7771 case $deplibs_check_method in 7772 match_pattern*) 7773 set dummy $deplibs_check_method; shift 7774 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7775 if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7776 | $EGREP "$match_pattern_regex" > /dev/null; then 7777 valid_a_lib=: 7778 fi 7779 ;; 7780 pass_all) 7781 valid_a_lib=: 7782 ;; 7783 esac 7784 if $valid_a_lib; then 7785 echo 7786 $ECHO "*** Warning: Linking the shared library $output against the" 7787 $ECHO "*** static library $deplib is not portable!" 7788 deplibs="$deplib $deplibs" 7789 else 7790 echo 7791 $ECHO "*** Warning: Trying to link with static lib archive $deplib." 7792 echo "*** I have the capability to make that library automatically link in when" 7793 echo "*** you link to this library. But I can only do this if you have a" 7794 echo "*** shared version of the library, which you do not appear to have" 7795 echo "*** because the file extensions .$libext of this argument makes me believe" 7796 echo "*** that it is just a static archive that I should not use here." 7797 fi 7798 ;; 7799 esac 7800 continue 7801 ;; 7802 prog) 7803 if test link != "$pass"; then 7804 deplibs="$deplib $deplibs" 7805 else 7806 compile_deplibs="$deplib $compile_deplibs" 7807 finalize_deplibs="$deplib $finalize_deplibs" 7808 fi 7809 continue 7810 ;; 7811 esac # linkmode 7812 ;; # *.$libext 7813 *.lo | *.$objext) 7814 if test conv = "$pass"; then 7815 deplibs="$deplib $deplibs" 7816 elif test prog = "$linkmode"; then 7817 if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 7818 # If there is no dlopen support or we're linking statically, 7819 # we need to preload. 7820 func_append newdlprefiles " $deplib" 7821 compile_deplibs="$deplib $compile_deplibs" 7822 finalize_deplibs="$deplib $finalize_deplibs" 7823 else 7824 func_append newdlfiles " $deplib" 7825 fi 7826 fi 7827 continue 7828 ;; 7829 %DEPLIBS%) 7830 alldeplibs=: 7831 continue 7832 ;; 7833 esac # case $deplib 7834 7835 $found || test -f "$lib" \ 7836 || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 7837 7838 # Check to see that this really is a libtool archive. 7839 func_lalib_unsafe_p "$lib" \ 7840 || func_fatal_error "'$lib' is not a valid libtool archive" 7841 7842 func_dirname "$lib" "" "." 7843 ladir=$func_dirname_result 7844 7845 dlname= 7846 dlopen= 7847 dlpreopen= 7848 libdir= 7849 library_names= 7850 old_library= 7851 inherited_linker_flags= 7852 # If the library was installed with an old release of libtool, 7853 # it will not redefine variables installed, or shouldnotlink 7854 installed=yes 7855 shouldnotlink=no 7856 avoidtemprpath= 7857 7858 7859 # Read the .la file 7860 func_source "$lib" 7861 7862 # Convert "-framework foo" to "foo.ltframework" 7863 if test -n "$inherited_linker_flags"; then 7864 tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 7865 for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 7866 case " $new_inherited_linker_flags " in 7867 *" $tmp_inherited_linker_flag "*) ;; 7868 *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 7869 esac 7870 done 7871 fi 7872 dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7873 if test lib,link = "$linkmode,$pass" || 7874 test prog,scan = "$linkmode,$pass" || 7875 { test prog != "$linkmode" && test lib != "$linkmode"; }; then 7876 test -n "$dlopen" && func_append dlfiles " $dlopen" 7877 test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 7878 fi 7879 7880 if test conv = "$pass"; then 7881 # Only check for convenience libraries 7882 deplibs="$lib $deplibs" 7883 if test -z "$libdir"; then 7884 if test -z "$old_library"; then 7885 func_fatal_error "cannot find name of link library for '$lib'" 7886 fi 7887 # It is a libtool convenience library, so add in its objects. 7888 func_append convenience " $ladir/$objdir/$old_library" 7889 func_append old_convenience " $ladir/$objdir/$old_library" 7890 elif test prog != "$linkmode" && test lib != "$linkmode"; then 7891 func_fatal_error "'$lib' is not a convenience library" 7892 fi 7893 tmp_libs= 7894 for deplib in $dependency_libs; do 7895 deplibs="$deplib $deplibs" 7896 if $opt_preserve_dup_deps; then 7897 case "$tmp_libs " in 7898 *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7899 esac 7900 fi 7901 func_append tmp_libs " $deplib" 7902 done 7903 continue 7904 fi # $pass = conv 7905 7906 7907 # Get the name of the library we link against. 7908 linklib= 7909 if test -n "$old_library" && 7910 { test yes = "$prefer_static_libs" || 7911 test built,no = "$prefer_static_libs,$installed"; }; then 7912 linklib=$old_library 7913 else 7914 for l in $old_library $library_names; do 7915 linklib=$l 7916 done 7917 fi 7918 if test -z "$linklib"; then 7919 func_fatal_error "cannot find name of link library for '$lib'" 7920 fi 7921 7922 # This library was specified with -dlopen. 7923 if test dlopen = "$pass"; then 7924 test -z "$libdir" \ 7925 && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 7926 if test -z "$dlname" || 7927 test yes != "$dlopen_support" || 7928 test no = "$build_libtool_libs" 7929 then 7930 # If there is no dlname, no dlopen support or we're linking 7931 # statically, we need to preload. We also need to preload any 7932 # dependent libraries so libltdl's deplib preloader doesn't 7933 # bomb out in the load deplibs phase. 7934 func_append dlprefiles " $lib $dependency_libs" 7935 else 7936 func_append newdlfiles " $lib" 7937 fi 7938 continue 7939 fi # $pass = dlopen 7940 7941 # We need an absolute path. 7942 case $ladir in 7943 [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 7944 *) 7945 abs_ladir=`cd "$ladir" && pwd` 7946 if test -z "$abs_ladir"; then 7947 func_warning "cannot determine absolute directory name of '$ladir'" 7948 func_warning "passing it literally to the linker, although it might fail" 7949 abs_ladir=$ladir 7950 fi 7951 ;; 7952 esac 7953 func_basename "$lib" 7954 laname=$func_basename_result 7955 7956 # Find the relevant object directory and library name. 7957 if test yes = "$installed"; then 7958 if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7959 func_warning "library '$lib' was moved." 7960 dir=$ladir 7961 absdir=$abs_ladir 7962 libdir=$abs_ladir 7963 else 7964 dir=$lt_sysroot$libdir 7965 absdir=$lt_sysroot$libdir 7966 fi 7967 test yes = "$hardcode_automatic" && avoidtemprpath=yes 7968 else 7969 if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7970 dir=$ladir 7971 absdir=$abs_ladir 7972 # Remove this search path later 7973 func_append notinst_path " $abs_ladir" 7974 else 7975 dir=$ladir/$objdir 7976 absdir=$abs_ladir/$objdir 7977 # Remove this search path later 7978 func_append notinst_path " $abs_ladir" 7979 fi 7980 fi # $installed = yes 7981 func_stripname 'lib' '.la' "$laname" 7982 name=$func_stripname_result 7983 7984 # This library was specified with -dlpreopen. 7985 if test dlpreopen = "$pass"; then 7986 if test -z "$libdir" && test prog = "$linkmode"; then 7987 func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 7988 fi 7989 case $host in 7990 # special handling for platforms with PE-DLLs. 7991 *cygwin* | *mingw* | *cegcc* ) 7992 # Linker will automatically link against shared library if both 7993 # static and shared are present. Therefore, ensure we extract 7994 # symbols from the import library if a shared library is present 7995 # (otherwise, the dlopen module name will be incorrect). We do 7996 # this by putting the import library name into $newdlprefiles. 7997 # We recover the dlopen module name by 'saving' the la file 7998 # name in a special purpose variable, and (later) extracting the 7999 # dlname from the la file. 8000 if test -n "$dlname"; then 8001 func_tr_sh "$dir/$linklib" 8002 eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8003 func_append newdlprefiles " $dir/$linklib" 8004 else 8005 func_append newdlprefiles " $dir/$old_library" 8006 # Keep a list of preopened convenience libraries to check 8007 # that they are being used correctly in the link pass. 8008 test -z "$libdir" && \ 8009 func_append dlpreconveniencelibs " $dir/$old_library" 8010 fi 8011 ;; 8012 * ) 8013 # Prefer using a static library (so that no silly _DYNAMIC symbols 8014 # are required to link). 8015 if test -n "$old_library"; then 8016 func_append newdlprefiles " $dir/$old_library" 8017 # Keep a list of preopened convenience libraries to check 8018 # that they are being used correctly in the link pass. 8019 test -z "$libdir" && \ 8020 func_append dlpreconveniencelibs " $dir/$old_library" 8021 # Otherwise, use the dlname, so that lt_dlopen finds it. 8022 elif test -n "$dlname"; then 8023 func_append newdlprefiles " $dir/$dlname" 8024 else 8025 func_append newdlprefiles " $dir/$linklib" 8026 fi 8027 ;; 8028 esac 8029 fi # $pass = dlpreopen 8030 8031 if test -z "$libdir"; then 8032 # Link the convenience library 8033 if test lib = "$linkmode"; then 8034 deplibs="$dir/$old_library $deplibs" 8035 elif test prog,link = "$linkmode,$pass"; then 8036 compile_deplibs="$dir/$old_library $compile_deplibs" 8037 finalize_deplibs="$dir/$old_library $finalize_deplibs" 8038 else 8039 deplibs="$lib $deplibs" # used for prog,scan pass 8040 fi 8041 continue 8042 fi 8043 8044 8045 if test prog = "$linkmode" && test link != "$pass"; then 8046 func_append newlib_search_path " $ladir" 8047 deplibs="$lib $deplibs" 8048 8049 linkalldeplibs=false 8050 if test no != "$link_all_deplibs" || test -z "$library_names" || 8051 test no = "$build_libtool_libs"; then 8052 linkalldeplibs=: 8053 fi 8054 8055 tmp_libs= 8056 for deplib in $dependency_libs; do 8057 case $deplib in 8058 -L*) func_stripname '-L' '' "$deplib" 8059 func_resolve_sysroot "$func_stripname_result" 8060 func_append newlib_search_path " $func_resolve_sysroot_result" 8061 ;; 8062 esac 8063 # Need to link against all dependency_libs? 8064 if $linkalldeplibs; then 8065 deplibs="$deplib $deplibs" 8066 else 8067 # Need to hardcode shared library paths 8068 # or/and link against static libraries 8069 newdependency_libs="$deplib $newdependency_libs" 8070 fi 8071 if $opt_preserve_dup_deps; then 8072 case "$tmp_libs " in 8073 *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8074 esac 8075 fi 8076 func_append tmp_libs " $deplib" 8077 done # for deplib 8078 continue 8079 fi # $linkmode = prog... 8080 8081 if test prog,link = "$linkmode,$pass"; then 8082 if test -n "$library_names" && 8083 { { test no = "$prefer_static_libs" || 8084 test built,yes = "$prefer_static_libs,$installed"; } || 8085 test -z "$old_library"; }; then 8086 # We need to hardcode the library path 8087 if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8088 # Make sure the rpath contains only unique directories. 8089 case $temp_rpath: in 8090 *"$absdir:"*) ;; 8091 *) func_append temp_rpath "$absdir:" ;; 8092 esac 8093 fi 8094 8095 # Hardcode the library path. 8096 # Skip directories that are in the system default run-time 8097 # search path. 8098 case " $sys_lib_dlsearch_path " in 8099 *" $absdir "*) ;; 8100 *) 8101 case "$compile_rpath " in 8102 *" $absdir "*) ;; 8103 *) func_append compile_rpath " $absdir" ;; 8104 esac 8105 ;; 8106 esac 8107 case " $sys_lib_dlsearch_path " in 8108 *" $libdir "*) ;; 8109 *) 8110 case "$finalize_rpath " in 8111 *" $libdir "*) ;; 8112 *) func_append finalize_rpath " $libdir" ;; 8113 esac 8114 ;; 8115 esac 8116 fi # $linkmode,$pass = prog,link... 8117 8118 if $alldeplibs && 8119 { test pass_all = "$deplibs_check_method" || 8120 { test yes = "$build_libtool_libs" && 8121 test -n "$library_names"; }; }; then 8122 # We only need to search for static libraries 8123 continue 8124 fi 8125 fi 8126 8127 link_static=no # Whether the deplib will be linked statically 8128 use_static_libs=$prefer_static_libs 8129 if test built = "$use_static_libs" && test yes = "$installed"; then 8130 use_static_libs=no 8131 fi 8132 if test -n "$library_names" && 8133 { test no = "$use_static_libs" || test -z "$old_library"; }; then 8134 case $host in 8135 *cygwin* | *mingw* | *cegcc* | *os2*) 8136 # No point in relinking DLLs because paths are not encoded 8137 func_append notinst_deplibs " $lib" 8138 need_relink=no 8139 ;; 8140 *) 8141 if test no = "$installed"; then 8142 func_append notinst_deplibs " $lib" 8143 need_relink=yes 8144 fi 8145 ;; 8146 esac 8147 # This is a shared library 8148 8149 # Warn about portability, can't link against -module's on some 8150 # systems (darwin). Don't bleat about dlopened modules though! 8151 dlopenmodule= 8152 for dlpremoduletest in $dlprefiles; do 8153 if test "X$dlpremoduletest" = "X$lib"; then 8154 dlopenmodule=$dlpremoduletest 8155 break 8156 fi 8157 done 8158 if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8159 echo 8160 if test prog = "$linkmode"; then 8161 $ECHO "*** Warning: Linking the executable $output against the loadable module" 8162 else 8163 $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8164 fi 8165 $ECHO "*** $linklib is not portable!" 8166 fi 8167 if test lib = "$linkmode" && 8168 test yes = "$hardcode_into_libs"; then 8169 # Hardcode the library path. 8170 # Skip directories that are in the system default run-time 8171 # search path. 8172 case " $sys_lib_dlsearch_path " in 8173 *" $absdir "*) ;; 8174 *) 8175 case "$compile_rpath " in 8176 *" $absdir "*) ;; 8177 *) func_append compile_rpath " $absdir" ;; 8178 esac 8179 ;; 8180 esac 8181 case " $sys_lib_dlsearch_path " in 8182 *" $libdir "*) ;; 8183 *) 8184 case "$finalize_rpath " in 8185 *" $libdir "*) ;; 8186 *) func_append finalize_rpath " $libdir" ;; 8187 esac 8188 ;; 8189 esac 8190 fi 8191 8192 if test -n "$old_archive_from_expsyms_cmds"; then 8193 # figure out the soname 8194 set dummy $library_names 8195 shift 8196 realname=$1 8197 shift 8198 libname=`eval "\\$ECHO \"$libname_spec\""` 8199 # use dlname if we got it. it's perfectly good, no? 8200 if test -n "$dlname"; then 8201 soname=$dlname 8202 elif test -n "$soname_spec"; then 8203 # bleh windows 8204 case $host in 8205 *cygwin* | mingw* | *cegcc* | *os2*) 8206 func_arith $current - $age 8207 major=$func_arith_result 8208 versuffix=-$major 8209 ;; 8210 esac 8211 eval soname=\"$soname_spec\" 8212 else 8213 soname=$realname 8214 fi 8215 8216 # Make a new name for the extract_expsyms_cmds to use 8217 soroot=$soname 8218 func_basename "$soroot" 8219 soname=$func_basename_result 8220 func_stripname 'lib' '.dll' "$soname" 8221 newlib=libimp-$func_stripname_result.a 8222 8223 # If the library has no export list, then create one now 8224 if test -f "$output_objdir/$soname-def"; then : 8225 else 8226 func_verbose "extracting exported symbol list from '$soname'" 8227 func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8228 fi 8229 8230 # Create $newlib 8231 if test -f "$output_objdir/$newlib"; then :; else 8232 func_verbose "generating import library for '$soname'" 8233 func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8234 fi 8235 # make sure the library variables are pointing to the new library 8236 dir=$output_objdir 8237 linklib=$newlib 8238 fi # test -n "$old_archive_from_expsyms_cmds" 8239 8240 if test prog = "$linkmode" || test relink != "$opt_mode"; then 8241 add_shlibpath= 8242 add_dir= 8243 add= 8244 lib_linked=yes 8245 case $hardcode_action in 8246 immediate | unsupported) 8247 if test no = "$hardcode_direct"; then 8248 add=$dir/$linklib 8249 case $host in 8250 *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8251 *-*-sysv4*uw2*) add_dir=-L$dir ;; 8252 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8253 *-*-unixware7*) add_dir=-L$dir ;; 8254 *-*-darwin* ) 8255 # if the lib is a (non-dlopened) module then we cannot 8256 # link against it, someone is ignoring the earlier warnings 8257 if /usr/bin/file -L $add 2> /dev/null | 8258 $GREP ": [^:]* bundle" >/dev/null; then 8259 if test "X$dlopenmodule" != "X$lib"; then 8260 $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8261 if test -z "$old_library"; then 8262 echo 8263 echo "*** And there doesn't seem to be a static archive available" 8264 echo "*** The link will probably fail, sorry" 8265 else 8266 add=$dir/$old_library 8267 fi 8268 elif test -n "$old_library"; then 8269 add=$dir/$old_library 8270 fi 8271 fi 8272 esac 8273 elif test no = "$hardcode_minus_L"; then 8274 case $host in 8275 *-*-sunos*) add_shlibpath=$dir ;; 8276 esac 8277 add_dir=-L$dir 8278 add=-l$name 8279 elif test no = "$hardcode_shlibpath_var"; then 8280 add_shlibpath=$dir 8281 add=-l$name 8282 else 8283 lib_linked=no 8284 fi 8285 ;; 8286 relink) 8287 if test yes = "$hardcode_direct" && 8288 test no = "$hardcode_direct_absolute"; then 8289 add=$dir/$linklib 8290 elif test yes = "$hardcode_minus_L"; then 8291 add_dir=-L$absdir 8292 # Try looking first in the location we're being installed to. 8293 if test -n "$inst_prefix_dir"; then 8294 case $libdir in 8295 [\\/]*) 8296 func_append add_dir " -L$inst_prefix_dir$libdir" 8297 ;; 8298 esac 8299 fi 8300 add=-l$name 8301 elif test yes = "$hardcode_shlibpath_var"; then 8302 add_shlibpath=$dir 8303 add=-l$name 8304 else 8305 lib_linked=no 8306 fi 8307 ;; 8308 *) lib_linked=no ;; 8309 esac 8310 8311 if test yes != "$lib_linked"; then 8312 func_fatal_configuration "unsupported hardcode properties" 8313 fi 8314 8315 if test -n "$add_shlibpath"; then 8316 case :$compile_shlibpath: in 8317 *":$add_shlibpath:"*) ;; 8318 *) func_append compile_shlibpath "$add_shlibpath:" ;; 8319 esac 8320 fi 8321 if test prog = "$linkmode"; then 8322 test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8323 test -n "$add" && compile_deplibs="$add $compile_deplibs" 8324 else 8325 test -n "$add_dir" && deplibs="$add_dir $deplibs" 8326 test -n "$add" && deplibs="$add $deplibs" 8327 if test yes != "$hardcode_direct" && 8328 test yes != "$hardcode_minus_L" && 8329 test yes = "$hardcode_shlibpath_var"; then 8330 case :$finalize_shlibpath: in 8331 *":$libdir:"*) ;; 8332 *) func_append finalize_shlibpath "$libdir:" ;; 8333 esac 8334 fi 8335 fi 8336 fi 8337 8338 if test prog = "$linkmode" || test relink = "$opt_mode"; then 8339 add_shlibpath= 8340 add_dir= 8341 add= 8342 # Finalize command for both is simple: just hardcode it. 8343 if test yes = "$hardcode_direct" && 8344 test no = "$hardcode_direct_absolute"; then 8345 add=$libdir/$linklib 8346 elif test yes = "$hardcode_minus_L"; then 8347 add_dir=-L$libdir 8348 add=-l$name 8349 elif test yes = "$hardcode_shlibpath_var"; then 8350 case :$finalize_shlibpath: in 8351 *":$libdir:"*) ;; 8352 *) func_append finalize_shlibpath "$libdir:" ;; 8353 esac 8354 add=-l$name 8355 elif test yes = "$hardcode_automatic"; then 8356 if test -n "$inst_prefix_dir" && 8357 test -f "$inst_prefix_dir$libdir/$linklib"; then 8358 add=$inst_prefix_dir$libdir/$linklib 8359 else 8360 add=$libdir/$linklib 8361 fi 8362 else 8363 # We cannot seem to hardcode it, guess we'll fake it. 8364 add_dir=-L$libdir 8365 # Try looking first in the location we're being installed to. 8366 if test -n "$inst_prefix_dir"; then 8367 case $libdir in 8368 [\\/]*) 8369 func_append add_dir " -L$inst_prefix_dir$libdir" 8370 ;; 8371 esac 8372 fi 8373 add=-l$name 8374 fi 8375 8376 if test prog = "$linkmode"; then 8377 test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8378 test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8379 else 8380 test -n "$add_dir" && deplibs="$add_dir $deplibs" 8381 test -n "$add" && deplibs="$add $deplibs" 8382 fi 8383 fi 8384 elif test prog = "$linkmode"; then 8385 # Here we assume that one of hardcode_direct or hardcode_minus_L 8386 # is not unsupported. This is valid on all known static and 8387 # shared platforms. 8388 if test unsupported != "$hardcode_direct"; then 8389 test -n "$old_library" && linklib=$old_library 8390 compile_deplibs="$dir/$linklib $compile_deplibs" 8391 finalize_deplibs="$dir/$linklib $finalize_deplibs" 8392 else 8393 compile_deplibs="-l$name -L$dir $compile_deplibs" 8394 finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8395 fi 8396 elif test yes = "$build_libtool_libs"; then 8397 # Not a shared library 8398 if test pass_all != "$deplibs_check_method"; then 8399 # We're trying link a shared library against a static one 8400 # but the system doesn't support it. 8401 8402 # Just print a warning and add the library to dependency_libs so 8403 # that the program can be linked against the static library. 8404 echo 8405 $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8406 echo "*** I have the capability to make that library automatically link in when" 8407 echo "*** you link to this library. But I can only do this if you have a" 8408 echo "*** shared version of the library, which you do not appear to have." 8409 if test yes = "$module"; then 8410 echo "*** But as you try to build a module library, libtool will still create " 8411 echo "*** a static module, that should work as long as the dlopening application" 8412 echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8413 if test -z "$global_symbol_pipe"; then 8414 echo 8415 echo "*** However, this would only work if libtool was able to extract symbol" 8416 echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8417 echo "*** not find such a program. So, this module is probably useless." 8418 echo "*** 'nm' from GNU binutils and a full rebuild may help." 8419 fi 8420 if test no = "$build_old_libs"; then 8421 build_libtool_libs=module 8422 build_old_libs=yes 8423 else 8424 build_libtool_libs=no 8425 fi 8426 fi 8427 else 8428 deplibs="$dir/$old_library $deplibs" 8429 link_static=yes 8430 fi 8431 fi # link shared/static library? 8432 8433 if test lib = "$linkmode"; then 8434 if test -n "$dependency_libs" && 8435 { test yes != "$hardcode_into_libs" || 8436 test yes = "$build_old_libs" || 8437 test yes = "$link_static"; }; then 8438 # Extract -R from dependency_libs 8439 temp_deplibs= 8440 for libdir in $dependency_libs; do 8441 case $libdir in 8442 -R*) func_stripname '-R' '' "$libdir" 8443 temp_xrpath=$func_stripname_result 8444 case " $xrpath " in 8445 *" $temp_xrpath "*) ;; 8446 *) func_append xrpath " $temp_xrpath";; 8447 esac;; 8448 *) func_append temp_deplibs " $libdir";; 8449 esac 8450 done 8451 dependency_libs=$temp_deplibs 8452 fi 8453 8454 func_append newlib_search_path " $absdir" 8455 # Link against this library 8456 test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8457 # ... and its dependency_libs 8458 tmp_libs= 8459 for deplib in $dependency_libs; do 8460 newdependency_libs="$deplib $newdependency_libs" 8461 case $deplib in 8462 -L*) func_stripname '-L' '' "$deplib" 8463 func_resolve_sysroot "$func_stripname_result";; 8464 *) func_resolve_sysroot "$deplib" ;; 8465 esac 8466 if $opt_preserve_dup_deps; then 8467 case "$tmp_libs " in 8468 *" $func_resolve_sysroot_result "*) 8469 func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8470 esac 8471 fi 8472 func_append tmp_libs " $func_resolve_sysroot_result" 8473 done 8474 8475 if test no != "$link_all_deplibs"; then 8476 # Add the search paths of all dependency libraries 8477 for deplib in $dependency_libs; do 8478 path= 8479 case $deplib in 8480 -L*) path=$deplib ;; 8481 *.la) 8482 func_resolve_sysroot "$deplib" 8483 deplib=$func_resolve_sysroot_result 8484 func_dirname "$deplib" "" "." 8485 dir=$func_dirname_result 8486 # We need an absolute path. 8487 case $dir in 8488 [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8489 *) 8490 absdir=`cd "$dir" && pwd` 8491 if test -z "$absdir"; then 8492 func_warning "cannot determine absolute directory name of '$dir'" 8493 absdir=$dir 8494 fi 8495 ;; 8496 esac 8497 if $GREP "^installed=no" $deplib > /dev/null; then 8498 case $host in 8499 *-*-darwin*) 8500 depdepl= 8501 eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8502 if test -n "$deplibrary_names"; then 8503 for tmp in $deplibrary_names; do 8504 depdepl=$tmp 8505 done 8506 if test -f "$absdir/$objdir/$depdepl"; then 8507 depdepl=$absdir/$objdir/$depdepl 8508 darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8509 if test -z "$darwin_install_name"; then 8510 darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8511 fi 8512 func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8513 func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8514 path= 8515 fi 8516 fi 8517 ;; 8518 *) 8519 path=-L$absdir/$objdir 8520 ;; 8521 esac 8522 else 8523 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8524 test -z "$libdir" && \ 8525 func_fatal_error "'$deplib' is not a valid libtool archive" 8526 test "$absdir" != "$libdir" && \ 8527 func_warning "'$deplib' seems to be moved" 8528 8529 path=-L$absdir 8530 fi 8531 ;; 8532 esac 8533 case " $deplibs " in 8534 *" $path "*) ;; 8535 *) deplibs="$path $deplibs" ;; 8536 esac 8537 done 8538 fi # link_all_deplibs != no 8539 fi # linkmode = lib 8540 done # for deplib in $libs 8541 if test link = "$pass"; then 8542 if test prog = "$linkmode"; then 8543 compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8544 finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8545 else 8546 compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8547 fi 8548 fi 8549 dependency_libs=$newdependency_libs 8550 if test dlpreopen = "$pass"; then 8551 # Link the dlpreopened libraries before other libraries 8552 for deplib in $save_deplibs; do 8553 deplibs="$deplib $deplibs" 8554 done 8555 fi 8556 if test dlopen != "$pass"; then 8557 test conv = "$pass" || { 8558 # Make sure lib_search_path contains only unique directories. 8559 lib_search_path= 8560 for dir in $newlib_search_path; do 8561 case "$lib_search_path " in 8562 *" $dir "*) ;; 8563 *) func_append lib_search_path " $dir" ;; 8564 esac 8565 done 8566 newlib_search_path= 8567 } 8568 8569 if test prog,link = "$linkmode,$pass"; then 8570 vars="compile_deplibs finalize_deplibs" 8571 else 8572 vars=deplibs 8573 fi 8574 for var in $vars dependency_libs; do 8575 # Add libraries to $var in reverse order 8576 eval tmp_libs=\"\$$var\" 8577 new_libs= 8578 for deplib in $tmp_libs; do 8579 # FIXME: Pedantically, this is the right thing to do, so 8580 # that some nasty dependency loop isn't accidentally 8581 # broken: 8582 #new_libs="$deplib $new_libs" 8583 # Pragmatically, this seems to cause very few problems in 8584 # practice: 8585 case $deplib in 8586 -L*) new_libs="$deplib $new_libs" ;; 8587 -R*) ;; 8588 *) 8589 # And here is the reason: when a library appears more 8590 # than once as an explicit dependence of a library, or 8591 # is implicitly linked in more than once by the 8592 # compiler, it is considered special, and multiple 8593 # occurrences thereof are not removed. Compare this 8594 # with having the same library being listed as a 8595 # dependency of multiple other libraries: in this case, 8596 # we know (pedantically, we assume) the library does not 8597 # need to be listed more than once, so we keep only the 8598 # last copy. This is not always right, but it is rare 8599 # enough that we require users that really mean to play 8600 # such unportable linking tricks to link the library 8601 # using -Wl,-lname, so that libtool does not consider it 8602 # for duplicate removal. 8603 case " $specialdeplibs " in 8604 *" $deplib "*) new_libs="$deplib $new_libs" ;; 8605 *) 8606 case " $new_libs " in 8607 *" $deplib "*) ;; 8608 *) new_libs="$deplib $new_libs" ;; 8609 esac 8610 ;; 8611 esac 8612 ;; 8613 esac 8614 done 8615 tmp_libs= 8616 for deplib in $new_libs; do 8617 case $deplib in 8618 -L*) 8619 case " $tmp_libs " in 8620 *" $deplib "*) ;; 8621 *) func_append tmp_libs " $deplib" ;; 8622 esac 8623 ;; 8624 *) func_append tmp_libs " $deplib" ;; 8625 esac 8626 done 8627 eval $var=\"$tmp_libs\" 8628 done # for var 8629 fi 8630 8631 # Add Sun CC postdeps if required: 8632 test CXX = "$tagname" && { 8633 case $host_os in 8634 linux*) 8635 case `$CC -V 2>&1 | sed 5q` in 8636 *Sun\ C*) # Sun C++ 5.9 8637 func_suncc_cstd_abi 8638 8639 if test no != "$suncc_use_cstd_abi"; then 8640 func_append postdeps ' -library=Cstd -library=Crun' 8641 fi 8642 ;; 8643 esac 8644 ;; 8645 8646 solaris*) 8647 func_cc_basename "$CC" 8648 case $func_cc_basename_result in 8649 CC* | sunCC*) 8650 func_suncc_cstd_abi 8651 8652 if test no != "$suncc_use_cstd_abi"; then 8653 func_append postdeps ' -library=Cstd -library=Crun' 8654 fi 8655 ;; 8656 esac 8657 ;; 8658 esac 8659 } 8660 8661 # Last step: remove runtime libs from dependency_libs 8662 # (they stay in deplibs) 8663 tmp_libs= 8664 for i in $dependency_libs; do 8665 case " $predeps $postdeps $compiler_lib_search_path " in 8666 *" $i "*) 8667 i= 8668 ;; 8669 esac 8670 if test -n "$i"; then 8671 func_append tmp_libs " $i" 8672 fi 8673 done 8674 dependency_libs=$tmp_libs 8675 done # for pass 8676 if test prog = "$linkmode"; then 8677 dlfiles=$newdlfiles 8678 fi 8679 if test prog = "$linkmode" || test lib = "$linkmode"; then 8680 dlprefiles=$newdlprefiles 8681 fi 8682 8683 case $linkmode in 8684 oldlib) 8685 if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8686 func_warning "'-dlopen' is ignored for archives" 8687 fi 8688 8689 case " $deplibs" in 8690 *\ -l* | *\ -L*) 8691 func_warning "'-l' and '-L' are ignored for archives" ;; 8692 esac 8693 8694 test -n "$rpath" && \ 8695 func_warning "'-rpath' is ignored for archives" 8696 8697 test -n "$xrpath" && \ 8698 func_warning "'-R' is ignored for archives" 8699 8700 test -n "$vinfo" && \ 8701 func_warning "'-version-info/-version-number' is ignored for archives" 8702 8703 test -n "$release" && \ 8704 func_warning "'-release' is ignored for archives" 8705 8706 test -n "$export_symbols$export_symbols_regex" && \ 8707 func_warning "'-export-symbols' is ignored for archives" 8708 8709 # Now set the variables for building old libraries. 8710 build_libtool_libs=no 8711 oldlibs=$output 8712 func_append objs "$old_deplibs" 8713 ;; 8714 8715 lib) 8716 # Make sure we only generate libraries of the form 'libNAME.la'. 8717 case $outputname in 8718 lib*) 8719 func_stripname 'lib' '.la' "$outputname" 8720 name=$func_stripname_result 8721 eval shared_ext=\"$shrext_cmds\" 8722 eval libname=\"$libname_spec\" 8723 ;; 8724 *) 8725 test no = "$module" \ 8726 && func_fatal_help "libtool library '$output' must begin with 'lib'" 8727 8728 if test no != "$need_lib_prefix"; then 8729 # Add the "lib" prefix for modules if required 8730 func_stripname '' '.la' "$outputname" 8731 name=$func_stripname_result 8732 eval shared_ext=\"$shrext_cmds\" 8733 eval libname=\"$libname_spec\" 8734 else 8735 func_stripname '' '.la' "$outputname" 8736 libname=$func_stripname_result 8737 fi 8738 ;; 8739 esac 8740 8741 if test -n "$objs"; then 8742 if test pass_all != "$deplibs_check_method"; then 8743 func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8744 else 8745 echo 8746 $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8747 $ECHO "*** objects $objs is not portable!" 8748 func_append libobjs " $objs" 8749 fi 8750 fi 8751 8752 test no = "$dlself" \ 8753 || func_warning "'-dlopen self' is ignored for libtool libraries" 8754 8755 set dummy $rpath 8756 shift 8757 test 1 -lt "$#" \ 8758 && func_warning "ignoring multiple '-rpath's for a libtool library" 8759 8760 install_libdir=$1 8761 8762 oldlibs= 8763 if test -z "$rpath"; then 8764 if test yes = "$build_libtool_libs"; then 8765 # Building a libtool convenience library. 8766 # Some compilers have problems with a '.al' extension so 8767 # convenience libraries should have the same extension an 8768 # archive normally would. 8769 oldlibs="$output_objdir/$libname.$libext $oldlibs" 8770 build_libtool_libs=convenience 8771 build_old_libs=yes 8772 fi 8773 8774 test -n "$vinfo" && \ 8775 func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8776 8777 test -n "$release" && \ 8778 func_warning "'-release' is ignored for convenience libraries" 8779 else 8780 8781 # Parse the version information argument. 8782 save_ifs=$IFS; IFS=: 8783 set dummy $vinfo 0 0 0 8784 shift 8785 IFS=$save_ifs 8786 8787 test -n "$7" && \ 8788 func_fatal_help "too many parameters to '-version-info'" 8789 8790 # convert absolute version numbers to libtool ages 8791 # this retains compatibility with .la files and attempts 8792 # to make the code below a bit more comprehensible 8793 8794 case $vinfo_number in 8795 yes) 8796 number_major=$1 8797 number_minor=$2 8798 number_revision=$3 8799 # 8800 # There are really only two kinds -- those that 8801 # use the current revision as the major version 8802 # and those that subtract age and use age as 8803 # a minor version. But, then there is irix 8804 # that has an extra 1 added just for fun 8805 # 8806 case $version_type in 8807 # correct linux to gnu/linux during the next big refactor 8808 darwin|freebsd-elf|linux|osf|windows|none) 8809 func_arith $number_major + $number_minor 8810 current=$func_arith_result 8811 age=$number_minor 8812 revision=$number_revision 8813 ;; 8814 freebsd-aout|qnx|sunos) 8815 current=$number_major 8816 revision=$number_minor 8817 age=0 8818 ;; 8819 irix|nonstopux) 8820 func_arith $number_major + $number_minor 8821 current=$func_arith_result 8822 age=$number_minor 8823 revision=$number_minor 8824 lt_irix_increment=no 8825 ;; 8826 esac 8827 ;; 8828 no) 8829 current=$1 8830 revision=$2 8831 age=$3 8832 ;; 8833 esac 8834 8835 # Check that each of the things are valid numbers. 8836 case $current in 8837 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]) ;; 8838 *) 8839 func_error "CURRENT '$current' must be a nonnegative integer" 8840 func_fatal_error "'$vinfo' is not valid version information" 8841 ;; 8842 esac 8843 8844 case $revision in 8845 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]) ;; 8846 *) 8847 func_error "REVISION '$revision' must be a nonnegative integer" 8848 func_fatal_error "'$vinfo' is not valid version information" 8849 ;; 8850 esac 8851 8852 case $age in 8853 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]) ;; 8854 *) 8855 func_error "AGE '$age' must be a nonnegative integer" 8856 func_fatal_error "'$vinfo' is not valid version information" 8857 ;; 8858 esac 8859 8860 if test "$age" -gt "$current"; then 8861 func_error "AGE '$age' is greater than the current interface number '$current'" 8862 func_fatal_error "'$vinfo' is not valid version information" 8863 fi 8864 8865 # Calculate the version variables. 8866 major= 8867 versuffix= 8868 verstring= 8869 case $version_type in 8870 none) ;; 8871 8872 darwin) 8873 # Like Linux, but with the current version available in 8874 # verstring for coding it into the library header 8875 func_arith $current - $age 8876 major=.$func_arith_result 8877 versuffix=$major.$age.$revision 8878 # Darwin ld doesn't like 0 for these options... 8879 func_arith $current + 1 8880 minor_current=$func_arith_result 8881 xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8882 verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8883 # On Darwin other compilers 8884 case $CC in 8885 nagfor*) 8886 verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8887 ;; 8888 *) 8889 verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8890 ;; 8891 esac 8892 ;; 8893 8894 freebsd-aout) 8895 major=.$current 8896 versuffix=.$current.$revision 8897 ;; 8898 8899 freebsd-elf) 8900 func_arith $current - $age 8901 major=.$func_arith_result 8902 versuffix=$major.$age.$revision 8903 ;; 8904 8905 irix | nonstopux) 8906 if test no = "$lt_irix_increment"; then 8907 func_arith $current - $age 8908 else 8909 func_arith $current - $age + 1 8910 fi 8911 major=$func_arith_result 8912 8913 case $version_type in 8914 nonstopux) verstring_prefix=nonstopux ;; 8915 *) verstring_prefix=sgi ;; 8916 esac 8917 verstring=$verstring_prefix$major.$revision 8918 8919 # Add in all the interfaces that we are compatible with. 8920 loop=$revision 8921 while test 0 -ne "$loop"; do 8922 func_arith $revision - $loop 8923 iface=$func_arith_result 8924 func_arith $loop - 1 8925 loop=$func_arith_result 8926 verstring=$verstring_prefix$major.$iface:$verstring 8927 done 8928 8929 # Before this point, $major must not contain '.'. 8930 major=.$major 8931 versuffix=$major.$revision 8932 ;; 8933 8934 linux) # correct to gnu/linux during the next big refactor 8935 func_arith $current - $age 8936 major=.$func_arith_result 8937 versuffix=$major.$age.$revision 8938 ;; 8939 8940 osf) 8941 func_arith $current - $age 8942 major=.$func_arith_result 8943 versuffix=.$current.$age.$revision 8944 verstring=$current.$age.$revision 8945 8946 # Add in all the interfaces that we are compatible with. 8947 loop=$age 8948 while test 0 -ne "$loop"; do 8949 func_arith $current - $loop 8950 iface=$func_arith_result 8951 func_arith $loop - 1 8952 loop=$func_arith_result 8953 verstring=$verstring:$iface.0 8954 done 8955 8956 # Make executables depend on our current version. 8957 func_append verstring ":$current.0" 8958 ;; 8959 8960 qnx) 8961 major=.$current 8962 versuffix=.$current 8963 ;; 8964 8965 sco) 8966 major=.$current 8967 versuffix=.$current 8968 ;; 8969 8970 sunos) 8971 major=.$current 8972 versuffix=.$current.$revision 8973 ;; 8974 8975 windows) 8976 # Use '-' rather than '.', since we only want one 8977 # extension on DOS 8.3 file systems. 8978 func_arith $current - $age 8979 major=$func_arith_result 8980 versuffix=-$major 8981 ;; 8982 8983 *) 8984 func_fatal_configuration "unknown library version type '$version_type'" 8985 ;; 8986 esac 8987 8988 # Clear the version info if we defaulted, and they specified a release. 8989 if test -z "$vinfo" && test -n "$release"; then 8990 major= 8991 case $version_type in 8992 darwin) 8993 # we can't check for "0.0" in archive_cmds due to quoting 8994 # problems, so we reset it completely 8995 verstring= 8996 ;; 8997 *) 8998 verstring=0.0 8999 ;; 9000 esac 9001 if test no = "$need_version"; then 9002 versuffix= 9003 else 9004 versuffix=.0.0 9005 fi 9006 fi 9007 9008 # Remove version info from name if versioning should be avoided 9009 if test yes,no = "$avoid_version,$need_version"; then 9010 major= 9011 versuffix= 9012 verstring= 9013 fi 9014 9015 # Check to see if the archive will have undefined symbols. 9016 if test yes = "$allow_undefined"; then 9017 if test unsupported = "$allow_undefined_flag"; then 9018 if test yes = "$build_old_libs"; then 9019 func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9020 build_libtool_libs=no 9021 else 9022 func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9023 fi 9024 fi 9025 else 9026 # Don't allow undefined symbols. 9027 allow_undefined_flag=$no_undefined_flag 9028 fi 9029 9030 fi 9031 9032 func_generate_dlsyms "$libname" "$libname" : 9033 func_append libobjs " $symfileobj" 9034 test " " = "$libobjs" && libobjs= 9035 9036 if test relink != "$opt_mode"; then 9037 # Remove our outputs, but don't remove object files since they 9038 # may have been created when compiling PIC objects. 9039 removelist= 9040 tempremovelist=`$ECHO "$output_objdir/*"` 9041 for p in $tempremovelist; do 9042 case $p in 9043 *.$objext | *.gcno) 9044 ;; 9045 $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9046 if test -n "$precious_files_regex"; then 9047 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9048 then 9049 continue 9050 fi 9051 fi 9052 func_append removelist " $p" 9053 ;; 9054 *) ;; 9055 esac 9056 done 9057 test -n "$removelist" && \ 9058 func_show_eval "${RM}r \$removelist" 9059 fi 9060 9061 # Now set the variables for building old libraries. 9062 if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9063 func_append oldlibs " $output_objdir/$libname.$libext" 9064 9065 # Transform .lo files to .o files. 9066 oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9067 fi 9068 9069 # Eliminate all temporary directories. 9070 #for path in $notinst_path; do 9071 # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9072 # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9073 # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9074 #done 9075 9076 if test -n "$xrpath"; then 9077 # If the user specified any rpath flags, then add them. 9078 temp_xrpath= 9079 for libdir in $xrpath; do 9080 func_replace_sysroot "$libdir" 9081 func_append temp_xrpath " -R$func_replace_sysroot_result" 9082 case "$finalize_rpath " in 9083 *" $libdir "*) ;; 9084 *) func_append finalize_rpath " $libdir" ;; 9085 esac 9086 done 9087 if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9088 dependency_libs="$temp_xrpath $dependency_libs" 9089 fi 9090 fi 9091 9092 # Make sure dlfiles contains only unique files that won't be dlpreopened 9093 old_dlfiles=$dlfiles 9094 dlfiles= 9095 for lib in $old_dlfiles; do 9096 case " $dlprefiles $dlfiles " in 9097 *" $lib "*) ;; 9098 *) func_append dlfiles " $lib" ;; 9099 esac 9100 done 9101 9102 # Make sure dlprefiles contains only unique files 9103 old_dlprefiles=$dlprefiles 9104 dlprefiles= 9105 for lib in $old_dlprefiles; do 9106 case "$dlprefiles " in 9107 *" $lib "*) ;; 9108 *) func_append dlprefiles " $lib" ;; 9109 esac 9110 done 9111 9112 if test yes = "$build_libtool_libs"; then 9113 if test -n "$rpath"; then 9114 case $host in 9115 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9116 # these systems don't actually have a c library (as such)! 9117 ;; 9118 *-*-rhapsody* | *-*-darwin1.[012]) 9119 # Rhapsody C library is in the System framework 9120 func_append deplibs " System.ltframework" 9121 ;; 9122 *-*-netbsd*) 9123 # Don't link with libc until the a.out ld.so is fixed. 9124 ;; 9125 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9126 # Do not include libc due to us having libc/libc_r. 9127 ;; 9128 *-*-sco3.2v5* | *-*-sco5v6*) 9129 # Causes problems with __ctype 9130 ;; 9131 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9132 # Compiler inserts libc in the correct place for threads to work 9133 ;; 9134 *) 9135 # Add libc to deplibs on all other systems if necessary. 9136 if test yes = "$build_libtool_need_lc"; then 9137 func_append deplibs " -lc" 9138 fi 9139 ;; 9140 esac 9141 fi 9142 9143 # Transform deplibs into only deplibs that can be linked in shared. 9144 name_save=$name 9145 libname_save=$libname 9146 release_save=$release 9147 versuffix_save=$versuffix 9148 major_save=$major 9149 # I'm not sure if I'm treating the release correctly. I think 9150 # release should show up in the -l (ie -lgmp5) so we don't want to 9151 # add it in twice. Is that correct? 9152 release= 9153 versuffix= 9154 major= 9155 newdeplibs= 9156 droppeddeps=no 9157 case $deplibs_check_method in 9158 pass_all) 9159 # Don't check for shared/static. Everything works. 9160 # This might be a little naive. We might want to check 9161 # whether the library exists or not. But this is on 9162 # osf3 & osf4 and I'm not really sure... Just 9163 # implementing what was already the behavior. 9164 newdeplibs=$deplibs 9165 ;; 9166 test_compile) 9167 # This code stresses the "libraries are programs" paradigm to its 9168 # limits. Maybe even breaks it. We compile a program, linking it 9169 # against the deplibs as a proxy for the library. Then we can check 9170 # whether they linked in statically or dynamically with ldd. 9171 $opt_dry_run || $RM conftest.c 9172 cat > conftest.c <<EOF 9173 int main() { return 0; } 9174EOF 9175 $opt_dry_run || $RM conftest 9176 if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9177 ldd_output=`ldd conftest` 9178 for i in $deplibs; do 9179 case $i in 9180 -l*) 9181 func_stripname -l '' "$i" 9182 name=$func_stripname_result 9183 if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9184 case " $predeps $postdeps " in 9185 *" $i "*) 9186 func_append newdeplibs " $i" 9187 i= 9188 ;; 9189 esac 9190 fi 9191 if test -n "$i"; then 9192 libname=`eval "\\$ECHO \"$libname_spec\""` 9193 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9194 set dummy $deplib_matches; shift 9195 deplib_match=$1 9196 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9197 func_append newdeplibs " $i" 9198 else 9199 droppeddeps=yes 9200 echo 9201 $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9202 echo "*** I have the capability to make that library automatically link in when" 9203 echo "*** you link to this library. But I can only do this if you have a" 9204 echo "*** shared version of the library, which I believe you do not have" 9205 echo "*** because a test_compile did reveal that the linker did not use it for" 9206 echo "*** its dynamic dependency list that programs get resolved with at runtime." 9207 fi 9208 fi 9209 ;; 9210 *) 9211 func_append newdeplibs " $i" 9212 ;; 9213 esac 9214 done 9215 else 9216 # Error occurred in the first compile. Let's try to salvage 9217 # the situation: Compile a separate program for each library. 9218 for i in $deplibs; do 9219 case $i in 9220 -l*) 9221 func_stripname -l '' "$i" 9222 name=$func_stripname_result 9223 $opt_dry_run || $RM conftest 9224 if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9225 ldd_output=`ldd conftest` 9226 if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9227 case " $predeps $postdeps " in 9228 *" $i "*) 9229 func_append newdeplibs " $i" 9230 i= 9231 ;; 9232 esac 9233 fi 9234 if test -n "$i"; then 9235 libname=`eval "\\$ECHO \"$libname_spec\""` 9236 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9237 set dummy $deplib_matches; shift 9238 deplib_match=$1 9239 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9240 func_append newdeplibs " $i" 9241 else 9242 droppeddeps=yes 9243 echo 9244 $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9245 echo "*** I have the capability to make that library automatically link in when" 9246 echo "*** you link to this library. But I can only do this if you have a" 9247 echo "*** shared version of the library, which you do not appear to have" 9248 echo "*** because a test_compile did reveal that the linker did not use this one" 9249 echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9250 fi 9251 fi 9252 else 9253 droppeddeps=yes 9254 echo 9255 $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9256 echo "*** make it link in! You will probably need to install it or some" 9257 echo "*** library that it depends on before this library will be fully" 9258 echo "*** functional. Installing it before continuing would be even better." 9259 fi 9260 ;; 9261 *) 9262 func_append newdeplibs " $i" 9263 ;; 9264 esac 9265 done 9266 fi 9267 ;; 9268 file_magic*) 9269 set dummy $deplibs_check_method; shift 9270 file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9271 for a_deplib in $deplibs; do 9272 case $a_deplib in 9273 -l*) 9274 func_stripname -l '' "$a_deplib" 9275 name=$func_stripname_result 9276 if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9277 case " $predeps $postdeps " in 9278 *" $a_deplib "*) 9279 func_append newdeplibs " $a_deplib" 9280 a_deplib= 9281 ;; 9282 esac 9283 fi 9284 if test -n "$a_deplib"; then 9285 libname=`eval "\\$ECHO \"$libname_spec\""` 9286 if test -n "$file_magic_glob"; then 9287 libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9288 else 9289 libnameglob=$libname 9290 fi 9291 test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9292 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9293 if test yes = "$want_nocaseglob"; then 9294 shopt -s nocaseglob 9295 potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9296 $nocaseglob 9297 else 9298 potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9299 fi 9300 for potent_lib in $potential_libs; do 9301 # Follow soft links. 9302 if ls -lLd "$potent_lib" 2>/dev/null | 9303 $GREP " -> " >/dev/null; then 9304 continue 9305 fi 9306 # The statement above tries to avoid entering an 9307 # endless loop below, in case of cyclic links. 9308 # We might still enter an endless loop, since a link 9309 # loop can be closed while we follow links, 9310 # but so what? 9311 potlib=$potent_lib 9312 while test -h "$potlib" 2>/dev/null; do 9313 potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9314 case $potliblink in 9315 [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9316 *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9317 esac 9318 done 9319 if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9320 $SED -e 10q | 9321 $EGREP "$file_magic_regex" > /dev/null; then 9322 func_append newdeplibs " $a_deplib" 9323 a_deplib= 9324 break 2 9325 fi 9326 done 9327 done 9328 fi 9329 if test -n "$a_deplib"; then 9330 droppeddeps=yes 9331 echo 9332 $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9333 echo "*** I have the capability to make that library automatically link in when" 9334 echo "*** you link to this library. But I can only do this if you have a" 9335 echo "*** shared version of the library, which you do not appear to have" 9336 echo "*** because I did check the linker path looking for a file starting" 9337 if test -z "$potlib"; then 9338 $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9339 else 9340 $ECHO "*** with $libname and none of the candidates passed a file format test" 9341 $ECHO "*** using a file magic. Last file checked: $potlib" 9342 fi 9343 fi 9344 ;; 9345 *) 9346 # Add a -L argument. 9347 func_append newdeplibs " $a_deplib" 9348 ;; 9349 esac 9350 done # Gone through all deplibs. 9351 ;; 9352 match_pattern*) 9353 set dummy $deplibs_check_method; shift 9354 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9355 for a_deplib in $deplibs; do 9356 case $a_deplib in 9357 -l*) 9358 func_stripname -l '' "$a_deplib" 9359 name=$func_stripname_result 9360 if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9361 case " $predeps $postdeps " in 9362 *" $a_deplib "*) 9363 func_append newdeplibs " $a_deplib" 9364 a_deplib= 9365 ;; 9366 esac 9367 fi 9368 if test -n "$a_deplib"; then 9369 libname=`eval "\\$ECHO \"$libname_spec\""` 9370 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9371 potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9372 for potent_lib in $potential_libs; do 9373 potlib=$potent_lib # see symlink-check above in file_magic test 9374 if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9375 $EGREP "$match_pattern_regex" > /dev/null; then 9376 func_append newdeplibs " $a_deplib" 9377 a_deplib= 9378 break 2 9379 fi 9380 done 9381 done 9382 fi 9383 if test -n "$a_deplib"; then 9384 droppeddeps=yes 9385 echo 9386 $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9387 echo "*** I have the capability to make that library automatically link in when" 9388 echo "*** you link to this library. But I can only do this if you have a" 9389 echo "*** shared version of the library, which you do not appear to have" 9390 echo "*** because I did check the linker path looking for a file starting" 9391 if test -z "$potlib"; then 9392 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9393 else 9394 $ECHO "*** with $libname and none of the candidates passed a file format test" 9395 $ECHO "*** using a regex pattern. Last file checked: $potlib" 9396 fi 9397 fi 9398 ;; 9399 *) 9400 # Add a -L argument. 9401 func_append newdeplibs " $a_deplib" 9402 ;; 9403 esac 9404 done # Gone through all deplibs. 9405 ;; 9406 none | unknown | *) 9407 newdeplibs= 9408 tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9409 if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9410 for i in $predeps $postdeps; do 9411 # can't use Xsed below, because $i might contain '/' 9412 tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9413 done 9414 fi 9415 case $tmp_deplibs in 9416 *[!\ \ ]*) 9417 echo 9418 if test none = "$deplibs_check_method"; then 9419 echo "*** Warning: inter-library dependencies are not supported in this platform." 9420 else 9421 echo "*** Warning: inter-library dependencies are not known to be supported." 9422 fi 9423 echo "*** All declared inter-library dependencies are being dropped." 9424 droppeddeps=yes 9425 ;; 9426 esac 9427 ;; 9428 esac 9429 versuffix=$versuffix_save 9430 major=$major_save 9431 release=$release_save 9432 libname=$libname_save 9433 name=$name_save 9434 9435 case $host in 9436 *-*-rhapsody* | *-*-darwin1.[012]) 9437 # On Rhapsody replace the C library with the System framework 9438 newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9439 ;; 9440 esac 9441 9442 if test yes = "$droppeddeps"; then 9443 if test yes = "$module"; then 9444 echo 9445 echo "*** Warning: libtool could not satisfy all declared inter-library" 9446 $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9447 echo "*** a static module, that should work as long as the dlopening" 9448 echo "*** application is linked with the -dlopen flag." 9449 if test -z "$global_symbol_pipe"; then 9450 echo 9451 echo "*** However, this would only work if libtool was able to extract symbol" 9452 echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9453 echo "*** not find such a program. So, this module is probably useless." 9454 echo "*** 'nm' from GNU binutils and a full rebuild may help." 9455 fi 9456 if test no = "$build_old_libs"; then 9457 oldlibs=$output_objdir/$libname.$libext 9458 build_libtool_libs=module 9459 build_old_libs=yes 9460 else 9461 build_libtool_libs=no 9462 fi 9463 else 9464 echo "*** The inter-library dependencies that have been dropped here will be" 9465 echo "*** automatically added whenever a program is linked with this library" 9466 echo "*** or is declared to -dlopen it." 9467 9468 if test no = "$allow_undefined"; then 9469 echo 9470 echo "*** Since this library must not contain undefined symbols," 9471 echo "*** because either the platform does not support them or" 9472 echo "*** it was explicitly requested with -no-undefined," 9473 echo "*** libtool will only create a static version of it." 9474 if test no = "$build_old_libs"; then 9475 oldlibs=$output_objdir/$libname.$libext 9476 build_libtool_libs=module 9477 build_old_libs=yes 9478 else 9479 build_libtool_libs=no 9480 fi 9481 fi 9482 fi 9483 fi 9484 # Done checking deplibs! 9485 deplibs=$newdeplibs 9486 fi 9487 # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9488 case $host in 9489 *-*-darwin*) 9490 newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9491 new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9492 deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9493 ;; 9494 esac 9495 9496 # move library search paths that coincide with paths to not yet 9497 # installed libraries to the beginning of the library search list 9498 new_libs= 9499 for path in $notinst_path; do 9500 case " $new_libs " in 9501 *" -L$path/$objdir "*) ;; 9502 *) 9503 case " $deplibs " in 9504 *" -L$path/$objdir "*) 9505 func_append new_libs " -L$path/$objdir" ;; 9506 esac 9507 ;; 9508 esac 9509 done 9510 for deplib in $deplibs; do 9511 case $deplib in 9512 -L*) 9513 case " $new_libs " in 9514 *" $deplib "*) ;; 9515 *) func_append new_libs " $deplib" ;; 9516 esac 9517 ;; 9518 *) func_append new_libs " $deplib" ;; 9519 esac 9520 done 9521 deplibs=$new_libs 9522 9523 # All the library-specific variables (install_libdir is set above). 9524 library_names= 9525 old_library= 9526 dlname= 9527 9528 # Test again, we may have decided not to build it any more 9529 if test yes = "$build_libtool_libs"; then 9530 # Remove $wl instances when linking with ld. 9531 # FIXME: should test the right _cmds variable. 9532 case $archive_cmds in 9533 *\$LD\ *) wl= ;; 9534 esac 9535 if test yes = "$hardcode_into_libs"; then 9536 # Hardcode the library paths 9537 hardcode_libdirs= 9538 dep_rpath= 9539 rpath=$finalize_rpath 9540 test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9541 for libdir in $rpath; do 9542 if test -n "$hardcode_libdir_flag_spec"; then 9543 if test -n "$hardcode_libdir_separator"; then 9544 func_replace_sysroot "$libdir" 9545 libdir=$func_replace_sysroot_result 9546 if test -z "$hardcode_libdirs"; then 9547 hardcode_libdirs=$libdir 9548 else 9549 # Just accumulate the unique libdirs. 9550 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9551 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9552 ;; 9553 *) 9554 func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9555 ;; 9556 esac 9557 fi 9558 else 9559 eval flag=\"$hardcode_libdir_flag_spec\" 9560 func_append dep_rpath " $flag" 9561 fi 9562 elif test -n "$runpath_var"; then 9563 case "$perm_rpath " in 9564 *" $libdir "*) ;; 9565 *) func_append perm_rpath " $libdir" ;; 9566 esac 9567 fi 9568 done 9569 # Substitute the hardcoded libdirs into the rpath. 9570 if test -n "$hardcode_libdir_separator" && 9571 test -n "$hardcode_libdirs"; then 9572 libdir=$hardcode_libdirs 9573 eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9574 fi 9575 if test -n "$runpath_var" && test -n "$perm_rpath"; then 9576 # We should set the runpath_var. 9577 rpath= 9578 for dir in $perm_rpath; do 9579 func_append rpath "$dir:" 9580 done 9581 eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9582 fi 9583 test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9584 fi 9585 9586 shlibpath=$finalize_shlibpath 9587 test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9588 if test -n "$shlibpath"; then 9589 eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9590 fi 9591 9592 # Get the real and link names of the library. 9593 eval shared_ext=\"$shrext_cmds\" 9594 eval library_names=\"$library_names_spec\" 9595 set dummy $library_names 9596 shift 9597 realname=$1 9598 shift 9599 9600 if test -n "$soname_spec"; then 9601 eval soname=\"$soname_spec\" 9602 else 9603 soname=$realname 9604 fi 9605 if test -z "$dlname"; then 9606 dlname=$soname 9607 fi 9608 9609 lib=$output_objdir/$realname 9610 linknames= 9611 for link 9612 do 9613 func_append linknames " $link" 9614 done 9615 9616 # Use standard objects if they are pic 9617 test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9618 test "X$libobjs" = "X " && libobjs= 9619 9620 delfiles= 9621 if test -n "$export_symbols" && test -n "$include_expsyms"; then 9622 $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9623 export_symbols=$output_objdir/$libname.uexp 9624 func_append delfiles " $export_symbols" 9625 fi 9626 9627 orig_export_symbols= 9628 case $host_os in 9629 cygwin* | mingw* | cegcc*) 9630 if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9631 # exporting using user supplied symfile 9632 func_dll_def_p "$export_symbols" || { 9633 # and it's NOT already a .def file. Must figure out 9634 # which of the given symbols are data symbols and tag 9635 # them as such. So, trigger use of export_symbols_cmds. 9636 # export_symbols gets reassigned inside the "prepare 9637 # the list of exported symbols" if statement, so the 9638 # include_expsyms logic still works. 9639 orig_export_symbols=$export_symbols 9640 export_symbols= 9641 always_export_symbols=yes 9642 } 9643 fi 9644 ;; 9645 esac 9646 9647 # Prepare the list of exported symbols 9648 if test -z "$export_symbols"; then 9649 if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9650 func_verbose "generating symbol list for '$libname.la'" 9651 export_symbols=$output_objdir/$libname.exp 9652 $opt_dry_run || $RM $export_symbols 9653 cmds=$export_symbols_cmds 9654 save_ifs=$IFS; IFS='~' 9655 for cmd1 in $cmds; do 9656 IFS=$save_ifs 9657 # Take the normal branch if the nm_file_list_spec branch 9658 # doesn't work or if tool conversion is not needed. 9659 case $nm_file_list_spec~$to_tool_file_cmd in 9660 *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9661 try_normal_branch=yes 9662 eval cmd=\"$cmd1\" 9663 func_len " $cmd" 9664 len=$func_len_result 9665 ;; 9666 *) 9667 try_normal_branch=no 9668 ;; 9669 esac 9670 if test yes = "$try_normal_branch" \ 9671 && { test "$len" -lt "$max_cmd_len" \ 9672 || test "$max_cmd_len" -le -1; } 9673 then 9674 func_show_eval "$cmd" 'exit $?' 9675 skipped_export=false 9676 elif test -n "$nm_file_list_spec"; then 9677 func_basename "$output" 9678 output_la=$func_basename_result 9679 save_libobjs=$libobjs 9680 save_output=$output 9681 output=$output_objdir/$output_la.nm 9682 func_to_tool_file "$output" 9683 libobjs=$nm_file_list_spec$func_to_tool_file_result 9684 func_append delfiles " $output" 9685 func_verbose "creating $NM input file list: $output" 9686 for obj in $save_libobjs; do 9687 func_to_tool_file "$obj" 9688 $ECHO "$func_to_tool_file_result" 9689 done > "$output" 9690 eval cmd=\"$cmd1\" 9691 func_show_eval "$cmd" 'exit $?' 9692 output=$save_output 9693 libobjs=$save_libobjs 9694 skipped_export=false 9695 else 9696 # The command line is too long to execute in one step. 9697 func_verbose "using reloadable object file for export list..." 9698 skipped_export=: 9699 # Break out early, otherwise skipped_export may be 9700 # set to false by a later but shorter cmd. 9701 break 9702 fi 9703 done 9704 IFS=$save_ifs 9705 if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9706 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9707 func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9708 fi 9709 fi 9710 fi 9711 9712 if test -n "$export_symbols" && test -n "$include_expsyms"; then 9713 tmp_export_symbols=$export_symbols 9714 test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9715 $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9716 fi 9717 9718 if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9719 # The given exports_symbols file has to be filtered, so filter it. 9720 func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9721 # FIXME: $output_objdir/$libname.filter potentially contains lots of 9722 # 's' commands, which not all seds can handle. GNU sed should be fine 9723 # though. Also, the filter scales superlinearly with the number of 9724 # global variables. join(1) would be nice here, but unfortunately 9725 # isn't a blessed tool. 9726 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9727 func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9728 export_symbols=$output_objdir/$libname.def 9729 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9730 fi 9731 9732 tmp_deplibs= 9733 for test_deplib in $deplibs; do 9734 case " $convenience " in 9735 *" $test_deplib "*) ;; 9736 *) 9737 func_append tmp_deplibs " $test_deplib" 9738 ;; 9739 esac 9740 done 9741 deplibs=$tmp_deplibs 9742 9743 if test -n "$convenience"; then 9744 if test -n "$whole_archive_flag_spec" && 9745 test yes = "$compiler_needs_object" && 9746 test -z "$libobjs"; then 9747 # extract the archives, so we have objects to list. 9748 # TODO: could optimize this to just extract one archive. 9749 whole_archive_flag_spec= 9750 fi 9751 if test -n "$whole_archive_flag_spec"; then 9752 save_libobjs=$libobjs 9753 eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9754 test "X$libobjs" = "X " && libobjs= 9755 else 9756 gentop=$output_objdir/${outputname}x 9757 func_append generated " $gentop" 9758 9759 func_extract_archives $gentop $convenience 9760 func_append libobjs " $func_extract_archives_result" 9761 test "X$libobjs" = "X " && libobjs= 9762 fi 9763 fi 9764 9765 if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9766 eval flag=\"$thread_safe_flag_spec\" 9767 func_append linker_flags " $flag" 9768 fi 9769 9770 # Make a backup of the uninstalled library when relinking 9771 if test relink = "$opt_mode"; then 9772 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9773 fi 9774 9775 # Do each of the archive commands. 9776 if test yes = "$module" && test -n "$module_cmds"; then 9777 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9778 eval test_cmds=\"$module_expsym_cmds\" 9779 cmds=$module_expsym_cmds 9780 else 9781 eval test_cmds=\"$module_cmds\" 9782 cmds=$module_cmds 9783 fi 9784 else 9785 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 9786 eval test_cmds=\"$archive_expsym_cmds\" 9787 cmds=$archive_expsym_cmds 9788 else 9789 eval test_cmds=\"$archive_cmds\" 9790 cmds=$archive_cmds 9791 fi 9792 fi 9793 9794 if test : != "$skipped_export" && 9795 func_len " $test_cmds" && 9796 len=$func_len_result && 9797 test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9798 : 9799 else 9800 # The command line is too long to link in one step, link piecewise 9801 # or, if using GNU ld and skipped_export is not :, use a linker 9802 # script. 9803 9804 # Save the value of $output and $libobjs because we want to 9805 # use them later. If we have whole_archive_flag_spec, we 9806 # want to use save_libobjs as it was before 9807 # whole_archive_flag_spec was expanded, because we can't 9808 # assume the linker understands whole_archive_flag_spec. 9809 # This may have to be revisited, in case too many 9810 # convenience libraries get linked in and end up exceeding 9811 # the spec. 9812 if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 9813 save_libobjs=$libobjs 9814 fi 9815 save_output=$output 9816 func_basename "$output" 9817 output_la=$func_basename_result 9818 9819 # Clear the reloadable object creation command queue and 9820 # initialize k to one. 9821 test_cmds= 9822 concat_cmds= 9823 objlist= 9824 last_robj= 9825 k=1 9826 9827 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 9828 output=$output_objdir/$output_la.lnkscript 9829 func_verbose "creating GNU ld script: $output" 9830 echo 'INPUT (' > $output 9831 for obj in $save_libobjs 9832 do 9833 func_to_tool_file "$obj" 9834 $ECHO "$func_to_tool_file_result" >> $output 9835 done 9836 echo ')' >> $output 9837 func_append delfiles " $output" 9838 func_to_tool_file "$output" 9839 output=$func_to_tool_file_result 9840 elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 9841 output=$output_objdir/$output_la.lnk 9842 func_verbose "creating linker input file list: $output" 9843 : > $output 9844 set x $save_libobjs 9845 shift 9846 firstobj= 9847 if test yes = "$compiler_needs_object"; then 9848 firstobj="$1 " 9849 shift 9850 fi 9851 for obj 9852 do 9853 func_to_tool_file "$obj" 9854 $ECHO "$func_to_tool_file_result" >> $output 9855 done 9856 func_append delfiles " $output" 9857 func_to_tool_file "$output" 9858 output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 9859 else 9860 if test -n "$save_libobjs"; then 9861 func_verbose "creating reloadable object files..." 9862 output=$output_objdir/$output_la-$k.$objext 9863 eval test_cmds=\"$reload_cmds\" 9864 func_len " $test_cmds" 9865 len0=$func_len_result 9866 len=$len0 9867 9868 # Loop over the list of objects to be linked. 9869 for obj in $save_libobjs 9870 do 9871 func_len " $obj" 9872 func_arith $len + $func_len_result 9873 len=$func_arith_result 9874 if test -z "$objlist" || 9875 test "$len" -lt "$max_cmd_len"; then 9876 func_append objlist " $obj" 9877 else 9878 # The command $test_cmds is almost too long, add a 9879 # command to the queue. 9880 if test 1 -eq "$k"; then 9881 # The first file doesn't have a previous command to add. 9882 reload_objs=$objlist 9883 eval concat_cmds=\"$reload_cmds\" 9884 else 9885 # All subsequent reloadable object files will link in 9886 # the last one created. 9887 reload_objs="$objlist $last_robj" 9888 eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 9889 fi 9890 last_robj=$output_objdir/$output_la-$k.$objext 9891 func_arith $k + 1 9892 k=$func_arith_result 9893 output=$output_objdir/$output_la-$k.$objext 9894 objlist=" $obj" 9895 func_len " $last_robj" 9896 func_arith $len0 + $func_len_result 9897 len=$func_arith_result 9898 fi 9899 done 9900 # Handle the remaining objects by creating one last 9901 # reloadable object file. All subsequent reloadable object 9902 # files will link in the last one created. 9903 test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9904 reload_objs="$objlist $last_robj" 9905 eval concat_cmds=\"\$concat_cmds$reload_cmds\" 9906 if test -n "$last_robj"; then 9907 eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9908 fi 9909 func_append delfiles " $output" 9910 9911 else 9912 output= 9913 fi 9914 9915 ${skipped_export-false} && { 9916 func_verbose "generating symbol list for '$libname.la'" 9917 export_symbols=$output_objdir/$libname.exp 9918 $opt_dry_run || $RM $export_symbols 9919 libobjs=$output 9920 # Append the command to create the export file. 9921 test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9922 eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 9923 if test -n "$last_robj"; then 9924 eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9925 fi 9926 } 9927 9928 test -n "$save_libobjs" && 9929 func_verbose "creating a temporary reloadable object file: $output" 9930 9931 # Loop through the commands generated above and execute them. 9932 save_ifs=$IFS; IFS='~' 9933 for cmd in $concat_cmds; do 9934 IFS=$save_ifs 9935 $opt_quiet || { 9936 func_quote_for_expand "$cmd" 9937 eval "func_echo $func_quote_for_expand_result" 9938 } 9939 $opt_dry_run || eval "$cmd" || { 9940 lt_exit=$? 9941 9942 # Restore the uninstalled library and exit 9943 if test relink = "$opt_mode"; then 9944 ( cd "$output_objdir" && \ 9945 $RM "${realname}T" && \ 9946 $MV "${realname}U" "$realname" ) 9947 fi 9948 9949 exit $lt_exit 9950 } 9951 done 9952 IFS=$save_ifs 9953 9954 if test -n "$export_symbols_regex" && ${skipped_export-false}; then 9955 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9956 func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9957 fi 9958 fi 9959 9960 ${skipped_export-false} && { 9961 if test -n "$export_symbols" && test -n "$include_expsyms"; then 9962 tmp_export_symbols=$export_symbols 9963 test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9964 $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9965 fi 9966 9967 if test -n "$orig_export_symbols"; then 9968 # The given exports_symbols file has to be filtered, so filter it. 9969 func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9970 # FIXME: $output_objdir/$libname.filter potentially contains lots of 9971 # 's' commands, which not all seds can handle. GNU sed should be fine 9972 # though. Also, the filter scales superlinearly with the number of 9973 # global variables. join(1) would be nice here, but unfortunately 9974 # isn't a blessed tool. 9975 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9976 func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9977 export_symbols=$output_objdir/$libname.def 9978 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9979 fi 9980 } 9981 9982 libobjs=$output 9983 # Restore the value of output. 9984 output=$save_output 9985 9986 if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 9987 eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9988 test "X$libobjs" = "X " && libobjs= 9989 fi 9990 # Expand the library linking commands again to reset the 9991 # value of $libobjs for piecewise linking. 9992 9993 # Do each of the archive commands. 9994 if test yes = "$module" && test -n "$module_cmds"; then 9995 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9996 cmds=$module_expsym_cmds 9997 else 9998 cmds=$module_cmds 9999 fi 10000 else 10001 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10002 cmds=$archive_expsym_cmds 10003 else 10004 cmds=$archive_cmds 10005 fi 10006 fi 10007 fi 10008 10009 if test -n "$delfiles"; then 10010 # Append the command to remove temporary files to $cmds. 10011 eval cmds=\"\$cmds~\$RM $delfiles\" 10012 fi 10013 10014 # Add any objects from preloaded convenience libraries 10015 if test -n "$dlprefiles"; then 10016 gentop=$output_objdir/${outputname}x 10017 func_append generated " $gentop" 10018 10019 func_extract_archives $gentop $dlprefiles 10020 func_append libobjs " $func_extract_archives_result" 10021 test "X$libobjs" = "X " && libobjs= 10022 fi 10023 10024 save_ifs=$IFS; IFS='~' 10025 for cmd in $cmds; do 10026 IFS=$sp$nl 10027 eval cmd=\"$cmd\" 10028 IFS=$save_ifs 10029 $opt_quiet || { 10030 func_quote_for_expand "$cmd" 10031 eval "func_echo $func_quote_for_expand_result" 10032 } 10033 $opt_dry_run || eval "$cmd" || { 10034 lt_exit=$? 10035 10036 # Restore the uninstalled library and exit 10037 if test relink = "$opt_mode"; then 10038 ( cd "$output_objdir" && \ 10039 $RM "${realname}T" && \ 10040 $MV "${realname}U" "$realname" ) 10041 fi 10042 10043 exit $lt_exit 10044 } 10045 done 10046 IFS=$save_ifs 10047 10048 # Restore the uninstalled library and exit 10049 if test relink = "$opt_mode"; then 10050 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10051 10052 if test -n "$convenience"; then 10053 if test -z "$whole_archive_flag_spec"; then 10054 func_show_eval '${RM}r "$gentop"' 10055 fi 10056 fi 10057 10058 exit $EXIT_SUCCESS 10059 fi 10060 10061 # Create links to the real library. 10062 for linkname in $linknames; do 10063 if test "$realname" != "$linkname"; then 10064 func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10065 fi 10066 done 10067 10068 # If -module or -export-dynamic was specified, set the dlname. 10069 if test yes = "$module" || test yes = "$export_dynamic"; then 10070 # On all known operating systems, these are identical. 10071 dlname=$soname 10072 fi 10073 fi 10074 ;; 10075 10076 obj) 10077 if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10078 func_warning "'-dlopen' is ignored for objects" 10079 fi 10080 10081 case " $deplibs" in 10082 *\ -l* | *\ -L*) 10083 func_warning "'-l' and '-L' are ignored for objects" ;; 10084 esac 10085 10086 test -n "$rpath" && \ 10087 func_warning "'-rpath' is ignored for objects" 10088 10089 test -n "$xrpath" && \ 10090 func_warning "'-R' is ignored for objects" 10091 10092 test -n "$vinfo" && \ 10093 func_warning "'-version-info' is ignored for objects" 10094 10095 test -n "$release" && \ 10096 func_warning "'-release' is ignored for objects" 10097 10098 case $output in 10099 *.lo) 10100 test -n "$objs$old_deplibs" && \ 10101 func_fatal_error "cannot build library object '$output' from non-libtool objects" 10102 10103 libobj=$output 10104 func_lo2o "$libobj" 10105 obj=$func_lo2o_result 10106 ;; 10107 *) 10108 libobj= 10109 obj=$output 10110 ;; 10111 esac 10112 10113 # Delete the old objects. 10114 $opt_dry_run || $RM $obj $libobj 10115 10116 # Objects from convenience libraries. This assumes 10117 # single-version convenience libraries. Whenever we create 10118 # different ones for PIC/non-PIC, this we'll have to duplicate 10119 # the extraction. 10120 reload_conv_objs= 10121 gentop= 10122 # if reload_cmds runs $LD directly, get rid of -Wl from 10123 # whole_archive_flag_spec and hope we can get by with turning comma 10124 # into space. 10125 case $reload_cmds in 10126 *\$LD[\ \$]*) wl= ;; 10127 esac 10128 if test -n "$convenience"; then 10129 if test -n "$whole_archive_flag_spec"; then 10130 eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10131 test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10132 reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10133 else 10134 gentop=$output_objdir/${obj}x 10135 func_append generated " $gentop" 10136 10137 func_extract_archives $gentop $convenience 10138 reload_conv_objs="$reload_objs $func_extract_archives_result" 10139 fi 10140 fi 10141 10142 # If we're not building shared, we need to use non_pic_objs 10143 test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10144 10145 # Create the old-style object. 10146 reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10147 10148 output=$obj 10149 func_execute_cmds "$reload_cmds" 'exit $?' 10150 10151 # Exit if we aren't doing a library object file. 10152 if test -z "$libobj"; then 10153 if test -n "$gentop"; then 10154 func_show_eval '${RM}r "$gentop"' 10155 fi 10156 10157 exit $EXIT_SUCCESS 10158 fi 10159 10160 test yes = "$build_libtool_libs" || { 10161 if test -n "$gentop"; then 10162 func_show_eval '${RM}r "$gentop"' 10163 fi 10164 10165 # Create an invalid libtool object if no PIC, so that we don't 10166 # accidentally link it into a program. 10167 # $show "echo timestamp > $libobj" 10168 # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10169 exit $EXIT_SUCCESS 10170 } 10171 10172 if test -n "$pic_flag" || test default != "$pic_mode"; then 10173 # Only do commands if we really have different PIC objects. 10174 reload_objs="$libobjs $reload_conv_objs" 10175 output=$libobj 10176 func_execute_cmds "$reload_cmds" 'exit $?' 10177 fi 10178 10179 if test -n "$gentop"; then 10180 func_show_eval '${RM}r "$gentop"' 10181 fi 10182 10183 exit $EXIT_SUCCESS 10184 ;; 10185 10186 prog) 10187 case $host in 10188 *cygwin*) func_stripname '' '.exe' "$output" 10189 output=$func_stripname_result.exe;; 10190 esac 10191 test -n "$vinfo" && \ 10192 func_warning "'-version-info' is ignored for programs" 10193 10194 test -n "$release" && \ 10195 func_warning "'-release' is ignored for programs" 10196 10197 $preload \ 10198 && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10199 && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10200 10201 case $host in 10202 *-*-rhapsody* | *-*-darwin1.[012]) 10203 # On Rhapsody replace the C library is the System framework 10204 compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10205 finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10206 ;; 10207 esac 10208 10209 case $host in 10210 *-*-darwin*) 10211 # Don't allow lazy linking, it breaks C++ global constructors 10212 # But is supposedly fixed on 10.4 or later (yay!). 10213 if test CXX = "$tagname"; then 10214 case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10215 10.[0123]) 10216 func_append compile_command " $wl-bind_at_load" 10217 func_append finalize_command " $wl-bind_at_load" 10218 ;; 10219 esac 10220 fi 10221 # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10222 compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10223 finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10224 ;; 10225 esac 10226 10227 10228 # move library search paths that coincide with paths to not yet 10229 # installed libraries to the beginning of the library search list 10230 new_libs= 10231 for path in $notinst_path; do 10232 case " $new_libs " in 10233 *" -L$path/$objdir "*) ;; 10234 *) 10235 case " $compile_deplibs " in 10236 *" -L$path/$objdir "*) 10237 func_append new_libs " -L$path/$objdir" ;; 10238 esac 10239 ;; 10240 esac 10241 done 10242 for deplib in $compile_deplibs; do 10243 case $deplib in 10244 -L*) 10245 case " $new_libs " in 10246 *" $deplib "*) ;; 10247 *) func_append new_libs " $deplib" ;; 10248 esac 10249 ;; 10250 *) func_append new_libs " $deplib" ;; 10251 esac 10252 done 10253 compile_deplibs=$new_libs 10254 10255 10256 func_append compile_command " $compile_deplibs" 10257 func_append finalize_command " $finalize_deplibs" 10258 10259 if test -n "$rpath$xrpath"; then 10260 # If the user specified any rpath flags, then add them. 10261 for libdir in $rpath $xrpath; do 10262 # This is the magic to use -rpath. 10263 case "$finalize_rpath " in 10264 *" $libdir "*) ;; 10265 *) func_append finalize_rpath " $libdir" ;; 10266 esac 10267 done 10268 fi 10269 10270 # Now hardcode the library paths 10271 rpath= 10272 hardcode_libdirs= 10273 for libdir in $compile_rpath $finalize_rpath; do 10274 if test -n "$hardcode_libdir_flag_spec"; then 10275 if test -n "$hardcode_libdir_separator"; then 10276 if test -z "$hardcode_libdirs"; then 10277 hardcode_libdirs=$libdir 10278 else 10279 # Just accumulate the unique libdirs. 10280 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10281 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10282 ;; 10283 *) 10284 func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10285 ;; 10286 esac 10287 fi 10288 else 10289 eval flag=\"$hardcode_libdir_flag_spec\" 10290 func_append rpath " $flag" 10291 fi 10292 elif test -n "$runpath_var"; then 10293 case "$perm_rpath " in 10294 *" $libdir "*) ;; 10295 *) func_append perm_rpath " $libdir" ;; 10296 esac 10297 fi 10298 case $host in 10299 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10300 testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10301 case :$dllsearchpath: in 10302 *":$libdir:"*) ;; 10303 ::) dllsearchpath=$libdir;; 10304 *) func_append dllsearchpath ":$libdir";; 10305 esac 10306 case :$dllsearchpath: in 10307 *":$testbindir:"*) ;; 10308 ::) dllsearchpath=$testbindir;; 10309 *) func_append dllsearchpath ":$testbindir";; 10310 esac 10311 ;; 10312 esac 10313 done 10314 # Substitute the hardcoded libdirs into the rpath. 10315 if test -n "$hardcode_libdir_separator" && 10316 test -n "$hardcode_libdirs"; then 10317 libdir=$hardcode_libdirs 10318 eval rpath=\" $hardcode_libdir_flag_spec\" 10319 fi 10320 compile_rpath=$rpath 10321 10322 rpath= 10323 hardcode_libdirs= 10324 for libdir in $finalize_rpath; do 10325 if test -n "$hardcode_libdir_flag_spec"; then 10326 if test -n "$hardcode_libdir_separator"; then 10327 if test -z "$hardcode_libdirs"; then 10328 hardcode_libdirs=$libdir 10329 else 10330 # Just accumulate the unique libdirs. 10331 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10332 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10333 ;; 10334 *) 10335 func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10336 ;; 10337 esac 10338 fi 10339 else 10340 eval flag=\"$hardcode_libdir_flag_spec\" 10341 func_append rpath " $flag" 10342 fi 10343 elif test -n "$runpath_var"; then 10344 case "$finalize_perm_rpath " in 10345 *" $libdir "*) ;; 10346 *) func_append finalize_perm_rpath " $libdir" ;; 10347 esac 10348 fi 10349 done 10350 # Substitute the hardcoded libdirs into the rpath. 10351 if test -n "$hardcode_libdir_separator" && 10352 test -n "$hardcode_libdirs"; then 10353 libdir=$hardcode_libdirs 10354 eval rpath=\" $hardcode_libdir_flag_spec\" 10355 fi 10356 finalize_rpath=$rpath 10357 10358 if test -n "$libobjs" && test yes = "$build_old_libs"; then 10359 # Transform all the library objects into standard objects. 10360 compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10361 finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10362 fi 10363 10364 func_generate_dlsyms "$outputname" "@PROGRAM@" false 10365 10366 # template prelinking step 10367 if test -n "$prelink_cmds"; then 10368 func_execute_cmds "$prelink_cmds" 'exit $?' 10369 fi 10370 10371 wrappers_required=: 10372 case $host in 10373 *cegcc* | *mingw32ce*) 10374 # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10375 wrappers_required=false 10376 ;; 10377 *cygwin* | *mingw* ) 10378 test yes = "$build_libtool_libs" || wrappers_required=false 10379 ;; 10380 *) 10381 if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10382 wrappers_required=false 10383 fi 10384 ;; 10385 esac 10386 $wrappers_required || { 10387 # Replace the output file specification. 10388 compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10389 link_command=$compile_command$compile_rpath 10390 10391 # We have no uninstalled library dependencies, so finalize right now. 10392 exit_status=0 10393 func_show_eval "$link_command" 'exit_status=$?' 10394 10395 if test -n "$postlink_cmds"; then 10396 func_to_tool_file "$output" 10397 postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10398 func_execute_cmds "$postlink_cmds" 'exit $?' 10399 fi 10400 10401 # Delete the generated files. 10402 if test -f "$output_objdir/${outputname}S.$objext"; then 10403 func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10404 fi 10405 10406 exit $exit_status 10407 } 10408 10409 if test -n "$compile_shlibpath$finalize_shlibpath"; then 10410 compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10411 fi 10412 if test -n "$finalize_shlibpath"; then 10413 finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10414 fi 10415 10416 compile_var= 10417 finalize_var= 10418 if test -n "$runpath_var"; then 10419 if test -n "$perm_rpath"; then 10420 # We should set the runpath_var. 10421 rpath= 10422 for dir in $perm_rpath; do 10423 func_append rpath "$dir:" 10424 done 10425 compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10426 fi 10427 if test -n "$finalize_perm_rpath"; then 10428 # We should set the runpath_var. 10429 rpath= 10430 for dir in $finalize_perm_rpath; do 10431 func_append rpath "$dir:" 10432 done 10433 finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10434 fi 10435 fi 10436 10437 if test yes = "$no_install"; then 10438 # We don't need to create a wrapper script. 10439 link_command=$compile_var$compile_command$compile_rpath 10440 # Replace the output file specification. 10441 link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10442 # Delete the old output file. 10443 $opt_dry_run || $RM $output 10444 # Link the executable and exit 10445 func_show_eval "$link_command" 'exit $?' 10446 10447 if test -n "$postlink_cmds"; then 10448 func_to_tool_file "$output" 10449 postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10450 func_execute_cmds "$postlink_cmds" 'exit $?' 10451 fi 10452 10453 exit $EXIT_SUCCESS 10454 fi 10455 10456 case $hardcode_action,$fast_install in 10457 relink,*) 10458 # Fast installation is not supported 10459 link_command=$compile_var$compile_command$compile_rpath 10460 relink_command=$finalize_var$finalize_command$finalize_rpath 10461 10462 func_warning "this platform does not like uninstalled shared libraries" 10463 func_warning "'$output' will be relinked during installation" 10464 ;; 10465 *,yes) 10466 link_command=$finalize_var$compile_command$finalize_rpath 10467 relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10468 ;; 10469 *,no) 10470 link_command=$compile_var$compile_command$compile_rpath 10471 relink_command=$finalize_var$finalize_command$finalize_rpath 10472 ;; 10473 *,needless) 10474 link_command=$finalize_var$compile_command$finalize_rpath 10475 relink_command= 10476 ;; 10477 esac 10478 10479 # Replace the output file specification. 10480 link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10481 10482 # Delete the old output files. 10483 $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10484 10485 func_show_eval "$link_command" 'exit $?' 10486 10487 if test -n "$postlink_cmds"; then 10488 func_to_tool_file "$output_objdir/$outputname" 10489 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'` 10490 func_execute_cmds "$postlink_cmds" 'exit $?' 10491 fi 10492 10493 # Now create the wrapper script. 10494 func_verbose "creating $output" 10495 10496 # Quote the relink command for shipping. 10497 if test -n "$relink_command"; then 10498 # Preserve any variables that may affect compiler behavior 10499 for var in $variables_saved_for_relink; do 10500 if eval test -z \"\${$var+set}\"; then 10501 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10502 elif eval var_value=\$$var; test -z "$var_value"; then 10503 relink_command="$var=; export $var; $relink_command" 10504 else 10505 func_quote_for_eval "$var_value" 10506 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10507 fi 10508 done 10509 relink_command="(cd `pwd`; $relink_command)" 10510 relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10511 fi 10512 10513 # Only actually do things if not in dry run mode. 10514 $opt_dry_run || { 10515 # win32 will think the script is a binary if it has 10516 # a .exe suffix, so we strip it off here. 10517 case $output in 10518 *.exe) func_stripname '' '.exe' "$output" 10519 output=$func_stripname_result ;; 10520 esac 10521 # test for cygwin because mv fails w/o .exe extensions 10522 case $host in 10523 *cygwin*) 10524 exeext=.exe 10525 func_stripname '' '.exe' "$outputname" 10526 outputname=$func_stripname_result ;; 10527 *) exeext= ;; 10528 esac 10529 case $host in 10530 *cygwin* | *mingw* ) 10531 func_dirname_and_basename "$output" "" "." 10532 output_name=$func_basename_result 10533 output_path=$func_dirname_result 10534 cwrappersource=$output_path/$objdir/lt-$output_name.c 10535 cwrapper=$output_path/$output_name.exe 10536 $RM $cwrappersource $cwrapper 10537 trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10538 10539 func_emit_cwrapperexe_src > $cwrappersource 10540 10541 # The wrapper executable is built using the $host compiler, 10542 # because it contains $host paths and files. If cross- 10543 # compiling, it, like the target executable, must be 10544 # executed on the $host or under an emulation environment. 10545 $opt_dry_run || { 10546 $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10547 $STRIP $cwrapper 10548 } 10549 10550 # Now, create the wrapper script for func_source use: 10551 func_ltwrapper_scriptname $cwrapper 10552 $RM $func_ltwrapper_scriptname_result 10553 trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10554 $opt_dry_run || { 10555 # note: this script will not be executed, so do not chmod. 10556 if test "x$build" = "x$host"; then 10557 $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10558 else 10559 func_emit_wrapper no > $func_ltwrapper_scriptname_result 10560 fi 10561 } 10562 ;; 10563 * ) 10564 $RM $output 10565 trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10566 10567 func_emit_wrapper no > $output 10568 chmod +x $output 10569 ;; 10570 esac 10571 } 10572 exit $EXIT_SUCCESS 10573 ;; 10574 esac 10575 10576 # See if we need to build an old-fashioned archive. 10577 for oldlib in $oldlibs; do 10578 10579 case $build_libtool_libs in 10580 convenience) 10581 oldobjs="$libobjs_save $symfileobj" 10582 addlibs=$convenience 10583 build_libtool_libs=no 10584 ;; 10585 module) 10586 oldobjs=$libobjs_save 10587 addlibs=$old_convenience 10588 build_libtool_libs=no 10589 ;; 10590 *) 10591 oldobjs="$old_deplibs $non_pic_objects" 10592 $preload && test -f "$symfileobj" \ 10593 && func_append oldobjs " $symfileobj" 10594 addlibs=$old_convenience 10595 ;; 10596 esac 10597 10598 if test -n "$addlibs"; then 10599 gentop=$output_objdir/${outputname}x 10600 func_append generated " $gentop" 10601 10602 func_extract_archives $gentop $addlibs 10603 func_append oldobjs " $func_extract_archives_result" 10604 fi 10605 10606 # Do each command in the archive commands. 10607 if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10608 cmds=$old_archive_from_new_cmds 10609 else 10610 10611 # Add any objects from preloaded convenience libraries 10612 if test -n "$dlprefiles"; then 10613 gentop=$output_objdir/${outputname}x 10614 func_append generated " $gentop" 10615 10616 func_extract_archives $gentop $dlprefiles 10617 func_append oldobjs " $func_extract_archives_result" 10618 fi 10619 10620 # POSIX demands no paths to be encoded in archives. We have 10621 # to avoid creating archives with duplicate basenames if we 10622 # might have to extract them afterwards, e.g., when creating a 10623 # static archive out of a convenience library, or when linking 10624 # the entirety of a libtool archive into another (currently 10625 # not supported by libtool). 10626 if (for obj in $oldobjs 10627 do 10628 func_basename "$obj" 10629 $ECHO "$func_basename_result" 10630 done | sort | sort -uc >/dev/null 2>&1); then 10631 : 10632 else 10633 echo "copying selected object files to avoid basename conflicts..." 10634 gentop=$output_objdir/${outputname}x 10635 func_append generated " $gentop" 10636 func_mkdir_p "$gentop" 10637 save_oldobjs=$oldobjs 10638 oldobjs= 10639 counter=1 10640 for obj in $save_oldobjs 10641 do 10642 func_basename "$obj" 10643 objbase=$func_basename_result 10644 case " $oldobjs " in 10645 " ") oldobjs=$obj ;; 10646 *[\ /]"$objbase "*) 10647 while :; do 10648 # Make sure we don't pick an alternate name that also 10649 # overlaps. 10650 newobj=lt$counter-$objbase 10651 func_arith $counter + 1 10652 counter=$func_arith_result 10653 case " $oldobjs " in 10654 *[\ /]"$newobj "*) ;; 10655 *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10656 esac 10657 done 10658 func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10659 func_append oldobjs " $gentop/$newobj" 10660 ;; 10661 *) func_append oldobjs " $obj" ;; 10662 esac 10663 done 10664 fi 10665 func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10666 tool_oldlib=$func_to_tool_file_result 10667 eval cmds=\"$old_archive_cmds\" 10668 10669 func_len " $cmds" 10670 len=$func_len_result 10671 if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10672 cmds=$old_archive_cmds 10673 elif test -n "$archiver_list_spec"; then 10674 func_verbose "using command file archive linking..." 10675 for obj in $oldobjs 10676 do 10677 func_to_tool_file "$obj" 10678 $ECHO "$func_to_tool_file_result" 10679 done > $output_objdir/$libname.libcmd 10680 func_to_tool_file "$output_objdir/$libname.libcmd" 10681 oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10682 cmds=$old_archive_cmds 10683 else 10684 # the command line is too long to link in one step, link in parts 10685 func_verbose "using piecewise archive linking..." 10686 save_RANLIB=$RANLIB 10687 RANLIB=: 10688 objlist= 10689 concat_cmds= 10690 save_oldobjs=$oldobjs 10691 oldobjs= 10692 # Is there a better way of finding the last object in the list? 10693 for obj in $save_oldobjs 10694 do 10695 last_oldobj=$obj 10696 done 10697 eval test_cmds=\"$old_archive_cmds\" 10698 func_len " $test_cmds" 10699 len0=$func_len_result 10700 len=$len0 10701 for obj in $save_oldobjs 10702 do 10703 func_len " $obj" 10704 func_arith $len + $func_len_result 10705 len=$func_arith_result 10706 func_append objlist " $obj" 10707 if test "$len" -lt "$max_cmd_len"; then 10708 : 10709 else 10710 # the above command should be used before it gets too long 10711 oldobjs=$objlist 10712 if test "$obj" = "$last_oldobj"; then 10713 RANLIB=$save_RANLIB 10714 fi 10715 test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10716 eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10717 objlist= 10718 len=$len0 10719 fi 10720 done 10721 RANLIB=$save_RANLIB 10722 oldobjs=$objlist 10723 if test -z "$oldobjs"; then 10724 eval cmds=\"\$concat_cmds\" 10725 else 10726 eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10727 fi 10728 fi 10729 fi 10730 func_execute_cmds "$cmds" 'exit $?' 10731 done 10732 10733 test -n "$generated" && \ 10734 func_show_eval "${RM}r$generated" 10735 10736 # Now create the libtool archive. 10737 case $output in 10738 *.la) 10739 old_library= 10740 test yes = "$build_old_libs" && old_library=$libname.$libext 10741 func_verbose "creating $output" 10742 10743 # Preserve any variables that may affect compiler behavior 10744 for var in $variables_saved_for_relink; do 10745 if eval test -z \"\${$var+set}\"; then 10746 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10747 elif eval var_value=\$$var; test -z "$var_value"; then 10748 relink_command="$var=; export $var; $relink_command" 10749 else 10750 func_quote_for_eval "$var_value" 10751 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10752 fi 10753 done 10754 # Quote the link command for shipping. 10755 relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 10756 relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10757 if test yes = "$hardcode_automatic"; then 10758 relink_command= 10759 fi 10760 10761 # Only create the output if not a dry run. 10762 $opt_dry_run || { 10763 for installed in no yes; do 10764 if test yes = "$installed"; then 10765 if test -z "$install_libdir"; then 10766 break 10767 fi 10768 output=$output_objdir/${outputname}i 10769 # Replace all uninstalled libtool libraries with the installed ones 10770 newdependency_libs= 10771 for deplib in $dependency_libs; do 10772 case $deplib in 10773 *.la) 10774 func_basename "$deplib" 10775 name=$func_basename_result 10776 func_resolve_sysroot "$deplib" 10777 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 10778 test -z "$libdir" && \ 10779 func_fatal_error "'$deplib' is not a valid libtool archive" 10780 func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 10781 ;; 10782 -L*) 10783 func_stripname -L '' "$deplib" 10784 func_replace_sysroot "$func_stripname_result" 10785 func_append newdependency_libs " -L$func_replace_sysroot_result" 10786 ;; 10787 -R*) 10788 func_stripname -R '' "$deplib" 10789 func_replace_sysroot "$func_stripname_result" 10790 func_append newdependency_libs " -R$func_replace_sysroot_result" 10791 ;; 10792 *) func_append newdependency_libs " $deplib" ;; 10793 esac 10794 done 10795 dependency_libs=$newdependency_libs 10796 newdlfiles= 10797 10798 for lib in $dlfiles; do 10799 case $lib in 10800 *.la) 10801 func_basename "$lib" 10802 name=$func_basename_result 10803 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10804 test -z "$libdir" && \ 10805 func_fatal_error "'$lib' is not a valid libtool archive" 10806 func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 10807 ;; 10808 *) func_append newdlfiles " $lib" ;; 10809 esac 10810 done 10811 dlfiles=$newdlfiles 10812 newdlprefiles= 10813 for lib in $dlprefiles; do 10814 case $lib in 10815 *.la) 10816 # Only pass preopened files to the pseudo-archive (for 10817 # eventual linking with the app. that links it) if we 10818 # didn't already link the preopened objects directly into 10819 # the library: 10820 func_basename "$lib" 10821 name=$func_basename_result 10822 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10823 test -z "$libdir" && \ 10824 func_fatal_error "'$lib' is not a valid libtool archive" 10825 func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 10826 ;; 10827 esac 10828 done 10829 dlprefiles=$newdlprefiles 10830 else 10831 newdlfiles= 10832 for lib in $dlfiles; do 10833 case $lib in 10834 [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10835 *) abs=`pwd`"/$lib" ;; 10836 esac 10837 func_append newdlfiles " $abs" 10838 done 10839 dlfiles=$newdlfiles 10840 newdlprefiles= 10841 for lib in $dlprefiles; do 10842 case $lib in 10843 [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10844 *) abs=`pwd`"/$lib" ;; 10845 esac 10846 func_append newdlprefiles " $abs" 10847 done 10848 dlprefiles=$newdlprefiles 10849 fi 10850 $RM $output 10851 # place dlname in correct position for cygwin 10852 # In fact, it would be nice if we could use this code for all target 10853 # systems that can't hard-code library paths into their executables 10854 # and that have no shared library path variable independent of PATH, 10855 # but it turns out we can't easily determine that from inspecting 10856 # libtool variables, so we have to hard-code the OSs to which it 10857 # applies here; at the moment, that means platforms that use the PE 10858 # object format with DLL files. See the long comment at the top of 10859 # tests/bindir.at for full details. 10860 tdlname=$dlname 10861 case $host,$output,$installed,$module,$dlname in 10862 *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 10863 # If a -bindir argument was supplied, place the dll there. 10864 if test -n "$bindir"; then 10865 func_relative_path "$install_libdir" "$bindir" 10866 tdlname=$func_relative_path_result/$dlname 10867 else 10868 # Otherwise fall back on heuristic. 10869 tdlname=../bin/$dlname 10870 fi 10871 ;; 10872 esac 10873 $ECHO > $output "\ 10874# $outputname - a libtool library file 10875# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 10876# 10877# Please DO NOT delete this file! 10878# It is necessary for linking the library. 10879 10880# The name that we can dlopen(3). 10881dlname='$tdlname' 10882 10883# Names of this library. 10884library_names='$library_names' 10885 10886# The name of the static archive. 10887old_library='$old_library' 10888 10889# Linker flags that cannot go in dependency_libs. 10890inherited_linker_flags='$new_inherited_linker_flags' 10891 10892# Libraries that this one depends upon. 10893dependency_libs='$dependency_libs' 10894 10895# Names of additional weak libraries provided by this library 10896weak_library_names='$weak_libs' 10897 10898# Version information for $libname. 10899current=$current 10900age=$age 10901revision=$revision 10902 10903# Is this an already installed library? 10904installed=$installed 10905 10906# Should we warn about portability when linking against -modules? 10907shouldnotlink=$module 10908 10909# Files to dlopen/dlpreopen 10910dlopen='$dlfiles' 10911dlpreopen='$dlprefiles' 10912 10913# Directory that this library needs to be installed in: 10914libdir='$install_libdir'" 10915 if test no,yes = "$installed,$need_relink"; then 10916 $ECHO >> $output "\ 10917relink_command=\"$relink_command\"" 10918 fi 10919 done 10920 } 10921 10922 # Do a symbolic link so that the libtool archive can be found in 10923 # LD_LIBRARY_PATH before the program is installed. 10924 func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 10925 ;; 10926 esac 10927 exit $EXIT_SUCCESS 10928} 10929 10930if test link = "$opt_mode" || test relink = "$opt_mode"; then 10931 func_mode_link ${1+"$@"} 10932fi 10933 10934 10935# func_mode_uninstall arg... 10936func_mode_uninstall () 10937{ 10938 $debug_cmd 10939 10940 RM=$nonopt 10941 files= 10942 rmforce=false 10943 exit_status=0 10944 10945 # This variable tells wrapper scripts just to set variables rather 10946 # than running their programs. 10947 libtool_install_magic=$magic 10948 10949 for arg 10950 do 10951 case $arg in 10952 -f) func_append RM " $arg"; rmforce=: ;; 10953 -*) func_append RM " $arg" ;; 10954 *) func_append files " $arg" ;; 10955 esac 10956 done 10957 10958 test -z "$RM" && \ 10959 func_fatal_help "you must specify an RM program" 10960 10961 rmdirs= 10962 10963 for file in $files; do 10964 func_dirname "$file" "" "." 10965 dir=$func_dirname_result 10966 if test . = "$dir"; then 10967 odir=$objdir 10968 else 10969 odir=$dir/$objdir 10970 fi 10971 func_basename "$file" 10972 name=$func_basename_result 10973 test uninstall = "$opt_mode" && odir=$dir 10974 10975 # Remember odir for removal later, being careful to avoid duplicates 10976 if test clean = "$opt_mode"; then 10977 case " $rmdirs " in 10978 *" $odir "*) ;; 10979 *) func_append rmdirs " $odir" ;; 10980 esac 10981 fi 10982 10983 # Don't error if the file doesn't exist and rm -f was used. 10984 if { test -L "$file"; } >/dev/null 2>&1 || 10985 { test -h "$file"; } >/dev/null 2>&1 || 10986 test -f "$file"; then 10987 : 10988 elif test -d "$file"; then 10989 exit_status=1 10990 continue 10991 elif $rmforce; then 10992 continue 10993 fi 10994 10995 rmfiles=$file 10996 10997 case $name in 10998 *.la) 10999 # Possibly a libtool archive, so verify it. 11000 if func_lalib_p "$file"; then 11001 func_source $dir/$name 11002 11003 # Delete the libtool libraries and symlinks. 11004 for n in $library_names; do 11005 func_append rmfiles " $odir/$n" 11006 done 11007 test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11008 11009 case $opt_mode in 11010 clean) 11011 case " $library_names " in 11012 *" $dlname "*) ;; 11013 *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11014 esac 11015 test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11016 ;; 11017 uninstall) 11018 if test -n "$library_names"; then 11019 # Do each command in the postuninstall commands. 11020 func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11021 fi 11022 11023 if test -n "$old_library"; then 11024 # Do each command in the old_postuninstall commands. 11025 func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11026 fi 11027 # FIXME: should reinstall the best remaining shared library. 11028 ;; 11029 esac 11030 fi 11031 ;; 11032 11033 *.lo) 11034 # Possibly a libtool object, so verify it. 11035 if func_lalib_p "$file"; then 11036 11037 # Read the .lo file 11038 func_source $dir/$name 11039 11040 # Add PIC object to the list of files to remove. 11041 if test -n "$pic_object" && test none != "$pic_object"; then 11042 func_append rmfiles " $dir/$pic_object" 11043 fi 11044 11045 # Add non-PIC object to the list of files to remove. 11046 if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11047 func_append rmfiles " $dir/$non_pic_object" 11048 fi 11049 fi 11050 ;; 11051 11052 *) 11053 if test clean = "$opt_mode"; then 11054 noexename=$name 11055 case $file in 11056 *.exe) 11057 func_stripname '' '.exe' "$file" 11058 file=$func_stripname_result 11059 func_stripname '' '.exe' "$name" 11060 noexename=$func_stripname_result 11061 # $file with .exe has already been added to rmfiles, 11062 # add $file without .exe 11063 func_append rmfiles " $file" 11064 ;; 11065 esac 11066 # Do a test to see if this is a libtool program. 11067 if func_ltwrapper_p "$file"; then 11068 if func_ltwrapper_executable_p "$file"; then 11069 func_ltwrapper_scriptname "$file" 11070 relink_command= 11071 func_source $func_ltwrapper_scriptname_result 11072 func_append rmfiles " $func_ltwrapper_scriptname_result" 11073 else 11074 relink_command= 11075 func_source $dir/$noexename 11076 fi 11077 11078 # note $name still contains .exe if it was in $file originally 11079 # as does the version of $file that was added into $rmfiles 11080 func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11081 if test yes = "$fast_install" && test -n "$relink_command"; then 11082 func_append rmfiles " $odir/lt-$name" 11083 fi 11084 if test "X$noexename" != "X$name"; then 11085 func_append rmfiles " $odir/lt-$noexename.c" 11086 fi 11087 fi 11088 fi 11089 ;; 11090 esac 11091 func_show_eval "$RM $rmfiles" 'exit_status=1' 11092 done 11093 11094 # Try to remove the $objdir's in the directories where we deleted files 11095 for dir in $rmdirs; do 11096 if test -d "$dir"; then 11097 func_show_eval "rmdir $dir >/dev/null 2>&1" 11098 fi 11099 done 11100 11101 exit $exit_status 11102} 11103 11104if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11105 func_mode_uninstall ${1+"$@"} 11106fi 11107 11108test -z "$opt_mode" && { 11109 help=$generic_help 11110 func_fatal_help "you must specify a MODE" 11111} 11112 11113test -z "$exec_cmd" && \ 11114 func_fatal_help "invalid operation mode '$opt_mode'" 11115 11116if test -n "$exec_cmd"; then 11117 eval exec "$exec_cmd" 11118 exit $EXIT_FAILURE 11119fi 11120 11121exit $exit_status 11122 11123 11124# The TAGs below are defined such that we never get into a situation 11125# where we disable both kinds of libraries. Given conflicting 11126# choices, we go for a static library, that is the most portable, 11127# since we can't tell whether shared libraries were disabled because 11128# the user asked for that or because the platform doesn't support 11129# them. This is particularly important on AIX, because we don't 11130# support having both static and shared libraries enabled at the same 11131# time on that platform, so we default to a shared-only configuration. 11132# If a disable-shared tag is given, we'll fallback to a static-only 11133# configuration. But we'll never go from static-only to shared-only. 11134 11135# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11136build_libtool_libs=no 11137build_old_libs=yes 11138# ### END LIBTOOL TAG CONFIG: disable-shared 11139 11140# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11141build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11142# ### END LIBTOOL TAG CONFIG: disable-static 11143 11144# Local Variables: 11145# mode:shell-script 11146# sh-indentation:2 11147# End: 11148