ltmain.sh revision cfa76ccd
1cfa76ccdSmrg#! /usr/bin/env sh 2cfa76ccdSmrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3cfa76ccdSmrg## by inline-source v2019-02-19.15 4e96acad6Smrg 5cfa76ccdSmrg# libtool (GNU libtool) 2.4.7 6cfa76ccdSmrg# Provide generalized library-building support services. 7e96acad6Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8e96acad6Smrg 9cfa76ccdSmrg# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. 10e96acad6Smrg# This is free software; see the source for copying conditions. There is NO 11e96acad6Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12e96acad6Smrg 13e96acad6Smrg# GNU Libtool is free software; you can redistribute it and/or modify 14dbbd9e4bSmacallan# it under the terms of the GNU General Public License as published by 15dbbd9e4bSmacallan# the Free Software Foundation; either version 2 of the License, or 16dbbd9e4bSmacallan# (at your option) any later version. 17dbbd9e4bSmacallan# 18e96acad6Smrg# As a special exception to the GNU General Public License, 19e96acad6Smrg# if you distribute this file as part of a program or library that 20e96acad6Smrg# is built using GNU Libtool, you may include this file under the 21e96acad6Smrg# same distribution terms that you use for the rest of that program. 22e96acad6Smrg# 23e96acad6Smrg# GNU Libtool is distributed in the hope that it will be useful, but 24dbbd9e4bSmacallan# WITHOUT ANY WARRANTY; without even the implied warranty of 25dbbd9e4bSmacallan# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26dbbd9e4bSmacallan# General Public License for more details. 27dbbd9e4bSmacallan# 28dbbd9e4bSmacallan# You should have received a copy of the GNU General Public License 29cfa76ccdSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 30dbbd9e4bSmacallan 31cfa76ccdSmrg 32cfa76ccdSmrgPROGRAM=libtool 33cfa76ccdSmrgPACKAGE=libtool 34cfa76ccdSmrgVERSION=2.4.7 35cfa76ccdSmrgpackage_revision=2.4.7 36cfa76ccdSmrg 37cfa76ccdSmrg 38cfa76ccdSmrg## ------ ## 39cfa76ccdSmrg## Usage. ## 40cfa76ccdSmrg## ------ ## 41cfa76ccdSmrg 42cfa76ccdSmrg# Run './libtool --help' for help with using this script from the 43cfa76ccdSmrg# command line. 44cfa76ccdSmrg 45cfa76ccdSmrg 46cfa76ccdSmrg## ------------------------------- ## 47cfa76ccdSmrg## User overridable command paths. ## 48cfa76ccdSmrg## ------------------------------- ## 49cfa76ccdSmrg 50cfa76ccdSmrg# After configure completes, it has a better idea of some of the 51cfa76ccdSmrg# shell tools we need than the defaults used by the functions shared 52cfa76ccdSmrg# with bootstrap, so set those here where they can still be over- 53cfa76ccdSmrg# ridden by the user, but otherwise take precedence. 54cfa76ccdSmrg 55cfa76ccdSmrg: ${AUTOCONF="autoconf"} 56cfa76ccdSmrg: ${AUTOMAKE="automake"} 57cfa76ccdSmrg 58cfa76ccdSmrg 59cfa76ccdSmrg## -------------------------- ## 60cfa76ccdSmrg## Source external libraries. ## 61cfa76ccdSmrg## -------------------------- ## 62cfa76ccdSmrg 63cfa76ccdSmrg# Much of our low-level functionality needs to be sourced from external 64cfa76ccdSmrg# libraries, which are installed to $pkgauxdir. 65cfa76ccdSmrg 66cfa76ccdSmrg# Set a version string for this script. 67cfa76ccdSmrgscriptversion=2019-02-19.15; # UTC 68cfa76ccdSmrg 69cfa76ccdSmrg# General shell script boiler plate, and helper functions. 70cfa76ccdSmrg# Written by Gary V. Vaughan, 2004 71cfa76ccdSmrg 72cfa76ccdSmrg# This is free software. There is NO warranty; not even for 73cfa76ccdSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 74e96acad6Smrg# 75cfa76ccdSmrg# Copyright (C) 2004-2019, 2021 Bootstrap Authors 76e96acad6Smrg# 77cfa76ccdSmrg# This file is dual licensed under the terms of the MIT license 78cfa76ccdSmrg# <https://opensource.org/license/MIT>, and GPL version 2 or later 79cfa76ccdSmrg# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 80cfa76ccdSmrg# these licenses when using or redistributing this software or any of 81cfa76ccdSmrg# the files within it. See the URLs above, or the file `LICENSE` 82cfa76ccdSmrg# included in the Bootstrap distribution for the full license texts. 83cfa76ccdSmrg 84cfa76ccdSmrg# Please report bugs or propose patches to: 85cfa76ccdSmrg# <https://github.com/gnulib-modules/bootstrap/issues> 86cfa76ccdSmrg 87cfa76ccdSmrg 88cfa76ccdSmrg## ------ ## 89cfa76ccdSmrg## Usage. ## 90cfa76ccdSmrg## ------ ## 91cfa76ccdSmrg 92cfa76ccdSmrg# Evaluate this file near the top of your script to gain access to 93cfa76ccdSmrg# the functions and variables defined here: 94e96acad6Smrg# 95cfa76ccdSmrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 96e96acad6Smrg# 97cfa76ccdSmrg# If you need to override any of the default environment variable 98cfa76ccdSmrg# settings, do that before evaluating this file. 99dbbd9e4bSmacallan 100dbbd9e4bSmacallan 101cfa76ccdSmrg## -------------------- ## 102cfa76ccdSmrg## Shell normalisation. ## 103cfa76ccdSmrg## -------------------- ## 104cfa76ccdSmrg 105cfa76ccdSmrg# Some shells need a little help to be as Bourne compatible as possible. 106cfa76ccdSmrg# Before doing anything else, make sure all that help has been provided! 107cfa76ccdSmrg 108cfa76ccdSmrgDUALCASE=1; export DUALCASE # for MKS sh 109cfa76ccdSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 110dbbd9e4bSmacallan emulate sh 111dbbd9e4bSmacallan NULLCMD=: 112cfa76ccdSmrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 113dbbd9e4bSmacallan # is contrary to our usage. Disable this feature. 114dbbd9e4bSmacallan alias -g '${1+"$@"}'='"$@"' 115dbbd9e4bSmacallan setopt NO_GLOB_SUBST 116dbbd9e4bSmacallanelse 117cfa76ccdSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 118dbbd9e4bSmacallanfi 119dbbd9e4bSmacallan 120cfa76ccdSmrg# NLS nuisances: We save the old values in case they are required later. 121cfa76ccdSmrg_G_user_locale= 122cfa76ccdSmrg_G_safe_locale= 123cfa76ccdSmrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 124dbbd9e4bSmacallando 125cfa76ccdSmrg eval "if test set = \"\${$_G_var+set}\"; then 126cfa76ccdSmrg save_$_G_var=\$$_G_var 127cfa76ccdSmrg $_G_var=C 128cfa76ccdSmrg export $_G_var 129cfa76ccdSmrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 130cfa76ccdSmrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 131dbbd9e4bSmacallan fi" 132dbbd9e4bSmacallandone 133cfa76ccdSmrg# These NLS vars are set unconditionally (bootstrap issue #24). Unset those 134cfa76ccdSmrg# in case the environment reset is needed later and the $save_* variant is not 135cfa76ccdSmrg# defined (see the code above). 136e96acad6SmrgLC_ALL=C 137e96acad6SmrgLANGUAGE=C 138e96acad6Smrgexport LANGUAGE LC_ALL 139e96acad6Smrg 140cfa76ccdSmrg# Make sure IFS has a sensible default 141cfa76ccdSmrgsp=' ' 142cfa76ccdSmrgnl=' 143cfa76ccdSmrg' 144cfa76ccdSmrgIFS="$sp $nl" 145cfa76ccdSmrg 146cfa76ccdSmrg# There are apparently some retarded systems that use ';' as a PATH separator! 147cfa76ccdSmrgif test "${PATH_SEPARATOR+set}" != set; then 148cfa76ccdSmrg PATH_SEPARATOR=: 149cfa76ccdSmrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 150cfa76ccdSmrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 151cfa76ccdSmrg PATH_SEPARATOR=';' 152cfa76ccdSmrg } 153cfa76ccdSmrgfi 154e96acad6Smrg 155e96acad6Smrg 156cfa76ccdSmrg# func_unset VAR 157cfa76ccdSmrg# -------------- 158cfa76ccdSmrg# Portably unset VAR. 159cfa76ccdSmrg# In some shells, an 'unset VAR' statement leaves a non-zero return 160cfa76ccdSmrg# status if VAR is already unset, which might be problematic if the 161cfa76ccdSmrg# statement is used at the end of a function (thus poisoning its return 162cfa76ccdSmrg# value) or when 'set -e' is active (causing even a spurious abort of 163cfa76ccdSmrg# the script in this case). 164cfa76ccdSmrgfunc_unset () 165cfa76ccdSmrg{ 166cfa76ccdSmrg { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } 167cfa76ccdSmrg} 168e96acad6Smrg 169e96acad6Smrg 170cfa76ccdSmrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir. 171cfa76ccdSmrgfunc_unset CDPATH 172e96acad6Smrg 173cfa76ccdSmrg# Make sure ${,E,F}GREP behave sanely. 174cfa76ccdSmrgfunc_unset GREP_OPTIONS 175e96acad6Smrg 176dbbd9e4bSmacallan 177cfa76ccdSmrg## ------------------------- ## 178cfa76ccdSmrg## Locate command utilities. ## 179cfa76ccdSmrg## ------------------------- ## 180dbbd9e4bSmacallan 181dbbd9e4bSmacallan 182cfa76ccdSmrg# func_executable_p FILE 183cfa76ccdSmrg# ---------------------- 184cfa76ccdSmrg# Check that FILE is an executable regular file. 185cfa76ccdSmrgfunc_executable_p () 186e96acad6Smrg{ 187cfa76ccdSmrg test -f "$1" && test -x "$1" 188cfa76ccdSmrg} 189e96acad6Smrg 190e96acad6Smrg 191cfa76ccdSmrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 192cfa76ccdSmrg# -------------------------------------------- 193cfa76ccdSmrg# Search for either a program that responds to --version with output 194cfa76ccdSmrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 195cfa76ccdSmrg# trying all the directories in PATH with each of the elements of 196cfa76ccdSmrg# PROGS_LIST. 197cfa76ccdSmrg# 198cfa76ccdSmrg# CHECK_FUNC should accept the path to a candidate program, and 199cfa76ccdSmrg# set $func_check_prog_result if it truncates its output less than 200cfa76ccdSmrg# $_G_path_prog_max characters. 201cfa76ccdSmrgfunc_path_progs () 202e96acad6Smrg{ 203cfa76ccdSmrg _G_progs_list=$1 204cfa76ccdSmrg _G_check_func=$2 205cfa76ccdSmrg _G_PATH=${3-"$PATH"} 206cfa76ccdSmrg 207cfa76ccdSmrg _G_path_prog_max=0 208cfa76ccdSmrg _G_path_prog_found=false 209cfa76ccdSmrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 210cfa76ccdSmrg for _G_dir in $_G_PATH; do 211cfa76ccdSmrg IFS=$_G_save_IFS 212cfa76ccdSmrg test -z "$_G_dir" && _G_dir=. 213cfa76ccdSmrg for _G_prog_name in $_G_progs_list; do 214cfa76ccdSmrg for _exeext in '' .EXE; do 215cfa76ccdSmrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 216cfa76ccdSmrg func_executable_p "$_G_path_prog" || continue 217cfa76ccdSmrg case `"$_G_path_prog" --version 2>&1` in 218cfa76ccdSmrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 219cfa76ccdSmrg *) $_G_check_func $_G_path_prog 220cfa76ccdSmrg func_path_progs_result=$func_check_prog_result 221cfa76ccdSmrg ;; 222cfa76ccdSmrg esac 223cfa76ccdSmrg $_G_path_prog_found && break 3 224cfa76ccdSmrg done 225cfa76ccdSmrg done 226cfa76ccdSmrg done 227cfa76ccdSmrg IFS=$_G_save_IFS 228cfa76ccdSmrg test -z "$func_path_progs_result" && { 229cfa76ccdSmrg echo "no acceptable sed could be found in \$PATH" >&2 230cfa76ccdSmrg exit 1 231cfa76ccdSmrg } 232cfa76ccdSmrg} 233e96acad6Smrg 234e96acad6Smrg 235cfa76ccdSmrg# We want to be able to use the functions in this file before configure 236cfa76ccdSmrg# has figured out where the best binaries are kept, which means we have 237cfa76ccdSmrg# to search for them ourselves - except when the results are already set 238cfa76ccdSmrg# where we skip the searches. 239e96acad6Smrg 240cfa76ccdSmrg# Unless the user overrides by setting SED, search the path for either GNU 241cfa76ccdSmrg# sed, or the sed that truncates its output the least. 242cfa76ccdSmrgtest -z "$SED" && { 243cfa76ccdSmrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 244cfa76ccdSmrg for _G_i in 1 2 3 4 5 6 7; do 245cfa76ccdSmrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 246cfa76ccdSmrg done 247cfa76ccdSmrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 248cfa76ccdSmrg _G_sed_script= 249e96acad6Smrg 250cfa76ccdSmrg func_check_prog_sed () 251cfa76ccdSmrg { 252cfa76ccdSmrg _G_path_prog=$1 253e96acad6Smrg 254cfa76ccdSmrg _G_count=0 255cfa76ccdSmrg printf 0123456789 >conftest.in 256cfa76ccdSmrg while : 257cfa76ccdSmrg do 258cfa76ccdSmrg cat conftest.in conftest.in >conftest.tmp 259cfa76ccdSmrg mv conftest.tmp conftest.in 260cfa76ccdSmrg cp conftest.in conftest.nl 261cfa76ccdSmrg echo '' >> conftest.nl 262cfa76ccdSmrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 263cfa76ccdSmrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 264cfa76ccdSmrg _G_count=`expr $_G_count + 1` 265cfa76ccdSmrg if test "$_G_count" -gt "$_G_path_prog_max"; then 266cfa76ccdSmrg # Best one so far, save it but keep looking for a better one 267cfa76ccdSmrg func_check_prog_result=$_G_path_prog 268cfa76ccdSmrg _G_path_prog_max=$_G_count 269cfa76ccdSmrg fi 270cfa76ccdSmrg # 10*(2^10) chars as input seems more than enough 271cfa76ccdSmrg test 10 -lt "$_G_count" && break 272cfa76ccdSmrg done 273cfa76ccdSmrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 274cfa76ccdSmrg } 275e96acad6Smrg 276cfa76ccdSmrg func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" 277cfa76ccdSmrg rm -f conftest.sed 278cfa76ccdSmrg SED=$func_path_progs_result 279cfa76ccdSmrg} 280e96acad6Smrg 281cfa76ccdSmrg 282cfa76ccdSmrg# Unless the user overrides by setting GREP, search the path for either GNU 283cfa76ccdSmrg# grep, or the grep that truncates its output the least. 284cfa76ccdSmrgtest -z "$GREP" && { 285cfa76ccdSmrg func_check_prog_grep () 286cfa76ccdSmrg { 287cfa76ccdSmrg _G_path_prog=$1 288cfa76ccdSmrg 289cfa76ccdSmrg _G_count=0 290cfa76ccdSmrg _G_path_prog_max=0 291cfa76ccdSmrg printf 0123456789 >conftest.in 292cfa76ccdSmrg while : 293cfa76ccdSmrg do 294cfa76ccdSmrg cat conftest.in conftest.in >conftest.tmp 295cfa76ccdSmrg mv conftest.tmp conftest.in 296cfa76ccdSmrg cp conftest.in conftest.nl 297cfa76ccdSmrg echo 'GREP' >> conftest.nl 298cfa76ccdSmrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 299cfa76ccdSmrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 300cfa76ccdSmrg _G_count=`expr $_G_count + 1` 301cfa76ccdSmrg if test "$_G_count" -gt "$_G_path_prog_max"; then 302cfa76ccdSmrg # Best one so far, save it but keep looking for a better one 303cfa76ccdSmrg func_check_prog_result=$_G_path_prog 304cfa76ccdSmrg _G_path_prog_max=$_G_count 305cfa76ccdSmrg fi 306cfa76ccdSmrg # 10*(2^10) chars as input seems more than enough 307cfa76ccdSmrg test 10 -lt "$_G_count" && break 308cfa76ccdSmrg done 309cfa76ccdSmrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 310cfa76ccdSmrg } 311cfa76ccdSmrg 312cfa76ccdSmrg func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" 313cfa76ccdSmrg GREP=$func_path_progs_result 314cfa76ccdSmrg} 315cfa76ccdSmrg 316cfa76ccdSmrg 317cfa76ccdSmrg## ------------------------------- ## 318cfa76ccdSmrg## User overridable command paths. ## 319cfa76ccdSmrg## ------------------------------- ## 320cfa76ccdSmrg 321cfa76ccdSmrg# All uppercase variable names are used for environment variables. These 322cfa76ccdSmrg# variables can be overridden by the user before calling a script that 323cfa76ccdSmrg# uses them if a suitable command of that name is not already available 324cfa76ccdSmrg# in the command search PATH. 325cfa76ccdSmrg 326cfa76ccdSmrg: ${CP="cp -f"} 327cfa76ccdSmrg: ${ECHO="printf %s\n"} 328cfa76ccdSmrg: ${EGREP="$GREP -E"} 329cfa76ccdSmrg: ${FGREP="$GREP -F"} 330cfa76ccdSmrg: ${LN_S="ln -s"} 331cfa76ccdSmrg: ${MAKE="make"} 332cfa76ccdSmrg: ${MKDIR="mkdir"} 333cfa76ccdSmrg: ${MV="mv -f"} 334cfa76ccdSmrg: ${RM="rm -f"} 335cfa76ccdSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 336cfa76ccdSmrg 337cfa76ccdSmrg 338cfa76ccdSmrg## -------------------- ## 339cfa76ccdSmrg## Useful sed snippets. ## 340cfa76ccdSmrg## -------------------- ## 341cfa76ccdSmrg 342cfa76ccdSmrgsed_dirname='s|/[^/]*$||' 343cfa76ccdSmrgsed_basename='s|^.*/||' 344cfa76ccdSmrg 345cfa76ccdSmrg# Sed substitution that helps us do robust quoting. It backslashifies 346cfa76ccdSmrg# metacharacters that are still active within double-quoted strings. 347cfa76ccdSmrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 348cfa76ccdSmrg 349cfa76ccdSmrg# Same as above, but do not quote variable references. 350cfa76ccdSmrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 351cfa76ccdSmrg 352cfa76ccdSmrg# Sed substitution that turns a string into a regex matching for the 353cfa76ccdSmrg# string literally. 354cfa76ccdSmrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 355cfa76ccdSmrg 356cfa76ccdSmrg# Sed substitution that converts a w32 file name or path 357cfa76ccdSmrg# that contains forward slashes, into one that contains 358cfa76ccdSmrg# (escaped) backslashes. A very naive implementation. 359cfa76ccdSmrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 360cfa76ccdSmrg 361cfa76ccdSmrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 362cfa76ccdSmrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 363cfa76ccdSmrg# '$' in input to sed_double_quote_subst, that '$' was protected from 364cfa76ccdSmrg# expansion. Since each input '\' is now two '\'s, look for any number 365cfa76ccdSmrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 366cfa76ccdSmrg_G_bs='\\' 367cfa76ccdSmrg_G_bs2='\\\\' 368cfa76ccdSmrg_G_bs4='\\\\\\\\' 369cfa76ccdSmrg_G_dollar='\$' 370cfa76ccdSmrgsed_double_backslash="\ 371cfa76ccdSmrg s/$_G_bs4/&\\ 372cfa76ccdSmrg/g 373cfa76ccdSmrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 374cfa76ccdSmrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 375cfa76ccdSmrg s/\n//g" 376cfa76ccdSmrg 377cfa76ccdSmrg# require_check_ifs_backslash 378cfa76ccdSmrg# --------------------------- 379cfa76ccdSmrg# Check if we can use backslash as IFS='\' separator, and set 380cfa76ccdSmrg# $check_ifs_backshlash_broken to ':' or 'false'. 381cfa76ccdSmrgrequire_check_ifs_backslash=func_require_check_ifs_backslash 382cfa76ccdSmrgfunc_require_check_ifs_backslash () 383e96acad6Smrg{ 384cfa76ccdSmrg _G_save_IFS=$IFS 385cfa76ccdSmrg IFS='\' 386cfa76ccdSmrg _G_check_ifs_backshlash='a\\b' 387cfa76ccdSmrg for _G_i in $_G_check_ifs_backshlash 388cfa76ccdSmrg do 389cfa76ccdSmrg case $_G_i in 390cfa76ccdSmrg a) 391cfa76ccdSmrg check_ifs_backshlash_broken=false 392e96acad6Smrg ;; 393cfa76ccdSmrg '') 394cfa76ccdSmrg break 395e96acad6Smrg ;; 396cfa76ccdSmrg *) 397cfa76ccdSmrg check_ifs_backshlash_broken=: 398cfa76ccdSmrg break 399e96acad6Smrg ;; 400e96acad6Smrg esac 401e96acad6Smrg done 402cfa76ccdSmrg IFS=$_G_save_IFS 403cfa76ccdSmrg require_check_ifs_backslash=: 404e96acad6Smrg} 405e96acad6Smrg 406e96acad6Smrg 407cfa76ccdSmrg## ----------------- ## 408cfa76ccdSmrg## Global variables. ## 409cfa76ccdSmrg## ----------------- ## 410e96acad6Smrg 411cfa76ccdSmrg# Except for the global variables explicitly listed below, the following 412cfa76ccdSmrg# functions in the '^func_' namespace, and the '^require_' namespace 413cfa76ccdSmrg# variables initialised in the 'Resource management' section, sourcing 414cfa76ccdSmrg# this file will not pollute your global namespace with anything 415cfa76ccdSmrg# else. There's no portable way to scope variables in Bourne shell 416cfa76ccdSmrg# though, so actually running these functions will sometimes place 417cfa76ccdSmrg# results into a variable named after the function, and often use 418cfa76ccdSmrg# temporary variables in the '^_G_' namespace. If you are careful to 419cfa76ccdSmrg# avoid using those namespaces casually in your sourcing script, things 420cfa76ccdSmrg# should continue to work as you expect. And, of course, you can freely 421cfa76ccdSmrg# overwrite any of the functions or variables defined here before 422cfa76ccdSmrg# calling anything to customize them. 423cfa76ccdSmrg 424cfa76ccdSmrgEXIT_SUCCESS=0 425cfa76ccdSmrgEXIT_FAILURE=1 426cfa76ccdSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 427cfa76ccdSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 428cfa76ccdSmrg 429cfa76ccdSmrg# Allow overriding, eg assuming that you follow the convention of 430cfa76ccdSmrg# putting '$debug_cmd' at the start of all your functions, you can get 431cfa76ccdSmrg# bash to show function call trace with: 432cfa76ccdSmrg# 433cfa76ccdSmrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 434cfa76ccdSmrgdebug_cmd=${debug_cmd-":"} 435cfa76ccdSmrgexit_cmd=: 436cfa76ccdSmrg 437cfa76ccdSmrg# By convention, finish your script with: 438cfa76ccdSmrg# 439cfa76ccdSmrg# exit $exit_status 440cfa76ccdSmrg# 441cfa76ccdSmrg# so that you can set exit_status to non-zero if you want to indicate 442cfa76ccdSmrg# something went wrong during execution without actually bailing out at 443cfa76ccdSmrg# the point of failure. 444cfa76ccdSmrgexit_status=$EXIT_SUCCESS 445cfa76ccdSmrg 446cfa76ccdSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 447cfa76ccdSmrg# is ksh but when the shell is invoked as "sh" and the current value of 448cfa76ccdSmrg# the _XPG environment variable is not equal to 1 (one), the special 449cfa76ccdSmrg# positional parameter $0, within a function call, is the name of the 450cfa76ccdSmrg# function. 451cfa76ccdSmrgprogpath=$0 452e96acad6Smrg 453cfa76ccdSmrg# The name of this program. 454cfa76ccdSmrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 455e96acad6Smrg 456cfa76ccdSmrg# Make sure we have an absolute progpath for reexecution: 457e96acad6Smrgcase $progpath in 458e96acad6Smrg [\\/]*|[A-Za-z]:\\*) ;; 459e96acad6Smrg *[\\/]*) 460cfa76ccdSmrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 461e96acad6Smrg progdir=`cd "$progdir" && pwd` 462cfa76ccdSmrg progpath=$progdir/$progname 463e96acad6Smrg ;; 464e96acad6Smrg *) 465cfa76ccdSmrg _G_IFS=$IFS 466cfa76ccdSmrg IFS=${PATH_SEPARATOR-:} 467e96acad6Smrg for progdir in $PATH; do 468cfa76ccdSmrg IFS=$_G_IFS 469e96acad6Smrg test -x "$progdir/$progname" && break 470e96acad6Smrg done 471cfa76ccdSmrg IFS=$_G_IFS 472e96acad6Smrg test -n "$progdir" || progdir=`pwd` 473cfa76ccdSmrg progpath=$progdir/$progname 474e96acad6Smrg ;; 475e96acad6Smrgesac 476e96acad6Smrg 477e96acad6Smrg 478cfa76ccdSmrg## ----------------- ## 479cfa76ccdSmrg## Standard options. ## 480cfa76ccdSmrg## ----------------- ## 481e96acad6Smrg 482cfa76ccdSmrg# The following options affect the operation of the functions defined 483cfa76ccdSmrg# below, and should be set appropriately depending on run-time para- 484cfa76ccdSmrg# meters passed on the command line. 485e96acad6Smrg 486e96acad6Smrgopt_dry_run=false 487e96acad6Smrgopt_quiet=false 488e96acad6Smrgopt_verbose=false 489e96acad6Smrg 490cfa76ccdSmrg# Categories 'all' and 'none' are always available. Append any others 491cfa76ccdSmrg# you will pass as the first argument to func_warning from your own 492cfa76ccdSmrg# code. 493cfa76ccdSmrgwarning_categories= 494e96acad6Smrg 495cfa76ccdSmrg# By default, display warnings according to 'opt_warning_types'. Set 496cfa76ccdSmrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 497cfa76ccdSmrg# treat the next displayed warning as a fatal error. 498cfa76ccdSmrgwarning_func=func_warn_and_continue 499e96acad6Smrg 500cfa76ccdSmrg# Set to 'all' to display all warnings, 'none' to suppress all 501cfa76ccdSmrg# warnings, or a space delimited list of some subset of 502cfa76ccdSmrg# 'warning_categories' to display only the listed warnings. 503cfa76ccdSmrgopt_warning_types=all 504e96acad6Smrg 505e96acad6Smrg 506cfa76ccdSmrg## -------------------- ## 507cfa76ccdSmrg## Resource management. ## 508cfa76ccdSmrg## -------------------- ## 509e96acad6Smrg 510cfa76ccdSmrg# This section contains definitions for functions that each ensure a 511cfa76ccdSmrg# particular resource (a file, or a non-empty configuration variable for 512cfa76ccdSmrg# example) is available, and if appropriate to extract default values 513cfa76ccdSmrg# from pertinent package files. Call them using their associated 514cfa76ccdSmrg# 'require_*' variable to ensure that they are executed, at most, once. 515cfa76ccdSmrg# 516cfa76ccdSmrg# It's entirely deliberate that calling these functions can set 517cfa76ccdSmrg# variables that don't obey the namespace limitations obeyed by the rest 518cfa76ccdSmrg# of this file, in order that that they be as useful as possible to 519cfa76ccdSmrg# callers. 520e96acad6Smrg 521e96acad6Smrg 522cfa76ccdSmrg# require_term_colors 523cfa76ccdSmrg# ------------------- 524cfa76ccdSmrg# Allow display of bold text on terminals that support it. 525cfa76ccdSmrgrequire_term_colors=func_require_term_colors 526cfa76ccdSmrgfunc_require_term_colors () 527e96acad6Smrg{ 528cfa76ccdSmrg $debug_cmd 529cfa76ccdSmrg 530cfa76ccdSmrg test -t 1 && { 531cfa76ccdSmrg # COLORTERM and USE_ANSI_COLORS environment variables take 532cfa76ccdSmrg # precedence, because most terminfo databases neglect to describe 533cfa76ccdSmrg # whether color sequences are supported. 534cfa76ccdSmrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 535cfa76ccdSmrg 536cfa76ccdSmrg if test 1 = "$USE_ANSI_COLORS"; then 537cfa76ccdSmrg # Standard ANSI escape sequences 538cfa76ccdSmrg tc_reset='[0m' 539cfa76ccdSmrg tc_bold='[1m'; tc_standout='[7m' 540cfa76ccdSmrg tc_red='[31m'; tc_green='[32m' 541cfa76ccdSmrg tc_blue='[34m'; tc_cyan='[36m' 542cfa76ccdSmrg else 543cfa76ccdSmrg # Otherwise trust the terminfo database after all. 544cfa76ccdSmrg test -n "`tput sgr0 2>/dev/null`" && { 545cfa76ccdSmrg tc_reset=`tput sgr0` 546cfa76ccdSmrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 547cfa76ccdSmrg tc_standout=$tc_bold 548cfa76ccdSmrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 549cfa76ccdSmrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 550cfa76ccdSmrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 551cfa76ccdSmrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 552cfa76ccdSmrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 553cfa76ccdSmrg } 554cfa76ccdSmrg fi 555cfa76ccdSmrg } 556e96acad6Smrg 557cfa76ccdSmrg require_term_colors=: 558e96acad6Smrg} 559e96acad6Smrg 560e96acad6Smrg 561cfa76ccdSmrg## ----------------- ## 562cfa76ccdSmrg## Function library. ## 563cfa76ccdSmrg## ----------------- ## 564e96acad6Smrg 565cfa76ccdSmrg# This section contains a variety of useful functions to call in your 566cfa76ccdSmrg# scripts. Take note of the portable wrappers for features provided by 567cfa76ccdSmrg# some modern shells, which will fall back to slower equivalents on 568cfa76ccdSmrg# less featureful shells. 569e96acad6Smrg 570cfa76ccdSmrg 571cfa76ccdSmrg# func_append VAR VALUE 572cfa76ccdSmrg# --------------------- 573cfa76ccdSmrg# Append VALUE onto the existing contents of VAR. 574cfa76ccdSmrg 575cfa76ccdSmrg # We should try to minimise forks, especially on Windows where they are 576cfa76ccdSmrg # unreasonably slow, so skip the feature probes when bash or zsh are 577cfa76ccdSmrg # being used: 578cfa76ccdSmrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 579cfa76ccdSmrg : ${_G_HAVE_ARITH_OP="yes"} 580cfa76ccdSmrg : ${_G_HAVE_XSI_OPS="yes"} 581cfa76ccdSmrg # The += operator was introduced in bash 3.1 582cfa76ccdSmrg case $BASH_VERSION in 583cfa76ccdSmrg [12].* | 3.0 | 3.0*) ;; 584cfa76ccdSmrg *) 585cfa76ccdSmrg : ${_G_HAVE_PLUSEQ_OP="yes"} 586cfa76ccdSmrg ;; 587cfa76ccdSmrg esac 588cfa76ccdSmrg fi 589cfa76ccdSmrg 590cfa76ccdSmrg # _G_HAVE_PLUSEQ_OP 591cfa76ccdSmrg # Can be empty, in which case the shell is probed, "yes" if += is 592cfa76ccdSmrg # useable or anything else if it does not work. 593cfa76ccdSmrg test -z "$_G_HAVE_PLUSEQ_OP" \ 594cfa76ccdSmrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 595cfa76ccdSmrg && _G_HAVE_PLUSEQ_OP=yes 596cfa76ccdSmrg 597cfa76ccdSmrgif test yes = "$_G_HAVE_PLUSEQ_OP" 598cfa76ccdSmrgthen 599cfa76ccdSmrg # This is an XSI compatible shell, allowing a faster implementation... 600cfa76ccdSmrg eval 'func_append () 601cfa76ccdSmrg { 602cfa76ccdSmrg $debug_cmd 603cfa76ccdSmrg 604cfa76ccdSmrg eval "$1+=\$2" 605cfa76ccdSmrg }' 606cfa76ccdSmrgelse 607cfa76ccdSmrg # ...otherwise fall back to using expr, which is often a shell builtin. 608cfa76ccdSmrg func_append () 609cfa76ccdSmrg { 610cfa76ccdSmrg $debug_cmd 611cfa76ccdSmrg 612cfa76ccdSmrg eval "$1=\$$1\$2" 613cfa76ccdSmrg } 614cfa76ccdSmrgfi 615cfa76ccdSmrg 616cfa76ccdSmrg 617cfa76ccdSmrg# func_append_quoted VAR VALUE 618cfa76ccdSmrg# ---------------------------- 619cfa76ccdSmrg# Quote VALUE and append to the end of shell variable VAR, separated 620cfa76ccdSmrg# by a space. 621cfa76ccdSmrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 622cfa76ccdSmrg eval 'func_append_quoted () 623cfa76ccdSmrg { 624cfa76ccdSmrg $debug_cmd 625cfa76ccdSmrg 626cfa76ccdSmrg func_quote_arg pretty "$2" 627cfa76ccdSmrg eval "$1+=\\ \$func_quote_arg_result" 628cfa76ccdSmrg }' 629cfa76ccdSmrgelse 630cfa76ccdSmrg func_append_quoted () 631cfa76ccdSmrg { 632cfa76ccdSmrg $debug_cmd 633cfa76ccdSmrg 634cfa76ccdSmrg func_quote_arg pretty "$2" 635cfa76ccdSmrg eval "$1=\$$1\\ \$func_quote_arg_result" 636cfa76ccdSmrg } 637cfa76ccdSmrgfi 638cfa76ccdSmrg 639cfa76ccdSmrg 640cfa76ccdSmrg# func_append_uniq VAR VALUE 641cfa76ccdSmrg# -------------------------- 642cfa76ccdSmrg# Append unique VALUE onto the existing contents of VAR, assuming 643cfa76ccdSmrg# entries are delimited by the first character of VALUE. For example: 644cfa76ccdSmrg# 645cfa76ccdSmrg# func_append_uniq options " --another-option option-argument" 646cfa76ccdSmrg# 647cfa76ccdSmrg# will only append to $options if " --another-option option-argument " 648cfa76ccdSmrg# is not already present somewhere in $options already (note spaces at 649cfa76ccdSmrg# each end implied by leading space in second argument). 650cfa76ccdSmrgfunc_append_uniq () 651cfa76ccdSmrg{ 652cfa76ccdSmrg $debug_cmd 653cfa76ccdSmrg 654cfa76ccdSmrg eval _G_current_value='`$ECHO $'$1'`' 655cfa76ccdSmrg _G_delim=`expr "$2" : '\(.\)'` 656cfa76ccdSmrg 657cfa76ccdSmrg case $_G_delim$_G_current_value$_G_delim in 658cfa76ccdSmrg *"$2$_G_delim"*) ;; 659cfa76ccdSmrg *) func_append "$@" ;; 660cfa76ccdSmrg esac 661cfa76ccdSmrg} 662cfa76ccdSmrg 663cfa76ccdSmrg 664cfa76ccdSmrg# func_arith TERM... 665cfa76ccdSmrg# ------------------ 666cfa76ccdSmrg# Set func_arith_result to the result of evaluating TERMs. 667cfa76ccdSmrg test -z "$_G_HAVE_ARITH_OP" \ 668cfa76ccdSmrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 669cfa76ccdSmrg && _G_HAVE_ARITH_OP=yes 670cfa76ccdSmrg 671cfa76ccdSmrgif test yes = "$_G_HAVE_ARITH_OP"; then 672cfa76ccdSmrg eval 'func_arith () 673cfa76ccdSmrg { 674cfa76ccdSmrg $debug_cmd 675cfa76ccdSmrg 676cfa76ccdSmrg func_arith_result=$(( $* )) 677cfa76ccdSmrg }' 678cfa76ccdSmrgelse 679cfa76ccdSmrg func_arith () 680cfa76ccdSmrg { 681cfa76ccdSmrg $debug_cmd 682cfa76ccdSmrg 683cfa76ccdSmrg func_arith_result=`expr "$@"` 684cfa76ccdSmrg } 685cfa76ccdSmrgfi 686cfa76ccdSmrg 687cfa76ccdSmrg 688cfa76ccdSmrg# func_basename FILE 689cfa76ccdSmrg# ------------------ 690cfa76ccdSmrg# Set func_basename_result to FILE with everything up to and including 691cfa76ccdSmrg# the last / stripped. 692cfa76ccdSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 693cfa76ccdSmrg # If this shell supports suffix pattern removal, then use it to avoid 694cfa76ccdSmrg # forking. Hide the definitions single quotes in case the shell chokes 695cfa76ccdSmrg # on unsupported syntax... 696cfa76ccdSmrg _b='func_basename_result=${1##*/}' 697cfa76ccdSmrg _d='case $1 in 698cfa76ccdSmrg */*) func_dirname_result=${1%/*}$2 ;; 699cfa76ccdSmrg * ) func_dirname_result=$3 ;; 700cfa76ccdSmrg esac' 701cfa76ccdSmrg 702cfa76ccdSmrgelse 703cfa76ccdSmrg # ...otherwise fall back to using sed. 704cfa76ccdSmrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 705cfa76ccdSmrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 706cfa76ccdSmrg if test "X$func_dirname_result" = "X$1"; then 707cfa76ccdSmrg func_dirname_result=$3 708cfa76ccdSmrg else 709cfa76ccdSmrg func_append func_dirname_result "$2" 710cfa76ccdSmrg fi' 711cfa76ccdSmrgfi 712cfa76ccdSmrg 713cfa76ccdSmrgeval 'func_basename () 714cfa76ccdSmrg{ 715cfa76ccdSmrg $debug_cmd 716cfa76ccdSmrg 717cfa76ccdSmrg '"$_b"' 718cfa76ccdSmrg}' 719cfa76ccdSmrg 720cfa76ccdSmrg 721cfa76ccdSmrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 722cfa76ccdSmrg# ------------------------------------------- 723cfa76ccdSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 724cfa76ccdSmrg# otherwise set result to NONDIR_REPLACEMENT. 725cfa76ccdSmrgeval 'func_dirname () 726cfa76ccdSmrg{ 727cfa76ccdSmrg $debug_cmd 728cfa76ccdSmrg 729cfa76ccdSmrg '"$_d"' 730cfa76ccdSmrg}' 731cfa76ccdSmrg 732cfa76ccdSmrg 733cfa76ccdSmrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 734cfa76ccdSmrg# -------------------------------------------------------- 735cfa76ccdSmrg# Perform func_basename and func_dirname in a single function 736cfa76ccdSmrg# call: 737cfa76ccdSmrg# dirname: Compute the dirname of FILE. If nonempty, 738cfa76ccdSmrg# add APPEND to the result, otherwise set result 739cfa76ccdSmrg# to NONDIR_REPLACEMENT. 740cfa76ccdSmrg# value returned in "$func_dirname_result" 741cfa76ccdSmrg# basename: Compute filename of FILE. 742cfa76ccdSmrg# value retuned in "$func_basename_result" 743cfa76ccdSmrg# For efficiency, we do not delegate to the functions above but instead 744cfa76ccdSmrg# duplicate the functionality here. 745cfa76ccdSmrgeval 'func_dirname_and_basename () 746cfa76ccdSmrg{ 747cfa76ccdSmrg $debug_cmd 748cfa76ccdSmrg 749cfa76ccdSmrg '"$_b"' 750cfa76ccdSmrg '"$_d"' 751cfa76ccdSmrg}' 752cfa76ccdSmrg 753cfa76ccdSmrg 754cfa76ccdSmrg# func_echo ARG... 755cfa76ccdSmrg# ---------------- 756cfa76ccdSmrg# Echo program name prefixed message. 757cfa76ccdSmrgfunc_echo () 758cfa76ccdSmrg{ 759cfa76ccdSmrg $debug_cmd 760cfa76ccdSmrg 761cfa76ccdSmrg _G_message=$* 762cfa76ccdSmrg 763cfa76ccdSmrg func_echo_IFS=$IFS 764cfa76ccdSmrg IFS=$nl 765cfa76ccdSmrg for _G_line in $_G_message; do 766cfa76ccdSmrg IFS=$func_echo_IFS 767cfa76ccdSmrg $ECHO "$progname: $_G_line" 768cfa76ccdSmrg done 769cfa76ccdSmrg IFS=$func_echo_IFS 770cfa76ccdSmrg} 771cfa76ccdSmrg 772cfa76ccdSmrg 773cfa76ccdSmrg# func_echo_all ARG... 774cfa76ccdSmrg# -------------------- 775cfa76ccdSmrg# Invoke $ECHO with all args, space-separated. 776cfa76ccdSmrgfunc_echo_all () 777cfa76ccdSmrg{ 778cfa76ccdSmrg $ECHO "$*" 779cfa76ccdSmrg} 780cfa76ccdSmrg 781cfa76ccdSmrg 782cfa76ccdSmrg# func_echo_infix_1 INFIX ARG... 783cfa76ccdSmrg# ------------------------------ 784cfa76ccdSmrg# Echo program name, followed by INFIX on the first line, with any 785cfa76ccdSmrg# additional lines not showing INFIX. 786cfa76ccdSmrgfunc_echo_infix_1 () 787cfa76ccdSmrg{ 788cfa76ccdSmrg $debug_cmd 789cfa76ccdSmrg 790cfa76ccdSmrg $require_term_colors 791cfa76ccdSmrg 792cfa76ccdSmrg _G_infix=$1; shift 793cfa76ccdSmrg _G_indent=$_G_infix 794cfa76ccdSmrg _G_prefix="$progname: $_G_infix: " 795cfa76ccdSmrg _G_message=$* 796cfa76ccdSmrg 797cfa76ccdSmrg # Strip color escape sequences before counting printable length 798cfa76ccdSmrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 799cfa76ccdSmrg do 800cfa76ccdSmrg test -n "$_G_tc" && { 801cfa76ccdSmrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 802cfa76ccdSmrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 803cfa76ccdSmrg } 804cfa76ccdSmrg done 805cfa76ccdSmrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 806cfa76ccdSmrg 807cfa76ccdSmrg func_echo_infix_1_IFS=$IFS 808cfa76ccdSmrg IFS=$nl 809cfa76ccdSmrg for _G_line in $_G_message; do 810cfa76ccdSmrg IFS=$func_echo_infix_1_IFS 811cfa76ccdSmrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 812cfa76ccdSmrg _G_prefix=$_G_indent 813cfa76ccdSmrg done 814cfa76ccdSmrg IFS=$func_echo_infix_1_IFS 815cfa76ccdSmrg} 816cfa76ccdSmrg 817cfa76ccdSmrg 818cfa76ccdSmrg# func_error ARG... 819cfa76ccdSmrg# ----------------- 820cfa76ccdSmrg# Echo program name prefixed message to standard error. 821cfa76ccdSmrgfunc_error () 822cfa76ccdSmrg{ 823cfa76ccdSmrg $debug_cmd 824cfa76ccdSmrg 825cfa76ccdSmrg $require_term_colors 826cfa76ccdSmrg 827cfa76ccdSmrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 828cfa76ccdSmrg} 829cfa76ccdSmrg 830cfa76ccdSmrg 831cfa76ccdSmrg# func_fatal_error ARG... 832cfa76ccdSmrg# ----------------------- 833cfa76ccdSmrg# Echo program name prefixed message to standard error, and exit. 834cfa76ccdSmrgfunc_fatal_error () 835cfa76ccdSmrg{ 836cfa76ccdSmrg $debug_cmd 837cfa76ccdSmrg 838cfa76ccdSmrg func_error "$*" 839cfa76ccdSmrg exit $EXIT_FAILURE 840cfa76ccdSmrg} 841cfa76ccdSmrg 842cfa76ccdSmrg 843cfa76ccdSmrg# func_grep EXPRESSION FILENAME 844cfa76ccdSmrg# ----------------------------- 845cfa76ccdSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 846cfa76ccdSmrgfunc_grep () 847cfa76ccdSmrg{ 848cfa76ccdSmrg $debug_cmd 849cfa76ccdSmrg 850cfa76ccdSmrg $GREP "$1" "$2" >/dev/null 2>&1 851cfa76ccdSmrg} 852cfa76ccdSmrg 853cfa76ccdSmrg 854cfa76ccdSmrg# func_len STRING 855cfa76ccdSmrg# --------------- 856cfa76ccdSmrg# Set func_len_result to the length of STRING. STRING may not 857cfa76ccdSmrg# start with a hyphen. 858cfa76ccdSmrg test -z "$_G_HAVE_XSI_OPS" \ 859cfa76ccdSmrg && (eval 'x=a/b/c; 860cfa76ccdSmrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 861cfa76ccdSmrg && _G_HAVE_XSI_OPS=yes 862cfa76ccdSmrg 863cfa76ccdSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 864cfa76ccdSmrg eval 'func_len () 865cfa76ccdSmrg { 866cfa76ccdSmrg $debug_cmd 867cfa76ccdSmrg 868cfa76ccdSmrg func_len_result=${#1} 869cfa76ccdSmrg }' 870cfa76ccdSmrgelse 871cfa76ccdSmrg func_len () 872cfa76ccdSmrg { 873cfa76ccdSmrg $debug_cmd 874cfa76ccdSmrg 875cfa76ccdSmrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 876cfa76ccdSmrg } 877cfa76ccdSmrgfi 878cfa76ccdSmrg 879cfa76ccdSmrg 880cfa76ccdSmrg# func_mkdir_p DIRECTORY-PATH 881cfa76ccdSmrg# --------------------------- 882e96acad6Smrg# Make sure the entire path to DIRECTORY-PATH is available. 883e96acad6Smrgfunc_mkdir_p () 884e96acad6Smrg{ 885cfa76ccdSmrg $debug_cmd 886e96acad6Smrg 887cfa76ccdSmrg _G_directory_path=$1 888cfa76ccdSmrg _G_dir_list= 889e96acad6Smrg 890cfa76ccdSmrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 891cfa76ccdSmrg 892cfa76ccdSmrg # Protect directory names starting with '-' 893cfa76ccdSmrg case $_G_directory_path in 894cfa76ccdSmrg -*) _G_directory_path=./$_G_directory_path ;; 895e96acad6Smrg esac 896e96acad6Smrg 897e96acad6Smrg # While some portion of DIR does not yet exist... 898cfa76ccdSmrg while test ! -d "$_G_directory_path"; do 899e96acad6Smrg # ...make a list in topmost first order. Use a colon delimited 900e96acad6Smrg # list incase some portion of path contains whitespace. 901cfa76ccdSmrg _G_dir_list=$_G_directory_path:$_G_dir_list 902e96acad6Smrg 903e96acad6Smrg # If the last portion added has no slash in it, the list is done 904cfa76ccdSmrg case $_G_directory_path in */*) ;; *) break ;; esac 905e96acad6Smrg 906e96acad6Smrg # ...otherwise throw away the child directory and loop 907cfa76ccdSmrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 908e96acad6Smrg done 909cfa76ccdSmrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 910e96acad6Smrg 911cfa76ccdSmrg func_mkdir_p_IFS=$IFS; IFS=: 912cfa76ccdSmrg for _G_dir in $_G_dir_list; do 913cfa76ccdSmrg IFS=$func_mkdir_p_IFS 914cfa76ccdSmrg # mkdir can fail with a 'File exist' error if two processes 915e96acad6Smrg # try to create one of the directories concurrently. Don't 916e96acad6Smrg # stop in that case! 917cfa76ccdSmrg $MKDIR "$_G_dir" 2>/dev/null || : 918e96acad6Smrg done 919cfa76ccdSmrg IFS=$func_mkdir_p_IFS 920e96acad6Smrg 921e96acad6Smrg # Bail out if we (or some other process) failed to create a directory. 922cfa76ccdSmrg test -d "$_G_directory_path" || \ 923cfa76ccdSmrg func_fatal_error "Failed to create '$1'" 924e96acad6Smrg fi 925e96acad6Smrg} 926dbbd9e4bSmacallan 927dbbd9e4bSmacallan 928cfa76ccdSmrg# func_mktempdir [BASENAME] 929cfa76ccdSmrg# ------------------------- 930dbbd9e4bSmacallan# Make a temporary directory that won't clash with other running 931dbbd9e4bSmacallan# libtool processes, and avoids race conditions if possible. If 932cfa76ccdSmrg# given, BASENAME is the basename for that directory. 933dbbd9e4bSmacallanfunc_mktempdir () 934dbbd9e4bSmacallan{ 935cfa76ccdSmrg $debug_cmd 936cfa76ccdSmrg 937cfa76ccdSmrg _G_template=${TMPDIR-/tmp}/${1-$progname} 938dbbd9e4bSmacallan 939cfa76ccdSmrg if test : = "$opt_dry_run"; then 940dbbd9e4bSmacallan # Return a directory name, but don't create it in dry-run mode 941cfa76ccdSmrg _G_tmpdir=$_G_template-$$ 942dbbd9e4bSmacallan else 943dbbd9e4bSmacallan 944dbbd9e4bSmacallan # If mktemp works, use that first and foremost 945cfa76ccdSmrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 946dbbd9e4bSmacallan 947cfa76ccdSmrg if test ! -d "$_G_tmpdir"; then 948e96acad6Smrg # Failing that, at least try and use $RANDOM to avoid a race 949cfa76ccdSmrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 950dbbd9e4bSmacallan 951cfa76ccdSmrg func_mktempdir_umask=`umask` 952e96acad6Smrg umask 0077 953cfa76ccdSmrg $MKDIR "$_G_tmpdir" 954cfa76ccdSmrg umask $func_mktempdir_umask 955dbbd9e4bSmacallan fi 956dbbd9e4bSmacallan 957dbbd9e4bSmacallan # If we're not in dry-run mode, bomb out on failure 958cfa76ccdSmrg test -d "$_G_tmpdir" || \ 959cfa76ccdSmrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 960dbbd9e4bSmacallan fi 961dbbd9e4bSmacallan 962cfa76ccdSmrg $ECHO "$_G_tmpdir" 963dbbd9e4bSmacallan} 964dbbd9e4bSmacallan 965dbbd9e4bSmacallan 966cfa76ccdSmrg# func_normal_abspath PATH 967cfa76ccdSmrg# ------------------------ 968cfa76ccdSmrg# Remove doubled-up and trailing slashes, "." path components, 969cfa76ccdSmrg# and cancel out any ".." path components in PATH after making 970cfa76ccdSmrg# it an absolute path. 971cfa76ccdSmrgfunc_normal_abspath () 972dbbd9e4bSmacallan{ 973cfa76ccdSmrg $debug_cmd 974cfa76ccdSmrg 975cfa76ccdSmrg # These SED scripts presuppose an absolute path with a trailing slash. 976cfa76ccdSmrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 977cfa76ccdSmrg _G_pathcdr='s|^/[^/]*||' 978cfa76ccdSmrg _G_removedotparts=':dotsl 979cfa76ccdSmrg s|/\./|/|g 980cfa76ccdSmrg t dotsl 981cfa76ccdSmrg s|/\.$|/|' 982cfa76ccdSmrg _G_collapseslashes='s|/\{1,\}|/|g' 983cfa76ccdSmrg _G_finalslash='s|/*$|/|' 984cfa76ccdSmrg 985cfa76ccdSmrg # Start from root dir and reassemble the path. 986cfa76ccdSmrg func_normal_abspath_result= 987cfa76ccdSmrg func_normal_abspath_tpath=$1 988cfa76ccdSmrg func_normal_abspath_altnamespace= 989cfa76ccdSmrg case $func_normal_abspath_tpath in 990cfa76ccdSmrg "") 991cfa76ccdSmrg # Empty path, that just means $cwd. 992cfa76ccdSmrg func_stripname '' '/' "`pwd`" 993cfa76ccdSmrg func_normal_abspath_result=$func_stripname_result 994cfa76ccdSmrg return 995cfa76ccdSmrg ;; 996cfa76ccdSmrg # The next three entries are used to spot a run of precisely 997cfa76ccdSmrg # two leading slashes without using negated character classes; 998cfa76ccdSmrg # we take advantage of case's first-match behaviour. 999cfa76ccdSmrg ///*) 1000cfa76ccdSmrg # Unusual form of absolute path, do nothing. 1001cfa76ccdSmrg ;; 1002cfa76ccdSmrg //*) 1003cfa76ccdSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 1004cfa76ccdSmrg # and for example Cygwin uses it to access remote file shares 1005cfa76ccdSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 1006cfa76ccdSmrg func_normal_abspath_altnamespace=/ 1007cfa76ccdSmrg ;; 1008cfa76ccdSmrg /*) 1009cfa76ccdSmrg # Absolute path, do nothing. 1010cfa76ccdSmrg ;; 1011e96acad6Smrg *) 1012cfa76ccdSmrg # Relative path, prepend $cwd. 1013cfa76ccdSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 1014cfa76ccdSmrg ;; 1015e96acad6Smrg esac 1016e96acad6Smrg 1017cfa76ccdSmrg # Cancel out all the simple stuff to save iterations. We also want 1018cfa76ccdSmrg # the path to end with a slash for ease of parsing, so make sure 1019cfa76ccdSmrg # there is one (and only one) here. 1020cfa76ccdSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1021cfa76ccdSmrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 1022cfa76ccdSmrg while :; do 1023cfa76ccdSmrg # Processed it all yet? 1024cfa76ccdSmrg if test / = "$func_normal_abspath_tpath"; then 1025cfa76ccdSmrg # If we ascended to the root using ".." the result may be empty now. 1026cfa76ccdSmrg if test -z "$func_normal_abspath_result"; then 1027cfa76ccdSmrg func_normal_abspath_result=/ 1028cfa76ccdSmrg fi 1029cfa76ccdSmrg break 1030cfa76ccdSmrg fi 1031cfa76ccdSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1032cfa76ccdSmrg -e "$_G_pathcar"` 1033cfa76ccdSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 1034cfa76ccdSmrg -e "$_G_pathcdr"` 1035cfa76ccdSmrg # Figure out what to do with it 1036cfa76ccdSmrg case $func_normal_abspath_tcomponent in 1037cfa76ccdSmrg "") 1038cfa76ccdSmrg # Trailing empty path component, ignore it. 1039cfa76ccdSmrg ;; 1040cfa76ccdSmrg ..) 1041cfa76ccdSmrg # Parent dir; strip last assembled component from result. 1042cfa76ccdSmrg func_dirname "$func_normal_abspath_result" 1043cfa76ccdSmrg func_normal_abspath_result=$func_dirname_result 1044cfa76ccdSmrg ;; 1045cfa76ccdSmrg *) 1046cfa76ccdSmrg # Actual path component, append it. 1047cfa76ccdSmrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1048cfa76ccdSmrg ;; 1049cfa76ccdSmrg esac 1050cfa76ccdSmrg done 1051cfa76ccdSmrg # Restore leading double-slash if one was found on entry. 1052cfa76ccdSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1053cfa76ccdSmrg} 1054cfa76ccdSmrg 1055cfa76ccdSmrg 1056cfa76ccdSmrg# func_notquiet ARG... 1057cfa76ccdSmrg# -------------------- 1058cfa76ccdSmrg# Echo program name prefixed message only when not in quiet mode. 1059cfa76ccdSmrgfunc_notquiet () 1060cfa76ccdSmrg{ 1061cfa76ccdSmrg $debug_cmd 1062cfa76ccdSmrg 1063cfa76ccdSmrg $opt_quiet || func_echo ${1+"$@"} 1064cfa76ccdSmrg 1065cfa76ccdSmrg # A bug in bash halts the script if the last line of a function 1066cfa76ccdSmrg # fails when set -e is in force, so we need another command to 1067cfa76ccdSmrg # work around that: 1068cfa76ccdSmrg : 1069cfa76ccdSmrg} 1070cfa76ccdSmrg 1071cfa76ccdSmrg 1072cfa76ccdSmrg# func_relative_path SRCDIR DSTDIR 1073cfa76ccdSmrg# -------------------------------- 1074cfa76ccdSmrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1075cfa76ccdSmrgfunc_relative_path () 1076cfa76ccdSmrg{ 1077cfa76ccdSmrg $debug_cmd 1078cfa76ccdSmrg 1079cfa76ccdSmrg func_relative_path_result= 1080cfa76ccdSmrg func_normal_abspath "$1" 1081cfa76ccdSmrg func_relative_path_tlibdir=$func_normal_abspath_result 1082cfa76ccdSmrg func_normal_abspath "$2" 1083cfa76ccdSmrg func_relative_path_tbindir=$func_normal_abspath_result 1084cfa76ccdSmrg 1085cfa76ccdSmrg # Ascend the tree starting from libdir 1086cfa76ccdSmrg while :; do 1087cfa76ccdSmrg # check if we have found a prefix of bindir 1088cfa76ccdSmrg case $func_relative_path_tbindir in 1089cfa76ccdSmrg $func_relative_path_tlibdir) 1090cfa76ccdSmrg # found an exact match 1091cfa76ccdSmrg func_relative_path_tcancelled= 1092cfa76ccdSmrg break 1093cfa76ccdSmrg ;; 1094cfa76ccdSmrg $func_relative_path_tlibdir*) 1095cfa76ccdSmrg # found a matching prefix 1096cfa76ccdSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1097cfa76ccdSmrg func_relative_path_tcancelled=$func_stripname_result 1098cfa76ccdSmrg if test -z "$func_relative_path_result"; then 1099cfa76ccdSmrg func_relative_path_result=. 1100cfa76ccdSmrg fi 1101cfa76ccdSmrg break 1102cfa76ccdSmrg ;; 1103cfa76ccdSmrg *) 1104cfa76ccdSmrg func_dirname $func_relative_path_tlibdir 1105cfa76ccdSmrg func_relative_path_tlibdir=$func_dirname_result 1106cfa76ccdSmrg if test -z "$func_relative_path_tlibdir"; then 1107cfa76ccdSmrg # Have to descend all the way to the root! 1108cfa76ccdSmrg func_relative_path_result=../$func_relative_path_result 1109cfa76ccdSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 1110cfa76ccdSmrg break 1111cfa76ccdSmrg fi 1112cfa76ccdSmrg func_relative_path_result=../$func_relative_path_result 1113cfa76ccdSmrg ;; 1114cfa76ccdSmrg esac 1115cfa76ccdSmrg done 1116cfa76ccdSmrg 1117cfa76ccdSmrg # Now calculate path; take care to avoid doubling-up slashes. 1118cfa76ccdSmrg func_stripname '' '/' "$func_relative_path_result" 1119cfa76ccdSmrg func_relative_path_result=$func_stripname_result 1120cfa76ccdSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 1121cfa76ccdSmrg if test -n "$func_stripname_result"; then 1122cfa76ccdSmrg func_append func_relative_path_result "/$func_stripname_result" 1123cfa76ccdSmrg fi 1124cfa76ccdSmrg 1125cfa76ccdSmrg # Normalisation. If bindir is libdir, return '.' else relative path. 1126cfa76ccdSmrg if test -n "$func_relative_path_result"; then 1127cfa76ccdSmrg func_stripname './' '' "$func_relative_path_result" 1128cfa76ccdSmrg func_relative_path_result=$func_stripname_result 1129cfa76ccdSmrg fi 1130cfa76ccdSmrg 1131cfa76ccdSmrg test -n "$func_relative_path_result" || func_relative_path_result=. 1132cfa76ccdSmrg 1133cfa76ccdSmrg : 1134cfa76ccdSmrg} 1135cfa76ccdSmrg 1136cfa76ccdSmrg 1137cfa76ccdSmrg# func_quote_portable EVAL ARG 1138cfa76ccdSmrg# ---------------------------- 1139cfa76ccdSmrg# Internal function to portably implement func_quote_arg. Note that we still 1140cfa76ccdSmrg# keep attention to performance here so we as much as possible try to avoid 1141cfa76ccdSmrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)). 1142cfa76ccdSmrgfunc_quote_portable () 1143cfa76ccdSmrg{ 1144cfa76ccdSmrg $debug_cmd 1145cfa76ccdSmrg 1146cfa76ccdSmrg $require_check_ifs_backslash 1147cfa76ccdSmrg 1148cfa76ccdSmrg func_quote_portable_result=$2 1149cfa76ccdSmrg 1150cfa76ccdSmrg # one-time-loop (easy break) 1151cfa76ccdSmrg while true 1152cfa76ccdSmrg do 1153cfa76ccdSmrg if $1; then 1154cfa76ccdSmrg func_quote_portable_result=`$ECHO "$2" | $SED \ 1155cfa76ccdSmrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` 1156cfa76ccdSmrg break 1157cfa76ccdSmrg fi 1158cfa76ccdSmrg 1159cfa76ccdSmrg # Quote for eval. 1160cfa76ccdSmrg case $func_quote_portable_result in 1161cfa76ccdSmrg *[\\\`\"\$]*) 1162cfa76ccdSmrg # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string 1163cfa76ccdSmrg # contains the shell wildcard characters. 1164cfa76ccdSmrg case $check_ifs_backshlash_broken$func_quote_portable_result in 1165cfa76ccdSmrg :*|*[\[\*\?]*) 1166cfa76ccdSmrg func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ 1167cfa76ccdSmrg | $SED "$sed_quote_subst"` 1168cfa76ccdSmrg break 1169cfa76ccdSmrg ;; 1170cfa76ccdSmrg esac 1171cfa76ccdSmrg 1172cfa76ccdSmrg func_quote_portable_old_IFS=$IFS 1173cfa76ccdSmrg for _G_char in '\' '`' '"' '$' 1174cfa76ccdSmrg do 1175cfa76ccdSmrg # STATE($1) PREV($2) SEPARATOR($3) 1176cfa76ccdSmrg set start "" "" 1177cfa76ccdSmrg func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy 1178cfa76ccdSmrg IFS=$_G_char 1179cfa76ccdSmrg for _G_part in $func_quote_portable_result 1180cfa76ccdSmrg do 1181cfa76ccdSmrg case $1 in 1182cfa76ccdSmrg quote) 1183cfa76ccdSmrg func_append func_quote_portable_result "$3$2" 1184cfa76ccdSmrg set quote "$_G_part" "\\$_G_char" 1185cfa76ccdSmrg ;; 1186cfa76ccdSmrg start) 1187cfa76ccdSmrg set first "" "" 1188cfa76ccdSmrg func_quote_portable_result= 1189cfa76ccdSmrg ;; 1190cfa76ccdSmrg first) 1191cfa76ccdSmrg set quote "$_G_part" "" 1192cfa76ccdSmrg ;; 1193cfa76ccdSmrg esac 1194cfa76ccdSmrg done 1195cfa76ccdSmrg done 1196cfa76ccdSmrg IFS=$func_quote_portable_old_IFS 1197cfa76ccdSmrg ;; 1198cfa76ccdSmrg *) ;; 1199cfa76ccdSmrg esac 1200cfa76ccdSmrg break 1201cfa76ccdSmrg done 1202cfa76ccdSmrg 1203cfa76ccdSmrg func_quote_portable_unquoted_result=$func_quote_portable_result 1204cfa76ccdSmrg case $func_quote_portable_result in 1205cfa76ccdSmrg # double-quote args containing shell metacharacters to delay 1206cfa76ccdSmrg # word splitting, command substitution and variable expansion 1207cfa76ccdSmrg # for a subsequent eval. 1208cfa76ccdSmrg # many bourne shells cannot handle close brackets correctly 1209e96acad6Smrg # in scan sets, so we specify it separately. 1210e96acad6Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1211cfa76ccdSmrg func_quote_portable_result=\"$func_quote_portable_result\" 1212cfa76ccdSmrg ;; 1213cfa76ccdSmrg esac 1214cfa76ccdSmrg} 1215cfa76ccdSmrg 1216cfa76ccdSmrg 1217cfa76ccdSmrg# func_quotefast_eval ARG 1218cfa76ccdSmrg# ----------------------- 1219cfa76ccdSmrg# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', 1220cfa76ccdSmrg# but optimized for speed. Result is stored in $func_quotefast_eval. 1221cfa76ccdSmrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then 1222cfa76ccdSmrg printf -v _GL_test_printf_tilde %q '~' 1223cfa76ccdSmrg if test '\~' = "$_GL_test_printf_tilde"; then 1224cfa76ccdSmrg func_quotefast_eval () 1225cfa76ccdSmrg { 1226cfa76ccdSmrg printf -v func_quotefast_eval_result %q "$1" 1227cfa76ccdSmrg } 1228cfa76ccdSmrg else 1229cfa76ccdSmrg # Broken older Bash implementations. Make those faster too if possible. 1230cfa76ccdSmrg func_quotefast_eval () 1231cfa76ccdSmrg { 1232cfa76ccdSmrg case $1 in 1233cfa76ccdSmrg '~'*) 1234cfa76ccdSmrg func_quote_portable false "$1" 1235cfa76ccdSmrg func_quotefast_eval_result=$func_quote_portable_result 1236cfa76ccdSmrg ;; 1237cfa76ccdSmrg *) 1238cfa76ccdSmrg printf -v func_quotefast_eval_result %q "$1" 1239cfa76ccdSmrg ;; 1240cfa76ccdSmrg esac 1241cfa76ccdSmrg } 1242cfa76ccdSmrg fi 1243cfa76ccdSmrgelse 1244cfa76ccdSmrg func_quotefast_eval () 1245cfa76ccdSmrg { 1246cfa76ccdSmrg func_quote_portable false "$1" 1247cfa76ccdSmrg func_quotefast_eval_result=$func_quote_portable_result 1248cfa76ccdSmrg } 1249cfa76ccdSmrgfi 1250cfa76ccdSmrg 1251cfa76ccdSmrg 1252cfa76ccdSmrg# func_quote_arg MODEs ARG 1253cfa76ccdSmrg# ------------------------ 1254cfa76ccdSmrg# Quote one ARG to be evaled later. MODEs argument may contain zero or more 1255cfa76ccdSmrg# specifiers listed below separated by ',' character. This function returns two 1256cfa76ccdSmrg# values: 1257cfa76ccdSmrg# i) func_quote_arg_result 1258cfa76ccdSmrg# double-quoted (when needed), suitable for a subsequent eval 1259cfa76ccdSmrg# ii) func_quote_arg_unquoted_result 1260cfa76ccdSmrg# has all characters that are still active within double 1261cfa76ccdSmrg# quotes backslashified. Available only if 'unquoted' is specified. 1262cfa76ccdSmrg# 1263cfa76ccdSmrg# Available modes: 1264cfa76ccdSmrg# ---------------- 1265cfa76ccdSmrg# 'eval' (default) 1266cfa76ccdSmrg# - escape shell special characters 1267cfa76ccdSmrg# 'expand' 1268cfa76ccdSmrg# - the same as 'eval'; but do not quote variable references 1269cfa76ccdSmrg# 'pretty' 1270cfa76ccdSmrg# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might 1271cfa76ccdSmrg# be used later in func_quote to get output like: 'echo "a b"' instead 1272cfa76ccdSmrg# of 'echo a\ b'. This is slower than default on some shells. 1273cfa76ccdSmrg# 'unquoted' 1274cfa76ccdSmrg# - produce also $func_quote_arg_unquoted_result which does not contain 1275cfa76ccdSmrg# wrapping double-quotes. 1276cfa76ccdSmrg# 1277cfa76ccdSmrg# Examples for 'func_quote_arg pretty,unquoted string': 1278cfa76ccdSmrg# 1279cfa76ccdSmrg# string | *_result | *_unquoted_result 1280cfa76ccdSmrg# ------------+-----------------------+------------------- 1281cfa76ccdSmrg# " | \" | \" 1282cfa76ccdSmrg# a b | "a b" | a b 1283cfa76ccdSmrg# "a b" | "\"a b\"" | \"a b\" 1284cfa76ccdSmrg# * | "*" | * 1285cfa76ccdSmrg# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" 1286cfa76ccdSmrg# 1287cfa76ccdSmrg# Examples for 'func_quote_arg pretty,unquoted,expand string': 1288cfa76ccdSmrg# 1289cfa76ccdSmrg# string | *_result | *_unquoted_result 1290cfa76ccdSmrg# --------------+---------------------+-------------------- 1291cfa76ccdSmrg# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" 1292cfa76ccdSmrgfunc_quote_arg () 1293cfa76ccdSmrg{ 1294cfa76ccdSmrg _G_quote_expand=false 1295cfa76ccdSmrg case ,$1, in 1296cfa76ccdSmrg *,expand,*) 1297cfa76ccdSmrg _G_quote_expand=: 1298cfa76ccdSmrg ;; 1299cfa76ccdSmrg esac 1300cfa76ccdSmrg 1301cfa76ccdSmrg case ,$1, in 1302cfa76ccdSmrg *,pretty,*|*,expand,*|*,unquoted,*) 1303cfa76ccdSmrg func_quote_portable $_G_quote_expand "$2" 1304cfa76ccdSmrg func_quote_arg_result=$func_quote_portable_result 1305cfa76ccdSmrg func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result 1306e96acad6Smrg ;; 1307e96acad6Smrg *) 1308cfa76ccdSmrg # Faster quote-for-eval for some shells. 1309cfa76ccdSmrg func_quotefast_eval "$2" 1310cfa76ccdSmrg func_quote_arg_result=$func_quotefast_eval_result 1311cfa76ccdSmrg ;; 1312e96acad6Smrg esac 1313e96acad6Smrg} 1314e96acad6Smrg 1315e96acad6Smrg 1316cfa76ccdSmrg# func_quote MODEs ARGs... 1317cfa76ccdSmrg# ------------------------ 1318cfa76ccdSmrg# Quote all ARGs to be evaled later and join them into single command. See 1319cfa76ccdSmrg# func_quote_arg's description for more info. 1320cfa76ccdSmrgfunc_quote () 1321e96acad6Smrg{ 1322cfa76ccdSmrg $debug_cmd 1323cfa76ccdSmrg _G_func_quote_mode=$1 ; shift 1324cfa76ccdSmrg func_quote_result= 1325cfa76ccdSmrg while test 0 -lt $#; do 1326cfa76ccdSmrg func_quote_arg "$_G_func_quote_mode" "$1" 1327cfa76ccdSmrg if test -n "$func_quote_result"; then 1328cfa76ccdSmrg func_append func_quote_result " $func_quote_arg_result" 1329cfa76ccdSmrg else 1330cfa76ccdSmrg func_append func_quote_result "$func_quote_arg_result" 1331cfa76ccdSmrg fi 1332cfa76ccdSmrg shift 1333cfa76ccdSmrg done 1334cfa76ccdSmrg} 1335cfa76ccdSmrg 1336cfa76ccdSmrg 1337cfa76ccdSmrg# func_stripname PREFIX SUFFIX NAME 1338cfa76ccdSmrg# --------------------------------- 1339cfa76ccdSmrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1340cfa76ccdSmrg# PREFIX and SUFFIX must not contain globbing or regex special 1341cfa76ccdSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 1342cfa76ccdSmrg# dot (in which case that matches only a dot). 1343cfa76ccdSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 1344cfa76ccdSmrg eval 'func_stripname () 1345cfa76ccdSmrg { 1346cfa76ccdSmrg $debug_cmd 1347cfa76ccdSmrg 1348cfa76ccdSmrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1349cfa76ccdSmrg # positional parameters, so assign one to ordinary variable first. 1350cfa76ccdSmrg func_stripname_result=$3 1351cfa76ccdSmrg func_stripname_result=${func_stripname_result#"$1"} 1352cfa76ccdSmrg func_stripname_result=${func_stripname_result%"$2"} 1353cfa76ccdSmrg }' 1354cfa76ccdSmrgelse 1355cfa76ccdSmrg func_stripname () 1356cfa76ccdSmrg { 1357cfa76ccdSmrg $debug_cmd 1358cfa76ccdSmrg 1359cfa76ccdSmrg case $2 in 1360cfa76ccdSmrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1361cfa76ccdSmrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1362cfa76ccdSmrg esac 1363cfa76ccdSmrg } 1364cfa76ccdSmrgfi 1365cfa76ccdSmrg 1366cfa76ccdSmrg 1367cfa76ccdSmrg# func_show_eval CMD [FAIL_EXP] 1368cfa76ccdSmrg# ----------------------------- 1369cfa76ccdSmrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1370cfa76ccdSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1371cfa76ccdSmrg# is given, then evaluate it. 1372cfa76ccdSmrgfunc_show_eval () 1373cfa76ccdSmrg{ 1374cfa76ccdSmrg $debug_cmd 1375cfa76ccdSmrg 1376cfa76ccdSmrg _G_cmd=$1 1377cfa76ccdSmrg _G_fail_exp=${2-':'} 1378cfa76ccdSmrg 1379cfa76ccdSmrg func_quote_arg pretty,expand "$_G_cmd" 1380cfa76ccdSmrg eval "func_notquiet $func_quote_arg_result" 1381cfa76ccdSmrg 1382cfa76ccdSmrg $opt_dry_run || { 1383cfa76ccdSmrg eval "$_G_cmd" 1384cfa76ccdSmrg _G_status=$? 1385cfa76ccdSmrg if test 0 -ne "$_G_status"; then 1386cfa76ccdSmrg eval "(exit $_G_status); $_G_fail_exp" 1387cfa76ccdSmrg fi 1388cfa76ccdSmrg } 1389cfa76ccdSmrg} 1390cfa76ccdSmrg 1391cfa76ccdSmrg 1392cfa76ccdSmrg# func_show_eval_locale CMD [FAIL_EXP] 1393cfa76ccdSmrg# ------------------------------------ 1394cfa76ccdSmrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1395cfa76ccdSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1396cfa76ccdSmrg# is given, then evaluate it. Use the saved locale for evaluation. 1397cfa76ccdSmrgfunc_show_eval_locale () 1398cfa76ccdSmrg{ 1399cfa76ccdSmrg $debug_cmd 1400cfa76ccdSmrg 1401cfa76ccdSmrg _G_cmd=$1 1402cfa76ccdSmrg _G_fail_exp=${2-':'} 1403cfa76ccdSmrg 1404cfa76ccdSmrg $opt_quiet || { 1405cfa76ccdSmrg func_quote_arg expand,pretty "$_G_cmd" 1406cfa76ccdSmrg eval "func_echo $func_quote_arg_result" 1407cfa76ccdSmrg } 1408cfa76ccdSmrg 1409cfa76ccdSmrg $opt_dry_run || { 1410cfa76ccdSmrg eval "$_G_user_locale 1411cfa76ccdSmrg $_G_cmd" 1412cfa76ccdSmrg _G_status=$? 1413cfa76ccdSmrg eval "$_G_safe_locale" 1414cfa76ccdSmrg if test 0 -ne "$_G_status"; then 1415cfa76ccdSmrg eval "(exit $_G_status); $_G_fail_exp" 1416cfa76ccdSmrg fi 1417cfa76ccdSmrg } 1418cfa76ccdSmrg} 1419cfa76ccdSmrg 1420cfa76ccdSmrg 1421cfa76ccdSmrg# func_tr_sh 1422cfa76ccdSmrg# ---------- 1423cfa76ccdSmrg# Turn $1 into a string suitable for a shell variable name. 1424cfa76ccdSmrg# Result is stored in $func_tr_sh_result. All characters 1425cfa76ccdSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1426cfa76ccdSmrg# if $1 begins with a digit, a '_' is prepended as well. 1427cfa76ccdSmrgfunc_tr_sh () 1428cfa76ccdSmrg{ 1429cfa76ccdSmrg $debug_cmd 1430cfa76ccdSmrg 1431e96acad6Smrg case $1 in 1432cfa76ccdSmrg [0-9]* | *[!a-zA-Z0-9_]*) 1433cfa76ccdSmrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1434cfa76ccdSmrg ;; 1435cfa76ccdSmrg * ) 1436cfa76ccdSmrg func_tr_sh_result=$1 1437cfa76ccdSmrg ;; 1438e96acad6Smrg esac 1439cfa76ccdSmrg} 1440e96acad6Smrg 1441cfa76ccdSmrg 1442cfa76ccdSmrg# func_verbose ARG... 1443cfa76ccdSmrg# ------------------- 1444cfa76ccdSmrg# Echo program name prefixed message in verbose mode only. 1445cfa76ccdSmrgfunc_verbose () 1446cfa76ccdSmrg{ 1447cfa76ccdSmrg $debug_cmd 1448cfa76ccdSmrg 1449cfa76ccdSmrg $opt_verbose && func_echo "$*" 1450cfa76ccdSmrg 1451cfa76ccdSmrg : 1452cfa76ccdSmrg} 1453cfa76ccdSmrg 1454cfa76ccdSmrg 1455cfa76ccdSmrg# func_warn_and_continue ARG... 1456cfa76ccdSmrg# ----------------------------- 1457cfa76ccdSmrg# Echo program name prefixed warning message to standard error. 1458cfa76ccdSmrgfunc_warn_and_continue () 1459cfa76ccdSmrg{ 1460cfa76ccdSmrg $debug_cmd 1461cfa76ccdSmrg 1462cfa76ccdSmrg $require_term_colors 1463cfa76ccdSmrg 1464cfa76ccdSmrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1465cfa76ccdSmrg} 1466cfa76ccdSmrg 1467cfa76ccdSmrg 1468cfa76ccdSmrg# func_warning CATEGORY ARG... 1469cfa76ccdSmrg# ---------------------------- 1470cfa76ccdSmrg# Echo program name prefixed warning message to standard error. Warning 1471cfa76ccdSmrg# messages can be filtered according to CATEGORY, where this function 1472cfa76ccdSmrg# elides messages where CATEGORY is not listed in the global variable 1473cfa76ccdSmrg# 'opt_warning_types'. 1474cfa76ccdSmrgfunc_warning () 1475cfa76ccdSmrg{ 1476cfa76ccdSmrg $debug_cmd 1477cfa76ccdSmrg 1478cfa76ccdSmrg # CATEGORY must be in the warning_categories list! 1479cfa76ccdSmrg case " $warning_categories " in 1480cfa76ccdSmrg *" $1 "*) ;; 1481cfa76ccdSmrg *) func_internal_error "invalid warning category '$1'" ;; 1482e96acad6Smrg esac 1483e96acad6Smrg 1484cfa76ccdSmrg _G_category=$1 1485cfa76ccdSmrg shift 1486cfa76ccdSmrg 1487cfa76ccdSmrg case " $opt_warning_types " in 1488cfa76ccdSmrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 1489cfa76ccdSmrg esac 1490cfa76ccdSmrg} 1491cfa76ccdSmrg 1492cfa76ccdSmrg 1493cfa76ccdSmrg# func_sort_ver VER1 VER2 1494cfa76ccdSmrg# ----------------------- 1495cfa76ccdSmrg# 'sort -V' is not generally available. 1496cfa76ccdSmrg# Note this deviates from the version comparison in automake 1497cfa76ccdSmrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1498cfa76ccdSmrg# but this should suffice as we won't be specifying old 1499cfa76ccdSmrg# version formats or redundant trailing .0 in bootstrap.conf. 1500cfa76ccdSmrg# If we did want full compatibility then we should probably 1501cfa76ccdSmrg# use m4_version_compare from autoconf. 1502cfa76ccdSmrgfunc_sort_ver () 1503cfa76ccdSmrg{ 1504cfa76ccdSmrg $debug_cmd 1505cfa76ccdSmrg 1506cfa76ccdSmrg printf '%s\n%s\n' "$1" "$2" \ 1507cfa76ccdSmrg | 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 1508cfa76ccdSmrg} 1509cfa76ccdSmrg 1510cfa76ccdSmrg# func_lt_ver PREV CURR 1511cfa76ccdSmrg# --------------------- 1512cfa76ccdSmrg# Return true if PREV and CURR are in the correct order according to 1513cfa76ccdSmrg# func_sort_ver, otherwise false. Use it like this: 1514cfa76ccdSmrg# 1515cfa76ccdSmrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1516cfa76ccdSmrgfunc_lt_ver () 1517cfa76ccdSmrg{ 1518cfa76ccdSmrg $debug_cmd 1519cfa76ccdSmrg 1520cfa76ccdSmrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1521cfa76ccdSmrg} 1522cfa76ccdSmrg 1523cfa76ccdSmrg 1524cfa76ccdSmrg# Local variables: 1525cfa76ccdSmrg# mode: shell-script 1526cfa76ccdSmrg# sh-indentation: 2 1527cfa76ccdSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 1528cfa76ccdSmrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1529cfa76ccdSmrg# time-stamp-time-zone: "UTC" 1530cfa76ccdSmrg# End: 1531cfa76ccdSmrg#! /bin/sh 1532cfa76ccdSmrg 1533cfa76ccdSmrg# A portable, pluggable option parser for Bourne shell. 1534cfa76ccdSmrg# Written by Gary V. Vaughan, 2010 1535cfa76ccdSmrg 1536cfa76ccdSmrg# This is free software. There is NO warranty; not even for 1537cfa76ccdSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1538cfa76ccdSmrg# 1539cfa76ccdSmrg# Copyright (C) 2010-2019, 2021 Bootstrap Authors 1540cfa76ccdSmrg# 1541cfa76ccdSmrg# This file is dual licensed under the terms of the MIT license 1542cfa76ccdSmrg# <https://opensource.org/license/MIT>, and GPL version 2 or later 1543cfa76ccdSmrg# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of 1544cfa76ccdSmrg# these licenses when using or redistributing this software or any of 1545cfa76ccdSmrg# the files within it. See the URLs above, or the file `LICENSE` 1546cfa76ccdSmrg# included in the Bootstrap distribution for the full license texts. 1547cfa76ccdSmrg 1548cfa76ccdSmrg# Please report bugs or propose patches to: 1549cfa76ccdSmrg# <https://github.com/gnulib-modules/bootstrap/issues> 1550cfa76ccdSmrg 1551cfa76ccdSmrg# Set a version string for this script. 1552cfa76ccdSmrgscriptversion=2019-02-19.15; # UTC 1553cfa76ccdSmrg 1554cfa76ccdSmrg 1555cfa76ccdSmrg## ------ ## 1556cfa76ccdSmrg## Usage. ## 1557cfa76ccdSmrg## ------ ## 1558cfa76ccdSmrg 1559cfa76ccdSmrg# This file is a library for parsing options in your shell scripts along 1560cfa76ccdSmrg# with assorted other useful supporting features that you can make use 1561cfa76ccdSmrg# of too. 1562cfa76ccdSmrg# 1563cfa76ccdSmrg# For the simplest scripts you might need only: 1564cfa76ccdSmrg# 1565cfa76ccdSmrg# #!/bin/sh 1566cfa76ccdSmrg# . relative/path/to/funclib.sh 1567cfa76ccdSmrg# . relative/path/to/options-parser 1568cfa76ccdSmrg# scriptversion=1.0 1569cfa76ccdSmrg# func_options ${1+"$@"} 1570cfa76ccdSmrg# eval set dummy "$func_options_result"; shift 1571cfa76ccdSmrg# ...rest of your script... 1572cfa76ccdSmrg# 1573cfa76ccdSmrg# In order for the '--version' option to work, you will need to have a 1574cfa76ccdSmrg# suitably formatted comment like the one at the top of this file 1575cfa76ccdSmrg# starting with '# Written by ' and ending with '# Copyright'. 1576cfa76ccdSmrg# 1577cfa76ccdSmrg# For '-h' and '--help' to work, you will also need a one line 1578cfa76ccdSmrg# description of your script's purpose in a comment directly above the 1579cfa76ccdSmrg# '# Written by ' line, like the one at the top of this file. 1580cfa76ccdSmrg# 1581cfa76ccdSmrg# The default options also support '--debug', which will turn on shell 1582cfa76ccdSmrg# execution tracing (see the comment above debug_cmd below for another 1583cfa76ccdSmrg# use), and '--verbose' and the func_verbose function to allow your script 1584cfa76ccdSmrg# to display verbose messages only when your user has specified 1585cfa76ccdSmrg# '--verbose'. 1586cfa76ccdSmrg# 1587cfa76ccdSmrg# After sourcing this file, you can plug in processing for additional 1588cfa76ccdSmrg# options by amending the variables from the 'Configuration' section 1589cfa76ccdSmrg# below, and following the instructions in the 'Option parsing' 1590cfa76ccdSmrg# section further down. 1591cfa76ccdSmrg 1592cfa76ccdSmrg## -------------- ## 1593cfa76ccdSmrg## Configuration. ## 1594cfa76ccdSmrg## -------------- ## 1595cfa76ccdSmrg 1596cfa76ccdSmrg# You should override these variables in your script after sourcing this 1597cfa76ccdSmrg# file so that they reflect the customisations you have added to the 1598cfa76ccdSmrg# option parser. 1599cfa76ccdSmrg 1600cfa76ccdSmrg# The usage line for option parsing errors and the start of '-h' and 1601cfa76ccdSmrg# '--help' output messages. You can embed shell variables for delayed 1602cfa76ccdSmrg# expansion at the time the message is displayed, but you will need to 1603cfa76ccdSmrg# quote other shell meta-characters carefully to prevent them being 1604cfa76ccdSmrg# expanded when the contents are evaled. 1605cfa76ccdSmrgusage='$progpath [OPTION]...' 1606cfa76ccdSmrg 1607cfa76ccdSmrg# Short help message in response to '-h' and '--help'. Add to this or 1608cfa76ccdSmrg# override it after sourcing this library to reflect the full set of 1609cfa76ccdSmrg# options your script accepts. 1610cfa76ccdSmrgusage_message="\ 1611cfa76ccdSmrg --debug enable verbose shell tracing 1612cfa76ccdSmrg -W, --warnings=CATEGORY 1613cfa76ccdSmrg report the warnings falling in CATEGORY [all] 1614cfa76ccdSmrg -v, --verbose verbosely report processing 1615cfa76ccdSmrg --version print version information and exit 1616cfa76ccdSmrg -h, --help print short or long help message and exit 1617cfa76ccdSmrg" 1618cfa76ccdSmrg 1619cfa76ccdSmrg# Additional text appended to 'usage_message' in response to '--help'. 1620cfa76ccdSmrglong_help_message=" 1621cfa76ccdSmrgWarning categories include: 1622cfa76ccdSmrg 'all' show all warnings 1623cfa76ccdSmrg 'none' turn off all the warnings 1624cfa76ccdSmrg 'error' warnings are treated as fatal errors" 1625cfa76ccdSmrg 1626cfa76ccdSmrg# Help message printed before fatal option parsing errors. 1627cfa76ccdSmrgfatal_help="Try '\$progname --help' for more information." 1628cfa76ccdSmrg 1629cfa76ccdSmrg 1630cfa76ccdSmrg 1631cfa76ccdSmrg## ------------------------- ## 1632cfa76ccdSmrg## Hook function management. ## 1633cfa76ccdSmrg## ------------------------- ## 1634cfa76ccdSmrg 1635cfa76ccdSmrg# This section contains functions for adding, removing, and running hooks 1636cfa76ccdSmrg# in the main code. A hook is just a list of function names that can be 1637cfa76ccdSmrg# run in order later on. 1638cfa76ccdSmrg 1639cfa76ccdSmrg# func_hookable FUNC_NAME 1640cfa76ccdSmrg# ----------------------- 1641cfa76ccdSmrg# Declare that FUNC_NAME will run hooks added with 1642cfa76ccdSmrg# 'func_add_hook FUNC_NAME ...'. 1643cfa76ccdSmrgfunc_hookable () 1644cfa76ccdSmrg{ 1645cfa76ccdSmrg $debug_cmd 1646cfa76ccdSmrg 1647cfa76ccdSmrg func_append hookable_fns " $1" 1648cfa76ccdSmrg} 1649cfa76ccdSmrg 1650cfa76ccdSmrg 1651cfa76ccdSmrg# func_add_hook FUNC_NAME HOOK_FUNC 1652cfa76ccdSmrg# --------------------------------- 1653cfa76ccdSmrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1654cfa76ccdSmrg# first have been declared "hookable" by a call to 'func_hookable'. 1655cfa76ccdSmrgfunc_add_hook () 1656cfa76ccdSmrg{ 1657cfa76ccdSmrg $debug_cmd 1658cfa76ccdSmrg 1659cfa76ccdSmrg case " $hookable_fns " in 1660cfa76ccdSmrg *" $1 "*) ;; 1661cfa76ccdSmrg *) func_fatal_error "'$1' does not accept hook functions." ;; 1662cfa76ccdSmrg esac 1663cfa76ccdSmrg 1664cfa76ccdSmrg eval func_append ${1}_hooks '" $2"' 1665cfa76ccdSmrg} 1666cfa76ccdSmrg 1667cfa76ccdSmrg 1668cfa76ccdSmrg# func_remove_hook FUNC_NAME HOOK_FUNC 1669cfa76ccdSmrg# ------------------------------------ 1670cfa76ccdSmrg# Remove HOOK_FUNC from the list of hook functions to be called by 1671cfa76ccdSmrg# FUNC_NAME. 1672cfa76ccdSmrgfunc_remove_hook () 1673cfa76ccdSmrg{ 1674cfa76ccdSmrg $debug_cmd 1675cfa76ccdSmrg 1676cfa76ccdSmrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1677cfa76ccdSmrg} 1678cfa76ccdSmrg 1679cfa76ccdSmrg 1680cfa76ccdSmrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B 1681cfa76ccdSmrg# --------------------------------------------- 1682cfa76ccdSmrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to 1683cfa76ccdSmrg# *_result variable of FUNC_NAME_B. 1684cfa76ccdSmrgfunc_propagate_result () 1685cfa76ccdSmrg{ 1686cfa76ccdSmrg $debug_cmd 1687cfa76ccdSmrg 1688cfa76ccdSmrg func_propagate_result_result=: 1689cfa76ccdSmrg if eval "test \"\${${1}_result+set}\" = set" 1690cfa76ccdSmrg then 1691cfa76ccdSmrg eval "${2}_result=\$${1}_result" 1692cfa76ccdSmrg else 1693cfa76ccdSmrg func_propagate_result_result=false 1694cfa76ccdSmrg fi 1695cfa76ccdSmrg} 1696cfa76ccdSmrg 1697cfa76ccdSmrg 1698cfa76ccdSmrg# func_run_hooks FUNC_NAME [ARG]... 1699cfa76ccdSmrg# --------------------------------- 1700cfa76ccdSmrg# Run all hook functions registered to FUNC_NAME. 1701cfa76ccdSmrg# It's assumed that the list of hook functions contains nothing more 1702cfa76ccdSmrg# than a whitespace-delimited list of legal shell function names, and 1703cfa76ccdSmrg# no effort is wasted trying to catch shell meta-characters or preserve 1704cfa76ccdSmrg# whitespace. 1705cfa76ccdSmrgfunc_run_hooks () 1706cfa76ccdSmrg{ 1707cfa76ccdSmrg $debug_cmd 1708cfa76ccdSmrg 1709cfa76ccdSmrg case " $hookable_fns " in 1710cfa76ccdSmrg *" $1 "*) ;; 1711cfa76ccdSmrg *) func_fatal_error "'$1' does not support hook functions." ;; 1712cfa76ccdSmrg esac 1713cfa76ccdSmrg 1714cfa76ccdSmrg eval _G_hook_fns=\$$1_hooks; shift 1715cfa76ccdSmrg 1716cfa76ccdSmrg for _G_hook in $_G_hook_fns; do 1717cfa76ccdSmrg func_unset "${_G_hook}_result" 1718cfa76ccdSmrg eval $_G_hook '${1+"$@"}' 1719cfa76ccdSmrg func_propagate_result $_G_hook func_run_hooks 1720cfa76ccdSmrg if $func_propagate_result_result; then 1721cfa76ccdSmrg eval set dummy "$func_run_hooks_result"; shift 1722cfa76ccdSmrg fi 1723cfa76ccdSmrg done 1724cfa76ccdSmrg} 1725cfa76ccdSmrg 1726cfa76ccdSmrg 1727cfa76ccdSmrg 1728cfa76ccdSmrg## --------------- ## 1729cfa76ccdSmrg## Option parsing. ## 1730cfa76ccdSmrg## --------------- ## 1731cfa76ccdSmrg 1732cfa76ccdSmrg# In order to add your own option parsing hooks, you must accept the 1733cfa76ccdSmrg# full positional parameter list from your hook function. You may remove 1734cfa76ccdSmrg# or edit any options that you action, and then pass back the remaining 1735cfa76ccdSmrg# unprocessed options in '<hooked_function_name>_result', escaped 1736cfa76ccdSmrg# suitably for 'eval'. 1737cfa76ccdSmrg# 1738cfa76ccdSmrg# The '<hooked_function_name>_result' variable is automatically unset 1739cfa76ccdSmrg# before your hook gets called; for best performance, only set the 1740cfa76ccdSmrg# *_result variable when necessary (i.e. don't call the 'func_quote' 1741cfa76ccdSmrg# function unnecessarily because it can be an expensive operation on some 1742cfa76ccdSmrg# machines). 1743cfa76ccdSmrg# 1744cfa76ccdSmrg# Like this: 1745cfa76ccdSmrg# 1746cfa76ccdSmrg# my_options_prep () 1747cfa76ccdSmrg# { 1748cfa76ccdSmrg# $debug_cmd 1749cfa76ccdSmrg# 1750cfa76ccdSmrg# # Extend the existing usage message. 1751cfa76ccdSmrg# usage_message=$usage_message' 1752cfa76ccdSmrg# -s, --silent don'\''t print informational messages 1753cfa76ccdSmrg# ' 1754cfa76ccdSmrg# # No change in '$@' (ignored completely by this hook). Leave 1755cfa76ccdSmrg# # my_options_prep_result variable intact. 1756cfa76ccdSmrg# } 1757cfa76ccdSmrg# func_add_hook func_options_prep my_options_prep 1758cfa76ccdSmrg# 1759cfa76ccdSmrg# 1760cfa76ccdSmrg# my_silent_option () 1761cfa76ccdSmrg# { 1762cfa76ccdSmrg# $debug_cmd 1763cfa76ccdSmrg# 1764cfa76ccdSmrg# args_changed=false 1765cfa76ccdSmrg# 1766cfa76ccdSmrg# # Note that, for efficiency, we parse as many options as we can 1767cfa76ccdSmrg# # recognise in a loop before passing the remainder back to the 1768cfa76ccdSmrg# # caller on the first unrecognised argument we encounter. 1769cfa76ccdSmrg# while test $# -gt 0; do 1770cfa76ccdSmrg# opt=$1; shift 1771cfa76ccdSmrg# case $opt in 1772cfa76ccdSmrg# --silent|-s) opt_silent=: 1773cfa76ccdSmrg# args_changed=: 1774cfa76ccdSmrg# ;; 1775cfa76ccdSmrg# # Separate non-argument short options: 1776cfa76ccdSmrg# -s*) func_split_short_opt "$_G_opt" 1777cfa76ccdSmrg# set dummy "$func_split_short_opt_name" \ 1778cfa76ccdSmrg# "-$func_split_short_opt_arg" ${1+"$@"} 1779cfa76ccdSmrg# shift 1780cfa76ccdSmrg# args_changed=: 1781cfa76ccdSmrg# ;; 1782cfa76ccdSmrg# *) # Make sure the first unrecognised option "$_G_opt" 1783cfa76ccdSmrg# # is added back to "$@" in case we need it later, 1784cfa76ccdSmrg# # if $args_changed was set to 'true'. 1785cfa76ccdSmrg# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1786cfa76ccdSmrg# esac 1787cfa76ccdSmrg# done 1788cfa76ccdSmrg# 1789cfa76ccdSmrg# # Only call 'func_quote' here if we processed at least one argument. 1790cfa76ccdSmrg# if $args_changed; then 1791cfa76ccdSmrg# func_quote eval ${1+"$@"} 1792cfa76ccdSmrg# my_silent_option_result=$func_quote_result 1793cfa76ccdSmrg# fi 1794cfa76ccdSmrg# } 1795cfa76ccdSmrg# func_add_hook func_parse_options my_silent_option 1796cfa76ccdSmrg# 1797cfa76ccdSmrg# 1798cfa76ccdSmrg# my_option_validation () 1799cfa76ccdSmrg# { 1800cfa76ccdSmrg# $debug_cmd 1801cfa76ccdSmrg# 1802cfa76ccdSmrg# $opt_silent && $opt_verbose && func_fatal_help "\ 1803cfa76ccdSmrg# '--silent' and '--verbose' options are mutually exclusive." 1804cfa76ccdSmrg# } 1805cfa76ccdSmrg# func_add_hook func_validate_options my_option_validation 1806cfa76ccdSmrg# 1807cfa76ccdSmrg# You'll also need to manually amend $usage_message to reflect the extra 1808cfa76ccdSmrg# options you parse. It's preferable to append if you can, so that 1809cfa76ccdSmrg# multiple option parsing hooks can be added safely. 1810cfa76ccdSmrg 1811cfa76ccdSmrg 1812cfa76ccdSmrg# func_options_finish [ARG]... 1813cfa76ccdSmrg# ---------------------------- 1814cfa76ccdSmrg# Finishing the option parse loop (call 'func_options' hooks ATM). 1815cfa76ccdSmrgfunc_options_finish () 1816cfa76ccdSmrg{ 1817cfa76ccdSmrg $debug_cmd 1818cfa76ccdSmrg 1819cfa76ccdSmrg func_run_hooks func_options ${1+"$@"} 1820cfa76ccdSmrg func_propagate_result func_run_hooks func_options_finish 1821cfa76ccdSmrg} 1822cfa76ccdSmrg 1823cfa76ccdSmrg 1824cfa76ccdSmrg# func_options [ARG]... 1825cfa76ccdSmrg# --------------------- 1826cfa76ccdSmrg# All the functions called inside func_options are hookable. See the 1827cfa76ccdSmrg# individual implementations for details. 1828cfa76ccdSmrgfunc_hookable func_options 1829cfa76ccdSmrgfunc_options () 1830cfa76ccdSmrg{ 1831cfa76ccdSmrg $debug_cmd 1832cfa76ccdSmrg 1833cfa76ccdSmrg _G_options_quoted=false 1834cfa76ccdSmrg 1835cfa76ccdSmrg for my_func in options_prep parse_options validate_options options_finish 1836cfa76ccdSmrg do 1837cfa76ccdSmrg func_unset func_${my_func}_result 1838cfa76ccdSmrg func_unset func_run_hooks_result 1839cfa76ccdSmrg eval func_$my_func '${1+"$@"}' 1840cfa76ccdSmrg func_propagate_result func_$my_func func_options 1841cfa76ccdSmrg if $func_propagate_result_result; then 1842cfa76ccdSmrg eval set dummy "$func_options_result"; shift 1843cfa76ccdSmrg _G_options_quoted=: 1844cfa76ccdSmrg fi 1845cfa76ccdSmrg done 1846cfa76ccdSmrg 1847cfa76ccdSmrg $_G_options_quoted || { 1848cfa76ccdSmrg # As we (func_options) are top-level options-parser function and 1849cfa76ccdSmrg # nobody quoted "$@" for us yet, we need to do it explicitly for 1850cfa76ccdSmrg # caller. 1851cfa76ccdSmrg func_quote eval ${1+"$@"} 1852cfa76ccdSmrg func_options_result=$func_quote_result 1853cfa76ccdSmrg } 1854cfa76ccdSmrg} 1855cfa76ccdSmrg 1856cfa76ccdSmrg 1857cfa76ccdSmrg# func_options_prep [ARG]... 1858cfa76ccdSmrg# -------------------------- 1859cfa76ccdSmrg# All initialisations required before starting the option parse loop. 1860cfa76ccdSmrg# Note that when calling hook functions, we pass through the list of 1861cfa76ccdSmrg# positional parameters. If a hook function modifies that list, and 1862cfa76ccdSmrg# needs to propagate that back to rest of this script, then the complete 1863cfa76ccdSmrg# modified list must be put in 'func_run_hooks_result' before returning. 1864cfa76ccdSmrgfunc_hookable func_options_prep 1865cfa76ccdSmrgfunc_options_prep () 1866cfa76ccdSmrg{ 1867cfa76ccdSmrg $debug_cmd 1868cfa76ccdSmrg 1869cfa76ccdSmrg # Option defaults: 1870cfa76ccdSmrg opt_verbose=false 1871cfa76ccdSmrg opt_warning_types= 1872cfa76ccdSmrg 1873cfa76ccdSmrg func_run_hooks func_options_prep ${1+"$@"} 1874cfa76ccdSmrg func_propagate_result func_run_hooks func_options_prep 1875e96acad6Smrg} 1876e96acad6Smrg 1877e96acad6Smrg 1878cfa76ccdSmrg# func_parse_options [ARG]... 1879cfa76ccdSmrg# --------------------------- 1880cfa76ccdSmrg# The main option parsing loop. 1881cfa76ccdSmrgfunc_hookable func_parse_options 1882cfa76ccdSmrgfunc_parse_options () 1883e96acad6Smrg{ 1884cfa76ccdSmrg $debug_cmd 1885cfa76ccdSmrg 1886cfa76ccdSmrg _G_parse_options_requote=false 1887cfa76ccdSmrg # this just eases exit handling 1888cfa76ccdSmrg while test $# -gt 0; do 1889cfa76ccdSmrg # Defer to hook functions for initial option parsing, so they 1890cfa76ccdSmrg # get priority in the event of reusing an option name. 1891cfa76ccdSmrg func_run_hooks func_parse_options ${1+"$@"} 1892cfa76ccdSmrg func_propagate_result func_run_hooks func_parse_options 1893cfa76ccdSmrg if $func_propagate_result_result; then 1894cfa76ccdSmrg eval set dummy "$func_parse_options_result"; shift 1895cfa76ccdSmrg # Even though we may have changed "$@", we passed the "$@" array 1896cfa76ccdSmrg # down into the hook and it quoted it for us (because we are in 1897cfa76ccdSmrg # this if-branch). No need to quote it again. 1898cfa76ccdSmrg _G_parse_options_requote=false 1899cfa76ccdSmrg fi 1900e96acad6Smrg 1901cfa76ccdSmrg # Break out of the loop if we already parsed every option. 1902cfa76ccdSmrg test $# -gt 0 || break 1903cfa76ccdSmrg 1904cfa76ccdSmrg # We expect that one of the options parsed in this function matches 1905cfa76ccdSmrg # and thus we remove _G_opt from "$@" and need to re-quote. 1906cfa76ccdSmrg _G_match_parse_options=: 1907cfa76ccdSmrg _G_opt=$1 1908cfa76ccdSmrg shift 1909cfa76ccdSmrg case $_G_opt in 1910cfa76ccdSmrg --debug|-x) debug_cmd='set -x' 1911cfa76ccdSmrg func_echo "enabling shell trace mode" >&2 1912cfa76ccdSmrg $debug_cmd 1913cfa76ccdSmrg ;; 1914cfa76ccdSmrg 1915cfa76ccdSmrg --no-warnings|--no-warning|--no-warn) 1916cfa76ccdSmrg set dummy --warnings none ${1+"$@"} 1917cfa76ccdSmrg shift 1918cfa76ccdSmrg ;; 1919e96acad6Smrg 1920cfa76ccdSmrg --warnings|--warning|-W) 1921cfa76ccdSmrg if test $# = 0 && func_missing_arg $_G_opt; then 1922cfa76ccdSmrg _G_parse_options_requote=: 1923cfa76ccdSmrg break 1924cfa76ccdSmrg fi 1925cfa76ccdSmrg case " $warning_categories $1" in 1926cfa76ccdSmrg *" $1 "*) 1927cfa76ccdSmrg # trailing space prevents matching last $1 above 1928cfa76ccdSmrg func_append_uniq opt_warning_types " $1" 1929cfa76ccdSmrg ;; 1930cfa76ccdSmrg *all) 1931cfa76ccdSmrg opt_warning_types=$warning_categories 1932cfa76ccdSmrg ;; 1933cfa76ccdSmrg *none) 1934cfa76ccdSmrg opt_warning_types=none 1935cfa76ccdSmrg warning_func=: 1936cfa76ccdSmrg ;; 1937cfa76ccdSmrg *error) 1938cfa76ccdSmrg opt_warning_types=$warning_categories 1939cfa76ccdSmrg warning_func=func_fatal_error 1940cfa76ccdSmrg ;; 1941cfa76ccdSmrg *) 1942cfa76ccdSmrg func_fatal_error \ 1943cfa76ccdSmrg "unsupported warning category: '$1'" 1944cfa76ccdSmrg ;; 1945cfa76ccdSmrg esac 1946cfa76ccdSmrg shift 1947cfa76ccdSmrg ;; 1948cfa76ccdSmrg 1949cfa76ccdSmrg --verbose|-v) opt_verbose=: ;; 1950cfa76ccdSmrg --version) func_version ;; 1951cfa76ccdSmrg -\?|-h) func_usage ;; 1952cfa76ccdSmrg --help) func_help ;; 1953cfa76ccdSmrg 1954cfa76ccdSmrg # Separate optargs to long options (plugins may need this): 1955cfa76ccdSmrg --*=*) func_split_equals "$_G_opt" 1956cfa76ccdSmrg set dummy "$func_split_equals_lhs" \ 1957cfa76ccdSmrg "$func_split_equals_rhs" ${1+"$@"} 1958cfa76ccdSmrg shift 1959cfa76ccdSmrg ;; 1960cfa76ccdSmrg 1961cfa76ccdSmrg # Separate optargs to short options: 1962cfa76ccdSmrg -W*) 1963cfa76ccdSmrg func_split_short_opt "$_G_opt" 1964cfa76ccdSmrg set dummy "$func_split_short_opt_name" \ 1965cfa76ccdSmrg "$func_split_short_opt_arg" ${1+"$@"} 1966cfa76ccdSmrg shift 1967cfa76ccdSmrg ;; 1968cfa76ccdSmrg 1969cfa76ccdSmrg # Separate non-argument short options: 1970cfa76ccdSmrg -\?*|-h*|-v*|-x*) 1971cfa76ccdSmrg func_split_short_opt "$_G_opt" 1972cfa76ccdSmrg set dummy "$func_split_short_opt_name" \ 1973cfa76ccdSmrg "-$func_split_short_opt_arg" ${1+"$@"} 1974cfa76ccdSmrg shift 1975cfa76ccdSmrg ;; 1976cfa76ccdSmrg 1977cfa76ccdSmrg --) _G_parse_options_requote=: ; break ;; 1978cfa76ccdSmrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 1979cfa76ccdSmrg *) set dummy "$_G_opt" ${1+"$@"}; shift 1980cfa76ccdSmrg _G_match_parse_options=false 1981cfa76ccdSmrg break 1982cfa76ccdSmrg ;; 1983cfa76ccdSmrg esac 1984cfa76ccdSmrg 1985cfa76ccdSmrg if $_G_match_parse_options; then 1986cfa76ccdSmrg _G_parse_options_requote=: 1987e96acad6Smrg fi 1988cfa76ccdSmrg done 1989cfa76ccdSmrg 1990cfa76ccdSmrg if $_G_parse_options_requote; then 1991cfa76ccdSmrg # save modified positional parameters for caller 1992cfa76ccdSmrg func_quote eval ${1+"$@"} 1993cfa76ccdSmrg func_parse_options_result=$func_quote_result 1994dbbd9e4bSmacallan fi 1995e96acad6Smrg} 1996e96acad6Smrg 1997e96acad6Smrg 1998cfa76ccdSmrg# func_validate_options [ARG]... 1999cfa76ccdSmrg# ------------------------------ 2000cfa76ccdSmrg# Perform any sanity checks on option settings and/or unconsumed 2001cfa76ccdSmrg# arguments. 2002cfa76ccdSmrgfunc_hookable func_validate_options 2003cfa76ccdSmrgfunc_validate_options () 2004e96acad6Smrg{ 2005cfa76ccdSmrg $debug_cmd 2006e96acad6Smrg 2007cfa76ccdSmrg # Display all warnings if -W was not given. 2008cfa76ccdSmrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 2009e96acad6Smrg 2010cfa76ccdSmrg func_run_hooks func_validate_options ${1+"$@"} 2011cfa76ccdSmrg func_propagate_result func_run_hooks func_validate_options 2012e96acad6Smrg 2013cfa76ccdSmrg # Bail if the options were screwed! 2014cfa76ccdSmrg $exit_cmd $EXIT_FAILURE 2015dbbd9e4bSmacallan} 2016dbbd9e4bSmacallan 2017dbbd9e4bSmacallan 2018e96acad6Smrg 2019cfa76ccdSmrg## ----------------- ## 2020cfa76ccdSmrg## Helper functions. ## 2021cfa76ccdSmrg## ----------------- ## 2022dbbd9e4bSmacallan 2023cfa76ccdSmrg# This section contains the helper functions used by the rest of the 2024cfa76ccdSmrg# hookable option parser framework in ascii-betical order. 2025cfa76ccdSmrg 2026cfa76ccdSmrg 2027cfa76ccdSmrg# func_fatal_help ARG... 2028cfa76ccdSmrg# ---------------------- 2029cfa76ccdSmrg# Echo program name prefixed message to standard error, followed by 2030cfa76ccdSmrg# a help hint, and exit. 2031cfa76ccdSmrgfunc_fatal_help () 2032dbbd9e4bSmacallan{ 2033cfa76ccdSmrg $debug_cmd 2034e96acad6Smrg 2035cfa76ccdSmrg eval \$ECHO \""Usage: $usage"\" 2036cfa76ccdSmrg eval \$ECHO \""$fatal_help"\" 2037cfa76ccdSmrg func_error ${1+"$@"} 2038cfa76ccdSmrg exit $EXIT_FAILURE 2039dbbd9e4bSmacallan} 2040dbbd9e4bSmacallan 2041cfa76ccdSmrg 2042cfa76ccdSmrg# func_help 2043cfa76ccdSmrg# --------- 2044cfa76ccdSmrg# Echo long help message to standard output and exit. 2045e96acad6Smrgfunc_help () 2046dbbd9e4bSmacallan{ 2047cfa76ccdSmrg $debug_cmd 2048cfa76ccdSmrg 2049cfa76ccdSmrg func_usage_message 2050cfa76ccdSmrg $ECHO "$long_help_message" 2051cfa76ccdSmrg exit 0 2052e96acad6Smrg} 2053dbbd9e4bSmacallan 2054cfa76ccdSmrg 2055cfa76ccdSmrg# func_missing_arg ARGNAME 2056cfa76ccdSmrg# ------------------------ 2057e96acad6Smrg# Echo program name prefixed message to standard error and set global 2058e96acad6Smrg# exit_cmd. 2059e96acad6Smrgfunc_missing_arg () 2060e96acad6Smrg{ 2061cfa76ccdSmrg $debug_cmd 2062dbbd9e4bSmacallan 2063cfa76ccdSmrg func_error "Missing argument for '$1'." 2064e96acad6Smrg exit_cmd=exit 2065dbbd9e4bSmacallan} 2066dbbd9e4bSmacallan 2067dbbd9e4bSmacallan 2068cfa76ccdSmrg# func_split_equals STRING 2069cfa76ccdSmrg# ------------------------ 2070cfa76ccdSmrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables 2071cfa76ccdSmrg# after splitting STRING at the '=' sign. 2072cfa76ccdSmrgtest -z "$_G_HAVE_XSI_OPS" \ 2073cfa76ccdSmrg && (eval 'x=a/b/c; 2074cfa76ccdSmrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 2075cfa76ccdSmrg && _G_HAVE_XSI_OPS=yes 2076cfa76ccdSmrg 2077cfa76ccdSmrgif test yes = "$_G_HAVE_XSI_OPS" 2078cfa76ccdSmrgthen 2079cfa76ccdSmrg # This is an XSI compatible shell, allowing a faster implementation... 2080cfa76ccdSmrg eval 'func_split_equals () 2081cfa76ccdSmrg { 2082cfa76ccdSmrg $debug_cmd 2083cfa76ccdSmrg 2084cfa76ccdSmrg func_split_equals_lhs=${1%%=*} 2085cfa76ccdSmrg func_split_equals_rhs=${1#*=} 2086cfa76ccdSmrg if test "x$func_split_equals_lhs" = "x$1"; then 2087cfa76ccdSmrg func_split_equals_rhs= 2088cfa76ccdSmrg fi 2089cfa76ccdSmrg }' 2090cfa76ccdSmrgelse 2091cfa76ccdSmrg # ...otherwise fall back to using expr, which is often a shell builtin. 2092cfa76ccdSmrg func_split_equals () 2093cfa76ccdSmrg { 2094cfa76ccdSmrg $debug_cmd 2095cfa76ccdSmrg 2096cfa76ccdSmrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 2097cfa76ccdSmrg func_split_equals_rhs= 2098cfa76ccdSmrg test "x$func_split_equals_lhs=" = "x$1" \ 2099cfa76ccdSmrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 2100cfa76ccdSmrg } 2101cfa76ccdSmrgfi #func_split_equals 2102cfa76ccdSmrg 2103cfa76ccdSmrg 2104cfa76ccdSmrg# func_split_short_opt SHORTOPT 2105cfa76ccdSmrg# ----------------------------- 2106e96acad6Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 2107e96acad6Smrg# variables after splitting SHORTOPT after the 2nd character. 2108cfa76ccdSmrgif test yes = "$_G_HAVE_XSI_OPS" 2109cfa76ccdSmrgthen 2110cfa76ccdSmrg # This is an XSI compatible shell, allowing a faster implementation... 2111cfa76ccdSmrg eval 'func_split_short_opt () 2112cfa76ccdSmrg { 2113cfa76ccdSmrg $debug_cmd 2114cfa76ccdSmrg 2115cfa76ccdSmrg func_split_short_opt_arg=${1#??} 2116cfa76ccdSmrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 2117cfa76ccdSmrg }' 2118cfa76ccdSmrgelse 2119cfa76ccdSmrg # ...otherwise fall back to using expr, which is often a shell builtin. 2120cfa76ccdSmrg func_split_short_opt () 2121cfa76ccdSmrg { 2122cfa76ccdSmrg $debug_cmd 2123cfa76ccdSmrg 2124cfa76ccdSmrg func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` 2125cfa76ccdSmrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 2126cfa76ccdSmrg } 2127cfa76ccdSmrgfi #func_split_short_opt 2128cfa76ccdSmrg 2129cfa76ccdSmrg 2130cfa76ccdSmrg# func_usage 2131cfa76ccdSmrg# ---------- 2132cfa76ccdSmrg# Echo short help message to standard output and exit. 2133cfa76ccdSmrgfunc_usage () 2134e96acad6Smrg{ 2135cfa76ccdSmrg $debug_cmd 2136e96acad6Smrg 2137cfa76ccdSmrg func_usage_message 2138cfa76ccdSmrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 2139cfa76ccdSmrg exit 0 2140cfa76ccdSmrg} 2141dbbd9e4bSmacallan 2142dbbd9e4bSmacallan 2143cfa76ccdSmrg# func_usage_message 2144cfa76ccdSmrg# ------------------ 2145cfa76ccdSmrg# Echo short help message to standard output. 2146cfa76ccdSmrgfunc_usage_message () 2147e96acad6Smrg{ 2148cfa76ccdSmrg $debug_cmd 2149dbbd9e4bSmacallan 2150cfa76ccdSmrg eval \$ECHO \""Usage: $usage"\" 2151cfa76ccdSmrg echo 2152cfa76ccdSmrg $SED -n 's|^# || 2153cfa76ccdSmrg /^Written by/{ 2154cfa76ccdSmrg x;p;x 2155cfa76ccdSmrg } 2156cfa76ccdSmrg h 2157cfa76ccdSmrg /^Written by/q' < "$progpath" 2158cfa76ccdSmrg echo 2159cfa76ccdSmrg eval \$ECHO \""$usage_message"\" 2160cfa76ccdSmrg} 2161dbbd9e4bSmacallan 2162dbbd9e4bSmacallan 2163cfa76ccdSmrg# func_version 2164cfa76ccdSmrg# ------------ 2165cfa76ccdSmrg# Echo version message to standard output and exit. 2166cfa76ccdSmrg# The version message is extracted from the calling file's header 2167cfa76ccdSmrg# comments, with leading '# ' stripped: 2168cfa76ccdSmrg# 1. First display the progname and version 2169cfa76ccdSmrg# 2. Followed by the header comment line matching /^# Written by / 2170cfa76ccdSmrg# 3. Then a blank line followed by the first following line matching 2171cfa76ccdSmrg# /^# Copyright / 2172cfa76ccdSmrg# 4. Immediately followed by any lines between the previous matches, 2173cfa76ccdSmrg# except lines preceding the intervening completely blank line. 2174cfa76ccdSmrg# For example, see the header comments of this file. 2175cfa76ccdSmrgfunc_version () 2176cfa76ccdSmrg{ 2177cfa76ccdSmrg $debug_cmd 2178dbbd9e4bSmacallan 2179cfa76ccdSmrg printf '%s\n' "$progname $scriptversion" 2180cfa76ccdSmrg $SED -n ' 2181cfa76ccdSmrg /^# Written by /!b 2182cfa76ccdSmrg s|^# ||; p; n 2183dbbd9e4bSmacallan 2184cfa76ccdSmrg :fwd2blnk 2185cfa76ccdSmrg /./ { 2186cfa76ccdSmrg n 2187cfa76ccdSmrg b fwd2blnk 2188cfa76ccdSmrg } 2189cfa76ccdSmrg p; n 2190cfa76ccdSmrg 2191cfa76ccdSmrg :holdwrnt 2192cfa76ccdSmrg s|^# || 2193cfa76ccdSmrg s|^# *$|| 2194cfa76ccdSmrg /^Copyright /!{ 2195cfa76ccdSmrg /./H 2196cfa76ccdSmrg n 2197cfa76ccdSmrg b holdwrnt 2198cfa76ccdSmrg } 2199dbbd9e4bSmacallan 2200cfa76ccdSmrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 2201cfa76ccdSmrg G 2202cfa76ccdSmrg s|\(\n\)\n*|\1|g 2203cfa76ccdSmrg p; q' < "$progpath" 2204dbbd9e4bSmacallan 2205cfa76ccdSmrg exit $? 2206cfa76ccdSmrg} 2207e96acad6Smrg 2208e96acad6Smrg 2209cfa76ccdSmrg# Local variables: 2210cfa76ccdSmrg# mode: shell-script 2211cfa76ccdSmrg# sh-indentation: 2 2212cfa76ccdSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 2213cfa76ccdSmrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" 2214cfa76ccdSmrg# time-stamp-time-zone: "UTC" 2215cfa76ccdSmrg# End: 2216e96acad6Smrg 2217cfa76ccdSmrg# Set a version string. 2218cfa76ccdSmrgscriptversion='(GNU libtool) 2.4.7' 2219e96acad6Smrg 2220cfa76ccdSmrg 2221cfa76ccdSmrg# func_echo ARG... 2222cfa76ccdSmrg# ---------------- 2223cfa76ccdSmrg# Libtool also displays the current mode in messages, so override 2224cfa76ccdSmrg# funclib.sh func_echo with this custom definition. 2225cfa76ccdSmrgfunc_echo () 2226e96acad6Smrg{ 2227cfa76ccdSmrg $debug_cmd 2228e96acad6Smrg 2229cfa76ccdSmrg _G_message=$* 2230e96acad6Smrg 2231cfa76ccdSmrg func_echo_IFS=$IFS 2232cfa76ccdSmrg IFS=$nl 2233cfa76ccdSmrg for _G_line in $_G_message; do 2234cfa76ccdSmrg IFS=$func_echo_IFS 2235cfa76ccdSmrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 2236cfa76ccdSmrg done 2237cfa76ccdSmrg IFS=$func_echo_IFS 2238cfa76ccdSmrg} 2239e96acad6Smrg 2240e96acad6Smrg 2241cfa76ccdSmrg# func_warning ARG... 2242cfa76ccdSmrg# ------------------- 2243cfa76ccdSmrg# Libtool warnings are not categorized, so override funclib.sh 2244cfa76ccdSmrg# func_warning with this simpler definition. 2245cfa76ccdSmrgfunc_warning () 2246e96acad6Smrg{ 2247cfa76ccdSmrg $debug_cmd 2248e96acad6Smrg 2249cfa76ccdSmrg $warning_func ${1+"$@"} 2250cfa76ccdSmrg} 2251e96acad6Smrg 2252e96acad6Smrg 2253cfa76ccdSmrg## ---------------- ## 2254cfa76ccdSmrg## Options parsing. ## 2255cfa76ccdSmrg## ---------------- ## 2256cfa76ccdSmrg 2257cfa76ccdSmrg# Hook in the functions to make sure our own options are parsed during 2258cfa76ccdSmrg# the option parsing loop. 2259cfa76ccdSmrg 2260cfa76ccdSmrgusage='$progpath [OPTION]... [MODE-ARG]...' 2261cfa76ccdSmrg 2262cfa76ccdSmrg# Short help message in response to '-h'. 2263cfa76ccdSmrgusage_message="Options: 2264cfa76ccdSmrg --config show all configuration variables 2265cfa76ccdSmrg --debug enable verbose shell tracing 2266cfa76ccdSmrg -n, --dry-run display commands without modifying any files 2267cfa76ccdSmrg --features display basic configuration information and exit 2268cfa76ccdSmrg --mode=MODE use operation mode MODE 2269cfa76ccdSmrg --no-warnings equivalent to '-Wnone' 2270cfa76ccdSmrg --preserve-dup-deps don't remove duplicate dependency libraries 2271cfa76ccdSmrg --quiet, --silent don't print informational messages 2272cfa76ccdSmrg --tag=TAG use configuration variables from tag TAG 2273cfa76ccdSmrg -v, --verbose print more informational messages than default 2274cfa76ccdSmrg --version print version information 2275cfa76ccdSmrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2276cfa76ccdSmrg -h, --help, --help-all print short, long, or detailed help message 2277cfa76ccdSmrg" 2278e96acad6Smrg 2279cfa76ccdSmrg# Additional text appended to 'usage_message' in response to '--help'. 2280cfa76ccdSmrgfunc_help () 2281e96acad6Smrg{ 2282cfa76ccdSmrg $debug_cmd 2283cfa76ccdSmrg 2284cfa76ccdSmrg func_usage_message 2285cfa76ccdSmrg $ECHO "$long_help_message 2286cfa76ccdSmrg 2287cfa76ccdSmrgMODE must be one of the following: 2288cfa76ccdSmrg 2289cfa76ccdSmrg clean remove files from the build directory 2290cfa76ccdSmrg compile compile a source file into a libtool object 2291cfa76ccdSmrg execute automatically set library path, then run a program 2292cfa76ccdSmrg finish complete the installation of libtool libraries 2293cfa76ccdSmrg install install libraries or executables 2294cfa76ccdSmrg link create a library or an executable 2295cfa76ccdSmrg uninstall remove libraries from an installed directory 2296cfa76ccdSmrg 2297cfa76ccdSmrgMODE-ARGS vary depending on the MODE. When passed as first option, 2298cfa76ccdSmrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2299cfa76ccdSmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2300cfa76ccdSmrg 2301cfa76ccdSmrgWhen reporting a bug, please describe a test case to reproduce it and 2302cfa76ccdSmrginclude the following information: 2303cfa76ccdSmrg 2304cfa76ccdSmrg host-triplet: $host 2305cfa76ccdSmrg shell: $SHELL 2306cfa76ccdSmrg compiler: $LTCC 2307cfa76ccdSmrg compiler flags: $LTCFLAGS 2308cfa76ccdSmrg linker: $LD (gnu? $with_gnu_ld) 2309cfa76ccdSmrg version: $progname (GNU libtool) 2.4.7 2310cfa76ccdSmrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2311cfa76ccdSmrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2312cfa76ccdSmrg 2313cfa76ccdSmrgReport bugs to <bug-libtool@gnu.org>. 2314cfa76ccdSmrgGNU libtool home page: <http://www.gnu.org/software/libtool/>. 2315cfa76ccdSmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2316cfa76ccdSmrg exit 0 2317cfa76ccdSmrg} 2318cfa76ccdSmrg 2319e96acad6Smrg 2320cfa76ccdSmrg# func_lo2o OBJECT-NAME 2321cfa76ccdSmrg# --------------------- 2322cfa76ccdSmrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2323cfa76ccdSmrg# object suffix. 2324e96acad6Smrg 2325cfa76ccdSmrglo2o=s/\\.lo\$/.$objext/ 2326cfa76ccdSmrgo2lo=s/\\.$objext\$/.lo/ 2327cfa76ccdSmrg 2328cfa76ccdSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 2329cfa76ccdSmrg eval 'func_lo2o () 2330cfa76ccdSmrg { 2331cfa76ccdSmrg case $1 in 2332cfa76ccdSmrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2333cfa76ccdSmrg * ) func_lo2o_result=$1 ;; 2334cfa76ccdSmrg esac 2335cfa76ccdSmrg }' 2336cfa76ccdSmrg 2337cfa76ccdSmrg # func_xform LIBOBJ-OR-SOURCE 2338cfa76ccdSmrg # --------------------------- 2339cfa76ccdSmrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2340cfa76ccdSmrg # suffix to a '.lo' libtool-object suffix. 2341cfa76ccdSmrg eval 'func_xform () 2342cfa76ccdSmrg { 2343cfa76ccdSmrg func_xform_result=${1%.*}.lo 2344cfa76ccdSmrg }' 2345cfa76ccdSmrgelse 2346cfa76ccdSmrg # ...otherwise fall back to using sed. 2347cfa76ccdSmrg func_lo2o () 2348cfa76ccdSmrg { 2349cfa76ccdSmrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2350cfa76ccdSmrg } 2351cfa76ccdSmrg 2352cfa76ccdSmrg func_xform () 2353cfa76ccdSmrg { 2354cfa76ccdSmrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2355cfa76ccdSmrg } 2356cfa76ccdSmrgfi 2357cfa76ccdSmrg 2358cfa76ccdSmrg 2359cfa76ccdSmrg# func_fatal_configuration ARG... 2360cfa76ccdSmrg# ------------------------------- 2361e96acad6Smrg# Echo program name prefixed message to standard error, followed by 2362e96acad6Smrg# a configuration failure hint, and exit. 2363e96acad6Smrgfunc_fatal_configuration () 2364e96acad6Smrg{ 2365cfa76ccdSmrg func_fatal_error ${1+"$@"} \ 2366cfa76ccdSmrg "See the $PACKAGE documentation for more information." \ 2367cfa76ccdSmrg "Fatal configuration error." 2368e96acad6Smrg} 2369e96acad6Smrg 2370e96acad6Smrg 2371e96acad6Smrg# func_config 2372cfa76ccdSmrg# ----------- 2373e96acad6Smrg# Display the configuration for all the tags in this script. 2374e96acad6Smrgfunc_config () 2375e96acad6Smrg{ 2376e96acad6Smrg re_begincf='^# ### BEGIN LIBTOOL' 2377e96acad6Smrg re_endcf='^# ### END LIBTOOL' 2378e96acad6Smrg 2379e96acad6Smrg # Default configuration. 2380e96acad6Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2381e96acad6Smrg 2382dbbd9e4bSmacallan # Now print the configurations for the tags. 2383dbbd9e4bSmacallan for tagname in $taglist; do 2384e96acad6Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2385dbbd9e4bSmacallan done 2386dbbd9e4bSmacallan 2387e96acad6Smrg exit $? 2388e96acad6Smrg} 2389dbbd9e4bSmacallan 2390cfa76ccdSmrg 2391e96acad6Smrg# func_features 2392cfa76ccdSmrg# ------------- 2393e96acad6Smrg# Display the features supported by this script. 2394e96acad6Smrgfunc_features () 2395e96acad6Smrg{ 2396e96acad6Smrg echo "host: $host" 2397cfa76ccdSmrg if test yes = "$build_libtool_libs"; then 2398e96acad6Smrg echo "enable shared libraries" 2399dbbd9e4bSmacallan else 2400e96acad6Smrg echo "disable shared libraries" 2401dbbd9e4bSmacallan fi 2402cfa76ccdSmrg if test yes = "$build_old_libs"; then 2403e96acad6Smrg echo "enable static libraries" 2404dbbd9e4bSmacallan else 2405e96acad6Smrg echo "disable static libraries" 2406dbbd9e4bSmacallan fi 2407dbbd9e4bSmacallan 2408e96acad6Smrg exit $? 2409e96acad6Smrg} 2410dbbd9e4bSmacallan 2411cfa76ccdSmrg 2412cfa76ccdSmrg# func_enable_tag TAGNAME 2413cfa76ccdSmrg# ----------------------- 2414e96acad6Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2415e96acad6Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2416e96acad6Smrg# variable here. 2417e96acad6Smrgfunc_enable_tag () 2418e96acad6Smrg{ 2419cfa76ccdSmrg # Global variable: 2420cfa76ccdSmrg tagname=$1 2421dbbd9e4bSmacallan 2422cfa76ccdSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2423cfa76ccdSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2424cfa76ccdSmrg sed_extractcf=/$re_begincf/,/$re_endcf/p 2425dbbd9e4bSmacallan 2426cfa76ccdSmrg # Validate tagname. 2427cfa76ccdSmrg case $tagname in 2428cfa76ccdSmrg *[!-_A-Za-z0-9,/]*) 2429cfa76ccdSmrg func_fatal_error "invalid tag name: $tagname" 2430cfa76ccdSmrg ;; 2431cfa76ccdSmrg esac 2432dbbd9e4bSmacallan 2433cfa76ccdSmrg # Don't test for the "default" C tag, as we know it's 2434cfa76ccdSmrg # there but not specially marked. 2435cfa76ccdSmrg case $tagname in 2436cfa76ccdSmrg CC) ;; 2437e96acad6Smrg *) 2438cfa76ccdSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2439cfa76ccdSmrg taglist="$taglist $tagname" 2440cfa76ccdSmrg 2441cfa76ccdSmrg # Evaluate the configuration. Be careful to quote the path 2442cfa76ccdSmrg # and the sed script, to avoid splitting on whitespace, but 2443cfa76ccdSmrg # also don't use non-portable quotes within backquotes within 2444cfa76ccdSmrg # quotes we have to do it in 2 steps: 2445cfa76ccdSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2446cfa76ccdSmrg eval "$extractedcf" 2447cfa76ccdSmrg else 2448cfa76ccdSmrg func_error "ignoring unknown tag $tagname" 2449cfa76ccdSmrg fi 2450cfa76ccdSmrg ;; 2451cfa76ccdSmrg esac 2452e96acad6Smrg} 2453dbbd9e4bSmacallan 2454cfa76ccdSmrg 2455e96acad6Smrg# func_check_version_match 2456cfa76ccdSmrg# ------------------------ 2457e96acad6Smrg# Ensure that we are using m4 macros, and libtool script from the same 2458e96acad6Smrg# release of libtool. 2459e96acad6Smrgfunc_check_version_match () 2460e96acad6Smrg{ 2461cfa76ccdSmrg if test "$package_revision" != "$macro_revision"; then 2462cfa76ccdSmrg if test "$VERSION" != "$macro_version"; then 2463cfa76ccdSmrg if test -z "$macro_version"; then 2464cfa76ccdSmrg cat >&2 <<_LT_EOF 2465e96acad6Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2466e96acad6Smrg$progname: definition of this LT_INIT comes from an older release. 2467e96acad6Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2468e96acad6Smrg$progname: and run autoconf again. 2469e96acad6Smrg_LT_EOF 2470cfa76ccdSmrg else 2471cfa76ccdSmrg cat >&2 <<_LT_EOF 2472e96acad6Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2473e96acad6Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2474e96acad6Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2475e96acad6Smrg$progname: and run autoconf again. 2476e96acad6Smrg_LT_EOF 2477cfa76ccdSmrg fi 2478cfa76ccdSmrg else 2479cfa76ccdSmrg cat >&2 <<_LT_EOF 2480e96acad6Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2481e96acad6Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2482e96acad6Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2483e96acad6Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 2484e96acad6Smrg_LT_EOF 2485cfa76ccdSmrg fi 2486dbbd9e4bSmacallan 2487cfa76ccdSmrg exit $EXIT_MISMATCH 2488cfa76ccdSmrg fi 2489e96acad6Smrg} 2490dbbd9e4bSmacallan 2491dbbd9e4bSmacallan 2492cfa76ccdSmrg# libtool_options_prep [ARG]... 2493cfa76ccdSmrg# ----------------------------- 2494cfa76ccdSmrg# Preparation for options parsed by libtool. 2495cfa76ccdSmrglibtool_options_prep () 2496cfa76ccdSmrg{ 2497cfa76ccdSmrg $debug_mode 2498dbbd9e4bSmacallan 2499cfa76ccdSmrg # Option defaults: 2500cfa76ccdSmrg opt_config=false 2501cfa76ccdSmrg opt_dlopen= 2502cfa76ccdSmrg opt_dry_run=false 2503cfa76ccdSmrg opt_help=false 2504cfa76ccdSmrg opt_mode= 2505cfa76ccdSmrg opt_preserve_dup_deps=false 2506cfa76ccdSmrg opt_quiet=false 2507dbbd9e4bSmacallan 2508cfa76ccdSmrg nonopt= 2509cfa76ccdSmrg preserve_args= 2510dbbd9e4bSmacallan 2511cfa76ccdSmrg _G_rc_lt_options_prep=: 2512e96acad6Smrg 2513cfa76ccdSmrg # Shorthand for --mode=foo, only valid as the first argument 2514cfa76ccdSmrg case $1 in 2515cfa76ccdSmrg clean|clea|cle|cl) 2516cfa76ccdSmrg shift; set dummy --mode clean ${1+"$@"}; shift 2517cfa76ccdSmrg ;; 2518cfa76ccdSmrg compile|compil|compi|comp|com|co|c) 2519cfa76ccdSmrg shift; set dummy --mode compile ${1+"$@"}; shift 2520cfa76ccdSmrg ;; 2521cfa76ccdSmrg execute|execut|execu|exec|exe|ex|e) 2522cfa76ccdSmrg shift; set dummy --mode execute ${1+"$@"}; shift 2523cfa76ccdSmrg ;; 2524cfa76ccdSmrg finish|finis|fini|fin|fi|f) 2525cfa76ccdSmrg shift; set dummy --mode finish ${1+"$@"}; shift 2526cfa76ccdSmrg ;; 2527cfa76ccdSmrg install|instal|insta|inst|ins|in|i) 2528cfa76ccdSmrg shift; set dummy --mode install ${1+"$@"}; shift 2529cfa76ccdSmrg ;; 2530cfa76ccdSmrg link|lin|li|l) 2531cfa76ccdSmrg shift; set dummy --mode link ${1+"$@"}; shift 2532cfa76ccdSmrg ;; 2533cfa76ccdSmrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2534cfa76ccdSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 2535cfa76ccdSmrg ;; 2536cfa76ccdSmrg *) 2537cfa76ccdSmrg _G_rc_lt_options_prep=false 2538cfa76ccdSmrg ;; 2539dbbd9e4bSmacallan esac 2540dbbd9e4bSmacallan 2541cfa76ccdSmrg if $_G_rc_lt_options_prep; then 2542cfa76ccdSmrg # Pass back the list of options. 2543cfa76ccdSmrg func_quote eval ${1+"$@"} 2544cfa76ccdSmrg libtool_options_prep_result=$func_quote_result 2545cfa76ccdSmrg fi 2546cfa76ccdSmrg} 2547cfa76ccdSmrgfunc_add_hook func_options_prep libtool_options_prep 2548e96acad6Smrg 2549dbbd9e4bSmacallan 2550cfa76ccdSmrg# libtool_parse_options [ARG]... 2551cfa76ccdSmrg# --------------------------------- 2552cfa76ccdSmrg# Provide handling for libtool specific options. 2553cfa76ccdSmrglibtool_parse_options () 2554cfa76ccdSmrg{ 2555cfa76ccdSmrg $debug_cmd 2556dbbd9e4bSmacallan 2557cfa76ccdSmrg _G_rc_lt_parse_options=false 2558dbbd9e4bSmacallan 2559cfa76ccdSmrg # Perform our own loop to consume as many options as possible in 2560cfa76ccdSmrg # each iteration. 2561cfa76ccdSmrg while test $# -gt 0; do 2562cfa76ccdSmrg _G_match_lt_parse_options=: 2563cfa76ccdSmrg _G_opt=$1 2564cfa76ccdSmrg shift 2565cfa76ccdSmrg case $_G_opt in 2566cfa76ccdSmrg --dry-run|--dryrun|-n) 2567cfa76ccdSmrg opt_dry_run=: 2568cfa76ccdSmrg ;; 2569cfa76ccdSmrg 2570cfa76ccdSmrg --config) func_config ;; 2571cfa76ccdSmrg 2572cfa76ccdSmrg --dlopen|-dlopen) 2573cfa76ccdSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 2574cfa76ccdSmrg}$1" 2575cfa76ccdSmrg shift 2576cfa76ccdSmrg ;; 2577cfa76ccdSmrg 2578cfa76ccdSmrg --preserve-dup-deps) 2579cfa76ccdSmrg opt_preserve_dup_deps=: ;; 2580cfa76ccdSmrg 2581cfa76ccdSmrg --features) func_features ;; 2582cfa76ccdSmrg 2583cfa76ccdSmrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2584cfa76ccdSmrg 2585cfa76ccdSmrg --help) opt_help=: ;; 2586cfa76ccdSmrg 2587cfa76ccdSmrg --help-all) opt_help=': help-all' ;; 2588cfa76ccdSmrg 2589cfa76ccdSmrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 2590cfa76ccdSmrg opt_mode=$1 2591cfa76ccdSmrg case $1 in 2592cfa76ccdSmrg # Valid mode arguments: 2593cfa76ccdSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 2594cfa76ccdSmrg 2595cfa76ccdSmrg # Catch anything else as an error 2596cfa76ccdSmrg *) func_error "invalid argument for $_G_opt" 2597cfa76ccdSmrg exit_cmd=exit 2598cfa76ccdSmrg break 2599cfa76ccdSmrg ;; 2600cfa76ccdSmrg esac 2601cfa76ccdSmrg shift 2602cfa76ccdSmrg ;; 2603cfa76ccdSmrg 2604cfa76ccdSmrg --no-silent|--no-quiet) 2605cfa76ccdSmrg opt_quiet=false 2606cfa76ccdSmrg func_append preserve_args " $_G_opt" 2607cfa76ccdSmrg ;; 2608cfa76ccdSmrg 2609cfa76ccdSmrg --no-warnings|--no-warning|--no-warn) 2610cfa76ccdSmrg opt_warning=false 2611cfa76ccdSmrg func_append preserve_args " $_G_opt" 2612cfa76ccdSmrg ;; 2613cfa76ccdSmrg 2614cfa76ccdSmrg --no-verbose) 2615cfa76ccdSmrg opt_verbose=false 2616cfa76ccdSmrg func_append preserve_args " $_G_opt" 2617cfa76ccdSmrg ;; 2618cfa76ccdSmrg 2619cfa76ccdSmrg --silent|--quiet) 2620cfa76ccdSmrg opt_quiet=: 2621cfa76ccdSmrg opt_verbose=false 2622cfa76ccdSmrg func_append preserve_args " $_G_opt" 2623cfa76ccdSmrg ;; 2624cfa76ccdSmrg 2625cfa76ccdSmrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 2626cfa76ccdSmrg opt_tag=$1 2627cfa76ccdSmrg func_append preserve_args " $_G_opt $1" 2628cfa76ccdSmrg func_enable_tag "$1" 2629cfa76ccdSmrg shift 2630cfa76ccdSmrg ;; 2631cfa76ccdSmrg 2632cfa76ccdSmrg --verbose|-v) opt_quiet=false 2633cfa76ccdSmrg opt_verbose=: 2634cfa76ccdSmrg func_append preserve_args " $_G_opt" 2635cfa76ccdSmrg ;; 2636cfa76ccdSmrg 2637cfa76ccdSmrg # An option not handled by this hook function: 2638cfa76ccdSmrg *) set dummy "$_G_opt" ${1+"$@"} ; shift 2639cfa76ccdSmrg _G_match_lt_parse_options=false 2640cfa76ccdSmrg break 2641cfa76ccdSmrg ;; 2642cfa76ccdSmrg esac 2643cfa76ccdSmrg $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 2644cfa76ccdSmrg done 2645dbbd9e4bSmacallan 2646cfa76ccdSmrg if $_G_rc_lt_parse_options; then 2647cfa76ccdSmrg # save modified positional parameters for caller 2648cfa76ccdSmrg func_quote eval ${1+"$@"} 2649cfa76ccdSmrg libtool_parse_options_result=$func_quote_result 2650e96acad6Smrg fi 2651cfa76ccdSmrg} 2652cfa76ccdSmrgfunc_add_hook func_parse_options libtool_parse_options 2653dbbd9e4bSmacallan 2654dbbd9e4bSmacallan 2655cfa76ccdSmrg 2656cfa76ccdSmrg# libtool_validate_options [ARG]... 2657cfa76ccdSmrg# --------------------------------- 2658cfa76ccdSmrg# Perform any sanity checks on option settings and/or unconsumed 2659cfa76ccdSmrg# arguments. 2660cfa76ccdSmrglibtool_validate_options () 2661cfa76ccdSmrg{ 2662cfa76ccdSmrg # save first non-option argument 2663cfa76ccdSmrg if test 0 -lt $#; then 2664cfa76ccdSmrg nonopt=$1 2665cfa76ccdSmrg shift 2666e96acad6Smrg fi 2667dbbd9e4bSmacallan 2668cfa76ccdSmrg # preserve --debug 2669cfa76ccdSmrg test : = "$debug_cmd" || func_append preserve_args " --debug" 2670cfa76ccdSmrg 2671cfa76ccdSmrg case $host in 2672cfa76ccdSmrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2673cfa76ccdSmrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2674cfa76ccdSmrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2675cfa76ccdSmrg # don't eliminate duplications in $postdeps and $predeps 2676cfa76ccdSmrg opt_duplicate_compiler_generated_deps=: 2677cfa76ccdSmrg ;; 2678cfa76ccdSmrg *) 2679cfa76ccdSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2680cfa76ccdSmrg ;; 2681cfa76ccdSmrg esac 2682dbbd9e4bSmacallan 2683cfa76ccdSmrg $opt_help || { 2684cfa76ccdSmrg # Sanity checks first: 2685cfa76ccdSmrg func_check_version_match 2686dbbd9e4bSmacallan 2687cfa76ccdSmrg test yes != "$build_libtool_libs" \ 2688cfa76ccdSmrg && test yes != "$build_old_libs" \ 2689cfa76ccdSmrg && func_fatal_configuration "not configured to build any kind of library" 2690cfa76ccdSmrg 2691cfa76ccdSmrg # Darwin sucks 2692cfa76ccdSmrg eval std_shrext=\"$shrext_cmds\" 2693cfa76ccdSmrg 2694cfa76ccdSmrg # Only execute mode is allowed to have -dlopen flags. 2695cfa76ccdSmrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2696cfa76ccdSmrg func_error "unrecognized option '-dlopen'" 2697cfa76ccdSmrg $ECHO "$help" 1>&2 2698cfa76ccdSmrg exit $EXIT_FAILURE 2699cfa76ccdSmrg fi 2700cfa76ccdSmrg 2701cfa76ccdSmrg # Change the help message to a mode-specific one. 2702cfa76ccdSmrg generic_help=$help 2703cfa76ccdSmrg help="Try '$progname --help --mode=$opt_mode' for more information." 2704cfa76ccdSmrg } 2705cfa76ccdSmrg 2706cfa76ccdSmrg # Pass back the unparsed argument list 2707cfa76ccdSmrg func_quote eval ${1+"$@"} 2708cfa76ccdSmrg libtool_validate_options_result=$func_quote_result 2709e96acad6Smrg} 2710cfa76ccdSmrgfunc_add_hook func_validate_options libtool_validate_options 2711dbbd9e4bSmacallan 2712dbbd9e4bSmacallan 2713cfa76ccdSmrg# Process options as early as possible so that --help and --version 2714cfa76ccdSmrg# can return quickly. 2715cfa76ccdSmrgfunc_options ${1+"$@"} 2716cfa76ccdSmrgeval set dummy "$func_options_result"; shift 2717cfa76ccdSmrg 2718dbbd9e4bSmacallan 2719dbbd9e4bSmacallan 2720e96acad6Smrg## ----------- ## 2721e96acad6Smrg## Main. ## 2722e96acad6Smrg## ----------- ## 2723dbbd9e4bSmacallan 2724cfa76ccdSmrgmagic='%%%MAGIC variable%%%' 2725cfa76ccdSmrgmagic_exe='%%%MAGIC EXE variable%%%' 2726cfa76ccdSmrg 2727cfa76ccdSmrg# Global variables. 2728cfa76ccdSmrgextracted_archives= 2729cfa76ccdSmrgextracted_serial=0 2730cfa76ccdSmrg 2731cfa76ccdSmrg# If this variable is set in any of the actions, the command in it 2732cfa76ccdSmrg# will be execed at the end. This prevents here-documents from being 2733cfa76ccdSmrg# left over by shells. 2734cfa76ccdSmrgexec_cmd= 2735cfa76ccdSmrg 2736cfa76ccdSmrg 2737cfa76ccdSmrg# A function that is used when there is no print builtin or printf. 2738cfa76ccdSmrgfunc_fallback_echo () 2739cfa76ccdSmrg{ 2740cfa76ccdSmrg eval 'cat <<_LTECHO_EOF 2741cfa76ccdSmrg$1 2742cfa76ccdSmrg_LTECHO_EOF' 2743cfa76ccdSmrg} 2744cfa76ccdSmrg 2745cfa76ccdSmrg# func_generated_by_libtool 2746cfa76ccdSmrg# True iff stdin has been generated by Libtool. This function is only 2747cfa76ccdSmrg# a basic sanity check; it will hardly flush out determined imposters. 2748cfa76ccdSmrgfunc_generated_by_libtool_p () 2749cfa76ccdSmrg{ 2750cfa76ccdSmrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2751cfa76ccdSmrg} 2752cfa76ccdSmrg 2753e96acad6Smrg# func_lalib_p file 2754cfa76ccdSmrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2755e96acad6Smrg# This function is only a basic sanity check; it will hardly flush out 2756e96acad6Smrg# determined imposters. 2757e96acad6Smrgfunc_lalib_p () 2758e96acad6Smrg{ 2759e96acad6Smrg test -f "$1" && 2760cfa76ccdSmrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2761e96acad6Smrg} 2762dbbd9e4bSmacallan 2763e96acad6Smrg# func_lalib_unsafe_p file 2764cfa76ccdSmrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2765e96acad6Smrg# This function implements the same check as func_lalib_p without 2766e96acad6Smrg# resorting to external programs. To this end, it redirects stdin and 2767e96acad6Smrg# closes it afterwards, without saving the original file descriptor. 2768e96acad6Smrg# As a safety measure, use it only where a negative result would be 2769cfa76ccdSmrg# fatal anyway. Works if 'file' does not exist. 2770e96acad6Smrgfunc_lalib_unsafe_p () 2771e96acad6Smrg{ 2772e96acad6Smrg lalib_p=no 2773e96acad6Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2774e96acad6Smrg for lalib_p_l in 1 2 3 4 2775e96acad6Smrg do 2776e96acad6Smrg read lalib_p_line 2777cfa76ccdSmrg case $lalib_p_line in 2778e96acad6Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2779e96acad6Smrg esac 2780e96acad6Smrg done 2781e96acad6Smrg exec 0<&5 5<&- 2782e96acad6Smrg fi 2783cfa76ccdSmrg test yes = "$lalib_p" 2784e96acad6Smrg} 2785dbbd9e4bSmacallan 2786e96acad6Smrg# func_ltwrapper_script_p file 2787e96acad6Smrg# True iff FILE is a libtool wrapper script 2788e96acad6Smrg# This function is only a basic sanity check; it will hardly flush out 2789e96acad6Smrg# determined imposters. 2790e96acad6Smrgfunc_ltwrapper_script_p () 2791e96acad6Smrg{ 2792cfa76ccdSmrg test -f "$1" && 2793cfa76ccdSmrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2794e96acad6Smrg} 2795dbbd9e4bSmacallan 2796e96acad6Smrg# func_ltwrapper_executable_p file 2797e96acad6Smrg# True iff FILE is a libtool wrapper executable 2798e96acad6Smrg# This function is only a basic sanity check; it will hardly flush out 2799e96acad6Smrg# determined imposters. 2800e96acad6Smrgfunc_ltwrapper_executable_p () 2801e96acad6Smrg{ 2802e96acad6Smrg func_ltwrapper_exec_suffix= 2803e96acad6Smrg case $1 in 2804e96acad6Smrg *.exe) ;; 2805e96acad6Smrg *) func_ltwrapper_exec_suffix=.exe ;; 2806dbbd9e4bSmacallan esac 2807e96acad6Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2808e96acad6Smrg} 2809dbbd9e4bSmacallan 2810e96acad6Smrg# func_ltwrapper_scriptname file 2811e96acad6Smrg# Assumes file is an ltwrapper_executable 2812e96acad6Smrg# uses $file to determine the appropriate filename for a 2813e96acad6Smrg# temporary ltwrapper_script. 2814e96acad6Smrgfunc_ltwrapper_scriptname () 2815e96acad6Smrg{ 2816e96acad6Smrg func_dirname_and_basename "$1" "" "." 2817e96acad6Smrg func_stripname '' '.exe' "$func_basename_result" 2818cfa76ccdSmrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2819e96acad6Smrg} 2820dbbd9e4bSmacallan 2821e96acad6Smrg# func_ltwrapper_p file 2822e96acad6Smrg# True iff FILE is a libtool wrapper script or wrapper executable 2823e96acad6Smrg# This function is only a basic sanity check; it will hardly flush out 2824e96acad6Smrg# determined imposters. 2825e96acad6Smrgfunc_ltwrapper_p () 2826e96acad6Smrg{ 2827e96acad6Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2828e96acad6Smrg} 2829dbbd9e4bSmacallan 2830dbbd9e4bSmacallan 2831e96acad6Smrg# func_execute_cmds commands fail_cmd 2832e96acad6Smrg# Execute tilde-delimited COMMANDS. 2833e96acad6Smrg# If FAIL_CMD is given, eval that upon failure. 2834e96acad6Smrg# FAIL_CMD may read-access the current command in variable CMD! 2835e96acad6Smrgfunc_execute_cmds () 2836e96acad6Smrg{ 2837cfa76ccdSmrg $debug_cmd 2838cfa76ccdSmrg 2839e96acad6Smrg save_ifs=$IFS; IFS='~' 2840e96acad6Smrg for cmd in $1; do 2841cfa76ccdSmrg IFS=$sp$nl 2842e96acad6Smrg eval cmd=\"$cmd\" 2843cfa76ccdSmrg IFS=$save_ifs 2844e96acad6Smrg func_show_eval "$cmd" "${2-:}" 2845dbbd9e4bSmacallan done 2846e96acad6Smrg IFS=$save_ifs 2847e96acad6Smrg} 2848dbbd9e4bSmacallan 2849dbbd9e4bSmacallan 2850e96acad6Smrg# func_source file 2851e96acad6Smrg# Source FILE, adding directory component if necessary. 2852e96acad6Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 2853e96acad6Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2854e96acad6Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 2855cfa76ccdSmrg# 'FILE.' does not work on cygwin managed mounts. 2856e96acad6Smrgfunc_source () 2857e96acad6Smrg{ 2858cfa76ccdSmrg $debug_cmd 2859cfa76ccdSmrg 2860e96acad6Smrg case $1 in 2861e96acad6Smrg */* | *\\*) . "$1" ;; 2862e96acad6Smrg *) . "./$1" ;; 2863e96acad6Smrg esac 2864e96acad6Smrg} 2865dbbd9e4bSmacallan 2866dbbd9e4bSmacallan 2867e96acad6Smrg# func_resolve_sysroot PATH 2868e96acad6Smrg# Replace a leading = in PATH with a sysroot. Store the result into 2869e96acad6Smrg# func_resolve_sysroot_result 2870e96acad6Smrgfunc_resolve_sysroot () 2871e96acad6Smrg{ 2872e96acad6Smrg func_resolve_sysroot_result=$1 2873e96acad6Smrg case $func_resolve_sysroot_result in 2874e96acad6Smrg =*) 2875e96acad6Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 2876e96acad6Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2877e96acad6Smrg ;; 2878e96acad6Smrg esac 2879e96acad6Smrg} 2880dbbd9e4bSmacallan 2881e96acad6Smrg# func_replace_sysroot PATH 2882e96acad6Smrg# If PATH begins with the sysroot, replace it with = and 2883e96acad6Smrg# store the result into func_replace_sysroot_result. 2884e96acad6Smrgfunc_replace_sysroot () 2885e96acad6Smrg{ 2886cfa76ccdSmrg case $lt_sysroot:$1 in 2887e96acad6Smrg ?*:"$lt_sysroot"*) 2888e96acad6Smrg func_stripname "$lt_sysroot" '' "$1" 2889cfa76ccdSmrg func_replace_sysroot_result='='$func_stripname_result 2890e96acad6Smrg ;; 2891e96acad6Smrg *) 2892e96acad6Smrg # Including no sysroot. 2893e96acad6Smrg func_replace_sysroot_result=$1 2894e96acad6Smrg ;; 2895e96acad6Smrg esac 2896e96acad6Smrg} 2897dbbd9e4bSmacallan 2898e96acad6Smrg# func_infer_tag arg 2899e96acad6Smrg# Infer tagged configuration to use if any are available and 2900e96acad6Smrg# if one wasn't chosen via the "--tag" command line option. 2901e96acad6Smrg# Only attempt this if the compiler in the base compile 2902e96acad6Smrg# command doesn't match the default compiler. 2903e96acad6Smrg# arg is usually of the form 'gcc ...' 2904e96acad6Smrgfunc_infer_tag () 2905e96acad6Smrg{ 2906cfa76ccdSmrg $debug_cmd 2907cfa76ccdSmrg 2908e96acad6Smrg if test -n "$available_tags" && test -z "$tagname"; then 2909e96acad6Smrg CC_quoted= 2910e96acad6Smrg for arg in $CC; do 2911e96acad6Smrg func_append_quoted CC_quoted "$arg" 2912e96acad6Smrg done 2913e96acad6Smrg CC_expanded=`func_echo_all $CC` 2914e96acad6Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2915e96acad6Smrg case $@ in 2916e96acad6Smrg # Blanks in the command may have been stripped by the calling shell, 2917e96acad6Smrg # but not from the CC environment variable when configure was run. 2918e96acad6Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2919e96acad6Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2920e96acad6Smrg # Blanks at the start of $base_compile will cause this to fail 2921e96acad6Smrg # if we don't check for them as well. 2922e96acad6Smrg *) 2923e96acad6Smrg for z in $available_tags; do 2924e96acad6Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2925e96acad6Smrg # Evaluate the configuration. 2926cfa76ccdSmrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2927e96acad6Smrg CC_quoted= 2928e96acad6Smrg for arg in $CC; do 2929e96acad6Smrg # Double-quote args containing other shell metacharacters. 2930e96acad6Smrg func_append_quoted CC_quoted "$arg" 2931e96acad6Smrg done 2932e96acad6Smrg CC_expanded=`func_echo_all $CC` 2933e96acad6Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2934e96acad6Smrg case "$@ " in 2935e96acad6Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2936e96acad6Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2937e96acad6Smrg # The compiler in the base compile command matches 2938e96acad6Smrg # the one in the tagged configuration. 2939e96acad6Smrg # Assume this is the tagged configuration we want. 2940e96acad6Smrg tagname=$z 2941e96acad6Smrg break 2942e96acad6Smrg ;; 2943e96acad6Smrg esac 2944e96acad6Smrg fi 2945e96acad6Smrg done 2946e96acad6Smrg # If $tagname still isn't set, then no tagged configuration 2947e96acad6Smrg # was found and let the user know that the "--tag" command 2948e96acad6Smrg # line option must be used. 2949e96acad6Smrg if test -z "$tagname"; then 2950e96acad6Smrg func_echo "unable to infer tagged configuration" 2951cfa76ccdSmrg func_fatal_error "specify a tag with '--tag'" 2952e96acad6Smrg# else 2953e96acad6Smrg# func_verbose "using $tagname tagged configuration" 2954e96acad6Smrg fi 2955e96acad6Smrg ;; 2956e96acad6Smrg esac 2957dbbd9e4bSmacallan fi 2958e96acad6Smrg} 2959dbbd9e4bSmacallan 2960dbbd9e4bSmacallan 2961dbbd9e4bSmacallan 2962e96acad6Smrg# func_write_libtool_object output_name pic_name nonpic_name 2963e96acad6Smrg# Create a libtool object file (analogous to a ".la" file), 2964e96acad6Smrg# but don't create it if we're doing a dry run. 2965e96acad6Smrgfunc_write_libtool_object () 2966e96acad6Smrg{ 2967cfa76ccdSmrg write_libobj=$1 2968cfa76ccdSmrg if test yes = "$build_libtool_libs"; then 2969cfa76ccdSmrg write_lobj=\'$2\' 2970e96acad6Smrg else 2971e96acad6Smrg write_lobj=none 2972dbbd9e4bSmacallan fi 2973dbbd9e4bSmacallan 2974cfa76ccdSmrg if test yes = "$build_old_libs"; then 2975cfa76ccdSmrg write_oldobj=\'$3\' 2976e96acad6Smrg else 2977e96acad6Smrg write_oldobj=none 2978dbbd9e4bSmacallan fi 2979dbbd9e4bSmacallan 2980e96acad6Smrg $opt_dry_run || { 2981e96acad6Smrg cat >${write_libobj}T <<EOF 2982e96acad6Smrg# $write_libobj - a libtool object file 2983cfa76ccdSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2984dbbd9e4bSmacallan# 2985dbbd9e4bSmacallan# Please DO NOT delete this file! 2986dbbd9e4bSmacallan# It is necessary for linking the library. 2987dbbd9e4bSmacallan 2988dbbd9e4bSmacallan# Name of the PIC object. 2989e96acad6Smrgpic_object=$write_lobj 2990dbbd9e4bSmacallan 2991e96acad6Smrg# Name of the non-PIC object 2992e96acad6Smrgnon_pic_object=$write_oldobj 2993dbbd9e4bSmacallan 2994e96acad6SmrgEOF 2995cfa76ccdSmrg $MV "${write_libobj}T" "$write_libobj" 2996e96acad6Smrg } 2997e96acad6Smrg} 2998dbbd9e4bSmacallan 2999dbbd9e4bSmacallan 3000e96acad6Smrg################################################## 3001e96acad6Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 3002e96acad6Smrg################################################## 3003dbbd9e4bSmacallan 3004e96acad6Smrg# func_convert_core_file_wine_to_w32 ARG 3005e96acad6Smrg# Helper function used by file name conversion functions when $build is *nix, 3006e96acad6Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 3007e96acad6Smrg# correctly configured wine environment available, with the winepath program 3008e96acad6Smrg# in $build's $PATH. 3009e96acad6Smrg# 3010e96acad6Smrg# ARG is the $build file name to be converted to w32 format. 3011e96acad6Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 3012e96acad6Smrg# be empty on error (or when ARG is empty) 3013e96acad6Smrgfunc_convert_core_file_wine_to_w32 () 3014e96acad6Smrg{ 3015cfa76ccdSmrg $debug_cmd 3016cfa76ccdSmrg 3017cfa76ccdSmrg func_convert_core_file_wine_to_w32_result=$1 3018e96acad6Smrg if test -n "$1"; then 3019e96acad6Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 3020e96acad6Smrg # are forced to check the contents of stdout. On the other hand, if the 3021e96acad6Smrg # command is not found, the shell will set an exit code of 127 and print 3022e96acad6Smrg # *an error message* to stdout. So we must check for both error code of 3023e96acad6Smrg # zero AND non-empty stdout, which explains the odd construction: 3024e96acad6Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 3025cfa76ccdSmrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 3026e96acad6Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 3027cfa76ccdSmrg $SED -e "$sed_naive_backslashify"` 3028e96acad6Smrg else 3029e96acad6Smrg func_convert_core_file_wine_to_w32_result= 3030e96acad6Smrg fi 3031e96acad6Smrg fi 3032e96acad6Smrg} 3033e96acad6Smrg# end: func_convert_core_file_wine_to_w32 3034dbbd9e4bSmacallan 3035e96acad6Smrg 3036e96acad6Smrg# func_convert_core_path_wine_to_w32 ARG 3037e96acad6Smrg# Helper function used by path conversion functions when $build is *nix, and 3038e96acad6Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 3039e96acad6Smrg# configured wine environment available, with the winepath program in $build's 3040e96acad6Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 3041e96acad6Smrg# 3042e96acad6Smrg# ARG is path to be converted from $build format to win32. 3043e96acad6Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 3044e96acad6Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 3045e96acad6Smrg# are convertible, then the result may be empty. 3046e96acad6Smrgfunc_convert_core_path_wine_to_w32 () 3047e96acad6Smrg{ 3048cfa76ccdSmrg $debug_cmd 3049cfa76ccdSmrg 3050e96acad6Smrg # unfortunately, winepath doesn't convert paths, only file names 3051cfa76ccdSmrg func_convert_core_path_wine_to_w32_result= 3052e96acad6Smrg if test -n "$1"; then 3053e96acad6Smrg oldIFS=$IFS 3054e96acad6Smrg IFS=: 3055e96acad6Smrg for func_convert_core_path_wine_to_w32_f in $1; do 3056e96acad6Smrg IFS=$oldIFS 3057e96acad6Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 3058cfa76ccdSmrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 3059e96acad6Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 3060cfa76ccdSmrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 3061e96acad6Smrg else 3062e96acad6Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 3063e96acad6Smrg fi 3064dbbd9e4bSmacallan fi 3065e96acad6Smrg done 3066e96acad6Smrg IFS=$oldIFS 3067e96acad6Smrg fi 3068e96acad6Smrg} 3069e96acad6Smrg# end: func_convert_core_path_wine_to_w32 3070e96acad6Smrg 3071e96acad6Smrg 3072e96acad6Smrg# func_cygpath ARGS... 3073e96acad6Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 3074e96acad6Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 3075e96acad6Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 3076e96acad6Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 3077e96acad6Smrg# file name or path is assumed to be in w32 format, as previously converted 3078e96acad6Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 3079e96acad6Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 3080e96acad6Smrg# Cygwin format). Returns an empty string on error. 3081e96acad6Smrg# 3082e96acad6Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 3083e96acad6Smrg# be converted. 3084e96acad6Smrg# 3085e96acad6Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 3086e96acad6Smrg# environment variable; do not put it in $PATH. 3087e96acad6Smrgfunc_cygpath () 3088e96acad6Smrg{ 3089cfa76ccdSmrg $debug_cmd 3090cfa76ccdSmrg 3091e96acad6Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 3092e96acad6Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 3093e96acad6Smrg if test "$?" -ne 0; then 3094e96acad6Smrg # on failure, ensure result is empty 3095e96acad6Smrg func_cygpath_result= 3096e96acad6Smrg fi 3097e96acad6Smrg else 3098e96acad6Smrg func_cygpath_result= 3099cfa76ccdSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 3100e96acad6Smrg fi 3101e96acad6Smrg} 3102e96acad6Smrg#end: func_cygpath 3103dbbd9e4bSmacallan 3104dbbd9e4bSmacallan 3105e96acad6Smrg# func_convert_core_msys_to_w32 ARG 3106e96acad6Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 3107e96acad6Smrg# result in func_convert_core_msys_to_w32_result. 3108e96acad6Smrgfunc_convert_core_msys_to_w32 () 3109e96acad6Smrg{ 3110cfa76ccdSmrg $debug_cmd 3111cfa76ccdSmrg 3112e96acad6Smrg # awkward: cmd appends spaces to result 3113e96acad6Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 3114cfa76ccdSmrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 3115e96acad6Smrg} 3116e96acad6Smrg#end: func_convert_core_msys_to_w32 3117dbbd9e4bSmacallan 3118dbbd9e4bSmacallan 3119e96acad6Smrg# func_convert_file_check ARG1 ARG2 3120e96acad6Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 3121e96acad6Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 3122e96acad6Smrg# func_to_host_file_result to ARG1). 3123e96acad6Smrgfunc_convert_file_check () 3124e96acad6Smrg{ 3125cfa76ccdSmrg $debug_cmd 3126cfa76ccdSmrg 3127cfa76ccdSmrg if test -z "$2" && test -n "$1"; then 3128e96acad6Smrg func_error "Could not determine host file name corresponding to" 3129cfa76ccdSmrg func_error " '$1'" 3130e96acad6Smrg func_error "Continuing, but uninstalled executables may not work." 3131e96acad6Smrg # Fallback: 3132cfa76ccdSmrg func_to_host_file_result=$1 3133e96acad6Smrg fi 3134e96acad6Smrg} 3135e96acad6Smrg# end func_convert_file_check 3136dbbd9e4bSmacallan 3137dbbd9e4bSmacallan 3138e96acad6Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 3139e96acad6Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 3140e96acad6Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 3141e96acad6Smrg# func_to_host_file_result to a simplistic fallback value (see below). 3142e96acad6Smrgfunc_convert_path_check () 3143e96acad6Smrg{ 3144cfa76ccdSmrg $debug_cmd 3145cfa76ccdSmrg 3146e96acad6Smrg if test -z "$4" && test -n "$3"; then 3147e96acad6Smrg func_error "Could not determine the host path corresponding to" 3148cfa76ccdSmrg func_error " '$3'" 3149e96acad6Smrg func_error "Continuing, but uninstalled executables may not work." 3150e96acad6Smrg # Fallback. This is a deliberately simplistic "conversion" and 3151e96acad6Smrg # should not be "improved". See libtool.info. 3152e96acad6Smrg if test "x$1" != "x$2"; then 3153e96acad6Smrg lt_replace_pathsep_chars="s|$1|$2|g" 3154e96acad6Smrg func_to_host_path_result=`echo "$3" | 3155e96acad6Smrg $SED -e "$lt_replace_pathsep_chars"` 3156e96acad6Smrg else 3157cfa76ccdSmrg func_to_host_path_result=$3 3158e96acad6Smrg fi 3159e96acad6Smrg fi 3160e96acad6Smrg} 3161e96acad6Smrg# end func_convert_path_check 3162dbbd9e4bSmacallan 3163dbbd9e4bSmacallan 3164e96acad6Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3165e96acad6Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3166e96acad6Smrg# and appending REPL if ORIG matches BACKPAT. 3167e96acad6Smrgfunc_convert_path_front_back_pathsep () 3168e96acad6Smrg{ 3169cfa76ccdSmrg $debug_cmd 3170cfa76ccdSmrg 3171e96acad6Smrg case $4 in 3172cfa76ccdSmrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 3173e96acad6Smrg ;; 3174e96acad6Smrg esac 3175e96acad6Smrg case $4 in 3176e96acad6Smrg $2 ) func_append func_to_host_path_result "$3" 3177e96acad6Smrg ;; 3178e96acad6Smrg esac 3179e96acad6Smrg} 3180e96acad6Smrg# end func_convert_path_front_back_pathsep 3181dbbd9e4bSmacallan 3182dbbd9e4bSmacallan 3183e96acad6Smrg################################################## 3184e96acad6Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 3185e96acad6Smrg################################################## 3186cfa76ccdSmrg# invoked via '$to_host_file_cmd ARG' 3187e96acad6Smrg# 3188e96acad6Smrg# In each case, ARG is the path to be converted from $build to $host format. 3189e96acad6Smrg# Result will be available in $func_to_host_file_result. 3190dbbd9e4bSmacallan 3191dbbd9e4bSmacallan 3192e96acad6Smrg# func_to_host_file ARG 3193e96acad6Smrg# Converts the file name ARG from $build format to $host format. Return result 3194e96acad6Smrg# in func_to_host_file_result. 3195e96acad6Smrgfunc_to_host_file () 3196e96acad6Smrg{ 3197cfa76ccdSmrg $debug_cmd 3198cfa76ccdSmrg 3199e96acad6Smrg $to_host_file_cmd "$1" 3200e96acad6Smrg} 3201e96acad6Smrg# end func_to_host_file 3202dbbd9e4bSmacallan 3203dbbd9e4bSmacallan 3204e96acad6Smrg# func_to_tool_file ARG LAZY 3205e96acad6Smrg# converts the file name ARG from $build format to toolchain format. Return 3206e96acad6Smrg# result in func_to_tool_file_result. If the conversion in use is listed 3207e96acad6Smrg# in (the comma separated) LAZY, no conversion takes place. 3208e96acad6Smrgfunc_to_tool_file () 3209e96acad6Smrg{ 3210cfa76ccdSmrg $debug_cmd 3211cfa76ccdSmrg 3212e96acad6Smrg case ,$2, in 3213e96acad6Smrg *,"$to_tool_file_cmd",*) 3214e96acad6Smrg func_to_tool_file_result=$1 3215e96acad6Smrg ;; 3216e96acad6Smrg *) 3217e96acad6Smrg $to_tool_file_cmd "$1" 3218e96acad6Smrg func_to_tool_file_result=$func_to_host_file_result 3219e96acad6Smrg ;; 3220e96acad6Smrg esac 3221e96acad6Smrg} 3222e96acad6Smrg# end func_to_tool_file 3223dbbd9e4bSmacallan 3224dbbd9e4bSmacallan 3225e96acad6Smrg# func_convert_file_noop ARG 3226e96acad6Smrg# Copy ARG to func_to_host_file_result. 3227e96acad6Smrgfunc_convert_file_noop () 3228e96acad6Smrg{ 3229cfa76ccdSmrg func_to_host_file_result=$1 3230e96acad6Smrg} 3231e96acad6Smrg# end func_convert_file_noop 3232dbbd9e4bSmacallan 3233dbbd9e4bSmacallan 3234e96acad6Smrg# func_convert_file_msys_to_w32 ARG 3235e96acad6Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3236e96acad6Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3237e96acad6Smrg# func_to_host_file_result. 3238e96acad6Smrgfunc_convert_file_msys_to_w32 () 3239e96acad6Smrg{ 3240cfa76ccdSmrg $debug_cmd 3241cfa76ccdSmrg 3242cfa76ccdSmrg func_to_host_file_result=$1 3243e96acad6Smrg if test -n "$1"; then 3244e96acad6Smrg func_convert_core_msys_to_w32 "$1" 3245cfa76ccdSmrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 3246e96acad6Smrg fi 3247e96acad6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3248e96acad6Smrg} 3249e96acad6Smrg# end func_convert_file_msys_to_w32 3250dbbd9e4bSmacallan 3251dbbd9e4bSmacallan 3252e96acad6Smrg# func_convert_file_cygwin_to_w32 ARG 3253e96acad6Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3254e96acad6Smrg# func_to_host_file_result. 3255e96acad6Smrgfunc_convert_file_cygwin_to_w32 () 3256e96acad6Smrg{ 3257cfa76ccdSmrg $debug_cmd 3258cfa76ccdSmrg 3259cfa76ccdSmrg func_to_host_file_result=$1 3260e96acad6Smrg if test -n "$1"; then 3261e96acad6Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3262e96acad6Smrg # LT_CYGPATH in this case. 3263e96acad6Smrg func_to_host_file_result=`cygpath -m "$1"` 3264e96acad6Smrg fi 3265e96acad6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3266e96acad6Smrg} 3267e96acad6Smrg# end func_convert_file_cygwin_to_w32 3268dbbd9e4bSmacallan 3269dbbd9e4bSmacallan 3270e96acad6Smrg# func_convert_file_nix_to_w32 ARG 3271e96acad6Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3272e96acad6Smrg# and a working winepath. Returns result in func_to_host_file_result. 3273e96acad6Smrgfunc_convert_file_nix_to_w32 () 3274e96acad6Smrg{ 3275cfa76ccdSmrg $debug_cmd 3276cfa76ccdSmrg 3277cfa76ccdSmrg func_to_host_file_result=$1 3278e96acad6Smrg if test -n "$1"; then 3279e96acad6Smrg func_convert_core_file_wine_to_w32 "$1" 3280cfa76ccdSmrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3281e96acad6Smrg fi 3282e96acad6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3283e96acad6Smrg} 3284e96acad6Smrg# end func_convert_file_nix_to_w32 3285dbbd9e4bSmacallan 3286dbbd9e4bSmacallan 3287e96acad6Smrg# func_convert_file_msys_to_cygwin ARG 3288e96acad6Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3289e96acad6Smrg# Returns result in func_to_host_file_result. 3290e96acad6Smrgfunc_convert_file_msys_to_cygwin () 3291e96acad6Smrg{ 3292cfa76ccdSmrg $debug_cmd 3293cfa76ccdSmrg 3294cfa76ccdSmrg func_to_host_file_result=$1 3295e96acad6Smrg if test -n "$1"; then 3296e96acad6Smrg func_convert_core_msys_to_w32 "$1" 3297e96acad6Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 3298cfa76ccdSmrg func_to_host_file_result=$func_cygpath_result 3299e96acad6Smrg fi 3300e96acad6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3301e96acad6Smrg} 3302e96acad6Smrg# end func_convert_file_msys_to_cygwin 3303dbbd9e4bSmacallan 3304dbbd9e4bSmacallan 3305e96acad6Smrg# func_convert_file_nix_to_cygwin ARG 3306e96acad6Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3307e96acad6Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3308e96acad6Smrg# in func_to_host_file_result. 3309e96acad6Smrgfunc_convert_file_nix_to_cygwin () 3310e96acad6Smrg{ 3311cfa76ccdSmrg $debug_cmd 3312cfa76ccdSmrg 3313cfa76ccdSmrg func_to_host_file_result=$1 3314e96acad6Smrg if test -n "$1"; then 3315e96acad6Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3316e96acad6Smrg func_convert_core_file_wine_to_w32 "$1" 3317e96acad6Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3318cfa76ccdSmrg func_to_host_file_result=$func_cygpath_result 3319e96acad6Smrg fi 3320e96acad6Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3321e96acad6Smrg} 3322e96acad6Smrg# end func_convert_file_nix_to_cygwin 3323dbbd9e4bSmacallan 3324dbbd9e4bSmacallan 3325e96acad6Smrg############################################# 3326e96acad6Smrg# $build to $host PATH CONVERSION FUNCTIONS # 3327e96acad6Smrg############################################# 3328cfa76ccdSmrg# invoked via '$to_host_path_cmd ARG' 3329e96acad6Smrg# 3330e96acad6Smrg# In each case, ARG is the path to be converted from $build to $host format. 3331e96acad6Smrg# The result will be available in $func_to_host_path_result. 3332e96acad6Smrg# 3333e96acad6Smrg# Path separators are also converted from $build format to $host format. If 3334e96acad6Smrg# ARG begins or ends with a path separator character, it is preserved (but 3335e96acad6Smrg# converted to $host format) on output. 3336e96acad6Smrg# 3337e96acad6Smrg# All path conversion functions are named using the following convention: 3338e96acad6Smrg# file name conversion function : func_convert_file_X_to_Y () 3339e96acad6Smrg# path conversion function : func_convert_path_X_to_Y () 3340e96acad6Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3341e96acad6Smrg# same. If conversion functions are added for new $build/$host combinations, 3342e96acad6Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3343e96acad6Smrg# will break. 3344e96acad6Smrg 3345e96acad6Smrg 3346e96acad6Smrg# func_init_to_host_path_cmd 3347e96acad6Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3348e96acad6Smrg# appropriate value, based on the value of $to_host_file_cmd. 3349e96acad6Smrgto_host_path_cmd= 3350e96acad6Smrgfunc_init_to_host_path_cmd () 3351e96acad6Smrg{ 3352cfa76ccdSmrg $debug_cmd 3353cfa76ccdSmrg 3354e96acad6Smrg if test -z "$to_host_path_cmd"; then 3355e96acad6Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3356cfa76ccdSmrg to_host_path_cmd=func_convert_path_$func_stripname_result 3357e96acad6Smrg fi 3358e96acad6Smrg} 3359dbbd9e4bSmacallan 3360dbbd9e4bSmacallan 3361e96acad6Smrg# func_to_host_path ARG 3362e96acad6Smrg# Converts the path ARG from $build format to $host format. Return result 3363e96acad6Smrg# in func_to_host_path_result. 3364e96acad6Smrgfunc_to_host_path () 3365e96acad6Smrg{ 3366cfa76ccdSmrg $debug_cmd 3367cfa76ccdSmrg 3368e96acad6Smrg func_init_to_host_path_cmd 3369e96acad6Smrg $to_host_path_cmd "$1" 3370e96acad6Smrg} 3371e96acad6Smrg# end func_to_host_path 3372dbbd9e4bSmacallan 3373dbbd9e4bSmacallan 3374e96acad6Smrg# func_convert_path_noop ARG 3375e96acad6Smrg# Copy ARG to func_to_host_path_result. 3376e96acad6Smrgfunc_convert_path_noop () 3377e96acad6Smrg{ 3378cfa76ccdSmrg func_to_host_path_result=$1 3379e96acad6Smrg} 3380e96acad6Smrg# end func_convert_path_noop 3381dbbd9e4bSmacallan 3382dbbd9e4bSmacallan 3383e96acad6Smrg# func_convert_path_msys_to_w32 ARG 3384e96acad6Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3385e96acad6Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3386e96acad6Smrg# func_to_host_path_result. 3387e96acad6Smrgfunc_convert_path_msys_to_w32 () 3388e96acad6Smrg{ 3389cfa76ccdSmrg $debug_cmd 3390cfa76ccdSmrg 3391cfa76ccdSmrg func_to_host_path_result=$1 3392e96acad6Smrg if test -n "$1"; then 3393e96acad6Smrg # Remove leading and trailing path separator characters from ARG. MSYS 3394e96acad6Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3395e96acad6Smrg # and winepath ignores them completely. 3396e96acad6Smrg func_stripname : : "$1" 3397e96acad6Smrg func_to_host_path_tmp1=$func_stripname_result 3398e96acad6Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3399cfa76ccdSmrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3400e96acad6Smrg func_convert_path_check : ";" \ 3401e96acad6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3402e96acad6Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3403e96acad6Smrg fi 3404e96acad6Smrg} 3405e96acad6Smrg# end func_convert_path_msys_to_w32 3406dbbd9e4bSmacallan 3407dbbd9e4bSmacallan 3408e96acad6Smrg# func_convert_path_cygwin_to_w32 ARG 3409e96acad6Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 3410e96acad6Smrg# func_to_host_file_result. 3411e96acad6Smrgfunc_convert_path_cygwin_to_w32 () 3412e96acad6Smrg{ 3413cfa76ccdSmrg $debug_cmd 3414cfa76ccdSmrg 3415cfa76ccdSmrg func_to_host_path_result=$1 3416e96acad6Smrg if test -n "$1"; then 3417e96acad6Smrg # See func_convert_path_msys_to_w32: 3418e96acad6Smrg func_stripname : : "$1" 3419e96acad6Smrg func_to_host_path_tmp1=$func_stripname_result 3420e96acad6Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3421e96acad6Smrg func_convert_path_check : ";" \ 3422e96acad6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3423e96acad6Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3424e96acad6Smrg fi 3425e96acad6Smrg} 3426e96acad6Smrg# end func_convert_path_cygwin_to_w32 3427dbbd9e4bSmacallan 3428dbbd9e4bSmacallan 3429e96acad6Smrg# func_convert_path_nix_to_w32 ARG 3430e96acad6Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3431e96acad6Smrg# a working winepath. Returns result in func_to_host_file_result. 3432e96acad6Smrgfunc_convert_path_nix_to_w32 () 3433e96acad6Smrg{ 3434cfa76ccdSmrg $debug_cmd 3435cfa76ccdSmrg 3436cfa76ccdSmrg func_to_host_path_result=$1 3437e96acad6Smrg if test -n "$1"; then 3438e96acad6Smrg # See func_convert_path_msys_to_w32: 3439e96acad6Smrg func_stripname : : "$1" 3440e96acad6Smrg func_to_host_path_tmp1=$func_stripname_result 3441e96acad6Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3442cfa76ccdSmrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3443e96acad6Smrg func_convert_path_check : ";" \ 3444e96acad6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3445e96acad6Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3446e96acad6Smrg fi 3447e96acad6Smrg} 3448e96acad6Smrg# end func_convert_path_nix_to_w32 3449dbbd9e4bSmacallan 3450dbbd9e4bSmacallan 3451e96acad6Smrg# func_convert_path_msys_to_cygwin ARG 3452e96acad6Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3453e96acad6Smrg# Returns result in func_to_host_file_result. 3454e96acad6Smrgfunc_convert_path_msys_to_cygwin () 3455e96acad6Smrg{ 3456cfa76ccdSmrg $debug_cmd 3457cfa76ccdSmrg 3458cfa76ccdSmrg func_to_host_path_result=$1 3459e96acad6Smrg if test -n "$1"; then 3460e96acad6Smrg # See func_convert_path_msys_to_w32: 3461e96acad6Smrg func_stripname : : "$1" 3462e96acad6Smrg func_to_host_path_tmp1=$func_stripname_result 3463e96acad6Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3464e96acad6Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3465cfa76ccdSmrg func_to_host_path_result=$func_cygpath_result 3466e96acad6Smrg func_convert_path_check : : \ 3467e96acad6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3468e96acad6Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3469e96acad6Smrg fi 3470e96acad6Smrg} 3471e96acad6Smrg# end func_convert_path_msys_to_cygwin 3472dbbd9e4bSmacallan 3473dbbd9e4bSmacallan 3474e96acad6Smrg# func_convert_path_nix_to_cygwin ARG 3475e96acad6Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3476e96acad6Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3477e96acad6Smrg# func_to_host_file_result. 3478e96acad6Smrgfunc_convert_path_nix_to_cygwin () 3479e96acad6Smrg{ 3480cfa76ccdSmrg $debug_cmd 3481cfa76ccdSmrg 3482cfa76ccdSmrg func_to_host_path_result=$1 3483e96acad6Smrg if test -n "$1"; then 3484e96acad6Smrg # Remove leading and trailing path separator characters from 3485e96acad6Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3486e96acad6Smrg # into '.;' and ';.', and winepath ignores them completely. 3487e96acad6Smrg func_stripname : : "$1" 3488e96acad6Smrg func_to_host_path_tmp1=$func_stripname_result 3489e96acad6Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3490e96acad6Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3491cfa76ccdSmrg func_to_host_path_result=$func_cygpath_result 3492e96acad6Smrg func_convert_path_check : : \ 3493e96acad6Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3494e96acad6Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3495e96acad6Smrg fi 3496e96acad6Smrg} 3497e96acad6Smrg# end func_convert_path_nix_to_cygwin 3498dbbd9e4bSmacallan 3499dbbd9e4bSmacallan 3500cfa76ccdSmrg# func_dll_def_p FILE 3501cfa76ccdSmrg# True iff FILE is a Windows DLL '.def' file. 3502cfa76ccdSmrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3503cfa76ccdSmrgfunc_dll_def_p () 3504cfa76ccdSmrg{ 3505cfa76ccdSmrg $debug_cmd 3506cfa76ccdSmrg 3507cfa76ccdSmrg func_dll_def_p_tmp=`$SED -n \ 3508cfa76ccdSmrg -e 's/^[ ]*//' \ 3509cfa76ccdSmrg -e '/^\(;.*\)*$/d' \ 3510cfa76ccdSmrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3511cfa76ccdSmrg -e q \ 3512cfa76ccdSmrg "$1"` 3513cfa76ccdSmrg test DEF = "$func_dll_def_p_tmp" 3514cfa76ccdSmrg} 3515cfa76ccdSmrg 3516cfa76ccdSmrg 3517e96acad6Smrg# func_mode_compile arg... 3518e96acad6Smrgfunc_mode_compile () 3519e96acad6Smrg{ 3520cfa76ccdSmrg $debug_cmd 3521cfa76ccdSmrg 3522e96acad6Smrg # Get the compilation command and the source file. 3523e96acad6Smrg base_compile= 3524cfa76ccdSmrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3525e96acad6Smrg suppress_opt=yes 3526e96acad6Smrg suppress_output= 3527e96acad6Smrg arg_mode=normal 3528e96acad6Smrg libobj= 3529e96acad6Smrg later= 3530e96acad6Smrg pie_flag= 3531e96acad6Smrg 3532e96acad6Smrg for arg 3533e96acad6Smrg do 3534e96acad6Smrg case $arg_mode in 3535e96acad6Smrg arg ) 3536e96acad6Smrg # do not "continue". Instead, add this to base_compile 3537cfa76ccdSmrg lastarg=$arg 3538e96acad6Smrg arg_mode=normal 3539e96acad6Smrg ;; 3540e96acad6Smrg 3541e96acad6Smrg target ) 3542cfa76ccdSmrg libobj=$arg 3543e96acad6Smrg arg_mode=normal 3544e96acad6Smrg continue 3545e96acad6Smrg ;; 3546e96acad6Smrg 3547e96acad6Smrg normal ) 3548e96acad6Smrg # Accept any command-line options. 3549e96acad6Smrg case $arg in 3550e96acad6Smrg -o) 3551e96acad6Smrg test -n "$libobj" && \ 3552cfa76ccdSmrg func_fatal_error "you cannot specify '-o' more than once" 3553e96acad6Smrg arg_mode=target 3554dbbd9e4bSmacallan continue 3555dbbd9e4bSmacallan ;; 3556e96acad6Smrg 3557e96acad6Smrg -pie | -fpie | -fPIE) 3558e96acad6Smrg func_append pie_flag " $arg" 3559dbbd9e4bSmacallan continue 3560dbbd9e4bSmacallan ;; 3561e96acad6Smrg 3562e96acad6Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 3563e96acad6Smrg func_append later " $arg" 3564dbbd9e4bSmacallan continue 3565dbbd9e4bSmacallan ;; 3566e96acad6Smrg 3567e96acad6Smrg -no-suppress) 3568e96acad6Smrg suppress_opt=no 3569dbbd9e4bSmacallan continue 3570dbbd9e4bSmacallan ;; 3571dbbd9e4bSmacallan 3572e96acad6Smrg -Xcompiler) 3573e96acad6Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 3574e96acad6Smrg continue # The current "srcfile" will either be retained or 3575e96acad6Smrg ;; # replaced later. I would guess that would be a bug. 3576dbbd9e4bSmacallan 3577e96acad6Smrg -Wc,*) 3578e96acad6Smrg func_stripname '-Wc,' '' "$arg" 3579e96acad6Smrg args=$func_stripname_result 3580e96acad6Smrg lastarg= 3581cfa76ccdSmrg save_ifs=$IFS; IFS=, 3582e96acad6Smrg for arg in $args; do 3583cfa76ccdSmrg IFS=$save_ifs 3584e96acad6Smrg func_append_quoted lastarg "$arg" 3585e96acad6Smrg done 3586cfa76ccdSmrg IFS=$save_ifs 3587e96acad6Smrg func_stripname ' ' '' "$lastarg" 3588e96acad6Smrg lastarg=$func_stripname_result 3589dbbd9e4bSmacallan 3590e96acad6Smrg # Add the arguments to base_compile. 3591e96acad6Smrg func_append base_compile " $lastarg" 3592e96acad6Smrg continue 3593e96acad6Smrg ;; 3594dbbd9e4bSmacallan 3595e96acad6Smrg *) 3596e96acad6Smrg # Accept the current argument as the source file. 3597e96acad6Smrg # The previous "srcfile" becomes the current argument. 3598e96acad6Smrg # 3599cfa76ccdSmrg lastarg=$srcfile 3600cfa76ccdSmrg srcfile=$arg 3601e96acad6Smrg ;; 3602e96acad6Smrg esac # case $arg 3603dbbd9e4bSmacallan ;; 3604e96acad6Smrg esac # case $arg_mode 3605dbbd9e4bSmacallan 3606e96acad6Smrg # Aesthetically quote the previous argument. 3607e96acad6Smrg func_append_quoted base_compile "$lastarg" 3608e96acad6Smrg done # for arg 3609dbbd9e4bSmacallan 3610e96acad6Smrg case $arg_mode in 3611e96acad6Smrg arg) 3612e96acad6Smrg func_fatal_error "you must specify an argument for -Xcompile" 3613e96acad6Smrg ;; 3614e96acad6Smrg target) 3615cfa76ccdSmrg func_fatal_error "you must specify a target with '-o'" 3616e96acad6Smrg ;; 3617e96acad6Smrg *) 3618e96acad6Smrg # Get the name of the library object. 3619e96acad6Smrg test -z "$libobj" && { 3620e96acad6Smrg func_basename "$srcfile" 3621cfa76ccdSmrg libobj=$func_basename_result 3622e96acad6Smrg } 3623e96acad6Smrg ;; 3624e96acad6Smrg esac 3625dbbd9e4bSmacallan 3626e96acad6Smrg # Recognize several different file suffixes. 3627e96acad6Smrg # If the user specifies -o file.o, it is replaced with file.lo 3628e96acad6Smrg case $libobj in 3629e96acad6Smrg *.[cCFSifmso] | \ 3630e96acad6Smrg *.ada | *.adb | *.ads | *.asm | \ 3631e96acad6Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3632cfa76ccdSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3633e96acad6Smrg func_xform "$libobj" 3634e96acad6Smrg libobj=$func_xform_result 3635e96acad6Smrg ;; 3636e96acad6Smrg esac 3637dbbd9e4bSmacallan 3638e96acad6Smrg case $libobj in 3639e96acad6Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3640e96acad6Smrg *) 3641cfa76ccdSmrg func_fatal_error "cannot determine name of library object from '$libobj'" 3642e96acad6Smrg ;; 3643e96acad6Smrg esac 3644dbbd9e4bSmacallan 3645e96acad6Smrg func_infer_tag $base_compile 3646dbbd9e4bSmacallan 3647e96acad6Smrg for arg in $later; do 3648e96acad6Smrg case $arg in 3649e96acad6Smrg -shared) 3650cfa76ccdSmrg test yes = "$build_libtool_libs" \ 3651cfa76ccdSmrg || func_fatal_configuration "cannot build a shared library" 3652e96acad6Smrg build_old_libs=no 3653dbbd9e4bSmacallan continue 3654dbbd9e4bSmacallan ;; 3655dbbd9e4bSmacallan 3656e96acad6Smrg -static) 3657e96acad6Smrg build_libtool_libs=no 3658e96acad6Smrg build_old_libs=yes 3659dbbd9e4bSmacallan continue 3660dbbd9e4bSmacallan ;; 3661dbbd9e4bSmacallan 3662e96acad6Smrg -prefer-pic) 3663e96acad6Smrg pic_mode=yes 3664dbbd9e4bSmacallan continue 3665dbbd9e4bSmacallan ;; 3666dbbd9e4bSmacallan 3667e96acad6Smrg -prefer-non-pic) 3668e96acad6Smrg pic_mode=no 3669dbbd9e4bSmacallan continue 3670dbbd9e4bSmacallan ;; 3671e96acad6Smrg esac 3672e96acad6Smrg done 3673dbbd9e4bSmacallan 3674cfa76ccdSmrg func_quote_arg pretty "$libobj" 3675cfa76ccdSmrg test "X$libobj" != "X$func_quote_arg_result" \ 3676e96acad6Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3677cfa76ccdSmrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3678e96acad6Smrg func_dirname_and_basename "$obj" "/" "" 3679cfa76ccdSmrg objname=$func_basename_result 3680cfa76ccdSmrg xdir=$func_dirname_result 3681cfa76ccdSmrg lobj=$xdir$objdir/$objname 3682dbbd9e4bSmacallan 3683e96acad6Smrg test -z "$base_compile" && \ 3684e96acad6Smrg func_fatal_help "you must specify a compilation command" 3685dbbd9e4bSmacallan 3686e96acad6Smrg # Delete any leftover library objects. 3687cfa76ccdSmrg if test yes = "$build_old_libs"; then 3688e96acad6Smrg removelist="$obj $lobj $libobj ${libobj}T" 3689e96acad6Smrg else 3690e96acad6Smrg removelist="$lobj $libobj ${libobj}T" 3691e96acad6Smrg fi 3692dbbd9e4bSmacallan 3693e96acad6Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 3694e96acad6Smrg case $host_os in 3695e96acad6Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 3696e96acad6Smrg pic_mode=default 3697e96acad6Smrg ;; 3698e96acad6Smrg esac 3699cfa76ccdSmrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3700e96acad6Smrg # non-PIC code in shared libraries is not supported 3701e96acad6Smrg pic_mode=default 3702e96acad6Smrg fi 3703dbbd9e4bSmacallan 3704e96acad6Smrg # Calculate the filename of the output object if compiler does 3705e96acad6Smrg # not support -o with -c 3706cfa76ccdSmrg if test no = "$compiler_c_o"; then 3707cfa76ccdSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3708cfa76ccdSmrg lockfile=$output_obj.lock 3709e96acad6Smrg else 3710e96acad6Smrg output_obj= 3711e96acad6Smrg need_locks=no 3712e96acad6Smrg lockfile= 3713e96acad6Smrg fi 3714dbbd9e4bSmacallan 3715e96acad6Smrg # Lock this critical section if it is needed 3716e96acad6Smrg # We use this script file to make the link, it avoids creating a new file 3717cfa76ccdSmrg if test yes = "$need_locks"; then 3718e96acad6Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3719e96acad6Smrg func_echo "Waiting for $lockfile to be removed" 3720e96acad6Smrg sleep 2 3721e96acad6Smrg done 3722cfa76ccdSmrg elif test warn = "$need_locks"; then 3723e96acad6Smrg if test -f "$lockfile"; then 3724e96acad6Smrg $ECHO "\ 3725e96acad6Smrg*** ERROR, $lockfile exists and contains: 3726e96acad6Smrg`cat $lockfile 2>/dev/null` 3727dbbd9e4bSmacallan 3728e96acad6SmrgThis indicates that another process is trying to use the same 3729e96acad6Smrgtemporary object file, and libtool could not work around it because 3730cfa76ccdSmrgyour compiler does not support '-c' and '-o' together. If you 3731e96acad6Smrgrepeat this compilation, it may succeed, by chance, but you had better 3732e96acad6Smrgavoid parallel builds (make -j) in this platform, or get a better 3733e96acad6Smrgcompiler." 3734dbbd9e4bSmacallan 3735e96acad6Smrg $opt_dry_run || $RM $removelist 3736e96acad6Smrg exit $EXIT_FAILURE 3737e96acad6Smrg fi 3738e96acad6Smrg func_append removelist " $output_obj" 3739e96acad6Smrg $ECHO "$srcfile" > "$lockfile" 3740e96acad6Smrg fi 3741dbbd9e4bSmacallan 3742e96acad6Smrg $opt_dry_run || $RM $removelist 3743e96acad6Smrg func_append removelist " $lockfile" 3744e96acad6Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3745dbbd9e4bSmacallan 3746e96acad6Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3747e96acad6Smrg srcfile=$func_to_tool_file_result 3748cfa76ccdSmrg func_quote_arg pretty "$srcfile" 3749cfa76ccdSmrg qsrcfile=$func_quote_arg_result 3750dbbd9e4bSmacallan 3751e96acad6Smrg # Only build a PIC object if we are building libtool libraries. 3752cfa76ccdSmrg if test yes = "$build_libtool_libs"; then 3753e96acad6Smrg # Without this assignment, base_compile gets emptied. 3754e96acad6Smrg fbsd_hideous_sh_bug=$base_compile 3755dbbd9e4bSmacallan 3756cfa76ccdSmrg if test no != "$pic_mode"; then 3757e96acad6Smrg command="$base_compile $qsrcfile $pic_flag" 3758e96acad6Smrg else 3759e96acad6Smrg # Don't build PIC code 3760e96acad6Smrg command="$base_compile $qsrcfile" 3761e96acad6Smrg fi 3762dbbd9e4bSmacallan 3763e96acad6Smrg func_mkdir_p "$xdir$objdir" 3764dbbd9e4bSmacallan 3765e96acad6Smrg if test -z "$output_obj"; then 3766e96acad6Smrg # Place PIC objects in $objdir 3767e96acad6Smrg func_append command " -o $lobj" 3768e96acad6Smrg fi 3769dbbd9e4bSmacallan 3770e96acad6Smrg func_show_eval_locale "$command" \ 3771e96acad6Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3772dbbd9e4bSmacallan 3773cfa76ccdSmrg if test warn = "$need_locks" && 3774e96acad6Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3775e96acad6Smrg $ECHO "\ 3776e96acad6Smrg*** ERROR, $lockfile contains: 3777e96acad6Smrg`cat $lockfile 2>/dev/null` 3778dbbd9e4bSmacallan 3779e96acad6Smrgbut it should contain: 3780e96acad6Smrg$srcfile 3781dbbd9e4bSmacallan 3782e96acad6SmrgThis indicates that another process is trying to use the same 3783e96acad6Smrgtemporary object file, and libtool could not work around it because 3784cfa76ccdSmrgyour compiler does not support '-c' and '-o' together. If you 3785e96acad6Smrgrepeat this compilation, it may succeed, by chance, but you had better 3786e96acad6Smrgavoid parallel builds (make -j) in this platform, or get a better 3787e96acad6Smrgcompiler." 3788dbbd9e4bSmacallan 3789e96acad6Smrg $opt_dry_run || $RM $removelist 3790e96acad6Smrg exit $EXIT_FAILURE 3791e96acad6Smrg fi 3792dbbd9e4bSmacallan 3793e96acad6Smrg # Just move the object if needed, then go on to compile the next one 3794e96acad6Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3795e96acad6Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3796e96acad6Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3797e96acad6Smrg fi 3798dbbd9e4bSmacallan 3799e96acad6Smrg # Allow error messages only from the first compilation. 3800cfa76ccdSmrg if test yes = "$suppress_opt"; then 3801e96acad6Smrg suppress_output=' >/dev/null 2>&1' 3802e96acad6Smrg fi 3803e96acad6Smrg fi 3804dbbd9e4bSmacallan 3805e96acad6Smrg # Only build a position-dependent object if we build old libraries. 3806cfa76ccdSmrg if test yes = "$build_old_libs"; then 3807cfa76ccdSmrg if test yes != "$pic_mode"; then 3808e96acad6Smrg # Don't build PIC code 3809e96acad6Smrg command="$base_compile $qsrcfile$pie_flag" 3810e96acad6Smrg else 3811e96acad6Smrg command="$base_compile $qsrcfile $pic_flag" 3812e96acad6Smrg fi 3813cfa76ccdSmrg if test yes = "$compiler_c_o"; then 3814e96acad6Smrg func_append command " -o $obj" 3815e96acad6Smrg fi 3816dbbd9e4bSmacallan 3817e96acad6Smrg # Suppress compiler output if we already did a PIC compilation. 3818e96acad6Smrg func_append command "$suppress_output" 3819e96acad6Smrg func_show_eval_locale "$command" \ 3820e96acad6Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3821dbbd9e4bSmacallan 3822cfa76ccdSmrg if test warn = "$need_locks" && 3823e96acad6Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3824e96acad6Smrg $ECHO "\ 3825e96acad6Smrg*** ERROR, $lockfile contains: 3826e96acad6Smrg`cat $lockfile 2>/dev/null` 3827dbbd9e4bSmacallan 3828e96acad6Smrgbut it should contain: 3829e96acad6Smrg$srcfile 3830dbbd9e4bSmacallan 3831e96acad6SmrgThis indicates that another process is trying to use the same 3832e96acad6Smrgtemporary object file, and libtool could not work around it because 3833cfa76ccdSmrgyour compiler does not support '-c' and '-o' together. If you 3834e96acad6Smrgrepeat this compilation, it may succeed, by chance, but you had better 3835e96acad6Smrgavoid parallel builds (make -j) in this platform, or get a better 3836e96acad6Smrgcompiler." 3837dbbd9e4bSmacallan 3838e96acad6Smrg $opt_dry_run || $RM $removelist 3839e96acad6Smrg exit $EXIT_FAILURE 3840e96acad6Smrg fi 3841dbbd9e4bSmacallan 3842e96acad6Smrg # Just move the object if needed 3843e96acad6Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3844e96acad6Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 3845e96acad6Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3846e96acad6Smrg fi 3847e96acad6Smrg fi 3848dbbd9e4bSmacallan 3849e96acad6Smrg $opt_dry_run || { 3850e96acad6Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3851dbbd9e4bSmacallan 3852e96acad6Smrg # Unlock the critical section if it was locked 3853cfa76ccdSmrg if test no != "$need_locks"; then 3854e96acad6Smrg removelist=$lockfile 3855e96acad6Smrg $RM "$lockfile" 3856e96acad6Smrg fi 3857e96acad6Smrg } 3858dbbd9e4bSmacallan 3859e96acad6Smrg exit $EXIT_SUCCESS 3860e96acad6Smrg} 3861dbbd9e4bSmacallan 3862e96acad6Smrg$opt_help || { 3863cfa76ccdSmrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3864e96acad6Smrg} 3865dbbd9e4bSmacallan 3866e96acad6Smrgfunc_mode_help () 3867e96acad6Smrg{ 3868e96acad6Smrg # We need to display help for each of the modes. 3869e96acad6Smrg case $opt_mode in 3870e96acad6Smrg "") 3871e96acad6Smrg # Generic help is extracted from the usage comments 3872e96acad6Smrg # at the start of this file. 3873e96acad6Smrg func_help 3874e96acad6Smrg ;; 3875dbbd9e4bSmacallan 3876e96acad6Smrg clean) 3877e96acad6Smrg $ECHO \ 3878e96acad6Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3879dbbd9e4bSmacallan 3880e96acad6SmrgRemove files from the build directory. 3881dbbd9e4bSmacallan 3882e96acad6SmrgRM is the name of the program to use to delete files associated with each FILE 3883cfa76ccdSmrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3884e96acad6Smrgto RM. 3885dbbd9e4bSmacallan 3886e96acad6SmrgIf FILE is a libtool library, object or program, all the files associated 3887e96acad6Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3888e96acad6Smrg ;; 3889dbbd9e4bSmacallan 3890e96acad6Smrg compile) 3891e96acad6Smrg $ECHO \ 3892e96acad6Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3893dbbd9e4bSmacallan 3894e96acad6SmrgCompile a source file into a libtool library object. 3895dbbd9e4bSmacallan 3896e96acad6SmrgThis mode accepts the following additional options: 3897dbbd9e4bSmacallan 3898e96acad6Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3899e96acad6Smrg -no-suppress do not suppress compiler output for multiple passes 3900e96acad6Smrg -prefer-pic try to build PIC objects only 3901e96acad6Smrg -prefer-non-pic try to build non-PIC objects only 3902cfa76ccdSmrg -shared do not build a '.o' file suitable for static linking 3903cfa76ccdSmrg -static only build a '.o' file suitable for static linking 3904cfa76ccdSmrg -Wc,FLAG 3905cfa76ccdSmrg -Xcompiler FLAG pass FLAG directly to the compiler 3906dbbd9e4bSmacallan 3907cfa76ccdSmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3908e96acad6Smrgfrom the given SOURCEFILE. 3909dbbd9e4bSmacallan 3910e96acad6SmrgThe output file name is determined by removing the directory component from 3911cfa76ccdSmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 3912cfa76ccdSmrglibrary object suffix, '.lo'." 3913e96acad6Smrg ;; 3914dbbd9e4bSmacallan 3915e96acad6Smrg execute) 3916e96acad6Smrg $ECHO \ 3917e96acad6Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3918dbbd9e4bSmacallan 3919e96acad6SmrgAutomatically set library path, then run a program. 3920dbbd9e4bSmacallan 3921e96acad6SmrgThis mode accepts the following additional options: 3922dbbd9e4bSmacallan 3923e96acad6Smrg -dlopen FILE add the directory containing FILE to the library path 3924dbbd9e4bSmacallan 3925cfa76ccdSmrgThis mode sets the library path environment variable according to '-dlopen' 3926e96acad6Smrgflags. 3927dbbd9e4bSmacallan 3928e96acad6SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 3929e96acad6Smrginto their corresponding uninstalled binary, and any of their required library 3930e96acad6Smrgdirectories are added to the library path. 3931dbbd9e4bSmacallan 3932e96acad6SmrgThen, COMMAND is executed, with ARGS as arguments." 3933e96acad6Smrg ;; 3934dbbd9e4bSmacallan 3935e96acad6Smrg finish) 3936e96acad6Smrg $ECHO \ 3937e96acad6Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3938dbbd9e4bSmacallan 3939e96acad6SmrgComplete the installation of libtool libraries. 3940e96acad6Smrg 3941e96acad6SmrgEach LIBDIR is a directory that contains libtool libraries. 3942e96acad6Smrg 3943e96acad6SmrgThe commands that this mode executes may require superuser privileges. Use 3944cfa76ccdSmrgthe '--dry-run' option if you just want to see what would be executed." 3945e96acad6Smrg ;; 3946e96acad6Smrg 3947e96acad6Smrg install) 3948e96acad6Smrg $ECHO \ 3949e96acad6Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3950e96acad6Smrg 3951e96acad6SmrgInstall executables or libraries. 3952e96acad6Smrg 3953e96acad6SmrgINSTALL-COMMAND is the installation command. The first component should be 3954cfa76ccdSmrgeither the 'install' or 'cp' program. 3955e96acad6Smrg 3956e96acad6SmrgThe following components of INSTALL-COMMAND are treated specially: 3957e96acad6Smrg 3958e96acad6Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3959e96acad6Smrg 3960e96acad6SmrgThe rest of the components are interpreted as arguments to that command (only 3961e96acad6SmrgBSD-compatible install options are recognized)." 3962e96acad6Smrg ;; 3963e96acad6Smrg 3964e96acad6Smrg link) 3965e96acad6Smrg $ECHO \ 3966e96acad6Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3967e96acad6Smrg 3968e96acad6SmrgLink object files or libraries together to form another library, or to 3969e96acad6Smrgcreate an executable program. 3970e96acad6Smrg 3971e96acad6SmrgLINK-COMMAND is a command using the C compiler that you would use to create 3972e96acad6Smrga program from several object files. 3973e96acad6Smrg 3974e96acad6SmrgThe following components of LINK-COMMAND are treated specially: 3975e96acad6Smrg 3976e96acad6Smrg -all-static do not do any dynamic linking at all 3977e96acad6Smrg -avoid-version do not add a version suffix if possible 3978e96acad6Smrg -bindir BINDIR specify path to binaries directory (for systems where 3979e96acad6Smrg libraries must be found in the PATH setting at runtime) 3980cfa76ccdSmrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3981e96acad6Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3982e96acad6Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3983e96acad6Smrg -export-symbols SYMFILE 3984e96acad6Smrg try to export only the symbols listed in SYMFILE 3985e96acad6Smrg -export-symbols-regex REGEX 3986e96acad6Smrg try to export only the symbols matching REGEX 3987e96acad6Smrg -LLIBDIR search LIBDIR for required installed libraries 3988e96acad6Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 3989e96acad6Smrg -module build a library that can dlopened 3990e96acad6Smrg -no-fast-install disable the fast-install mode 3991e96acad6Smrg -no-install link a not-installable executable 3992e96acad6Smrg -no-undefined declare that a library does not refer to external symbols 3993e96acad6Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3994cfa76ccdSmrg -objectlist FILE use a list of object files found in FILE to specify objects 3995cfa76ccdSmrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3996e96acad6Smrg -precious-files-regex REGEX 3997e96acad6Smrg don't remove output files matching REGEX 3998e96acad6Smrg -release RELEASE specify package release information 3999e96acad6Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 4000e96acad6Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 4001e96acad6Smrg -shared only do dynamic linking of libtool libraries 4002e96acad6Smrg -shrext SUFFIX override the standard shared library file extension 4003e96acad6Smrg -static do not do any dynamic linking of uninstalled libtool libraries 4004e96acad6Smrg -static-libtool-libs 4005e96acad6Smrg do not do any dynamic linking of libtool libraries 4006e96acad6Smrg -version-info CURRENT[:REVISION[:AGE]] 4007e96acad6Smrg specify library version info [each variable defaults to 0] 4008e96acad6Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 4009e96acad6Smrg -Wc,FLAG 4010e96acad6Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 4011cfa76ccdSmrg -Wa,FLAG 4012cfa76ccdSmrg -Xassembler FLAG pass linker-specific FLAG directly to the assembler 4013e96acad6Smrg -Wl,FLAG 4014e96acad6Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 4015e96acad6Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 4016e96acad6Smrg 4017cfa76ccdSmrgAll other options (arguments beginning with '-') are ignored. 4018e96acad6Smrg 4019cfa76ccdSmrgEvery other argument is treated as a filename. Files ending in '.la' are 4020e96acad6Smrgtreated as uninstalled libtool libraries, other files are standard or library 4021e96acad6Smrgobject files. 4022e96acad6Smrg 4023cfa76ccdSmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 4024cfa76ccdSmrgonly library objects ('.lo' files) may be specified, and '-rpath' is 4025e96acad6Smrgrequired, except when creating a convenience library. 4026e96acad6Smrg 4027cfa76ccdSmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 4028cfa76ccdSmrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 4029e96acad6Smrg 4030cfa76ccdSmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 4031e96acad6Smrgis created, otherwise an executable program is created." 4032e96acad6Smrg ;; 4033e96acad6Smrg 4034e96acad6Smrg uninstall) 4035e96acad6Smrg $ECHO \ 4036e96acad6Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 4037e96acad6Smrg 4038e96acad6SmrgRemove libraries from an installation directory. 4039e96acad6Smrg 4040e96acad6SmrgRM is the name of the program to use to delete files associated with each FILE 4041cfa76ccdSmrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 4042e96acad6Smrgto RM. 4043e96acad6Smrg 4044e96acad6SmrgIf FILE is a libtool library, all the files associated with it are deleted. 4045e96acad6SmrgOtherwise, only FILE itself is deleted using RM." 4046e96acad6Smrg ;; 4047e96acad6Smrg 4048e96acad6Smrg *) 4049cfa76ccdSmrg func_fatal_help "invalid operation mode '$opt_mode'" 4050e96acad6Smrg ;; 4051dbbd9e4bSmacallan esac 4052dbbd9e4bSmacallan 4053e96acad6Smrg echo 4054cfa76ccdSmrg $ECHO "Try '$progname --help' for more information about other modes." 4055e96acad6Smrg} 4056dbbd9e4bSmacallan 4057e96acad6Smrg# Now that we've collected a possible --mode arg, show help if necessary 4058e96acad6Smrgif $opt_help; then 4059cfa76ccdSmrg if test : = "$opt_help"; then 4060e96acad6Smrg func_mode_help 4061e96acad6Smrg else 4062e96acad6Smrg { 4063e96acad6Smrg func_help noexit 4064e96acad6Smrg for opt_mode in compile link execute install finish uninstall clean; do 4065e96acad6Smrg func_mode_help 4066e96acad6Smrg done 4067cfa76ccdSmrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 4068e96acad6Smrg { 4069e96acad6Smrg func_help noexit 4070e96acad6Smrg for opt_mode in compile link execute install finish uninstall clean; do 4071e96acad6Smrg echo 4072e96acad6Smrg func_mode_help 4073e96acad6Smrg done 4074e96acad6Smrg } | 4075cfa76ccdSmrg $SED '1d 4076e96acad6Smrg /^When reporting/,/^Report/{ 4077e96acad6Smrg H 4078e96acad6Smrg d 4079e96acad6Smrg } 4080e96acad6Smrg $x 4081e96acad6Smrg /information about other modes/d 4082e96acad6Smrg /more detailed .*MODE/d 4083e96acad6Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 4084e96acad6Smrg fi 4085e96acad6Smrg exit $? 4086e96acad6Smrgfi 4087dbbd9e4bSmacallan 4088dbbd9e4bSmacallan 4089e96acad6Smrg# func_mode_execute arg... 4090e96acad6Smrgfunc_mode_execute () 4091e96acad6Smrg{ 4092cfa76ccdSmrg $debug_cmd 4093cfa76ccdSmrg 4094e96acad6Smrg # The first argument is the command name. 4095cfa76ccdSmrg cmd=$nonopt 4096e96acad6Smrg test -z "$cmd" && \ 4097e96acad6Smrg func_fatal_help "you must specify a COMMAND" 4098e96acad6Smrg 4099e96acad6Smrg # Handle -dlopen flags immediately. 4100e96acad6Smrg for file in $opt_dlopen; do 4101e96acad6Smrg test -f "$file" \ 4102cfa76ccdSmrg || func_fatal_help "'$file' is not a file" 4103e96acad6Smrg 4104e96acad6Smrg dir= 4105e96acad6Smrg case $file in 4106e96acad6Smrg *.la) 4107e96acad6Smrg func_resolve_sysroot "$file" 4108e96acad6Smrg file=$func_resolve_sysroot_result 4109e96acad6Smrg 4110e96acad6Smrg # Check to see that this really is a libtool archive. 4111e96acad6Smrg func_lalib_unsafe_p "$file" \ 4112cfa76ccdSmrg || func_fatal_help "'$lib' is not a valid libtool archive" 4113e96acad6Smrg 4114e96acad6Smrg # Read the libtool library. 4115e96acad6Smrg dlname= 4116e96acad6Smrg library_names= 4117e96acad6Smrg func_source "$file" 4118e96acad6Smrg 4119e96acad6Smrg # Skip this library if it cannot be dlopened. 4120e96acad6Smrg if test -z "$dlname"; then 4121e96acad6Smrg # Warn if it was a shared library. 4122e96acad6Smrg test -n "$library_names" && \ 4123cfa76ccdSmrg func_warning "'$file' was not linked with '-export-dynamic'" 4124e96acad6Smrg continue 4125e96acad6Smrg fi 4126e96acad6Smrg 4127e96acad6Smrg func_dirname "$file" "" "." 4128cfa76ccdSmrg dir=$func_dirname_result 4129e96acad6Smrg 4130e96acad6Smrg if test -f "$dir/$objdir/$dlname"; then 4131e96acad6Smrg func_append dir "/$objdir" 4132e96acad6Smrg else 4133e96acad6Smrg if test ! -f "$dir/$dlname"; then 4134cfa76ccdSmrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 4135e96acad6Smrg fi 4136e96acad6Smrg fi 4137dbbd9e4bSmacallan ;; 4138e96acad6Smrg 4139e96acad6Smrg *.lo) 4140e96acad6Smrg # Just add the directory containing the .lo file. 4141e96acad6Smrg func_dirname "$file" "" "." 4142cfa76ccdSmrg dir=$func_dirname_result 4143dbbd9e4bSmacallan ;; 4144e96acad6Smrg 4145e96acad6Smrg *) 4146cfa76ccdSmrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 4147e96acad6Smrg continue 4148dbbd9e4bSmacallan ;; 4149e96acad6Smrg esac 4150e96acad6Smrg 4151e96acad6Smrg # Get the absolute pathname. 4152e96acad6Smrg absdir=`cd "$dir" && pwd` 4153cfa76ccdSmrg test -n "$absdir" && dir=$absdir 4154e96acad6Smrg 4155e96acad6Smrg # Now add the directory to shlibpath_var. 4156e96acad6Smrg if eval "test -z \"\$$shlibpath_var\""; then 4157e96acad6Smrg eval "$shlibpath_var=\"\$dir\"" 4158e96acad6Smrg else 4159e96acad6Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 4160dbbd9e4bSmacallan fi 4161e96acad6Smrg done 4162e96acad6Smrg 4163e96acad6Smrg # This variable tells wrapper scripts just to set shlibpath_var 4164e96acad6Smrg # rather than running their programs. 4165cfa76ccdSmrg libtool_execute_magic=$magic 4166e96acad6Smrg 4167e96acad6Smrg # Check if any of the arguments is a wrapper script. 4168e96acad6Smrg args= 4169e96acad6Smrg for file 4170e96acad6Smrg do 4171e96acad6Smrg case $file in 4172e96acad6Smrg -* | *.la | *.lo ) ;; 4173e96acad6Smrg *) 4174e96acad6Smrg # Do a test to see if this is really a libtool program. 4175e96acad6Smrg if func_ltwrapper_script_p "$file"; then 4176e96acad6Smrg func_source "$file" 4177e96acad6Smrg # Transform arg to wrapped name. 4178cfa76ccdSmrg file=$progdir/$program 4179e96acad6Smrg elif func_ltwrapper_executable_p "$file"; then 4180e96acad6Smrg func_ltwrapper_scriptname "$file" 4181e96acad6Smrg func_source "$func_ltwrapper_scriptname_result" 4182e96acad6Smrg # Transform arg to wrapped name. 4183cfa76ccdSmrg file=$progdir/$program 4184e96acad6Smrg fi 4185e96acad6Smrg ;; 4186e96acad6Smrg esac 4187e96acad6Smrg # Quote arguments (to preserve shell metacharacters). 4188e96acad6Smrg func_append_quoted args "$file" 4189e96acad6Smrg done 4190e96acad6Smrg 4191cfa76ccdSmrg if $opt_dry_run; then 4192cfa76ccdSmrg # Display what would be done. 4193cfa76ccdSmrg if test -n "$shlibpath_var"; then 4194cfa76ccdSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 4195cfa76ccdSmrg echo "export $shlibpath_var" 4196cfa76ccdSmrg fi 4197cfa76ccdSmrg $ECHO "$cmd$args" 4198cfa76ccdSmrg exit $EXIT_SUCCESS 4199cfa76ccdSmrg else 4200e96acad6Smrg if test -n "$shlibpath_var"; then 4201e96acad6Smrg # Export the shlibpath_var. 4202e96acad6Smrg eval "export $shlibpath_var" 4203dbbd9e4bSmacallan fi 4204e96acad6Smrg 4205e96acad6Smrg # Restore saved environment variables 4206e96acad6Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 4207e96acad6Smrg do 4208e96acad6Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 4209e96acad6Smrg $lt_var=\$save_$lt_var; export $lt_var 4210e96acad6Smrg else 4211e96acad6Smrg $lt_unset $lt_var 4212e96acad6Smrg fi" 4213e96acad6Smrg done 4214e96acad6Smrg 4215e96acad6Smrg # Now prepare to actually exec the command. 4216cfa76ccdSmrg exec_cmd=\$cmd$args 4217e96acad6Smrg fi 4218e96acad6Smrg} 4219dbbd9e4bSmacallan 4220cfa76ccdSmrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 4221dbbd9e4bSmacallan 4222dbbd9e4bSmacallan 4223e96acad6Smrg# func_mode_finish arg... 4224e96acad6Smrgfunc_mode_finish () 4225e96acad6Smrg{ 4226cfa76ccdSmrg $debug_cmd 4227cfa76ccdSmrg 4228e96acad6Smrg libs= 4229e96acad6Smrg libdirs= 4230e96acad6Smrg admincmds= 4231dbbd9e4bSmacallan 4232e96acad6Smrg for opt in "$nonopt" ${1+"$@"} 4233e96acad6Smrg do 4234e96acad6Smrg if test -d "$opt"; then 4235e96acad6Smrg func_append libdirs " $opt" 4236dbbd9e4bSmacallan 4237e96acad6Smrg elif test -f "$opt"; then 4238e96acad6Smrg if func_lalib_unsafe_p "$opt"; then 4239e96acad6Smrg func_append libs " $opt" 4240e96acad6Smrg else 4241cfa76ccdSmrg func_warning "'$opt' is not a valid libtool archive" 4242dbbd9e4bSmacallan fi 4243dbbd9e4bSmacallan 4244e96acad6Smrg else 4245cfa76ccdSmrg func_fatal_error "invalid argument '$opt'" 4246e96acad6Smrg fi 4247e96acad6Smrg done 4248dbbd9e4bSmacallan 4249e96acad6Smrg if test -n "$libs"; then 4250e96acad6Smrg if test -n "$lt_sysroot"; then 4251e96acad6Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4252e96acad6Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4253e96acad6Smrg else 4254e96acad6Smrg sysroot_cmd= 4255e96acad6Smrg fi 4256dbbd9e4bSmacallan 4257e96acad6Smrg # Remove sysroot references 4258e96acad6Smrg if $opt_dry_run; then 4259e96acad6Smrg for lib in $libs; do 4260cfa76ccdSmrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4261e96acad6Smrg done 4262e96acad6Smrg else 4263e96acad6Smrg tmpdir=`func_mktempdir` 4264e96acad6Smrg for lib in $libs; do 4265cfa76ccdSmrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4266e96acad6Smrg > $tmpdir/tmp-la 4267e96acad6Smrg mv -f $tmpdir/tmp-la $lib 4268dbbd9e4bSmacallan done 4269e96acad6Smrg ${RM}r "$tmpdir" 4270e96acad6Smrg fi 4271e96acad6Smrg fi 4272e96acad6Smrg 4273e96acad6Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4274e96acad6Smrg for libdir in $libdirs; do 4275e96acad6Smrg if test -n "$finish_cmds"; then 4276e96acad6Smrg # Do each command in the finish commands. 4277e96acad6Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4278e96acad6Smrg'"$cmd"'"' 4279dbbd9e4bSmacallan fi 4280e96acad6Smrg if test -n "$finish_eval"; then 4281e96acad6Smrg # Do the single finish_eval. 4282e96acad6Smrg eval cmds=\"$finish_eval\" 4283e96acad6Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4284e96acad6Smrg $cmds" 4285e96acad6Smrg fi 4286e96acad6Smrg done 4287e96acad6Smrg fi 4288dbbd9e4bSmacallan 4289e96acad6Smrg # Exit here if they wanted silent mode. 4290cfa76ccdSmrg $opt_quiet && exit $EXIT_SUCCESS 4291dbbd9e4bSmacallan 4292e96acad6Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4293e96acad6Smrg echo "----------------------------------------------------------------------" 4294e96acad6Smrg echo "Libraries have been installed in:" 4295e96acad6Smrg for libdir in $libdirs; do 4296e96acad6Smrg $ECHO " $libdir" 4297e96acad6Smrg done 4298e96acad6Smrg echo 4299e96acad6Smrg echo "If you ever happen to want to link against installed libraries" 4300e96acad6Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 4301cfa76ccdSmrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4302e96acad6Smrg echo "flag during linking and do at least one of the following:" 4303e96acad6Smrg if test -n "$shlibpath_var"; then 4304cfa76ccdSmrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4305e96acad6Smrg echo " during execution" 4306e96acad6Smrg fi 4307e96acad6Smrg if test -n "$runpath_var"; then 4308cfa76ccdSmrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4309e96acad6Smrg echo " during linking" 4310e96acad6Smrg fi 4311e96acad6Smrg if test -n "$hardcode_libdir_flag_spec"; then 4312e96acad6Smrg libdir=LIBDIR 4313e96acad6Smrg eval flag=\"$hardcode_libdir_flag_spec\" 4314e96acad6Smrg 4315cfa76ccdSmrg $ECHO " - use the '$flag' linker flag" 4316e96acad6Smrg fi 4317e96acad6Smrg if test -n "$admincmds"; then 4318e96acad6Smrg $ECHO " - have your system administrator run these commands:$admincmds" 4319e96acad6Smrg fi 4320e96acad6Smrg if test -f /etc/ld.so.conf; then 4321cfa76ccdSmrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4322e96acad6Smrg fi 4323e96acad6Smrg echo 4324e96acad6Smrg 4325e96acad6Smrg echo "See any operating system documentation about shared libraries for" 4326e96acad6Smrg case $host in 4327e96acad6Smrg solaris2.[6789]|solaris2.1[0-9]) 4328e96acad6Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4329e96acad6Smrg echo "pages." 4330e96acad6Smrg ;; 4331dbbd9e4bSmacallan *) 4332e96acad6Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4333dbbd9e4bSmacallan ;; 4334e96acad6Smrg esac 4335e96acad6Smrg echo "----------------------------------------------------------------------" 4336e96acad6Smrg fi 4337e96acad6Smrg exit $EXIT_SUCCESS 4338e96acad6Smrg} 4339dbbd9e4bSmacallan 4340cfa76ccdSmrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4341dbbd9e4bSmacallan 4342e96acad6Smrg 4343e96acad6Smrg# func_mode_install arg... 4344e96acad6Smrgfunc_mode_install () 4345e96acad6Smrg{ 4346cfa76ccdSmrg $debug_cmd 4347cfa76ccdSmrg 4348e96acad6Smrg # There may be an optional sh(1) argument at the beginning of 4349e96acad6Smrg # install_prog (especially on Windows NT). 4350cfa76ccdSmrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4351e96acad6Smrg # Allow the use of GNU shtool's install command. 4352cfa76ccdSmrg case $nonopt in *shtool*) :;; *) false;; esac 4353cfa76ccdSmrg then 4354e96acad6Smrg # Aesthetically quote it. 4355cfa76ccdSmrg func_quote_arg pretty "$nonopt" 4356cfa76ccdSmrg install_prog="$func_quote_arg_result " 4357e96acad6Smrg arg=$1 4358e96acad6Smrg shift 4359e96acad6Smrg else 4360e96acad6Smrg install_prog= 4361e96acad6Smrg arg=$nonopt 4362e96acad6Smrg fi 4363e96acad6Smrg 4364e96acad6Smrg # The real first argument should be the name of the installation program. 4365e96acad6Smrg # Aesthetically quote it. 4366cfa76ccdSmrg func_quote_arg pretty "$arg" 4367cfa76ccdSmrg func_append install_prog "$func_quote_arg_result" 4368e96acad6Smrg install_shared_prog=$install_prog 4369e96acad6Smrg case " $install_prog " in 4370e96acad6Smrg *[\\\ /]cp\ *) install_cp=: ;; 4371e96acad6Smrg *) install_cp=false ;; 4372e96acad6Smrg esac 4373e96acad6Smrg 4374e96acad6Smrg # We need to accept at least all the BSD install flags. 4375e96acad6Smrg dest= 4376e96acad6Smrg files= 4377e96acad6Smrg opts= 4378e96acad6Smrg prev= 4379e96acad6Smrg install_type= 4380cfa76ccdSmrg isdir=false 4381e96acad6Smrg stripme= 4382e96acad6Smrg no_mode=: 4383e96acad6Smrg for arg 4384e96acad6Smrg do 4385e96acad6Smrg arg2= 4386e96acad6Smrg if test -n "$dest"; then 4387e96acad6Smrg func_append files " $dest" 4388e96acad6Smrg dest=$arg 4389e96acad6Smrg continue 4390e96acad6Smrg fi 4391e96acad6Smrg 4392e96acad6Smrg case $arg in 4393cfa76ccdSmrg -d) isdir=: ;; 4394e96acad6Smrg -f) 4395e96acad6Smrg if $install_cp; then :; else 4396e96acad6Smrg prev=$arg 4397e96acad6Smrg fi 4398e96acad6Smrg ;; 4399e96acad6Smrg -g | -m | -o) 4400e96acad6Smrg prev=$arg 4401e96acad6Smrg ;; 4402e96acad6Smrg -s) 4403e96acad6Smrg stripme=" -s" 4404e96acad6Smrg continue 4405e96acad6Smrg ;; 4406e96acad6Smrg -*) 4407e96acad6Smrg ;; 4408e96acad6Smrg *) 4409e96acad6Smrg # If the previous option needed an argument, then skip it. 4410e96acad6Smrg if test -n "$prev"; then 4411cfa76ccdSmrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 4412e96acad6Smrg arg2=$install_override_mode 4413e96acad6Smrg no_mode=false 4414dbbd9e4bSmacallan fi 4415e96acad6Smrg prev= 4416e96acad6Smrg else 4417e96acad6Smrg dest=$arg 4418dbbd9e4bSmacallan continue 4419dbbd9e4bSmacallan fi 4420e96acad6Smrg ;; 4421e96acad6Smrg esac 4422dbbd9e4bSmacallan 4423e96acad6Smrg # Aesthetically quote the argument. 4424cfa76ccdSmrg func_quote_arg pretty "$arg" 4425cfa76ccdSmrg func_append install_prog " $func_quote_arg_result" 4426e96acad6Smrg if test -n "$arg2"; then 4427cfa76ccdSmrg func_quote_arg pretty "$arg2" 4428e96acad6Smrg fi 4429cfa76ccdSmrg func_append install_shared_prog " $func_quote_arg_result" 4430e96acad6Smrg done 4431dbbd9e4bSmacallan 4432e96acad6Smrg test -z "$install_prog" && \ 4433e96acad6Smrg func_fatal_help "you must specify an install program" 4434dbbd9e4bSmacallan 4435e96acad6Smrg test -n "$prev" && \ 4436cfa76ccdSmrg func_fatal_help "the '$prev' option requires an argument" 4437dbbd9e4bSmacallan 4438e96acad6Smrg if test -n "$install_override_mode" && $no_mode; then 4439e96acad6Smrg if $install_cp; then :; else 4440cfa76ccdSmrg func_quote_arg pretty "$install_override_mode" 4441cfa76ccdSmrg func_append install_shared_prog " -m $func_quote_arg_result" 4442e96acad6Smrg fi 4443e96acad6Smrg fi 4444dbbd9e4bSmacallan 4445e96acad6Smrg if test -z "$files"; then 4446e96acad6Smrg if test -z "$dest"; then 4447e96acad6Smrg func_fatal_help "no file or destination specified" 4448e96acad6Smrg else 4449e96acad6Smrg func_fatal_help "you must specify a destination" 4450e96acad6Smrg fi 4451e96acad6Smrg fi 4452dbbd9e4bSmacallan 4453e96acad6Smrg # Strip any trailing slash from the destination. 4454e96acad6Smrg func_stripname '' '/' "$dest" 4455e96acad6Smrg dest=$func_stripname_result 4456dbbd9e4bSmacallan 4457e96acad6Smrg # Check to see that the destination is a directory. 4458cfa76ccdSmrg test -d "$dest" && isdir=: 4459cfa76ccdSmrg if $isdir; then 4460cfa76ccdSmrg destdir=$dest 4461e96acad6Smrg destname= 4462e96acad6Smrg else 4463e96acad6Smrg func_dirname_and_basename "$dest" "" "." 4464cfa76ccdSmrg destdir=$func_dirname_result 4465cfa76ccdSmrg destname=$func_basename_result 4466dbbd9e4bSmacallan 4467e96acad6Smrg # Not a directory, so check to see that there is only one file specified. 4468e96acad6Smrg set dummy $files; shift 4469e96acad6Smrg test "$#" -gt 1 && \ 4470cfa76ccdSmrg func_fatal_help "'$dest' is not a directory" 4471e96acad6Smrg fi 4472e96acad6Smrg case $destdir in 4473e96acad6Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4474e96acad6Smrg *) 4475e96acad6Smrg for file in $files; do 4476e96acad6Smrg case $file in 4477e96acad6Smrg *.lo) ;; 4478e96acad6Smrg *) 4479cfa76ccdSmrg func_fatal_help "'$destdir' must be an absolute directory name" 4480e96acad6Smrg ;; 4481e96acad6Smrg esac 4482e96acad6Smrg done 4483e96acad6Smrg ;; 4484e96acad6Smrg esac 4485dbbd9e4bSmacallan 4486e96acad6Smrg # This variable tells wrapper scripts just to set variables rather 4487e96acad6Smrg # than running their programs. 4488cfa76ccdSmrg libtool_install_magic=$magic 4489dbbd9e4bSmacallan 4490e96acad6Smrg staticlibs= 4491e96acad6Smrg future_libdirs= 4492e96acad6Smrg current_libdirs= 4493e96acad6Smrg for file in $files; do 4494dbbd9e4bSmacallan 4495e96acad6Smrg # Do each installation. 4496e96acad6Smrg case $file in 4497e96acad6Smrg *.$libext) 4498e96acad6Smrg # Do the static libraries later. 4499e96acad6Smrg func_append staticlibs " $file" 4500e96acad6Smrg ;; 4501dbbd9e4bSmacallan 4502e96acad6Smrg *.la) 4503e96acad6Smrg func_resolve_sysroot "$file" 4504e96acad6Smrg file=$func_resolve_sysroot_result 4505dbbd9e4bSmacallan 4506e96acad6Smrg # Check to see that this really is a libtool archive. 4507e96acad6Smrg func_lalib_unsafe_p "$file" \ 4508cfa76ccdSmrg || func_fatal_help "'$file' is not a valid libtool archive" 4509dbbd9e4bSmacallan 4510e96acad6Smrg library_names= 4511e96acad6Smrg old_library= 4512e96acad6Smrg relink_command= 4513e96acad6Smrg func_source "$file" 4514dbbd9e4bSmacallan 4515e96acad6Smrg # Add the libdir to current_libdirs if it is the destination. 4516e96acad6Smrg if test "X$destdir" = "X$libdir"; then 4517e96acad6Smrg case "$current_libdirs " in 4518e96acad6Smrg *" $libdir "*) ;; 4519e96acad6Smrg *) func_append current_libdirs " $libdir" ;; 4520e96acad6Smrg esac 4521e96acad6Smrg else 4522e96acad6Smrg # Note the libdir as a future libdir. 4523e96acad6Smrg case "$future_libdirs " in 4524e96acad6Smrg *" $libdir "*) ;; 4525e96acad6Smrg *) func_append future_libdirs " $libdir" ;; 4526e96acad6Smrg esac 4527e96acad6Smrg fi 4528dbbd9e4bSmacallan 4529e96acad6Smrg func_dirname "$file" "/" "" 4530cfa76ccdSmrg dir=$func_dirname_result 4531e96acad6Smrg func_append dir "$objdir" 4532dbbd9e4bSmacallan 4533e96acad6Smrg if test -n "$relink_command"; then 4534e96acad6Smrg # Determine the prefix the user has applied to our future dir. 4535e96acad6Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4536dbbd9e4bSmacallan 4537e96acad6Smrg # Don't allow the user to place us outside of our expected 4538e96acad6Smrg # location b/c this prevents finding dependent libraries that 4539e96acad6Smrg # are installed to the same prefix. 4540e96acad6Smrg # At present, this check doesn't affect windows .dll's that 4541e96acad6Smrg # are installed into $libdir/../bin (currently, that works fine) 4542e96acad6Smrg # but it's something to keep an eye on. 4543e96acad6Smrg test "$inst_prefix_dir" = "$destdir" && \ 4544cfa76ccdSmrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4545e96acad6Smrg 4546e96acad6Smrg if test -n "$inst_prefix_dir"; then 4547e96acad6Smrg # Stick the inst_prefix_dir data into the link command. 4548e96acad6Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4549dbbd9e4bSmacallan else 4550e96acad6Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4551dbbd9e4bSmacallan fi 4552dbbd9e4bSmacallan 4553cfa76ccdSmrg func_warning "relinking '$file'" 4554e96acad6Smrg func_show_eval "$relink_command" \ 4555cfa76ccdSmrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4556e96acad6Smrg fi 4557e96acad6Smrg 4558e96acad6Smrg # See the names of the shared library. 4559e96acad6Smrg set dummy $library_names; shift 4560e96acad6Smrg if test -n "$1"; then 4561cfa76ccdSmrg realname=$1 4562e96acad6Smrg shift 4563e96acad6Smrg 4564cfa76ccdSmrg srcname=$realname 4565cfa76ccdSmrg test -n "$relink_command" && srcname=${realname}T 4566e96acad6Smrg 4567e96acad6Smrg # Install the shared library and build the symlinks. 4568e96acad6Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4569e96acad6Smrg 'exit $?' 4570cfa76ccdSmrg tstripme=$stripme 4571e96acad6Smrg case $host_os in 4572e96acad6Smrg cygwin* | mingw* | pw32* | cegcc*) 4573e96acad6Smrg case $realname in 4574e96acad6Smrg *.dll.a) 4575cfa76ccdSmrg tstripme= 4576cfa76ccdSmrg ;; 4577cfa76ccdSmrg esac 4578cfa76ccdSmrg ;; 4579cfa76ccdSmrg os2*) 4580cfa76ccdSmrg case $realname in 4581cfa76ccdSmrg *_dll.a) 4582cfa76ccdSmrg tstripme= 4583e96acad6Smrg ;; 4584e96acad6Smrg esac 4585e96acad6Smrg ;; 4586e96acad6Smrg esac 4587e96acad6Smrg if test -n "$tstripme" && test -n "$striplib"; then 4588e96acad6Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 4589dbbd9e4bSmacallan fi 4590dbbd9e4bSmacallan 4591e96acad6Smrg if test "$#" -gt 0; then 4592e96acad6Smrg # Delete the old symlinks, and create new ones. 4593cfa76ccdSmrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4594e96acad6Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4595e96acad6Smrg # so we also need to try rm && ln -s. 4596e96acad6Smrg for linkname 4597e96acad6Smrg do 4598e96acad6Smrg test "$linkname" != "$realname" \ 4599e96acad6Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4600dbbd9e4bSmacallan done 4601dbbd9e4bSmacallan fi 4602dbbd9e4bSmacallan 4603e96acad6Smrg # Do each command in the postinstall commands. 4604cfa76ccdSmrg lib=$destdir/$realname 4605e96acad6Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 4606e96acad6Smrg fi 4607dbbd9e4bSmacallan 4608e96acad6Smrg # Install the pseudo-library for information purposes. 4609e96acad6Smrg func_basename "$file" 4610cfa76ccdSmrg name=$func_basename_result 4611cfa76ccdSmrg instname=$dir/${name}i 4612e96acad6Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4613dbbd9e4bSmacallan 4614e96acad6Smrg # Maybe install the static library, too. 4615e96acad6Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4616e96acad6Smrg ;; 4617e96acad6Smrg 4618e96acad6Smrg *.lo) 4619e96acad6Smrg # Install (i.e. copy) a libtool object. 4620e96acad6Smrg 4621e96acad6Smrg # Figure out destination file name, if it wasn't already specified. 4622e96acad6Smrg if test -n "$destname"; then 4623cfa76ccdSmrg destfile=$destdir/$destname 4624dbbd9e4bSmacallan else 4625e96acad6Smrg func_basename "$file" 4626cfa76ccdSmrg destfile=$func_basename_result 4627cfa76ccdSmrg destfile=$destdir/$destfile 4628dbbd9e4bSmacallan fi 4629e96acad6Smrg 4630e96acad6Smrg # Deduce the name of the destination old-style object file. 4631e96acad6Smrg case $destfile in 4632e96acad6Smrg *.lo) 4633e96acad6Smrg func_lo2o "$destfile" 4634e96acad6Smrg staticdest=$func_lo2o_result 4635e96acad6Smrg ;; 4636e96acad6Smrg *.$objext) 4637cfa76ccdSmrg staticdest=$destfile 4638e96acad6Smrg destfile= 4639e96acad6Smrg ;; 4640e96acad6Smrg *) 4641cfa76ccdSmrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4642dbbd9e4bSmacallan ;; 4643dbbd9e4bSmacallan esac 4644dbbd9e4bSmacallan 4645e96acad6Smrg # Install the libtool object if requested. 4646e96acad6Smrg test -n "$destfile" && \ 4647e96acad6Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4648dbbd9e4bSmacallan 4649e96acad6Smrg # Install the old object if enabled. 4650cfa76ccdSmrg if test yes = "$build_old_libs"; then 4651e96acad6Smrg # Deduce the name of the old-style object file. 4652e96acad6Smrg func_lo2o "$file" 4653e96acad6Smrg staticobj=$func_lo2o_result 4654e96acad6Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4655e96acad6Smrg fi 4656e96acad6Smrg exit $EXIT_SUCCESS 4657e96acad6Smrg ;; 4658dbbd9e4bSmacallan 4659e96acad6Smrg *) 4660e96acad6Smrg # Figure out destination file name, if it wasn't already specified. 4661e96acad6Smrg if test -n "$destname"; then 4662cfa76ccdSmrg destfile=$destdir/$destname 4663e96acad6Smrg else 4664e96acad6Smrg func_basename "$file" 4665cfa76ccdSmrg destfile=$func_basename_result 4666cfa76ccdSmrg destfile=$destdir/$destfile 4667e96acad6Smrg fi 4668dbbd9e4bSmacallan 4669e96acad6Smrg # If the file is missing, and there is a .exe on the end, strip it 4670e96acad6Smrg # because it is most likely a libtool script we actually want to 4671e96acad6Smrg # install 4672cfa76ccdSmrg stripped_ext= 4673e96acad6Smrg case $file in 4674e96acad6Smrg *.exe) 4675e96acad6Smrg if test ! -f "$file"; then 4676e96acad6Smrg func_stripname '' '.exe' "$file" 4677e96acad6Smrg file=$func_stripname_result 4678cfa76ccdSmrg stripped_ext=.exe 4679e96acad6Smrg fi 4680e96acad6Smrg ;; 4681e96acad6Smrg esac 4682dbbd9e4bSmacallan 4683e96acad6Smrg # Do a test to see if this is really a libtool program. 4684e96acad6Smrg case $host in 4685e96acad6Smrg *cygwin* | *mingw*) 4686e96acad6Smrg if func_ltwrapper_executable_p "$file"; then 4687e96acad6Smrg func_ltwrapper_scriptname "$file" 4688e96acad6Smrg wrapper=$func_ltwrapper_scriptname_result 4689e96acad6Smrg else 4690e96acad6Smrg func_stripname '' '.exe' "$file" 4691e96acad6Smrg wrapper=$func_stripname_result 4692e96acad6Smrg fi 4693e96acad6Smrg ;; 4694e96acad6Smrg *) 4695e96acad6Smrg wrapper=$file 4696e96acad6Smrg ;; 4697e96acad6Smrg esac 4698e96acad6Smrg if func_ltwrapper_script_p "$wrapper"; then 4699e96acad6Smrg notinst_deplibs= 4700e96acad6Smrg relink_command= 4701dbbd9e4bSmacallan 4702e96acad6Smrg func_source "$wrapper" 4703dbbd9e4bSmacallan 4704e96acad6Smrg # Check the variables that should have been set. 4705e96acad6Smrg test -z "$generated_by_libtool_version" && \ 4706cfa76ccdSmrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4707dbbd9e4bSmacallan 4708cfa76ccdSmrg finalize=: 4709e96acad6Smrg for lib in $notinst_deplibs; do 4710e96acad6Smrg # Check to see that each library is installed. 4711e96acad6Smrg libdir= 4712e96acad6Smrg if test -f "$lib"; then 4713e96acad6Smrg func_source "$lib" 4714e96acad6Smrg fi 4715cfa76ccdSmrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4716e96acad6Smrg if test -n "$libdir" && test ! -f "$libfile"; then 4717cfa76ccdSmrg func_warning "'$lib' has not been installed in '$libdir'" 4718cfa76ccdSmrg finalize=false 4719e96acad6Smrg fi 4720e96acad6Smrg done 4721dbbd9e4bSmacallan 4722e96acad6Smrg relink_command= 4723e96acad6Smrg func_source "$wrapper" 4724e96acad6Smrg 4725e96acad6Smrg outputname= 4726cfa76ccdSmrg if test no = "$fast_install" && test -n "$relink_command"; then 4727e96acad6Smrg $opt_dry_run || { 4728cfa76ccdSmrg if $finalize; then 4729e96acad6Smrg tmpdir=`func_mktempdir` 4730e96acad6Smrg func_basename "$file$stripped_ext" 4731cfa76ccdSmrg file=$func_basename_result 4732cfa76ccdSmrg outputname=$tmpdir/$file 4733e96acad6Smrg # Replace the output file specification. 4734e96acad6Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4735e96acad6Smrg 4736cfa76ccdSmrg $opt_quiet || { 4737cfa76ccdSmrg func_quote_arg expand,pretty "$relink_command" 4738cfa76ccdSmrg eval "func_echo $func_quote_arg_result" 4739e96acad6Smrg } 4740e96acad6Smrg if eval "$relink_command"; then : 4741e96acad6Smrg else 4742cfa76ccdSmrg func_error "error: relink '$file' with the above command before installing it" 4743e96acad6Smrg $opt_dry_run || ${RM}r "$tmpdir" 4744e96acad6Smrg continue 4745e96acad6Smrg fi 4746cfa76ccdSmrg file=$outputname 4747e96acad6Smrg else 4748cfa76ccdSmrg func_warning "cannot relink '$file'" 4749e96acad6Smrg fi 4750e96acad6Smrg } 4751e96acad6Smrg else 4752e96acad6Smrg # Install the binary that we compiled earlier. 4753e96acad6Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4754e96acad6Smrg fi 4755dbbd9e4bSmacallan fi 4756e96acad6Smrg 4757e96acad6Smrg # remove .exe since cygwin /usr/bin/install will append another 4758e96acad6Smrg # one anyway 4759e96acad6Smrg case $install_prog,$host in 4760e96acad6Smrg */usr/bin/install*,*cygwin*) 4761e96acad6Smrg case $file:$destfile in 4762e96acad6Smrg *.exe:*.exe) 4763e96acad6Smrg # this is ok 4764e96acad6Smrg ;; 4765e96acad6Smrg *.exe:*) 4766e96acad6Smrg destfile=$destfile.exe 4767e96acad6Smrg ;; 4768e96acad6Smrg *:*.exe) 4769e96acad6Smrg func_stripname '' '.exe' "$destfile" 4770e96acad6Smrg destfile=$func_stripname_result 4771e96acad6Smrg ;; 4772e96acad6Smrg esac 4773e96acad6Smrg ;; 4774e96acad6Smrg esac 4775e96acad6Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4776e96acad6Smrg $opt_dry_run || if test -n "$outputname"; then 4777e96acad6Smrg ${RM}r "$tmpdir" 4778dbbd9e4bSmacallan fi 4779dbbd9e4bSmacallan ;; 4780dbbd9e4bSmacallan esac 4781e96acad6Smrg done 4782dbbd9e4bSmacallan 4783e96acad6Smrg for file in $staticlibs; do 4784e96acad6Smrg func_basename "$file" 4785cfa76ccdSmrg name=$func_basename_result 4786dbbd9e4bSmacallan 4787e96acad6Smrg # Set up the ranlib parameters. 4788cfa76ccdSmrg oldlib=$destdir/$name 4789cfa76ccdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4790cfa76ccdSmrg tool_oldlib=$func_to_tool_file_result 4791dbbd9e4bSmacallan 4792e96acad6Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4793e96acad6Smrg 4794e96acad6Smrg if test -n "$stripme" && test -n "$old_striplib"; then 4795cfa76ccdSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4796dbbd9e4bSmacallan fi 4797dbbd9e4bSmacallan 4798e96acad6Smrg # Do each command in the postinstall commands. 4799e96acad6Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4800e96acad6Smrg done 4801dbbd9e4bSmacallan 4802e96acad6Smrg test -n "$future_libdirs" && \ 4803cfa76ccdSmrg func_warning "remember to run '$progname --finish$future_libdirs'" 4804dbbd9e4bSmacallan 4805e96acad6Smrg if test -n "$current_libdirs"; then 4806e96acad6Smrg # Maybe just do a dry run. 4807e96acad6Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 4808cfa76ccdSmrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4809e96acad6Smrg else 4810e96acad6Smrg exit $EXIT_SUCCESS 4811e96acad6Smrg fi 4812e96acad6Smrg} 4813dbbd9e4bSmacallan 4814cfa76ccdSmrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 4815dbbd9e4bSmacallan 4816dbbd9e4bSmacallan 4817e96acad6Smrg# func_generate_dlsyms outputname originator pic_p 4818e96acad6Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4819e96acad6Smrg# a dlpreopen symbol table. 4820e96acad6Smrgfunc_generate_dlsyms () 4821e96acad6Smrg{ 4822cfa76ccdSmrg $debug_cmd 4823cfa76ccdSmrg 4824cfa76ccdSmrg my_outputname=$1 4825cfa76ccdSmrg my_originator=$2 4826cfa76ccdSmrg my_pic_p=${3-false} 4827cfa76ccdSmrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4828e96acad6Smrg my_dlsyms= 4829e96acad6Smrg 4830cfa76ccdSmrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4831e96acad6Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 4832cfa76ccdSmrg my_dlsyms=${my_outputname}S.c 4833e96acad6Smrg else 4834e96acad6Smrg func_error "not configured to extract global symbols from dlpreopened files" 4835e96acad6Smrg fi 4836e96acad6Smrg fi 4837dbbd9e4bSmacallan 4838e96acad6Smrg if test -n "$my_dlsyms"; then 4839e96acad6Smrg case $my_dlsyms in 4840e96acad6Smrg "") ;; 4841e96acad6Smrg *.c) 4842e96acad6Smrg # Discover the nlist of each of the dlfiles. 4843cfa76ccdSmrg nlist=$output_objdir/$my_outputname.nm 4844dbbd9e4bSmacallan 4845e96acad6Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4846dbbd9e4bSmacallan 4847e96acad6Smrg # Parse the name list into a source file. 4848e96acad6Smrg func_verbose "creating $output_objdir/$my_dlsyms" 4849dbbd9e4bSmacallan 4850e96acad6Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4851cfa76ccdSmrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4852cfa76ccdSmrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4853dbbd9e4bSmacallan 4854e96acad6Smrg#ifdef __cplusplus 4855e96acad6Smrgextern \"C\" { 4856e96acad6Smrg#endif 4857dbbd9e4bSmacallan 4858cfa76ccdSmrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4859e96acad6Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4860e96acad6Smrg#endif 4861dbbd9e4bSmacallan 4862e96acad6Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4863cfa76ccdSmrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4864cfa76ccdSmrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 4865e96acad6Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 4866e96acad6Smrg# define LT_DLSYM_CONST 4867cfa76ccdSmrg#elif defined __osf__ 4868e96acad6Smrg/* This system does not cope well with relocations in const data. */ 4869e96acad6Smrg# define LT_DLSYM_CONST 4870e96acad6Smrg#else 4871e96acad6Smrg# define LT_DLSYM_CONST const 4872e96acad6Smrg#endif 4873dbbd9e4bSmacallan 4874cfa76ccdSmrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4875cfa76ccdSmrg 4876e96acad6Smrg/* External symbol declarations for the compiler. */\ 4877e96acad6Smrg" 4878dbbd9e4bSmacallan 4879cfa76ccdSmrg if test yes = "$dlself"; then 4880cfa76ccdSmrg func_verbose "generating symbol list for '$output'" 4881dbbd9e4bSmacallan 4882e96acad6Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4883dbbd9e4bSmacallan 4884e96acad6Smrg # Add our own program objects to the symbol list. 4885e96acad6Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4886e96acad6Smrg for progfile in $progfiles; do 4887e96acad6Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4888cfa76ccdSmrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4889e96acad6Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4890dbbd9e4bSmacallan done 4891dbbd9e4bSmacallan 4892e96acad6Smrg if test -n "$exclude_expsyms"; then 4893e96acad6Smrg $opt_dry_run || { 4894e96acad6Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4895e96acad6Smrg eval '$MV "$nlist"T "$nlist"' 4896e96acad6Smrg } 4897e96acad6Smrg fi 4898dbbd9e4bSmacallan 4899e96acad6Smrg if test -n "$export_symbols_regex"; then 4900e96acad6Smrg $opt_dry_run || { 4901e96acad6Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4902e96acad6Smrg eval '$MV "$nlist"T "$nlist"' 4903e96acad6Smrg } 4904e96acad6Smrg fi 4905dbbd9e4bSmacallan 4906e96acad6Smrg # Prepare the list of exported symbols 4907e96acad6Smrg if test -z "$export_symbols"; then 4908cfa76ccdSmrg export_symbols=$output_objdir/$outputname.exp 4909e96acad6Smrg $opt_dry_run || { 4910e96acad6Smrg $RM $export_symbols 4911cfa76ccdSmrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4912e96acad6Smrg case $host in 4913e96acad6Smrg *cygwin* | *mingw* | *cegcc* ) 4914e96acad6Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4915e96acad6Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4916e96acad6Smrg ;; 4917e96acad6Smrg esac 4918e96acad6Smrg } 4919e96acad6Smrg else 4920e96acad6Smrg $opt_dry_run || { 4921cfa76ccdSmrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4922e96acad6Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4923e96acad6Smrg eval '$MV "$nlist"T "$nlist"' 4924e96acad6Smrg case $host in 4925e96acad6Smrg *cygwin* | *mingw* | *cegcc* ) 4926e96acad6Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4927e96acad6Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4928e96acad6Smrg ;; 4929e96acad6Smrg esac 4930e96acad6Smrg } 4931e96acad6Smrg fi 4932e96acad6Smrg fi 4933dbbd9e4bSmacallan 4934e96acad6Smrg for dlprefile in $dlprefiles; do 4935cfa76ccdSmrg func_verbose "extracting global C symbols from '$dlprefile'" 4936e96acad6Smrg func_basename "$dlprefile" 4937cfa76ccdSmrg name=$func_basename_result 4938e96acad6Smrg case $host in 4939e96acad6Smrg *cygwin* | *mingw* | *cegcc* ) 4940e96acad6Smrg # if an import library, we need to obtain dlname 4941e96acad6Smrg if func_win32_import_lib_p "$dlprefile"; then 4942e96acad6Smrg func_tr_sh "$dlprefile" 4943e96acad6Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 4944cfa76ccdSmrg dlprefile_dlbasename= 4945e96acad6Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4946e96acad6Smrg # Use subshell, to avoid clobbering current variable values 4947e96acad6Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4948cfa76ccdSmrg if test -n "$dlprefile_dlname"; then 4949e96acad6Smrg func_basename "$dlprefile_dlname" 4950cfa76ccdSmrg dlprefile_dlbasename=$func_basename_result 4951e96acad6Smrg else 4952e96acad6Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 4953e96acad6Smrg $sharedlib_from_linklib_cmd "$dlprefile" 4954e96acad6Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 4955e96acad6Smrg fi 4956e96acad6Smrg fi 4957e96acad6Smrg $opt_dry_run || { 4958cfa76ccdSmrg if test -n "$dlprefile_dlbasename"; then 4959e96acad6Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4960e96acad6Smrg else 4961e96acad6Smrg func_warning "Could not compute DLL name from $name" 4962e96acad6Smrg eval '$ECHO ": $name " >> "$nlist"' 4963e96acad6Smrg fi 4964e96acad6Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4965e96acad6Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4966e96acad6Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4967e96acad6Smrg } 4968e96acad6Smrg else # not an import lib 4969e96acad6Smrg $opt_dry_run || { 4970e96acad6Smrg eval '$ECHO ": $name " >> "$nlist"' 4971e96acad6Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4972e96acad6Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4973e96acad6Smrg } 4974e96acad6Smrg fi 4975e96acad6Smrg ;; 4976e96acad6Smrg *) 4977e96acad6Smrg $opt_dry_run || { 4978e96acad6Smrg eval '$ECHO ": $name " >> "$nlist"' 4979e96acad6Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4980e96acad6Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4981e96acad6Smrg } 4982e96acad6Smrg ;; 4983e96acad6Smrg esac 4984e96acad6Smrg done 4985dbbd9e4bSmacallan 4986e96acad6Smrg $opt_dry_run || { 4987e96acad6Smrg # Make sure we have at least an empty file. 4988e96acad6Smrg test -f "$nlist" || : > "$nlist" 4989dbbd9e4bSmacallan 4990e96acad6Smrg if test -n "$exclude_expsyms"; then 4991e96acad6Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4992e96acad6Smrg $MV "$nlist"T "$nlist" 4993e96acad6Smrg fi 4994dbbd9e4bSmacallan 4995e96acad6Smrg # Try sorting and uniquifying the output. 4996e96acad6Smrg if $GREP -v "^: " < "$nlist" | 4997e96acad6Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 4998e96acad6Smrg sort -k 3 4999e96acad6Smrg else 5000e96acad6Smrg sort +2 5001e96acad6Smrg fi | 5002e96acad6Smrg uniq > "$nlist"S; then 5003e96acad6Smrg : 5004e96acad6Smrg else 5005e96acad6Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 5006e96acad6Smrg fi 5007dbbd9e4bSmacallan 5008e96acad6Smrg if test -f "$nlist"S; then 5009e96acad6Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 5010e96acad6Smrg else 5011e96acad6Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 5012e96acad6Smrg fi 5013dbbd9e4bSmacallan 5014cfa76ccdSmrg func_show_eval '$RM "${nlist}I"' 5015cfa76ccdSmrg if test -n "$global_symbol_to_import"; then 5016cfa76ccdSmrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 5017cfa76ccdSmrg fi 5018cfa76ccdSmrg 5019e96acad6Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5020e96acad6Smrg 5021e96acad6Smrg/* The mapping between symbol names and symbols. */ 5022e96acad6Smrgtypedef struct { 5023e96acad6Smrg const char *name; 5024e96acad6Smrg void *address; 5025e96acad6Smrg} lt_dlsymlist; 5026e96acad6Smrgextern LT_DLSYM_CONST lt_dlsymlist 5027cfa76ccdSmrglt_${my_prefix}_LTX_preloaded_symbols[];\ 5028cfa76ccdSmrg" 5029cfa76ccdSmrg 5030cfa76ccdSmrg if test -s "$nlist"I; then 5031cfa76ccdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 5032cfa76ccdSmrgstatic void lt_syminit(void) 5033cfa76ccdSmrg{ 5034cfa76ccdSmrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 5035cfa76ccdSmrg for (; symbol->name; ++symbol) 5036cfa76ccdSmrg {" 5037cfa76ccdSmrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 5038cfa76ccdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 5039cfa76ccdSmrg } 5040cfa76ccdSmrg}" 5041cfa76ccdSmrg fi 5042cfa76ccdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 5043e96acad6SmrgLT_DLSYM_CONST lt_dlsymlist 5044e96acad6Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 5045cfa76ccdSmrg{ {\"$my_originator\", (void *) 0}," 5046cfa76ccdSmrg 5047cfa76ccdSmrg if test -s "$nlist"I; then 5048cfa76ccdSmrg echo >> "$output_objdir/$my_dlsyms" "\ 5049cfa76ccdSmrg {\"@INIT@\", (void *) <_syminit}," 5050cfa76ccdSmrg fi 5051e96acad6Smrg 5052e96acad6Smrg case $need_lib_prefix in 5053e96acad6Smrg no) 5054e96acad6Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 5055dbbd9e4bSmacallan ;; 5056dbbd9e4bSmacallan *) 5057e96acad6Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 5058dbbd9e4bSmacallan ;; 5059dbbd9e4bSmacallan esac 5060e96acad6Smrg echo >> "$output_objdir/$my_dlsyms" "\ 5061e96acad6Smrg {0, (void *) 0} 5062e96acad6Smrg}; 5063dbbd9e4bSmacallan 5064e96acad6Smrg/* This works around a problem in FreeBSD linker */ 5065e96acad6Smrg#ifdef FREEBSD_WORKAROUND 5066e96acad6Smrgstatic const void *lt_preloaded_setup() { 5067e96acad6Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 5068e96acad6Smrg} 5069e96acad6Smrg#endif 5070dbbd9e4bSmacallan 5071e96acad6Smrg#ifdef __cplusplus 5072e96acad6Smrg} 5073e96acad6Smrg#endif\ 5074e96acad6Smrg" 5075e96acad6Smrg } # !$opt_dry_run 5076dbbd9e4bSmacallan 5077e96acad6Smrg pic_flag_for_symtable= 5078e96acad6Smrg case "$compile_command " in 5079e96acad6Smrg *" -static "*) ;; 5080e96acad6Smrg *) 5081e96acad6Smrg case $host in 5082e96acad6Smrg # compiling the symbol table file with pic_flag works around 5083e96acad6Smrg # a FreeBSD bug that causes programs to crash when -lm is 5084e96acad6Smrg # linked before any other PIC object. But we must not use 5085e96acad6Smrg # pic_flag when linking with -static. The problem exists in 5086e96acad6Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 5087cfa76ccdSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 5088e96acad6Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 5089e96acad6Smrg *-*-hpux*) 5090e96acad6Smrg pic_flag_for_symtable=" $pic_flag" ;; 5091e96acad6Smrg *) 5092cfa76ccdSmrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 5093e96acad6Smrg ;; 5094e96acad6Smrg esac 5095e96acad6Smrg ;; 5096e96acad6Smrg esac 5097e96acad6Smrg symtab_cflags= 5098e96acad6Smrg for arg in $LTCFLAGS; do 5099e96acad6Smrg case $arg in 5100e96acad6Smrg -pie | -fpie | -fPIE) ;; 5101e96acad6Smrg *) func_append symtab_cflags " $arg" ;; 5102dbbd9e4bSmacallan esac 5103dbbd9e4bSmacallan done 5104dbbd9e4bSmacallan 5105e96acad6Smrg # Now compile the dynamic symbol file. 5106e96acad6Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 5107dbbd9e4bSmacallan 5108e96acad6Smrg # Clean up the generated files. 5109cfa76ccdSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 5110dbbd9e4bSmacallan 5111e96acad6Smrg # Transform the symbol file into the correct name. 5112cfa76ccdSmrg symfileobj=$output_objdir/${my_outputname}S.$objext 5113e96acad6Smrg case $host in 5114e96acad6Smrg *cygwin* | *mingw* | *cegcc* ) 5115e96acad6Smrg if test -f "$output_objdir/$my_outputname.def"; then 5116e96acad6Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5117e96acad6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 5118e96acad6Smrg else 5119e96acad6Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5120e96acad6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5121e96acad6Smrg fi 5122e96acad6Smrg ;; 5123e96acad6Smrg *) 5124e96acad6Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5125e96acad6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 5126e96acad6Smrg ;; 5127e96acad6Smrg esac 5128e96acad6Smrg ;; 5129e96acad6Smrg *) 5130cfa76ccdSmrg func_fatal_error "unknown suffix for '$my_dlsyms'" 5131e96acad6Smrg ;; 5132e96acad6Smrg esac 5133e96acad6Smrg else 5134e96acad6Smrg # We keep going just in case the user didn't refer to 5135e96acad6Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 5136e96acad6Smrg # really was required. 5137dbbd9e4bSmacallan 5138e96acad6Smrg # Nullify the symbol file. 5139e96acad6Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 5140e96acad6Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 5141e96acad6Smrg fi 5142e96acad6Smrg} 5143dbbd9e4bSmacallan 5144cfa76ccdSmrg# func_cygming_gnu_implib_p ARG 5145cfa76ccdSmrg# This predicate returns with zero status (TRUE) if 5146cfa76ccdSmrg# ARG is a GNU/binutils-style import library. Returns 5147cfa76ccdSmrg# with nonzero status (FALSE) otherwise. 5148cfa76ccdSmrgfunc_cygming_gnu_implib_p () 5149cfa76ccdSmrg{ 5150cfa76ccdSmrg $debug_cmd 5151cfa76ccdSmrg 5152cfa76ccdSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5153cfa76ccdSmrg 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)$'` 5154cfa76ccdSmrg test -n "$func_cygming_gnu_implib_tmp" 5155cfa76ccdSmrg} 5156cfa76ccdSmrg 5157cfa76ccdSmrg# func_cygming_ms_implib_p ARG 5158cfa76ccdSmrg# This predicate returns with zero status (TRUE) if 5159cfa76ccdSmrg# ARG is an MS-style import library. Returns 5160cfa76ccdSmrg# with nonzero status (FALSE) otherwise. 5161cfa76ccdSmrgfunc_cygming_ms_implib_p () 5162cfa76ccdSmrg{ 5163cfa76ccdSmrg $debug_cmd 5164cfa76ccdSmrg 5165cfa76ccdSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5166cfa76ccdSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 5167cfa76ccdSmrg test -n "$func_cygming_ms_implib_tmp" 5168cfa76ccdSmrg} 5169cfa76ccdSmrg 5170e96acad6Smrg# func_win32_libid arg 5171e96acad6Smrg# return the library type of file 'arg' 5172e96acad6Smrg# 5173e96acad6Smrg# Need a lot of goo to handle *both* DLLs and import libs 5174e96acad6Smrg# Has to be a shell function in order to 'eat' the argument 5175e96acad6Smrg# that is supplied when $file_magic_command is called. 5176e96acad6Smrg# Despite the name, also deal with 64 bit binaries. 5177e96acad6Smrgfunc_win32_libid () 5178e96acad6Smrg{ 5179cfa76ccdSmrg $debug_cmd 5180cfa76ccdSmrg 5181cfa76ccdSmrg win32_libid_type=unknown 5182e96acad6Smrg win32_fileres=`file -L $1 2>/dev/null` 5183e96acad6Smrg case $win32_fileres in 5184e96acad6Smrg *ar\ archive\ import\ library*) # definitely import 5185e96acad6Smrg win32_libid_type="x86 archive import" 5186e96acad6Smrg ;; 5187e96acad6Smrg *ar\ archive*) # could be an import, or static 5188e96acad6Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 5189e96acad6Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 5190e96acad6Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 5191cfa76ccdSmrg case $nm_interface in 5192cfa76ccdSmrg "MS dumpbin") 5193cfa76ccdSmrg if func_cygming_ms_implib_p "$1" || 5194cfa76ccdSmrg func_cygming_gnu_implib_p "$1" 5195cfa76ccdSmrg then 5196cfa76ccdSmrg win32_nmres=import 5197cfa76ccdSmrg else 5198cfa76ccdSmrg win32_nmres= 5199cfa76ccdSmrg fi 5200cfa76ccdSmrg ;; 5201cfa76ccdSmrg *) 5202cfa76ccdSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5203cfa76ccdSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 5204cfa76ccdSmrg $SED -n -e ' 5205e96acad6Smrg 1,100{ 5206e96acad6Smrg / I /{ 5207cfa76ccdSmrg s|.*|import| 5208e96acad6Smrg p 5209e96acad6Smrg q 5210e96acad6Smrg } 5211e96acad6Smrg }'` 5212cfa76ccdSmrg ;; 5213cfa76ccdSmrg esac 5214e96acad6Smrg case $win32_nmres in 5215e96acad6Smrg import*) win32_libid_type="x86 archive import";; 5216e96acad6Smrg *) win32_libid_type="x86 archive static";; 5217e96acad6Smrg esac 5218e96acad6Smrg fi 5219e96acad6Smrg ;; 5220e96acad6Smrg *DLL*) 5221e96acad6Smrg win32_libid_type="x86 DLL" 5222e96acad6Smrg ;; 5223e96acad6Smrg *executable*) # but shell scripts are "executable" too... 5224e96acad6Smrg case $win32_fileres in 5225e96acad6Smrg *MS\ Windows\ PE\ Intel*) 5226e96acad6Smrg win32_libid_type="x86 DLL" 5227e96acad6Smrg ;; 5228e96acad6Smrg esac 5229e96acad6Smrg ;; 5230e96acad6Smrg esac 5231e96acad6Smrg $ECHO "$win32_libid_type" 5232e96acad6Smrg} 5233e96acad6Smrg 5234e96acad6Smrg# func_cygming_dll_for_implib ARG 5235e96acad6Smrg# 5236e96acad6Smrg# Platform-specific function to extract the 5237e96acad6Smrg# name of the DLL associated with the specified 5238e96acad6Smrg# import library ARG. 5239e96acad6Smrg# Invoked by eval'ing the libtool variable 5240e96acad6Smrg# $sharedlib_from_linklib_cmd 5241e96acad6Smrg# Result is available in the variable 5242e96acad6Smrg# $sharedlib_from_linklib_result 5243e96acad6Smrgfunc_cygming_dll_for_implib () 5244e96acad6Smrg{ 5245cfa76ccdSmrg $debug_cmd 5246cfa76ccdSmrg 5247e96acad6Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5248e96acad6Smrg} 5249e96acad6Smrg 5250e96acad6Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5251e96acad6Smrg# 5252e96acad6Smrg# The is the core of a fallback implementation of a 5253e96acad6Smrg# platform-specific function to extract the name of the 5254e96acad6Smrg# DLL associated with the specified import library LIBNAME. 5255e96acad6Smrg# 5256e96acad6Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5257e96acad6Smrg# on the platform and compiler that created the implib. 5258e96acad6Smrg# 5259e96acad6Smrg# Echos the name of the DLL associated with the 5260e96acad6Smrg# specified import library. 5261e96acad6Smrgfunc_cygming_dll_for_implib_fallback_core () 5262e96acad6Smrg{ 5263cfa76ccdSmrg $debug_cmd 5264cfa76ccdSmrg 5265e96acad6Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5266e96acad6Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5267e96acad6Smrg $SED '/^Contents of section '"$match_literal"':/{ 5268e96acad6Smrg # Place marker at beginning of archive member dllname section 5269e96acad6Smrg s/.*/====MARK====/ 5270e96acad6Smrg p 5271e96acad6Smrg d 5272e96acad6Smrg } 5273e96acad6Smrg # These lines can sometimes be longer than 43 characters, but 5274e96acad6Smrg # are always uninteresting 5275e96acad6Smrg /:[ ]*file format pe[i]\{,1\}-/d 5276e96acad6Smrg /^In archive [^:]*:/d 5277e96acad6Smrg # Ensure marker is printed 5278e96acad6Smrg /^====MARK====/p 5279e96acad6Smrg # Remove all lines with less than 43 characters 5280e96acad6Smrg /^.\{43\}/!d 5281e96acad6Smrg # From remaining lines, remove first 43 characters 5282e96acad6Smrg s/^.\{43\}//' | 5283e96acad6Smrg $SED -n ' 5284e96acad6Smrg # Join marker and all lines until next marker into a single line 5285e96acad6Smrg /^====MARK====/ b para 5286e96acad6Smrg H 5287e96acad6Smrg $ b para 5288e96acad6Smrg b 5289e96acad6Smrg :para 5290e96acad6Smrg x 5291e96acad6Smrg s/\n//g 5292e96acad6Smrg # Remove the marker 5293e96acad6Smrg s/^====MARK====// 5294e96acad6Smrg # Remove trailing dots and whitespace 5295e96acad6Smrg s/[\. \t]*$// 5296e96acad6Smrg # Print 5297e96acad6Smrg /./p' | 5298e96acad6Smrg # we now have a list, one entry per line, of the stringified 5299e96acad6Smrg # contents of the appropriate section of all members of the 5300cfa76ccdSmrg # archive that possess that section. Heuristic: eliminate 5301cfa76ccdSmrg # all those that have a first or second character that is 5302e96acad6Smrg # a '.' (that is, objdump's representation of an unprintable 5303e96acad6Smrg # character.) This should work for all archives with less than 5304e96acad6Smrg # 0x302f exports -- but will fail for DLLs whose name actually 5305e96acad6Smrg # begins with a literal '.' or a single character followed by 5306e96acad6Smrg # a '.'. 5307e96acad6Smrg # 5308e96acad6Smrg # Of those that remain, print the first one. 5309e96acad6Smrg $SED -e '/^\./d;/^.\./d;q' 5310e96acad6Smrg} 5311e96acad6Smrg 5312e96acad6Smrg# func_cygming_dll_for_implib_fallback ARG 5313e96acad6Smrg# Platform-specific function to extract the 5314e96acad6Smrg# name of the DLL associated with the specified 5315e96acad6Smrg# import library ARG. 5316e96acad6Smrg# 5317e96acad6Smrg# This fallback implementation is for use when $DLLTOOL 5318e96acad6Smrg# does not support the --identify-strict option. 5319e96acad6Smrg# Invoked by eval'ing the libtool variable 5320e96acad6Smrg# $sharedlib_from_linklib_cmd 5321e96acad6Smrg# Result is available in the variable 5322e96acad6Smrg# $sharedlib_from_linklib_result 5323e96acad6Smrgfunc_cygming_dll_for_implib_fallback () 5324e96acad6Smrg{ 5325cfa76ccdSmrg $debug_cmd 5326cfa76ccdSmrg 5327cfa76ccdSmrg if func_cygming_gnu_implib_p "$1"; then 5328e96acad6Smrg # binutils import library 5329e96acad6Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5330cfa76ccdSmrg elif func_cygming_ms_implib_p "$1"; then 5331e96acad6Smrg # ms-generated import library 5332e96acad6Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5333e96acad6Smrg else 5334e96acad6Smrg # unknown 5335cfa76ccdSmrg sharedlib_from_linklib_result= 5336e96acad6Smrg fi 5337e96acad6Smrg} 5338e96acad6Smrg 5339e96acad6Smrg 5340e96acad6Smrg# func_extract_an_archive dir oldlib 5341e96acad6Smrgfunc_extract_an_archive () 5342e96acad6Smrg{ 5343cfa76ccdSmrg $debug_cmd 5344cfa76ccdSmrg 5345cfa76ccdSmrg f_ex_an_ar_dir=$1; shift 5346cfa76ccdSmrg f_ex_an_ar_oldlib=$1 5347cfa76ccdSmrg if test yes = "$lock_old_archive_extraction"; then 5348e96acad6Smrg lockfile=$f_ex_an_ar_oldlib.lock 5349e96acad6Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5350e96acad6Smrg func_echo "Waiting for $lockfile to be removed" 5351e96acad6Smrg sleep 2 5352dbbd9e4bSmacallan done 5353e96acad6Smrg fi 5354e96acad6Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5355e96acad6Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 5356cfa76ccdSmrg if test yes = "$lock_old_archive_extraction"; then 5357e96acad6Smrg $opt_dry_run || rm -f "$lockfile" 5358e96acad6Smrg fi 5359e96acad6Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5360e96acad6Smrg : 5361e96acad6Smrg else 5362e96acad6Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5363e96acad6Smrg fi 5364e96acad6Smrg} 5365dbbd9e4bSmacallan 5366e96acad6Smrg 5367e96acad6Smrg# func_extract_archives gentop oldlib ... 5368e96acad6Smrgfunc_extract_archives () 5369e96acad6Smrg{ 5370cfa76ccdSmrg $debug_cmd 5371cfa76ccdSmrg 5372cfa76ccdSmrg my_gentop=$1; shift 5373e96acad6Smrg my_oldlibs=${1+"$@"} 5374cfa76ccdSmrg my_oldobjs= 5375cfa76ccdSmrg my_xlib= 5376cfa76ccdSmrg my_xabs= 5377cfa76ccdSmrg my_xdir= 5378e96acad6Smrg 5379e96acad6Smrg for my_xlib in $my_oldlibs; do 5380e96acad6Smrg # Extract the objects. 5381e96acad6Smrg case $my_xlib in 5382cfa76ccdSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5383e96acad6Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 5384e96acad6Smrg esac 5385e96acad6Smrg func_basename "$my_xlib" 5386cfa76ccdSmrg my_xlib=$func_basename_result 5387e96acad6Smrg my_xlib_u=$my_xlib 5388e96acad6Smrg while :; do 5389e96acad6Smrg case " $extracted_archives " in 5390e96acad6Smrg *" $my_xlib_u "*) 5391e96acad6Smrg func_arith $extracted_serial + 1 5392e96acad6Smrg extracted_serial=$func_arith_result 5393e96acad6Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5394e96acad6Smrg *) break ;; 5395dbbd9e4bSmacallan esac 5396dbbd9e4bSmacallan done 5397e96acad6Smrg extracted_archives="$extracted_archives $my_xlib_u" 5398cfa76ccdSmrg my_xdir=$my_gentop/$my_xlib_u 5399dbbd9e4bSmacallan 5400e96acad6Smrg func_mkdir_p "$my_xdir" 5401dbbd9e4bSmacallan 5402e96acad6Smrg case $host in 5403e96acad6Smrg *-darwin*) 5404e96acad6Smrg func_verbose "Extracting $my_xabs" 5405e96acad6Smrg # Do not bother doing anything if just a dry run 5406e96acad6Smrg $opt_dry_run || { 5407e96acad6Smrg darwin_orig_dir=`pwd` 5408e96acad6Smrg cd $my_xdir || exit $? 5409e96acad6Smrg darwin_archive=$my_xabs 5410e96acad6Smrg darwin_curdir=`pwd` 5411cfa76ccdSmrg func_basename "$darwin_archive" 5412cfa76ccdSmrg darwin_base_archive=$func_basename_result 5413e96acad6Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5414e96acad6Smrg if test -n "$darwin_arches"; then 5415e96acad6Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5416e96acad6Smrg darwin_arch= 5417e96acad6Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5418cfa76ccdSmrg for darwin_arch in $darwin_arches; do 5419cfa76ccdSmrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5420cfa76ccdSmrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5421cfa76ccdSmrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5422cfa76ccdSmrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5423e96acad6Smrg cd "$darwin_curdir" 5424cfa76ccdSmrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5425e96acad6Smrg done # $darwin_arches 5426e96acad6Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5427cfa76ccdSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5428e96acad6Smrg darwin_file= 5429e96acad6Smrg darwin_files= 5430e96acad6Smrg for darwin_file in $darwin_filelist; do 5431e96acad6Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5432e96acad6Smrg $LIPO -create -output "$darwin_file" $darwin_files 5433e96acad6Smrg done # $darwin_filelist 5434e96acad6Smrg $RM -rf unfat-$$ 5435e96acad6Smrg cd "$darwin_orig_dir" 5436dbbd9e4bSmacallan else 5437e96acad6Smrg cd $darwin_orig_dir 5438e96acad6Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5439e96acad6Smrg fi # $darwin_arches 5440e96acad6Smrg } # !$opt_dry_run 5441e96acad6Smrg ;; 5442e96acad6Smrg *) 5443e96acad6Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 5444e96acad6Smrg ;; 5445e96acad6Smrg esac 5446e96acad6Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5447e96acad6Smrg done 5448dbbd9e4bSmacallan 5449cfa76ccdSmrg func_extract_archives_result=$my_oldobjs 5450e96acad6Smrg} 5451dbbd9e4bSmacallan 5452dbbd9e4bSmacallan 5453e96acad6Smrg# func_emit_wrapper [arg=no] 5454e96acad6Smrg# 5455e96acad6Smrg# Emit a libtool wrapper script on stdout. 5456e96acad6Smrg# Don't directly open a file because we may want to 5457e96acad6Smrg# incorporate the script contents within a cygwin/mingw 5458e96acad6Smrg# wrapper executable. Must ONLY be called from within 5459e96acad6Smrg# func_mode_link because it depends on a number of variables 5460e96acad6Smrg# set therein. 5461e96acad6Smrg# 5462e96acad6Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5463e96acad6Smrg# variable will take. If 'yes', then the emitted script 5464cfa76ccdSmrg# will assume that the directory where it is stored is 5465e96acad6Smrg# the $objdir directory. This is a cygwin/mingw-specific 5466e96acad6Smrg# behavior. 5467e96acad6Smrgfunc_emit_wrapper () 5468e96acad6Smrg{ 5469e96acad6Smrg func_emit_wrapper_arg1=${1-no} 5470dbbd9e4bSmacallan 5471e96acad6Smrg $ECHO "\ 5472e96acad6Smrg#! $SHELL 5473dbbd9e4bSmacallan 5474e96acad6Smrg# $output - temporary wrapper script for $objdir/$outputname 5475cfa76ccdSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5476e96acad6Smrg# 5477e96acad6Smrg# The $output program cannot be directly executed until all the libtool 5478e96acad6Smrg# libraries that it depends on are installed. 5479e96acad6Smrg# 5480e96acad6Smrg# This wrapper script should never be moved out of the build directory. 5481e96acad6Smrg# If it is, it will not operate correctly. 5482dbbd9e4bSmacallan 5483e96acad6Smrg# Sed substitution that helps us do robust quoting. It backslashifies 5484e96acad6Smrg# metacharacters that are still active within double-quoted strings. 5485e96acad6Smrgsed_quote_subst='$sed_quote_subst' 5486dbbd9e4bSmacallan 5487e96acad6Smrg# Be Bourne compatible 5488e96acad6Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5489e96acad6Smrg emulate sh 5490e96acad6Smrg NULLCMD=: 5491e96acad6Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5492e96acad6Smrg # is contrary to our usage. Disable this feature. 5493e96acad6Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5494e96acad6Smrg setopt NO_GLOB_SUBST 5495e96acad6Smrgelse 5496e96acad6Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5497e96acad6Smrgfi 5498e96acad6SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5499e96acad6SmrgDUALCASE=1; export DUALCASE # for MKS sh 5500dbbd9e4bSmacallan 5501e96acad6Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5502e96acad6Smrg# if CDPATH is set. 5503e96acad6Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5504dbbd9e4bSmacallan 5505e96acad6Smrgrelink_command=\"$relink_command\" 5506dbbd9e4bSmacallan 5507e96acad6Smrg# This environment variable determines our operation mode. 5508e96acad6Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5509e96acad6Smrg # install mode needs the following variables: 5510e96acad6Smrg generated_by_libtool_version='$macro_version' 5511e96acad6Smrg notinst_deplibs='$notinst_deplibs' 5512e96acad6Smrgelse 5513e96acad6Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5514e96acad6Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5515e96acad6Smrg file=\"\$0\"" 5516dbbd9e4bSmacallan 5517cfa76ccdSmrg func_quote_arg pretty "$ECHO" 5518cfa76ccdSmrg qECHO=$func_quote_arg_result 5519e96acad6Smrg $ECHO "\ 5520dbbd9e4bSmacallan 5521e96acad6Smrg# A function that is used when there is no print builtin or printf. 5522e96acad6Smrgfunc_fallback_echo () 5523e96acad6Smrg{ 5524e96acad6Smrg eval 'cat <<_LTECHO_EOF 5525e96acad6Smrg\$1 5526e96acad6Smrg_LTECHO_EOF' 5527e96acad6Smrg} 5528cfa76ccdSmrg ECHO=$qECHO 5529e96acad6Smrg fi 5530dbbd9e4bSmacallan 5531e96acad6Smrg# Very basic option parsing. These options are (a) specific to 5532e96acad6Smrg# the libtool wrapper, (b) are identical between the wrapper 5533cfa76ccdSmrg# /script/ and the wrapper /executable/ that is used only on 5534e96acad6Smrg# windows platforms, and (c) all begin with the string "--lt-" 5535cfa76ccdSmrg# (application programs are unlikely to have options that match 5536e96acad6Smrg# this pattern). 5537e96acad6Smrg# 5538e96acad6Smrg# There are only two supported options: --lt-debug and 5539e96acad6Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 5540e96acad6Smrg# 5541e96acad6Smrg# The first argument to this parsing function should be the 5542e96acad6Smrg# script's $0 value, followed by "$@". 5543e96acad6Smrglt_option_debug= 5544e96acad6Smrgfunc_parse_lt_options () 5545e96acad6Smrg{ 5546e96acad6Smrg lt_script_arg0=\$0 5547e96acad6Smrg shift 5548e96acad6Smrg for lt_opt 5549e96acad6Smrg do 5550e96acad6Smrg case \"\$lt_opt\" in 5551e96acad6Smrg --lt-debug) lt_option_debug=1 ;; 5552e96acad6Smrg --lt-dump-script) 5553e96acad6Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5554e96acad6Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5555e96acad6Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5556e96acad6Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 5557e96acad6Smrg exit 0 5558e96acad6Smrg ;; 5559e96acad6Smrg --lt-*) 5560e96acad6Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5561e96acad6Smrg exit 1 5562e96acad6Smrg ;; 5563e96acad6Smrg esac 5564e96acad6Smrg done 5565dbbd9e4bSmacallan 5566e96acad6Smrg # Print the debug banner immediately: 5567e96acad6Smrg if test -n \"\$lt_option_debug\"; then 5568cfa76ccdSmrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5569e96acad6Smrg fi 5570e96acad6Smrg} 5571dbbd9e4bSmacallan 5572e96acad6Smrg# Used when --lt-debug. Prints its arguments to stdout 5573e96acad6Smrg# (redirection is the responsibility of the caller) 5574e96acad6Smrgfunc_lt_dump_args () 5575e96acad6Smrg{ 5576e96acad6Smrg lt_dump_args_N=1; 5577e96acad6Smrg for lt_arg 5578e96acad6Smrg do 5579cfa76ccdSmrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5580e96acad6Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5581e96acad6Smrg done 5582e96acad6Smrg} 5583dbbd9e4bSmacallan 5584e96acad6Smrg# Core function for launching the target application 5585e96acad6Smrgfunc_exec_program_core () 5586e96acad6Smrg{ 5587e96acad6Smrg" 5588e96acad6Smrg case $host in 5589e96acad6Smrg # Backslashes separate directories on plain windows 5590e96acad6Smrg *-*-mingw | *-*-os2* | *-cegcc*) 5591e96acad6Smrg $ECHO "\ 5592e96acad6Smrg if test -n \"\$lt_option_debug\"; then 5593cfa76ccdSmrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5594e96acad6Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5595e96acad6Smrg fi 5596e96acad6Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5597e96acad6Smrg" 5598e96acad6Smrg ;; 5599dbbd9e4bSmacallan 5600e96acad6Smrg *) 5601e96acad6Smrg $ECHO "\ 5602e96acad6Smrg if test -n \"\$lt_option_debug\"; then 5603cfa76ccdSmrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5604e96acad6Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5605e96acad6Smrg fi 5606e96acad6Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5607e96acad6Smrg" 5608e96acad6Smrg ;; 5609e96acad6Smrg esac 5610e96acad6Smrg $ECHO "\ 5611e96acad6Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5612e96acad6Smrg exit 1 5613e96acad6Smrg} 5614dbbd9e4bSmacallan 5615e96acad6Smrg# A function to encapsulate launching the target application 5616e96acad6Smrg# Strips options in the --lt-* namespace from \$@ and 5617e96acad6Smrg# launches target application with the remaining arguments. 5618e96acad6Smrgfunc_exec_program () 5619e96acad6Smrg{ 5620cfa76ccdSmrg case \" \$* \" in 5621cfa76ccdSmrg *\\ --lt-*) 5622cfa76ccdSmrg for lt_wr_arg 5623cfa76ccdSmrg do 5624cfa76ccdSmrg case \$lt_wr_arg in 5625cfa76ccdSmrg --lt-*) ;; 5626cfa76ccdSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5627cfa76ccdSmrg esac 5628cfa76ccdSmrg shift 5629cfa76ccdSmrg done ;; 5630cfa76ccdSmrg esac 5631e96acad6Smrg func_exec_program_core \${1+\"\$@\"} 5632e96acad6Smrg} 5633dbbd9e4bSmacallan 5634e96acad6Smrg # Parse options 5635e96acad6Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5636dbbd9e4bSmacallan 5637e96acad6Smrg # Find the directory that this script lives in. 5638e96acad6Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5639e96acad6Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5640dbbd9e4bSmacallan 5641e96acad6Smrg # Follow symbolic links until we get to the real thisdir. 5642e96acad6Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5643e96acad6Smrg while test -n \"\$file\"; do 5644e96acad6Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5645dbbd9e4bSmacallan 5646e96acad6Smrg # If there was a directory component, then change thisdir. 5647e96acad6Smrg if test \"x\$destdir\" != \"x\$file\"; then 5648e96acad6Smrg case \"\$destdir\" in 5649e96acad6Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5650e96acad6Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5651e96acad6Smrg esac 5652e96acad6Smrg fi 5653dbbd9e4bSmacallan 5654e96acad6Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5655e96acad6Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5656e96acad6Smrg done 5657dbbd9e4bSmacallan 5658e96acad6Smrg # Usually 'no', except on cygwin/mingw when embedded into 5659e96acad6Smrg # the cwrapper. 5660e96acad6Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5661e96acad6Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5662e96acad6Smrg # special case for '.' 5663e96acad6Smrg if test \"\$thisdir\" = \".\"; then 5664e96acad6Smrg thisdir=\`pwd\` 5665e96acad6Smrg fi 5666e96acad6Smrg # remove .libs from thisdir 5667e96acad6Smrg case \"\$thisdir\" in 5668e96acad6Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5669e96acad6Smrg $objdir ) thisdir=. ;; 5670e96acad6Smrg esac 5671e96acad6Smrg fi 5672dbbd9e4bSmacallan 5673e96acad6Smrg # Try to get the absolute directory name. 5674e96acad6Smrg absdir=\`cd \"\$thisdir\" && pwd\` 5675e96acad6Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5676e96acad6Smrg" 5677dbbd9e4bSmacallan 5678cfa76ccdSmrg if test yes = "$fast_install"; then 5679e96acad6Smrg $ECHO "\ 5680e96acad6Smrg program=lt-'$outputname'$exeext 5681e96acad6Smrg progdir=\"\$thisdir/$objdir\" 5682dbbd9e4bSmacallan 5683e96acad6Smrg if test ! -f \"\$progdir/\$program\" || 5684cfa76ccdSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5685e96acad6Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5686dbbd9e4bSmacallan 5687e96acad6Smrg file=\"\$\$-\$program\" 5688dbbd9e4bSmacallan 5689e96acad6Smrg if test ! -d \"\$progdir\"; then 5690e96acad6Smrg $MKDIR \"\$progdir\" 5691e96acad6Smrg else 5692e96acad6Smrg $RM \"\$progdir/\$file\" 5693e96acad6Smrg fi" 5694dbbd9e4bSmacallan 5695e96acad6Smrg $ECHO "\ 5696dbbd9e4bSmacallan 5697e96acad6Smrg # relink executable if necessary 5698e96acad6Smrg if test -n \"\$relink_command\"; then 5699e96acad6Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5700e96acad6Smrg else 5701cfa76ccdSmrg \$ECHO \"\$relink_command_output\" >&2 5702e96acad6Smrg $RM \"\$progdir/\$file\" 5703e96acad6Smrg exit 1 5704e96acad6Smrg fi 5705e96acad6Smrg fi 5706dbbd9e4bSmacallan 5707e96acad6Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5708e96acad6Smrg { $RM \"\$progdir/\$program\"; 5709e96acad6Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5710e96acad6Smrg $RM \"\$progdir/\$file\" 5711e96acad6Smrg fi" 5712e96acad6Smrg else 5713e96acad6Smrg $ECHO "\ 5714e96acad6Smrg program='$outputname' 5715e96acad6Smrg progdir=\"\$thisdir/$objdir\" 5716e96acad6Smrg" 5717dbbd9e4bSmacallan fi 5718dbbd9e4bSmacallan 5719e96acad6Smrg $ECHO "\ 5720dbbd9e4bSmacallan 5721e96acad6Smrg if test -f \"\$progdir/\$program\"; then" 5722dbbd9e4bSmacallan 5723e96acad6Smrg # fixup the dll searchpath if we need to. 5724e96acad6Smrg # 5725e96acad6Smrg # Fix the DLL searchpath if we need to. Do this before prepending 5726e96acad6Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 5727e96acad6Smrg # libraries must come first. 5728e96acad6Smrg if test -n "$dllsearchpath"; then 5729e96acad6Smrg $ECHO "\ 5730e96acad6Smrg # Add the dll search path components to the executable PATH 5731e96acad6Smrg PATH=$dllsearchpath:\$PATH 5732e96acad6Smrg" 5733e96acad6Smrg fi 5734dbbd9e4bSmacallan 5735e96acad6Smrg # Export our shlibpath_var if we have one. 5736cfa76ccdSmrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5737e96acad6Smrg $ECHO "\ 5738e96acad6Smrg # Add our own library path to $shlibpath_var 5739e96acad6Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5740dbbd9e4bSmacallan 5741e96acad6Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 5742e96acad6Smrg # The second colon is a workaround for a bug in BeOS R4 sed 5743e96acad6Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5744dbbd9e4bSmacallan 5745e96acad6Smrg export $shlibpath_var 5746e96acad6Smrg" 5747e96acad6Smrg fi 5748dbbd9e4bSmacallan 5749e96acad6Smrg $ECHO "\ 5750e96acad6Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5751e96acad6Smrg # Run the actual program with our arguments. 5752e96acad6Smrg func_exec_program \${1+\"\$@\"} 5753e96acad6Smrg fi 5754e96acad6Smrg else 5755e96acad6Smrg # The program doesn't exist. 5756cfa76ccdSmrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5757e96acad6Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5758e96acad6Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5759e96acad6Smrg exit 1 5760e96acad6Smrg fi 5761e96acad6Smrgfi\ 5762e96acad6Smrg" 5763e96acad6Smrg} 5764dbbd9e4bSmacallan 5765dbbd9e4bSmacallan 5766e96acad6Smrg# func_emit_cwrapperexe_src 5767e96acad6Smrg# emit the source code for a wrapper executable on stdout 5768e96acad6Smrg# Must ONLY be called from within func_mode_link because 5769e96acad6Smrg# it depends on a number of variable set therein. 5770e96acad6Smrgfunc_emit_cwrapperexe_src () 5771e96acad6Smrg{ 5772e96acad6Smrg cat <<EOF 5773dbbd9e4bSmacallan 5774e96acad6Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5775cfa76ccdSmrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5776dbbd9e4bSmacallan 5777e96acad6Smrg The $output program cannot be directly executed until all the libtool 5778e96acad6Smrg libraries that it depends on are installed. 5779dbbd9e4bSmacallan 5780e96acad6Smrg This wrapper executable should never be moved out of the build directory. 5781e96acad6Smrg If it is, it will not operate correctly. 5782e96acad6Smrg*/ 5783e96acad6SmrgEOF 5784e96acad6Smrg cat <<"EOF" 5785e96acad6Smrg#ifdef _MSC_VER 5786e96acad6Smrg# define _CRT_SECURE_NO_DEPRECATE 1 5787e96acad6Smrg#endif 5788e96acad6Smrg#include <stdio.h> 5789e96acad6Smrg#include <stdlib.h> 5790e96acad6Smrg#ifdef _MSC_VER 5791e96acad6Smrg# include <direct.h> 5792e96acad6Smrg# include <process.h> 5793e96acad6Smrg# include <io.h> 5794e96acad6Smrg#else 5795e96acad6Smrg# include <unistd.h> 5796e96acad6Smrg# include <stdint.h> 5797e96acad6Smrg# ifdef __CYGWIN__ 5798e96acad6Smrg# include <io.h> 5799e96acad6Smrg# endif 5800e96acad6Smrg#endif 5801e96acad6Smrg#include <malloc.h> 5802e96acad6Smrg#include <stdarg.h> 5803e96acad6Smrg#include <assert.h> 5804e96acad6Smrg#include <string.h> 5805e96acad6Smrg#include <ctype.h> 5806e96acad6Smrg#include <errno.h> 5807e96acad6Smrg#include <fcntl.h> 5808e96acad6Smrg#include <sys/stat.h> 5809dbbd9e4bSmacallan 5810cfa76ccdSmrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5811cfa76ccdSmrg 5812e96acad6Smrg/* declarations of non-ANSI functions */ 5813cfa76ccdSmrg#if defined __MINGW32__ 5814e96acad6Smrg# ifdef __STRICT_ANSI__ 5815e96acad6Smrgint _putenv (const char *); 5816e96acad6Smrg# endif 5817cfa76ccdSmrg#elif defined __CYGWIN__ 5818e96acad6Smrg# ifdef __STRICT_ANSI__ 5819e96acad6Smrgchar *realpath (const char *, char *); 5820e96acad6Smrgint putenv (char *); 5821e96acad6Smrgint setenv (const char *, const char *, int); 5822e96acad6Smrg# endif 5823cfa76ccdSmrg/* #elif defined other_platform || defined ... */ 5824e96acad6Smrg#endif 5825dbbd9e4bSmacallan 5826e96acad6Smrg/* portability defines, excluding path handling macros */ 5827cfa76ccdSmrg#if defined _MSC_VER 5828e96acad6Smrg# define setmode _setmode 5829e96acad6Smrg# define stat _stat 5830e96acad6Smrg# define chmod _chmod 5831e96acad6Smrg# define getcwd _getcwd 5832e96acad6Smrg# define putenv _putenv 5833e96acad6Smrg# define S_IXUSR _S_IEXEC 5834cfa76ccdSmrg#elif defined __MINGW32__ 5835e96acad6Smrg# define setmode _setmode 5836e96acad6Smrg# define stat _stat 5837e96acad6Smrg# define chmod _chmod 5838e96acad6Smrg# define getcwd _getcwd 5839e96acad6Smrg# define putenv _putenv 5840cfa76ccdSmrg#elif defined __CYGWIN__ 5841e96acad6Smrg# define HAVE_SETENV 5842e96acad6Smrg# define FOPEN_WB "wb" 5843cfa76ccdSmrg/* #elif defined other platforms ... */ 5844e96acad6Smrg#endif 5845dbbd9e4bSmacallan 5846cfa76ccdSmrg#if defined PATH_MAX 5847e96acad6Smrg# define LT_PATHMAX PATH_MAX 5848cfa76ccdSmrg#elif defined MAXPATHLEN 5849e96acad6Smrg# define LT_PATHMAX MAXPATHLEN 5850e96acad6Smrg#else 5851e96acad6Smrg# define LT_PATHMAX 1024 5852e96acad6Smrg#endif 5853dbbd9e4bSmacallan 5854e96acad6Smrg#ifndef S_IXOTH 5855e96acad6Smrg# define S_IXOTH 0 5856e96acad6Smrg#endif 5857e96acad6Smrg#ifndef S_IXGRP 5858e96acad6Smrg# define S_IXGRP 0 5859e96acad6Smrg#endif 5860dbbd9e4bSmacallan 5861e96acad6Smrg/* path handling portability macros */ 5862e96acad6Smrg#ifndef DIR_SEPARATOR 5863e96acad6Smrg# define DIR_SEPARATOR '/' 5864e96acad6Smrg# define PATH_SEPARATOR ':' 5865e96acad6Smrg#endif 5866dbbd9e4bSmacallan 5867cfa76ccdSmrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5868cfa76ccdSmrg defined __OS2__ 5869e96acad6Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 5870e96acad6Smrg# define FOPEN_WB "wb" 5871e96acad6Smrg# ifndef DIR_SEPARATOR_2 5872e96acad6Smrg# define DIR_SEPARATOR_2 '\\' 5873e96acad6Smrg# endif 5874e96acad6Smrg# ifndef PATH_SEPARATOR_2 5875e96acad6Smrg# define PATH_SEPARATOR_2 ';' 5876e96acad6Smrg# endif 5877e96acad6Smrg#endif 5878dbbd9e4bSmacallan 5879e96acad6Smrg#ifndef DIR_SEPARATOR_2 5880e96acad6Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5881e96acad6Smrg#else /* DIR_SEPARATOR_2 */ 5882e96acad6Smrg# define IS_DIR_SEPARATOR(ch) \ 5883e96acad6Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5884e96acad6Smrg#endif /* DIR_SEPARATOR_2 */ 5885dbbd9e4bSmacallan 5886e96acad6Smrg#ifndef PATH_SEPARATOR_2 5887e96acad6Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5888e96acad6Smrg#else /* PATH_SEPARATOR_2 */ 5889e96acad6Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5890e96acad6Smrg#endif /* PATH_SEPARATOR_2 */ 5891dbbd9e4bSmacallan 5892e96acad6Smrg#ifndef FOPEN_WB 5893e96acad6Smrg# define FOPEN_WB "w" 5894e96acad6Smrg#endif 5895e96acad6Smrg#ifndef _O_BINARY 5896e96acad6Smrg# define _O_BINARY 0 5897e96acad6Smrg#endif 5898dbbd9e4bSmacallan 5899e96acad6Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5900e96acad6Smrg#define XFREE(stale) do { \ 5901cfa76ccdSmrg if (stale) { free (stale); stale = 0; } \ 5902e96acad6Smrg} while (0) 5903dbbd9e4bSmacallan 5904cfa76ccdSmrg#if defined LT_DEBUGWRAPPER 5905e96acad6Smrgstatic int lt_debug = 1; 5906e96acad6Smrg#else 5907e96acad6Smrgstatic int lt_debug = 0; 5908e96acad6Smrg#endif 5909dbbd9e4bSmacallan 5910e96acad6Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5911e96acad6Smrg 5912e96acad6Smrgvoid *xmalloc (size_t num); 5913e96acad6Smrgchar *xstrdup (const char *string); 5914e96acad6Smrgconst char *base_name (const char *name); 5915e96acad6Smrgchar *find_executable (const char *wrapper); 5916e96acad6Smrgchar *chase_symlinks (const char *pathspec); 5917e96acad6Smrgint make_executable (const char *path); 5918e96acad6Smrgint check_executable (const char *path); 5919e96acad6Smrgchar *strendzap (char *str, const char *pat); 5920e96acad6Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5921e96acad6Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 5922e96acad6Smrgstatic const char *nonnull (const char *s); 5923e96acad6Smrgstatic const char *nonempty (const char *s); 5924e96acad6Smrgvoid lt_setenv (const char *name, const char *value); 5925e96acad6Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5926e96acad6Smrgvoid lt_update_exe_path (const char *name, const char *value); 5927e96acad6Smrgvoid lt_update_lib_path (const char *name, const char *value); 5928e96acad6Smrgchar **prepare_spawn (char **argv); 5929e96acad6Smrgvoid lt_dump_script (FILE *f); 5930e96acad6SmrgEOF 5931dbbd9e4bSmacallan 5932e96acad6Smrg cat <<EOF 5933cfa76ccdSmrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5934cfa76ccdSmrg# define externally_visible volatile 5935cfa76ccdSmrg#else 5936cfa76ccdSmrg# define externally_visible __attribute__((externally_visible)) volatile 5937cfa76ccdSmrg#endif 5938cfa76ccdSmrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5939e96acad6Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5940e96acad6SmrgEOF 5941dbbd9e4bSmacallan 5942cfa76ccdSmrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5943e96acad6Smrg func_to_host_path "$temp_rpath" 5944e96acad6Smrg cat <<EOF 5945e96acad6Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5946e96acad6SmrgEOF 5947e96acad6Smrg else 5948e96acad6Smrg cat <<"EOF" 5949e96acad6Smrgconst char * LIB_PATH_VALUE = ""; 5950e96acad6SmrgEOF 5951e96acad6Smrg fi 5952dbbd9e4bSmacallan 5953e96acad6Smrg if test -n "$dllsearchpath"; then 5954e96acad6Smrg func_to_host_path "$dllsearchpath:" 5955e96acad6Smrg cat <<EOF 5956e96acad6Smrgconst char * EXE_PATH_VARNAME = "PATH"; 5957e96acad6Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5958e96acad6SmrgEOF 5959e96acad6Smrg else 5960e96acad6Smrg cat <<"EOF" 5961e96acad6Smrgconst char * EXE_PATH_VARNAME = ""; 5962e96acad6Smrgconst char * EXE_PATH_VALUE = ""; 5963e96acad6SmrgEOF 5964e96acad6Smrg fi 5965dbbd9e4bSmacallan 5966cfa76ccdSmrg if test yes = "$fast_install"; then 5967e96acad6Smrg cat <<EOF 5968e96acad6Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5969e96acad6SmrgEOF 5970e96acad6Smrg else 5971e96acad6Smrg cat <<EOF 5972e96acad6Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5973e96acad6SmrgEOF 5974e96acad6Smrg fi 5975dbbd9e4bSmacallan 5976dbbd9e4bSmacallan 5977e96acad6Smrg cat <<"EOF" 5978dbbd9e4bSmacallan 5979e96acad6Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 5980dbbd9e4bSmacallan 5981e96acad6Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5982e96acad6Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5983e96acad6Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5984e96acad6Smrg 5985e96acad6Smrgint 5986e96acad6Smrgmain (int argc, char *argv[]) 5987e96acad6Smrg{ 5988e96acad6Smrg char **newargz; 5989e96acad6Smrg int newargc; 5990e96acad6Smrg char *tmp_pathspec; 5991e96acad6Smrg char *actual_cwrapper_path; 5992e96acad6Smrg char *actual_cwrapper_name; 5993e96acad6Smrg char *target_name; 5994e96acad6Smrg char *lt_argv_zero; 5995cfa76ccdSmrg int rval = 127; 5996e96acad6Smrg 5997e96acad6Smrg int i; 5998e96acad6Smrg 5999e96acad6Smrg program_name = (char *) xstrdup (base_name (argv[0])); 6000cfa76ccdSmrg newargz = XMALLOC (char *, (size_t) argc + 1); 6001e96acad6Smrg 6002e96acad6Smrg /* very simple arg parsing; don't want to rely on getopt 6003e96acad6Smrg * also, copy all non cwrapper options to newargz, except 6004e96acad6Smrg * argz[0], which is handled differently 6005e96acad6Smrg */ 6006e96acad6Smrg newargc=0; 6007e96acad6Smrg for (i = 1; i < argc; i++) 6008e96acad6Smrg { 6009cfa76ccdSmrg if (STREQ (argv[i], dumpscript_opt)) 6010e96acad6Smrg { 6011e96acad6SmrgEOF 6012cfa76ccdSmrg case $host in 6013e96acad6Smrg *mingw* | *cygwin* ) 6014e96acad6Smrg # make stdout use "unix" line endings 6015e96acad6Smrg echo " setmode(1,_O_BINARY);" 6016dbbd9e4bSmacallan ;; 6017dbbd9e4bSmacallan esac 6018dbbd9e4bSmacallan 6019e96acad6Smrg cat <<"EOF" 6020e96acad6Smrg lt_dump_script (stdout); 6021e96acad6Smrg return 0; 6022e96acad6Smrg } 6023cfa76ccdSmrg if (STREQ (argv[i], debug_opt)) 6024e96acad6Smrg { 6025e96acad6Smrg lt_debug = 1; 6026e96acad6Smrg continue; 6027e96acad6Smrg } 6028cfa76ccdSmrg if (STREQ (argv[i], ltwrapper_option_prefix)) 6029e96acad6Smrg { 6030e96acad6Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 6031e96acad6Smrg namespace, but it is not one of the ones we know about and 6032e96acad6Smrg have already dealt with, above (inluding dump-script), then 6033e96acad6Smrg report an error. Otherwise, targets might begin to believe 6034e96acad6Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 6035e96acad6Smrg namespace. The first time any user complains about this, we'll 6036e96acad6Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 6037e96acad6Smrg or a configure.ac-settable value. 6038e96acad6Smrg */ 6039e96acad6Smrg lt_fatal (__FILE__, __LINE__, 6040e96acad6Smrg "unrecognized %s option: '%s'", 6041e96acad6Smrg ltwrapper_option_prefix, argv[i]); 6042e96acad6Smrg } 6043e96acad6Smrg /* otherwise ... */ 6044e96acad6Smrg newargz[++newargc] = xstrdup (argv[i]); 6045e96acad6Smrg } 6046e96acad6Smrg newargz[++newargc] = NULL; 6047dbbd9e4bSmacallan 6048e96acad6SmrgEOF 6049e96acad6Smrg cat <<EOF 6050e96acad6Smrg /* The GNU banner must be the first non-error debug message */ 6051cfa76ccdSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 6052e96acad6SmrgEOF 6053e96acad6Smrg cat <<"EOF" 6054e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 6055e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 6056e96acad6Smrg 6057e96acad6Smrg tmp_pathspec = find_executable (argv[0]); 6058e96acad6Smrg if (tmp_pathspec == NULL) 6059e96acad6Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 6060e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6061e96acad6Smrg "(main) found exe (before symlink chase) at: %s\n", 6062e96acad6Smrg tmp_pathspec); 6063e96acad6Smrg 6064e96acad6Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 6065e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6066e96acad6Smrg "(main) found exe (after symlink chase) at: %s\n", 6067e96acad6Smrg actual_cwrapper_path); 6068e96acad6Smrg XFREE (tmp_pathspec); 6069e96acad6Smrg 6070e96acad6Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 6071e96acad6Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 6072e96acad6Smrg 6073e96acad6Smrg /* wrapper name transforms */ 6074e96acad6Smrg strendzap (actual_cwrapper_name, ".exe"); 6075e96acad6Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 6076e96acad6Smrg XFREE (actual_cwrapper_name); 6077e96acad6Smrg actual_cwrapper_name = tmp_pathspec; 6078e96acad6Smrg tmp_pathspec = 0; 6079e96acad6Smrg 6080e96acad6Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 6081e96acad6Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 6082e96acad6Smrg strendzap (target_name, ".exe"); 6083e96acad6Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 6084e96acad6Smrg XFREE (target_name); 6085e96acad6Smrg target_name = tmp_pathspec; 6086e96acad6Smrg tmp_pathspec = 0; 6087e96acad6Smrg 6088e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6089e96acad6Smrg "(main) libtool target name: %s\n", 6090e96acad6Smrg target_name); 6091e96acad6SmrgEOF 6092dbbd9e4bSmacallan 6093e96acad6Smrg cat <<EOF 6094e96acad6Smrg newargz[0] = 6095e96acad6Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 6096e96acad6Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 6097e96acad6Smrg strcpy (newargz[0], actual_cwrapper_path); 6098e96acad6Smrg strcat (newargz[0], "$objdir"); 6099e96acad6Smrg strcat (newargz[0], "/"); 6100e96acad6SmrgEOF 6101dbbd9e4bSmacallan 6102e96acad6Smrg cat <<"EOF" 6103e96acad6Smrg /* stop here, and copy so we don't have to do this twice */ 6104e96acad6Smrg tmp_pathspec = xstrdup (newargz[0]); 6105dbbd9e4bSmacallan 6106e96acad6Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 6107e96acad6Smrg strcat (newargz[0], actual_cwrapper_name); 6108dbbd9e4bSmacallan 6109e96acad6Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 6110e96acad6Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 6111e96acad6Smrg XFREE (tmp_pathspec); 6112e96acad6Smrg tmp_pathspec = NULL; 6113e96acad6SmrgEOF 6114dbbd9e4bSmacallan 6115e96acad6Smrg case $host_os in 6116e96acad6Smrg mingw*) 6117e96acad6Smrg cat <<"EOF" 6118e96acad6Smrg { 6119e96acad6Smrg char* p; 6120e96acad6Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 6121e96acad6Smrg { 6122e96acad6Smrg *p = '/'; 6123e96acad6Smrg } 6124e96acad6Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 6125e96acad6Smrg { 6126e96acad6Smrg *p = '/'; 6127e96acad6Smrg } 6128e96acad6Smrg } 6129e96acad6SmrgEOF 6130e96acad6Smrg ;; 6131e96acad6Smrg esac 6132dbbd9e4bSmacallan 6133e96acad6Smrg cat <<"EOF" 6134e96acad6Smrg XFREE (target_name); 6135e96acad6Smrg XFREE (actual_cwrapper_path); 6136e96acad6Smrg XFREE (actual_cwrapper_name); 6137e96acad6Smrg 6138e96acad6Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 6139e96acad6Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 6140e96acad6Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 6141e96acad6Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 6142e96acad6Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 6143e96acad6Smrg libraries must come first. */ 6144e96acad6Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 6145e96acad6Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 6146e96acad6Smrg 6147e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 6148e96acad6Smrg nonnull (lt_argv_zero)); 6149e96acad6Smrg for (i = 0; i < newargc; i++) 6150e96acad6Smrg { 6151e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 6152e96acad6Smrg i, nonnull (newargz[i])); 6153e96acad6Smrg } 6154dbbd9e4bSmacallan 6155e96acad6SmrgEOF 6156dbbd9e4bSmacallan 6157e96acad6Smrg case $host_os in 6158e96acad6Smrg mingw*) 6159e96acad6Smrg cat <<"EOF" 6160e96acad6Smrg /* execv doesn't actually work on mingw as expected on unix */ 6161e96acad6Smrg newargz = prepare_spawn (newargz); 6162cfa76ccdSmrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 6163e96acad6Smrg if (rval == -1) 6164e96acad6Smrg { 6165e96acad6Smrg /* failed to start process */ 6166e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6167e96acad6Smrg "(main) failed to launch target \"%s\": %s\n", 6168e96acad6Smrg lt_argv_zero, nonnull (strerror (errno))); 6169e96acad6Smrg return 127; 6170e96acad6Smrg } 6171e96acad6Smrg return rval; 6172e96acad6SmrgEOF 6173e96acad6Smrg ;; 6174e96acad6Smrg *) 6175e96acad6Smrg cat <<"EOF" 6176e96acad6Smrg execv (lt_argv_zero, newargz); 6177e96acad6Smrg return rval; /* =127, but avoids unused variable warning */ 6178e96acad6SmrgEOF 6179e96acad6Smrg ;; 6180e96acad6Smrg esac 6181dbbd9e4bSmacallan 6182e96acad6Smrg cat <<"EOF" 6183e96acad6Smrg} 6184dbbd9e4bSmacallan 6185e96acad6Smrgvoid * 6186e96acad6Smrgxmalloc (size_t num) 6187e96acad6Smrg{ 6188e96acad6Smrg void *p = (void *) malloc (num); 6189e96acad6Smrg if (!p) 6190e96acad6Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 6191dbbd9e4bSmacallan 6192e96acad6Smrg return p; 6193e96acad6Smrg} 6194dbbd9e4bSmacallan 6195e96acad6Smrgchar * 6196e96acad6Smrgxstrdup (const char *string) 6197e96acad6Smrg{ 6198e96acad6Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 6199e96acad6Smrg string) : NULL; 6200e96acad6Smrg} 6201dbbd9e4bSmacallan 6202e96acad6Smrgconst char * 6203e96acad6Smrgbase_name (const char *name) 6204e96acad6Smrg{ 6205e96acad6Smrg const char *base; 6206dbbd9e4bSmacallan 6207cfa76ccdSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6208e96acad6Smrg /* Skip over the disk name in MSDOS pathnames. */ 6209e96acad6Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 6210e96acad6Smrg name += 2; 6211e96acad6Smrg#endif 6212dbbd9e4bSmacallan 6213e96acad6Smrg for (base = name; *name; name++) 6214e96acad6Smrg if (IS_DIR_SEPARATOR (*name)) 6215e96acad6Smrg base = name + 1; 6216e96acad6Smrg return base; 6217e96acad6Smrg} 6218dbbd9e4bSmacallan 6219e96acad6Smrgint 6220e96acad6Smrgcheck_executable (const char *path) 6221e96acad6Smrg{ 6222e96acad6Smrg struct stat st; 6223dbbd9e4bSmacallan 6224e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 6225e96acad6Smrg nonempty (path)); 6226e96acad6Smrg if ((!path) || (!*path)) 6227e96acad6Smrg return 0; 6228dbbd9e4bSmacallan 6229e96acad6Smrg if ((stat (path, &st) >= 0) 6230e96acad6Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 6231e96acad6Smrg return 1; 6232e96acad6Smrg else 6233e96acad6Smrg return 0; 6234e96acad6Smrg} 6235dbbd9e4bSmacallan 6236e96acad6Smrgint 6237e96acad6Smrgmake_executable (const char *path) 6238e96acad6Smrg{ 6239e96acad6Smrg int rval = 0; 6240e96acad6Smrg struct stat st; 6241dbbd9e4bSmacallan 6242e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 6243e96acad6Smrg nonempty (path)); 6244e96acad6Smrg if ((!path) || (!*path)) 6245e96acad6Smrg return 0; 6246dbbd9e4bSmacallan 6247e96acad6Smrg if (stat (path, &st) >= 0) 6248e96acad6Smrg { 6249e96acad6Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 6250e96acad6Smrg } 6251e96acad6Smrg return rval; 6252e96acad6Smrg} 6253dbbd9e4bSmacallan 6254e96acad6Smrg/* Searches for the full path of the wrapper. Returns 6255e96acad6Smrg newly allocated full path name if found, NULL otherwise 6256e96acad6Smrg Does not chase symlinks, even on platforms that support them. 6257e96acad6Smrg*/ 6258e96acad6Smrgchar * 6259e96acad6Smrgfind_executable (const char *wrapper) 6260e96acad6Smrg{ 6261e96acad6Smrg int has_slash = 0; 6262e96acad6Smrg const char *p; 6263e96acad6Smrg const char *p_next; 6264e96acad6Smrg /* static buffer for getcwd */ 6265e96acad6Smrg char tmp[LT_PATHMAX + 1]; 6266cfa76ccdSmrg size_t tmp_len; 6267e96acad6Smrg char *concat_name; 6268dbbd9e4bSmacallan 6269e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6270e96acad6Smrg nonempty (wrapper)); 6271dbbd9e4bSmacallan 6272e96acad6Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 6273e96acad6Smrg return NULL; 6274dbbd9e4bSmacallan 6275e96acad6Smrg /* Absolute path? */ 6276cfa76ccdSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6277e96acad6Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6278e96acad6Smrg { 6279e96acad6Smrg concat_name = xstrdup (wrapper); 6280e96acad6Smrg if (check_executable (concat_name)) 6281e96acad6Smrg return concat_name; 6282e96acad6Smrg XFREE (concat_name); 6283e96acad6Smrg } 6284e96acad6Smrg else 6285e96acad6Smrg { 6286e96acad6Smrg#endif 6287e96acad6Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 6288e96acad6Smrg { 6289e96acad6Smrg concat_name = xstrdup (wrapper); 6290e96acad6Smrg if (check_executable (concat_name)) 6291e96acad6Smrg return concat_name; 6292e96acad6Smrg XFREE (concat_name); 6293e96acad6Smrg } 6294cfa76ccdSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6295e96acad6Smrg } 6296e96acad6Smrg#endif 6297dbbd9e4bSmacallan 6298e96acad6Smrg for (p = wrapper; *p; p++) 6299e96acad6Smrg if (*p == '/') 6300e96acad6Smrg { 6301e96acad6Smrg has_slash = 1; 6302e96acad6Smrg break; 6303e96acad6Smrg } 6304e96acad6Smrg if (!has_slash) 6305e96acad6Smrg { 6306e96acad6Smrg /* no slashes; search PATH */ 6307e96acad6Smrg const char *path = getenv ("PATH"); 6308e96acad6Smrg if (path != NULL) 6309e96acad6Smrg { 6310e96acad6Smrg for (p = path; *p; p = p_next) 6311e96acad6Smrg { 6312e96acad6Smrg const char *q; 6313e96acad6Smrg size_t p_len; 6314e96acad6Smrg for (q = p; *q; q++) 6315e96acad6Smrg if (IS_PATH_SEPARATOR (*q)) 6316e96acad6Smrg break; 6317cfa76ccdSmrg p_len = (size_t) (q - p); 6318e96acad6Smrg p_next = (*q == '\0' ? q : q + 1); 6319e96acad6Smrg if (p_len == 0) 6320e96acad6Smrg { 6321e96acad6Smrg /* empty path: current directory */ 6322e96acad6Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6323e96acad6Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6324e96acad6Smrg nonnull (strerror (errno))); 6325e96acad6Smrg tmp_len = strlen (tmp); 6326e96acad6Smrg concat_name = 6327e96acad6Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6328e96acad6Smrg memcpy (concat_name, tmp, tmp_len); 6329e96acad6Smrg concat_name[tmp_len] = '/'; 6330e96acad6Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6331e96acad6Smrg } 6332e96acad6Smrg else 6333e96acad6Smrg { 6334e96acad6Smrg concat_name = 6335e96acad6Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6336e96acad6Smrg memcpy (concat_name, p, p_len); 6337e96acad6Smrg concat_name[p_len] = '/'; 6338e96acad6Smrg strcpy (concat_name + p_len + 1, wrapper); 6339e96acad6Smrg } 6340e96acad6Smrg if (check_executable (concat_name)) 6341e96acad6Smrg return concat_name; 6342e96acad6Smrg XFREE (concat_name); 6343e96acad6Smrg } 6344e96acad6Smrg } 6345e96acad6Smrg /* not found in PATH; assume curdir */ 6346e96acad6Smrg } 6347e96acad6Smrg /* Relative path | not found in path: prepend cwd */ 6348e96acad6Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6349e96acad6Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6350e96acad6Smrg nonnull (strerror (errno))); 6351e96acad6Smrg tmp_len = strlen (tmp); 6352e96acad6Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6353e96acad6Smrg memcpy (concat_name, tmp, tmp_len); 6354e96acad6Smrg concat_name[tmp_len] = '/'; 6355e96acad6Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6356e96acad6Smrg 6357e96acad6Smrg if (check_executable (concat_name)) 6358e96acad6Smrg return concat_name; 6359e96acad6Smrg XFREE (concat_name); 6360e96acad6Smrg return NULL; 6361dbbd9e4bSmacallan} 6362dbbd9e4bSmacallan 6363e96acad6Smrgchar * 6364e96acad6Smrgchase_symlinks (const char *pathspec) 6365e96acad6Smrg{ 6366e96acad6Smrg#ifndef S_ISLNK 6367e96acad6Smrg return xstrdup (pathspec); 6368e96acad6Smrg#else 6369e96acad6Smrg char buf[LT_PATHMAX]; 6370e96acad6Smrg struct stat s; 6371e96acad6Smrg char *tmp_pathspec = xstrdup (pathspec); 6372e96acad6Smrg char *p; 6373e96acad6Smrg int has_symlinks = 0; 6374e96acad6Smrg while (strlen (tmp_pathspec) && !has_symlinks) 6375e96acad6Smrg { 6376e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6377e96acad6Smrg "checking path component for symlinks: %s\n", 6378e96acad6Smrg tmp_pathspec); 6379e96acad6Smrg if (lstat (tmp_pathspec, &s) == 0) 6380e96acad6Smrg { 6381e96acad6Smrg if (S_ISLNK (s.st_mode) != 0) 6382e96acad6Smrg { 6383e96acad6Smrg has_symlinks = 1; 6384e96acad6Smrg break; 6385e96acad6Smrg } 6386dbbd9e4bSmacallan 6387e96acad6Smrg /* search backwards for last DIR_SEPARATOR */ 6388e96acad6Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6389e96acad6Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6390e96acad6Smrg p--; 6391e96acad6Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6392e96acad6Smrg { 6393e96acad6Smrg /* no more DIR_SEPARATORS left */ 6394e96acad6Smrg break; 6395e96acad6Smrg } 6396e96acad6Smrg *p = '\0'; 6397e96acad6Smrg } 6398e96acad6Smrg else 6399e96acad6Smrg { 6400e96acad6Smrg lt_fatal (__FILE__, __LINE__, 6401e96acad6Smrg "error accessing file \"%s\": %s", 6402e96acad6Smrg tmp_pathspec, nonnull (strerror (errno))); 6403e96acad6Smrg } 6404e96acad6Smrg } 6405e96acad6Smrg XFREE (tmp_pathspec); 6406dbbd9e4bSmacallan 6407e96acad6Smrg if (!has_symlinks) 6408e96acad6Smrg { 6409e96acad6Smrg return xstrdup (pathspec); 6410e96acad6Smrg } 6411dbbd9e4bSmacallan 6412e96acad6Smrg tmp_pathspec = realpath (pathspec, buf); 6413e96acad6Smrg if (tmp_pathspec == 0) 6414e96acad6Smrg { 6415e96acad6Smrg lt_fatal (__FILE__, __LINE__, 6416e96acad6Smrg "could not follow symlinks for %s", pathspec); 6417e96acad6Smrg } 6418e96acad6Smrg return xstrdup (tmp_pathspec); 6419e96acad6Smrg#endif 6420dbbd9e4bSmacallan} 6421dbbd9e4bSmacallan 6422e96acad6Smrgchar * 6423e96acad6Smrgstrendzap (char *str, const char *pat) 6424e96acad6Smrg{ 6425e96acad6Smrg size_t len, patlen; 6426dbbd9e4bSmacallan 6427e96acad6Smrg assert (str != NULL); 6428e96acad6Smrg assert (pat != NULL); 6429dbbd9e4bSmacallan 6430e96acad6Smrg len = strlen (str); 6431e96acad6Smrg patlen = strlen (pat); 6432dbbd9e4bSmacallan 6433e96acad6Smrg if (patlen <= len) 6434e96acad6Smrg { 6435e96acad6Smrg str += len - patlen; 6436cfa76ccdSmrg if (STREQ (str, pat)) 6437e96acad6Smrg *str = '\0'; 6438e96acad6Smrg } 6439e96acad6Smrg return str; 6440e96acad6Smrg} 6441dbbd9e4bSmacallan 6442e96acad6Smrgvoid 6443e96acad6Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 6444e96acad6Smrg{ 6445e96acad6Smrg va_list args; 6446e96acad6Smrg if (lt_debug) 6447e96acad6Smrg { 6448e96acad6Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6449e96acad6Smrg va_start (args, fmt); 6450e96acad6Smrg (void) vfprintf (stderr, fmt, args); 6451e96acad6Smrg va_end (args); 6452e96acad6Smrg } 6453e96acad6Smrg} 6454dbbd9e4bSmacallan 6455e96acad6Smrgstatic void 6456e96acad6Smrglt_error_core (int exit_status, const char *file, 6457e96acad6Smrg int line, const char *mode, 6458e96acad6Smrg const char *message, va_list ap) 6459e96acad6Smrg{ 6460e96acad6Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6461e96acad6Smrg vfprintf (stderr, message, ap); 6462e96acad6Smrg fprintf (stderr, ".\n"); 6463dbbd9e4bSmacallan 6464e96acad6Smrg if (exit_status >= 0) 6465e96acad6Smrg exit (exit_status); 6466e96acad6Smrg} 6467dbbd9e4bSmacallan 6468e96acad6Smrgvoid 6469e96acad6Smrglt_fatal (const char *file, int line, const char *message, ...) 6470e96acad6Smrg{ 6471e96acad6Smrg va_list ap; 6472e96acad6Smrg va_start (ap, message); 6473e96acad6Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6474e96acad6Smrg va_end (ap); 6475e96acad6Smrg} 6476dbbd9e4bSmacallan 6477e96acad6Smrgstatic const char * 6478e96acad6Smrgnonnull (const char *s) 6479e96acad6Smrg{ 6480e96acad6Smrg return s ? s : "(null)"; 6481e96acad6Smrg} 6482dbbd9e4bSmacallan 6483e96acad6Smrgstatic const char * 6484e96acad6Smrgnonempty (const char *s) 6485e96acad6Smrg{ 6486e96acad6Smrg return (s && !*s) ? "(empty)" : nonnull (s); 6487e96acad6Smrg} 6488dbbd9e4bSmacallan 6489e96acad6Smrgvoid 6490e96acad6Smrglt_setenv (const char *name, const char *value) 6491e96acad6Smrg{ 6492e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6493e96acad6Smrg "(lt_setenv) setting '%s' to '%s'\n", 6494e96acad6Smrg nonnull (name), nonnull (value)); 6495e96acad6Smrg { 6496e96acad6Smrg#ifdef HAVE_SETENV 6497e96acad6Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 6498e96acad6Smrg char *str = xstrdup (value); 6499e96acad6Smrg setenv (name, str, 1); 6500dbbd9e4bSmacallan#else 6501cfa76ccdSmrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6502e96acad6Smrg char *str = XMALLOC (char, len); 6503e96acad6Smrg sprintf (str, "%s=%s", name, value); 6504e96acad6Smrg if (putenv (str) != EXIT_SUCCESS) 6505e96acad6Smrg { 6506e96acad6Smrg XFREE (str); 6507e96acad6Smrg } 6508dbbd9e4bSmacallan#endif 6509e96acad6Smrg } 6510e96acad6Smrg} 6511dbbd9e4bSmacallan 6512e96acad6Smrgchar * 6513e96acad6Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 6514e96acad6Smrg{ 6515e96acad6Smrg char *new_value; 6516e96acad6Smrg if (orig_value && *orig_value) 6517e96acad6Smrg { 6518cfa76ccdSmrg size_t orig_value_len = strlen (orig_value); 6519cfa76ccdSmrg size_t add_len = strlen (add); 6520e96acad6Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6521e96acad6Smrg if (to_end) 6522e96acad6Smrg { 6523e96acad6Smrg strcpy (new_value, orig_value); 6524e96acad6Smrg strcpy (new_value + orig_value_len, add); 6525e96acad6Smrg } 6526e96acad6Smrg else 6527e96acad6Smrg { 6528e96acad6Smrg strcpy (new_value, add); 6529e96acad6Smrg strcpy (new_value + add_len, orig_value); 6530e96acad6Smrg } 6531e96acad6Smrg } 6532e96acad6Smrg else 6533e96acad6Smrg { 6534e96acad6Smrg new_value = xstrdup (add); 6535e96acad6Smrg } 6536e96acad6Smrg return new_value; 6537e96acad6Smrg} 6538dbbd9e4bSmacallan 6539e96acad6Smrgvoid 6540e96acad6Smrglt_update_exe_path (const char *name, const char *value) 6541e96acad6Smrg{ 6542e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6543e96acad6Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6544e96acad6Smrg nonnull (name), nonnull (value)); 6545dbbd9e4bSmacallan 6546e96acad6Smrg if (name && *name && value && *value) 6547e96acad6Smrg { 6548e96acad6Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6549e96acad6Smrg /* some systems can't cope with a ':'-terminated path #' */ 6550cfa76ccdSmrg size_t len = strlen (new_value); 6551cfa76ccdSmrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6552e96acad6Smrg { 6553cfa76ccdSmrg new_value[--len] = '\0'; 6554e96acad6Smrg } 6555e96acad6Smrg lt_setenv (name, new_value); 6556e96acad6Smrg XFREE (new_value); 6557e96acad6Smrg } 6558e96acad6Smrg} 6559dbbd9e4bSmacallan 6560e96acad6Smrgvoid 6561e96acad6Smrglt_update_lib_path (const char *name, const char *value) 6562dbbd9e4bSmacallan{ 6563e96acad6Smrg lt_debugprintf (__FILE__, __LINE__, 6564e96acad6Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6565e96acad6Smrg nonnull (name), nonnull (value)); 6566dbbd9e4bSmacallan 6567e96acad6Smrg if (name && *name && value && *value) 6568e96acad6Smrg { 6569e96acad6Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 6570e96acad6Smrg lt_setenv (name, new_value); 6571e96acad6Smrg XFREE (new_value); 6572e96acad6Smrg } 6573e96acad6Smrg} 6574dbbd9e4bSmacallan 6575dbbd9e4bSmacallanEOF 6576e96acad6Smrg case $host_os in 6577e96acad6Smrg mingw*) 6578e96acad6Smrg cat <<"EOF" 6579e96acad6Smrg 6580e96acad6Smrg/* Prepares an argument vector before calling spawn(). 6581e96acad6Smrg Note that spawn() does not by itself call the command interpreter 6582e96acad6Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6583e96acad6Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6584e96acad6Smrg GetVersionEx(&v); 6585e96acad6Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6586e96acad6Smrg }) ? "cmd.exe" : "command.com"). 6587e96acad6Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 6588e96acad6Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6589e96acad6Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6590e96acad6Smrg special way: 6591e96acad6Smrg - Space and tab are interpreted as delimiters. They are not treated as 6592e96acad6Smrg delimiters if they are surrounded by double quotes: "...". 6593e96acad6Smrg - Unescaped double quotes are removed from the input. Their only effect is 6594e96acad6Smrg that within double quotes, space and tab are treated like normal 6595e96acad6Smrg characters. 6596e96acad6Smrg - Backslashes not followed by double quotes are not special. 6597e96acad6Smrg - But 2*n+1 backslashes followed by a double quote become 6598e96acad6Smrg n backslashes followed by a double quote (n >= 0): 6599e96acad6Smrg \" -> " 6600e96acad6Smrg \\\" -> \" 6601e96acad6Smrg \\\\\" -> \\" 6602e96acad6Smrg */ 6603e96acad6Smrg#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" 6604e96acad6Smrg#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" 6605e96acad6Smrgchar ** 6606e96acad6Smrgprepare_spawn (char **argv) 6607e96acad6Smrg{ 6608e96acad6Smrg size_t argc; 6609e96acad6Smrg char **new_argv; 6610e96acad6Smrg size_t i; 6611dbbd9e4bSmacallan 6612e96acad6Smrg /* Count number of arguments. */ 6613e96acad6Smrg for (argc = 0; argv[argc] != NULL; argc++) 6614dbbd9e4bSmacallan ; 6615dbbd9e4bSmacallan 6616e96acad6Smrg /* Allocate new argument vector. */ 6617e96acad6Smrg new_argv = XMALLOC (char *, argc + 1); 6618dbbd9e4bSmacallan 6619e96acad6Smrg /* Put quoted arguments into the new argument vector. */ 6620e96acad6Smrg for (i = 0; i < argc; i++) 6621e96acad6Smrg { 6622e96acad6Smrg const char *string = argv[i]; 6623e96acad6Smrg 6624e96acad6Smrg if (string[0] == '\0') 6625e96acad6Smrg new_argv[i] = xstrdup ("\"\""); 6626e96acad6Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6627e96acad6Smrg { 6628e96acad6Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6629e96acad6Smrg size_t length; 6630e96acad6Smrg unsigned int backslashes; 6631e96acad6Smrg const char *s; 6632e96acad6Smrg char *quoted_string; 6633e96acad6Smrg char *p; 6634e96acad6Smrg 6635e96acad6Smrg length = 0; 6636e96acad6Smrg backslashes = 0; 6637e96acad6Smrg if (quote_around) 6638e96acad6Smrg length++; 6639e96acad6Smrg for (s = string; *s != '\0'; s++) 6640e96acad6Smrg { 6641e96acad6Smrg char c = *s; 6642e96acad6Smrg if (c == '"') 6643e96acad6Smrg length += backslashes + 1; 6644e96acad6Smrg length++; 6645e96acad6Smrg if (c == '\\') 6646e96acad6Smrg backslashes++; 6647e96acad6Smrg else 6648e96acad6Smrg backslashes = 0; 6649e96acad6Smrg } 6650e96acad6Smrg if (quote_around) 6651e96acad6Smrg length += backslashes + 1; 6652e96acad6Smrg 6653e96acad6Smrg quoted_string = XMALLOC (char, length + 1); 6654e96acad6Smrg 6655e96acad6Smrg p = quoted_string; 6656e96acad6Smrg backslashes = 0; 6657e96acad6Smrg if (quote_around) 6658e96acad6Smrg *p++ = '"'; 6659e96acad6Smrg for (s = string; *s != '\0'; s++) 6660e96acad6Smrg { 6661e96acad6Smrg char c = *s; 6662e96acad6Smrg if (c == '"') 6663e96acad6Smrg { 6664e96acad6Smrg unsigned int j; 6665e96acad6Smrg for (j = backslashes + 1; j > 0; j--) 6666e96acad6Smrg *p++ = '\\'; 6667e96acad6Smrg } 6668e96acad6Smrg *p++ = c; 6669e96acad6Smrg if (c == '\\') 6670e96acad6Smrg backslashes++; 6671e96acad6Smrg else 6672e96acad6Smrg backslashes = 0; 6673e96acad6Smrg } 6674e96acad6Smrg if (quote_around) 6675e96acad6Smrg { 6676e96acad6Smrg unsigned int j; 6677e96acad6Smrg for (j = backslashes; j > 0; j--) 6678e96acad6Smrg *p++ = '\\'; 6679e96acad6Smrg *p++ = '"'; 6680e96acad6Smrg } 6681e96acad6Smrg *p = '\0'; 6682e96acad6Smrg 6683e96acad6Smrg new_argv[i] = quoted_string; 6684e96acad6Smrg } 6685e96acad6Smrg else 6686e96acad6Smrg new_argv[i] = (char *) string; 6687e96acad6Smrg } 6688e96acad6Smrg new_argv[argc] = NULL; 6689dbbd9e4bSmacallan 6690e96acad6Smrg return new_argv; 6691dbbd9e4bSmacallan} 6692e96acad6SmrgEOF 6693e96acad6Smrg ;; 6694e96acad6Smrg esac 6695dbbd9e4bSmacallan 6696e96acad6Smrg cat <<"EOF" 6697e96acad6Smrgvoid lt_dump_script (FILE* f) 6698dbbd9e4bSmacallan{ 6699e96acad6SmrgEOF 6700e96acad6Smrg func_emit_wrapper yes | 6701cfa76ccdSmrg $SED -n -e ' 6702cfa76ccdSmrgs/^\(.\{79\}\)\(..*\)/\1\ 6703cfa76ccdSmrg\2/ 6704cfa76ccdSmrgh 6705cfa76ccdSmrgs/\([\\"]\)/\\\1/g 6706cfa76ccdSmrgs/$/\\n/ 6707cfa76ccdSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6708cfa76ccdSmrgg 6709cfa76ccdSmrgD' 6710e96acad6Smrg cat <<"EOF" 6711dbbd9e4bSmacallan} 6712e96acad6SmrgEOF 6713dbbd9e4bSmacallan} 6714e96acad6Smrg# end: func_emit_cwrapperexe_src 6715dbbd9e4bSmacallan 6716e96acad6Smrg# func_win32_import_lib_p ARG 6717e96acad6Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 6718e96acad6Smrgfunc_win32_import_lib_p () 6719dbbd9e4bSmacallan{ 6720cfa76ccdSmrg $debug_cmd 6721cfa76ccdSmrg 6722e96acad6Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6723e96acad6Smrg *import*) : ;; 6724e96acad6Smrg *) false ;; 6725e96acad6Smrg esac 6726dbbd9e4bSmacallan} 6727dbbd9e4bSmacallan 6728cfa76ccdSmrg# func_suncc_cstd_abi 6729cfa76ccdSmrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6730cfa76ccdSmrg# Several compiler flags select an ABI that is incompatible with the 6731cfa76ccdSmrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6732cfa76ccdSmrgfunc_suncc_cstd_abi () 6733cfa76ccdSmrg{ 6734cfa76ccdSmrg $debug_cmd 6735cfa76ccdSmrg 6736cfa76ccdSmrg case " $compile_command " in 6737cfa76ccdSmrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6738cfa76ccdSmrg suncc_use_cstd_abi=no 6739cfa76ccdSmrg ;; 6740cfa76ccdSmrg *) 6741cfa76ccdSmrg suncc_use_cstd_abi=yes 6742cfa76ccdSmrg ;; 6743cfa76ccdSmrg esac 6744cfa76ccdSmrg} 6745cfa76ccdSmrg 6746e96acad6Smrg# func_mode_link arg... 6747e96acad6Smrgfunc_mode_link () 6748dbbd9e4bSmacallan{ 6749cfa76ccdSmrg $debug_cmd 6750cfa76ccdSmrg 6751e96acad6Smrg case $host in 6752e96acad6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6753e96acad6Smrg # It is impossible to link a dll without this setting, and 6754e96acad6Smrg # we shouldn't force the makefile maintainer to figure out 6755cfa76ccdSmrg # what system we are compiling for in order to pass an extra 6756e96acad6Smrg # flag for every libtool invocation. 6757e96acad6Smrg # allow_undefined=no 6758dbbd9e4bSmacallan 6759e96acad6Smrg # FIXME: Unfortunately, there are problems with the above when trying 6760cfa76ccdSmrg # to make a dll that has undefined symbols, in which case not 6761e96acad6Smrg # even a static library is built. For now, we need to specify 6762e96acad6Smrg # -no-undefined on the libtool link line when we can be certain 6763e96acad6Smrg # that all symbols are satisfied, otherwise we get a static library. 6764e96acad6Smrg allow_undefined=yes 6765e96acad6Smrg ;; 6766e96acad6Smrg *) 6767e96acad6Smrg allow_undefined=yes 6768e96acad6Smrg ;; 6769e96acad6Smrg esac 6770e96acad6Smrg libtool_args=$nonopt 6771e96acad6Smrg base_compile="$nonopt $@" 6772e96acad6Smrg compile_command=$nonopt 6773e96acad6Smrg finalize_command=$nonopt 6774dbbd9e4bSmacallan 6775e96acad6Smrg compile_rpath= 6776e96acad6Smrg finalize_rpath= 6777e96acad6Smrg compile_shlibpath= 6778e96acad6Smrg finalize_shlibpath= 6779e96acad6Smrg convenience= 6780e96acad6Smrg old_convenience= 6781e96acad6Smrg deplibs= 6782e96acad6Smrg old_deplibs= 6783e96acad6Smrg compiler_flags= 6784e96acad6Smrg linker_flags= 6785e96acad6Smrg dllsearchpath= 6786e96acad6Smrg lib_search_path=`pwd` 6787e96acad6Smrg inst_prefix_dir= 6788e96acad6Smrg new_inherited_linker_flags= 6789dbbd9e4bSmacallan 6790e96acad6Smrg avoid_version=no 6791e96acad6Smrg bindir= 6792e96acad6Smrg dlfiles= 6793e96acad6Smrg dlprefiles= 6794e96acad6Smrg dlself=no 6795e96acad6Smrg export_dynamic=no 6796e96acad6Smrg export_symbols= 6797e96acad6Smrg export_symbols_regex= 6798e96acad6Smrg generated= 6799e96acad6Smrg libobjs= 6800e96acad6Smrg ltlibs= 6801e96acad6Smrg module=no 6802e96acad6Smrg no_install=no 6803e96acad6Smrg objs= 6804cfa76ccdSmrg os2dllname= 6805e96acad6Smrg non_pic_objects= 6806e96acad6Smrg precious_files_regex= 6807e96acad6Smrg prefer_static_libs=no 6808cfa76ccdSmrg preload=false 6809e96acad6Smrg prev= 6810e96acad6Smrg prevarg= 6811e96acad6Smrg release= 6812e96acad6Smrg rpath= 6813e96acad6Smrg xrpath= 6814e96acad6Smrg perm_rpath= 6815e96acad6Smrg temp_rpath= 6816e96acad6Smrg thread_safe=no 6817e96acad6Smrg vinfo= 6818e96acad6Smrg vinfo_number=no 6819e96acad6Smrg weak_libs= 6820cfa76ccdSmrg single_module=$wl-single_module 6821e96acad6Smrg func_infer_tag $base_compile 6822dbbd9e4bSmacallan 6823e96acad6Smrg # We need to know -static, to get the right output filenames. 6824e96acad6Smrg for arg 6825e96acad6Smrg do 6826e96acad6Smrg case $arg in 6827e96acad6Smrg -shared) 6828cfa76ccdSmrg test yes != "$build_libtool_libs" \ 6829cfa76ccdSmrg && func_fatal_configuration "cannot build a shared library" 6830e96acad6Smrg build_old_libs=no 6831e96acad6Smrg break 6832e96acad6Smrg ;; 6833e96acad6Smrg -all-static | -static | -static-libtool-libs) 6834e96acad6Smrg case $arg in 6835e96acad6Smrg -all-static) 6836cfa76ccdSmrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6837e96acad6Smrg func_warning "complete static linking is impossible in this configuration" 6838e96acad6Smrg fi 6839e96acad6Smrg if test -n "$link_static_flag"; then 6840e96acad6Smrg dlopen_self=$dlopen_self_static 6841e96acad6Smrg fi 6842e96acad6Smrg prefer_static_libs=yes 6843e96acad6Smrg ;; 6844e96acad6Smrg -static) 6845e96acad6Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6846e96acad6Smrg dlopen_self=$dlopen_self_static 6847e96acad6Smrg fi 6848e96acad6Smrg prefer_static_libs=built 6849e96acad6Smrg ;; 6850e96acad6Smrg -static-libtool-libs) 6851e96acad6Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6852e96acad6Smrg dlopen_self=$dlopen_self_static 6853e96acad6Smrg fi 6854e96acad6Smrg prefer_static_libs=yes 6855e96acad6Smrg ;; 6856e96acad6Smrg esac 6857e96acad6Smrg build_libtool_libs=no 6858e96acad6Smrg build_old_libs=yes 6859e96acad6Smrg break 6860e96acad6Smrg ;; 6861e96acad6Smrg esac 6862e96acad6Smrg done 6863dbbd9e4bSmacallan 6864e96acad6Smrg # See if our shared archives depend on static archives. 6865e96acad6Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6866dbbd9e4bSmacallan 6867e96acad6Smrg # Go through the arguments, transforming them on the way. 6868e96acad6Smrg while test "$#" -gt 0; do 6869cfa76ccdSmrg arg=$1 6870e96acad6Smrg shift 6871cfa76ccdSmrg func_quote_arg pretty,unquoted "$arg" 6872cfa76ccdSmrg qarg=$func_quote_arg_unquoted_result 6873cfa76ccdSmrg func_append libtool_args " $func_quote_arg_result" 6874dbbd9e4bSmacallan 6875e96acad6Smrg # If the previous option needs an argument, assign it. 6876e96acad6Smrg if test -n "$prev"; then 6877e96acad6Smrg case $prev in 6878e96acad6Smrg output) 6879e96acad6Smrg func_append compile_command " @OUTPUT@" 6880e96acad6Smrg func_append finalize_command " @OUTPUT@" 6881e96acad6Smrg ;; 6882e96acad6Smrg esac 6883dbbd9e4bSmacallan 6884e96acad6Smrg case $prev in 6885e96acad6Smrg bindir) 6886cfa76ccdSmrg bindir=$arg 6887e96acad6Smrg prev= 6888e96acad6Smrg continue 6889e96acad6Smrg ;; 6890e96acad6Smrg dlfiles|dlprefiles) 6891cfa76ccdSmrg $preload || { 6892e96acad6Smrg # Add the symbol object into the linking commands. 6893e96acad6Smrg func_append compile_command " @SYMFILE@" 6894e96acad6Smrg func_append finalize_command " @SYMFILE@" 6895cfa76ccdSmrg preload=: 6896cfa76ccdSmrg } 6897e96acad6Smrg case $arg in 6898e96acad6Smrg *.la | *.lo) ;; # We handle these cases below. 6899e96acad6Smrg force) 6900cfa76ccdSmrg if test no = "$dlself"; then 6901e96acad6Smrg dlself=needless 6902e96acad6Smrg export_dynamic=yes 6903e96acad6Smrg fi 6904e96acad6Smrg prev= 6905e96acad6Smrg continue 6906e96acad6Smrg ;; 6907e96acad6Smrg self) 6908cfa76ccdSmrg if test dlprefiles = "$prev"; then 6909e96acad6Smrg dlself=yes 6910cfa76ccdSmrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6911e96acad6Smrg dlself=yes 6912e96acad6Smrg else 6913e96acad6Smrg dlself=needless 6914e96acad6Smrg export_dynamic=yes 6915e96acad6Smrg fi 6916e96acad6Smrg prev= 6917e96acad6Smrg continue 6918e96acad6Smrg ;; 6919e96acad6Smrg *) 6920cfa76ccdSmrg if test dlfiles = "$prev"; then 6921e96acad6Smrg func_append dlfiles " $arg" 6922e96acad6Smrg else 6923e96acad6Smrg func_append dlprefiles " $arg" 6924e96acad6Smrg fi 6925e96acad6Smrg prev= 6926e96acad6Smrg continue 6927e96acad6Smrg ;; 6928e96acad6Smrg esac 6929e96acad6Smrg ;; 6930e96acad6Smrg expsyms) 6931cfa76ccdSmrg export_symbols=$arg 6932e96acad6Smrg test -f "$arg" \ 6933cfa76ccdSmrg || func_fatal_error "symbol file '$arg' does not exist" 6934e96acad6Smrg prev= 6935e96acad6Smrg continue 6936e96acad6Smrg ;; 6937e96acad6Smrg expsyms_regex) 6938cfa76ccdSmrg export_symbols_regex=$arg 6939e96acad6Smrg prev= 6940e96acad6Smrg continue 6941e96acad6Smrg ;; 6942e96acad6Smrg framework) 6943e96acad6Smrg case $host in 6944e96acad6Smrg *-*-darwin*) 6945e96acad6Smrg case "$deplibs " in 6946e96acad6Smrg *" $qarg.ltframework "*) ;; 6947e96acad6Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 6948e96acad6Smrg ;; 6949e96acad6Smrg esac 6950e96acad6Smrg ;; 6951e96acad6Smrg esac 6952e96acad6Smrg prev= 6953e96acad6Smrg continue 6954e96acad6Smrg ;; 6955e96acad6Smrg inst_prefix) 6956cfa76ccdSmrg inst_prefix_dir=$arg 6957cfa76ccdSmrg prev= 6958cfa76ccdSmrg continue 6959cfa76ccdSmrg ;; 6960cfa76ccdSmrg mllvm) 6961cfa76ccdSmrg # Clang does not use LLVM to link, so we can simply discard any 6962cfa76ccdSmrg # '-mllvm $arg' options when doing the link step. 6963e96acad6Smrg prev= 6964e96acad6Smrg continue 6965e96acad6Smrg ;; 6966e96acad6Smrg objectlist) 6967e96acad6Smrg if test -f "$arg"; then 6968e96acad6Smrg save_arg=$arg 6969e96acad6Smrg moreargs= 6970e96acad6Smrg for fil in `cat "$save_arg"` 6971e96acad6Smrg do 6972e96acad6Smrg# func_append moreargs " $fil" 6973e96acad6Smrg arg=$fil 6974e96acad6Smrg # A libtool-controlled object. 6975dbbd9e4bSmacallan 6976e96acad6Smrg # Check to see that this really is a libtool object. 6977e96acad6Smrg if func_lalib_unsafe_p "$arg"; then 6978e96acad6Smrg pic_object= 6979e96acad6Smrg non_pic_object= 6980dbbd9e4bSmacallan 6981e96acad6Smrg # Read the .lo file 6982e96acad6Smrg func_source "$arg" 6983dbbd9e4bSmacallan 6984e96acad6Smrg if test -z "$pic_object" || 6985e96acad6Smrg test -z "$non_pic_object" || 6986cfa76ccdSmrg test none = "$pic_object" && 6987cfa76ccdSmrg test none = "$non_pic_object"; then 6988cfa76ccdSmrg func_fatal_error "cannot find name of object for '$arg'" 6989e96acad6Smrg fi 6990dbbd9e4bSmacallan 6991e96acad6Smrg # Extract subdirectory from the argument. 6992e96acad6Smrg func_dirname "$arg" "/" "" 6993cfa76ccdSmrg xdir=$func_dirname_result 6994dbbd9e4bSmacallan 6995cfa76ccdSmrg if test none != "$pic_object"; then 6996e96acad6Smrg # Prepend the subdirectory the object is found in. 6997cfa76ccdSmrg pic_object=$xdir$pic_object 6998dbbd9e4bSmacallan 6999cfa76ccdSmrg if test dlfiles = "$prev"; then 7000cfa76ccdSmrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7001e96acad6Smrg func_append dlfiles " $pic_object" 7002e96acad6Smrg prev= 7003e96acad6Smrg continue 7004e96acad6Smrg else 7005e96acad6Smrg # If libtool objects are unsupported, then we need to preload. 7006e96acad6Smrg prev=dlprefiles 7007e96acad6Smrg fi 7008e96acad6Smrg fi 7009dbbd9e4bSmacallan 7010e96acad6Smrg # CHECK ME: I think I busted this. -Ossama 7011cfa76ccdSmrg if test dlprefiles = "$prev"; then 7012e96acad6Smrg # Preload the old-style object. 7013e96acad6Smrg func_append dlprefiles " $pic_object" 7014e96acad6Smrg prev= 7015e96acad6Smrg fi 7016dbbd9e4bSmacallan 7017e96acad6Smrg # A PIC object. 7018e96acad6Smrg func_append libobjs " $pic_object" 7019cfa76ccdSmrg arg=$pic_object 7020e96acad6Smrg fi 7021dbbd9e4bSmacallan 7022e96acad6Smrg # Non-PIC object. 7023cfa76ccdSmrg if test none != "$non_pic_object"; then 7024e96acad6Smrg # Prepend the subdirectory the object is found in. 7025cfa76ccdSmrg non_pic_object=$xdir$non_pic_object 7026dbbd9e4bSmacallan 7027e96acad6Smrg # A standard non-PIC object 7028e96acad6Smrg func_append non_pic_objects " $non_pic_object" 7029cfa76ccdSmrg if test -z "$pic_object" || test none = "$pic_object"; then 7030cfa76ccdSmrg arg=$non_pic_object 7031e96acad6Smrg fi 7032e96acad6Smrg else 7033e96acad6Smrg # If the PIC object exists, use it instead. 7034e96acad6Smrg # $xdir was prepended to $pic_object above. 7035cfa76ccdSmrg non_pic_object=$pic_object 7036e96acad6Smrg func_append non_pic_objects " $non_pic_object" 7037e96acad6Smrg fi 7038e96acad6Smrg else 7039e96acad6Smrg # Only an error if not doing a dry-run. 7040e96acad6Smrg if $opt_dry_run; then 7041e96acad6Smrg # Extract subdirectory from the argument. 7042e96acad6Smrg func_dirname "$arg" "/" "" 7043cfa76ccdSmrg xdir=$func_dirname_result 7044e96acad6Smrg 7045e96acad6Smrg func_lo2o "$arg" 7046e96acad6Smrg pic_object=$xdir$objdir/$func_lo2o_result 7047e96acad6Smrg non_pic_object=$xdir$func_lo2o_result 7048e96acad6Smrg func_append libobjs " $pic_object" 7049e96acad6Smrg func_append non_pic_objects " $non_pic_object" 7050e96acad6Smrg else 7051cfa76ccdSmrg func_fatal_error "'$arg' is not a valid libtool object" 7052e96acad6Smrg fi 7053e96acad6Smrg fi 7054e96acad6Smrg done 7055e96acad6Smrg else 7056cfa76ccdSmrg func_fatal_error "link input file '$arg' does not exist" 7057e96acad6Smrg fi 7058e96acad6Smrg arg=$save_arg 7059e96acad6Smrg prev= 7060e96acad6Smrg continue 7061e96acad6Smrg ;; 7062cfa76ccdSmrg os2dllname) 7063cfa76ccdSmrg os2dllname=$arg 7064cfa76ccdSmrg prev= 7065cfa76ccdSmrg continue 7066cfa76ccdSmrg ;; 7067e96acad6Smrg precious_regex) 7068cfa76ccdSmrg precious_files_regex=$arg 7069e96acad6Smrg prev= 7070e96acad6Smrg continue 7071e96acad6Smrg ;; 7072e96acad6Smrg release) 7073cfa76ccdSmrg release=-$arg 7074e96acad6Smrg prev= 7075e96acad6Smrg continue 7076e96acad6Smrg ;; 7077e96acad6Smrg rpath | xrpath) 7078e96acad6Smrg # We need an absolute path. 7079e96acad6Smrg case $arg in 7080e96acad6Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7081e96acad6Smrg *) 7082e96acad6Smrg func_fatal_error "only absolute run-paths are allowed" 7083e96acad6Smrg ;; 7084e96acad6Smrg esac 7085cfa76ccdSmrg if test rpath = "$prev"; then 7086e96acad6Smrg case "$rpath " in 7087e96acad6Smrg *" $arg "*) ;; 7088e96acad6Smrg *) func_append rpath " $arg" ;; 7089e96acad6Smrg esac 7090e96acad6Smrg else 7091e96acad6Smrg case "$xrpath " in 7092e96acad6Smrg *" $arg "*) ;; 7093e96acad6Smrg *) func_append xrpath " $arg" ;; 7094e96acad6Smrg esac 7095e96acad6Smrg fi 7096e96acad6Smrg prev= 7097e96acad6Smrg continue 7098e96acad6Smrg ;; 7099e96acad6Smrg shrext) 7100cfa76ccdSmrg shrext_cmds=$arg 7101e96acad6Smrg prev= 7102e96acad6Smrg continue 7103e96acad6Smrg ;; 7104e96acad6Smrg weak) 7105e96acad6Smrg func_append weak_libs " $arg" 7106e96acad6Smrg prev= 7107e96acad6Smrg continue 7108e96acad6Smrg ;; 7109cfa76ccdSmrg xassembler) 7110cfa76ccdSmrg func_append compiler_flags " -Xassembler $qarg" 7111cfa76ccdSmrg prev= 7112cfa76ccdSmrg func_append compile_command " -Xassembler $qarg" 7113cfa76ccdSmrg func_append finalize_command " -Xassembler $qarg" 7114cfa76ccdSmrg continue 7115cfa76ccdSmrg ;; 7116e96acad6Smrg xcclinker) 7117e96acad6Smrg func_append linker_flags " $qarg" 7118e96acad6Smrg func_append compiler_flags " $qarg" 7119e96acad6Smrg prev= 7120e96acad6Smrg func_append compile_command " $qarg" 7121e96acad6Smrg func_append finalize_command " $qarg" 7122e96acad6Smrg continue 7123e96acad6Smrg ;; 7124e96acad6Smrg xcompiler) 7125e96acad6Smrg func_append compiler_flags " $qarg" 7126e96acad6Smrg prev= 7127e96acad6Smrg func_append compile_command " $qarg" 7128e96acad6Smrg func_append finalize_command " $qarg" 7129e96acad6Smrg continue 7130e96acad6Smrg ;; 7131e96acad6Smrg xlinker) 7132e96acad6Smrg func_append linker_flags " $qarg" 7133e96acad6Smrg func_append compiler_flags " $wl$qarg" 7134e96acad6Smrg prev= 7135e96acad6Smrg func_append compile_command " $wl$qarg" 7136e96acad6Smrg func_append finalize_command " $wl$qarg" 7137e96acad6Smrg continue 7138e96acad6Smrg ;; 7139e96acad6Smrg *) 7140e96acad6Smrg eval "$prev=\"\$arg\"" 7141e96acad6Smrg prev= 7142e96acad6Smrg continue 7143e96acad6Smrg ;; 7144e96acad6Smrg esac 7145e96acad6Smrg fi # test -n "$prev" 7146dbbd9e4bSmacallan 7147cfa76ccdSmrg prevarg=$arg 7148dbbd9e4bSmacallan 7149e96acad6Smrg case $arg in 7150e96acad6Smrg -all-static) 7151e96acad6Smrg if test -n "$link_static_flag"; then 7152e96acad6Smrg # See comment for -static flag below, for more details. 7153e96acad6Smrg func_append compile_command " $link_static_flag" 7154e96acad6Smrg func_append finalize_command " $link_static_flag" 7155e96acad6Smrg fi 7156e96acad6Smrg continue 7157e96acad6Smrg ;; 7158dbbd9e4bSmacallan 7159e96acad6Smrg -allow-undefined) 7160e96acad6Smrg # FIXME: remove this flag sometime in the future. 7161cfa76ccdSmrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 7162e96acad6Smrg ;; 7163dbbd9e4bSmacallan 7164e96acad6Smrg -avoid-version) 7165e96acad6Smrg avoid_version=yes 7166e96acad6Smrg continue 7167e96acad6Smrg ;; 7168dbbd9e4bSmacallan 7169e96acad6Smrg -bindir) 7170e96acad6Smrg prev=bindir 7171e96acad6Smrg continue 7172e96acad6Smrg ;; 7173e96acad6Smrg 7174e96acad6Smrg -dlopen) 7175e96acad6Smrg prev=dlfiles 7176e96acad6Smrg continue 7177e96acad6Smrg ;; 7178e96acad6Smrg 7179e96acad6Smrg -dlpreopen) 7180e96acad6Smrg prev=dlprefiles 7181e96acad6Smrg continue 7182e96acad6Smrg ;; 7183e96acad6Smrg 7184e96acad6Smrg -export-dynamic) 7185e96acad6Smrg export_dynamic=yes 7186e96acad6Smrg continue 7187e96acad6Smrg ;; 7188e96acad6Smrg 7189e96acad6Smrg -export-symbols | -export-symbols-regex) 7190e96acad6Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 7191e96acad6Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 7192e96acad6Smrg fi 7193cfa76ccdSmrg if test X-export-symbols = "X$arg"; then 7194e96acad6Smrg prev=expsyms 7195e96acad6Smrg else 7196e96acad6Smrg prev=expsyms_regex 7197e96acad6Smrg fi 7198e96acad6Smrg continue 7199e96acad6Smrg ;; 7200e96acad6Smrg 7201e96acad6Smrg -framework) 7202e96acad6Smrg prev=framework 7203e96acad6Smrg continue 7204e96acad6Smrg ;; 7205e96acad6Smrg 7206e96acad6Smrg -inst-prefix-dir) 7207e96acad6Smrg prev=inst_prefix 7208e96acad6Smrg continue 7209e96acad6Smrg ;; 7210e96acad6Smrg 7211e96acad6Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 7212e96acad6Smrg # so, if we see these flags be careful not to treat them like -L 7213e96acad6Smrg -L[A-Z][A-Z]*:*) 7214e96acad6Smrg case $with_gcc/$host in 7215e96acad6Smrg no/*-*-irix* | /*-*-irix*) 7216e96acad6Smrg func_append compile_command " $arg" 7217e96acad6Smrg func_append finalize_command " $arg" 7218e96acad6Smrg ;; 7219e96acad6Smrg esac 7220e96acad6Smrg continue 7221e96acad6Smrg ;; 7222e96acad6Smrg 7223e96acad6Smrg -L*) 7224e96acad6Smrg func_stripname "-L" '' "$arg" 7225e96acad6Smrg if test -z "$func_stripname_result"; then 7226e96acad6Smrg if test "$#" -gt 0; then 7227cfa76ccdSmrg func_fatal_error "require no space between '-L' and '$1'" 7228e96acad6Smrg else 7229cfa76ccdSmrg func_fatal_error "need path for '-L' option" 7230e96acad6Smrg fi 7231e96acad6Smrg fi 7232e96acad6Smrg func_resolve_sysroot "$func_stripname_result" 7233e96acad6Smrg dir=$func_resolve_sysroot_result 7234e96acad6Smrg # We need an absolute path. 7235e96acad6Smrg case $dir in 7236e96acad6Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7237e96acad6Smrg *) 7238e96acad6Smrg absdir=`cd "$dir" && pwd` 7239e96acad6Smrg test -z "$absdir" && \ 7240cfa76ccdSmrg func_fatal_error "cannot determine absolute directory name of '$dir'" 7241cfa76ccdSmrg dir=$absdir 7242e96acad6Smrg ;; 7243e96acad6Smrg esac 7244e96acad6Smrg case "$deplibs " in 7245e96acad6Smrg *" -L$dir "* | *" $arg "*) 7246e96acad6Smrg # Will only happen for absolute or sysroot arguments 7247e96acad6Smrg ;; 7248e96acad6Smrg *) 7249e96acad6Smrg # Preserve sysroot, but never include relative directories 7250e96acad6Smrg case $dir in 7251e96acad6Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7252e96acad6Smrg *) func_append deplibs " -L$dir" ;; 7253e96acad6Smrg esac 7254e96acad6Smrg func_append lib_search_path " $dir" 7255e96acad6Smrg ;; 7256e96acad6Smrg esac 7257e96acad6Smrg case $host in 7258e96acad6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7259e96acad6Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 7260e96acad6Smrg case :$dllsearchpath: in 7261e96acad6Smrg *":$dir:"*) ;; 7262e96acad6Smrg ::) dllsearchpath=$dir;; 7263e96acad6Smrg *) func_append dllsearchpath ":$dir";; 7264e96acad6Smrg esac 7265e96acad6Smrg case :$dllsearchpath: in 7266e96acad6Smrg *":$testbindir:"*) ;; 7267e96acad6Smrg ::) dllsearchpath=$testbindir;; 7268e96acad6Smrg *) func_append dllsearchpath ":$testbindir";; 7269e96acad6Smrg esac 7270e96acad6Smrg ;; 7271e96acad6Smrg esac 7272e96acad6Smrg continue 7273e96acad6Smrg ;; 7274e96acad6Smrg 7275e96acad6Smrg -l*) 7276cfa76ccdSmrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7277e96acad6Smrg case $host in 7278e96acad6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7279e96acad6Smrg # These systems don't actually have a C or math library (as such) 7280e96acad6Smrg continue 7281e96acad6Smrg ;; 7282e96acad6Smrg *-*-os2*) 7283e96acad6Smrg # These systems don't actually have a C library (as such) 7284cfa76ccdSmrg test X-lc = "X$arg" && continue 7285e96acad6Smrg ;; 7286cfa76ccdSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7287e96acad6Smrg # Do not include libc due to us having libc/libc_r. 7288cfa76ccdSmrg test X-lc = "X$arg" && continue 7289e96acad6Smrg ;; 7290e96acad6Smrg *-*-rhapsody* | *-*-darwin1.[012]) 7291e96acad6Smrg # Rhapsody C and math libraries are in the System framework 7292e96acad6Smrg func_append deplibs " System.ltframework" 7293e96acad6Smrg continue 7294e96acad6Smrg ;; 7295e96acad6Smrg *-*-sco3.2v5* | *-*-sco5v6*) 7296e96acad6Smrg # Causes problems with __ctype 7297cfa76ccdSmrg test X-lc = "X$arg" && continue 7298e96acad6Smrg ;; 7299e96acad6Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7300e96acad6Smrg # Compiler inserts libc in the correct place for threads to work 7301cfa76ccdSmrg test X-lc = "X$arg" && continue 7302e96acad6Smrg ;; 7303e96acad6Smrg esac 7304cfa76ccdSmrg elif test X-lc_r = "X$arg"; then 7305e96acad6Smrg case $host in 7306cfa76ccdSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) 7307e96acad6Smrg # Do not include libc_r directly, use -pthread flag. 7308e96acad6Smrg continue 7309e96acad6Smrg ;; 7310e96acad6Smrg esac 7311e96acad6Smrg fi 7312e96acad6Smrg func_append deplibs " $arg" 7313e96acad6Smrg continue 7314e96acad6Smrg ;; 7315e96acad6Smrg 7316cfa76ccdSmrg -mllvm) 7317cfa76ccdSmrg prev=mllvm 7318cfa76ccdSmrg continue 7319cfa76ccdSmrg ;; 7320cfa76ccdSmrg 7321e96acad6Smrg -module) 7322e96acad6Smrg module=yes 7323e96acad6Smrg continue 7324e96acad6Smrg ;; 7325e96acad6Smrg 7326e96acad6Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7327e96acad6Smrg # classes, name mangling, and exception handling. 7328e96acad6Smrg # Darwin uses the -arch flag to determine output architecture. 7329e96acad6Smrg -model|-arch|-isysroot|--sysroot) 7330e96acad6Smrg func_append compiler_flags " $arg" 7331e96acad6Smrg func_append compile_command " $arg" 7332e96acad6Smrg func_append finalize_command " $arg" 7333e96acad6Smrg prev=xcompiler 7334e96acad6Smrg continue 7335e96acad6Smrg ;; 7336cfa76ccdSmrg # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. 7337cfa76ccdSmrg -pthread) 7338cfa76ccdSmrg case $host in 7339cfa76ccdSmrg *solaris2*) ;; 7340cfa76ccdSmrg *) 7341cfa76ccdSmrg case "$new_inherited_linker_flags " in 7342cfa76ccdSmrg *" $arg "*) ;; 7343cfa76ccdSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 7344cfa76ccdSmrg esac 7345cfa76ccdSmrg ;; 7346cfa76ccdSmrg esac 7347cfa76ccdSmrg continue 7348cfa76ccdSmrg ;; 7349cfa76ccdSmrg -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ 7350cfa76ccdSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7351e96acad6Smrg func_append compiler_flags " $arg" 7352e96acad6Smrg func_append compile_command " $arg" 7353e96acad6Smrg func_append finalize_command " $arg" 7354e96acad6Smrg case "$new_inherited_linker_flags " in 7355e96acad6Smrg *" $arg "*) ;; 7356e96acad6Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 7357e96acad6Smrg esac 7358e96acad6Smrg continue 7359e96acad6Smrg ;; 7360e96acad6Smrg 7361e96acad6Smrg -multi_module) 7362cfa76ccdSmrg single_module=$wl-multi_module 7363e96acad6Smrg continue 7364e96acad6Smrg ;; 7365e96acad6Smrg 7366e96acad6Smrg -no-fast-install) 7367e96acad6Smrg fast_install=no 7368e96acad6Smrg continue 7369e96acad6Smrg ;; 7370e96acad6Smrg 7371e96acad6Smrg -no-install) 7372e96acad6Smrg case $host in 7373e96acad6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7374e96acad6Smrg # The PATH hackery in wrapper scripts is required on Windows 7375e96acad6Smrg # and Darwin in order for the loader to find any dlls it needs. 7376cfa76ccdSmrg func_warning "'-no-install' is ignored for $host" 7377cfa76ccdSmrg func_warning "assuming '-no-fast-install' instead" 7378e96acad6Smrg fast_install=no 7379e96acad6Smrg ;; 7380e96acad6Smrg *) no_install=yes ;; 7381e96acad6Smrg esac 7382e96acad6Smrg continue 7383e96acad6Smrg ;; 7384e96acad6Smrg 7385e96acad6Smrg -no-undefined) 7386e96acad6Smrg allow_undefined=no 7387e96acad6Smrg continue 7388e96acad6Smrg ;; 7389e96acad6Smrg 7390e96acad6Smrg -objectlist) 7391e96acad6Smrg prev=objectlist 7392e96acad6Smrg continue 7393e96acad6Smrg ;; 7394e96acad6Smrg 7395cfa76ccdSmrg -os2dllname) 7396cfa76ccdSmrg prev=os2dllname 7397cfa76ccdSmrg continue 7398cfa76ccdSmrg ;; 7399cfa76ccdSmrg 7400e96acad6Smrg -o) prev=output ;; 7401e96acad6Smrg 7402e96acad6Smrg -precious-files-regex) 7403e96acad6Smrg prev=precious_regex 7404e96acad6Smrg continue 7405e96acad6Smrg ;; 7406e96acad6Smrg 7407e96acad6Smrg -release) 7408e96acad6Smrg prev=release 7409e96acad6Smrg continue 7410e96acad6Smrg ;; 7411e96acad6Smrg 7412e96acad6Smrg -rpath) 7413e96acad6Smrg prev=rpath 7414e96acad6Smrg continue 7415e96acad6Smrg ;; 7416e96acad6Smrg 7417e96acad6Smrg -R) 7418e96acad6Smrg prev=xrpath 7419e96acad6Smrg continue 7420e96acad6Smrg ;; 7421e96acad6Smrg 7422e96acad6Smrg -R*) 7423e96acad6Smrg func_stripname '-R' '' "$arg" 7424e96acad6Smrg dir=$func_stripname_result 7425e96acad6Smrg # We need an absolute path. 7426e96acad6Smrg case $dir in 7427e96acad6Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7428e96acad6Smrg =*) 7429e96acad6Smrg func_stripname '=' '' "$dir" 7430e96acad6Smrg dir=$lt_sysroot$func_stripname_result 7431e96acad6Smrg ;; 7432e96acad6Smrg *) 7433e96acad6Smrg func_fatal_error "only absolute run-paths are allowed" 7434e96acad6Smrg ;; 7435e96acad6Smrg esac 7436e96acad6Smrg case "$xrpath " in 7437e96acad6Smrg *" $dir "*) ;; 7438e96acad6Smrg *) func_append xrpath " $dir" ;; 7439e96acad6Smrg esac 7440e96acad6Smrg continue 7441e96acad6Smrg ;; 7442e96acad6Smrg 7443e96acad6Smrg -shared) 7444e96acad6Smrg # The effects of -shared are defined in a previous loop. 7445e96acad6Smrg continue 7446e96acad6Smrg ;; 7447e96acad6Smrg 7448e96acad6Smrg -shrext) 7449e96acad6Smrg prev=shrext 7450e96acad6Smrg continue 7451e96acad6Smrg ;; 7452e96acad6Smrg 7453e96acad6Smrg -static | -static-libtool-libs) 7454e96acad6Smrg # The effects of -static are defined in a previous loop. 7455e96acad6Smrg # We used to do the same as -all-static on platforms that 7456e96acad6Smrg # didn't have a PIC flag, but the assumption that the effects 7457e96acad6Smrg # would be equivalent was wrong. It would break on at least 7458e96acad6Smrg # Digital Unix and AIX. 7459e96acad6Smrg continue 7460e96acad6Smrg ;; 7461e96acad6Smrg 7462e96acad6Smrg -thread-safe) 7463e96acad6Smrg thread_safe=yes 7464e96acad6Smrg continue 7465e96acad6Smrg ;; 7466e96acad6Smrg 7467e96acad6Smrg -version-info) 7468e96acad6Smrg prev=vinfo 7469e96acad6Smrg continue 7470e96acad6Smrg ;; 7471e96acad6Smrg 7472e96acad6Smrg -version-number) 7473e96acad6Smrg prev=vinfo 7474e96acad6Smrg vinfo_number=yes 7475e96acad6Smrg continue 7476e96acad6Smrg ;; 7477e96acad6Smrg 7478e96acad6Smrg -weak) 7479e96acad6Smrg prev=weak 7480e96acad6Smrg continue 7481e96acad6Smrg ;; 7482e96acad6Smrg 7483e96acad6Smrg -Wc,*) 7484e96acad6Smrg func_stripname '-Wc,' '' "$arg" 7485e96acad6Smrg args=$func_stripname_result 7486e96acad6Smrg arg= 7487cfa76ccdSmrg save_ifs=$IFS; IFS=, 7488e96acad6Smrg for flag in $args; do 7489cfa76ccdSmrg IFS=$save_ifs 7490cfa76ccdSmrg func_quote_arg pretty "$flag" 7491cfa76ccdSmrg func_append arg " $func_quote_arg_result" 7492cfa76ccdSmrg func_append compiler_flags " $func_quote_arg_result" 7493e96acad6Smrg done 7494cfa76ccdSmrg IFS=$save_ifs 7495e96acad6Smrg func_stripname ' ' '' "$arg" 7496e96acad6Smrg arg=$func_stripname_result 7497e96acad6Smrg ;; 7498e96acad6Smrg 7499e96acad6Smrg -Wl,*) 7500e96acad6Smrg func_stripname '-Wl,' '' "$arg" 7501e96acad6Smrg args=$func_stripname_result 7502e96acad6Smrg arg= 7503cfa76ccdSmrg save_ifs=$IFS; IFS=, 7504e96acad6Smrg for flag in $args; do 7505cfa76ccdSmrg IFS=$save_ifs 7506cfa76ccdSmrg func_quote_arg pretty "$flag" 7507cfa76ccdSmrg func_append arg " $wl$func_quote_arg_result" 7508cfa76ccdSmrg func_append compiler_flags " $wl$func_quote_arg_result" 7509cfa76ccdSmrg func_append linker_flags " $func_quote_arg_result" 7510e96acad6Smrg done 7511cfa76ccdSmrg IFS=$save_ifs 7512e96acad6Smrg func_stripname ' ' '' "$arg" 7513e96acad6Smrg arg=$func_stripname_result 7514e96acad6Smrg ;; 7515e96acad6Smrg 7516cfa76ccdSmrg -Xassembler) 7517cfa76ccdSmrg prev=xassembler 7518cfa76ccdSmrg continue 7519cfa76ccdSmrg ;; 7520cfa76ccdSmrg 7521e96acad6Smrg -Xcompiler) 7522e96acad6Smrg prev=xcompiler 7523e96acad6Smrg continue 7524e96acad6Smrg ;; 7525e96acad6Smrg 7526e96acad6Smrg -Xlinker) 7527e96acad6Smrg prev=xlinker 7528e96acad6Smrg continue 7529e96acad6Smrg ;; 7530e96acad6Smrg 7531e96acad6Smrg -XCClinker) 7532e96acad6Smrg prev=xcclinker 7533e96acad6Smrg continue 7534e96acad6Smrg ;; 7535e96acad6Smrg 7536e96acad6Smrg # -msg_* for osf cc 7537e96acad6Smrg -msg_*) 7538cfa76ccdSmrg func_quote_arg pretty "$arg" 7539cfa76ccdSmrg arg=$func_quote_arg_result 7540e96acad6Smrg ;; 7541e96acad6Smrg 7542e96acad6Smrg # Flags to be passed through unchanged, with rationale: 7543e96acad6Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7544e96acad6Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 7545e96acad6Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7546e96acad6Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 7547e96acad6Smrg # -q* compiler args for the IBM compiler 7548e96acad6Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7549e96acad6Smrg # -F/path path to uninstalled frameworks, gcc on darwin 7550e96acad6Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7551cfa76ccdSmrg # -fstack-protector* stack protector flags for GCC 7552e96acad6Smrg # @file GCC response files 7553e96acad6Smrg # -tp=* Portland pgcc target processor selection 7554e96acad6Smrg # --sysroot=* for sysroot support 7555cfa76ccdSmrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7556cfa76ccdSmrg # -specs=* GCC specs files 7557cfa76ccdSmrg # -stdlib=* select c++ std lib with clang 7558cfa76ccdSmrg # -fsanitize=* Clang/GCC memory and address sanitizer 7559cfa76ccdSmrg # -fuse-ld=* Linker select flags for GCC 7560cfa76ccdSmrg # -Wa,* Pass flags directly to the assembler 7561e96acad6Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7562e96acad6Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7563cfa76ccdSmrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 7564cfa76ccdSmrg -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) 7565cfa76ccdSmrg func_quote_arg pretty "$arg" 7566cfa76ccdSmrg arg=$func_quote_arg_result 7567e96acad6Smrg func_append compile_command " $arg" 7568e96acad6Smrg func_append finalize_command " $arg" 7569e96acad6Smrg func_append compiler_flags " $arg" 7570e96acad6Smrg continue 7571e96acad6Smrg ;; 7572e96acad6Smrg 7573cfa76ccdSmrg -Z*) 7574cfa76ccdSmrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 7575cfa76ccdSmrg # OS/2 uses -Zxxx to specify OS/2-specific options 7576cfa76ccdSmrg compiler_flags="$compiler_flags $arg" 7577cfa76ccdSmrg func_append compile_command " $arg" 7578cfa76ccdSmrg func_append finalize_command " $arg" 7579cfa76ccdSmrg case $arg in 7580cfa76ccdSmrg -Zlinker | -Zstack) 7581cfa76ccdSmrg prev=xcompiler 7582cfa76ccdSmrg ;; 7583cfa76ccdSmrg esac 7584cfa76ccdSmrg continue 7585cfa76ccdSmrg else 7586cfa76ccdSmrg # Otherwise treat like 'Some other compiler flag' below 7587cfa76ccdSmrg func_quote_arg pretty "$arg" 7588cfa76ccdSmrg arg=$func_quote_arg_result 7589cfa76ccdSmrg fi 7590cfa76ccdSmrg ;; 7591cfa76ccdSmrg 7592e96acad6Smrg # Some other compiler flag. 7593e96acad6Smrg -* | +*) 7594cfa76ccdSmrg func_quote_arg pretty "$arg" 7595cfa76ccdSmrg arg=$func_quote_arg_result 7596e96acad6Smrg ;; 7597e96acad6Smrg 7598e96acad6Smrg *.$objext) 7599e96acad6Smrg # A standard object. 7600e96acad6Smrg func_append objs " $arg" 7601e96acad6Smrg ;; 7602e96acad6Smrg 7603e96acad6Smrg *.lo) 7604e96acad6Smrg # A libtool-controlled object. 7605e96acad6Smrg 7606e96acad6Smrg # Check to see that this really is a libtool object. 7607e96acad6Smrg if func_lalib_unsafe_p "$arg"; then 7608e96acad6Smrg pic_object= 7609e96acad6Smrg non_pic_object= 7610e96acad6Smrg 7611e96acad6Smrg # Read the .lo file 7612e96acad6Smrg func_source "$arg" 7613e96acad6Smrg 7614e96acad6Smrg if test -z "$pic_object" || 7615e96acad6Smrg test -z "$non_pic_object" || 7616cfa76ccdSmrg test none = "$pic_object" && 7617cfa76ccdSmrg test none = "$non_pic_object"; then 7618cfa76ccdSmrg func_fatal_error "cannot find name of object for '$arg'" 7619e96acad6Smrg fi 7620e96acad6Smrg 7621e96acad6Smrg # Extract subdirectory from the argument. 7622e96acad6Smrg func_dirname "$arg" "/" "" 7623cfa76ccdSmrg xdir=$func_dirname_result 7624e96acad6Smrg 7625cfa76ccdSmrg test none = "$pic_object" || { 7626e96acad6Smrg # Prepend the subdirectory the object is found in. 7627cfa76ccdSmrg pic_object=$xdir$pic_object 7628e96acad6Smrg 7629cfa76ccdSmrg if test dlfiles = "$prev"; then 7630cfa76ccdSmrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7631e96acad6Smrg func_append dlfiles " $pic_object" 7632e96acad6Smrg prev= 7633e96acad6Smrg continue 7634e96acad6Smrg else 7635e96acad6Smrg # If libtool objects are unsupported, then we need to preload. 7636e96acad6Smrg prev=dlprefiles 7637e96acad6Smrg fi 7638e96acad6Smrg fi 7639e96acad6Smrg 7640e96acad6Smrg # CHECK ME: I think I busted this. -Ossama 7641cfa76ccdSmrg if test dlprefiles = "$prev"; then 7642e96acad6Smrg # Preload the old-style object. 7643e96acad6Smrg func_append dlprefiles " $pic_object" 7644e96acad6Smrg prev= 7645e96acad6Smrg fi 7646e96acad6Smrg 7647e96acad6Smrg # A PIC object. 7648e96acad6Smrg func_append libobjs " $pic_object" 7649cfa76ccdSmrg arg=$pic_object 7650cfa76ccdSmrg } 7651e96acad6Smrg 7652e96acad6Smrg # Non-PIC object. 7653cfa76ccdSmrg if test none != "$non_pic_object"; then 7654e96acad6Smrg # Prepend the subdirectory the object is found in. 7655cfa76ccdSmrg non_pic_object=$xdir$non_pic_object 7656e96acad6Smrg 7657e96acad6Smrg # A standard non-PIC object 7658e96acad6Smrg func_append non_pic_objects " $non_pic_object" 7659cfa76ccdSmrg if test -z "$pic_object" || test none = "$pic_object"; then 7660cfa76ccdSmrg arg=$non_pic_object 7661e96acad6Smrg fi 7662e96acad6Smrg else 7663e96acad6Smrg # If the PIC object exists, use it instead. 7664e96acad6Smrg # $xdir was prepended to $pic_object above. 7665cfa76ccdSmrg non_pic_object=$pic_object 7666e96acad6Smrg func_append non_pic_objects " $non_pic_object" 7667e96acad6Smrg fi 7668e96acad6Smrg else 7669e96acad6Smrg # Only an error if not doing a dry-run. 7670e96acad6Smrg if $opt_dry_run; then 7671e96acad6Smrg # Extract subdirectory from the argument. 7672e96acad6Smrg func_dirname "$arg" "/" "" 7673cfa76ccdSmrg xdir=$func_dirname_result 7674e96acad6Smrg 7675e96acad6Smrg func_lo2o "$arg" 7676e96acad6Smrg pic_object=$xdir$objdir/$func_lo2o_result 7677e96acad6Smrg non_pic_object=$xdir$func_lo2o_result 7678e96acad6Smrg func_append libobjs " $pic_object" 7679e96acad6Smrg func_append non_pic_objects " $non_pic_object" 7680e96acad6Smrg else 7681cfa76ccdSmrg func_fatal_error "'$arg' is not a valid libtool object" 7682e96acad6Smrg fi 7683e96acad6Smrg fi 7684e96acad6Smrg ;; 7685e96acad6Smrg 7686e96acad6Smrg *.$libext) 7687e96acad6Smrg # An archive. 7688e96acad6Smrg func_append deplibs " $arg" 7689e96acad6Smrg func_append old_deplibs " $arg" 7690e96acad6Smrg continue 7691e96acad6Smrg ;; 7692e96acad6Smrg 7693e96acad6Smrg *.la) 7694e96acad6Smrg # A libtool-controlled library. 7695e96acad6Smrg 7696e96acad6Smrg func_resolve_sysroot "$arg" 7697cfa76ccdSmrg if test dlfiles = "$prev"; then 7698e96acad6Smrg # This library was specified with -dlopen. 7699e96acad6Smrg func_append dlfiles " $func_resolve_sysroot_result" 7700e96acad6Smrg prev= 7701cfa76ccdSmrg elif test dlprefiles = "$prev"; then 7702e96acad6Smrg # The library was specified with -dlpreopen. 7703e96acad6Smrg func_append dlprefiles " $func_resolve_sysroot_result" 7704e96acad6Smrg prev= 7705e96acad6Smrg else 7706e96acad6Smrg func_append deplibs " $func_resolve_sysroot_result" 7707e96acad6Smrg fi 7708e96acad6Smrg continue 7709e96acad6Smrg ;; 7710e96acad6Smrg 7711e96acad6Smrg # Some other compiler argument. 7712e96acad6Smrg *) 7713e96acad6Smrg # Unknown arguments in both finalize_command and compile_command need 7714e96acad6Smrg # to be aesthetically quoted because they are evaled later. 7715cfa76ccdSmrg func_quote_arg pretty "$arg" 7716cfa76ccdSmrg arg=$func_quote_arg_result 7717e96acad6Smrg ;; 7718e96acad6Smrg esac # arg 7719e96acad6Smrg 7720e96acad6Smrg # Now actually substitute the argument into the commands. 7721e96acad6Smrg if test -n "$arg"; then 7722e96acad6Smrg func_append compile_command " $arg" 7723e96acad6Smrg func_append finalize_command " $arg" 7724e96acad6Smrg fi 7725e96acad6Smrg done # argument parsing loop 7726e96acad6Smrg 7727e96acad6Smrg test -n "$prev" && \ 7728cfa76ccdSmrg func_fatal_help "the '$prevarg' option requires an argument" 7729e96acad6Smrg 7730cfa76ccdSmrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7731e96acad6Smrg eval arg=\"$export_dynamic_flag_spec\" 7732e96acad6Smrg func_append compile_command " $arg" 7733e96acad6Smrg func_append finalize_command " $arg" 7734e96acad6Smrg fi 7735e96acad6Smrg 7736e96acad6Smrg oldlibs= 7737e96acad6Smrg # calculate the name of the file, without its directory 7738e96acad6Smrg func_basename "$output" 7739cfa76ccdSmrg outputname=$func_basename_result 7740cfa76ccdSmrg libobjs_save=$libobjs 7741e96acad6Smrg 7742e96acad6Smrg if test -n "$shlibpath_var"; then 7743e96acad6Smrg # get the directories listed in $shlibpath_var 7744cfa76ccdSmrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7745e96acad6Smrg else 7746e96acad6Smrg shlib_search_path= 7747e96acad6Smrg fi 7748e96acad6Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7749e96acad6Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7750e96acad6Smrg 7751cfa76ccdSmrg # Definition is injected by LT_CONFIG during libtool generation. 7752cfa76ccdSmrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7753cfa76ccdSmrg 7754e96acad6Smrg func_dirname "$output" "/" "" 7755cfa76ccdSmrg output_objdir=$func_dirname_result$objdir 7756e96acad6Smrg func_to_tool_file "$output_objdir/" 7757e96acad6Smrg tool_output_objdir=$func_to_tool_file_result 7758e96acad6Smrg # Create the object directory. 7759e96acad6Smrg func_mkdir_p "$output_objdir" 7760e96acad6Smrg 7761e96acad6Smrg # Determine the type of output 7762e96acad6Smrg case $output in 7763e96acad6Smrg "") 7764e96acad6Smrg func_fatal_help "you must specify an output file" 7765e96acad6Smrg ;; 7766e96acad6Smrg *.$libext) linkmode=oldlib ;; 7767e96acad6Smrg *.lo | *.$objext) linkmode=obj ;; 7768e96acad6Smrg *.la) linkmode=lib ;; 7769e96acad6Smrg *) linkmode=prog ;; # Anything else should be a program. 7770e96acad6Smrg esac 7771e96acad6Smrg 7772e96acad6Smrg specialdeplibs= 7773e96acad6Smrg 7774e96acad6Smrg libs= 7775e96acad6Smrg # Find all interdependent deplibs by searching for libraries 7776e96acad6Smrg # that are linked more than once (e.g. -la -lb -la) 7777e96acad6Smrg for deplib in $deplibs; do 7778cfa76ccdSmrg if $opt_preserve_dup_deps; then 7779e96acad6Smrg case "$libs " in 7780e96acad6Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7781e96acad6Smrg esac 7782e96acad6Smrg fi 7783e96acad6Smrg func_append libs " $deplib" 7784e96acad6Smrg done 7785e96acad6Smrg 7786cfa76ccdSmrg if test lib = "$linkmode"; then 7787e96acad6Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7788e96acad6Smrg 7789e96acad6Smrg # Compute libraries that are listed more than once in $predeps 7790e96acad6Smrg # $postdeps and mark them as special (i.e., whose duplicates are 7791e96acad6Smrg # not to be eliminated). 7792e96acad6Smrg pre_post_deps= 7793e96acad6Smrg if $opt_duplicate_compiler_generated_deps; then 7794e96acad6Smrg for pre_post_dep in $predeps $postdeps; do 7795e96acad6Smrg case "$pre_post_deps " in 7796e96acad6Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7797e96acad6Smrg esac 7798e96acad6Smrg func_append pre_post_deps " $pre_post_dep" 7799e96acad6Smrg done 7800e96acad6Smrg fi 7801e96acad6Smrg pre_post_deps= 7802e96acad6Smrg fi 7803e96acad6Smrg 7804e96acad6Smrg deplibs= 7805e96acad6Smrg newdependency_libs= 7806e96acad6Smrg newlib_search_path= 7807e96acad6Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 7808e96acad6Smrg notinst_deplibs= # not-installed libtool libraries 7809e96acad6Smrg notinst_path= # paths that contain not-installed libtool libraries 7810e96acad6Smrg 7811e96acad6Smrg case $linkmode in 7812e96acad6Smrg lib) 7813e96acad6Smrg passes="conv dlpreopen link" 7814e96acad6Smrg for file in $dlfiles $dlprefiles; do 7815e96acad6Smrg case $file in 7816e96acad6Smrg *.la) ;; 7817e96acad6Smrg *) 7818cfa76ccdSmrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7819e96acad6Smrg ;; 7820e96acad6Smrg esac 7821e96acad6Smrg done 7822e96acad6Smrg ;; 7823e96acad6Smrg prog) 7824e96acad6Smrg compile_deplibs= 7825e96acad6Smrg finalize_deplibs= 7826cfa76ccdSmrg alldeplibs=false 7827e96acad6Smrg newdlfiles= 7828e96acad6Smrg newdlprefiles= 7829e96acad6Smrg passes="conv scan dlopen dlpreopen link" 7830e96acad6Smrg ;; 7831e96acad6Smrg *) passes="conv" 7832e96acad6Smrg ;; 7833e96acad6Smrg esac 7834e96acad6Smrg 7835e96acad6Smrg for pass in $passes; do 7836e96acad6Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 7837e96acad6Smrg # so that -L comes before libs that need it for instance... 7838cfa76ccdSmrg if test lib,link = "$linkmode,$pass"; then 7839e96acad6Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 7840e96acad6Smrg ## order, and fix it there properly 7841e96acad6Smrg tmp_deplibs= 7842e96acad6Smrg for deplib in $deplibs; do 7843e96acad6Smrg tmp_deplibs="$deplib $tmp_deplibs" 7844e96acad6Smrg done 7845cfa76ccdSmrg deplibs=$tmp_deplibs 7846e96acad6Smrg fi 7847e96acad6Smrg 7848cfa76ccdSmrg if test lib,link = "$linkmode,$pass" || 7849cfa76ccdSmrg test prog,scan = "$linkmode,$pass"; then 7850cfa76ccdSmrg libs=$deplibs 7851e96acad6Smrg deplibs= 7852e96acad6Smrg fi 7853cfa76ccdSmrg if test prog = "$linkmode"; then 7854e96acad6Smrg case $pass in 7855cfa76ccdSmrg dlopen) libs=$dlfiles ;; 7856cfa76ccdSmrg dlpreopen) libs=$dlprefiles ;; 7857e96acad6Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7858e96acad6Smrg esac 7859e96acad6Smrg fi 7860cfa76ccdSmrg if test lib,dlpreopen = "$linkmode,$pass"; then 7861e96acad6Smrg # Collect and forward deplibs of preopened libtool libs 7862e96acad6Smrg for lib in $dlprefiles; do 7863e96acad6Smrg # Ignore non-libtool-libs 7864e96acad6Smrg dependency_libs= 7865e96acad6Smrg func_resolve_sysroot "$lib" 7866e96acad6Smrg case $lib in 7867e96acad6Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 7868e96acad6Smrg esac 7869e96acad6Smrg 7870e96acad6Smrg # Collect preopened libtool deplibs, except any this library 7871e96acad6Smrg # has declared as weak libs 7872e96acad6Smrg for deplib in $dependency_libs; do 7873e96acad6Smrg func_basename "$deplib" 7874e96acad6Smrg deplib_base=$func_basename_result 7875e96acad6Smrg case " $weak_libs " in 7876e96acad6Smrg *" $deplib_base "*) ;; 7877e96acad6Smrg *) func_append deplibs " $deplib" ;; 7878e96acad6Smrg esac 7879e96acad6Smrg done 7880e96acad6Smrg done 7881cfa76ccdSmrg libs=$dlprefiles 7882e96acad6Smrg fi 7883cfa76ccdSmrg if test dlopen = "$pass"; then 7884e96acad6Smrg # Collect dlpreopened libraries 7885cfa76ccdSmrg save_deplibs=$deplibs 7886e96acad6Smrg deplibs= 7887e96acad6Smrg fi 7888e96acad6Smrg 7889e96acad6Smrg for deplib in $libs; do 7890e96acad6Smrg lib= 7891cfa76ccdSmrg found=false 7892e96acad6Smrg case $deplib in 7893cfa76ccdSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7894cfa76ccdSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7895cfa76ccdSmrg if test prog,link = "$linkmode,$pass"; then 7896e96acad6Smrg compile_deplibs="$deplib $compile_deplibs" 7897e96acad6Smrg finalize_deplibs="$deplib $finalize_deplibs" 7898e96acad6Smrg else 7899e96acad6Smrg func_append compiler_flags " $deplib" 7900cfa76ccdSmrg if test lib = "$linkmode"; then 7901e96acad6Smrg case "$new_inherited_linker_flags " in 7902e96acad6Smrg *" $deplib "*) ;; 7903e96acad6Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7904e96acad6Smrg esac 7905e96acad6Smrg fi 7906e96acad6Smrg fi 7907e96acad6Smrg continue 7908e96acad6Smrg ;; 7909e96acad6Smrg -l*) 7910cfa76ccdSmrg if test lib != "$linkmode" && test prog != "$linkmode"; then 7911cfa76ccdSmrg func_warning "'-l' is ignored for archives/objects" 7912e96acad6Smrg continue 7913e96acad6Smrg fi 7914e96acad6Smrg func_stripname '-l' '' "$deplib" 7915e96acad6Smrg name=$func_stripname_result 7916cfa76ccdSmrg if test lib = "$linkmode"; then 7917e96acad6Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7918e96acad6Smrg else 7919e96acad6Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7920e96acad6Smrg fi 7921e96acad6Smrg for searchdir in $searchdirs; do 7922e96acad6Smrg for search_ext in .la $std_shrext .so .a; do 7923e96acad6Smrg # Search the libtool library 7924cfa76ccdSmrg lib=$searchdir/lib$name$search_ext 7925e96acad6Smrg if test -f "$lib"; then 7926cfa76ccdSmrg if test .la = "$search_ext"; then 7927cfa76ccdSmrg found=: 7928e96acad6Smrg else 7929cfa76ccdSmrg found=false 7930e96acad6Smrg fi 7931e96acad6Smrg break 2 7932e96acad6Smrg fi 7933e96acad6Smrg done 7934e96acad6Smrg done 7935cfa76ccdSmrg if $found; then 7936cfa76ccdSmrg # deplib is a libtool library 7937e96acad6Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7938e96acad6Smrg # We need to do some special things here, and not later. 7939cfa76ccdSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7940e96acad6Smrg case " $predeps $postdeps " in 7941e96acad6Smrg *" $deplib "*) 7942e96acad6Smrg if func_lalib_p "$lib"; then 7943e96acad6Smrg library_names= 7944e96acad6Smrg old_library= 7945e96acad6Smrg func_source "$lib" 7946e96acad6Smrg for l in $old_library $library_names; do 7947cfa76ccdSmrg ll=$l 7948e96acad6Smrg done 7949cfa76ccdSmrg if test "X$ll" = "X$old_library"; then # only static version available 7950cfa76ccdSmrg found=false 7951e96acad6Smrg func_dirname "$lib" "" "." 7952cfa76ccdSmrg ladir=$func_dirname_result 7953e96acad6Smrg lib=$ladir/$old_library 7954cfa76ccdSmrg if test prog,link = "$linkmode,$pass"; then 7955e96acad6Smrg compile_deplibs="$deplib $compile_deplibs" 7956e96acad6Smrg finalize_deplibs="$deplib $finalize_deplibs" 7957e96acad6Smrg else 7958e96acad6Smrg deplibs="$deplib $deplibs" 7959cfa76ccdSmrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7960e96acad6Smrg fi 7961e96acad6Smrg continue 7962e96acad6Smrg fi 7963e96acad6Smrg fi 7964e96acad6Smrg ;; 7965e96acad6Smrg *) ;; 7966e96acad6Smrg esac 7967e96acad6Smrg fi 7968cfa76ccdSmrg else 7969cfa76ccdSmrg # deplib doesn't seem to be a libtool library 7970cfa76ccdSmrg if test prog,link = "$linkmode,$pass"; then 7971cfa76ccdSmrg compile_deplibs="$deplib $compile_deplibs" 7972cfa76ccdSmrg finalize_deplibs="$deplib $finalize_deplibs" 7973cfa76ccdSmrg else 7974cfa76ccdSmrg deplibs="$deplib $deplibs" 7975cfa76ccdSmrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7976cfa76ccdSmrg fi 7977cfa76ccdSmrg continue 7978e96acad6Smrg fi 7979e96acad6Smrg ;; # -l 7980e96acad6Smrg *.ltframework) 7981cfa76ccdSmrg if test prog,link = "$linkmode,$pass"; then 7982e96acad6Smrg compile_deplibs="$deplib $compile_deplibs" 7983e96acad6Smrg finalize_deplibs="$deplib $finalize_deplibs" 7984e96acad6Smrg else 7985e96acad6Smrg deplibs="$deplib $deplibs" 7986cfa76ccdSmrg if test lib = "$linkmode"; then 7987e96acad6Smrg case "$new_inherited_linker_flags " in 7988e96acad6Smrg *" $deplib "*) ;; 7989e96acad6Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7990e96acad6Smrg esac 7991e96acad6Smrg fi 7992e96acad6Smrg fi 7993e96acad6Smrg continue 7994e96acad6Smrg ;; 7995e96acad6Smrg -L*) 7996e96acad6Smrg case $linkmode in 7997e96acad6Smrg lib) 7998e96acad6Smrg deplibs="$deplib $deplibs" 7999cfa76ccdSmrg test conv = "$pass" && continue 8000e96acad6Smrg newdependency_libs="$deplib $newdependency_libs" 8001e96acad6Smrg func_stripname '-L' '' "$deplib" 8002e96acad6Smrg func_resolve_sysroot "$func_stripname_result" 8003e96acad6Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8004e96acad6Smrg ;; 8005e96acad6Smrg prog) 8006cfa76ccdSmrg if test conv = "$pass"; then 8007e96acad6Smrg deplibs="$deplib $deplibs" 8008e96acad6Smrg continue 8009e96acad6Smrg fi 8010cfa76ccdSmrg if test scan = "$pass"; then 8011e96acad6Smrg deplibs="$deplib $deplibs" 8012e96acad6Smrg else 8013e96acad6Smrg compile_deplibs="$deplib $compile_deplibs" 8014e96acad6Smrg finalize_deplibs="$deplib $finalize_deplibs" 8015e96acad6Smrg fi 8016e96acad6Smrg func_stripname '-L' '' "$deplib" 8017e96acad6Smrg func_resolve_sysroot "$func_stripname_result" 8018e96acad6Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8019e96acad6Smrg ;; 8020e96acad6Smrg *) 8021cfa76ccdSmrg func_warning "'-L' is ignored for archives/objects" 8022e96acad6Smrg ;; 8023e96acad6Smrg esac # linkmode 8024e96acad6Smrg continue 8025e96acad6Smrg ;; # -L 8026e96acad6Smrg -R*) 8027cfa76ccdSmrg if test link = "$pass"; then 8028e96acad6Smrg func_stripname '-R' '' "$deplib" 8029e96acad6Smrg func_resolve_sysroot "$func_stripname_result" 8030e96acad6Smrg dir=$func_resolve_sysroot_result 8031e96acad6Smrg # Make sure the xrpath contains only unique directories. 8032e96acad6Smrg case "$xrpath " in 8033e96acad6Smrg *" $dir "*) ;; 8034e96acad6Smrg *) func_append xrpath " $dir" ;; 8035e96acad6Smrg esac 8036e96acad6Smrg fi 8037e96acad6Smrg deplibs="$deplib $deplibs" 8038e96acad6Smrg continue 8039e96acad6Smrg ;; 8040e96acad6Smrg *.la) 8041e96acad6Smrg func_resolve_sysroot "$deplib" 8042e96acad6Smrg lib=$func_resolve_sysroot_result 8043e96acad6Smrg ;; 8044e96acad6Smrg *.$libext) 8045cfa76ccdSmrg if test conv = "$pass"; then 8046e96acad6Smrg deplibs="$deplib $deplibs" 8047e96acad6Smrg continue 8048e96acad6Smrg fi 8049e96acad6Smrg case $linkmode in 8050e96acad6Smrg lib) 8051e96acad6Smrg # Linking convenience modules into shared libraries is allowed, 8052e96acad6Smrg # but linking other static libraries is non-portable. 8053e96acad6Smrg case " $dlpreconveniencelibs " in 8054e96acad6Smrg *" $deplib "*) ;; 8055e96acad6Smrg *) 8056cfa76ccdSmrg valid_a_lib=false 8057e96acad6Smrg case $deplibs_check_method in 8058e96acad6Smrg match_pattern*) 8059e96acad6Smrg set dummy $deplibs_check_method; shift 8060e96acad6Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 8061e96acad6Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 8062e96acad6Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 8063cfa76ccdSmrg valid_a_lib=: 8064e96acad6Smrg fi 8065e96acad6Smrg ;; 8066e96acad6Smrg pass_all) 8067cfa76ccdSmrg valid_a_lib=: 8068e96acad6Smrg ;; 8069e96acad6Smrg esac 8070cfa76ccdSmrg if $valid_a_lib; then 8071cfa76ccdSmrg echo 8072cfa76ccdSmrg $ECHO "*** Warning: Linking the shared library $output against the" 8073cfa76ccdSmrg $ECHO "*** static library $deplib is not portable!" 8074cfa76ccdSmrg deplibs="$deplib $deplibs" 8075cfa76ccdSmrg else 8076e96acad6Smrg echo 8077e96acad6Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 8078e96acad6Smrg echo "*** I have the capability to make that library automatically link in when" 8079e96acad6Smrg echo "*** you link to this library. But I can only do this if you have a" 8080e96acad6Smrg echo "*** shared version of the library, which you do not appear to have" 8081e96acad6Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 8082e96acad6Smrg echo "*** that it is just a static archive that I should not use here." 8083e96acad6Smrg fi 8084e96acad6Smrg ;; 8085e96acad6Smrg esac 8086e96acad6Smrg continue 8087e96acad6Smrg ;; 8088e96acad6Smrg prog) 8089cfa76ccdSmrg if test link != "$pass"; then 8090e96acad6Smrg deplibs="$deplib $deplibs" 8091e96acad6Smrg else 8092e96acad6Smrg compile_deplibs="$deplib $compile_deplibs" 8093e96acad6Smrg finalize_deplibs="$deplib $finalize_deplibs" 8094e96acad6Smrg fi 8095e96acad6Smrg continue 8096e96acad6Smrg ;; 8097e96acad6Smrg esac # linkmode 8098e96acad6Smrg ;; # *.$libext 8099e96acad6Smrg *.lo | *.$objext) 8100cfa76ccdSmrg if test conv = "$pass"; then 8101e96acad6Smrg deplibs="$deplib $deplibs" 8102cfa76ccdSmrg elif test prog = "$linkmode"; then 8103cfa76ccdSmrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 8104e96acad6Smrg # If there is no dlopen support or we're linking statically, 8105e96acad6Smrg # we need to preload. 8106e96acad6Smrg func_append newdlprefiles " $deplib" 8107e96acad6Smrg compile_deplibs="$deplib $compile_deplibs" 8108e96acad6Smrg finalize_deplibs="$deplib $finalize_deplibs" 8109e96acad6Smrg else 8110e96acad6Smrg func_append newdlfiles " $deplib" 8111e96acad6Smrg fi 8112e96acad6Smrg fi 8113e96acad6Smrg continue 8114e96acad6Smrg ;; 8115e96acad6Smrg %DEPLIBS%) 8116cfa76ccdSmrg alldeplibs=: 8117e96acad6Smrg continue 8118e96acad6Smrg ;; 8119e96acad6Smrg esac # case $deplib 8120e96acad6Smrg 8121cfa76ccdSmrg $found || test -f "$lib" \ 8122cfa76ccdSmrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 8123e96acad6Smrg 8124e96acad6Smrg # Check to see that this really is a libtool archive. 8125e96acad6Smrg func_lalib_unsafe_p "$lib" \ 8126cfa76ccdSmrg || func_fatal_error "'$lib' is not a valid libtool archive" 8127e96acad6Smrg 8128e96acad6Smrg func_dirname "$lib" "" "." 8129cfa76ccdSmrg ladir=$func_dirname_result 8130e96acad6Smrg 8131e96acad6Smrg dlname= 8132e96acad6Smrg dlopen= 8133e96acad6Smrg dlpreopen= 8134e96acad6Smrg libdir= 8135e96acad6Smrg library_names= 8136e96acad6Smrg old_library= 8137e96acad6Smrg inherited_linker_flags= 8138e96acad6Smrg # If the library was installed with an old release of libtool, 8139e96acad6Smrg # it will not redefine variables installed, or shouldnotlink 8140e96acad6Smrg installed=yes 8141e96acad6Smrg shouldnotlink=no 8142e96acad6Smrg avoidtemprpath= 8143e96acad6Smrg 8144e96acad6Smrg 8145e96acad6Smrg # Read the .la file 8146e96acad6Smrg func_source "$lib" 8147e96acad6Smrg 8148e96acad6Smrg # Convert "-framework foo" to "foo.ltframework" 8149e96acad6Smrg if test -n "$inherited_linker_flags"; then 8150e96acad6Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 8151e96acad6Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 8152e96acad6Smrg case " $new_inherited_linker_flags " in 8153e96acad6Smrg *" $tmp_inherited_linker_flag "*) ;; 8154e96acad6Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 8155e96acad6Smrg esac 8156e96acad6Smrg done 8157e96acad6Smrg fi 8158e96acad6Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8159cfa76ccdSmrg if test lib,link = "$linkmode,$pass" || 8160cfa76ccdSmrg test prog,scan = "$linkmode,$pass" || 8161cfa76ccdSmrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 8162e96acad6Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 8163e96acad6Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 8164e96acad6Smrg fi 8165e96acad6Smrg 8166cfa76ccdSmrg if test conv = "$pass"; then 8167e96acad6Smrg # Only check for convenience libraries 8168e96acad6Smrg deplibs="$lib $deplibs" 8169e96acad6Smrg if test -z "$libdir"; then 8170e96acad6Smrg if test -z "$old_library"; then 8171cfa76ccdSmrg func_fatal_error "cannot find name of link library for '$lib'" 8172e96acad6Smrg fi 8173e96acad6Smrg # It is a libtool convenience library, so add in its objects. 8174e96acad6Smrg func_append convenience " $ladir/$objdir/$old_library" 8175e96acad6Smrg func_append old_convenience " $ladir/$objdir/$old_library" 8176cfa76ccdSmrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 8177cfa76ccdSmrg func_fatal_error "'$lib' is not a convenience library" 8178e96acad6Smrg fi 8179e96acad6Smrg tmp_libs= 8180e96acad6Smrg for deplib in $dependency_libs; do 8181e96acad6Smrg deplibs="$deplib $deplibs" 8182cfa76ccdSmrg if $opt_preserve_dup_deps; then 8183e96acad6Smrg case "$tmp_libs " in 8184e96acad6Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8185e96acad6Smrg esac 8186e96acad6Smrg fi 8187e96acad6Smrg func_append tmp_libs " $deplib" 8188e96acad6Smrg done 8189e96acad6Smrg continue 8190e96acad6Smrg fi # $pass = conv 8191e96acad6Smrg 8192e96acad6Smrg 8193e96acad6Smrg # Get the name of the library we link against. 8194e96acad6Smrg linklib= 8195e96acad6Smrg if test -n "$old_library" && 8196cfa76ccdSmrg { test yes = "$prefer_static_libs" || 8197cfa76ccdSmrg test built,no = "$prefer_static_libs,$installed"; }; then 8198e96acad6Smrg linklib=$old_library 8199e96acad6Smrg else 8200e96acad6Smrg for l in $old_library $library_names; do 8201cfa76ccdSmrg linklib=$l 8202e96acad6Smrg done 8203e96acad6Smrg fi 8204e96acad6Smrg if test -z "$linklib"; then 8205cfa76ccdSmrg func_fatal_error "cannot find name of link library for '$lib'" 8206e96acad6Smrg fi 8207e96acad6Smrg 8208e96acad6Smrg # This library was specified with -dlopen. 8209cfa76ccdSmrg if test dlopen = "$pass"; then 8210cfa76ccdSmrg test -z "$libdir" \ 8211cfa76ccdSmrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 8212e96acad6Smrg if test -z "$dlname" || 8213cfa76ccdSmrg test yes != "$dlopen_support" || 8214cfa76ccdSmrg test no = "$build_libtool_libs" 8215cfa76ccdSmrg then 8216e96acad6Smrg # If there is no dlname, no dlopen support or we're linking 8217e96acad6Smrg # statically, we need to preload. We also need to preload any 8218e96acad6Smrg # dependent libraries so libltdl's deplib preloader doesn't 8219e96acad6Smrg # bomb out in the load deplibs phase. 8220e96acad6Smrg func_append dlprefiles " $lib $dependency_libs" 8221e96acad6Smrg else 8222e96acad6Smrg func_append newdlfiles " $lib" 8223e96acad6Smrg fi 8224e96acad6Smrg continue 8225e96acad6Smrg fi # $pass = dlopen 8226e96acad6Smrg 8227e96acad6Smrg # We need an absolute path. 8228e96acad6Smrg case $ladir in 8229cfa76ccdSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 8230e96acad6Smrg *) 8231e96acad6Smrg abs_ladir=`cd "$ladir" && pwd` 8232e96acad6Smrg if test -z "$abs_ladir"; then 8233cfa76ccdSmrg func_warning "cannot determine absolute directory name of '$ladir'" 8234e96acad6Smrg func_warning "passing it literally to the linker, although it might fail" 8235cfa76ccdSmrg abs_ladir=$ladir 8236e96acad6Smrg fi 8237e96acad6Smrg ;; 8238e96acad6Smrg esac 8239e96acad6Smrg func_basename "$lib" 8240cfa76ccdSmrg laname=$func_basename_result 8241e96acad6Smrg 8242e96acad6Smrg # Find the relevant object directory and library name. 8243cfa76ccdSmrg if test yes = "$installed"; then 8244e96acad6Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8245cfa76ccdSmrg func_warning "library '$lib' was moved." 8246cfa76ccdSmrg dir=$ladir 8247cfa76ccdSmrg absdir=$abs_ladir 8248cfa76ccdSmrg libdir=$abs_ladir 8249e96acad6Smrg else 8250cfa76ccdSmrg dir=$lt_sysroot$libdir 8251cfa76ccdSmrg absdir=$lt_sysroot$libdir 8252e96acad6Smrg fi 8253cfa76ccdSmrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 8254e96acad6Smrg else 8255e96acad6Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8256cfa76ccdSmrg dir=$ladir 8257cfa76ccdSmrg absdir=$abs_ladir 8258e96acad6Smrg # Remove this search path later 8259e96acad6Smrg func_append notinst_path " $abs_ladir" 8260e96acad6Smrg else 8261cfa76ccdSmrg dir=$ladir/$objdir 8262cfa76ccdSmrg absdir=$abs_ladir/$objdir 8263e96acad6Smrg # Remove this search path later 8264e96acad6Smrg func_append notinst_path " $abs_ladir" 8265e96acad6Smrg fi 8266e96acad6Smrg fi # $installed = yes 8267e96acad6Smrg func_stripname 'lib' '.la' "$laname" 8268e96acad6Smrg name=$func_stripname_result 8269e96acad6Smrg 8270e96acad6Smrg # This library was specified with -dlpreopen. 8271cfa76ccdSmrg if test dlpreopen = "$pass"; then 8272cfa76ccdSmrg if test -z "$libdir" && test prog = "$linkmode"; then 8273cfa76ccdSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 8274e96acad6Smrg fi 8275cfa76ccdSmrg case $host in 8276e96acad6Smrg # special handling for platforms with PE-DLLs. 8277e96acad6Smrg *cygwin* | *mingw* | *cegcc* ) 8278e96acad6Smrg # Linker will automatically link against shared library if both 8279e96acad6Smrg # static and shared are present. Therefore, ensure we extract 8280e96acad6Smrg # symbols from the import library if a shared library is present 8281e96acad6Smrg # (otherwise, the dlopen module name will be incorrect). We do 8282e96acad6Smrg # this by putting the import library name into $newdlprefiles. 8283e96acad6Smrg # We recover the dlopen module name by 'saving' the la file 8284e96acad6Smrg # name in a special purpose variable, and (later) extracting the 8285e96acad6Smrg # dlname from the la file. 8286e96acad6Smrg if test -n "$dlname"; then 8287e96acad6Smrg func_tr_sh "$dir/$linklib" 8288e96acad6Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8289e96acad6Smrg func_append newdlprefiles " $dir/$linklib" 8290e96acad6Smrg else 8291e96acad6Smrg func_append newdlprefiles " $dir/$old_library" 8292e96acad6Smrg # Keep a list of preopened convenience libraries to check 8293e96acad6Smrg # that they are being used correctly in the link pass. 8294e96acad6Smrg test -z "$libdir" && \ 8295e96acad6Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8296e96acad6Smrg fi 8297e96acad6Smrg ;; 8298e96acad6Smrg * ) 8299e96acad6Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8300e96acad6Smrg # are required to link). 8301e96acad6Smrg if test -n "$old_library"; then 8302e96acad6Smrg func_append newdlprefiles " $dir/$old_library" 8303e96acad6Smrg # Keep a list of preopened convenience libraries to check 8304e96acad6Smrg # that they are being used correctly in the link pass. 8305e96acad6Smrg test -z "$libdir" && \ 8306e96acad6Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8307e96acad6Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8308e96acad6Smrg elif test -n "$dlname"; then 8309e96acad6Smrg func_append newdlprefiles " $dir/$dlname" 8310e96acad6Smrg else 8311e96acad6Smrg func_append newdlprefiles " $dir/$linklib" 8312e96acad6Smrg fi 8313e96acad6Smrg ;; 8314e96acad6Smrg esac 8315e96acad6Smrg fi # $pass = dlpreopen 8316e96acad6Smrg 8317e96acad6Smrg if test -z "$libdir"; then 8318e96acad6Smrg # Link the convenience library 8319cfa76ccdSmrg if test lib = "$linkmode"; then 8320e96acad6Smrg deplibs="$dir/$old_library $deplibs" 8321cfa76ccdSmrg elif test prog,link = "$linkmode,$pass"; then 8322e96acad6Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 8323e96acad6Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8324e96acad6Smrg else 8325e96acad6Smrg deplibs="$lib $deplibs" # used for prog,scan pass 8326e96acad6Smrg fi 8327e96acad6Smrg continue 8328e96acad6Smrg fi 8329e96acad6Smrg 8330e96acad6Smrg 8331cfa76ccdSmrg if test prog = "$linkmode" && test link != "$pass"; then 8332e96acad6Smrg func_append newlib_search_path " $ladir" 8333e96acad6Smrg deplibs="$lib $deplibs" 8334e96acad6Smrg 8335cfa76ccdSmrg linkalldeplibs=false 8336cfa76ccdSmrg if test no != "$link_all_deplibs" || test -z "$library_names" || 8337cfa76ccdSmrg test no = "$build_libtool_libs"; then 8338cfa76ccdSmrg linkalldeplibs=: 8339e96acad6Smrg fi 8340e96acad6Smrg 8341e96acad6Smrg tmp_libs= 8342e96acad6Smrg for deplib in $dependency_libs; do 8343e96acad6Smrg case $deplib in 8344e96acad6Smrg -L*) func_stripname '-L' '' "$deplib" 8345e96acad6Smrg func_resolve_sysroot "$func_stripname_result" 8346e96acad6Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 8347e96acad6Smrg ;; 8348e96acad6Smrg esac 8349e96acad6Smrg # Need to link against all dependency_libs? 8350cfa76ccdSmrg if $linkalldeplibs; then 8351e96acad6Smrg deplibs="$deplib $deplibs" 8352e96acad6Smrg else 8353e96acad6Smrg # Need to hardcode shared library paths 8354e96acad6Smrg # or/and link against static libraries 8355e96acad6Smrg newdependency_libs="$deplib $newdependency_libs" 8356e96acad6Smrg fi 8357cfa76ccdSmrg if $opt_preserve_dup_deps; then 8358e96acad6Smrg case "$tmp_libs " in 8359e96acad6Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8360e96acad6Smrg esac 8361e96acad6Smrg fi 8362e96acad6Smrg func_append tmp_libs " $deplib" 8363e96acad6Smrg done # for deplib 8364e96acad6Smrg continue 8365e96acad6Smrg fi # $linkmode = prog... 8366e96acad6Smrg 8367cfa76ccdSmrg if test prog,link = "$linkmode,$pass"; then 8368e96acad6Smrg if test -n "$library_names" && 8369cfa76ccdSmrg { { test no = "$prefer_static_libs" || 8370cfa76ccdSmrg test built,yes = "$prefer_static_libs,$installed"; } || 8371e96acad6Smrg test -z "$old_library"; }; then 8372e96acad6Smrg # We need to hardcode the library path 8373cfa76ccdSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8374e96acad6Smrg # Make sure the rpath contains only unique directories. 8375cfa76ccdSmrg case $temp_rpath: in 8376e96acad6Smrg *"$absdir:"*) ;; 8377e96acad6Smrg *) func_append temp_rpath "$absdir:" ;; 8378e96acad6Smrg esac 8379e96acad6Smrg fi 8380e96acad6Smrg 8381e96acad6Smrg # Hardcode the library path. 8382e96acad6Smrg # Skip directories that are in the system default run-time 8383e96acad6Smrg # search path. 8384e96acad6Smrg case " $sys_lib_dlsearch_path " in 8385e96acad6Smrg *" $absdir "*) ;; 8386e96acad6Smrg *) 8387e96acad6Smrg case "$compile_rpath " in 8388e96acad6Smrg *" $absdir "*) ;; 8389e96acad6Smrg *) func_append compile_rpath " $absdir" ;; 8390e96acad6Smrg esac 8391e96acad6Smrg ;; 8392e96acad6Smrg esac 8393e96acad6Smrg case " $sys_lib_dlsearch_path " in 8394e96acad6Smrg *" $libdir "*) ;; 8395e96acad6Smrg *) 8396e96acad6Smrg case "$finalize_rpath " in 8397e96acad6Smrg *" $libdir "*) ;; 8398e96acad6Smrg *) func_append finalize_rpath " $libdir" ;; 8399e96acad6Smrg esac 8400e96acad6Smrg ;; 8401e96acad6Smrg esac 8402e96acad6Smrg fi # $linkmode,$pass = prog,link... 8403e96acad6Smrg 8404cfa76ccdSmrg if $alldeplibs && 8405cfa76ccdSmrg { test pass_all = "$deplibs_check_method" || 8406cfa76ccdSmrg { test yes = "$build_libtool_libs" && 8407e96acad6Smrg test -n "$library_names"; }; }; then 8408e96acad6Smrg # We only need to search for static libraries 8409e96acad6Smrg continue 8410e96acad6Smrg fi 8411e96acad6Smrg fi 8412e96acad6Smrg 8413e96acad6Smrg link_static=no # Whether the deplib will be linked statically 8414e96acad6Smrg use_static_libs=$prefer_static_libs 8415cfa76ccdSmrg if test built = "$use_static_libs" && test yes = "$installed"; then 8416e96acad6Smrg use_static_libs=no 8417e96acad6Smrg fi 8418e96acad6Smrg if test -n "$library_names" && 8419cfa76ccdSmrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8420e96acad6Smrg case $host in 8421cfa76ccdSmrg *cygwin* | *mingw* | *cegcc* | *os2*) 8422e96acad6Smrg # No point in relinking DLLs because paths are not encoded 8423e96acad6Smrg func_append notinst_deplibs " $lib" 8424e96acad6Smrg need_relink=no 8425e96acad6Smrg ;; 8426e96acad6Smrg *) 8427cfa76ccdSmrg if test no = "$installed"; then 8428e96acad6Smrg func_append notinst_deplibs " $lib" 8429e96acad6Smrg need_relink=yes 8430e96acad6Smrg fi 8431e96acad6Smrg ;; 8432e96acad6Smrg esac 8433e96acad6Smrg # This is a shared library 8434e96acad6Smrg 8435e96acad6Smrg # Warn about portability, can't link against -module's on some 8436e96acad6Smrg # systems (darwin). Don't bleat about dlopened modules though! 8437cfa76ccdSmrg dlopenmodule= 8438e96acad6Smrg for dlpremoduletest in $dlprefiles; do 8439e96acad6Smrg if test "X$dlpremoduletest" = "X$lib"; then 8440cfa76ccdSmrg dlopenmodule=$dlpremoduletest 8441e96acad6Smrg break 8442e96acad6Smrg fi 8443e96acad6Smrg done 8444cfa76ccdSmrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8445e96acad6Smrg echo 8446cfa76ccdSmrg if test prog = "$linkmode"; then 8447e96acad6Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 8448e96acad6Smrg else 8449e96acad6Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8450e96acad6Smrg fi 8451e96acad6Smrg $ECHO "*** $linklib is not portable!" 8452e96acad6Smrg fi 8453cfa76ccdSmrg if test lib = "$linkmode" && 8454cfa76ccdSmrg test yes = "$hardcode_into_libs"; then 8455e96acad6Smrg # Hardcode the library path. 8456e96acad6Smrg # Skip directories that are in the system default run-time 8457e96acad6Smrg # search path. 8458e96acad6Smrg case " $sys_lib_dlsearch_path " in 8459e96acad6Smrg *" $absdir "*) ;; 8460e96acad6Smrg *) 8461e96acad6Smrg case "$compile_rpath " in 8462e96acad6Smrg *" $absdir "*) ;; 8463e96acad6Smrg *) func_append compile_rpath " $absdir" ;; 8464e96acad6Smrg esac 8465e96acad6Smrg ;; 8466e96acad6Smrg esac 8467e96acad6Smrg case " $sys_lib_dlsearch_path " in 8468e96acad6Smrg *" $libdir "*) ;; 8469e96acad6Smrg *) 8470e96acad6Smrg case "$finalize_rpath " in 8471e96acad6Smrg *" $libdir "*) ;; 8472e96acad6Smrg *) func_append finalize_rpath " $libdir" ;; 8473e96acad6Smrg esac 8474e96acad6Smrg ;; 8475e96acad6Smrg esac 8476e96acad6Smrg fi 8477e96acad6Smrg 8478e96acad6Smrg if test -n "$old_archive_from_expsyms_cmds"; then 8479e96acad6Smrg # figure out the soname 8480e96acad6Smrg set dummy $library_names 8481e96acad6Smrg shift 8482cfa76ccdSmrg realname=$1 8483e96acad6Smrg shift 8484e96acad6Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 8485e96acad6Smrg # use dlname if we got it. it's perfectly good, no? 8486e96acad6Smrg if test -n "$dlname"; then 8487cfa76ccdSmrg soname=$dlname 8488e96acad6Smrg elif test -n "$soname_spec"; then 8489e96acad6Smrg # bleh windows 8490e96acad6Smrg case $host in 8491cfa76ccdSmrg *cygwin* | mingw* | *cegcc* | *os2*) 8492e96acad6Smrg func_arith $current - $age 8493e96acad6Smrg major=$func_arith_result 8494cfa76ccdSmrg versuffix=-$major 8495e96acad6Smrg ;; 8496e96acad6Smrg esac 8497e96acad6Smrg eval soname=\"$soname_spec\" 8498e96acad6Smrg else 8499cfa76ccdSmrg soname=$realname 8500e96acad6Smrg fi 8501e96acad6Smrg 8502e96acad6Smrg # Make a new name for the extract_expsyms_cmds to use 8503cfa76ccdSmrg soroot=$soname 8504e96acad6Smrg func_basename "$soroot" 8505cfa76ccdSmrg soname=$func_basename_result 8506e96acad6Smrg func_stripname 'lib' '.dll' "$soname" 8507e96acad6Smrg newlib=libimp-$func_stripname_result.a 8508e96acad6Smrg 8509e96acad6Smrg # If the library has no export list, then create one now 8510e96acad6Smrg if test -f "$output_objdir/$soname-def"; then : 8511e96acad6Smrg else 8512cfa76ccdSmrg func_verbose "extracting exported symbol list from '$soname'" 8513e96acad6Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8514e96acad6Smrg fi 8515e96acad6Smrg 8516e96acad6Smrg # Create $newlib 8517e96acad6Smrg if test -f "$output_objdir/$newlib"; then :; else 8518cfa76ccdSmrg func_verbose "generating import library for '$soname'" 8519e96acad6Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8520e96acad6Smrg fi 8521e96acad6Smrg # make sure the library variables are pointing to the new library 8522e96acad6Smrg dir=$output_objdir 8523e96acad6Smrg linklib=$newlib 8524e96acad6Smrg fi # test -n "$old_archive_from_expsyms_cmds" 8525e96acad6Smrg 8526cfa76ccdSmrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8527e96acad6Smrg add_shlibpath= 8528e96acad6Smrg add_dir= 8529e96acad6Smrg add= 8530e96acad6Smrg lib_linked=yes 8531e96acad6Smrg case $hardcode_action in 8532e96acad6Smrg immediate | unsupported) 8533cfa76ccdSmrg if test no = "$hardcode_direct"; then 8534cfa76ccdSmrg add=$dir/$linklib 8535e96acad6Smrg case $host in 8536cfa76ccdSmrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8537cfa76ccdSmrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8538e96acad6Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8539cfa76ccdSmrg *-*-unixware7*) add_dir=-L$dir ;; 8540e96acad6Smrg *-*-darwin* ) 8541cfa76ccdSmrg # if the lib is a (non-dlopened) module then we cannot 8542e96acad6Smrg # link against it, someone is ignoring the earlier warnings 8543e96acad6Smrg if /usr/bin/file -L $add 2> /dev/null | 8544cfa76ccdSmrg $GREP ": [^:]* bundle" >/dev/null; then 8545e96acad6Smrg if test "X$dlopenmodule" != "X$lib"; then 8546e96acad6Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8547cfa76ccdSmrg if test -z "$old_library"; then 8548e96acad6Smrg echo 8549e96acad6Smrg echo "*** And there doesn't seem to be a static archive available" 8550e96acad6Smrg echo "*** The link will probably fail, sorry" 8551e96acad6Smrg else 8552cfa76ccdSmrg add=$dir/$old_library 8553e96acad6Smrg fi 8554e96acad6Smrg elif test -n "$old_library"; then 8555cfa76ccdSmrg add=$dir/$old_library 8556e96acad6Smrg fi 8557e96acad6Smrg fi 8558e96acad6Smrg esac 8559cfa76ccdSmrg elif test no = "$hardcode_minus_L"; then 8560e96acad6Smrg case $host in 8561cfa76ccdSmrg *-*-sunos*) add_shlibpath=$dir ;; 8562e96acad6Smrg esac 8563cfa76ccdSmrg add_dir=-L$dir 8564cfa76ccdSmrg add=-l$name 8565cfa76ccdSmrg elif test no = "$hardcode_shlibpath_var"; then 8566cfa76ccdSmrg add_shlibpath=$dir 8567cfa76ccdSmrg add=-l$name 8568e96acad6Smrg else 8569e96acad6Smrg lib_linked=no 8570e96acad6Smrg fi 8571e96acad6Smrg ;; 8572e96acad6Smrg relink) 8573cfa76ccdSmrg if test yes = "$hardcode_direct" && 8574cfa76ccdSmrg test no = "$hardcode_direct_absolute"; then 8575cfa76ccdSmrg add=$dir/$linklib 8576cfa76ccdSmrg elif test yes = "$hardcode_minus_L"; then 8577cfa76ccdSmrg add_dir=-L$absdir 8578e96acad6Smrg # Try looking first in the location we're being installed to. 8579e96acad6Smrg if test -n "$inst_prefix_dir"; then 8580e96acad6Smrg case $libdir in 8581e96acad6Smrg [\\/]*) 8582e96acad6Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8583e96acad6Smrg ;; 8584e96acad6Smrg esac 8585e96acad6Smrg fi 8586cfa76ccdSmrg add=-l$name 8587cfa76ccdSmrg elif test yes = "$hardcode_shlibpath_var"; then 8588cfa76ccdSmrg add_shlibpath=$dir 8589cfa76ccdSmrg add=-l$name 8590e96acad6Smrg else 8591e96acad6Smrg lib_linked=no 8592e96acad6Smrg fi 8593e96acad6Smrg ;; 8594e96acad6Smrg *) lib_linked=no ;; 8595e96acad6Smrg esac 8596e96acad6Smrg 8597cfa76ccdSmrg if test yes != "$lib_linked"; then 8598e96acad6Smrg func_fatal_configuration "unsupported hardcode properties" 8599e96acad6Smrg fi 8600e96acad6Smrg 8601e96acad6Smrg if test -n "$add_shlibpath"; then 8602e96acad6Smrg case :$compile_shlibpath: in 8603e96acad6Smrg *":$add_shlibpath:"*) ;; 8604e96acad6Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8605e96acad6Smrg esac 8606e96acad6Smrg fi 8607cfa76ccdSmrg if test prog = "$linkmode"; then 8608e96acad6Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8609e96acad6Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8610e96acad6Smrg else 8611e96acad6Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8612e96acad6Smrg test -n "$add" && deplibs="$add $deplibs" 8613cfa76ccdSmrg if test yes != "$hardcode_direct" && 8614cfa76ccdSmrg test yes != "$hardcode_minus_L" && 8615cfa76ccdSmrg test yes = "$hardcode_shlibpath_var"; then 8616e96acad6Smrg case :$finalize_shlibpath: in 8617e96acad6Smrg *":$libdir:"*) ;; 8618e96acad6Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8619e96acad6Smrg esac 8620e96acad6Smrg fi 8621e96acad6Smrg fi 8622e96acad6Smrg fi 8623e96acad6Smrg 8624cfa76ccdSmrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8625e96acad6Smrg add_shlibpath= 8626e96acad6Smrg add_dir= 8627e96acad6Smrg add= 8628e96acad6Smrg # Finalize command for both is simple: just hardcode it. 8629cfa76ccdSmrg if test yes = "$hardcode_direct" && 8630cfa76ccdSmrg test no = "$hardcode_direct_absolute"; then 8631cfa76ccdSmrg add=$libdir/$linklib 8632cfa76ccdSmrg elif test yes = "$hardcode_minus_L"; then 8633cfa76ccdSmrg add_dir=-L$libdir 8634cfa76ccdSmrg add=-l$name 8635cfa76ccdSmrg elif test yes = "$hardcode_shlibpath_var"; then 8636e96acad6Smrg case :$finalize_shlibpath: in 8637e96acad6Smrg *":$libdir:"*) ;; 8638e96acad6Smrg *) func_append finalize_shlibpath "$libdir:" ;; 8639e96acad6Smrg esac 8640cfa76ccdSmrg add=-l$name 8641cfa76ccdSmrg elif test yes = "$hardcode_automatic"; then 8642e96acad6Smrg if test -n "$inst_prefix_dir" && 8643cfa76ccdSmrg test -f "$inst_prefix_dir$libdir/$linklib"; then 8644cfa76ccdSmrg add=$inst_prefix_dir$libdir/$linklib 8645e96acad6Smrg else 8646cfa76ccdSmrg add=$libdir/$linklib 8647e96acad6Smrg fi 8648e96acad6Smrg else 8649e96acad6Smrg # We cannot seem to hardcode it, guess we'll fake it. 8650cfa76ccdSmrg add_dir=-L$libdir 8651e96acad6Smrg # Try looking first in the location we're being installed to. 8652e96acad6Smrg if test -n "$inst_prefix_dir"; then 8653e96acad6Smrg case $libdir in 8654e96acad6Smrg [\\/]*) 8655e96acad6Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 8656e96acad6Smrg ;; 8657e96acad6Smrg esac 8658e96acad6Smrg fi 8659cfa76ccdSmrg add=-l$name 8660e96acad6Smrg fi 8661e96acad6Smrg 8662cfa76ccdSmrg if test prog = "$linkmode"; then 8663e96acad6Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8664e96acad6Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8665e96acad6Smrg else 8666e96acad6Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8667e96acad6Smrg test -n "$add" && deplibs="$add $deplibs" 8668e96acad6Smrg fi 8669e96acad6Smrg fi 8670cfa76ccdSmrg elif test prog = "$linkmode"; then 8671e96acad6Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8672e96acad6Smrg # is not unsupported. This is valid on all known static and 8673e96acad6Smrg # shared platforms. 8674cfa76ccdSmrg if test unsupported != "$hardcode_direct"; then 8675cfa76ccdSmrg test -n "$old_library" && linklib=$old_library 8676e96acad6Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 8677e96acad6Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8678e96acad6Smrg else 8679e96acad6Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8680e96acad6Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8681e96acad6Smrg fi 8682cfa76ccdSmrg elif test yes = "$build_libtool_libs"; then 8683e96acad6Smrg # Not a shared library 8684cfa76ccdSmrg if test pass_all != "$deplibs_check_method"; then 8685e96acad6Smrg # We're trying link a shared library against a static one 8686e96acad6Smrg # but the system doesn't support it. 8687e96acad6Smrg 8688e96acad6Smrg # Just print a warning and add the library to dependency_libs so 8689e96acad6Smrg # that the program can be linked against the static library. 8690e96acad6Smrg echo 8691cfa76ccdSmrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8692e96acad6Smrg echo "*** I have the capability to make that library automatically link in when" 8693e96acad6Smrg echo "*** you link to this library. But I can only do this if you have a" 8694e96acad6Smrg echo "*** shared version of the library, which you do not appear to have." 8695cfa76ccdSmrg if test yes = "$module"; then 8696e96acad6Smrg echo "*** But as you try to build a module library, libtool will still create " 8697e96acad6Smrg echo "*** a static module, that should work as long as the dlopening application" 8698e96acad6Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8699e96acad6Smrg if test -z "$global_symbol_pipe"; then 8700e96acad6Smrg echo 8701e96acad6Smrg echo "*** However, this would only work if libtool was able to extract symbol" 8702cfa76ccdSmrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8703e96acad6Smrg echo "*** not find such a program. So, this module is probably useless." 8704cfa76ccdSmrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 8705e96acad6Smrg fi 8706cfa76ccdSmrg if test no = "$build_old_libs"; then 8707e96acad6Smrg build_libtool_libs=module 8708e96acad6Smrg build_old_libs=yes 8709e96acad6Smrg else 8710e96acad6Smrg build_libtool_libs=no 8711e96acad6Smrg fi 8712e96acad6Smrg fi 8713e96acad6Smrg else 8714e96acad6Smrg deplibs="$dir/$old_library $deplibs" 8715e96acad6Smrg link_static=yes 8716e96acad6Smrg fi 8717e96acad6Smrg fi # link shared/static library? 8718e96acad6Smrg 8719cfa76ccdSmrg if test lib = "$linkmode"; then 8720e96acad6Smrg if test -n "$dependency_libs" && 8721cfa76ccdSmrg { test yes != "$hardcode_into_libs" || 8722cfa76ccdSmrg test yes = "$build_old_libs" || 8723cfa76ccdSmrg test yes = "$link_static"; }; then 8724e96acad6Smrg # Extract -R from dependency_libs 8725e96acad6Smrg temp_deplibs= 8726e96acad6Smrg for libdir in $dependency_libs; do 8727e96acad6Smrg case $libdir in 8728e96acad6Smrg -R*) func_stripname '-R' '' "$libdir" 8729e96acad6Smrg temp_xrpath=$func_stripname_result 8730e96acad6Smrg case " $xrpath " in 8731e96acad6Smrg *" $temp_xrpath "*) ;; 8732e96acad6Smrg *) func_append xrpath " $temp_xrpath";; 8733e96acad6Smrg esac;; 8734e96acad6Smrg *) func_append temp_deplibs " $libdir";; 8735e96acad6Smrg esac 8736e96acad6Smrg done 8737cfa76ccdSmrg dependency_libs=$temp_deplibs 8738e96acad6Smrg fi 8739e96acad6Smrg 8740e96acad6Smrg func_append newlib_search_path " $absdir" 8741e96acad6Smrg # Link against this library 8742cfa76ccdSmrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8743e96acad6Smrg # ... and its dependency_libs 8744e96acad6Smrg tmp_libs= 8745e96acad6Smrg for deplib in $dependency_libs; do 8746e96acad6Smrg newdependency_libs="$deplib $newdependency_libs" 8747e96acad6Smrg case $deplib in 8748e96acad6Smrg -L*) func_stripname '-L' '' "$deplib" 8749e96acad6Smrg func_resolve_sysroot "$func_stripname_result";; 8750e96acad6Smrg *) func_resolve_sysroot "$deplib" ;; 8751e96acad6Smrg esac 8752cfa76ccdSmrg if $opt_preserve_dup_deps; then 8753e96acad6Smrg case "$tmp_libs " in 8754e96acad6Smrg *" $func_resolve_sysroot_result "*) 8755e96acad6Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8756e96acad6Smrg esac 8757e96acad6Smrg fi 8758e96acad6Smrg func_append tmp_libs " $func_resolve_sysroot_result" 8759e96acad6Smrg done 8760e96acad6Smrg 8761cfa76ccdSmrg if test no != "$link_all_deplibs"; then 8762e96acad6Smrg # Add the search paths of all dependency libraries 8763e96acad6Smrg for deplib in $dependency_libs; do 8764e96acad6Smrg path= 8765e96acad6Smrg case $deplib in 8766cfa76ccdSmrg -L*) path=$deplib ;; 8767e96acad6Smrg *.la) 8768e96acad6Smrg func_resolve_sysroot "$deplib" 8769e96acad6Smrg deplib=$func_resolve_sysroot_result 8770e96acad6Smrg func_dirname "$deplib" "" "." 8771e96acad6Smrg dir=$func_dirname_result 8772e96acad6Smrg # We need an absolute path. 8773e96acad6Smrg case $dir in 8774cfa76ccdSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8775e96acad6Smrg *) 8776e96acad6Smrg absdir=`cd "$dir" && pwd` 8777e96acad6Smrg if test -z "$absdir"; then 8778cfa76ccdSmrg func_warning "cannot determine absolute directory name of '$dir'" 8779cfa76ccdSmrg absdir=$dir 8780e96acad6Smrg fi 8781e96acad6Smrg ;; 8782e96acad6Smrg esac 8783e96acad6Smrg if $GREP "^installed=no" $deplib > /dev/null; then 8784e96acad6Smrg case $host in 8785e96acad6Smrg *-*-darwin*) 8786e96acad6Smrg depdepl= 8787cfa76ccdSmrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8788cfa76ccdSmrg if test -n "$deplibrary_names"; then 8789cfa76ccdSmrg for tmp in $deplibrary_names; do 8790e96acad6Smrg depdepl=$tmp 8791e96acad6Smrg done 8792cfa76ccdSmrg if test -f "$absdir/$objdir/$depdepl"; then 8793cfa76ccdSmrg depdepl=$absdir/$objdir/$depdepl 8794cfa76ccdSmrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8795e96acad6Smrg if test -z "$darwin_install_name"; then 8796cfa76ccdSmrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8797e96acad6Smrg fi 8798cfa76ccdSmrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8799cfa76ccdSmrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8800e96acad6Smrg path= 8801e96acad6Smrg fi 8802e96acad6Smrg fi 8803e96acad6Smrg ;; 8804e96acad6Smrg *) 8805cfa76ccdSmrg path=-L$absdir/$objdir 8806e96acad6Smrg ;; 8807e96acad6Smrg esac 8808e96acad6Smrg else 8809cfa76ccdSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8810e96acad6Smrg test -z "$libdir" && \ 8811cfa76ccdSmrg func_fatal_error "'$deplib' is not a valid libtool archive" 8812e96acad6Smrg test "$absdir" != "$libdir" && \ 8813cfa76ccdSmrg func_warning "'$deplib' seems to be moved" 8814e96acad6Smrg 8815cfa76ccdSmrg path=-L$absdir 8816e96acad6Smrg fi 8817e96acad6Smrg ;; 8818e96acad6Smrg esac 8819e96acad6Smrg case " $deplibs " in 8820e96acad6Smrg *" $path "*) ;; 8821e96acad6Smrg *) deplibs="$path $deplibs" ;; 8822e96acad6Smrg esac 8823e96acad6Smrg done 8824e96acad6Smrg fi # link_all_deplibs != no 8825e96acad6Smrg fi # linkmode = lib 8826e96acad6Smrg done # for deplib in $libs 8827cfa76ccdSmrg if test link = "$pass"; then 8828cfa76ccdSmrg if test prog = "$linkmode"; then 8829e96acad6Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8830e96acad6Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8831e96acad6Smrg else 8832e96acad6Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8833e96acad6Smrg fi 8834e96acad6Smrg fi 8835cfa76ccdSmrg dependency_libs=$newdependency_libs 8836cfa76ccdSmrg if test dlpreopen = "$pass"; then 8837e96acad6Smrg # Link the dlpreopened libraries before other libraries 8838e96acad6Smrg for deplib in $save_deplibs; do 8839e96acad6Smrg deplibs="$deplib $deplibs" 8840e96acad6Smrg done 8841e96acad6Smrg fi 8842cfa76ccdSmrg if test dlopen != "$pass"; then 8843cfa76ccdSmrg test conv = "$pass" || { 8844e96acad6Smrg # Make sure lib_search_path contains only unique directories. 8845e96acad6Smrg lib_search_path= 8846e96acad6Smrg for dir in $newlib_search_path; do 8847e96acad6Smrg case "$lib_search_path " in 8848e96acad6Smrg *" $dir "*) ;; 8849e96acad6Smrg *) func_append lib_search_path " $dir" ;; 8850e96acad6Smrg esac 8851e96acad6Smrg done 8852e96acad6Smrg newlib_search_path= 8853cfa76ccdSmrg } 8854e96acad6Smrg 8855cfa76ccdSmrg if test prog,link = "$linkmode,$pass"; then 8856e96acad6Smrg vars="compile_deplibs finalize_deplibs" 8857cfa76ccdSmrg else 8858cfa76ccdSmrg vars=deplibs 8859e96acad6Smrg fi 8860e96acad6Smrg for var in $vars dependency_libs; do 8861e96acad6Smrg # Add libraries to $var in reverse order 8862e96acad6Smrg eval tmp_libs=\"\$$var\" 8863e96acad6Smrg new_libs= 8864e96acad6Smrg for deplib in $tmp_libs; do 8865e96acad6Smrg # FIXME: Pedantically, this is the right thing to do, so 8866e96acad6Smrg # that some nasty dependency loop isn't accidentally 8867e96acad6Smrg # broken: 8868e96acad6Smrg #new_libs="$deplib $new_libs" 8869e96acad6Smrg # Pragmatically, this seems to cause very few problems in 8870e96acad6Smrg # practice: 8871e96acad6Smrg case $deplib in 8872e96acad6Smrg -L*) new_libs="$deplib $new_libs" ;; 8873e96acad6Smrg -R*) ;; 8874e96acad6Smrg *) 8875e96acad6Smrg # And here is the reason: when a library appears more 8876e96acad6Smrg # than once as an explicit dependence of a library, or 8877e96acad6Smrg # is implicitly linked in more than once by the 8878e96acad6Smrg # compiler, it is considered special, and multiple 8879e96acad6Smrg # occurrences thereof are not removed. Compare this 8880e96acad6Smrg # with having the same library being listed as a 8881e96acad6Smrg # dependency of multiple other libraries: in this case, 8882e96acad6Smrg # we know (pedantically, we assume) the library does not 8883e96acad6Smrg # need to be listed more than once, so we keep only the 8884e96acad6Smrg # last copy. This is not always right, but it is rare 8885e96acad6Smrg # enough that we require users that really mean to play 8886e96acad6Smrg # such unportable linking tricks to link the library 8887e96acad6Smrg # using -Wl,-lname, so that libtool does not consider it 8888e96acad6Smrg # for duplicate removal. 8889e96acad6Smrg case " $specialdeplibs " in 8890e96acad6Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 8891e96acad6Smrg *) 8892e96acad6Smrg case " $new_libs " in 8893e96acad6Smrg *" $deplib "*) ;; 8894e96acad6Smrg *) new_libs="$deplib $new_libs" ;; 8895e96acad6Smrg esac 8896e96acad6Smrg ;; 8897e96acad6Smrg esac 8898e96acad6Smrg ;; 8899e96acad6Smrg esac 8900e96acad6Smrg done 8901e96acad6Smrg tmp_libs= 8902e96acad6Smrg for deplib in $new_libs; do 8903e96acad6Smrg case $deplib in 8904e96acad6Smrg -L*) 8905e96acad6Smrg case " $tmp_libs " in 8906e96acad6Smrg *" $deplib "*) ;; 8907e96acad6Smrg *) func_append tmp_libs " $deplib" ;; 8908e96acad6Smrg esac 8909e96acad6Smrg ;; 8910e96acad6Smrg *) func_append tmp_libs " $deplib" ;; 8911e96acad6Smrg esac 8912e96acad6Smrg done 8913e96acad6Smrg eval $var=\"$tmp_libs\" 8914e96acad6Smrg done # for var 8915e96acad6Smrg fi 8916cfa76ccdSmrg 8917cfa76ccdSmrg # Add Sun CC postdeps if required: 8918cfa76ccdSmrg test CXX = "$tagname" && { 8919cfa76ccdSmrg case $host_os in 8920cfa76ccdSmrg linux*) 8921cfa76ccdSmrg case `$CC -V 2>&1 | $SED 5q` in 8922cfa76ccdSmrg *Sun\ C*) # Sun C++ 5.9 8923cfa76ccdSmrg func_suncc_cstd_abi 8924cfa76ccdSmrg 8925cfa76ccdSmrg if test no != "$suncc_use_cstd_abi"; then 8926cfa76ccdSmrg func_append postdeps ' -library=Cstd -library=Crun' 8927cfa76ccdSmrg fi 8928cfa76ccdSmrg ;; 8929cfa76ccdSmrg esac 8930cfa76ccdSmrg ;; 8931cfa76ccdSmrg 8932cfa76ccdSmrg solaris*) 8933cfa76ccdSmrg func_cc_basename "$CC" 8934cfa76ccdSmrg case $func_cc_basename_result in 8935cfa76ccdSmrg CC* | sunCC*) 8936cfa76ccdSmrg func_suncc_cstd_abi 8937cfa76ccdSmrg 8938cfa76ccdSmrg if test no != "$suncc_use_cstd_abi"; then 8939cfa76ccdSmrg func_append postdeps ' -library=Cstd -library=Crun' 8940cfa76ccdSmrg fi 8941cfa76ccdSmrg ;; 8942cfa76ccdSmrg esac 8943cfa76ccdSmrg ;; 8944cfa76ccdSmrg esac 8945cfa76ccdSmrg } 8946cfa76ccdSmrg 8947e96acad6Smrg # Last step: remove runtime libs from dependency_libs 8948e96acad6Smrg # (they stay in deplibs) 8949e96acad6Smrg tmp_libs= 8950cfa76ccdSmrg for i in $dependency_libs; do 8951e96acad6Smrg case " $predeps $postdeps $compiler_lib_search_path " in 8952e96acad6Smrg *" $i "*) 8953cfa76ccdSmrg i= 8954e96acad6Smrg ;; 8955e96acad6Smrg esac 8956cfa76ccdSmrg if test -n "$i"; then 8957e96acad6Smrg func_append tmp_libs " $i" 8958e96acad6Smrg fi 8959e96acad6Smrg done 8960e96acad6Smrg dependency_libs=$tmp_libs 8961e96acad6Smrg done # for pass 8962cfa76ccdSmrg if test prog = "$linkmode"; then 8963cfa76ccdSmrg dlfiles=$newdlfiles 8964e96acad6Smrg fi 8965cfa76ccdSmrg if test prog = "$linkmode" || test lib = "$linkmode"; then 8966cfa76ccdSmrg dlprefiles=$newdlprefiles 8967e96acad6Smrg fi 8968e96acad6Smrg 8969e96acad6Smrg case $linkmode in 8970e96acad6Smrg oldlib) 8971cfa76ccdSmrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8972cfa76ccdSmrg func_warning "'-dlopen' is ignored for archives" 8973e96acad6Smrg fi 8974e96acad6Smrg 8975e96acad6Smrg case " $deplibs" in 8976e96acad6Smrg *\ -l* | *\ -L*) 8977cfa76ccdSmrg func_warning "'-l' and '-L' are ignored for archives" ;; 8978e96acad6Smrg esac 8979e96acad6Smrg 8980e96acad6Smrg test -n "$rpath" && \ 8981cfa76ccdSmrg func_warning "'-rpath' is ignored for archives" 8982e96acad6Smrg 8983e96acad6Smrg test -n "$xrpath" && \ 8984cfa76ccdSmrg func_warning "'-R' is ignored for archives" 8985e96acad6Smrg 8986e96acad6Smrg test -n "$vinfo" && \ 8987cfa76ccdSmrg func_warning "'-version-info/-version-number' is ignored for archives" 8988e96acad6Smrg 8989e96acad6Smrg test -n "$release" && \ 8990cfa76ccdSmrg func_warning "'-release' is ignored for archives" 8991e96acad6Smrg 8992e96acad6Smrg test -n "$export_symbols$export_symbols_regex" && \ 8993cfa76ccdSmrg func_warning "'-export-symbols' is ignored for archives" 8994e96acad6Smrg 8995e96acad6Smrg # Now set the variables for building old libraries. 8996e96acad6Smrg build_libtool_libs=no 8997cfa76ccdSmrg oldlibs=$output 8998e96acad6Smrg func_append objs "$old_deplibs" 8999e96acad6Smrg ;; 9000e96acad6Smrg 9001e96acad6Smrg lib) 9002cfa76ccdSmrg # Make sure we only generate libraries of the form 'libNAME.la'. 9003e96acad6Smrg case $outputname in 9004e96acad6Smrg lib*) 9005e96acad6Smrg func_stripname 'lib' '.la' "$outputname" 9006e96acad6Smrg name=$func_stripname_result 9007e96acad6Smrg eval shared_ext=\"$shrext_cmds\" 9008e96acad6Smrg eval libname=\"$libname_spec\" 9009e96acad6Smrg ;; 9010e96acad6Smrg *) 9011cfa76ccdSmrg test no = "$module" \ 9012cfa76ccdSmrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 9013e96acad6Smrg 9014cfa76ccdSmrg if test no != "$need_lib_prefix"; then 9015e96acad6Smrg # Add the "lib" prefix for modules if required 9016e96acad6Smrg func_stripname '' '.la' "$outputname" 9017e96acad6Smrg name=$func_stripname_result 9018e96acad6Smrg eval shared_ext=\"$shrext_cmds\" 9019e96acad6Smrg eval libname=\"$libname_spec\" 9020e96acad6Smrg else 9021e96acad6Smrg func_stripname '' '.la' "$outputname" 9022e96acad6Smrg libname=$func_stripname_result 9023e96acad6Smrg fi 9024e96acad6Smrg ;; 9025e96acad6Smrg esac 9026e96acad6Smrg 9027e96acad6Smrg if test -n "$objs"; then 9028cfa76ccdSmrg if test pass_all != "$deplibs_check_method"; then 9029cfa76ccdSmrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 9030e96acad6Smrg else 9031e96acad6Smrg echo 9032e96acad6Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 9033e96acad6Smrg $ECHO "*** objects $objs is not portable!" 9034e96acad6Smrg func_append libobjs " $objs" 9035e96acad6Smrg fi 9036e96acad6Smrg fi 9037e96acad6Smrg 9038cfa76ccdSmrg test no = "$dlself" \ 9039cfa76ccdSmrg || func_warning "'-dlopen self' is ignored for libtool libraries" 9040e96acad6Smrg 9041e96acad6Smrg set dummy $rpath 9042e96acad6Smrg shift 9043cfa76ccdSmrg test 1 -lt "$#" \ 9044cfa76ccdSmrg && func_warning "ignoring multiple '-rpath's for a libtool library" 9045e96acad6Smrg 9046cfa76ccdSmrg install_libdir=$1 9047e96acad6Smrg 9048e96acad6Smrg oldlibs= 9049e96acad6Smrg if test -z "$rpath"; then 9050cfa76ccdSmrg if test yes = "$build_libtool_libs"; then 9051e96acad6Smrg # Building a libtool convenience library. 9052cfa76ccdSmrg # Some compilers have problems with a '.al' extension so 9053e96acad6Smrg # convenience libraries should have the same extension an 9054e96acad6Smrg # archive normally would. 9055e96acad6Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 9056e96acad6Smrg build_libtool_libs=convenience 9057e96acad6Smrg build_old_libs=yes 9058e96acad6Smrg fi 9059e96acad6Smrg 9060e96acad6Smrg test -n "$vinfo" && \ 9061cfa76ccdSmrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 9062e96acad6Smrg 9063e96acad6Smrg test -n "$release" && \ 9064cfa76ccdSmrg func_warning "'-release' is ignored for convenience libraries" 9065e96acad6Smrg else 9066e96acad6Smrg 9067e96acad6Smrg # Parse the version information argument. 9068cfa76ccdSmrg save_ifs=$IFS; IFS=: 9069e96acad6Smrg set dummy $vinfo 0 0 0 9070e96acad6Smrg shift 9071cfa76ccdSmrg IFS=$save_ifs 9072e96acad6Smrg 9073e96acad6Smrg test -n "$7" && \ 9074cfa76ccdSmrg func_fatal_help "too many parameters to '-version-info'" 9075e96acad6Smrg 9076e96acad6Smrg # convert absolute version numbers to libtool ages 9077e96acad6Smrg # this retains compatibility with .la files and attempts 9078e96acad6Smrg # to make the code below a bit more comprehensible 9079e96acad6Smrg 9080e96acad6Smrg case $vinfo_number in 9081e96acad6Smrg yes) 9082cfa76ccdSmrg number_major=$1 9083cfa76ccdSmrg number_minor=$2 9084cfa76ccdSmrg number_revision=$3 9085e96acad6Smrg # 9086e96acad6Smrg # There are really only two kinds -- those that 9087e96acad6Smrg # use the current revision as the major version 9088e96acad6Smrg # and those that subtract age and use age as 9089e96acad6Smrg # a minor version. But, then there is irix 9090cfa76ccdSmrg # that has an extra 1 added just for fun 9091e96acad6Smrg # 9092e96acad6Smrg case $version_type in 9093cfa76ccdSmrg # correct linux to gnu/linux during the next big refactor 9094cfa76ccdSmrg darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) 9095e96acad6Smrg func_arith $number_major + $number_minor 9096e96acad6Smrg current=$func_arith_result 9097cfa76ccdSmrg age=$number_minor 9098cfa76ccdSmrg revision=$number_revision 9099e96acad6Smrg ;; 9100cfa76ccdSmrg freebsd-aout|qnx|sunos) 9101cfa76ccdSmrg current=$number_major 9102cfa76ccdSmrg revision=$number_minor 9103cfa76ccdSmrg age=0 9104e96acad6Smrg ;; 9105e96acad6Smrg irix|nonstopux) 9106e96acad6Smrg func_arith $number_major + $number_minor 9107e96acad6Smrg current=$func_arith_result 9108cfa76ccdSmrg age=$number_minor 9109cfa76ccdSmrg revision=$number_minor 9110e96acad6Smrg lt_irix_increment=no 9111e96acad6Smrg ;; 9112e96acad6Smrg esac 9113e96acad6Smrg ;; 9114e96acad6Smrg no) 9115cfa76ccdSmrg current=$1 9116cfa76ccdSmrg revision=$2 9117cfa76ccdSmrg age=$3 9118e96acad6Smrg ;; 9119e96acad6Smrg esac 9120e96acad6Smrg 9121e96acad6Smrg # Check that each of the things are valid numbers. 9122e96acad6Smrg case $current in 9123e96acad6Smrg 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]) ;; 9124e96acad6Smrg *) 9125cfa76ccdSmrg func_error "CURRENT '$current' must be a nonnegative integer" 9126cfa76ccdSmrg func_fatal_error "'$vinfo' is not valid version information" 9127e96acad6Smrg ;; 9128e96acad6Smrg esac 9129e96acad6Smrg 9130e96acad6Smrg case $revision in 9131e96acad6Smrg 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]) ;; 9132e96acad6Smrg *) 9133cfa76ccdSmrg func_error "REVISION '$revision' must be a nonnegative integer" 9134cfa76ccdSmrg func_fatal_error "'$vinfo' is not valid version information" 9135e96acad6Smrg ;; 9136e96acad6Smrg esac 9137e96acad6Smrg 9138e96acad6Smrg case $age in 9139e96acad6Smrg 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]) ;; 9140e96acad6Smrg *) 9141cfa76ccdSmrg func_error "AGE '$age' must be a nonnegative integer" 9142cfa76ccdSmrg func_fatal_error "'$vinfo' is not valid version information" 9143e96acad6Smrg ;; 9144e96acad6Smrg esac 9145e96acad6Smrg 9146e96acad6Smrg if test "$age" -gt "$current"; then 9147cfa76ccdSmrg func_error "AGE '$age' is greater than the current interface number '$current'" 9148cfa76ccdSmrg func_fatal_error "'$vinfo' is not valid version information" 9149e96acad6Smrg fi 9150e96acad6Smrg 9151e96acad6Smrg # Calculate the version variables. 9152e96acad6Smrg major= 9153e96acad6Smrg versuffix= 9154e96acad6Smrg verstring= 9155e96acad6Smrg case $version_type in 9156e96acad6Smrg none) ;; 9157e96acad6Smrg 9158e96acad6Smrg darwin) 9159e96acad6Smrg # Like Linux, but with the current version available in 9160e96acad6Smrg # verstring for coding it into the library header 9161e96acad6Smrg func_arith $current - $age 9162e96acad6Smrg major=.$func_arith_result 9163cfa76ccdSmrg versuffix=$major.$age.$revision 9164e96acad6Smrg # Darwin ld doesn't like 0 for these options... 9165e96acad6Smrg func_arith $current + 1 9166e96acad6Smrg minor_current=$func_arith_result 9167cfa76ccdSmrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9168e96acad6Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9169cfa76ccdSmrg # On Darwin other compilers 9170cfa76ccdSmrg case $CC in 9171cfa76ccdSmrg nagfor*) 9172cfa76ccdSmrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 9173cfa76ccdSmrg ;; 9174cfa76ccdSmrg *) 9175cfa76ccdSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 9176cfa76ccdSmrg ;; 9177cfa76ccdSmrg esac 9178e96acad6Smrg ;; 9179e96acad6Smrg 9180e96acad6Smrg freebsd-aout) 9181cfa76ccdSmrg major=.$current 9182cfa76ccdSmrg versuffix=.$current.$revision 9183e96acad6Smrg ;; 9184e96acad6Smrg 9185cfa76ccdSmrg freebsd-elf | midnightbsd-elf) 9186cfa76ccdSmrg func_arith $current - $age 9187cfa76ccdSmrg major=.$func_arith_result 9188cfa76ccdSmrg versuffix=$major.$age.$revision 9189e96acad6Smrg ;; 9190e96acad6Smrg 9191e96acad6Smrg irix | nonstopux) 9192cfa76ccdSmrg if test no = "$lt_irix_increment"; then 9193e96acad6Smrg func_arith $current - $age 9194e96acad6Smrg else 9195e96acad6Smrg func_arith $current - $age + 1 9196e96acad6Smrg fi 9197e96acad6Smrg major=$func_arith_result 9198e96acad6Smrg 9199e96acad6Smrg case $version_type in 9200e96acad6Smrg nonstopux) verstring_prefix=nonstopux ;; 9201e96acad6Smrg *) verstring_prefix=sgi ;; 9202e96acad6Smrg esac 9203cfa76ccdSmrg verstring=$verstring_prefix$major.$revision 9204e96acad6Smrg 9205e96acad6Smrg # Add in all the interfaces that we are compatible with. 9206e96acad6Smrg loop=$revision 9207cfa76ccdSmrg while test 0 -ne "$loop"; do 9208e96acad6Smrg func_arith $revision - $loop 9209e96acad6Smrg iface=$func_arith_result 9210e96acad6Smrg func_arith $loop - 1 9211e96acad6Smrg loop=$func_arith_result 9212cfa76ccdSmrg verstring=$verstring_prefix$major.$iface:$verstring 9213e96acad6Smrg done 9214e96acad6Smrg 9215cfa76ccdSmrg # Before this point, $major must not contain '.'. 9216e96acad6Smrg major=.$major 9217cfa76ccdSmrg versuffix=$major.$revision 9218e96acad6Smrg ;; 9219e96acad6Smrg 9220cfa76ccdSmrg linux) # correct to gnu/linux during the next big refactor 9221e96acad6Smrg func_arith $current - $age 9222e96acad6Smrg major=.$func_arith_result 9223cfa76ccdSmrg versuffix=$major.$age.$revision 9224e96acad6Smrg ;; 9225e96acad6Smrg 9226e96acad6Smrg osf) 9227e96acad6Smrg func_arith $current - $age 9228e96acad6Smrg major=.$func_arith_result 9229cfa76ccdSmrg versuffix=.$current.$age.$revision 9230cfa76ccdSmrg verstring=$current.$age.$revision 9231e96acad6Smrg 9232e96acad6Smrg # Add in all the interfaces that we are compatible with. 9233e96acad6Smrg loop=$age 9234cfa76ccdSmrg while test 0 -ne "$loop"; do 9235e96acad6Smrg func_arith $current - $loop 9236e96acad6Smrg iface=$func_arith_result 9237e96acad6Smrg func_arith $loop - 1 9238e96acad6Smrg loop=$func_arith_result 9239cfa76ccdSmrg verstring=$verstring:$iface.0 9240e96acad6Smrg done 9241e96acad6Smrg 9242e96acad6Smrg # Make executables depend on our current version. 9243cfa76ccdSmrg func_append verstring ":$current.0" 9244e96acad6Smrg ;; 9245e96acad6Smrg 9246e96acad6Smrg qnx) 9247cfa76ccdSmrg major=.$current 9248cfa76ccdSmrg versuffix=.$current 9249cfa76ccdSmrg ;; 9250cfa76ccdSmrg 9251cfa76ccdSmrg sco) 9252cfa76ccdSmrg major=.$current 9253cfa76ccdSmrg versuffix=.$current 9254e96acad6Smrg ;; 9255e96acad6Smrg 9256e96acad6Smrg sunos) 9257cfa76ccdSmrg major=.$current 9258cfa76ccdSmrg versuffix=.$current.$revision 9259e96acad6Smrg ;; 9260e96acad6Smrg 9261e96acad6Smrg windows) 9262e96acad6Smrg # Use '-' rather than '.', since we only want one 9263cfa76ccdSmrg # extension on DOS 8.3 file systems. 9264e96acad6Smrg func_arith $current - $age 9265e96acad6Smrg major=$func_arith_result 9266cfa76ccdSmrg versuffix=-$major 9267e96acad6Smrg ;; 9268e96acad6Smrg 9269e96acad6Smrg *) 9270cfa76ccdSmrg func_fatal_configuration "unknown library version type '$version_type'" 9271e96acad6Smrg ;; 9272e96acad6Smrg esac 9273e96acad6Smrg 9274e96acad6Smrg # Clear the version info if we defaulted, and they specified a release. 9275e96acad6Smrg if test -z "$vinfo" && test -n "$release"; then 9276e96acad6Smrg major= 9277e96acad6Smrg case $version_type in 9278e96acad6Smrg darwin) 9279e96acad6Smrg # we can't check for "0.0" in archive_cmds due to quoting 9280e96acad6Smrg # problems, so we reset it completely 9281e96acad6Smrg verstring= 9282e96acad6Smrg ;; 9283e96acad6Smrg *) 9284cfa76ccdSmrg verstring=0.0 9285e96acad6Smrg ;; 9286e96acad6Smrg esac 9287cfa76ccdSmrg if test no = "$need_version"; then 9288e96acad6Smrg versuffix= 9289e96acad6Smrg else 9290cfa76ccdSmrg versuffix=.0.0 9291e96acad6Smrg fi 9292e96acad6Smrg fi 9293e96acad6Smrg 9294e96acad6Smrg # Remove version info from name if versioning should be avoided 9295cfa76ccdSmrg if test yes,no = "$avoid_version,$need_version"; then 9296e96acad6Smrg major= 9297e96acad6Smrg versuffix= 9298cfa76ccdSmrg verstring= 9299e96acad6Smrg fi 9300e96acad6Smrg 9301e96acad6Smrg # Check to see if the archive will have undefined symbols. 9302cfa76ccdSmrg if test yes = "$allow_undefined"; then 9303cfa76ccdSmrg if test unsupported = "$allow_undefined_flag"; then 9304cfa76ccdSmrg if test yes = "$build_old_libs"; then 9305cfa76ccdSmrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9306cfa76ccdSmrg build_libtool_libs=no 9307cfa76ccdSmrg else 9308cfa76ccdSmrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9309cfa76ccdSmrg fi 9310e96acad6Smrg fi 9311e96acad6Smrg else 9312e96acad6Smrg # Don't allow undefined symbols. 9313cfa76ccdSmrg allow_undefined_flag=$no_undefined_flag 9314e96acad6Smrg fi 9315e96acad6Smrg 9316e96acad6Smrg fi 9317e96acad6Smrg 9318cfa76ccdSmrg func_generate_dlsyms "$libname" "$libname" : 9319e96acad6Smrg func_append libobjs " $symfileobj" 9320cfa76ccdSmrg test " " = "$libobjs" && libobjs= 9321e96acad6Smrg 9322cfa76ccdSmrg if test relink != "$opt_mode"; then 9323e96acad6Smrg # Remove our outputs, but don't remove object files since they 9324e96acad6Smrg # may have been created when compiling PIC objects. 9325e96acad6Smrg removelist= 9326e96acad6Smrg tempremovelist=`$ECHO "$output_objdir/*"` 9327e96acad6Smrg for p in $tempremovelist; do 9328e96acad6Smrg case $p in 9329e96acad6Smrg *.$objext | *.gcno) 9330e96acad6Smrg ;; 9331cfa76ccdSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9332cfa76ccdSmrg if test -n "$precious_files_regex"; then 9333e96acad6Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9334e96acad6Smrg then 9335e96acad6Smrg continue 9336e96acad6Smrg fi 9337e96acad6Smrg fi 9338e96acad6Smrg func_append removelist " $p" 9339e96acad6Smrg ;; 9340e96acad6Smrg *) ;; 9341e96acad6Smrg esac 9342e96acad6Smrg done 9343e96acad6Smrg test -n "$removelist" && \ 9344e96acad6Smrg func_show_eval "${RM}r \$removelist" 9345e96acad6Smrg fi 9346e96acad6Smrg 9347e96acad6Smrg # Now set the variables for building old libraries. 9348cfa76ccdSmrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9349e96acad6Smrg func_append oldlibs " $output_objdir/$libname.$libext" 9350e96acad6Smrg 9351e96acad6Smrg # Transform .lo files to .o files. 9352cfa76ccdSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9353e96acad6Smrg fi 9354e96acad6Smrg 9355e96acad6Smrg # Eliminate all temporary directories. 9356e96acad6Smrg #for path in $notinst_path; do 9357e96acad6Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9358e96acad6Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9359e96acad6Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9360e96acad6Smrg #done 9361e96acad6Smrg 9362e96acad6Smrg if test -n "$xrpath"; then 9363e96acad6Smrg # If the user specified any rpath flags, then add them. 9364e96acad6Smrg temp_xrpath= 9365e96acad6Smrg for libdir in $xrpath; do 9366e96acad6Smrg func_replace_sysroot "$libdir" 9367e96acad6Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9368e96acad6Smrg case "$finalize_rpath " in 9369e96acad6Smrg *" $libdir "*) ;; 9370e96acad6Smrg *) func_append finalize_rpath " $libdir" ;; 9371e96acad6Smrg esac 9372e96acad6Smrg done 9373cfa76ccdSmrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9374e96acad6Smrg dependency_libs="$temp_xrpath $dependency_libs" 9375e96acad6Smrg fi 9376e96acad6Smrg fi 9377e96acad6Smrg 9378e96acad6Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 9379cfa76ccdSmrg old_dlfiles=$dlfiles 9380e96acad6Smrg dlfiles= 9381e96acad6Smrg for lib in $old_dlfiles; do 9382e96acad6Smrg case " $dlprefiles $dlfiles " in 9383e96acad6Smrg *" $lib "*) ;; 9384e96acad6Smrg *) func_append dlfiles " $lib" ;; 9385e96acad6Smrg esac 9386e96acad6Smrg done 9387e96acad6Smrg 9388e96acad6Smrg # Make sure dlprefiles contains only unique files 9389cfa76ccdSmrg old_dlprefiles=$dlprefiles 9390e96acad6Smrg dlprefiles= 9391e96acad6Smrg for lib in $old_dlprefiles; do 9392e96acad6Smrg case "$dlprefiles " in 9393e96acad6Smrg *" $lib "*) ;; 9394e96acad6Smrg *) func_append dlprefiles " $lib" ;; 9395e96acad6Smrg esac 9396e96acad6Smrg done 9397e96acad6Smrg 9398cfa76ccdSmrg if test yes = "$build_libtool_libs"; then 9399e96acad6Smrg if test -n "$rpath"; then 9400e96acad6Smrg case $host in 9401e96acad6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9402e96acad6Smrg # these systems don't actually have a c library (as such)! 9403e96acad6Smrg ;; 9404e96acad6Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9405e96acad6Smrg # Rhapsody C library is in the System framework 9406e96acad6Smrg func_append deplibs " System.ltframework" 9407e96acad6Smrg ;; 9408e96acad6Smrg *-*-netbsd*) 9409e96acad6Smrg # Don't link with libc until the a.out ld.so is fixed. 9410e96acad6Smrg ;; 9411cfa76ccdSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) 9412e96acad6Smrg # Do not include libc due to us having libc/libc_r. 9413e96acad6Smrg ;; 9414e96acad6Smrg *-*-sco3.2v5* | *-*-sco5v6*) 9415e96acad6Smrg # Causes problems with __ctype 9416e96acad6Smrg ;; 9417e96acad6Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9418e96acad6Smrg # Compiler inserts libc in the correct place for threads to work 9419e96acad6Smrg ;; 9420e96acad6Smrg *) 9421e96acad6Smrg # Add libc to deplibs on all other systems if necessary. 9422cfa76ccdSmrg if test yes = "$build_libtool_need_lc"; then 9423e96acad6Smrg func_append deplibs " -lc" 9424e96acad6Smrg fi 9425e96acad6Smrg ;; 9426e96acad6Smrg esac 9427e96acad6Smrg fi 9428e96acad6Smrg 9429e96acad6Smrg # Transform deplibs into only deplibs that can be linked in shared. 9430e96acad6Smrg name_save=$name 9431e96acad6Smrg libname_save=$libname 9432e96acad6Smrg release_save=$release 9433e96acad6Smrg versuffix_save=$versuffix 9434e96acad6Smrg major_save=$major 9435e96acad6Smrg # I'm not sure if I'm treating the release correctly. I think 9436e96acad6Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 9437e96acad6Smrg # add it in twice. Is that correct? 9438cfa76ccdSmrg release= 9439cfa76ccdSmrg versuffix= 9440cfa76ccdSmrg major= 9441e96acad6Smrg newdeplibs= 9442e96acad6Smrg droppeddeps=no 9443e96acad6Smrg case $deplibs_check_method in 9444e96acad6Smrg pass_all) 9445e96acad6Smrg # Don't check for shared/static. Everything works. 9446e96acad6Smrg # This might be a little naive. We might want to check 9447e96acad6Smrg # whether the library exists or not. But this is on 9448e96acad6Smrg # osf3 & osf4 and I'm not really sure... Just 9449e96acad6Smrg # implementing what was already the behavior. 9450e96acad6Smrg newdeplibs=$deplibs 9451e96acad6Smrg ;; 9452e96acad6Smrg test_compile) 9453e96acad6Smrg # This code stresses the "libraries are programs" paradigm to its 9454e96acad6Smrg # limits. Maybe even breaks it. We compile a program, linking it 9455e96acad6Smrg # against the deplibs as a proxy for the library. Then we can check 9456e96acad6Smrg # whether they linked in statically or dynamically with ldd. 9457e96acad6Smrg $opt_dry_run || $RM conftest.c 9458e96acad6Smrg cat > conftest.c <<EOF 9459e96acad6Smrg int main() { return 0; } 9460e96acad6SmrgEOF 9461e96acad6Smrg $opt_dry_run || $RM conftest 9462e96acad6Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9463e96acad6Smrg ldd_output=`ldd conftest` 9464e96acad6Smrg for i in $deplibs; do 9465e96acad6Smrg case $i in 9466e96acad6Smrg -l*) 9467e96acad6Smrg func_stripname -l '' "$i" 9468e96acad6Smrg name=$func_stripname_result 9469cfa76ccdSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9470e96acad6Smrg case " $predeps $postdeps " in 9471e96acad6Smrg *" $i "*) 9472e96acad6Smrg func_append newdeplibs " $i" 9473cfa76ccdSmrg i= 9474e96acad6Smrg ;; 9475e96acad6Smrg esac 9476e96acad6Smrg fi 9477cfa76ccdSmrg if test -n "$i"; then 9478e96acad6Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9479e96acad6Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9480e96acad6Smrg set dummy $deplib_matches; shift 9481e96acad6Smrg deplib_match=$1 9482cfa76ccdSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9483e96acad6Smrg func_append newdeplibs " $i" 9484e96acad6Smrg else 9485e96acad6Smrg droppeddeps=yes 9486e96acad6Smrg echo 9487e96acad6Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9488e96acad6Smrg echo "*** I have the capability to make that library automatically link in when" 9489e96acad6Smrg echo "*** you link to this library. But I can only do this if you have a" 9490e96acad6Smrg echo "*** shared version of the library, which I believe you do not have" 9491e96acad6Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 9492e96acad6Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 9493e96acad6Smrg fi 9494e96acad6Smrg fi 9495e96acad6Smrg ;; 9496e96acad6Smrg *) 9497e96acad6Smrg func_append newdeplibs " $i" 9498e96acad6Smrg ;; 9499e96acad6Smrg esac 9500e96acad6Smrg done 9501e96acad6Smrg else 9502e96acad6Smrg # Error occurred in the first compile. Let's try to salvage 9503e96acad6Smrg # the situation: Compile a separate program for each library. 9504e96acad6Smrg for i in $deplibs; do 9505e96acad6Smrg case $i in 9506e96acad6Smrg -l*) 9507e96acad6Smrg func_stripname -l '' "$i" 9508e96acad6Smrg name=$func_stripname_result 9509e96acad6Smrg $opt_dry_run || $RM conftest 9510e96acad6Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9511e96acad6Smrg ldd_output=`ldd conftest` 9512cfa76ccdSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9513e96acad6Smrg case " $predeps $postdeps " in 9514e96acad6Smrg *" $i "*) 9515e96acad6Smrg func_append newdeplibs " $i" 9516cfa76ccdSmrg i= 9517e96acad6Smrg ;; 9518e96acad6Smrg esac 9519e96acad6Smrg fi 9520cfa76ccdSmrg if test -n "$i"; then 9521e96acad6Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9522e96acad6Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9523e96acad6Smrg set dummy $deplib_matches; shift 9524e96acad6Smrg deplib_match=$1 9525cfa76ccdSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9526e96acad6Smrg func_append newdeplibs " $i" 9527e96acad6Smrg else 9528e96acad6Smrg droppeddeps=yes 9529e96acad6Smrg echo 9530e96acad6Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9531e96acad6Smrg echo "*** I have the capability to make that library automatically link in when" 9532e96acad6Smrg echo "*** you link to this library. But I can only do this if you have a" 9533e96acad6Smrg echo "*** shared version of the library, which you do not appear to have" 9534e96acad6Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 9535e96acad6Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9536e96acad6Smrg fi 9537e96acad6Smrg fi 9538e96acad6Smrg else 9539e96acad6Smrg droppeddeps=yes 9540e96acad6Smrg echo 9541e96acad6Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9542e96acad6Smrg echo "*** make it link in! You will probably need to install it or some" 9543e96acad6Smrg echo "*** library that it depends on before this library will be fully" 9544e96acad6Smrg echo "*** functional. Installing it before continuing would be even better." 9545e96acad6Smrg fi 9546e96acad6Smrg ;; 9547e96acad6Smrg *) 9548e96acad6Smrg func_append newdeplibs " $i" 9549e96acad6Smrg ;; 9550e96acad6Smrg esac 9551e96acad6Smrg done 9552e96acad6Smrg fi 9553e96acad6Smrg ;; 9554e96acad6Smrg file_magic*) 9555e96acad6Smrg set dummy $deplibs_check_method; shift 9556e96acad6Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9557e96acad6Smrg for a_deplib in $deplibs; do 9558e96acad6Smrg case $a_deplib in 9559e96acad6Smrg -l*) 9560e96acad6Smrg func_stripname -l '' "$a_deplib" 9561e96acad6Smrg name=$func_stripname_result 9562cfa76ccdSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9563e96acad6Smrg case " $predeps $postdeps " in 9564e96acad6Smrg *" $a_deplib "*) 9565e96acad6Smrg func_append newdeplibs " $a_deplib" 9566cfa76ccdSmrg a_deplib= 9567e96acad6Smrg ;; 9568e96acad6Smrg esac 9569e96acad6Smrg fi 9570cfa76ccdSmrg if test -n "$a_deplib"; then 9571e96acad6Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9572e96acad6Smrg if test -n "$file_magic_glob"; then 9573e96acad6Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9574e96acad6Smrg else 9575e96acad6Smrg libnameglob=$libname 9576e96acad6Smrg fi 9577cfa76ccdSmrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9578e96acad6Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9579cfa76ccdSmrg if test yes = "$want_nocaseglob"; then 9580e96acad6Smrg shopt -s nocaseglob 9581e96acad6Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9582e96acad6Smrg $nocaseglob 9583e96acad6Smrg else 9584e96acad6Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9585e96acad6Smrg fi 9586e96acad6Smrg for potent_lib in $potential_libs; do 9587e96acad6Smrg # Follow soft links. 9588e96acad6Smrg if ls -lLd "$potent_lib" 2>/dev/null | 9589e96acad6Smrg $GREP " -> " >/dev/null; then 9590e96acad6Smrg continue 9591e96acad6Smrg fi 9592e96acad6Smrg # The statement above tries to avoid entering an 9593e96acad6Smrg # endless loop below, in case of cyclic links. 9594e96acad6Smrg # We might still enter an endless loop, since a link 9595e96acad6Smrg # loop can be closed while we follow links, 9596e96acad6Smrg # but so what? 9597cfa76ccdSmrg potlib=$potent_lib 9598e96acad6Smrg while test -h "$potlib" 2>/dev/null; do 9599cfa76ccdSmrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9600e96acad6Smrg case $potliblink in 9601cfa76ccdSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9602cfa76ccdSmrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9603e96acad6Smrg esac 9604e96acad6Smrg done 9605e96acad6Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9606e96acad6Smrg $SED -e 10q | 9607e96acad6Smrg $EGREP "$file_magic_regex" > /dev/null; then 9608e96acad6Smrg func_append newdeplibs " $a_deplib" 9609cfa76ccdSmrg a_deplib= 9610e96acad6Smrg break 2 9611e96acad6Smrg fi 9612e96acad6Smrg done 9613e96acad6Smrg done 9614e96acad6Smrg fi 9615cfa76ccdSmrg if test -n "$a_deplib"; then 9616e96acad6Smrg droppeddeps=yes 9617e96acad6Smrg echo 9618e96acad6Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9619e96acad6Smrg echo "*** I have the capability to make that library automatically link in when" 9620e96acad6Smrg echo "*** you link to this library. But I can only do this if you have a" 9621e96acad6Smrg echo "*** shared version of the library, which you do not appear to have" 9622e96acad6Smrg echo "*** because I did check the linker path looking for a file starting" 9623cfa76ccdSmrg if test -z "$potlib"; then 9624e96acad6Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9625e96acad6Smrg else 9626e96acad6Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9627e96acad6Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 9628e96acad6Smrg fi 9629e96acad6Smrg fi 9630e96acad6Smrg ;; 9631e96acad6Smrg *) 9632e96acad6Smrg # Add a -L argument. 9633e96acad6Smrg func_append newdeplibs " $a_deplib" 9634e96acad6Smrg ;; 9635e96acad6Smrg esac 9636e96acad6Smrg done # Gone through all deplibs. 9637e96acad6Smrg ;; 9638e96acad6Smrg match_pattern*) 9639e96acad6Smrg set dummy $deplibs_check_method; shift 9640e96acad6Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9641e96acad6Smrg for a_deplib in $deplibs; do 9642e96acad6Smrg case $a_deplib in 9643e96acad6Smrg -l*) 9644e96acad6Smrg func_stripname -l '' "$a_deplib" 9645e96acad6Smrg name=$func_stripname_result 9646cfa76ccdSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9647e96acad6Smrg case " $predeps $postdeps " in 9648e96acad6Smrg *" $a_deplib "*) 9649e96acad6Smrg func_append newdeplibs " $a_deplib" 9650cfa76ccdSmrg a_deplib= 9651e96acad6Smrg ;; 9652e96acad6Smrg esac 9653e96acad6Smrg fi 9654cfa76ccdSmrg if test -n "$a_deplib"; then 9655e96acad6Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9656e96acad6Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9657e96acad6Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9658e96acad6Smrg for potent_lib in $potential_libs; do 9659cfa76ccdSmrg potlib=$potent_lib # see symlink-check above in file_magic test 9660e96acad6Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9661e96acad6Smrg $EGREP "$match_pattern_regex" > /dev/null; then 9662e96acad6Smrg func_append newdeplibs " $a_deplib" 9663cfa76ccdSmrg a_deplib= 9664e96acad6Smrg break 2 9665e96acad6Smrg fi 9666e96acad6Smrg done 9667e96acad6Smrg done 9668e96acad6Smrg fi 9669cfa76ccdSmrg if test -n "$a_deplib"; then 9670e96acad6Smrg droppeddeps=yes 9671e96acad6Smrg echo 9672e96acad6Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9673e96acad6Smrg echo "*** I have the capability to make that library automatically link in when" 9674e96acad6Smrg echo "*** you link to this library. But I can only do this if you have a" 9675e96acad6Smrg echo "*** shared version of the library, which you do not appear to have" 9676e96acad6Smrg echo "*** because I did check the linker path looking for a file starting" 9677cfa76ccdSmrg if test -z "$potlib"; then 9678e96acad6Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9679e96acad6Smrg else 9680e96acad6Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9681e96acad6Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 9682e96acad6Smrg fi 9683e96acad6Smrg fi 9684e96acad6Smrg ;; 9685e96acad6Smrg *) 9686e96acad6Smrg # Add a -L argument. 9687e96acad6Smrg func_append newdeplibs " $a_deplib" 9688e96acad6Smrg ;; 9689e96acad6Smrg esac 9690e96acad6Smrg done # Gone through all deplibs. 9691e96acad6Smrg ;; 9692e96acad6Smrg none | unknown | *) 9693cfa76ccdSmrg newdeplibs= 9694e96acad6Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9695cfa76ccdSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9696cfa76ccdSmrg for i in $predeps $postdeps; do 9697e96acad6Smrg # can't use Xsed below, because $i might contain '/' 9698cfa76ccdSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9699e96acad6Smrg done 9700e96acad6Smrg fi 9701e96acad6Smrg case $tmp_deplibs in 9702e96acad6Smrg *[!\ \ ]*) 9703e96acad6Smrg echo 9704cfa76ccdSmrg if test none = "$deplibs_check_method"; then 9705e96acad6Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 9706e96acad6Smrg else 9707e96acad6Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 9708e96acad6Smrg fi 9709e96acad6Smrg echo "*** All declared inter-library dependencies are being dropped." 9710e96acad6Smrg droppeddeps=yes 9711e96acad6Smrg ;; 9712e96acad6Smrg esac 9713e96acad6Smrg ;; 9714e96acad6Smrg esac 9715e96acad6Smrg versuffix=$versuffix_save 9716e96acad6Smrg major=$major_save 9717e96acad6Smrg release=$release_save 9718e96acad6Smrg libname=$libname_save 9719e96acad6Smrg name=$name_save 9720e96acad6Smrg 9721e96acad6Smrg case $host in 9722e96acad6Smrg *-*-rhapsody* | *-*-darwin1.[012]) 9723e96acad6Smrg # On Rhapsody replace the C library with the System framework 9724e96acad6Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9725e96acad6Smrg ;; 9726e96acad6Smrg esac 9727e96acad6Smrg 9728cfa76ccdSmrg if test yes = "$droppeddeps"; then 9729cfa76ccdSmrg if test yes = "$module"; then 9730e96acad6Smrg echo 9731e96acad6Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 9732e96acad6Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9733e96acad6Smrg echo "*** a static module, that should work as long as the dlopening" 9734e96acad6Smrg echo "*** application is linked with the -dlopen flag." 9735e96acad6Smrg if test -z "$global_symbol_pipe"; then 9736e96acad6Smrg echo 9737e96acad6Smrg echo "*** However, this would only work if libtool was able to extract symbol" 9738cfa76ccdSmrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9739e96acad6Smrg echo "*** not find such a program. So, this module is probably useless." 9740cfa76ccdSmrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 9741e96acad6Smrg fi 9742cfa76ccdSmrg if test no = "$build_old_libs"; then 9743cfa76ccdSmrg oldlibs=$output_objdir/$libname.$libext 9744e96acad6Smrg build_libtool_libs=module 9745e96acad6Smrg build_old_libs=yes 9746e96acad6Smrg else 9747e96acad6Smrg build_libtool_libs=no 9748e96acad6Smrg fi 9749e96acad6Smrg else 9750e96acad6Smrg echo "*** The inter-library dependencies that have been dropped here will be" 9751e96acad6Smrg echo "*** automatically added whenever a program is linked with this library" 9752e96acad6Smrg echo "*** or is declared to -dlopen it." 9753dbbd9e4bSmacallan 9754cfa76ccdSmrg if test no = "$allow_undefined"; then 9755e96acad6Smrg echo 9756e96acad6Smrg echo "*** Since this library must not contain undefined symbols," 9757e96acad6Smrg echo "*** because either the platform does not support them or" 9758e96acad6Smrg echo "*** it was explicitly requested with -no-undefined," 9759e96acad6Smrg echo "*** libtool will only create a static version of it." 9760cfa76ccdSmrg if test no = "$build_old_libs"; then 9761cfa76ccdSmrg oldlibs=$output_objdir/$libname.$libext 9762e96acad6Smrg build_libtool_libs=module 9763e96acad6Smrg build_old_libs=yes 9764e96acad6Smrg else 9765e96acad6Smrg build_libtool_libs=no 9766e96acad6Smrg fi 9767e96acad6Smrg fi 9768e96acad6Smrg fi 9769e96acad6Smrg fi 9770e96acad6Smrg # Done checking deplibs! 9771e96acad6Smrg deplibs=$newdeplibs 9772e96acad6Smrg fi 9773e96acad6Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9774e96acad6Smrg case $host in 9775e96acad6Smrg *-*-darwin*) 9776e96acad6Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9777e96acad6Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9778e96acad6Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9779e96acad6Smrg ;; 9780e96acad6Smrg esac 9781dbbd9e4bSmacallan 9782e96acad6Smrg # move library search paths that coincide with paths to not yet 9783e96acad6Smrg # installed libraries to the beginning of the library search list 9784e96acad6Smrg new_libs= 9785e96acad6Smrg for path in $notinst_path; do 9786e96acad6Smrg case " $new_libs " in 9787e96acad6Smrg *" -L$path/$objdir "*) ;; 9788e96acad6Smrg *) 9789e96acad6Smrg case " $deplibs " in 9790e96acad6Smrg *" -L$path/$objdir "*) 9791e96acad6Smrg func_append new_libs " -L$path/$objdir" ;; 9792e96acad6Smrg esac 9793e96acad6Smrg ;; 9794e96acad6Smrg esac 9795e96acad6Smrg done 9796e96acad6Smrg for deplib in $deplibs; do 9797e96acad6Smrg case $deplib in 9798e96acad6Smrg -L*) 9799e96acad6Smrg case " $new_libs " in 9800e96acad6Smrg *" $deplib "*) ;; 9801e96acad6Smrg *) func_append new_libs " $deplib" ;; 9802e96acad6Smrg esac 9803e96acad6Smrg ;; 9804e96acad6Smrg *) func_append new_libs " $deplib" ;; 9805e96acad6Smrg esac 9806e96acad6Smrg done 9807cfa76ccdSmrg deplibs=$new_libs 9808dbbd9e4bSmacallan 9809e96acad6Smrg # All the library-specific variables (install_libdir is set above). 9810e96acad6Smrg library_names= 9811e96acad6Smrg old_library= 9812e96acad6Smrg dlname= 9813dbbd9e4bSmacallan 9814e96acad6Smrg # Test again, we may have decided not to build it any more 9815cfa76ccdSmrg if test yes = "$build_libtool_libs"; then 9816cfa76ccdSmrg # Remove $wl instances when linking with ld. 9817cfa76ccdSmrg # FIXME: should test the right _cmds variable. 9818cfa76ccdSmrg case $archive_cmds in 9819cfa76ccdSmrg *\$LD\ *) wl= ;; 9820cfa76ccdSmrg esac 9821cfa76ccdSmrg if test yes = "$hardcode_into_libs"; then 9822e96acad6Smrg # Hardcode the library paths 9823e96acad6Smrg hardcode_libdirs= 9824e96acad6Smrg dep_rpath= 9825cfa76ccdSmrg rpath=$finalize_rpath 9826cfa76ccdSmrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9827e96acad6Smrg for libdir in $rpath; do 9828e96acad6Smrg if test -n "$hardcode_libdir_flag_spec"; then 9829e96acad6Smrg if test -n "$hardcode_libdir_separator"; then 9830e96acad6Smrg func_replace_sysroot "$libdir" 9831e96acad6Smrg libdir=$func_replace_sysroot_result 9832e96acad6Smrg if test -z "$hardcode_libdirs"; then 9833cfa76ccdSmrg hardcode_libdirs=$libdir 9834e96acad6Smrg else 9835e96acad6Smrg # Just accumulate the unique libdirs. 9836e96acad6Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9837e96acad6Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9838e96acad6Smrg ;; 9839e96acad6Smrg *) 9840e96acad6Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9841e96acad6Smrg ;; 9842e96acad6Smrg esac 9843e96acad6Smrg fi 9844e96acad6Smrg else 9845e96acad6Smrg eval flag=\"$hardcode_libdir_flag_spec\" 9846e96acad6Smrg func_append dep_rpath " $flag" 9847e96acad6Smrg fi 9848e96acad6Smrg elif test -n "$runpath_var"; then 9849e96acad6Smrg case "$perm_rpath " in 9850e96acad6Smrg *" $libdir "*) ;; 9851cfa76ccdSmrg *) func_append perm_rpath " $libdir" ;; 9852e96acad6Smrg esac 9853e96acad6Smrg fi 9854e96acad6Smrg done 9855e96acad6Smrg # Substitute the hardcoded libdirs into the rpath. 9856e96acad6Smrg if test -n "$hardcode_libdir_separator" && 9857e96acad6Smrg test -n "$hardcode_libdirs"; then 9858cfa76ccdSmrg libdir=$hardcode_libdirs 9859cfa76ccdSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9860e96acad6Smrg fi 9861e96acad6Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9862e96acad6Smrg # We should set the runpath_var. 9863e96acad6Smrg rpath= 9864e96acad6Smrg for dir in $perm_rpath; do 9865e96acad6Smrg func_append rpath "$dir:" 9866e96acad6Smrg done 9867e96acad6Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9868e96acad6Smrg fi 9869e96acad6Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9870e96acad6Smrg fi 9871dbbd9e4bSmacallan 9872cfa76ccdSmrg shlibpath=$finalize_shlibpath 9873cfa76ccdSmrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9874e96acad6Smrg if test -n "$shlibpath"; then 9875e96acad6Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9876e96acad6Smrg fi 9877dbbd9e4bSmacallan 9878e96acad6Smrg # Get the real and link names of the library. 9879e96acad6Smrg eval shared_ext=\"$shrext_cmds\" 9880e96acad6Smrg eval library_names=\"$library_names_spec\" 9881e96acad6Smrg set dummy $library_names 9882e96acad6Smrg shift 9883cfa76ccdSmrg realname=$1 9884e96acad6Smrg shift 9885dbbd9e4bSmacallan 9886e96acad6Smrg if test -n "$soname_spec"; then 9887e96acad6Smrg eval soname=\"$soname_spec\" 9888dbbd9e4bSmacallan else 9889cfa76ccdSmrg soname=$realname 9890e96acad6Smrg fi 9891e96acad6Smrg if test -z "$dlname"; then 9892e96acad6Smrg dlname=$soname 9893dbbd9e4bSmacallan fi 9894dbbd9e4bSmacallan 9895cfa76ccdSmrg lib=$output_objdir/$realname 9896e96acad6Smrg linknames= 9897e96acad6Smrg for link 9898e96acad6Smrg do 9899e96acad6Smrg func_append linknames " $link" 9900e96acad6Smrg done 9901dbbd9e4bSmacallan 9902e96acad6Smrg # Use standard objects if they are pic 9903e96acad6Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9904e96acad6Smrg test "X$libobjs" = "X " && libobjs= 9905dbbd9e4bSmacallan 9906e96acad6Smrg delfiles= 9907e96acad6Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9908e96acad6Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9909cfa76ccdSmrg export_symbols=$output_objdir/$libname.uexp 9910e96acad6Smrg func_append delfiles " $export_symbols" 9911e96acad6Smrg fi 9912dbbd9e4bSmacallan 9913e96acad6Smrg orig_export_symbols= 9914e96acad6Smrg case $host_os in 9915e96acad6Smrg cygwin* | mingw* | cegcc*) 9916e96acad6Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9917e96acad6Smrg # exporting using user supplied symfile 9918cfa76ccdSmrg func_dll_def_p "$export_symbols" || { 9919e96acad6Smrg # and it's NOT already a .def file. Must figure out 9920e96acad6Smrg # which of the given symbols are data symbols and tag 9921e96acad6Smrg # them as such. So, trigger use of export_symbols_cmds. 9922e96acad6Smrg # export_symbols gets reassigned inside the "prepare 9923e96acad6Smrg # the list of exported symbols" if statement, so the 9924e96acad6Smrg # include_expsyms logic still works. 9925cfa76ccdSmrg orig_export_symbols=$export_symbols 9926e96acad6Smrg export_symbols= 9927e96acad6Smrg always_export_symbols=yes 9928cfa76ccdSmrg } 9929e96acad6Smrg fi 9930e96acad6Smrg ;; 9931e96acad6Smrg esac 9932dbbd9e4bSmacallan 9933e96acad6Smrg # Prepare the list of exported symbols 9934e96acad6Smrg if test -z "$export_symbols"; then 9935cfa76ccdSmrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9936cfa76ccdSmrg func_verbose "generating symbol list for '$libname.la'" 9937cfa76ccdSmrg export_symbols=$output_objdir/$libname.exp 9938e96acad6Smrg $opt_dry_run || $RM $export_symbols 9939e96acad6Smrg cmds=$export_symbols_cmds 9940cfa76ccdSmrg save_ifs=$IFS; IFS='~' 9941e96acad6Smrg for cmd1 in $cmds; do 9942cfa76ccdSmrg IFS=$save_ifs 9943e96acad6Smrg # Take the normal branch if the nm_file_list_spec branch 9944e96acad6Smrg # doesn't work or if tool conversion is not needed. 9945e96acad6Smrg case $nm_file_list_spec~$to_tool_file_cmd in 9946e96acad6Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9947e96acad6Smrg try_normal_branch=yes 9948e96acad6Smrg eval cmd=\"$cmd1\" 9949e96acad6Smrg func_len " $cmd" 9950e96acad6Smrg len=$func_len_result 9951e96acad6Smrg ;; 9952e96acad6Smrg *) 9953e96acad6Smrg try_normal_branch=no 9954e96acad6Smrg ;; 9955e96acad6Smrg esac 9956cfa76ccdSmrg if test yes = "$try_normal_branch" \ 9957e96acad6Smrg && { test "$len" -lt "$max_cmd_len" \ 9958e96acad6Smrg || test "$max_cmd_len" -le -1; } 9959e96acad6Smrg then 9960e96acad6Smrg func_show_eval "$cmd" 'exit $?' 9961e96acad6Smrg skipped_export=false 9962e96acad6Smrg elif test -n "$nm_file_list_spec"; then 9963e96acad6Smrg func_basename "$output" 9964e96acad6Smrg output_la=$func_basename_result 9965e96acad6Smrg save_libobjs=$libobjs 9966e96acad6Smrg save_output=$output 9967cfa76ccdSmrg output=$output_objdir/$output_la.nm 9968e96acad6Smrg func_to_tool_file "$output" 9969e96acad6Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 9970e96acad6Smrg func_append delfiles " $output" 9971e96acad6Smrg func_verbose "creating $NM input file list: $output" 9972e96acad6Smrg for obj in $save_libobjs; do 9973e96acad6Smrg func_to_tool_file "$obj" 9974e96acad6Smrg $ECHO "$func_to_tool_file_result" 9975e96acad6Smrg done > "$output" 9976e96acad6Smrg eval cmd=\"$cmd1\" 9977e96acad6Smrg func_show_eval "$cmd" 'exit $?' 9978e96acad6Smrg output=$save_output 9979e96acad6Smrg libobjs=$save_libobjs 9980e96acad6Smrg skipped_export=false 9981e96acad6Smrg else 9982e96acad6Smrg # The command line is too long to execute in one step. 9983e96acad6Smrg func_verbose "using reloadable object file for export list..." 9984e96acad6Smrg skipped_export=: 9985e96acad6Smrg # Break out early, otherwise skipped_export may be 9986e96acad6Smrg # set to false by a later but shorter cmd. 9987e96acad6Smrg break 9988e96acad6Smrg fi 9989e96acad6Smrg done 9990cfa76ccdSmrg IFS=$save_ifs 9991cfa76ccdSmrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9992e96acad6Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9993e96acad6Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9994e96acad6Smrg fi 9995e96acad6Smrg fi 9996dbbd9e4bSmacallan fi 9997dbbd9e4bSmacallan 9998e96acad6Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9999cfa76ccdSmrg tmp_export_symbols=$export_symbols 10000cfa76ccdSmrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10001e96acad6Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10002dbbd9e4bSmacallan fi 10003dbbd9e4bSmacallan 10004cfa76ccdSmrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 10005e96acad6Smrg # The given exports_symbols file has to be filtered, so filter it. 10006cfa76ccdSmrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10007e96acad6Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 10008cfa76ccdSmrg # 's' commands, which not all seds can handle. GNU sed should be fine 10009e96acad6Smrg # though. Also, the filter scales superlinearly with the number of 10010e96acad6Smrg # global variables. join(1) would be nice here, but unfortunately 10011e96acad6Smrg # isn't a blessed tool. 10012e96acad6Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10013e96acad6Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10014e96acad6Smrg export_symbols=$output_objdir/$libname.def 10015e96acad6Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10016e96acad6Smrg fi 10017dbbd9e4bSmacallan 10018e96acad6Smrg tmp_deplibs= 10019e96acad6Smrg for test_deplib in $deplibs; do 10020e96acad6Smrg case " $convenience " in 10021e96acad6Smrg *" $test_deplib "*) ;; 10022e96acad6Smrg *) 10023e96acad6Smrg func_append tmp_deplibs " $test_deplib" 10024e96acad6Smrg ;; 10025e96acad6Smrg esac 10026e96acad6Smrg done 10027cfa76ccdSmrg deplibs=$tmp_deplibs 10028dbbd9e4bSmacallan 10029e96acad6Smrg if test -n "$convenience"; then 10030e96acad6Smrg if test -n "$whole_archive_flag_spec" && 10031cfa76ccdSmrg test yes = "$compiler_needs_object" && 10032e96acad6Smrg test -z "$libobjs"; then 10033e96acad6Smrg # extract the archives, so we have objects to list. 10034e96acad6Smrg # TODO: could optimize this to just extract one archive. 10035e96acad6Smrg whole_archive_flag_spec= 10036e96acad6Smrg fi 10037e96acad6Smrg if test -n "$whole_archive_flag_spec"; then 10038e96acad6Smrg save_libobjs=$libobjs 10039e96acad6Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10040e96acad6Smrg test "X$libobjs" = "X " && libobjs= 10041e96acad6Smrg else 10042cfa76ccdSmrg gentop=$output_objdir/${outputname}x 10043e96acad6Smrg func_append generated " $gentop" 10044dbbd9e4bSmacallan 10045e96acad6Smrg func_extract_archives $gentop $convenience 10046e96acad6Smrg func_append libobjs " $func_extract_archives_result" 10047e96acad6Smrg test "X$libobjs" = "X " && libobjs= 10048e96acad6Smrg fi 10049dbbd9e4bSmacallan fi 10050dbbd9e4bSmacallan 10051cfa76ccdSmrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 10052e96acad6Smrg eval flag=\"$thread_safe_flag_spec\" 10053e96acad6Smrg func_append linker_flags " $flag" 10054e96acad6Smrg fi 10055dbbd9e4bSmacallan 10056e96acad6Smrg # Make a backup of the uninstalled library when relinking 10057cfa76ccdSmrg if test relink = "$opt_mode"; then 10058e96acad6Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 10059e96acad6Smrg fi 10060e96acad6Smrg 10061e96acad6Smrg # Do each of the archive commands. 10062cfa76ccdSmrg if test yes = "$module" && test -n "$module_cmds"; then 10063e96acad6Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10064e96acad6Smrg eval test_cmds=\"$module_expsym_cmds\" 10065e96acad6Smrg cmds=$module_expsym_cmds 10066e96acad6Smrg else 10067e96acad6Smrg eval test_cmds=\"$module_cmds\" 10068e96acad6Smrg cmds=$module_cmds 10069e96acad6Smrg fi 10070e96acad6Smrg else 10071e96acad6Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10072e96acad6Smrg eval test_cmds=\"$archive_expsym_cmds\" 10073e96acad6Smrg cmds=$archive_expsym_cmds 10074e96acad6Smrg else 10075e96acad6Smrg eval test_cmds=\"$archive_cmds\" 10076e96acad6Smrg cmds=$archive_cmds 10077e96acad6Smrg fi 10078e96acad6Smrg fi 10079dbbd9e4bSmacallan 10080cfa76ccdSmrg if test : != "$skipped_export" && 10081e96acad6Smrg func_len " $test_cmds" && 10082e96acad6Smrg len=$func_len_result && 10083e96acad6Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10084dbbd9e4bSmacallan : 10085dbbd9e4bSmacallan else 10086e96acad6Smrg # The command line is too long to link in one step, link piecewise 10087e96acad6Smrg # or, if using GNU ld and skipped_export is not :, use a linker 10088e96acad6Smrg # script. 10089dbbd9e4bSmacallan 10090e96acad6Smrg # Save the value of $output and $libobjs because we want to 10091e96acad6Smrg # use them later. If we have whole_archive_flag_spec, we 10092e96acad6Smrg # want to use save_libobjs as it was before 10093e96acad6Smrg # whole_archive_flag_spec was expanded, because we can't 10094e96acad6Smrg # assume the linker understands whole_archive_flag_spec. 10095e96acad6Smrg # This may have to be revisited, in case too many 10096e96acad6Smrg # convenience libraries get linked in and end up exceeding 10097e96acad6Smrg # the spec. 10098e96acad6Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 10099e96acad6Smrg save_libobjs=$libobjs 10100dbbd9e4bSmacallan fi 10101e96acad6Smrg save_output=$output 10102e96acad6Smrg func_basename "$output" 10103e96acad6Smrg output_la=$func_basename_result 10104dbbd9e4bSmacallan 10105e96acad6Smrg # Clear the reloadable object creation command queue and 10106e96acad6Smrg # initialize k to one. 10107e96acad6Smrg test_cmds= 10108dbbd9e4bSmacallan concat_cmds= 10109e96acad6Smrg objlist= 10110e96acad6Smrg last_robj= 10111e96acad6Smrg k=1 10112dbbd9e4bSmacallan 10113cfa76ccdSmrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 10114cfa76ccdSmrg output=$output_objdir/$output_la.lnkscript 10115e96acad6Smrg func_verbose "creating GNU ld script: $output" 10116e96acad6Smrg echo 'INPUT (' > $output 10117e96acad6Smrg for obj in $save_libobjs 10118e96acad6Smrg do 10119e96acad6Smrg func_to_tool_file "$obj" 10120e96acad6Smrg $ECHO "$func_to_tool_file_result" >> $output 10121e96acad6Smrg done 10122e96acad6Smrg echo ')' >> $output 10123e96acad6Smrg func_append delfiles " $output" 10124e96acad6Smrg func_to_tool_file "$output" 10125e96acad6Smrg output=$func_to_tool_file_result 10126cfa76ccdSmrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 10127cfa76ccdSmrg output=$output_objdir/$output_la.lnk 10128e96acad6Smrg func_verbose "creating linker input file list: $output" 10129e96acad6Smrg : > $output 10130e96acad6Smrg set x $save_libobjs 10131e96acad6Smrg shift 10132e96acad6Smrg firstobj= 10133cfa76ccdSmrg if test yes = "$compiler_needs_object"; then 10134e96acad6Smrg firstobj="$1 " 10135e96acad6Smrg shift 10136e96acad6Smrg fi 10137e96acad6Smrg for obj 10138e96acad6Smrg do 10139e96acad6Smrg func_to_tool_file "$obj" 10140e96acad6Smrg $ECHO "$func_to_tool_file_result" >> $output 10141e96acad6Smrg done 10142e96acad6Smrg func_append delfiles " $output" 10143e96acad6Smrg func_to_tool_file "$output" 10144e96acad6Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 10145e96acad6Smrg else 10146e96acad6Smrg if test -n "$save_libobjs"; then 10147e96acad6Smrg func_verbose "creating reloadable object files..." 10148cfa76ccdSmrg output=$output_objdir/$output_la-$k.$objext 10149e96acad6Smrg eval test_cmds=\"$reload_cmds\" 10150e96acad6Smrg func_len " $test_cmds" 10151e96acad6Smrg len0=$func_len_result 10152e96acad6Smrg len=$len0 10153e96acad6Smrg 10154e96acad6Smrg # Loop over the list of objects to be linked. 10155e96acad6Smrg for obj in $save_libobjs 10156e96acad6Smrg do 10157e96acad6Smrg func_len " $obj" 10158e96acad6Smrg func_arith $len + $func_len_result 10159e96acad6Smrg len=$func_arith_result 10160cfa76ccdSmrg if test -z "$objlist" || 10161e96acad6Smrg test "$len" -lt "$max_cmd_len"; then 10162e96acad6Smrg func_append objlist " $obj" 10163e96acad6Smrg else 10164e96acad6Smrg # The command $test_cmds is almost too long, add a 10165e96acad6Smrg # command to the queue. 10166cfa76ccdSmrg if test 1 -eq "$k"; then 10167e96acad6Smrg # The first file doesn't have a previous command to add. 10168e96acad6Smrg reload_objs=$objlist 10169e96acad6Smrg eval concat_cmds=\"$reload_cmds\" 10170e96acad6Smrg else 10171e96acad6Smrg # All subsequent reloadable object files will link in 10172e96acad6Smrg # the last one created. 10173e96acad6Smrg reload_objs="$objlist $last_robj" 10174e96acad6Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 10175e96acad6Smrg fi 10176cfa76ccdSmrg last_robj=$output_objdir/$output_la-$k.$objext 10177e96acad6Smrg func_arith $k + 1 10178e96acad6Smrg k=$func_arith_result 10179cfa76ccdSmrg output=$output_objdir/$output_la-$k.$objext 10180e96acad6Smrg objlist=" $obj" 10181e96acad6Smrg func_len " $last_robj" 10182e96acad6Smrg func_arith $len0 + $func_len_result 10183e96acad6Smrg len=$func_arith_result 10184e96acad6Smrg fi 10185e96acad6Smrg done 10186e96acad6Smrg # Handle the remaining objects by creating one last 10187e96acad6Smrg # reloadable object file. All subsequent reloadable object 10188e96acad6Smrg # files will link in the last one created. 10189e96acad6Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10190e96acad6Smrg reload_objs="$objlist $last_robj" 10191cfa76ccdSmrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 10192e96acad6Smrg if test -n "$last_robj"; then 10193cfa76ccdSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10194dbbd9e4bSmacallan fi 10195e96acad6Smrg func_append delfiles " $output" 10196e96acad6Smrg 10197e96acad6Smrg else 10198e96acad6Smrg output= 10199e96acad6Smrg fi 10200e96acad6Smrg 10201cfa76ccdSmrg ${skipped_export-false} && { 10202cfa76ccdSmrg func_verbose "generating symbol list for '$libname.la'" 10203cfa76ccdSmrg export_symbols=$output_objdir/$libname.exp 10204e96acad6Smrg $opt_dry_run || $RM $export_symbols 10205e96acad6Smrg libobjs=$output 10206e96acad6Smrg # Append the command to create the export file. 10207dbbd9e4bSmacallan test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10208e96acad6Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 10209e96acad6Smrg if test -n "$last_robj"; then 10210e96acad6Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 10211e96acad6Smrg fi 10212cfa76ccdSmrg } 10213e96acad6Smrg 10214e96acad6Smrg test -n "$save_libobjs" && 10215e96acad6Smrg func_verbose "creating a temporary reloadable object file: $output" 10216e96acad6Smrg 10217e96acad6Smrg # Loop through the commands generated above and execute them. 10218cfa76ccdSmrg save_ifs=$IFS; IFS='~' 10219e96acad6Smrg for cmd in $concat_cmds; do 10220cfa76ccdSmrg IFS=$save_ifs 10221cfa76ccdSmrg $opt_quiet || { 10222cfa76ccdSmrg func_quote_arg expand,pretty "$cmd" 10223cfa76ccdSmrg eval "func_echo $func_quote_arg_result" 10224e96acad6Smrg } 10225e96acad6Smrg $opt_dry_run || eval "$cmd" || { 10226e96acad6Smrg lt_exit=$? 10227e96acad6Smrg 10228e96acad6Smrg # Restore the uninstalled library and exit 10229cfa76ccdSmrg if test relink = "$opt_mode"; then 10230e96acad6Smrg ( cd "$output_objdir" && \ 10231e96acad6Smrg $RM "${realname}T" && \ 10232e96acad6Smrg $MV "${realname}U" "$realname" ) 10233e96acad6Smrg fi 10234e96acad6Smrg 10235e96acad6Smrg exit $lt_exit 10236e96acad6Smrg } 10237e96acad6Smrg done 10238cfa76ccdSmrg IFS=$save_ifs 10239e96acad6Smrg 10240e96acad6Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 10241e96acad6Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 10242e96acad6Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10243dbbd9e4bSmacallan fi 10244dbbd9e4bSmacallan fi 10245dbbd9e4bSmacallan 10246cfa76ccdSmrg ${skipped_export-false} && { 10247e96acad6Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 10248cfa76ccdSmrg tmp_export_symbols=$export_symbols 10249cfa76ccdSmrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 10250e96acad6Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 10251e96acad6Smrg fi 10252dbbd9e4bSmacallan 10253e96acad6Smrg if test -n "$orig_export_symbols"; then 10254e96acad6Smrg # The given exports_symbols file has to be filtered, so filter it. 10255cfa76ccdSmrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 10256e96acad6Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 10257cfa76ccdSmrg # 's' commands, which not all seds can handle. GNU sed should be fine 10258e96acad6Smrg # though. Also, the filter scales superlinearly with the number of 10259e96acad6Smrg # global variables. join(1) would be nice here, but unfortunately 10260e96acad6Smrg # isn't a blessed tool. 10261e96acad6Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10262e96acad6Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 10263e96acad6Smrg export_symbols=$output_objdir/$libname.def 10264e96acad6Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 10265e96acad6Smrg fi 10266cfa76ccdSmrg } 10267dbbd9e4bSmacallan 10268e96acad6Smrg libobjs=$output 10269e96acad6Smrg # Restore the value of output. 10270e96acad6Smrg output=$save_output 10271dbbd9e4bSmacallan 10272e96acad6Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 10273e96acad6Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 10274e96acad6Smrg test "X$libobjs" = "X " && libobjs= 10275e96acad6Smrg fi 10276e96acad6Smrg # Expand the library linking commands again to reset the 10277e96acad6Smrg # value of $libobjs for piecewise linking. 10278dbbd9e4bSmacallan 10279e96acad6Smrg # Do each of the archive commands. 10280cfa76ccdSmrg if test yes = "$module" && test -n "$module_cmds"; then 10281e96acad6Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10282e96acad6Smrg cmds=$module_expsym_cmds 10283e96acad6Smrg else 10284e96acad6Smrg cmds=$module_cmds 10285dbbd9e4bSmacallan fi 10286dbbd9e4bSmacallan else 10287e96acad6Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10288e96acad6Smrg cmds=$archive_expsym_cmds 10289e96acad6Smrg else 10290e96acad6Smrg cmds=$archive_cmds 10291e96acad6Smrg fi 10292dbbd9e4bSmacallan fi 10293e96acad6Smrg fi 10294dbbd9e4bSmacallan 10295e96acad6Smrg if test -n "$delfiles"; then 10296e96acad6Smrg # Append the command to remove temporary files to $cmds. 10297e96acad6Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 10298e96acad6Smrg fi 10299dbbd9e4bSmacallan 10300e96acad6Smrg # Add any objects from preloaded convenience libraries 10301e96acad6Smrg if test -n "$dlprefiles"; then 10302cfa76ccdSmrg gentop=$output_objdir/${outputname}x 10303e96acad6Smrg func_append generated " $gentop" 10304dbbd9e4bSmacallan 10305e96acad6Smrg func_extract_archives $gentop $dlprefiles 10306e96acad6Smrg func_append libobjs " $func_extract_archives_result" 10307e96acad6Smrg test "X$libobjs" = "X " && libobjs= 10308e96acad6Smrg fi 10309dbbd9e4bSmacallan 10310cfa76ccdSmrg save_ifs=$IFS; IFS='~' 10311e96acad6Smrg for cmd in $cmds; do 10312cfa76ccdSmrg IFS=$sp$nl 10313e96acad6Smrg eval cmd=\"$cmd\" 10314cfa76ccdSmrg IFS=$save_ifs 10315cfa76ccdSmrg $opt_quiet || { 10316cfa76ccdSmrg func_quote_arg expand,pretty "$cmd" 10317cfa76ccdSmrg eval "func_echo $func_quote_arg_result" 10318e96acad6Smrg } 10319e96acad6Smrg $opt_dry_run || eval "$cmd" || { 10320e96acad6Smrg lt_exit=$? 10321dbbd9e4bSmacallan 10322e96acad6Smrg # Restore the uninstalled library and exit 10323cfa76ccdSmrg if test relink = "$opt_mode"; then 10324e96acad6Smrg ( cd "$output_objdir" && \ 10325e96acad6Smrg $RM "${realname}T" && \ 10326e96acad6Smrg $MV "${realname}U" "$realname" ) 10327e96acad6Smrg fi 10328dbbd9e4bSmacallan 10329e96acad6Smrg exit $lt_exit 10330e96acad6Smrg } 10331e96acad6Smrg done 10332cfa76ccdSmrg IFS=$save_ifs 10333dbbd9e4bSmacallan 10334e96acad6Smrg # Restore the uninstalled library and exit 10335cfa76ccdSmrg if test relink = "$opt_mode"; then 10336e96acad6Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10337dbbd9e4bSmacallan 10338e96acad6Smrg if test -n "$convenience"; then 10339e96acad6Smrg if test -z "$whole_archive_flag_spec"; then 10340e96acad6Smrg func_show_eval '${RM}r "$gentop"' 10341e96acad6Smrg fi 10342e96acad6Smrg fi 10343dbbd9e4bSmacallan 10344e96acad6Smrg exit $EXIT_SUCCESS 10345e96acad6Smrg fi 10346e96acad6Smrg 10347e96acad6Smrg # Create links to the real library. 10348e96acad6Smrg for linkname in $linknames; do 10349e96acad6Smrg if test "$realname" != "$linkname"; then 10350e96acad6Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10351dbbd9e4bSmacallan fi 10352dbbd9e4bSmacallan done 10353dbbd9e4bSmacallan 10354e96acad6Smrg # If -module or -export-dynamic was specified, set the dlname. 10355cfa76ccdSmrg if test yes = "$module" || test yes = "$export_dynamic"; then 10356e96acad6Smrg # On all known operating systems, these are identical. 10357cfa76ccdSmrg dlname=$soname 10358e96acad6Smrg fi 10359e96acad6Smrg fi 10360dbbd9e4bSmacallan ;; 10361dbbd9e4bSmacallan 10362e96acad6Smrg obj) 10363cfa76ccdSmrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10364cfa76ccdSmrg func_warning "'-dlopen' is ignored for objects" 10365e96acad6Smrg fi 10366dbbd9e4bSmacallan 10367e96acad6Smrg case " $deplibs" in 10368e96acad6Smrg *\ -l* | *\ -L*) 10369cfa76ccdSmrg func_warning "'-l' and '-L' are ignored for objects" ;; 10370dbbd9e4bSmacallan esac 10371dbbd9e4bSmacallan 10372e96acad6Smrg test -n "$rpath" && \ 10373cfa76ccdSmrg func_warning "'-rpath' is ignored for objects" 10374dbbd9e4bSmacallan 10375e96acad6Smrg test -n "$xrpath" && \ 10376cfa76ccdSmrg func_warning "'-R' is ignored for objects" 10377dbbd9e4bSmacallan 10378e96acad6Smrg test -n "$vinfo" && \ 10379cfa76ccdSmrg func_warning "'-version-info' is ignored for objects" 10380e96acad6Smrg 10381e96acad6Smrg test -n "$release" && \ 10382cfa76ccdSmrg func_warning "'-release' is ignored for objects" 10383e96acad6Smrg 10384e96acad6Smrg case $output in 10385e96acad6Smrg *.lo) 10386e96acad6Smrg test -n "$objs$old_deplibs" && \ 10387cfa76ccdSmrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10388e96acad6Smrg 10389e96acad6Smrg libobj=$output 10390e96acad6Smrg func_lo2o "$libobj" 10391e96acad6Smrg obj=$func_lo2o_result 10392dbbd9e4bSmacallan ;; 10393dbbd9e4bSmacallan *) 10394e96acad6Smrg libobj= 10395cfa76ccdSmrg obj=$output 10396dbbd9e4bSmacallan ;; 10397dbbd9e4bSmacallan esac 10398dbbd9e4bSmacallan 10399e96acad6Smrg # Delete the old objects. 10400e96acad6Smrg $opt_dry_run || $RM $obj $libobj 10401dbbd9e4bSmacallan 10402e96acad6Smrg # Objects from convenience libraries. This assumes 10403e96acad6Smrg # single-version convenience libraries. Whenever we create 10404e96acad6Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 10405e96acad6Smrg # the extraction. 10406e96acad6Smrg reload_conv_objs= 10407e96acad6Smrg gentop= 10408cfa76ccdSmrg # if reload_cmds runs $LD directly, get rid of -Wl from 10409cfa76ccdSmrg # whole_archive_flag_spec and hope we can get by with turning comma 10410cfa76ccdSmrg # into space. 10411cfa76ccdSmrg case $reload_cmds in 10412cfa76ccdSmrg *\$LD[\ \$]*) wl= ;; 10413cfa76ccdSmrg esac 10414e96acad6Smrg if test -n "$convenience"; then 10415e96acad6Smrg if test -n "$whole_archive_flag_spec"; then 10416e96acad6Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10417cfa76ccdSmrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10418cfa76ccdSmrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10419e96acad6Smrg else 10420cfa76ccdSmrg gentop=$output_objdir/${obj}x 10421e96acad6Smrg func_append generated " $gentop" 10422dbbd9e4bSmacallan 10423e96acad6Smrg func_extract_archives $gentop $convenience 10424e96acad6Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10425e96acad6Smrg fi 10426dbbd9e4bSmacallan fi 10427dbbd9e4bSmacallan 10428e96acad6Smrg # If we're not building shared, we need to use non_pic_objs 10429cfa76ccdSmrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10430dbbd9e4bSmacallan 10431e96acad6Smrg # Create the old-style object. 10432cfa76ccdSmrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10433dbbd9e4bSmacallan 10434cfa76ccdSmrg output=$obj 10435e96acad6Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10436e96acad6Smrg 10437e96acad6Smrg # Exit if we aren't doing a library object file. 10438e96acad6Smrg if test -z "$libobj"; then 10439e96acad6Smrg if test -n "$gentop"; then 10440e96acad6Smrg func_show_eval '${RM}r "$gentop"' 10441e96acad6Smrg fi 10442e96acad6Smrg 10443e96acad6Smrg exit $EXIT_SUCCESS 10444dbbd9e4bSmacallan fi 10445e96acad6Smrg 10446cfa76ccdSmrg test yes = "$build_libtool_libs" || { 10447e96acad6Smrg if test -n "$gentop"; then 10448e96acad6Smrg func_show_eval '${RM}r "$gentop"' 10449e96acad6Smrg fi 10450e96acad6Smrg 10451e96acad6Smrg # Create an invalid libtool object if no PIC, so that we don't 10452e96acad6Smrg # accidentally link it into a program. 10453e96acad6Smrg # $show "echo timestamp > $libobj" 10454e96acad6Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10455e96acad6Smrg exit $EXIT_SUCCESS 10456cfa76ccdSmrg } 10457e96acad6Smrg 10458cfa76ccdSmrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10459e96acad6Smrg # Only do commands if we really have different PIC objects. 10460e96acad6Smrg reload_objs="$libobjs $reload_conv_objs" 10461cfa76ccdSmrg output=$libobj 10462e96acad6Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10463e96acad6Smrg fi 10464e96acad6Smrg 10465e96acad6Smrg if test -n "$gentop"; then 10466e96acad6Smrg func_show_eval '${RM}r "$gentop"' 10467e96acad6Smrg fi 10468e96acad6Smrg 10469e96acad6Smrg exit $EXIT_SUCCESS 10470dbbd9e4bSmacallan ;; 10471dbbd9e4bSmacallan 10472e96acad6Smrg prog) 10473e96acad6Smrg case $host in 10474e96acad6Smrg *cygwin*) func_stripname '' '.exe' "$output" 10475e96acad6Smrg output=$func_stripname_result.exe;; 10476e96acad6Smrg esac 10477e96acad6Smrg test -n "$vinfo" && \ 10478cfa76ccdSmrg func_warning "'-version-info' is ignored for programs" 10479dbbd9e4bSmacallan 10480e96acad6Smrg test -n "$release" && \ 10481cfa76ccdSmrg func_warning "'-release' is ignored for programs" 10482dbbd9e4bSmacallan 10483cfa76ccdSmrg $preload \ 10484cfa76ccdSmrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10485cfa76ccdSmrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10486e96acad6Smrg 10487e96acad6Smrg case $host in 10488e96acad6Smrg *-*-rhapsody* | *-*-darwin1.[012]) 10489e96acad6Smrg # On Rhapsody replace the C library is the System framework 10490e96acad6Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10491e96acad6Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10492dbbd9e4bSmacallan ;; 10493e96acad6Smrg esac 10494dbbd9e4bSmacallan 10495e96acad6Smrg case $host in 10496e96acad6Smrg *-*-darwin*) 10497e96acad6Smrg # Don't allow lazy linking, it breaks C++ global constructors 10498e96acad6Smrg # But is supposedly fixed on 10.4 or later (yay!). 10499cfa76ccdSmrg if test CXX = "$tagname"; then 10500e96acad6Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10501e96acad6Smrg 10.[0123]) 10502cfa76ccdSmrg func_append compile_command " $wl-bind_at_load" 10503cfa76ccdSmrg func_append finalize_command " $wl-bind_at_load" 10504e96acad6Smrg ;; 10505e96acad6Smrg esac 10506dbbd9e4bSmacallan fi 10507e96acad6Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10508e96acad6Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10509e96acad6Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10510e96acad6Smrg ;; 10511e96acad6Smrg esac 10512dbbd9e4bSmacallan 10513dbbd9e4bSmacallan 10514e96acad6Smrg # move library search paths that coincide with paths to not yet 10515e96acad6Smrg # installed libraries to the beginning of the library search list 10516e96acad6Smrg new_libs= 10517e96acad6Smrg for path in $notinst_path; do 10518e96acad6Smrg case " $new_libs " in 10519e96acad6Smrg *" -L$path/$objdir "*) ;; 10520e96acad6Smrg *) 10521e96acad6Smrg case " $compile_deplibs " in 10522e96acad6Smrg *" -L$path/$objdir "*) 10523e96acad6Smrg func_append new_libs " -L$path/$objdir" ;; 10524dbbd9e4bSmacallan esac 10525e96acad6Smrg ;; 10526e96acad6Smrg esac 10527e96acad6Smrg done 10528e96acad6Smrg for deplib in $compile_deplibs; do 10529e96acad6Smrg case $deplib in 10530e96acad6Smrg -L*) 10531e96acad6Smrg case " $new_libs " in 10532e96acad6Smrg *" $deplib "*) ;; 10533e96acad6Smrg *) func_append new_libs " $deplib" ;; 10534dbbd9e4bSmacallan esac 10535e96acad6Smrg ;; 10536e96acad6Smrg *) func_append new_libs " $deplib" ;; 10537e96acad6Smrg esac 10538e96acad6Smrg done 10539cfa76ccdSmrg compile_deplibs=$new_libs 10540dbbd9e4bSmacallan 10541dbbd9e4bSmacallan 10542e96acad6Smrg func_append compile_command " $compile_deplibs" 10543e96acad6Smrg func_append finalize_command " $finalize_deplibs" 10544dbbd9e4bSmacallan 10545e96acad6Smrg if test -n "$rpath$xrpath"; then 10546e96acad6Smrg # If the user specified any rpath flags, then add them. 10547e96acad6Smrg for libdir in $rpath $xrpath; do 10548e96acad6Smrg # This is the magic to use -rpath. 10549e96acad6Smrg case "$finalize_rpath " in 10550e96acad6Smrg *" $libdir "*) ;; 10551e96acad6Smrg *) func_append finalize_rpath " $libdir" ;; 10552e96acad6Smrg esac 10553e96acad6Smrg done 10554e96acad6Smrg fi 10555dbbd9e4bSmacallan 10556e96acad6Smrg # Now hardcode the library paths 10557e96acad6Smrg rpath= 10558e96acad6Smrg hardcode_libdirs= 10559e96acad6Smrg for libdir in $compile_rpath $finalize_rpath; do 10560e96acad6Smrg if test -n "$hardcode_libdir_flag_spec"; then 10561e96acad6Smrg if test -n "$hardcode_libdir_separator"; then 10562e96acad6Smrg if test -z "$hardcode_libdirs"; then 10563cfa76ccdSmrg hardcode_libdirs=$libdir 10564e96acad6Smrg else 10565e96acad6Smrg # Just accumulate the unique libdirs. 10566e96acad6Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10567e96acad6Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10568e96acad6Smrg ;; 10569e96acad6Smrg *) 10570e96acad6Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10571e96acad6Smrg ;; 10572e96acad6Smrg esac 10573e96acad6Smrg fi 10574dbbd9e4bSmacallan else 10575e96acad6Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10576e96acad6Smrg func_append rpath " $flag" 10577dbbd9e4bSmacallan fi 10578e96acad6Smrg elif test -n "$runpath_var"; then 10579e96acad6Smrg case "$perm_rpath " in 10580e96acad6Smrg *" $libdir "*) ;; 10581e96acad6Smrg *) func_append perm_rpath " $libdir" ;; 10582e96acad6Smrg esac 10583e96acad6Smrg fi 10584e96acad6Smrg case $host in 10585e96acad6Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10586cfa76ccdSmrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10587e96acad6Smrg case :$dllsearchpath: in 10588e96acad6Smrg *":$libdir:"*) ;; 10589e96acad6Smrg ::) dllsearchpath=$libdir;; 10590e96acad6Smrg *) func_append dllsearchpath ":$libdir";; 10591e96acad6Smrg esac 10592e96acad6Smrg case :$dllsearchpath: in 10593e96acad6Smrg *":$testbindir:"*) ;; 10594e96acad6Smrg ::) dllsearchpath=$testbindir;; 10595e96acad6Smrg *) func_append dllsearchpath ":$testbindir";; 10596e96acad6Smrg esac 10597e96acad6Smrg ;; 10598e96acad6Smrg esac 10599e96acad6Smrg done 10600e96acad6Smrg # Substitute the hardcoded libdirs into the rpath. 10601e96acad6Smrg if test -n "$hardcode_libdir_separator" && 10602e96acad6Smrg test -n "$hardcode_libdirs"; then 10603cfa76ccdSmrg libdir=$hardcode_libdirs 10604e96acad6Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10605e96acad6Smrg fi 10606cfa76ccdSmrg compile_rpath=$rpath 10607dbbd9e4bSmacallan 10608e96acad6Smrg rpath= 10609e96acad6Smrg hardcode_libdirs= 10610e96acad6Smrg for libdir in $finalize_rpath; do 10611e96acad6Smrg if test -n "$hardcode_libdir_flag_spec"; then 10612e96acad6Smrg if test -n "$hardcode_libdir_separator"; then 10613e96acad6Smrg if test -z "$hardcode_libdirs"; then 10614cfa76ccdSmrg hardcode_libdirs=$libdir 10615e96acad6Smrg else 10616e96acad6Smrg # Just accumulate the unique libdirs. 10617e96acad6Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10618e96acad6Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10619e96acad6Smrg ;; 10620e96acad6Smrg *) 10621e96acad6Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10622e96acad6Smrg ;; 10623e96acad6Smrg esac 10624e96acad6Smrg fi 10625dbbd9e4bSmacallan else 10626e96acad6Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10627e96acad6Smrg func_append rpath " $flag" 10628dbbd9e4bSmacallan fi 10629e96acad6Smrg elif test -n "$runpath_var"; then 10630e96acad6Smrg case "$finalize_perm_rpath " in 10631e96acad6Smrg *" $libdir "*) ;; 10632e96acad6Smrg *) func_append finalize_perm_rpath " $libdir" ;; 10633e96acad6Smrg esac 10634dbbd9e4bSmacallan fi 10635e96acad6Smrg done 10636e96acad6Smrg # Substitute the hardcoded libdirs into the rpath. 10637e96acad6Smrg if test -n "$hardcode_libdir_separator" && 10638e96acad6Smrg test -n "$hardcode_libdirs"; then 10639cfa76ccdSmrg libdir=$hardcode_libdirs 10640e96acad6Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 10641e96acad6Smrg fi 10642cfa76ccdSmrg finalize_rpath=$rpath 10643dbbd9e4bSmacallan 10644cfa76ccdSmrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10645e96acad6Smrg # Transform all the library objects into standard objects. 10646e96acad6Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10647e96acad6Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10648e96acad6Smrg fi 10649dbbd9e4bSmacallan 10650cfa76ccdSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 10651dbbd9e4bSmacallan 10652e96acad6Smrg # template prelinking step 10653e96acad6Smrg if test -n "$prelink_cmds"; then 10654e96acad6Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 10655e96acad6Smrg fi 10656dbbd9e4bSmacallan 10657cfa76ccdSmrg wrappers_required=: 10658e96acad6Smrg case $host in 10659e96acad6Smrg *cegcc* | *mingw32ce*) 10660e96acad6Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10661cfa76ccdSmrg wrappers_required=false 10662e96acad6Smrg ;; 10663e96acad6Smrg *cygwin* | *mingw* ) 10664cfa76ccdSmrg test yes = "$build_libtool_libs" || wrappers_required=false 10665e96acad6Smrg ;; 10666e96acad6Smrg *) 10667cfa76ccdSmrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10668cfa76ccdSmrg wrappers_required=false 10669e96acad6Smrg fi 10670e96acad6Smrg ;; 10671e96acad6Smrg esac 10672cfa76ccdSmrg $wrappers_required || { 10673e96acad6Smrg # Replace the output file specification. 10674e96acad6Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10675cfa76ccdSmrg link_command=$compile_command$compile_rpath 10676dbbd9e4bSmacallan 10677e96acad6Smrg # We have no uninstalled library dependencies, so finalize right now. 10678e96acad6Smrg exit_status=0 10679e96acad6Smrg func_show_eval "$link_command" 'exit_status=$?' 10680dbbd9e4bSmacallan 10681e96acad6Smrg if test -n "$postlink_cmds"; then 10682e96acad6Smrg func_to_tool_file "$output" 10683e96acad6Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10684e96acad6Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10685dbbd9e4bSmacallan fi 10686dbbd9e4bSmacallan 10687e96acad6Smrg # Delete the generated files. 10688cfa76ccdSmrg if test -f "$output_objdir/${outputname}S.$objext"; then 10689cfa76ccdSmrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10690e96acad6Smrg fi 10691dbbd9e4bSmacallan 10692e96acad6Smrg exit $exit_status 10693cfa76ccdSmrg } 10694dbbd9e4bSmacallan 10695e96acad6Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10696e96acad6Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10697e96acad6Smrg fi 10698e96acad6Smrg if test -n "$finalize_shlibpath"; then 10699e96acad6Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10700e96acad6Smrg fi 10701dbbd9e4bSmacallan 10702e96acad6Smrg compile_var= 10703e96acad6Smrg finalize_var= 10704e96acad6Smrg if test -n "$runpath_var"; then 10705e96acad6Smrg if test -n "$perm_rpath"; then 10706e96acad6Smrg # We should set the runpath_var. 10707e96acad6Smrg rpath= 10708e96acad6Smrg for dir in $perm_rpath; do 10709e96acad6Smrg func_append rpath "$dir:" 10710e96acad6Smrg done 10711e96acad6Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10712dbbd9e4bSmacallan fi 10713e96acad6Smrg if test -n "$finalize_perm_rpath"; then 10714e96acad6Smrg # We should set the runpath_var. 10715e96acad6Smrg rpath= 10716e96acad6Smrg for dir in $finalize_perm_rpath; do 10717e96acad6Smrg func_append rpath "$dir:" 10718e96acad6Smrg done 10719e96acad6Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10720dbbd9e4bSmacallan fi 10721e96acad6Smrg fi 10722dbbd9e4bSmacallan 10723cfa76ccdSmrg if test yes = "$no_install"; then 10724e96acad6Smrg # We don't need to create a wrapper script. 10725cfa76ccdSmrg link_command=$compile_var$compile_command$compile_rpath 10726e96acad6Smrg # Replace the output file specification. 10727e96acad6Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10728e96acad6Smrg # Delete the old output file. 10729e96acad6Smrg $opt_dry_run || $RM $output 10730e96acad6Smrg # Link the executable and exit 10731e96acad6Smrg func_show_eval "$link_command" 'exit $?' 10732dbbd9e4bSmacallan 10733e96acad6Smrg if test -n "$postlink_cmds"; then 10734e96acad6Smrg func_to_tool_file "$output" 10735e96acad6Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10736e96acad6Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10737dbbd9e4bSmacallan fi 10738e96acad6Smrg 10739dbbd9e4bSmacallan exit $EXIT_SUCCESS 10740e96acad6Smrg fi 10741dbbd9e4bSmacallan 10742cfa76ccdSmrg case $hardcode_action,$fast_install in 10743cfa76ccdSmrg relink,*) 10744cfa76ccdSmrg # Fast installation is not supported 10745cfa76ccdSmrg link_command=$compile_var$compile_command$compile_rpath 10746cfa76ccdSmrg relink_command=$finalize_var$finalize_command$finalize_rpath 10747e96acad6Smrg 10748cfa76ccdSmrg func_warning "this platform does not like uninstalled shared libraries" 10749cfa76ccdSmrg func_warning "'$output' will be relinked during installation" 10750cfa76ccdSmrg ;; 10751cfa76ccdSmrg *,yes) 10752cfa76ccdSmrg link_command=$finalize_var$compile_command$finalize_rpath 10753cfa76ccdSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10754cfa76ccdSmrg ;; 10755cfa76ccdSmrg *,no) 10756cfa76ccdSmrg link_command=$compile_var$compile_command$compile_rpath 10757cfa76ccdSmrg relink_command=$finalize_var$finalize_command$finalize_rpath 10758cfa76ccdSmrg ;; 10759cfa76ccdSmrg *,needless) 10760cfa76ccdSmrg link_command=$finalize_var$compile_command$finalize_rpath 10761cfa76ccdSmrg relink_command= 10762cfa76ccdSmrg ;; 10763cfa76ccdSmrg esac 10764dbbd9e4bSmacallan 10765e96acad6Smrg # Replace the output file specification. 10766e96acad6Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10767dbbd9e4bSmacallan 10768e96acad6Smrg # Delete the old output files. 10769e96acad6Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10770dbbd9e4bSmacallan 10771e96acad6Smrg func_show_eval "$link_command" 'exit $?' 10772dbbd9e4bSmacallan 10773e96acad6Smrg if test -n "$postlink_cmds"; then 10774e96acad6Smrg func_to_tool_file "$output_objdir/$outputname" 10775e96acad6Smrg 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'` 10776e96acad6Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10777e96acad6Smrg fi 10778dbbd9e4bSmacallan 10779e96acad6Smrg # Now create the wrapper script. 10780e96acad6Smrg func_verbose "creating $output" 10781dbbd9e4bSmacallan 10782e96acad6Smrg # Quote the relink command for shipping. 10783e96acad6Smrg if test -n "$relink_command"; then 10784e96acad6Smrg # Preserve any variables that may affect compiler behavior 10785e96acad6Smrg for var in $variables_saved_for_relink; do 10786e96acad6Smrg if eval test -z \"\${$var+set}\"; then 10787e96acad6Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10788e96acad6Smrg elif eval var_value=\$$var; test -z "$var_value"; then 10789e96acad6Smrg relink_command="$var=; export $var; $relink_command" 10790dbbd9e4bSmacallan else 10791cfa76ccdSmrg func_quote_arg pretty "$var_value" 10792cfa76ccdSmrg relink_command="$var=$func_quote_arg_result; export $var; $relink_command" 10793dbbd9e4bSmacallan fi 10794e96acad6Smrg done 10795cfa76ccdSmrg func_quote eval cd "`pwd`" 10796cfa76ccdSmrg func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" 10797cfa76ccdSmrg relink_command=$func_quote_arg_unquoted_result 10798e96acad6Smrg fi 10799e96acad6Smrg 10800e96acad6Smrg # Only actually do things if not in dry run mode. 10801e96acad6Smrg $opt_dry_run || { 10802e96acad6Smrg # win32 will think the script is a binary if it has 10803e96acad6Smrg # a .exe suffix, so we strip it off here. 10804e96acad6Smrg case $output in 10805e96acad6Smrg *.exe) func_stripname '' '.exe' "$output" 10806e96acad6Smrg output=$func_stripname_result ;; 10807dbbd9e4bSmacallan esac 10808e96acad6Smrg # test for cygwin because mv fails w/o .exe extensions 10809e96acad6Smrg case $host in 10810e96acad6Smrg *cygwin*) 10811e96acad6Smrg exeext=.exe 10812e96acad6Smrg func_stripname '' '.exe' "$outputname" 10813e96acad6Smrg outputname=$func_stripname_result ;; 10814e96acad6Smrg *) exeext= ;; 10815e96acad6Smrg esac 10816e96acad6Smrg case $host in 10817e96acad6Smrg *cygwin* | *mingw* ) 10818e96acad6Smrg func_dirname_and_basename "$output" "" "." 10819e96acad6Smrg output_name=$func_basename_result 10820e96acad6Smrg output_path=$func_dirname_result 10821cfa76ccdSmrg cwrappersource=$output_path/$objdir/lt-$output_name.c 10822cfa76ccdSmrg cwrapper=$output_path/$output_name.exe 10823e96acad6Smrg $RM $cwrappersource $cwrapper 10824e96acad6Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10825e96acad6Smrg 10826e96acad6Smrg func_emit_cwrapperexe_src > $cwrappersource 10827e96acad6Smrg 10828e96acad6Smrg # The wrapper executable is built using the $host compiler, 10829e96acad6Smrg # because it contains $host paths and files. If cross- 10830e96acad6Smrg # compiling, it, like the target executable, must be 10831e96acad6Smrg # executed on the $host or under an emulation environment. 10832e96acad6Smrg $opt_dry_run || { 10833e96acad6Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10834e96acad6Smrg $STRIP $cwrapper 10835e96acad6Smrg } 10836dbbd9e4bSmacallan 10837e96acad6Smrg # Now, create the wrapper script for func_source use: 10838e96acad6Smrg func_ltwrapper_scriptname $cwrapper 10839e96acad6Smrg $RM $func_ltwrapper_scriptname_result 10840e96acad6Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10841e96acad6Smrg $opt_dry_run || { 10842e96acad6Smrg # note: this script will not be executed, so do not chmod. 10843cfa76ccdSmrg if test "x$build" = "x$host"; then 10844e96acad6Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10845e96acad6Smrg else 10846e96acad6Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 10847e96acad6Smrg fi 10848e96acad6Smrg } 10849e96acad6Smrg ;; 10850e96acad6Smrg * ) 10851e96acad6Smrg $RM $output 10852e96acad6Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10853dbbd9e4bSmacallan 10854e96acad6Smrg func_emit_wrapper no > $output 10855e96acad6Smrg chmod +x $output 10856e96acad6Smrg ;; 10857e96acad6Smrg esac 10858e96acad6Smrg } 10859e96acad6Smrg exit $EXIT_SUCCESS 10860e96acad6Smrg ;; 10861e96acad6Smrg esac 10862dbbd9e4bSmacallan 10863e96acad6Smrg # See if we need to build an old-fashioned archive. 10864e96acad6Smrg for oldlib in $oldlibs; do 10865dbbd9e4bSmacallan 10866cfa76ccdSmrg case $build_libtool_libs in 10867cfa76ccdSmrg convenience) 10868cfa76ccdSmrg oldobjs="$libobjs_save $symfileobj" 10869cfa76ccdSmrg addlibs=$convenience 10870e96acad6Smrg build_libtool_libs=no 10871cfa76ccdSmrg ;; 10872cfa76ccdSmrg module) 10873cfa76ccdSmrg oldobjs=$libobjs_save 10874cfa76ccdSmrg addlibs=$old_convenience 10875cfa76ccdSmrg build_libtool_libs=no 10876cfa76ccdSmrg ;; 10877cfa76ccdSmrg *) 10878e96acad6Smrg oldobjs="$old_deplibs $non_pic_objects" 10879cfa76ccdSmrg $preload && test -f "$symfileobj" \ 10880cfa76ccdSmrg && func_append oldobjs " $symfileobj" 10881cfa76ccdSmrg addlibs=$old_convenience 10882cfa76ccdSmrg ;; 10883cfa76ccdSmrg esac 10884dbbd9e4bSmacallan 10885e96acad6Smrg if test -n "$addlibs"; then 10886cfa76ccdSmrg gentop=$output_objdir/${outputname}x 10887e96acad6Smrg func_append generated " $gentop" 10888dbbd9e4bSmacallan 10889e96acad6Smrg func_extract_archives $gentop $addlibs 10890e96acad6Smrg func_append oldobjs " $func_extract_archives_result" 10891e96acad6Smrg fi 10892dbbd9e4bSmacallan 10893e96acad6Smrg # Do each command in the archive commands. 10894cfa76ccdSmrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10895e96acad6Smrg cmds=$old_archive_from_new_cmds 10896e96acad6Smrg else 10897dbbd9e4bSmacallan 10898e96acad6Smrg # Add any objects from preloaded convenience libraries 10899e96acad6Smrg if test -n "$dlprefiles"; then 10900cfa76ccdSmrg gentop=$output_objdir/${outputname}x 10901e96acad6Smrg func_append generated " $gentop" 10902dbbd9e4bSmacallan 10903e96acad6Smrg func_extract_archives $gentop $dlprefiles 10904e96acad6Smrg func_append oldobjs " $func_extract_archives_result" 10905e96acad6Smrg fi 10906dbbd9e4bSmacallan 10907e96acad6Smrg # POSIX demands no paths to be encoded in archives. We have 10908e96acad6Smrg # to avoid creating archives with duplicate basenames if we 10909e96acad6Smrg # might have to extract them afterwards, e.g., when creating a 10910e96acad6Smrg # static archive out of a convenience library, or when linking 10911e96acad6Smrg # the entirety of a libtool archive into another (currently 10912e96acad6Smrg # not supported by libtool). 10913e96acad6Smrg if (for obj in $oldobjs 10914e96acad6Smrg do 10915e96acad6Smrg func_basename "$obj" 10916e96acad6Smrg $ECHO "$func_basename_result" 10917e96acad6Smrg done | sort | sort -uc >/dev/null 2>&1); then 10918e96acad6Smrg : 10919e96acad6Smrg else 10920e96acad6Smrg echo "copying selected object files to avoid basename conflicts..." 10921cfa76ccdSmrg gentop=$output_objdir/${outputname}x 10922e96acad6Smrg func_append generated " $gentop" 10923e96acad6Smrg func_mkdir_p "$gentop" 10924e96acad6Smrg save_oldobjs=$oldobjs 10925e96acad6Smrg oldobjs= 10926e96acad6Smrg counter=1 10927e96acad6Smrg for obj in $save_oldobjs 10928e96acad6Smrg do 10929e96acad6Smrg func_basename "$obj" 10930cfa76ccdSmrg objbase=$func_basename_result 10931e96acad6Smrg case " $oldobjs " in 10932e96acad6Smrg " ") oldobjs=$obj ;; 10933e96acad6Smrg *[\ /]"$objbase "*) 10934e96acad6Smrg while :; do 10935e96acad6Smrg # Make sure we don't pick an alternate name that also 10936e96acad6Smrg # overlaps. 10937e96acad6Smrg newobj=lt$counter-$objbase 10938e96acad6Smrg func_arith $counter + 1 10939e96acad6Smrg counter=$func_arith_result 10940e96acad6Smrg case " $oldobjs " in 10941e96acad6Smrg *[\ /]"$newobj "*) ;; 10942e96acad6Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10943e96acad6Smrg esac 10944e96acad6Smrg done 10945e96acad6Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10946e96acad6Smrg func_append oldobjs " $gentop/$newobj" 10947e96acad6Smrg ;; 10948e96acad6Smrg *) func_append oldobjs " $obj" ;; 10949e96acad6Smrg esac 10950dbbd9e4bSmacallan done 10951dbbd9e4bSmacallan fi 10952cfa76ccdSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10953cfa76ccdSmrg tool_oldlib=$func_to_tool_file_result 10954e96acad6Smrg eval cmds=\"$old_archive_cmds\" 10955dbbd9e4bSmacallan 10956e96acad6Smrg func_len " $cmds" 10957e96acad6Smrg len=$func_len_result 10958e96acad6Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10959e96acad6Smrg cmds=$old_archive_cmds 10960e96acad6Smrg elif test -n "$archiver_list_spec"; then 10961e96acad6Smrg func_verbose "using command file archive linking..." 10962e96acad6Smrg for obj in $oldobjs 10963e96acad6Smrg do 10964e96acad6Smrg func_to_tool_file "$obj" 10965e96acad6Smrg $ECHO "$func_to_tool_file_result" 10966e96acad6Smrg done > $output_objdir/$libname.libcmd 10967e96acad6Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 10968e96acad6Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10969e96acad6Smrg cmds=$old_archive_cmds 10970e96acad6Smrg else 10971e96acad6Smrg # the command line is too long to link in one step, link in parts 10972e96acad6Smrg func_verbose "using piecewise archive linking..." 10973e96acad6Smrg save_RANLIB=$RANLIB 10974e96acad6Smrg RANLIB=: 10975e96acad6Smrg objlist= 10976e96acad6Smrg concat_cmds= 10977e96acad6Smrg save_oldobjs=$oldobjs 10978e96acad6Smrg oldobjs= 10979e96acad6Smrg # Is there a better way of finding the last object in the list? 10980e96acad6Smrg for obj in $save_oldobjs 10981e96acad6Smrg do 10982e96acad6Smrg last_oldobj=$obj 10983e96acad6Smrg done 10984e96acad6Smrg eval test_cmds=\"$old_archive_cmds\" 10985e96acad6Smrg func_len " $test_cmds" 10986e96acad6Smrg len0=$func_len_result 10987e96acad6Smrg len=$len0 10988e96acad6Smrg for obj in $save_oldobjs 10989e96acad6Smrg do 10990e96acad6Smrg func_len " $obj" 10991e96acad6Smrg func_arith $len + $func_len_result 10992e96acad6Smrg len=$func_arith_result 10993e96acad6Smrg func_append objlist " $obj" 10994e96acad6Smrg if test "$len" -lt "$max_cmd_len"; then 10995e96acad6Smrg : 10996e96acad6Smrg else 10997e96acad6Smrg # the above command should be used before it gets too long 10998e96acad6Smrg oldobjs=$objlist 10999cfa76ccdSmrg if test "$obj" = "$last_oldobj"; then 11000e96acad6Smrg RANLIB=$save_RANLIB 11001e96acad6Smrg fi 11002e96acad6Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 11003cfa76ccdSmrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 11004e96acad6Smrg objlist= 11005e96acad6Smrg len=$len0 11006e96acad6Smrg fi 11007e96acad6Smrg done 11008e96acad6Smrg RANLIB=$save_RANLIB 11009e96acad6Smrg oldobjs=$objlist 11010cfa76ccdSmrg if test -z "$oldobjs"; then 11011e96acad6Smrg eval cmds=\"\$concat_cmds\" 11012e96acad6Smrg else 11013e96acad6Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 11014e96acad6Smrg fi 11015e96acad6Smrg fi 11016e96acad6Smrg fi 11017e96acad6Smrg func_execute_cmds "$cmds" 'exit $?' 11018dbbd9e4bSmacallan done 11019dbbd9e4bSmacallan 11020e96acad6Smrg test -n "$generated" && \ 11021e96acad6Smrg func_show_eval "${RM}r$generated" 11022dbbd9e4bSmacallan 11023e96acad6Smrg # Now create the libtool archive. 11024e96acad6Smrg case $output in 11025e96acad6Smrg *.la) 11026e96acad6Smrg old_library= 11027cfa76ccdSmrg test yes = "$build_old_libs" && old_library=$libname.$libext 11028e96acad6Smrg func_verbose "creating $output" 11029dbbd9e4bSmacallan 11030e96acad6Smrg # Preserve any variables that may affect compiler behavior 11031e96acad6Smrg for var in $variables_saved_for_relink; do 11032e96acad6Smrg if eval test -z \"\${$var+set}\"; then 11033e96acad6Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 11034e96acad6Smrg elif eval var_value=\$$var; test -z "$var_value"; then 11035e96acad6Smrg relink_command="$var=; export $var; $relink_command" 11036dbbd9e4bSmacallan else 11037cfa76ccdSmrg func_quote_arg pretty,unquoted "$var_value" 11038cfa76ccdSmrg relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" 11039dbbd9e4bSmacallan fi 11040e96acad6Smrg done 11041e96acad6Smrg # Quote the link command for shipping. 11042cfa76ccdSmrg func_quote eval cd "`pwd`" 11043cfa76ccdSmrg relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 11044cfa76ccdSmrg func_quote_arg pretty,unquoted "$relink_command" 11045cfa76ccdSmrg relink_command=$func_quote_arg_unquoted_result 11046cfa76ccdSmrg if test yes = "$hardcode_automatic"; then 11047e96acad6Smrg relink_command= 11048e96acad6Smrg fi 11049dbbd9e4bSmacallan 11050e96acad6Smrg # Only create the output if not a dry run. 11051e96acad6Smrg $opt_dry_run || { 11052e96acad6Smrg for installed in no yes; do 11053cfa76ccdSmrg if test yes = "$installed"; then 11054e96acad6Smrg if test -z "$install_libdir"; then 11055e96acad6Smrg break 11056e96acad6Smrg fi 11057cfa76ccdSmrg output=$output_objdir/${outputname}i 11058e96acad6Smrg # Replace all uninstalled libtool libraries with the installed ones 11059e96acad6Smrg newdependency_libs= 11060e96acad6Smrg for deplib in $dependency_libs; do 11061e96acad6Smrg case $deplib in 11062e96acad6Smrg *.la) 11063e96acad6Smrg func_basename "$deplib" 11064cfa76ccdSmrg name=$func_basename_result 11065cfa76ccdSmrg func_resolve_sysroot "$deplib" 11066cfa76ccdSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 11067e96acad6Smrg test -z "$libdir" && \ 11068cfa76ccdSmrg func_fatal_error "'$deplib' is not a valid libtool archive" 11069e96acad6Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 11070e96acad6Smrg ;; 11071e96acad6Smrg -L*) 11072e96acad6Smrg func_stripname -L '' "$deplib" 11073e96acad6Smrg func_replace_sysroot "$func_stripname_result" 11074e96acad6Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 11075e96acad6Smrg ;; 11076e96acad6Smrg -R*) 11077e96acad6Smrg func_stripname -R '' "$deplib" 11078e96acad6Smrg func_replace_sysroot "$func_stripname_result" 11079e96acad6Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 11080e96acad6Smrg ;; 11081e96acad6Smrg *) func_append newdependency_libs " $deplib" ;; 11082e96acad6Smrg esac 11083e96acad6Smrg done 11084cfa76ccdSmrg dependency_libs=$newdependency_libs 11085e96acad6Smrg newdlfiles= 11086e96acad6Smrg 11087e96acad6Smrg for lib in $dlfiles; do 11088e96acad6Smrg case $lib in 11089e96acad6Smrg *.la) 11090e96acad6Smrg func_basename "$lib" 11091cfa76ccdSmrg name=$func_basename_result 11092cfa76ccdSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11093e96acad6Smrg test -z "$libdir" && \ 11094cfa76ccdSmrg func_fatal_error "'$lib' is not a valid libtool archive" 11095e96acad6Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 11096e96acad6Smrg ;; 11097e96acad6Smrg *) func_append newdlfiles " $lib" ;; 11098e96acad6Smrg esac 11099e96acad6Smrg done 11100cfa76ccdSmrg dlfiles=$newdlfiles 11101e96acad6Smrg newdlprefiles= 11102e96acad6Smrg for lib in $dlprefiles; do 11103e96acad6Smrg case $lib in 11104e96acad6Smrg *.la) 11105e96acad6Smrg # Only pass preopened files to the pseudo-archive (for 11106e96acad6Smrg # eventual linking with the app. that links it) if we 11107e96acad6Smrg # didn't already link the preopened objects directly into 11108e96acad6Smrg # the library: 11109e96acad6Smrg func_basename "$lib" 11110cfa76ccdSmrg name=$func_basename_result 11111cfa76ccdSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 11112e96acad6Smrg test -z "$libdir" && \ 11113cfa76ccdSmrg func_fatal_error "'$lib' is not a valid libtool archive" 11114e96acad6Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 11115e96acad6Smrg ;; 11116e96acad6Smrg esac 11117e96acad6Smrg done 11118cfa76ccdSmrg dlprefiles=$newdlprefiles 11119e96acad6Smrg else 11120e96acad6Smrg newdlfiles= 11121e96acad6Smrg for lib in $dlfiles; do 11122e96acad6Smrg case $lib in 11123cfa76ccdSmrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11124e96acad6Smrg *) abs=`pwd`"/$lib" ;; 11125e96acad6Smrg esac 11126e96acad6Smrg func_append newdlfiles " $abs" 11127e96acad6Smrg done 11128cfa76ccdSmrg dlfiles=$newdlfiles 11129e96acad6Smrg newdlprefiles= 11130e96acad6Smrg for lib in $dlprefiles; do 11131e96acad6Smrg case $lib in 11132cfa76ccdSmrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 11133e96acad6Smrg *) abs=`pwd`"/$lib" ;; 11134e96acad6Smrg esac 11135e96acad6Smrg func_append newdlprefiles " $abs" 11136e96acad6Smrg done 11137cfa76ccdSmrg dlprefiles=$newdlprefiles 11138e96acad6Smrg fi 11139e96acad6Smrg $RM $output 11140e96acad6Smrg # place dlname in correct position for cygwin 11141e96acad6Smrg # In fact, it would be nice if we could use this code for all target 11142e96acad6Smrg # systems that can't hard-code library paths into their executables 11143e96acad6Smrg # and that have no shared library path variable independent of PATH, 11144e96acad6Smrg # but it turns out we can't easily determine that from inspecting 11145e96acad6Smrg # libtool variables, so we have to hard-code the OSs to which it 11146e96acad6Smrg # applies here; at the moment, that means platforms that use the PE 11147e96acad6Smrg # object format with DLL files. See the long comment at the top of 11148e96acad6Smrg # tests/bindir.at for full details. 11149e96acad6Smrg tdlname=$dlname 11150e96acad6Smrg case $host,$output,$installed,$module,$dlname in 11151e96acad6Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 11152e96acad6Smrg # If a -bindir argument was supplied, place the dll there. 11153cfa76ccdSmrg if test -n "$bindir"; then 11154e96acad6Smrg func_relative_path "$install_libdir" "$bindir" 11155cfa76ccdSmrg tdlname=$func_relative_path_result/$dlname 11156e96acad6Smrg else 11157e96acad6Smrg # Otherwise fall back on heuristic. 11158e96acad6Smrg tdlname=../bin/$dlname 11159e96acad6Smrg fi 11160e96acad6Smrg ;; 11161e96acad6Smrg esac 11162e96acad6Smrg $ECHO > $output "\ 11163e96acad6Smrg# $outputname - a libtool library file 11164cfa76ccdSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 11165e96acad6Smrg# 11166e96acad6Smrg# Please DO NOT delete this file! 11167e96acad6Smrg# It is necessary for linking the library. 11168dbbd9e4bSmacallan 11169e96acad6Smrg# The name that we can dlopen(3). 11170e96acad6Smrgdlname='$tdlname' 11171dbbd9e4bSmacallan 11172e96acad6Smrg# Names of this library. 11173e96acad6Smrglibrary_names='$library_names' 11174dbbd9e4bSmacallan 11175e96acad6Smrg# The name of the static archive. 11176e96acad6Smrgold_library='$old_library' 11177dbbd9e4bSmacallan 11178cfa76ccdSmrg# Linker flags that cannot go in dependency_libs. 11179e96acad6Smrginherited_linker_flags='$new_inherited_linker_flags' 11180dbbd9e4bSmacallan 11181e96acad6Smrg# Libraries that this one depends upon. 11182e96acad6Smrgdependency_libs='$dependency_libs' 11183dbbd9e4bSmacallan 11184e96acad6Smrg# Names of additional weak libraries provided by this library 11185e96acad6Smrgweak_library_names='$weak_libs' 11186dbbd9e4bSmacallan 11187e96acad6Smrg# Version information for $libname. 11188e96acad6Smrgcurrent=$current 11189e96acad6Smrgage=$age 11190e96acad6Smrgrevision=$revision 11191dbbd9e4bSmacallan 11192e96acad6Smrg# Is this an already installed library? 11193e96acad6Smrginstalled=$installed 11194dbbd9e4bSmacallan 11195e96acad6Smrg# Should we warn about portability when linking against -modules? 11196e96acad6Smrgshouldnotlink=$module 11197dbbd9e4bSmacallan 11198e96acad6Smrg# Files to dlopen/dlpreopen 11199e96acad6Smrgdlopen='$dlfiles' 11200e96acad6Smrgdlpreopen='$dlprefiles' 11201dbbd9e4bSmacallan 11202e96acad6Smrg# Directory that this library needs to be installed in: 11203e96acad6Smrglibdir='$install_libdir'" 11204cfa76ccdSmrg if test no,yes = "$installed,$need_relink"; then 11205e96acad6Smrg $ECHO >> $output "\ 11206e96acad6Smrgrelink_command=\"$relink_command\"" 11207e96acad6Smrg fi 11208e96acad6Smrg done 11209e96acad6Smrg } 11210dbbd9e4bSmacallan 11211e96acad6Smrg # Do a symbolic link so that the libtool archive can be found in 11212e96acad6Smrg # LD_LIBRARY_PATH before the program is installed. 11213e96acad6Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 11214e96acad6Smrg ;; 11215e96acad6Smrg esac 11216e96acad6Smrg exit $EXIT_SUCCESS 11217e96acad6Smrg} 11218dbbd9e4bSmacallan 11219cfa76ccdSmrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 11220cfa76ccdSmrg func_mode_link ${1+"$@"} 11221cfa76ccdSmrgfi 11222dbbd9e4bSmacallan 11223dbbd9e4bSmacallan 11224e96acad6Smrg# func_mode_uninstall arg... 11225e96acad6Smrgfunc_mode_uninstall () 11226e96acad6Smrg{ 11227cfa76ccdSmrg $debug_cmd 11228cfa76ccdSmrg 11229cfa76ccdSmrg RM=$nonopt 11230dbbd9e4bSmacallan files= 11231cfa76ccdSmrg rmforce=false 11232dbbd9e4bSmacallan exit_status=0 11233dbbd9e4bSmacallan 11234dbbd9e4bSmacallan # This variable tells wrapper scripts just to set variables rather 11235dbbd9e4bSmacallan # than running their programs. 11236cfa76ccdSmrg libtool_install_magic=$magic 11237dbbd9e4bSmacallan 11238dbbd9e4bSmacallan for arg 11239dbbd9e4bSmacallan do 11240dbbd9e4bSmacallan case $arg in 11241cfa76ccdSmrg -f) func_append RM " $arg"; rmforce=: ;; 11242e96acad6Smrg -*) func_append RM " $arg" ;; 11243e96acad6Smrg *) func_append files " $arg" ;; 11244dbbd9e4bSmacallan esac 11245dbbd9e4bSmacallan done 11246dbbd9e4bSmacallan 11247e96acad6Smrg test -z "$RM" && \ 11248e96acad6Smrg func_fatal_help "you must specify an RM program" 11249dbbd9e4bSmacallan 11250dbbd9e4bSmacallan rmdirs= 11251dbbd9e4bSmacallan 11252dbbd9e4bSmacallan for file in $files; do 11253e96acad6Smrg func_dirname "$file" "" "." 11254cfa76ccdSmrg dir=$func_dirname_result 11255cfa76ccdSmrg if test . = "$dir"; then 11256cfa76ccdSmrg odir=$objdir 11257dbbd9e4bSmacallan else 11258cfa76ccdSmrg odir=$dir/$objdir 11259dbbd9e4bSmacallan fi 11260e96acad6Smrg func_basename "$file" 11261cfa76ccdSmrg name=$func_basename_result 11262cfa76ccdSmrg test uninstall = "$opt_mode" && odir=$dir 11263dbbd9e4bSmacallan 11264e96acad6Smrg # Remember odir for removal later, being careful to avoid duplicates 11265cfa76ccdSmrg if test clean = "$opt_mode"; then 11266dbbd9e4bSmacallan case " $rmdirs " in 11267e96acad6Smrg *" $odir "*) ;; 11268e96acad6Smrg *) func_append rmdirs " $odir" ;; 11269dbbd9e4bSmacallan esac 11270dbbd9e4bSmacallan fi 11271dbbd9e4bSmacallan 11272dbbd9e4bSmacallan # Don't error if the file doesn't exist and rm -f was used. 11273e96acad6Smrg if { test -L "$file"; } >/dev/null 2>&1 || 11274e96acad6Smrg { test -h "$file"; } >/dev/null 2>&1 || 11275e96acad6Smrg test -f "$file"; then 11276dbbd9e4bSmacallan : 11277dbbd9e4bSmacallan elif test -d "$file"; then 11278dbbd9e4bSmacallan exit_status=1 11279dbbd9e4bSmacallan continue 11280cfa76ccdSmrg elif $rmforce; then 11281dbbd9e4bSmacallan continue 11282dbbd9e4bSmacallan fi 11283dbbd9e4bSmacallan 11284cfa76ccdSmrg rmfiles=$file 11285dbbd9e4bSmacallan 11286dbbd9e4bSmacallan case $name in 11287dbbd9e4bSmacallan *.la) 11288dbbd9e4bSmacallan # Possibly a libtool archive, so verify it. 11289e96acad6Smrg if func_lalib_p "$file"; then 11290e96acad6Smrg func_source $dir/$name 11291dbbd9e4bSmacallan 11292dbbd9e4bSmacallan # Delete the libtool libraries and symlinks. 11293dbbd9e4bSmacallan for n in $library_names; do 11294e96acad6Smrg func_append rmfiles " $odir/$n" 11295dbbd9e4bSmacallan done 11296e96acad6Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11297dbbd9e4bSmacallan 11298cfa76ccdSmrg case $opt_mode in 11299dbbd9e4bSmacallan clean) 11300e96acad6Smrg case " $library_names " in 11301dbbd9e4bSmacallan *" $dlname "*) ;; 11302e96acad6Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11303dbbd9e4bSmacallan esac 11304e96acad6Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11305dbbd9e4bSmacallan ;; 11306dbbd9e4bSmacallan uninstall) 11307dbbd9e4bSmacallan if test -n "$library_names"; then 11308dbbd9e4bSmacallan # Do each command in the postuninstall commands. 11309cfa76ccdSmrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11310dbbd9e4bSmacallan fi 11311dbbd9e4bSmacallan 11312dbbd9e4bSmacallan if test -n "$old_library"; then 11313dbbd9e4bSmacallan # Do each command in the old_postuninstall commands. 11314cfa76ccdSmrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11315dbbd9e4bSmacallan fi 11316dbbd9e4bSmacallan # FIXME: should reinstall the best remaining shared library. 11317dbbd9e4bSmacallan ;; 11318dbbd9e4bSmacallan esac 11319dbbd9e4bSmacallan fi 11320dbbd9e4bSmacallan ;; 11321dbbd9e4bSmacallan 11322dbbd9e4bSmacallan *.lo) 11323dbbd9e4bSmacallan # Possibly a libtool object, so verify it. 11324e96acad6Smrg if func_lalib_p "$file"; then 11325dbbd9e4bSmacallan 11326dbbd9e4bSmacallan # Read the .lo file 11327e96acad6Smrg func_source $dir/$name 11328dbbd9e4bSmacallan 11329dbbd9e4bSmacallan # Add PIC object to the list of files to remove. 11330cfa76ccdSmrg if test -n "$pic_object" && test none != "$pic_object"; then 11331e96acad6Smrg func_append rmfiles " $dir/$pic_object" 11332dbbd9e4bSmacallan fi 11333dbbd9e4bSmacallan 11334dbbd9e4bSmacallan # Add non-PIC object to the list of files to remove. 11335cfa76ccdSmrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11336e96acad6Smrg func_append rmfiles " $dir/$non_pic_object" 11337dbbd9e4bSmacallan fi 11338dbbd9e4bSmacallan fi 11339dbbd9e4bSmacallan ;; 11340dbbd9e4bSmacallan 11341dbbd9e4bSmacallan *) 11342cfa76ccdSmrg if test clean = "$opt_mode"; then 11343dbbd9e4bSmacallan noexename=$name 11344dbbd9e4bSmacallan case $file in 11345dbbd9e4bSmacallan *.exe) 11346e96acad6Smrg func_stripname '' '.exe' "$file" 11347e96acad6Smrg file=$func_stripname_result 11348e96acad6Smrg func_stripname '' '.exe' "$name" 11349e96acad6Smrg noexename=$func_stripname_result 11350dbbd9e4bSmacallan # $file with .exe has already been added to rmfiles, 11351dbbd9e4bSmacallan # add $file without .exe 11352e96acad6Smrg func_append rmfiles " $file" 11353dbbd9e4bSmacallan ;; 11354dbbd9e4bSmacallan esac 11355dbbd9e4bSmacallan # Do a test to see if this is a libtool program. 11356e96acad6Smrg if func_ltwrapper_p "$file"; then 11357e96acad6Smrg if func_ltwrapper_executable_p "$file"; then 11358e96acad6Smrg func_ltwrapper_scriptname "$file" 11359e96acad6Smrg relink_command= 11360e96acad6Smrg func_source $func_ltwrapper_scriptname_result 11361e96acad6Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11362e96acad6Smrg else 11363e96acad6Smrg relink_command= 11364e96acad6Smrg func_source $dir/$noexename 11365e96acad6Smrg fi 11366dbbd9e4bSmacallan 11367dbbd9e4bSmacallan # note $name still contains .exe if it was in $file originally 11368dbbd9e4bSmacallan # as does the version of $file that was added into $rmfiles 11369cfa76ccdSmrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11370cfa76ccdSmrg if test yes = "$fast_install" && test -n "$relink_command"; then 11371e96acad6Smrg func_append rmfiles " $odir/lt-$name" 11372dbbd9e4bSmacallan fi 11373cfa76ccdSmrg if test "X$noexename" != "X$name"; then 11374cfa76ccdSmrg func_append rmfiles " $odir/lt-$noexename.c" 11375dbbd9e4bSmacallan fi 11376dbbd9e4bSmacallan fi 11377dbbd9e4bSmacallan fi 11378dbbd9e4bSmacallan ;; 11379dbbd9e4bSmacallan esac 11380e96acad6Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 11381dbbd9e4bSmacallan done 11382dbbd9e4bSmacallan 11383cfa76ccdSmrg # Try to remove the $objdir's in the directories where we deleted files 11384dbbd9e4bSmacallan for dir in $rmdirs; do 11385dbbd9e4bSmacallan if test -d "$dir"; then 11386e96acad6Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 11387dbbd9e4bSmacallan fi 11388dbbd9e4bSmacallan done 11389dbbd9e4bSmacallan 11390dbbd9e4bSmacallan exit $exit_status 11391e96acad6Smrg} 11392dbbd9e4bSmacallan 11393cfa76ccdSmrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11394cfa76ccdSmrg func_mode_uninstall ${1+"$@"} 11395cfa76ccdSmrgfi 11396dbbd9e4bSmacallan 11397e96acad6Smrgtest -z "$opt_mode" && { 11398cfa76ccdSmrg help=$generic_help 11399e96acad6Smrg func_fatal_help "you must specify a MODE" 11400e96acad6Smrg} 11401e96acad6Smrg 11402e96acad6Smrgtest -z "$exec_cmd" && \ 11403cfa76ccdSmrg func_fatal_help "invalid operation mode '$opt_mode'" 11404dbbd9e4bSmacallan 11405dbbd9e4bSmacallanif test -n "$exec_cmd"; then 11406e96acad6Smrg eval exec "$exec_cmd" 11407dbbd9e4bSmacallan exit $EXIT_FAILURE 11408dbbd9e4bSmacallanfi 11409dbbd9e4bSmacallan 11410e96acad6Smrgexit $exit_status 11411dbbd9e4bSmacallan 11412dbbd9e4bSmacallan 11413dbbd9e4bSmacallan# The TAGs below are defined such that we never get into a situation 11414cfa76ccdSmrg# where we disable both kinds of libraries. Given conflicting 11415dbbd9e4bSmacallan# choices, we go for a static library, that is the most portable, 11416dbbd9e4bSmacallan# since we can't tell whether shared libraries were disabled because 11417dbbd9e4bSmacallan# the user asked for that or because the platform doesn't support 11418dbbd9e4bSmacallan# them. This is particularly important on AIX, because we don't 11419dbbd9e4bSmacallan# support having both static and shared libraries enabled at the same 11420dbbd9e4bSmacallan# time on that platform, so we default to a shared-only configuration. 11421dbbd9e4bSmacallan# If a disable-shared tag is given, we'll fallback to a static-only 11422dbbd9e4bSmacallan# configuration. But we'll never go from static-only to shared-only. 11423dbbd9e4bSmacallan 11424dbbd9e4bSmacallan# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11425e96acad6Smrgbuild_libtool_libs=no 11426e96acad6Smrgbuild_old_libs=yes 11427dbbd9e4bSmacallan# ### END LIBTOOL TAG CONFIG: disable-shared 11428dbbd9e4bSmacallan 11429dbbd9e4bSmacallan# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11430e96acad6Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11431dbbd9e4bSmacallan# ### END LIBTOOL TAG CONFIG: disable-static 11432dbbd9e4bSmacallan 11433dbbd9e4bSmacallan# Local Variables: 11434dbbd9e4bSmacallan# mode:shell-script 11435dbbd9e4bSmacallan# sh-indentation:2 11436dbbd9e4bSmacallan# End: 11437