ltmain.sh revision 6ad5a0e2
1e6d2e958Smrg#! /bin/sh 2e6d2e958Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3e6d2e958Smrg## by inline-source v2014-01-03.01 447e89262Smrg 5e6d2e958Smrg# libtool (GNU libtool) 2.4.6 6e6d2e958Smrg# Provide generalized library-building support services. 747e89262Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 847e89262Smrg 9e6d2e958Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc. 1047e89262Smrg# This is free software; see the source for copying conditions. There is NO 1147e89262Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1247e89262Smrg 1347e89262Smrg# GNU Libtool is free software; you can redistribute it and/or modify 14bd1da9d7Smrg# it under the terms of the GNU General Public License as published by 15bd1da9d7Smrg# the Free Software Foundation; either version 2 of the License, or 16bd1da9d7Smrg# (at your option) any later version. 17bd1da9d7Smrg# 1847e89262Smrg# As a special exception to the GNU General Public License, 1947e89262Smrg# if you distribute this file as part of a program or library that 2047e89262Smrg# is built using GNU Libtool, you may include this file under the 2147e89262Smrg# same distribution terms that you use for the rest of that program. 2247e89262Smrg# 2347e89262Smrg# GNU Libtool is distributed in the hope that it will be useful, but 24bd1da9d7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 25bd1da9d7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26bd1da9d7Smrg# General Public License for more details. 27bd1da9d7Smrg# 28bd1da9d7Smrg# You should have received a copy of the GNU General Public License 29e6d2e958Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 30bd1da9d7Smrg 31bd1da9d7Smrg 3247e89262SmrgPROGRAM=libtool 33bd1da9d7SmrgPACKAGE=libtool 346ad5a0e2SmrgVERSION="2.4.6 Debian-2.4.6-15" 35e6d2e958Smrgpackage_revision=2.4.6 365bcb6992Smrg 37e6d2e958Smrg 38e6d2e958Smrg## ------ ## 39e6d2e958Smrg## Usage. ## 40e6d2e958Smrg## ------ ## 41e6d2e958Smrg 42e6d2e958Smrg# Run './libtool --help' for help with using this script from the 43e6d2e958Smrg# command line. 44e6d2e958Smrg 45e6d2e958Smrg 46e6d2e958Smrg## ------------------------------- ## 47e6d2e958Smrg## User overridable command paths. ## 48e6d2e958Smrg## ------------------------------- ## 49e6d2e958Smrg 50e6d2e958Smrg# After configure completes, it has a better idea of some of the 51e6d2e958Smrg# shell tools we need than the defaults used by the functions shared 52e6d2e958Smrg# with bootstrap, so set those here where they can still be over- 53e6d2e958Smrg# ridden by the user, but otherwise take precedence. 54e6d2e958Smrg 55e6d2e958Smrg: ${AUTOCONF="autoconf"} 56e6d2e958Smrg: ${AUTOMAKE="automake"} 57e6d2e958Smrg 58e6d2e958Smrg 59e6d2e958Smrg## -------------------------- ## 60e6d2e958Smrg## Source external libraries. ## 61e6d2e958Smrg## -------------------------- ## 62e6d2e958Smrg 63e6d2e958Smrg# Much of our low-level functionality needs to be sourced from external 64e6d2e958Smrg# libraries, which are installed to $pkgauxdir. 65e6d2e958Smrg 66e6d2e958Smrg# Set a version string for this script. 67e6d2e958Smrgscriptversion=2015-01-20.17; # UTC 68e6d2e958Smrg 69e6d2e958Smrg# General shell script boiler plate, and helper functions. 70e6d2e958Smrg# Written by Gary V. Vaughan, 2004 71e6d2e958Smrg 72e6d2e958Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc. 73e6d2e958Smrg# This is free software; see the source for copying conditions. There is NO 74e6d2e958Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 75e6d2e958Smrg 76e6d2e958Smrg# This program is free software; you can redistribute it and/or modify 77e6d2e958Smrg# it under the terms of the GNU General Public License as published by 78e6d2e958Smrg# the Free Software Foundation; either version 3 of the License, or 79e6d2e958Smrg# (at your option) any later version. 80e6d2e958Smrg 81e6d2e958Smrg# As a special exception to the GNU General Public License, if you distribute 82e6d2e958Smrg# this file as part of a program or library that is built using GNU Libtool, 83e6d2e958Smrg# you may include this file under the same distribution terms that you use 84e6d2e958Smrg# for the rest of that program. 85e6d2e958Smrg 86e6d2e958Smrg# This program is distributed in the hope that it will be useful, 87e6d2e958Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 88e6d2e958Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 89e6d2e958Smrg# General Public License for more details. 90e6d2e958Smrg 91e6d2e958Smrg# You should have received a copy of the GNU General Public License 92e6d2e958Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 93e6d2e958Smrg 94e6d2e958Smrg# Please report bugs or propose patches to gary@gnu.org. 95e6d2e958Smrg 96e6d2e958Smrg 97e6d2e958Smrg## ------ ## 98e6d2e958Smrg## Usage. ## 99e6d2e958Smrg## ------ ## 100e6d2e958Smrg 101e6d2e958Smrg# Evaluate this file near the top of your script to gain access to 102e6d2e958Smrg# the functions and variables defined here: 103e6d2e958Smrg# 104e6d2e958Smrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 105e6d2e958Smrg# 106e6d2e958Smrg# If you need to override any of the default environment variable 107e6d2e958Smrg# settings, do that before evaluating this file. 108e6d2e958Smrg 109e6d2e958Smrg 110e6d2e958Smrg## -------------------- ## 111e6d2e958Smrg## Shell normalisation. ## 112e6d2e958Smrg## -------------------- ## 113e6d2e958Smrg 114e6d2e958Smrg# Some shells need a little help to be as Bourne compatible as possible. 115e6d2e958Smrg# Before doing anything else, make sure all that help has been provided! 116e6d2e958Smrg 117e6d2e958SmrgDUALCASE=1; export DUALCASE # for MKS sh 118e6d2e958Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 1195bcb6992Smrg emulate sh 1205bcb6992Smrg NULLCMD=: 121e6d2e958Smrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 1225bcb6992Smrg # is contrary to our usage. Disable this feature. 1235bcb6992Smrg alias -g '${1+"$@"}'='"$@"' 124bd1da9d7Smrg setopt NO_GLOB_SUBST 1255bcb6992Smrgelse 126e6d2e958Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 127bd1da9d7Smrgfi 128bd1da9d7Smrg 129e6d2e958Smrg# NLS nuisances: We save the old values in case they are required later. 130e6d2e958Smrg_G_user_locale= 131e6d2e958Smrg_G_safe_locale= 132e6d2e958Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1335bcb6992Smrgdo 134e6d2e958Smrg eval "if test set = \"\${$_G_var+set}\"; then 135e6d2e958Smrg save_$_G_var=\$$_G_var 136e6d2e958Smrg $_G_var=C 137e6d2e958Smrg export $_G_var 138e6d2e958Smrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 139e6d2e958Smrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 1405bcb6992Smrg fi" 1415bcb6992Smrgdone 1425bcb6992Smrg 143e6d2e958Smrg# CDPATH. 144e6d2e958Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 14547e89262Smrg 146e6d2e958Smrg# Make sure IFS has a sensible default 147e6d2e958Smrgsp=' ' 148e6d2e958Smrgnl=' 149e6d2e958Smrg' 150e6d2e958SmrgIFS="$sp $nl" 151e6d2e958Smrg 152e6d2e958Smrg# There are apparently some retarded systems that use ';' as a PATH separator! 153e6d2e958Smrgif test "${PATH_SEPARATOR+set}" != set; then 154e6d2e958Smrg PATH_SEPARATOR=: 155e6d2e958Smrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 156e6d2e958Smrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 157e6d2e958Smrg PATH_SEPARATOR=';' 158e6d2e958Smrg } 159e6d2e958Smrgfi 16047e89262Smrg 16147e89262Smrg 16247e89262Smrg 163e6d2e958Smrg## ------------------------- ## 164e6d2e958Smrg## Locate command utilities. ## 165e6d2e958Smrg## ------------------------- ## 166e6d2e958Smrg 167e6d2e958Smrg 168e6d2e958Smrg# func_executable_p FILE 169e6d2e958Smrg# ---------------------- 170e6d2e958Smrg# Check that FILE is an executable regular file. 171e6d2e958Smrgfunc_executable_p () 172e6d2e958Smrg{ 173e6d2e958Smrg test -f "$1" && test -x "$1" 174e6d2e958Smrg} 175e6d2e958Smrg 176e6d2e958Smrg 177e6d2e958Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 178e6d2e958Smrg# -------------------------------------------- 179e6d2e958Smrg# Search for either a program that responds to --version with output 180e6d2e958Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 181e6d2e958Smrg# trying all the directories in PATH with each of the elements of 182e6d2e958Smrg# PROGS_LIST. 183e6d2e958Smrg# 184e6d2e958Smrg# CHECK_FUNC should accept the path to a candidate program, and 185e6d2e958Smrg# set $func_check_prog_result if it truncates its output less than 186e6d2e958Smrg# $_G_path_prog_max characters. 187e6d2e958Smrgfunc_path_progs () 188e6d2e958Smrg{ 189e6d2e958Smrg _G_progs_list=$1 190e6d2e958Smrg _G_check_func=$2 191e6d2e958Smrg _G_PATH=${3-"$PATH"} 192e6d2e958Smrg 193e6d2e958Smrg _G_path_prog_max=0 194e6d2e958Smrg _G_path_prog_found=false 195e6d2e958Smrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 196e6d2e958Smrg for _G_dir in $_G_PATH; do 197e6d2e958Smrg IFS=$_G_save_IFS 198e6d2e958Smrg test -z "$_G_dir" && _G_dir=. 199e6d2e958Smrg for _G_prog_name in $_G_progs_list; do 200e6d2e958Smrg for _exeext in '' .EXE; do 201e6d2e958Smrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 202e6d2e958Smrg func_executable_p "$_G_path_prog" || continue 203e6d2e958Smrg case `"$_G_path_prog" --version 2>&1` in 204e6d2e958Smrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 205e6d2e958Smrg *) $_G_check_func $_G_path_prog 206e6d2e958Smrg func_path_progs_result=$func_check_prog_result 207e6d2e958Smrg ;; 208e6d2e958Smrg esac 209e6d2e958Smrg $_G_path_prog_found && break 3 210e6d2e958Smrg done 211e6d2e958Smrg done 212e6d2e958Smrg done 213e6d2e958Smrg IFS=$_G_save_IFS 214e6d2e958Smrg test -z "$func_path_progs_result" && { 215e6d2e958Smrg echo "no acceptable sed could be found in \$PATH" >&2 216e6d2e958Smrg exit 1 217e6d2e958Smrg } 218e6d2e958Smrg} 219e6d2e958Smrg 220e6d2e958Smrg 221e6d2e958Smrg# We want to be able to use the functions in this file before configure 222e6d2e958Smrg# has figured out where the best binaries are kept, which means we have 223e6d2e958Smrg# to search for them ourselves - except when the results are already set 224e6d2e958Smrg# where we skip the searches. 225e6d2e958Smrg 226e6d2e958Smrg# Unless the user overrides by setting SED, search the path for either GNU 227e6d2e958Smrg# sed, or the sed that truncates its output the least. 228e6d2e958Smrgtest -z "$SED" && { 229e6d2e958Smrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 230e6d2e958Smrg for _G_i in 1 2 3 4 5 6 7; do 231e6d2e958Smrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 232e6d2e958Smrg done 233e6d2e958Smrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 234e6d2e958Smrg _G_sed_script= 235e6d2e958Smrg 236e6d2e958Smrg func_check_prog_sed () 237e6d2e958Smrg { 238e6d2e958Smrg _G_path_prog=$1 239e6d2e958Smrg 240e6d2e958Smrg _G_count=0 241e6d2e958Smrg printf 0123456789 >conftest.in 242e6d2e958Smrg while : 243e6d2e958Smrg do 244e6d2e958Smrg cat conftest.in conftest.in >conftest.tmp 245e6d2e958Smrg mv conftest.tmp conftest.in 246e6d2e958Smrg cp conftest.in conftest.nl 247e6d2e958Smrg echo '' >> conftest.nl 248e6d2e958Smrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 249e6d2e958Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 250e6d2e958Smrg _G_count=`expr $_G_count + 1` 251e6d2e958Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 252e6d2e958Smrg # Best one so far, save it but keep looking for a better one 253e6d2e958Smrg func_check_prog_result=$_G_path_prog 254e6d2e958Smrg _G_path_prog_max=$_G_count 255e6d2e958Smrg fi 256e6d2e958Smrg # 10*(2^10) chars as input seems more than enough 257e6d2e958Smrg test 10 -lt "$_G_count" && break 258e6d2e958Smrg done 259e6d2e958Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 260e6d2e958Smrg } 261e6d2e958Smrg 262e6d2e958Smrg func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 263e6d2e958Smrg rm -f conftest.sed 264e6d2e958Smrg SED=$func_path_progs_result 265e6d2e958Smrg} 266e6d2e958Smrg 267e6d2e958Smrg 268e6d2e958Smrg# Unless the user overrides by setting GREP, search the path for either GNU 269e6d2e958Smrg# grep, or the grep that truncates its output the least. 270e6d2e958Smrgtest -z "$GREP" && { 271e6d2e958Smrg func_check_prog_grep () 272e6d2e958Smrg { 273e6d2e958Smrg _G_path_prog=$1 274e6d2e958Smrg 275e6d2e958Smrg _G_count=0 276e6d2e958Smrg _G_path_prog_max=0 277e6d2e958Smrg printf 0123456789 >conftest.in 278e6d2e958Smrg while : 279e6d2e958Smrg do 280e6d2e958Smrg cat conftest.in conftest.in >conftest.tmp 281e6d2e958Smrg mv conftest.tmp conftest.in 282e6d2e958Smrg cp conftest.in conftest.nl 283e6d2e958Smrg echo 'GREP' >> conftest.nl 284e6d2e958Smrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 285e6d2e958Smrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 286e6d2e958Smrg _G_count=`expr $_G_count + 1` 287e6d2e958Smrg if test "$_G_count" -gt "$_G_path_prog_max"; then 288e6d2e958Smrg # Best one so far, save it but keep looking for a better one 289e6d2e958Smrg func_check_prog_result=$_G_path_prog 290e6d2e958Smrg _G_path_prog_max=$_G_count 291e6d2e958Smrg fi 292e6d2e958Smrg # 10*(2^10) chars as input seems more than enough 293e6d2e958Smrg test 10 -lt "$_G_count" && break 294e6d2e958Smrg done 295e6d2e958Smrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 296e6d2e958Smrg } 297e6d2e958Smrg 298e6d2e958Smrg func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 299e6d2e958Smrg GREP=$func_path_progs_result 300e6d2e958Smrg} 301e6d2e958Smrg 302e6d2e958Smrg 303e6d2e958Smrg## ------------------------------- ## 304e6d2e958Smrg## User overridable command paths. ## 305e6d2e958Smrg## ------------------------------- ## 306e6d2e958Smrg 307e6d2e958Smrg# All uppercase variable names are used for environment variables. These 308e6d2e958Smrg# variables can be overridden by the user before calling a script that 309e6d2e958Smrg# uses them if a suitable command of that name is not already available 310e6d2e958Smrg# in the command search PATH. 31147e89262Smrg 31247e89262Smrg: ${CP="cp -f"} 313e6d2e958Smrg: ${ECHO="printf %s\n"} 314e6d2e958Smrg: ${EGREP="$GREP -E"} 315e6d2e958Smrg: ${FGREP="$GREP -F"} 316e6d2e958Smrg: ${LN_S="ln -s"} 31747e89262Smrg: ${MAKE="make"} 31847e89262Smrg: ${MKDIR="mkdir"} 31947e89262Smrg: ${MV="mv -f"} 32047e89262Smrg: ${RM="rm -f"} 32147e89262Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 322bd1da9d7Smrg 32347e89262Smrg 324e6d2e958Smrg## -------------------- ## 325e6d2e958Smrg## Useful sed snippets. ## 326e6d2e958Smrg## -------------------- ## 327899129b3Smrg 328e6d2e958Smrgsed_dirname='s|/[^/]*$||' 329e6d2e958Smrgsed_basename='s|^.*/||' 330899129b3Smrg 331e6d2e958Smrg# Sed substitution that helps us do robust quoting. It backslashifies 332e6d2e958Smrg# metacharacters that are still active within double-quoted strings. 333e6d2e958Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 334899129b3Smrg 335e6d2e958Smrg# Same as above, but do not quote variable references. 336e6d2e958Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 337899129b3Smrg 338e6d2e958Smrg# Sed substitution that turns a string into a regex matching for the 339e6d2e958Smrg# string literally. 340e6d2e958Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 341899129b3Smrg 342e6d2e958Smrg# Sed substitution that converts a w32 file name or path 343e6d2e958Smrg# that contains forward slashes, into one that contains 344e6d2e958Smrg# (escaped) backslashes. A very naive implementation. 345e6d2e958Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 346e6d2e958Smrg 347e6d2e958Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 348e6d2e958Smrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 349e6d2e958Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from 350e6d2e958Smrg# expansion. Since each input '\' is now two '\'s, look for any number 351e6d2e958Smrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 352e6d2e958Smrg_G_bs='\\' 353e6d2e958Smrg_G_bs2='\\\\' 354e6d2e958Smrg_G_bs4='\\\\\\\\' 355e6d2e958Smrg_G_dollar='\$' 356e6d2e958Smrgsed_double_backslash="\ 357e6d2e958Smrg s/$_G_bs4/&\\ 358e6d2e958Smrg/g 359e6d2e958Smrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 360e6d2e958Smrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 361e6d2e958Smrg s/\n//g" 362899129b3Smrg 363bd1da9d7Smrg 364e6d2e958Smrg## ----------------- ## 365e6d2e958Smrg## Global variables. ## 366e6d2e958Smrg## ----------------- ## 36747e89262Smrg 368e6d2e958Smrg# Except for the global variables explicitly listed below, the following 369e6d2e958Smrg# functions in the '^func_' namespace, and the '^require_' namespace 370e6d2e958Smrg# variables initialised in the 'Resource management' section, sourcing 371e6d2e958Smrg# this file will not pollute your global namespace with anything 372e6d2e958Smrg# else. There's no portable way to scope variables in Bourne shell 373e6d2e958Smrg# though, so actually running these functions will sometimes place 374e6d2e958Smrg# results into a variable named after the function, and often use 375e6d2e958Smrg# temporary variables in the '^_G_' namespace. If you are careful to 376e6d2e958Smrg# avoid using those namespaces casually in your sourcing script, things 377e6d2e958Smrg# should continue to work as you expect. And, of course, you can freely 378e6d2e958Smrg# overwrite any of the functions or variables defined here before 379e6d2e958Smrg# calling anything to customize them. 38047e89262Smrg 381e6d2e958SmrgEXIT_SUCCESS=0 382e6d2e958SmrgEXIT_FAILURE=1 383e6d2e958SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 384e6d2e958SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 38547e89262Smrg 386e6d2e958Smrg# Allow overriding, eg assuming that you follow the convention of 387e6d2e958Smrg# putting '$debug_cmd' at the start of all your functions, you can get 388e6d2e958Smrg# bash to show function call trace with: 389e6d2e958Smrg# 3906ad5a0e2Smrg# debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 391e6d2e958Smrgdebug_cmd=${debug_cmd-":"} 392e6d2e958Smrgexit_cmd=: 39347e89262Smrg 394e6d2e958Smrg# By convention, finish your script with: 395e6d2e958Smrg# 396e6d2e958Smrg# exit $exit_status 397e6d2e958Smrg# 398e6d2e958Smrg# so that you can set exit_status to non-zero if you want to indicate 399e6d2e958Smrg# something went wrong during execution without actually bailing out at 400e6d2e958Smrg# the point of failure. 401e6d2e958Smrgexit_status=$EXIT_SUCCESS 40247e89262Smrg 403e6d2e958Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 404e6d2e958Smrg# is ksh but when the shell is invoked as "sh" and the current value of 405e6d2e958Smrg# the _XPG environment variable is not equal to 1 (one), the special 406e6d2e958Smrg# positional parameter $0, within a function call, is the name of the 407e6d2e958Smrg# function. 408e6d2e958Smrgprogpath=$0 40947e89262Smrg 410e6d2e958Smrg# The name of this program. 411e6d2e958Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 41247e89262Smrg 413e6d2e958Smrg# Make sure we have an absolute progpath for reexecution: 41447e89262Smrgcase $progpath in 41547e89262Smrg [\\/]*|[A-Za-z]:\\*) ;; 41647e89262Smrg *[\\/]*) 417e6d2e958Smrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 41847e89262Smrg progdir=`cd "$progdir" && pwd` 419e6d2e958Smrg progpath=$progdir/$progname 42047e89262Smrg ;; 42147e89262Smrg *) 422e6d2e958Smrg _G_IFS=$IFS 423899129b3Smrg IFS=${PATH_SEPARATOR-:} 42447e89262Smrg for progdir in $PATH; do 425e6d2e958Smrg IFS=$_G_IFS 42647e89262Smrg test -x "$progdir/$progname" && break 42747e89262Smrg done 428e6d2e958Smrg IFS=$_G_IFS 42947e89262Smrg test -n "$progdir" || progdir=`pwd` 430e6d2e958Smrg progpath=$progdir/$progname 43147e89262Smrg ;; 43247e89262Smrgesac 43347e89262Smrg 43447e89262Smrg 435e6d2e958Smrg## ----------------- ## 436e6d2e958Smrg## Standard options. ## 437e6d2e958Smrg## ----------------- ## 438899129b3Smrg 439e6d2e958Smrg# The following options affect the operation of the functions defined 440e6d2e958Smrg# below, and should be set appropriately depending on run-time para- 441e6d2e958Smrg# meters passed on the command line. 44247e89262Smrg 44347e89262Smrgopt_dry_run=false 44447e89262Smrgopt_quiet=false 44547e89262Smrgopt_verbose=false 44647e89262Smrg 447e6d2e958Smrg# Categories 'all' and 'none' are always available. Append any others 448e6d2e958Smrg# you will pass as the first argument to func_warning from your own 449e6d2e958Smrg# code. 450e6d2e958Smrgwarning_categories= 45147e89262Smrg 452e6d2e958Smrg# By default, display warnings according to 'opt_warning_types'. Set 453e6d2e958Smrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 454e6d2e958Smrg# treat the next displayed warning as a fatal error. 455e6d2e958Smrgwarning_func=func_warn_and_continue 45647e89262Smrg 457e6d2e958Smrg# Set to 'all' to display all warnings, 'none' to suppress all 458e6d2e958Smrg# warnings, or a space delimited list of some subset of 459e6d2e958Smrg# 'warning_categories' to display only the listed warnings. 460e6d2e958Smrgopt_warning_types=all 46147e89262Smrg 46247e89262Smrg 463e6d2e958Smrg## -------------------- ## 464e6d2e958Smrg## Resource management. ## 465e6d2e958Smrg## -------------------- ## 46647e89262Smrg 467e6d2e958Smrg# This section contains definitions for functions that each ensure a 468e6d2e958Smrg# particular resource (a file, or a non-empty configuration variable for 469e6d2e958Smrg# example) is available, and if appropriate to extract default values 470e6d2e958Smrg# from pertinent package files. Call them using their associated 471e6d2e958Smrg# 'require_*' variable to ensure that they are executed, at most, once. 472e6d2e958Smrg# 473e6d2e958Smrg# It's entirely deliberate that calling these functions can set 474e6d2e958Smrg# variables that don't obey the namespace limitations obeyed by the rest 475e6d2e958Smrg# of this file, in order that that they be as useful as possible to 476e6d2e958Smrg# callers. 47747e89262Smrg 47847e89262Smrg 479e6d2e958Smrg# require_term_colors 480e6d2e958Smrg# ------------------- 481e6d2e958Smrg# Allow display of bold text on terminals that support it. 482e6d2e958Smrgrequire_term_colors=func_require_term_colors 483e6d2e958Smrgfunc_require_term_colors () 48447e89262Smrg{ 485e6d2e958Smrg $debug_cmd 486e6d2e958Smrg 487e6d2e958Smrg test -t 1 && { 488e6d2e958Smrg # COLORTERM and USE_ANSI_COLORS environment variables take 489e6d2e958Smrg # precedence, because most terminfo databases neglect to describe 490e6d2e958Smrg # whether color sequences are supported. 491e6d2e958Smrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 492e6d2e958Smrg 493e6d2e958Smrg if test 1 = "$USE_ANSI_COLORS"; then 494e6d2e958Smrg # Standard ANSI escape sequences 495e6d2e958Smrg tc_reset='[0m' 496e6d2e958Smrg tc_bold='[1m'; tc_standout='[7m' 497e6d2e958Smrg tc_red='[31m'; tc_green='[32m' 498e6d2e958Smrg tc_blue='[34m'; tc_cyan='[36m' 499e6d2e958Smrg else 500e6d2e958Smrg # Otherwise trust the terminfo database after all. 501e6d2e958Smrg test -n "`tput sgr0 2>/dev/null`" && { 502e6d2e958Smrg tc_reset=`tput sgr0` 503e6d2e958Smrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 504e6d2e958Smrg tc_standout=$tc_bold 505e6d2e958Smrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 506e6d2e958Smrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 507e6d2e958Smrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 508e6d2e958Smrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 509e6d2e958Smrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 510e6d2e958Smrg } 511e6d2e958Smrg fi 512e6d2e958Smrg } 51347e89262Smrg 514e6d2e958Smrg require_term_colors=: 51547e89262Smrg} 51647e89262Smrg 51747e89262Smrg 518e6d2e958Smrg## ----------------- ## 519e6d2e958Smrg## Function library. ## 520e6d2e958Smrg## ----------------- ## 521e6d2e958Smrg 522e6d2e958Smrg# This section contains a variety of useful functions to call in your 523e6d2e958Smrg# scripts. Take note of the portable wrappers for features provided by 524e6d2e958Smrg# some modern shells, which will fall back to slower equivalents on 525e6d2e958Smrg# less featureful shells. 526e6d2e958Smrg 527e6d2e958Smrg 528e6d2e958Smrg# func_append VAR VALUE 529e6d2e958Smrg# --------------------- 530e6d2e958Smrg# Append VALUE onto the existing contents of VAR. 531e6d2e958Smrg 532e6d2e958Smrg # We should try to minimise forks, especially on Windows where they are 533e6d2e958Smrg # unreasonably slow, so skip the feature probes when bash or zsh are 534e6d2e958Smrg # being used: 535e6d2e958Smrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 536e6d2e958Smrg : ${_G_HAVE_ARITH_OP="yes"} 537e6d2e958Smrg : ${_G_HAVE_XSI_OPS="yes"} 538e6d2e958Smrg # The += operator was introduced in bash 3.1 539e6d2e958Smrg case $BASH_VERSION in 540e6d2e958Smrg [12].* | 3.0 | 3.0*) ;; 541e6d2e958Smrg *) 542e6d2e958Smrg : ${_G_HAVE_PLUSEQ_OP="yes"} 543e6d2e958Smrg ;; 544e6d2e958Smrg esac 545e6d2e958Smrg fi 546e6d2e958Smrg 547e6d2e958Smrg # _G_HAVE_PLUSEQ_OP 548e6d2e958Smrg # Can be empty, in which case the shell is probed, "yes" if += is 549e6d2e958Smrg # useable or anything else if it does not work. 550e6d2e958Smrg test -z "$_G_HAVE_PLUSEQ_OP" \ 551e6d2e958Smrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 552e6d2e958Smrg && _G_HAVE_PLUSEQ_OP=yes 553e6d2e958Smrg 554e6d2e958Smrgif test yes = "$_G_HAVE_PLUSEQ_OP" 555e6d2e958Smrgthen 556e6d2e958Smrg # This is an XSI compatible shell, allowing a faster implementation... 557e6d2e958Smrg eval 'func_append () 558e6d2e958Smrg { 559e6d2e958Smrg $debug_cmd 560e6d2e958Smrg 561e6d2e958Smrg eval "$1+=\$2" 562e6d2e958Smrg }' 563e6d2e958Smrgelse 564e6d2e958Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 565e6d2e958Smrg func_append () 566e6d2e958Smrg { 567e6d2e958Smrg $debug_cmd 568e6d2e958Smrg 569e6d2e958Smrg eval "$1=\$$1\$2" 570e6d2e958Smrg } 571e6d2e958Smrgfi 572e6d2e958Smrg 573e6d2e958Smrg 574e6d2e958Smrg# func_append_quoted VAR VALUE 575e6d2e958Smrg# ---------------------------- 576e6d2e958Smrg# Quote VALUE and append to the end of shell variable VAR, separated 577e6d2e958Smrg# by a space. 578e6d2e958Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 579e6d2e958Smrg eval 'func_append_quoted () 580e6d2e958Smrg { 581e6d2e958Smrg $debug_cmd 582e6d2e958Smrg 583e6d2e958Smrg func_quote_for_eval "$2" 584e6d2e958Smrg eval "$1+=\\ \$func_quote_for_eval_result" 585e6d2e958Smrg }' 586e6d2e958Smrgelse 587e6d2e958Smrg func_append_quoted () 588e6d2e958Smrg { 589e6d2e958Smrg $debug_cmd 590e6d2e958Smrg 591e6d2e958Smrg func_quote_for_eval "$2" 592e6d2e958Smrg eval "$1=\$$1\\ \$func_quote_for_eval_result" 593e6d2e958Smrg } 594e6d2e958Smrgfi 595e6d2e958Smrg 596e6d2e958Smrg 597e6d2e958Smrg# func_append_uniq VAR VALUE 598e6d2e958Smrg# -------------------------- 599e6d2e958Smrg# Append unique VALUE onto the existing contents of VAR, assuming 600e6d2e958Smrg# entries are delimited by the first character of VALUE. For example: 601e6d2e958Smrg# 602e6d2e958Smrg# func_append_uniq options " --another-option option-argument" 603e6d2e958Smrg# 604e6d2e958Smrg# will only append to $options if " --another-option option-argument " 605e6d2e958Smrg# is not already present somewhere in $options already (note spaces at 606e6d2e958Smrg# each end implied by leading space in second argument). 607e6d2e958Smrgfunc_append_uniq () 608e6d2e958Smrg{ 609e6d2e958Smrg $debug_cmd 610e6d2e958Smrg 611e6d2e958Smrg eval _G_current_value='`$ECHO $'$1'`' 612e6d2e958Smrg _G_delim=`expr "$2" : '\(.\)'` 613e6d2e958Smrg 614e6d2e958Smrg case $_G_delim$_G_current_value$_G_delim in 615e6d2e958Smrg *"$2$_G_delim"*) ;; 616e6d2e958Smrg *) func_append "$@" ;; 617e6d2e958Smrg esac 618e6d2e958Smrg} 619e6d2e958Smrg 620e6d2e958Smrg 621e6d2e958Smrg# func_arith TERM... 622e6d2e958Smrg# ------------------ 623e6d2e958Smrg# Set func_arith_result to the result of evaluating TERMs. 624e6d2e958Smrg test -z "$_G_HAVE_ARITH_OP" \ 625e6d2e958Smrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 626e6d2e958Smrg && _G_HAVE_ARITH_OP=yes 627e6d2e958Smrg 628e6d2e958Smrgif test yes = "$_G_HAVE_ARITH_OP"; then 629e6d2e958Smrg eval 'func_arith () 630e6d2e958Smrg { 631e6d2e958Smrg $debug_cmd 632e6d2e958Smrg 633e6d2e958Smrg func_arith_result=$(( $* )) 634e6d2e958Smrg }' 635e6d2e958Smrgelse 636e6d2e958Smrg func_arith () 637e6d2e958Smrg { 638e6d2e958Smrg $debug_cmd 639e6d2e958Smrg 640e6d2e958Smrg func_arith_result=`expr "$@"` 641e6d2e958Smrg } 642e6d2e958Smrgfi 643e6d2e958Smrg 644e6d2e958Smrg 645e6d2e958Smrg# func_basename FILE 646e6d2e958Smrg# ------------------ 647e6d2e958Smrg# Set func_basename_result to FILE with everything up to and including 648e6d2e958Smrg# the last / stripped. 649e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 650e6d2e958Smrg # If this shell supports suffix pattern removal, then use it to avoid 651e6d2e958Smrg # forking. Hide the definitions single quotes in case the shell chokes 652e6d2e958Smrg # on unsupported syntax... 653e6d2e958Smrg _b='func_basename_result=${1##*/}' 654e6d2e958Smrg _d='case $1 in 655e6d2e958Smrg */*) func_dirname_result=${1%/*}$2 ;; 656e6d2e958Smrg * ) func_dirname_result=$3 ;; 657e6d2e958Smrg esac' 658e6d2e958Smrg 659e6d2e958Smrgelse 660e6d2e958Smrg # ...otherwise fall back to using sed. 661e6d2e958Smrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 662e6d2e958Smrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 663e6d2e958Smrg if test "X$func_dirname_result" = "X$1"; then 664e6d2e958Smrg func_dirname_result=$3 665e6d2e958Smrg else 666e6d2e958Smrg func_append func_dirname_result "$2" 667e6d2e958Smrg fi' 668e6d2e958Smrgfi 669e6d2e958Smrg 670e6d2e958Smrgeval 'func_basename () 671e6d2e958Smrg{ 672e6d2e958Smrg $debug_cmd 673e6d2e958Smrg 674e6d2e958Smrg '"$_b"' 675e6d2e958Smrg}' 676e6d2e958Smrg 677e6d2e958Smrg 678e6d2e958Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 679e6d2e958Smrg# ------------------------------------------- 680e6d2e958Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 681e6d2e958Smrg# otherwise set result to NONDIR_REPLACEMENT. 682e6d2e958Smrgeval 'func_dirname () 683e6d2e958Smrg{ 684e6d2e958Smrg $debug_cmd 685e6d2e958Smrg 686e6d2e958Smrg '"$_d"' 687e6d2e958Smrg}' 688e6d2e958Smrg 689e6d2e958Smrg 690e6d2e958Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 691e6d2e958Smrg# -------------------------------------------------------- 692e6d2e958Smrg# Perform func_basename and func_dirname in a single function 693e6d2e958Smrg# call: 694e6d2e958Smrg# dirname: Compute the dirname of FILE. If nonempty, 695e6d2e958Smrg# add APPEND to the result, otherwise set result 696e6d2e958Smrg# to NONDIR_REPLACEMENT. 697e6d2e958Smrg# value returned in "$func_dirname_result" 698e6d2e958Smrg# basename: Compute filename of FILE. 699e6d2e958Smrg# value retuned in "$func_basename_result" 700e6d2e958Smrg# For efficiency, we do not delegate to the functions above but instead 701e6d2e958Smrg# duplicate the functionality here. 702e6d2e958Smrgeval 'func_dirname_and_basename () 703e6d2e958Smrg{ 704e6d2e958Smrg $debug_cmd 705e6d2e958Smrg 706e6d2e958Smrg '"$_b"' 707e6d2e958Smrg '"$_d"' 708e6d2e958Smrg}' 709e6d2e958Smrg 710e6d2e958Smrg 711e6d2e958Smrg# func_echo ARG... 712e6d2e958Smrg# ---------------- 713e6d2e958Smrg# Echo program name prefixed message. 714e6d2e958Smrgfunc_echo () 715e6d2e958Smrg{ 716e6d2e958Smrg $debug_cmd 717e6d2e958Smrg 718e6d2e958Smrg _G_message=$* 719e6d2e958Smrg 720e6d2e958Smrg func_echo_IFS=$IFS 721e6d2e958Smrg IFS=$nl 722e6d2e958Smrg for _G_line in $_G_message; do 723e6d2e958Smrg IFS=$func_echo_IFS 724e6d2e958Smrg $ECHO "$progname: $_G_line" 725e6d2e958Smrg done 726e6d2e958Smrg IFS=$func_echo_IFS 727e6d2e958Smrg} 728e6d2e958Smrg 729e6d2e958Smrg 730e6d2e958Smrg# func_echo_all ARG... 731e6d2e958Smrg# -------------------- 732e6d2e958Smrg# Invoke $ECHO with all args, space-separated. 733e6d2e958Smrgfunc_echo_all () 734e6d2e958Smrg{ 735e6d2e958Smrg $ECHO "$*" 736e6d2e958Smrg} 737e6d2e958Smrg 738e6d2e958Smrg 739e6d2e958Smrg# func_echo_infix_1 INFIX ARG... 740e6d2e958Smrg# ------------------------------ 741e6d2e958Smrg# Echo program name, followed by INFIX on the first line, with any 742e6d2e958Smrg# additional lines not showing INFIX. 743e6d2e958Smrgfunc_echo_infix_1 () 744e6d2e958Smrg{ 745e6d2e958Smrg $debug_cmd 746e6d2e958Smrg 747e6d2e958Smrg $require_term_colors 748e6d2e958Smrg 749e6d2e958Smrg _G_infix=$1; shift 750e6d2e958Smrg _G_indent=$_G_infix 751e6d2e958Smrg _G_prefix="$progname: $_G_infix: " 752e6d2e958Smrg _G_message=$* 753e6d2e958Smrg 754e6d2e958Smrg # Strip color escape sequences before counting printable length 755e6d2e958Smrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 756e6d2e958Smrg do 757e6d2e958Smrg test -n "$_G_tc" && { 758e6d2e958Smrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 759e6d2e958Smrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 760e6d2e958Smrg } 761e6d2e958Smrg done 762e6d2e958Smrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 763e6d2e958Smrg 764e6d2e958Smrg func_echo_infix_1_IFS=$IFS 765e6d2e958Smrg IFS=$nl 766e6d2e958Smrg for _G_line in $_G_message; do 767e6d2e958Smrg IFS=$func_echo_infix_1_IFS 768e6d2e958Smrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 769e6d2e958Smrg _G_prefix=$_G_indent 770e6d2e958Smrg done 771e6d2e958Smrg IFS=$func_echo_infix_1_IFS 772e6d2e958Smrg} 773e6d2e958Smrg 774e6d2e958Smrg 775e6d2e958Smrg# func_error ARG... 776e6d2e958Smrg# ----------------- 777e6d2e958Smrg# Echo program name prefixed message to standard error. 778e6d2e958Smrgfunc_error () 779e6d2e958Smrg{ 780e6d2e958Smrg $debug_cmd 781e6d2e958Smrg 782e6d2e958Smrg $require_term_colors 783e6d2e958Smrg 784e6d2e958Smrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 785e6d2e958Smrg} 786e6d2e958Smrg 787e6d2e958Smrg 788e6d2e958Smrg# func_fatal_error ARG... 789e6d2e958Smrg# ----------------------- 790e6d2e958Smrg# Echo program name prefixed message to standard error, and exit. 791e6d2e958Smrgfunc_fatal_error () 792e6d2e958Smrg{ 793e6d2e958Smrg $debug_cmd 794e6d2e958Smrg 795e6d2e958Smrg func_error "$*" 796e6d2e958Smrg exit $EXIT_FAILURE 797e6d2e958Smrg} 798e6d2e958Smrg 799e6d2e958Smrg 800e6d2e958Smrg# func_grep EXPRESSION FILENAME 801e6d2e958Smrg# ----------------------------- 80247e89262Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 80347e89262Smrgfunc_grep () 80447e89262Smrg{ 805e6d2e958Smrg $debug_cmd 806e6d2e958Smrg 80747e89262Smrg $GREP "$1" "$2" >/dev/null 2>&1 80847e89262Smrg} 80947e89262Smrg 81047e89262Smrg 811e6d2e958Smrg# func_len STRING 812e6d2e958Smrg# --------------- 813e6d2e958Smrg# Set func_len_result to the length of STRING. STRING may not 814e6d2e958Smrg# start with a hyphen. 815e6d2e958Smrg test -z "$_G_HAVE_XSI_OPS" \ 816e6d2e958Smrg && (eval 'x=a/b/c; 817e6d2e958Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 818e6d2e958Smrg && _G_HAVE_XSI_OPS=yes 819e6d2e958Smrg 820e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 821e6d2e958Smrg eval 'func_len () 822e6d2e958Smrg { 823e6d2e958Smrg $debug_cmd 824e6d2e958Smrg 825e6d2e958Smrg func_len_result=${#1} 826e6d2e958Smrg }' 827e6d2e958Smrgelse 828e6d2e958Smrg func_len () 829e6d2e958Smrg { 830e6d2e958Smrg $debug_cmd 831e6d2e958Smrg 832e6d2e958Smrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 833e6d2e958Smrg } 834e6d2e958Smrgfi 835e6d2e958Smrg 836e6d2e958Smrg 837e6d2e958Smrg# func_mkdir_p DIRECTORY-PATH 838e6d2e958Smrg# --------------------------- 83947e89262Smrg# Make sure the entire path to DIRECTORY-PATH is available. 84047e89262Smrgfunc_mkdir_p () 84147e89262Smrg{ 842e6d2e958Smrg $debug_cmd 84347e89262Smrg 844e6d2e958Smrg _G_directory_path=$1 845e6d2e958Smrg _G_dir_list= 84647e89262Smrg 847e6d2e958Smrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 848e6d2e958Smrg 849e6d2e958Smrg # Protect directory names starting with '-' 850e6d2e958Smrg case $_G_directory_path in 851e6d2e958Smrg -*) _G_directory_path=./$_G_directory_path ;; 85247e89262Smrg esac 85347e89262Smrg 85447e89262Smrg # While some portion of DIR does not yet exist... 855e6d2e958Smrg while test ! -d "$_G_directory_path"; do 85647e89262Smrg # ...make a list in topmost first order. Use a colon delimited 85747e89262Smrg # list incase some portion of path contains whitespace. 858e6d2e958Smrg _G_dir_list=$_G_directory_path:$_G_dir_list 85947e89262Smrg 86047e89262Smrg # If the last portion added has no slash in it, the list is done 861e6d2e958Smrg case $_G_directory_path in */*) ;; *) break ;; esac 86247e89262Smrg 86347e89262Smrg # ...otherwise throw away the child directory and loop 864e6d2e958Smrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 86547e89262Smrg done 866e6d2e958Smrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 86747e89262Smrg 868e6d2e958Smrg func_mkdir_p_IFS=$IFS; IFS=: 869e6d2e958Smrg for _G_dir in $_G_dir_list; do 870e6d2e958Smrg IFS=$func_mkdir_p_IFS 871e6d2e958Smrg # mkdir can fail with a 'File exist' error if two processes 87247e89262Smrg # try to create one of the directories concurrently. Don't 87347e89262Smrg # stop in that case! 874e6d2e958Smrg $MKDIR "$_G_dir" 2>/dev/null || : 87547e89262Smrg done 876e6d2e958Smrg IFS=$func_mkdir_p_IFS 87747e89262Smrg 87847e89262Smrg # Bail out if we (or some other process) failed to create a directory. 879e6d2e958Smrg test -d "$_G_directory_path" || \ 880e6d2e958Smrg func_fatal_error "Failed to create '$1'" 88147e89262Smrg fi 88247e89262Smrg} 883bd1da9d7Smrg 884bd1da9d7Smrg 885e6d2e958Smrg# func_mktempdir [BASENAME] 886e6d2e958Smrg# ------------------------- 887bd1da9d7Smrg# Make a temporary directory that won't clash with other running 888bd1da9d7Smrg# libtool processes, and avoids race conditions if possible. If 889e6d2e958Smrg# given, BASENAME is the basename for that directory. 890bd1da9d7Smrgfunc_mktempdir () 891bd1da9d7Smrg{ 892e6d2e958Smrg $debug_cmd 893e6d2e958Smrg 894e6d2e958Smrg _G_template=${TMPDIR-/tmp}/${1-$progname} 895bd1da9d7Smrg 896e6d2e958Smrg if test : = "$opt_dry_run"; then 897bd1da9d7Smrg # Return a directory name, but don't create it in dry-run mode 898e6d2e958Smrg _G_tmpdir=$_G_template-$$ 899bd1da9d7Smrg else 900bd1da9d7Smrg 901bd1da9d7Smrg # If mktemp works, use that first and foremost 902e6d2e958Smrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 903bd1da9d7Smrg 904e6d2e958Smrg if test ! -d "$_G_tmpdir"; then 90547e89262Smrg # Failing that, at least try and use $RANDOM to avoid a race 906e6d2e958Smrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 907bd1da9d7Smrg 908e6d2e958Smrg func_mktempdir_umask=`umask` 90947e89262Smrg umask 0077 910e6d2e958Smrg $MKDIR "$_G_tmpdir" 911e6d2e958Smrg umask $func_mktempdir_umask 912bd1da9d7Smrg fi 913bd1da9d7Smrg 914bd1da9d7Smrg # If we're not in dry-run mode, bomb out on failure 915e6d2e958Smrg test -d "$_G_tmpdir" || \ 916e6d2e958Smrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 917e6d2e958Smrg fi 918e6d2e958Smrg 919e6d2e958Smrg $ECHO "$_G_tmpdir" 920e6d2e958Smrg} 921e6d2e958Smrg 922e6d2e958Smrg 923e6d2e958Smrg# func_normal_abspath PATH 924e6d2e958Smrg# ------------------------ 925e6d2e958Smrg# Remove doubled-up and trailing slashes, "." path components, 926e6d2e958Smrg# and cancel out any ".." path components in PATH after making 927e6d2e958Smrg# it an absolute path. 928e6d2e958Smrgfunc_normal_abspath () 929e6d2e958Smrg{ 930e6d2e958Smrg $debug_cmd 931e6d2e958Smrg 932e6d2e958Smrg # These SED scripts presuppose an absolute path with a trailing slash. 933e6d2e958Smrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 934e6d2e958Smrg _G_pathcdr='s|^/[^/]*||' 935e6d2e958Smrg _G_removedotparts=':dotsl 936e6d2e958Smrg s|/\./|/|g 937e6d2e958Smrg t dotsl 938e6d2e958Smrg s|/\.$|/|' 939e6d2e958Smrg _G_collapseslashes='s|/\{1,\}|/|g' 940e6d2e958Smrg _G_finalslash='s|/*$|/|' 941e6d2e958Smrg 942e6d2e958Smrg # Start from root dir and reassemble the path. 943e6d2e958Smrg func_normal_abspath_result= 944e6d2e958Smrg func_normal_abspath_tpath=$1 945e6d2e958Smrg func_normal_abspath_altnamespace= 946e6d2e958Smrg case $func_normal_abspath_tpath in 947e6d2e958Smrg "") 948e6d2e958Smrg # Empty path, that just means $cwd. 949e6d2e958Smrg func_stripname '' '/' "`pwd`" 950e6d2e958Smrg func_normal_abspath_result=$func_stripname_result 951e6d2e958Smrg return 952e6d2e958Smrg ;; 953e6d2e958Smrg # The next three entries are used to spot a run of precisely 954e6d2e958Smrg # two leading slashes without using negated character classes; 955e6d2e958Smrg # we take advantage of case's first-match behaviour. 956e6d2e958Smrg ///*) 957e6d2e958Smrg # Unusual form of absolute path, do nothing. 958e6d2e958Smrg ;; 959e6d2e958Smrg //*) 960e6d2e958Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 961e6d2e958Smrg # and for example Cygwin uses it to access remote file shares 962e6d2e958Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 963e6d2e958Smrg func_normal_abspath_altnamespace=/ 964e6d2e958Smrg ;; 965e6d2e958Smrg /*) 966e6d2e958Smrg # Absolute path, do nothing. 967e6d2e958Smrg ;; 968e6d2e958Smrg *) 969e6d2e958Smrg # Relative path, prepend $cwd. 970e6d2e958Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 971e6d2e958Smrg ;; 972e6d2e958Smrg esac 973e6d2e958Smrg 974e6d2e958Smrg # Cancel out all the simple stuff to save iterations. We also want 975e6d2e958Smrg # the path to end with a slash for ease of parsing, so make sure 976e6d2e958Smrg # there is one (and only one) here. 977e6d2e958Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 978e6d2e958Smrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 979e6d2e958Smrg while :; do 980e6d2e958Smrg # Processed it all yet? 981e6d2e958Smrg if test / = "$func_normal_abspath_tpath"; then 982e6d2e958Smrg # If we ascended to the root using ".." the result may be empty now. 983e6d2e958Smrg if test -z "$func_normal_abspath_result"; then 984e6d2e958Smrg func_normal_abspath_result=/ 985e6d2e958Smrg fi 986e6d2e958Smrg break 987e6d2e958Smrg fi 988e6d2e958Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 989e6d2e958Smrg -e "$_G_pathcar"` 990e6d2e958Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 991e6d2e958Smrg -e "$_G_pathcdr"` 992e6d2e958Smrg # Figure out what to do with it 993e6d2e958Smrg case $func_normal_abspath_tcomponent in 994e6d2e958Smrg "") 995e6d2e958Smrg # Trailing empty path component, ignore it. 996e6d2e958Smrg ;; 997e6d2e958Smrg ..) 998e6d2e958Smrg # Parent dir; strip last assembled component from result. 999e6d2e958Smrg func_dirname "$func_normal_abspath_result" 1000e6d2e958Smrg func_normal_abspath_result=$func_dirname_result 1001e6d2e958Smrg ;; 1002e6d2e958Smrg *) 1003e6d2e958Smrg # Actual path component, append it. 1004e6d2e958Smrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1005e6d2e958Smrg ;; 1006e6d2e958Smrg esac 1007e6d2e958Smrg done 1008e6d2e958Smrg # Restore leading double-slash if one was found on entry. 1009e6d2e958Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1010e6d2e958Smrg} 1011e6d2e958Smrg 1012e6d2e958Smrg 1013e6d2e958Smrg# func_notquiet ARG... 1014e6d2e958Smrg# -------------------- 1015e6d2e958Smrg# Echo program name prefixed message only when not in quiet mode. 1016e6d2e958Smrgfunc_notquiet () 1017e6d2e958Smrg{ 1018e6d2e958Smrg $debug_cmd 1019e6d2e958Smrg 1020e6d2e958Smrg $opt_quiet || func_echo ${1+"$@"} 1021e6d2e958Smrg 1022e6d2e958Smrg # A bug in bash halts the script if the last line of a function 1023e6d2e958Smrg # fails when set -e is in force, so we need another command to 1024e6d2e958Smrg # work around that: 1025e6d2e958Smrg : 1026e6d2e958Smrg} 1027e6d2e958Smrg 1028e6d2e958Smrg 1029e6d2e958Smrg# func_relative_path SRCDIR DSTDIR 1030e6d2e958Smrg# -------------------------------- 1031e6d2e958Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1032e6d2e958Smrgfunc_relative_path () 1033e6d2e958Smrg{ 1034e6d2e958Smrg $debug_cmd 1035e6d2e958Smrg 1036e6d2e958Smrg func_relative_path_result= 1037e6d2e958Smrg func_normal_abspath "$1" 1038e6d2e958Smrg func_relative_path_tlibdir=$func_normal_abspath_result 1039e6d2e958Smrg func_normal_abspath "$2" 1040e6d2e958Smrg func_relative_path_tbindir=$func_normal_abspath_result 1041e6d2e958Smrg 1042e6d2e958Smrg # Ascend the tree starting from libdir 1043e6d2e958Smrg while :; do 1044e6d2e958Smrg # check if we have found a prefix of bindir 1045e6d2e958Smrg case $func_relative_path_tbindir in 1046e6d2e958Smrg $func_relative_path_tlibdir) 1047e6d2e958Smrg # found an exact match 1048e6d2e958Smrg func_relative_path_tcancelled= 1049e6d2e958Smrg break 1050e6d2e958Smrg ;; 1051e6d2e958Smrg $func_relative_path_tlibdir*) 1052e6d2e958Smrg # found a matching prefix 1053e6d2e958Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1054e6d2e958Smrg func_relative_path_tcancelled=$func_stripname_result 1055e6d2e958Smrg if test -z "$func_relative_path_result"; then 1056e6d2e958Smrg func_relative_path_result=. 1057e6d2e958Smrg fi 1058e6d2e958Smrg break 1059e6d2e958Smrg ;; 1060e6d2e958Smrg *) 1061e6d2e958Smrg func_dirname $func_relative_path_tlibdir 1062e6d2e958Smrg func_relative_path_tlibdir=$func_dirname_result 1063e6d2e958Smrg if test -z "$func_relative_path_tlibdir"; then 1064e6d2e958Smrg # Have to descend all the way to the root! 1065e6d2e958Smrg func_relative_path_result=../$func_relative_path_result 1066e6d2e958Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 1067e6d2e958Smrg break 1068e6d2e958Smrg fi 1069e6d2e958Smrg func_relative_path_result=../$func_relative_path_result 1070e6d2e958Smrg ;; 1071e6d2e958Smrg esac 1072e6d2e958Smrg done 1073e6d2e958Smrg 1074e6d2e958Smrg # Now calculate path; take care to avoid doubling-up slashes. 1075e6d2e958Smrg func_stripname '' '/' "$func_relative_path_result" 1076e6d2e958Smrg func_relative_path_result=$func_stripname_result 1077e6d2e958Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 1078e6d2e958Smrg if test -n "$func_stripname_result"; then 1079e6d2e958Smrg func_append func_relative_path_result "/$func_stripname_result" 1080e6d2e958Smrg fi 1081e6d2e958Smrg 1082e6d2e958Smrg # Normalisation. If bindir is libdir, return '.' else relative path. 1083e6d2e958Smrg if test -n "$func_relative_path_result"; then 1084e6d2e958Smrg func_stripname './' '' "$func_relative_path_result" 1085e6d2e958Smrg func_relative_path_result=$func_stripname_result 1086bd1da9d7Smrg fi 1087bd1da9d7Smrg 1088e6d2e958Smrg test -n "$func_relative_path_result" || func_relative_path_result=. 1089e6d2e958Smrg 1090e6d2e958Smrg : 1091e6d2e958Smrg} 1092e6d2e958Smrg 1093e6d2e958Smrg 1094e6d2e958Smrg# func_quote_for_eval ARG... 1095e6d2e958Smrg# -------------------------- 1096e6d2e958Smrg# Aesthetically quote ARGs to be evaled later. 1097e6d2e958Smrg# This function returns two values: 1098e6d2e958Smrg# i) func_quote_for_eval_result 1099e6d2e958Smrg# double-quoted, suitable for a subsequent eval 1100e6d2e958Smrg# ii) func_quote_for_eval_unquoted_result 1101e6d2e958Smrg# has all characters that are still active within double 1102e6d2e958Smrg# quotes backslashified. 1103e6d2e958Smrgfunc_quote_for_eval () 1104e6d2e958Smrg{ 1105e6d2e958Smrg $debug_cmd 1106e6d2e958Smrg 1107e6d2e958Smrg func_quote_for_eval_unquoted_result= 1108e6d2e958Smrg func_quote_for_eval_result= 1109e6d2e958Smrg while test 0 -lt $#; do 1110e6d2e958Smrg case $1 in 1111e6d2e958Smrg *[\\\`\"\$]*) 1112e6d2e958Smrg _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; 1113e6d2e958Smrg *) 1114e6d2e958Smrg _G_unquoted_arg=$1 ;; 1115e6d2e958Smrg esac 1116e6d2e958Smrg if test -n "$func_quote_for_eval_unquoted_result"; then 1117e6d2e958Smrg func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 1118e6d2e958Smrg else 1119e6d2e958Smrg func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 1120e6d2e958Smrg fi 1121e6d2e958Smrg 1122e6d2e958Smrg case $_G_unquoted_arg in 1123e6d2e958Smrg # Double-quote args containing shell metacharacters to delay 1124e6d2e958Smrg # word splitting, command substitution and variable expansion 1125e6d2e958Smrg # for a subsequent eval. 1126e6d2e958Smrg # Many Bourne shells cannot handle close brackets correctly 1127e6d2e958Smrg # in scan sets, so we specify it separately. 1128e6d2e958Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1129e6d2e958Smrg _G_quoted_arg=\"$_G_unquoted_arg\" 1130e6d2e958Smrg ;; 1131e6d2e958Smrg *) 1132e6d2e958Smrg _G_quoted_arg=$_G_unquoted_arg 1133e6d2e958Smrg ;; 1134e6d2e958Smrg esac 1135e6d2e958Smrg 1136e6d2e958Smrg if test -n "$func_quote_for_eval_result"; then 1137e6d2e958Smrg func_append func_quote_for_eval_result " $_G_quoted_arg" 1138e6d2e958Smrg else 1139e6d2e958Smrg func_append func_quote_for_eval_result "$_G_quoted_arg" 1140e6d2e958Smrg fi 1141e6d2e958Smrg shift 1142e6d2e958Smrg done 1143e6d2e958Smrg} 1144e6d2e958Smrg 1145e6d2e958Smrg 1146e6d2e958Smrg# func_quote_for_expand ARG 1147e6d2e958Smrg# ------------------------- 1148e6d2e958Smrg# Aesthetically quote ARG to be evaled later; same as above, 1149e6d2e958Smrg# but do not quote variable references. 1150e6d2e958Smrgfunc_quote_for_expand () 1151e6d2e958Smrg{ 1152e6d2e958Smrg $debug_cmd 1153e6d2e958Smrg 1154e6d2e958Smrg case $1 in 1155e6d2e958Smrg *[\\\`\"]*) 1156e6d2e958Smrg _G_arg=`$ECHO "$1" | $SED \ 1157e6d2e958Smrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 1158e6d2e958Smrg *) 1159e6d2e958Smrg _G_arg=$1 ;; 1160e6d2e958Smrg esac 1161e6d2e958Smrg 1162e6d2e958Smrg case $_G_arg in 1163e6d2e958Smrg # Double-quote args containing shell metacharacters to delay 1164e6d2e958Smrg # word splitting and command substitution for a subsequent eval. 1165e6d2e958Smrg # Many Bourne shells cannot handle close brackets correctly 1166e6d2e958Smrg # in scan sets, so we specify it separately. 1167e6d2e958Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1168e6d2e958Smrg _G_arg=\"$_G_arg\" 1169e6d2e958Smrg ;; 1170e6d2e958Smrg esac 1171e6d2e958Smrg 1172e6d2e958Smrg func_quote_for_expand_result=$_G_arg 1173e6d2e958Smrg} 1174e6d2e958Smrg 1175e6d2e958Smrg 1176e6d2e958Smrg# func_stripname PREFIX SUFFIX NAME 1177e6d2e958Smrg# --------------------------------- 1178e6d2e958Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1179e6d2e958Smrg# PREFIX and SUFFIX must not contain globbing or regex special 1180e6d2e958Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 1181e6d2e958Smrg# dot (in which case that matches only a dot). 1182e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 1183e6d2e958Smrg eval 'func_stripname () 1184e6d2e958Smrg { 1185e6d2e958Smrg $debug_cmd 1186e6d2e958Smrg 1187e6d2e958Smrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1188e6d2e958Smrg # positional parameters, so assign one to ordinary variable first. 1189e6d2e958Smrg func_stripname_result=$3 1190e6d2e958Smrg func_stripname_result=${func_stripname_result#"$1"} 1191e6d2e958Smrg func_stripname_result=${func_stripname_result%"$2"} 1192e6d2e958Smrg }' 1193e6d2e958Smrgelse 1194e6d2e958Smrg func_stripname () 1195e6d2e958Smrg { 1196e6d2e958Smrg $debug_cmd 1197e6d2e958Smrg 1198e6d2e958Smrg case $2 in 1199e6d2e958Smrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1200e6d2e958Smrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1201e6d2e958Smrg esac 1202e6d2e958Smrg } 1203e6d2e958Smrgfi 1204e6d2e958Smrg 1205e6d2e958Smrg 1206e6d2e958Smrg# func_show_eval CMD [FAIL_EXP] 1207e6d2e958Smrg# ----------------------------- 1208e6d2e958Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1209e6d2e958Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1210e6d2e958Smrg# is given, then evaluate it. 1211e6d2e958Smrgfunc_show_eval () 1212e6d2e958Smrg{ 1213e6d2e958Smrg $debug_cmd 1214e6d2e958Smrg 1215e6d2e958Smrg _G_cmd=$1 1216e6d2e958Smrg _G_fail_exp=${2-':'} 1217e6d2e958Smrg 1218e6d2e958Smrg func_quote_for_expand "$_G_cmd" 1219e6d2e958Smrg eval "func_notquiet $func_quote_for_expand_result" 1220e6d2e958Smrg 1221e6d2e958Smrg $opt_dry_run || { 1222e6d2e958Smrg eval "$_G_cmd" 1223e6d2e958Smrg _G_status=$? 1224e6d2e958Smrg if test 0 -ne "$_G_status"; then 1225e6d2e958Smrg eval "(exit $_G_status); $_G_fail_exp" 1226e6d2e958Smrg fi 1227e6d2e958Smrg } 1228e6d2e958Smrg} 1229e6d2e958Smrg 1230e6d2e958Smrg 1231e6d2e958Smrg# func_show_eval_locale CMD [FAIL_EXP] 1232e6d2e958Smrg# ------------------------------------ 1233e6d2e958Smrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1234e6d2e958Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1235e6d2e958Smrg# is given, then evaluate it. Use the saved locale for evaluation. 1236e6d2e958Smrgfunc_show_eval_locale () 1237e6d2e958Smrg{ 1238e6d2e958Smrg $debug_cmd 1239e6d2e958Smrg 1240e6d2e958Smrg _G_cmd=$1 1241e6d2e958Smrg _G_fail_exp=${2-':'} 1242e6d2e958Smrg 1243e6d2e958Smrg $opt_quiet || { 1244e6d2e958Smrg func_quote_for_expand "$_G_cmd" 1245e6d2e958Smrg eval "func_echo $func_quote_for_expand_result" 1246e6d2e958Smrg } 1247e6d2e958Smrg 1248e6d2e958Smrg $opt_dry_run || { 1249e6d2e958Smrg eval "$_G_user_locale 1250e6d2e958Smrg $_G_cmd" 1251e6d2e958Smrg _G_status=$? 1252e6d2e958Smrg eval "$_G_safe_locale" 1253e6d2e958Smrg if test 0 -ne "$_G_status"; then 1254e6d2e958Smrg eval "(exit $_G_status); $_G_fail_exp" 1255e6d2e958Smrg fi 1256e6d2e958Smrg } 1257e6d2e958Smrg} 1258e6d2e958Smrg 1259e6d2e958Smrg 1260e6d2e958Smrg# func_tr_sh 1261e6d2e958Smrg# ---------- 1262e6d2e958Smrg# Turn $1 into a string suitable for a shell variable name. 1263e6d2e958Smrg# Result is stored in $func_tr_sh_result. All characters 1264e6d2e958Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1265e6d2e958Smrg# if $1 begins with a digit, a '_' is prepended as well. 1266e6d2e958Smrgfunc_tr_sh () 1267e6d2e958Smrg{ 1268e6d2e958Smrg $debug_cmd 1269e6d2e958Smrg 1270e6d2e958Smrg case $1 in 1271e6d2e958Smrg [0-9]* | *[!a-zA-Z0-9_]*) 1272e6d2e958Smrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1273e6d2e958Smrg ;; 1274e6d2e958Smrg * ) 1275e6d2e958Smrg func_tr_sh_result=$1 1276e6d2e958Smrg ;; 1277e6d2e958Smrg esac 1278e6d2e958Smrg} 1279e6d2e958Smrg 1280e6d2e958Smrg 1281e6d2e958Smrg# func_verbose ARG... 1282e6d2e958Smrg# ------------------- 1283e6d2e958Smrg# Echo program name prefixed message in verbose mode only. 1284e6d2e958Smrgfunc_verbose () 1285e6d2e958Smrg{ 1286e6d2e958Smrg $debug_cmd 1287e6d2e958Smrg 1288e6d2e958Smrg $opt_verbose && func_echo "$*" 1289e6d2e958Smrg 1290e6d2e958Smrg : 1291e6d2e958Smrg} 1292e6d2e958Smrg 1293e6d2e958Smrg 1294e6d2e958Smrg# func_warn_and_continue ARG... 1295e6d2e958Smrg# ----------------------------- 1296e6d2e958Smrg# Echo program name prefixed warning message to standard error. 1297e6d2e958Smrgfunc_warn_and_continue () 1298e6d2e958Smrg{ 1299e6d2e958Smrg $debug_cmd 1300e6d2e958Smrg 1301e6d2e958Smrg $require_term_colors 1302e6d2e958Smrg 1303e6d2e958Smrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1304e6d2e958Smrg} 1305e6d2e958Smrg 1306e6d2e958Smrg 1307e6d2e958Smrg# func_warning CATEGORY ARG... 1308e6d2e958Smrg# ---------------------------- 1309e6d2e958Smrg# Echo program name prefixed warning message to standard error. Warning 1310e6d2e958Smrg# messages can be filtered according to CATEGORY, where this function 1311e6d2e958Smrg# elides messages where CATEGORY is not listed in the global variable 1312e6d2e958Smrg# 'opt_warning_types'. 1313e6d2e958Smrgfunc_warning () 1314e6d2e958Smrg{ 1315e6d2e958Smrg $debug_cmd 1316e6d2e958Smrg 1317e6d2e958Smrg # CATEGORY must be in the warning_categories list! 1318e6d2e958Smrg case " $warning_categories " in 1319e6d2e958Smrg *" $1 "*) ;; 1320e6d2e958Smrg *) func_internal_error "invalid warning category '$1'" ;; 1321e6d2e958Smrg esac 1322e6d2e958Smrg 1323e6d2e958Smrg _G_category=$1 1324e6d2e958Smrg shift 1325e6d2e958Smrg 1326e6d2e958Smrg case " $opt_warning_types " in 1327e6d2e958Smrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 1328e6d2e958Smrg esac 1329e6d2e958Smrg} 1330e6d2e958Smrg 1331e6d2e958Smrg 1332e6d2e958Smrg# func_sort_ver VER1 VER2 1333e6d2e958Smrg# ----------------------- 1334e6d2e958Smrg# 'sort -V' is not generally available. 1335e6d2e958Smrg# Note this deviates from the version comparison in automake 1336e6d2e958Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1337e6d2e958Smrg# but this should suffice as we won't be specifying old 1338e6d2e958Smrg# version formats or redundant trailing .0 in bootstrap.conf. 1339e6d2e958Smrg# If we did want full compatibility then we should probably 1340e6d2e958Smrg# use m4_version_compare from autoconf. 1341e6d2e958Smrgfunc_sort_ver () 1342e6d2e958Smrg{ 1343e6d2e958Smrg $debug_cmd 1344e6d2e958Smrg 1345e6d2e958Smrg printf '%s\n%s\n' "$1" "$2" \ 1346e6d2e958Smrg | 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 1347e6d2e958Smrg} 1348e6d2e958Smrg 1349e6d2e958Smrg# func_lt_ver PREV CURR 1350e6d2e958Smrg# --------------------- 1351e6d2e958Smrg# Return true if PREV and CURR are in the correct order according to 1352e6d2e958Smrg# func_sort_ver, otherwise false. Use it like this: 1353e6d2e958Smrg# 1354e6d2e958Smrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1355e6d2e958Smrgfunc_lt_ver () 1356e6d2e958Smrg{ 1357e6d2e958Smrg $debug_cmd 1358e6d2e958Smrg 1359e6d2e958Smrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1360e6d2e958Smrg} 1361e6d2e958Smrg 1362e6d2e958Smrg 1363e6d2e958Smrg# Local variables: 1364e6d2e958Smrg# mode: shell-script 1365e6d2e958Smrg# sh-indentation: 2 1366e6d2e958Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 1367e6d2e958Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1368e6d2e958Smrg# time-stamp-time-zone: "UTC" 1369e6d2e958Smrg# End: 1370e6d2e958Smrg#! /bin/sh 1371e6d2e958Smrg 1372e6d2e958Smrg# Set a version string for this script. 13736ad5a0e2Smrgscriptversion=2015-10-07.11; # UTC 1374e6d2e958Smrg 1375e6d2e958Smrg# A portable, pluggable option parser for Bourne shell. 1376e6d2e958Smrg# Written by Gary V. Vaughan, 2010 1377e6d2e958Smrg 1378e6d2e958Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc. 1379e6d2e958Smrg# This is free software; see the source for copying conditions. There is NO 1380e6d2e958Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1381e6d2e958Smrg 1382e6d2e958Smrg# This program is free software: you can redistribute it and/or modify 1383e6d2e958Smrg# it under the terms of the GNU General Public License as published by 1384e6d2e958Smrg# the Free Software Foundation, either version 3 of the License, or 1385e6d2e958Smrg# (at your option) any later version. 1386e6d2e958Smrg 1387e6d2e958Smrg# This program is distributed in the hope that it will be useful, 1388e6d2e958Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1389e6d2e958Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1390e6d2e958Smrg# GNU General Public License for more details. 1391e6d2e958Smrg 1392e6d2e958Smrg# You should have received a copy of the GNU General Public License 1393e6d2e958Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 1394e6d2e958Smrg 1395e6d2e958Smrg# Please report bugs or propose patches to gary@gnu.org. 1396e6d2e958Smrg 1397e6d2e958Smrg 1398e6d2e958Smrg## ------ ## 1399e6d2e958Smrg## Usage. ## 1400e6d2e958Smrg## ------ ## 1401e6d2e958Smrg 1402e6d2e958Smrg# This file is a library for parsing options in your shell scripts along 1403e6d2e958Smrg# with assorted other useful supporting features that you can make use 1404e6d2e958Smrg# of too. 1405e6d2e958Smrg# 1406e6d2e958Smrg# For the simplest scripts you might need only: 1407e6d2e958Smrg# 1408e6d2e958Smrg# #!/bin/sh 1409e6d2e958Smrg# . relative/path/to/funclib.sh 1410e6d2e958Smrg# . relative/path/to/options-parser 1411e6d2e958Smrg# scriptversion=1.0 1412e6d2e958Smrg# func_options ${1+"$@"} 1413e6d2e958Smrg# eval set dummy "$func_options_result"; shift 1414e6d2e958Smrg# ...rest of your script... 1415e6d2e958Smrg# 1416e6d2e958Smrg# In order for the '--version' option to work, you will need to have a 1417e6d2e958Smrg# suitably formatted comment like the one at the top of this file 1418e6d2e958Smrg# starting with '# Written by ' and ending with '# warranty; '. 1419e6d2e958Smrg# 1420e6d2e958Smrg# For '-h' and '--help' to work, you will also need a one line 1421e6d2e958Smrg# description of your script's purpose in a comment directly above the 1422e6d2e958Smrg# '# Written by ' line, like the one at the top of this file. 1423e6d2e958Smrg# 1424e6d2e958Smrg# The default options also support '--debug', which will turn on shell 1425e6d2e958Smrg# execution tracing (see the comment above debug_cmd below for another 1426e6d2e958Smrg# use), and '--verbose' and the func_verbose function to allow your script 1427e6d2e958Smrg# to display verbose messages only when your user has specified 1428e6d2e958Smrg# '--verbose'. 1429e6d2e958Smrg# 1430e6d2e958Smrg# After sourcing this file, you can plug processing for additional 1431e6d2e958Smrg# options by amending the variables from the 'Configuration' section 1432e6d2e958Smrg# below, and following the instructions in the 'Option parsing' 1433e6d2e958Smrg# section further down. 1434e6d2e958Smrg 1435e6d2e958Smrg## -------------- ## 1436e6d2e958Smrg## Configuration. ## 1437e6d2e958Smrg## -------------- ## 1438e6d2e958Smrg 1439e6d2e958Smrg# You should override these variables in your script after sourcing this 1440e6d2e958Smrg# file so that they reflect the customisations you have added to the 1441e6d2e958Smrg# option parser. 1442e6d2e958Smrg 1443e6d2e958Smrg# The usage line for option parsing errors and the start of '-h' and 1444e6d2e958Smrg# '--help' output messages. You can embed shell variables for delayed 1445e6d2e958Smrg# expansion at the time the message is displayed, but you will need to 1446e6d2e958Smrg# quote other shell meta-characters carefully to prevent them being 1447e6d2e958Smrg# expanded when the contents are evaled. 1448e6d2e958Smrgusage='$progpath [OPTION]...' 1449e6d2e958Smrg 1450e6d2e958Smrg# Short help message in response to '-h' and '--help'. Add to this or 1451e6d2e958Smrg# override it after sourcing this library to reflect the full set of 1452e6d2e958Smrg# options your script accepts. 1453e6d2e958Smrgusage_message="\ 1454e6d2e958Smrg --debug enable verbose shell tracing 1455e6d2e958Smrg -W, --warnings=CATEGORY 1456e6d2e958Smrg report the warnings falling in CATEGORY [all] 1457e6d2e958Smrg -v, --verbose verbosely report processing 1458e6d2e958Smrg --version print version information and exit 1459e6d2e958Smrg -h, --help print short or long help message and exit 1460e6d2e958Smrg" 1461e6d2e958Smrg 1462e6d2e958Smrg# Additional text appended to 'usage_message' in response to '--help'. 1463e6d2e958Smrglong_help_message=" 1464e6d2e958SmrgWarning categories include: 1465e6d2e958Smrg 'all' show all warnings 1466e6d2e958Smrg 'none' turn off all the warnings 1467e6d2e958Smrg 'error' warnings are treated as fatal errors" 1468e6d2e958Smrg 1469e6d2e958Smrg# Help message printed before fatal option parsing errors. 1470e6d2e958Smrgfatal_help="Try '\$progname --help' for more information." 1471e6d2e958Smrg 1472e6d2e958Smrg 1473e6d2e958Smrg 1474e6d2e958Smrg## ------------------------- ## 1475e6d2e958Smrg## Hook function management. ## 1476e6d2e958Smrg## ------------------------- ## 1477e6d2e958Smrg 1478e6d2e958Smrg# This section contains functions for adding, removing, and running hooks 1479e6d2e958Smrg# to the main code. A hook is just a named list of of function, that can 1480e6d2e958Smrg# be run in order later on. 1481e6d2e958Smrg 1482e6d2e958Smrg# func_hookable FUNC_NAME 1483e6d2e958Smrg# ----------------------- 1484e6d2e958Smrg# Declare that FUNC_NAME will run hooks added with 1485e6d2e958Smrg# 'func_add_hook FUNC_NAME ...'. 1486e6d2e958Smrgfunc_hookable () 1487e6d2e958Smrg{ 1488e6d2e958Smrg $debug_cmd 1489e6d2e958Smrg 1490e6d2e958Smrg func_append hookable_fns " $1" 1491e6d2e958Smrg} 1492e6d2e958Smrg 1493e6d2e958Smrg 1494e6d2e958Smrg# func_add_hook FUNC_NAME HOOK_FUNC 1495e6d2e958Smrg# --------------------------------- 1496e6d2e958Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1497e6d2e958Smrg# first have been declared "hookable" by a call to 'func_hookable'. 1498e6d2e958Smrgfunc_add_hook () 1499e6d2e958Smrg{ 1500e6d2e958Smrg $debug_cmd 1501e6d2e958Smrg 1502e6d2e958Smrg case " $hookable_fns " in 1503e6d2e958Smrg *" $1 "*) ;; 1504e6d2e958Smrg *) func_fatal_error "'$1' does not accept hook functions." ;; 1505e6d2e958Smrg esac 1506e6d2e958Smrg 1507e6d2e958Smrg eval func_append ${1}_hooks '" $2"' 1508e6d2e958Smrg} 1509e6d2e958Smrg 1510e6d2e958Smrg 1511e6d2e958Smrg# func_remove_hook FUNC_NAME HOOK_FUNC 1512e6d2e958Smrg# ------------------------------------ 1513e6d2e958Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 1514e6d2e958Smrgfunc_remove_hook () 1515e6d2e958Smrg{ 1516e6d2e958Smrg $debug_cmd 1517e6d2e958Smrg 1518e6d2e958Smrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1519e6d2e958Smrg} 1520e6d2e958Smrg 1521e6d2e958Smrg 1522e6d2e958Smrg# func_run_hooks FUNC_NAME [ARG]... 1523e6d2e958Smrg# --------------------------------- 1524e6d2e958Smrg# Run all hook functions registered to FUNC_NAME. 1525e6d2e958Smrg# It is assumed that the list of hook functions contains nothing more 1526e6d2e958Smrg# than a whitespace-delimited list of legal shell function names, and 1527e6d2e958Smrg# no effort is wasted trying to catch shell meta-characters or preserve 1528e6d2e958Smrg# whitespace. 1529e6d2e958Smrgfunc_run_hooks () 1530e6d2e958Smrg{ 1531e6d2e958Smrg $debug_cmd 1532e6d2e958Smrg 15336ad5a0e2Smrg _G_rc_run_hooks=false 15346ad5a0e2Smrg 1535e6d2e958Smrg case " $hookable_fns " in 1536e6d2e958Smrg *" $1 "*) ;; 1537e6d2e958Smrg *) func_fatal_error "'$1' does not support hook funcions.n" ;; 1538e6d2e958Smrg esac 1539e6d2e958Smrg 1540e6d2e958Smrg eval _G_hook_fns=\$$1_hooks; shift 1541e6d2e958Smrg 1542e6d2e958Smrg for _G_hook in $_G_hook_fns; do 15436ad5a0e2Smrg if eval $_G_hook '"$@"'; then 15446ad5a0e2Smrg # store returned options list back into positional 15456ad5a0e2Smrg # parameters for next 'cmd' execution. 15466ad5a0e2Smrg eval _G_hook_result=\$${_G_hook}_result 15476ad5a0e2Smrg eval set dummy "$_G_hook_result"; shift 15486ad5a0e2Smrg _G_rc_run_hooks=: 15496ad5a0e2Smrg fi 1550e6d2e958Smrg done 1551e6d2e958Smrg 15526ad5a0e2Smrg $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result 1553e6d2e958Smrg} 1554e6d2e958Smrg 1555e6d2e958Smrg 1556e6d2e958Smrg 1557e6d2e958Smrg## --------------- ## 1558e6d2e958Smrg## Option parsing. ## 1559e6d2e958Smrg## --------------- ## 1560e6d2e958Smrg 1561e6d2e958Smrg# In order to add your own option parsing hooks, you must accept the 15626ad5a0e2Smrg# full positional parameter list in your hook function, you may remove/edit 15636ad5a0e2Smrg# any options that you action, and then pass back the remaining unprocessed 1564e6d2e958Smrg# options in '<hooked_function_name>_result', escaped suitably for 15656ad5a0e2Smrg# 'eval'. In this case you also must return $EXIT_SUCCESS to let the 15666ad5a0e2Smrg# hook's caller know that it should pay attention to 15676ad5a0e2Smrg# '<hooked_function_name>_result'. Returning $EXIT_FAILURE signalizes that 15686ad5a0e2Smrg# arguments are left untouched by the hook and therefore caller will ignore the 15696ad5a0e2Smrg# result variable. 15706ad5a0e2Smrg# 15716ad5a0e2Smrg# Like this: 1572e6d2e958Smrg# 1573e6d2e958Smrg# my_options_prep () 1574e6d2e958Smrg# { 1575e6d2e958Smrg# $debug_cmd 1576e6d2e958Smrg# 1577e6d2e958Smrg# # Extend the existing usage message. 1578e6d2e958Smrg# usage_message=$usage_message' 1579e6d2e958Smrg# -s, --silent don'\''t print informational messages 1580e6d2e958Smrg# ' 15816ad5a0e2Smrg# # No change in '$@' (ignored completely by this hook). There is 15826ad5a0e2Smrg# # no need to do the equivalent (but slower) action: 15836ad5a0e2Smrg# # func_quote_for_eval ${1+"$@"} 15846ad5a0e2Smrg# # my_options_prep_result=$func_quote_for_eval_result 15856ad5a0e2Smrg# false 1586e6d2e958Smrg# } 1587e6d2e958Smrg# func_add_hook func_options_prep my_options_prep 1588e6d2e958Smrg# 1589e6d2e958Smrg# 1590e6d2e958Smrg# my_silent_option () 1591e6d2e958Smrg# { 1592e6d2e958Smrg# $debug_cmd 1593e6d2e958Smrg# 15946ad5a0e2Smrg# args_changed=false 15956ad5a0e2Smrg# 1596e6d2e958Smrg# # Note that for efficiency, we parse as many options as we can 1597e6d2e958Smrg# # recognise in a loop before passing the remainder back to the 1598e6d2e958Smrg# # caller on the first unrecognised argument we encounter. 1599e6d2e958Smrg# while test $# -gt 0; do 1600e6d2e958Smrg# opt=$1; shift 1601e6d2e958Smrg# case $opt in 16026ad5a0e2Smrg# --silent|-s) opt_silent=: 16036ad5a0e2Smrg# args_changed=: 16046ad5a0e2Smrg# ;; 1605e6d2e958Smrg# # Separate non-argument short options: 1606e6d2e958Smrg# -s*) func_split_short_opt "$_G_opt" 1607e6d2e958Smrg# set dummy "$func_split_short_opt_name" \ 1608e6d2e958Smrg# "-$func_split_short_opt_arg" ${1+"$@"} 1609e6d2e958Smrg# shift 16106ad5a0e2Smrg# args_changed=: 1611e6d2e958Smrg# ;; 16126ad5a0e2Smrg# *) # Make sure the first unrecognised option "$_G_opt" 16136ad5a0e2Smrg# # is added back to "$@", we could need that later 16146ad5a0e2Smrg# # if $args_changed is true. 16156ad5a0e2Smrg# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1616e6d2e958Smrg# esac 1617e6d2e958Smrg# done 1618e6d2e958Smrg# 16196ad5a0e2Smrg# if $args_changed; then 16206ad5a0e2Smrg# func_quote_for_eval ${1+"$@"} 16216ad5a0e2Smrg# my_silent_option_result=$func_quote_for_eval_result 16226ad5a0e2Smrg# fi 16236ad5a0e2Smrg# 16246ad5a0e2Smrg# $args_changed 1625e6d2e958Smrg# } 1626e6d2e958Smrg# func_add_hook func_parse_options my_silent_option 1627e6d2e958Smrg# 1628e6d2e958Smrg# 1629e6d2e958Smrg# my_option_validation () 1630e6d2e958Smrg# { 1631e6d2e958Smrg# $debug_cmd 1632e6d2e958Smrg# 1633e6d2e958Smrg# $opt_silent && $opt_verbose && func_fatal_help "\ 1634e6d2e958Smrg# '--silent' and '--verbose' options are mutually exclusive." 1635e6d2e958Smrg# 16366ad5a0e2Smrg# false 1637e6d2e958Smrg# } 1638e6d2e958Smrg# func_add_hook func_validate_options my_option_validation 1639e6d2e958Smrg# 16406ad5a0e2Smrg# You'll also need to manually amend $usage_message to reflect the extra 1641e6d2e958Smrg# options you parse. It's preferable to append if you can, so that 1642e6d2e958Smrg# multiple option parsing hooks can be added safely. 1643e6d2e958Smrg 1644e6d2e958Smrg 16456ad5a0e2Smrg# func_options_finish [ARG]... 16466ad5a0e2Smrg# ---------------------------- 16476ad5a0e2Smrg# Finishing the option parse loop (call 'func_options' hooks ATM). 16486ad5a0e2Smrgfunc_options_finish () 16496ad5a0e2Smrg{ 16506ad5a0e2Smrg $debug_cmd 16516ad5a0e2Smrg 16526ad5a0e2Smrg _G_func_options_finish_exit=false 16536ad5a0e2Smrg if func_run_hooks func_options ${1+"$@"}; then 16546ad5a0e2Smrg func_options_finish_result=$func_run_hooks_result 16556ad5a0e2Smrg _G_func_options_finish_exit=: 16566ad5a0e2Smrg fi 16576ad5a0e2Smrg 16586ad5a0e2Smrg $_G_func_options_finish_exit 16596ad5a0e2Smrg} 16606ad5a0e2Smrg 16616ad5a0e2Smrg 1662e6d2e958Smrg# func_options [ARG]... 1663e6d2e958Smrg# --------------------- 1664e6d2e958Smrg# All the functions called inside func_options are hookable. See the 1665e6d2e958Smrg# individual implementations for details. 1666e6d2e958Smrgfunc_hookable func_options 1667e6d2e958Smrgfunc_options () 1668e6d2e958Smrg{ 1669e6d2e958Smrg $debug_cmd 1670e6d2e958Smrg 16716ad5a0e2Smrg _G_rc_options=false 16726ad5a0e2Smrg 16736ad5a0e2Smrg for my_func in options_prep parse_options validate_options options_finish 16746ad5a0e2Smrg do 16756ad5a0e2Smrg if eval func_$my_func '${1+"$@"}'; then 16766ad5a0e2Smrg eval _G_res_var='$'"func_${my_func}_result" 16776ad5a0e2Smrg eval set dummy "$_G_res_var" ; shift 16786ad5a0e2Smrg _G_rc_options=: 16796ad5a0e2Smrg fi 16806ad5a0e2Smrg done 1681e6d2e958Smrg 16826ad5a0e2Smrg # Save modified positional parameters for caller. As a top-level 16836ad5a0e2Smrg # options-parser function we always need to set the 'func_options_result' 16846ad5a0e2Smrg # variable (regardless the $_G_rc_options value). 16856ad5a0e2Smrg if $_G_rc_options; then 16866ad5a0e2Smrg func_options_result=$_G_res_var 16876ad5a0e2Smrg else 16886ad5a0e2Smrg func_quote_for_eval ${1+"$@"} 16896ad5a0e2Smrg func_options_result=$func_quote_for_eval_result 16906ad5a0e2Smrg fi 1691e6d2e958Smrg 16926ad5a0e2Smrg $_G_rc_options 1693bd1da9d7Smrg} 1694bd1da9d7Smrg 1695bd1da9d7Smrg 1696e6d2e958Smrg# func_options_prep [ARG]... 1697e6d2e958Smrg# -------------------------- 1698e6d2e958Smrg# All initialisations required before starting the option parse loop. 1699e6d2e958Smrg# Note that when calling hook functions, we pass through the list of 1700e6d2e958Smrg# positional parameters. If a hook function modifies that list, and 17016ad5a0e2Smrg# needs to propagate that back to rest of this script, then the complete 1702e6d2e958Smrg# modified list must be put in 'func_run_hooks_result' before 17036ad5a0e2Smrg# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned). 1704e6d2e958Smrgfunc_hookable func_options_prep 1705e6d2e958Smrgfunc_options_prep () 1706bd1da9d7Smrg{ 1707e6d2e958Smrg $debug_cmd 170847e89262Smrg 1709e6d2e958Smrg # Option defaults: 1710e6d2e958Smrg opt_verbose=false 1711e6d2e958Smrg opt_warning_types= 1712e6d2e958Smrg 17136ad5a0e2Smrg _G_rc_options_prep=false 17146ad5a0e2Smrg if func_run_hooks func_options_prep ${1+"$@"}; then 17156ad5a0e2Smrg _G_rc_options_prep=: 17166ad5a0e2Smrg # save modified positional parameters for caller 17176ad5a0e2Smrg func_options_prep_result=$func_run_hooks_result 17186ad5a0e2Smrg fi 1719e6d2e958Smrg 17206ad5a0e2Smrg $_G_rc_options_prep 1721bd1da9d7Smrg} 1722bd1da9d7Smrg 1723bd1da9d7Smrg 1724e6d2e958Smrg# func_parse_options [ARG]... 1725e6d2e958Smrg# --------------------------- 1726e6d2e958Smrg# The main option parsing loop. 1727e6d2e958Smrgfunc_hookable func_parse_options 1728e6d2e958Smrgfunc_parse_options () 1729bd1da9d7Smrg{ 1730e6d2e958Smrg $debug_cmd 173147e89262Smrg 1732e6d2e958Smrg func_parse_options_result= 173347e89262Smrg 17346ad5a0e2Smrg _G_rc_parse_options=false 1735e6d2e958Smrg # this just eases exit handling 1736e6d2e958Smrg while test $# -gt 0; do 1737e6d2e958Smrg # Defer to hook functions for initial option parsing, so they 1738e6d2e958Smrg # get priority in the event of reusing an option name. 17396ad5a0e2Smrg if func_run_hooks func_parse_options ${1+"$@"}; then 17406ad5a0e2Smrg eval set dummy "$func_run_hooks_result"; shift 17416ad5a0e2Smrg _G_rc_parse_options=: 17426ad5a0e2Smrg fi 1743bd1da9d7Smrg 1744e6d2e958Smrg # Break out of the loop if we already parsed every option. 1745e6d2e958Smrg test $# -gt 0 || break 1746bd1da9d7Smrg 17476ad5a0e2Smrg _G_match_parse_options=: 1748e6d2e958Smrg _G_opt=$1 1749e6d2e958Smrg shift 1750e6d2e958Smrg case $_G_opt in 1751e6d2e958Smrg --debug|-x) debug_cmd='set -x' 1752e6d2e958Smrg func_echo "enabling shell trace mode" 1753e6d2e958Smrg $debug_cmd 1754e6d2e958Smrg ;; 1755e6d2e958Smrg 1756e6d2e958Smrg --no-warnings|--no-warning|--no-warn) 1757e6d2e958Smrg set dummy --warnings none ${1+"$@"} 1758e6d2e958Smrg shift 1759e6d2e958Smrg ;; 176047e89262Smrg 1761e6d2e958Smrg --warnings|--warning|-W) 17626ad5a0e2Smrg if test $# = 0 && func_missing_arg $_G_opt; then 17636ad5a0e2Smrg _G_rc_parse_options=: 17646ad5a0e2Smrg break 17656ad5a0e2Smrg fi 1766e6d2e958Smrg case " $warning_categories $1" in 1767e6d2e958Smrg *" $1 "*) 1768e6d2e958Smrg # trailing space prevents matching last $1 above 1769e6d2e958Smrg func_append_uniq opt_warning_types " $1" 1770e6d2e958Smrg ;; 1771e6d2e958Smrg *all) 1772e6d2e958Smrg opt_warning_types=$warning_categories 1773e6d2e958Smrg ;; 1774e6d2e958Smrg *none) 1775e6d2e958Smrg opt_warning_types=none 1776e6d2e958Smrg warning_func=: 1777e6d2e958Smrg ;; 1778e6d2e958Smrg *error) 1779e6d2e958Smrg opt_warning_types=$warning_categories 1780e6d2e958Smrg warning_func=func_fatal_error 1781e6d2e958Smrg ;; 1782e6d2e958Smrg *) 1783e6d2e958Smrg func_fatal_error \ 1784e6d2e958Smrg "unsupported warning category: '$1'" 1785e6d2e958Smrg ;; 1786e6d2e958Smrg esac 1787e6d2e958Smrg shift 1788e6d2e958Smrg ;; 1789e6d2e958Smrg 1790e6d2e958Smrg --verbose|-v) opt_verbose=: ;; 1791e6d2e958Smrg --version) func_version ;; 1792e6d2e958Smrg -\?|-h) func_usage ;; 1793e6d2e958Smrg --help) func_help ;; 1794e6d2e958Smrg 1795e6d2e958Smrg # Separate optargs to long options (plugins may need this): 1796e6d2e958Smrg --*=*) func_split_equals "$_G_opt" 1797e6d2e958Smrg set dummy "$func_split_equals_lhs" \ 1798e6d2e958Smrg "$func_split_equals_rhs" ${1+"$@"} 1799e6d2e958Smrg shift 1800e6d2e958Smrg ;; 1801e6d2e958Smrg 1802e6d2e958Smrg # Separate optargs to short options: 1803e6d2e958Smrg -W*) 1804e6d2e958Smrg func_split_short_opt "$_G_opt" 1805e6d2e958Smrg set dummy "$func_split_short_opt_name" \ 1806e6d2e958Smrg "$func_split_short_opt_arg" ${1+"$@"} 1807e6d2e958Smrg shift 1808e6d2e958Smrg ;; 1809e6d2e958Smrg 1810e6d2e958Smrg # Separate non-argument short options: 1811e6d2e958Smrg -\?*|-h*|-v*|-x*) 1812e6d2e958Smrg func_split_short_opt "$_G_opt" 1813e6d2e958Smrg set dummy "$func_split_short_opt_name" \ 1814e6d2e958Smrg "-$func_split_short_opt_arg" ${1+"$@"} 1815e6d2e958Smrg shift 1816e6d2e958Smrg ;; 1817e6d2e958Smrg 18186ad5a0e2Smrg --) _G_rc_parse_options=: ; break ;; 1819e6d2e958Smrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 18206ad5a0e2Smrg *) set dummy "$_G_opt" ${1+"$@"}; shift 18216ad5a0e2Smrg _G_match_parse_options=false 18226ad5a0e2Smrg break 18236ad5a0e2Smrg ;; 1824e6d2e958Smrg esac 18256ad5a0e2Smrg 18266ad5a0e2Smrg $_G_match_parse_options && _G_rc_parse_options=: 1827e6d2e958Smrg done 1828e6d2e958Smrg 18296ad5a0e2Smrg 18306ad5a0e2Smrg if $_G_rc_parse_options; then 18316ad5a0e2Smrg # save modified positional parameters for caller 18326ad5a0e2Smrg func_quote_for_eval ${1+"$@"} 18336ad5a0e2Smrg func_parse_options_result=$func_quote_for_eval_result 18346ad5a0e2Smrg fi 18356ad5a0e2Smrg 18366ad5a0e2Smrg $_G_rc_parse_options 1837bd1da9d7Smrg} 1838bd1da9d7Smrg 183947e89262Smrg 1840e6d2e958Smrg# func_validate_options [ARG]... 1841e6d2e958Smrg# ------------------------------ 1842e6d2e958Smrg# Perform any sanity checks on option settings and/or unconsumed 1843e6d2e958Smrg# arguments. 1844e6d2e958Smrgfunc_hookable func_validate_options 1845e6d2e958Smrgfunc_validate_options () 1846bd1da9d7Smrg{ 1847e6d2e958Smrg $debug_cmd 1848bd1da9d7Smrg 18496ad5a0e2Smrg _G_rc_validate_options=false 18506ad5a0e2Smrg 1851e6d2e958Smrg # Display all warnings if -W was not given. 1852e6d2e958Smrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 1853bd1da9d7Smrg 18546ad5a0e2Smrg if func_run_hooks func_validate_options ${1+"$@"}; then 18556ad5a0e2Smrg # save modified positional parameters for caller 18566ad5a0e2Smrg func_validate_options_result=$func_run_hooks_result 18576ad5a0e2Smrg _G_rc_validate_options=: 18586ad5a0e2Smrg fi 1859bd1da9d7Smrg 1860e6d2e958Smrg # Bail if the options were screwed! 1861e6d2e958Smrg $exit_cmd $EXIT_FAILURE 1862e6d2e958Smrg 18636ad5a0e2Smrg $_G_rc_validate_options 1864899129b3Smrg} 1865899129b3Smrg 1866bd1da9d7Smrg 1867899129b3Smrg 1868e6d2e958Smrg## ----------------- ## 1869e6d2e958Smrg## Helper functions. ## 1870e6d2e958Smrg## ----------------- ## 1871bd1da9d7Smrg 1872e6d2e958Smrg# This section contains the helper functions used by the rest of the 1873e6d2e958Smrg# hookable option parser framework in ascii-betical order. 1874e6d2e958Smrg 1875e6d2e958Smrg 1876e6d2e958Smrg# func_fatal_help ARG... 1877e6d2e958Smrg# ---------------------- 1878e6d2e958Smrg# Echo program name prefixed message to standard error, followed by 1879e6d2e958Smrg# a help hint, and exit. 1880e6d2e958Smrgfunc_fatal_help () 188147e89262Smrg{ 1882e6d2e958Smrg $debug_cmd 1883899129b3Smrg 1884e6d2e958Smrg eval \$ECHO \""Usage: $usage"\" 1885e6d2e958Smrg eval \$ECHO \""$fatal_help"\" 1886e6d2e958Smrg func_error ${1+"$@"} 1887e6d2e958Smrg exit $EXIT_FAILURE 188847e89262Smrg} 1889bd1da9d7Smrg 1890e6d2e958Smrg 1891e6d2e958Smrg# func_help 1892e6d2e958Smrg# --------- 1893e6d2e958Smrg# Echo long help message to standard output and exit. 189447e89262Smrgfunc_help () 189547e89262Smrg{ 1896e6d2e958Smrg $debug_cmd 1897e6d2e958Smrg 1898e6d2e958Smrg func_usage_message 1899e6d2e958Smrg $ECHO "$long_help_message" 1900e6d2e958Smrg exit 0 190147e89262Smrg} 1902bd1da9d7Smrg 1903e6d2e958Smrg 1904e6d2e958Smrg# func_missing_arg ARGNAME 1905e6d2e958Smrg# ------------------------ 190647e89262Smrg# Echo program name prefixed message to standard error and set global 190747e89262Smrg# exit_cmd. 190847e89262Smrgfunc_missing_arg () 190947e89262Smrg{ 1910e6d2e958Smrg $debug_cmd 1911899129b3Smrg 1912e6d2e958Smrg func_error "Missing argument for '$1'." 191347e89262Smrg exit_cmd=exit 191447e89262Smrg} 1915bd1da9d7Smrg 1916bd1da9d7Smrg 1917e6d2e958Smrg# func_split_equals STRING 1918e6d2e958Smrg# ------------------------ 1919e6d2e958Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 1920e6d2e958Smrg# splitting STRING at the '=' sign. 1921e6d2e958Smrgtest -z "$_G_HAVE_XSI_OPS" \ 1922e6d2e958Smrg && (eval 'x=a/b/c; 1923e6d2e958Smrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 1924e6d2e958Smrg && _G_HAVE_XSI_OPS=yes 1925e6d2e958Smrg 1926e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS" 1927e6d2e958Smrgthen 1928e6d2e958Smrg # This is an XSI compatible shell, allowing a faster implementation... 1929e6d2e958Smrg eval 'func_split_equals () 1930e6d2e958Smrg { 1931e6d2e958Smrg $debug_cmd 1932e6d2e958Smrg 1933e6d2e958Smrg func_split_equals_lhs=${1%%=*} 1934e6d2e958Smrg func_split_equals_rhs=${1#*=} 1935e6d2e958Smrg test "x$func_split_equals_lhs" = "x$1" \ 1936e6d2e958Smrg && func_split_equals_rhs= 1937e6d2e958Smrg }' 1938e6d2e958Smrgelse 1939e6d2e958Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 1940e6d2e958Smrg func_split_equals () 1941e6d2e958Smrg { 1942e6d2e958Smrg $debug_cmd 1943e6d2e958Smrg 1944e6d2e958Smrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 1945e6d2e958Smrg func_split_equals_rhs= 1946e6d2e958Smrg test "x$func_split_equals_lhs" = "x$1" \ 1947e6d2e958Smrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 1948e6d2e958Smrg } 1949e6d2e958Smrgfi #func_split_equals 1950e6d2e958Smrg 1951e6d2e958Smrg 1952e6d2e958Smrg# func_split_short_opt SHORTOPT 1953e6d2e958Smrg# ----------------------------- 1954899129b3Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 1955899129b3Smrg# variables after splitting SHORTOPT after the 2nd character. 1956e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS" 1957e6d2e958Smrgthen 1958e6d2e958Smrg # This is an XSI compatible shell, allowing a faster implementation... 1959e6d2e958Smrg eval 'func_split_short_opt () 1960e6d2e958Smrg { 1961e6d2e958Smrg $debug_cmd 1962e6d2e958Smrg 1963e6d2e958Smrg func_split_short_opt_arg=${1#??} 1964e6d2e958Smrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 1965e6d2e958Smrg }' 1966e6d2e958Smrgelse 1967e6d2e958Smrg # ...otherwise fall back to using expr, which is often a shell builtin. 1968e6d2e958Smrg func_split_short_opt () 1969e6d2e958Smrg { 1970e6d2e958Smrg $debug_cmd 1971e6d2e958Smrg 1972e6d2e958Smrg func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 1973e6d2e958Smrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 1974e6d2e958Smrg } 1975e6d2e958Smrgfi #func_split_short_opt 1976e6d2e958Smrg 1977e6d2e958Smrg 1978e6d2e958Smrg# func_usage 1979e6d2e958Smrg# ---------- 1980e6d2e958Smrg# Echo short help message to standard output and exit. 1981e6d2e958Smrgfunc_usage () 1982899129b3Smrg{ 1983e6d2e958Smrg $debug_cmd 1984899129b3Smrg 1985e6d2e958Smrg func_usage_message 1986e6d2e958Smrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 1987e6d2e958Smrg exit 0 1988e6d2e958Smrg} 1989899129b3Smrg 1990899129b3Smrg 1991e6d2e958Smrg# func_usage_message 1992e6d2e958Smrg# ------------------ 1993e6d2e958Smrg# Echo short help message to standard output. 1994e6d2e958Smrgfunc_usage_message () 1995899129b3Smrg{ 1996e6d2e958Smrg $debug_cmd 1997899129b3Smrg 1998e6d2e958Smrg eval \$ECHO \""Usage: $usage"\" 1999e6d2e958Smrg echo 2000e6d2e958Smrg $SED -n 's|^# || 2001e6d2e958Smrg /^Written by/{ 2002e6d2e958Smrg x;p;x 2003e6d2e958Smrg } 2004e6d2e958Smrg h 2005e6d2e958Smrg /^Written by/q' < "$progpath" 2006e6d2e958Smrg echo 2007e6d2e958Smrg eval \$ECHO \""$usage_message"\" 2008e6d2e958Smrg} 2009899129b3Smrg 2010bd1da9d7Smrg 2011e6d2e958Smrg# func_version 2012e6d2e958Smrg# ------------ 2013e6d2e958Smrg# Echo version message to standard output and exit. 2014e6d2e958Smrgfunc_version () 2015e6d2e958Smrg{ 2016e6d2e958Smrg $debug_cmd 2017bd1da9d7Smrg 2018e6d2e958Smrg printf '%s\n' "$progname $scriptversion" 2019e6d2e958Smrg $SED -n ' 2020e6d2e958Smrg /(C)/!b go 2021e6d2e958Smrg :more 2022e6d2e958Smrg /\./!{ 2023e6d2e958Smrg N 2024e6d2e958Smrg s|\n# | | 2025e6d2e958Smrg b more 2026e6d2e958Smrg } 2027e6d2e958Smrg :go 2028e6d2e958Smrg /^# Written by /,/# warranty; / { 2029e6d2e958Smrg s|^# || 2030e6d2e958Smrg s|^# *$|| 2031e6d2e958Smrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 2032e6d2e958Smrg p 2033e6d2e958Smrg } 2034e6d2e958Smrg /^# Written by / { 2035e6d2e958Smrg s|^# || 2036e6d2e958Smrg p 2037e6d2e958Smrg } 2038e6d2e958Smrg /^warranty; /q' < "$progpath" 20395bcb6992Smrg 2040e6d2e958Smrg exit $? 2041e6d2e958Smrg} 2042bd1da9d7Smrg 204347e89262Smrg 2044e6d2e958Smrg# Local variables: 2045e6d2e958Smrg# mode: shell-script 2046e6d2e958Smrg# sh-indentation: 2 2047e6d2e958Smrg# eval: (add-hook 'before-save-hook 'time-stamp) 2048e6d2e958Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 2049e6d2e958Smrg# time-stamp-time-zone: "UTC" 2050e6d2e958Smrg# End: 205147e89262Smrg 2052e6d2e958Smrg# Set a version string. 2053e6d2e958Smrgscriptversion='(GNU libtool) 2.4.6' 205447e89262Smrg 205547e89262Smrg 2056e6d2e958Smrg# func_echo ARG... 2057e6d2e958Smrg# ---------------- 2058e6d2e958Smrg# Libtool also displays the current mode in messages, so override 2059e6d2e958Smrg# funclib.sh func_echo with this custom definition. 2060e6d2e958Smrgfunc_echo () 2061899129b3Smrg{ 2062e6d2e958Smrg $debug_cmd 2063899129b3Smrg 2064e6d2e958Smrg _G_message=$* 2065899129b3Smrg 2066e6d2e958Smrg func_echo_IFS=$IFS 2067e6d2e958Smrg IFS=$nl 2068e6d2e958Smrg for _G_line in $_G_message; do 2069e6d2e958Smrg IFS=$func_echo_IFS 2070e6d2e958Smrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 2071e6d2e958Smrg done 2072e6d2e958Smrg IFS=$func_echo_IFS 2073e6d2e958Smrg} 2074899129b3Smrg 2075e6d2e958Smrg 2076e6d2e958Smrg# func_warning ARG... 2077e6d2e958Smrg# ------------------- 2078e6d2e958Smrg# Libtool warnings are not categorized, so override funclib.sh 2079e6d2e958Smrg# func_warning with this simpler definition. 2080e6d2e958Smrgfunc_warning () 2081899129b3Smrg{ 2082e6d2e958Smrg $debug_cmd 2083899129b3Smrg 2084e6d2e958Smrg $warning_func ${1+"$@"} 2085e6d2e958Smrg} 2086899129b3Smrg 2087899129b3Smrg 2088e6d2e958Smrg## ---------------- ## 2089e6d2e958Smrg## Options parsing. ## 2090e6d2e958Smrg## ---------------- ## 2091e6d2e958Smrg 2092e6d2e958Smrg# Hook in the functions to make sure our own options are parsed during 2093e6d2e958Smrg# the option parsing loop. 2094e6d2e958Smrg 2095e6d2e958Smrgusage='$progpath [OPTION]... [MODE-ARG]...' 2096e6d2e958Smrg 2097e6d2e958Smrg# Short help message in response to '-h'. 2098e6d2e958Smrgusage_message="Options: 2099e6d2e958Smrg --config show all configuration variables 2100e6d2e958Smrg --debug enable verbose shell tracing 2101e6d2e958Smrg -n, --dry-run display commands without modifying any files 2102e6d2e958Smrg --features display basic configuration information and exit 2103e6d2e958Smrg --mode=MODE use operation mode MODE 2104e6d2e958Smrg --no-warnings equivalent to '-Wnone' 2105e6d2e958Smrg --preserve-dup-deps don't remove duplicate dependency libraries 2106e6d2e958Smrg --quiet, --silent don't print informational messages 2107e6d2e958Smrg --tag=TAG use configuration variables from tag TAG 2108e6d2e958Smrg -v, --verbose print more informational messages than default 2109e6d2e958Smrg --version print version information 2110e6d2e958Smrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2111e6d2e958Smrg -h, --help, --help-all print short, long, or detailed help message 2112e6d2e958Smrg" 2113899129b3Smrg 2114e6d2e958Smrg# Additional text appended to 'usage_message' in response to '--help'. 2115e6d2e958Smrgfunc_help () 2116899129b3Smrg{ 2117e6d2e958Smrg $debug_cmd 2118e6d2e958Smrg 2119e6d2e958Smrg func_usage_message 2120e6d2e958Smrg $ECHO "$long_help_message 2121e6d2e958Smrg 2122e6d2e958SmrgMODE must be one of the following: 2123e6d2e958Smrg 2124e6d2e958Smrg clean remove files from the build directory 2125e6d2e958Smrg compile compile a source file into a libtool object 2126e6d2e958Smrg execute automatically set library path, then run a program 2127e6d2e958Smrg finish complete the installation of libtool libraries 2128e6d2e958Smrg install install libraries or executables 2129e6d2e958Smrg link create a library or an executable 2130e6d2e958Smrg uninstall remove libraries from an installed directory 2131e6d2e958Smrg 2132e6d2e958SmrgMODE-ARGS vary depending on the MODE. When passed as first option, 2133e6d2e958Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2134e6d2e958SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2135e6d2e958Smrg 2136e6d2e958SmrgWhen reporting a bug, please describe a test case to reproduce it and 2137e6d2e958Smrginclude the following information: 2138e6d2e958Smrg 2139e6d2e958Smrg host-triplet: $host 2140e6d2e958Smrg shell: $SHELL 2141e6d2e958Smrg compiler: $LTCC 2142e6d2e958Smrg compiler flags: $LTCFLAGS 2143e6d2e958Smrg linker: $LD (gnu? $with_gnu_ld) 21446ad5a0e2Smrg version: $progname $scriptversion Debian-2.4.6-15 2145e6d2e958Smrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2146e6d2e958Smrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2147e6d2e958Smrg 2148e6d2e958SmrgReport bugs to <bug-libtool@gnu.org>. 21496ad5a0e2SmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>. 2150e6d2e958SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2151e6d2e958Smrg exit 0 2152e6d2e958Smrg} 2153899129b3Smrg 2154899129b3Smrg 2155e6d2e958Smrg# func_lo2o OBJECT-NAME 2156e6d2e958Smrg# --------------------- 2157e6d2e958Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2158e6d2e958Smrg# object suffix. 2159e6d2e958Smrg 2160e6d2e958Smrglo2o=s/\\.lo\$/.$objext/ 2161e6d2e958Smrgo2lo=s/\\.$objext\$/.lo/ 2162e6d2e958Smrg 2163e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then 2164e6d2e958Smrg eval 'func_lo2o () 2165e6d2e958Smrg { 2166e6d2e958Smrg case $1 in 2167e6d2e958Smrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2168e6d2e958Smrg * ) func_lo2o_result=$1 ;; 2169e6d2e958Smrg esac 2170e6d2e958Smrg }' 2171e6d2e958Smrg 2172e6d2e958Smrg # func_xform LIBOBJ-OR-SOURCE 2173e6d2e958Smrg # --------------------------- 2174e6d2e958Smrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2175e6d2e958Smrg # suffix to a '.lo' libtool-object suffix. 2176e6d2e958Smrg eval 'func_xform () 2177e6d2e958Smrg { 2178e6d2e958Smrg func_xform_result=${1%.*}.lo 2179e6d2e958Smrg }' 2180e6d2e958Smrgelse 2181e6d2e958Smrg # ...otherwise fall back to using sed. 2182e6d2e958Smrg func_lo2o () 2183e6d2e958Smrg { 2184e6d2e958Smrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2185e6d2e958Smrg } 2186e6d2e958Smrg 2187e6d2e958Smrg func_xform () 2188e6d2e958Smrg { 2189e6d2e958Smrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2190e6d2e958Smrg } 2191e6d2e958Smrgfi 2192899129b3Smrg 2193899129b3Smrg 2194e6d2e958Smrg# func_fatal_configuration ARG... 2195e6d2e958Smrg# ------------------------------- 219647e89262Smrg# Echo program name prefixed message to standard error, followed by 219747e89262Smrg# a configuration failure hint, and exit. 219847e89262Smrgfunc_fatal_configuration () 219947e89262Smrg{ 2200e6d2e958Smrg func__fatal_error ${1+"$@"} \ 2201e6d2e958Smrg "See the $PACKAGE documentation for more information." \ 2202e6d2e958Smrg "Fatal configuration error." 220347e89262Smrg} 220447e89262Smrg 220547e89262Smrg 220647e89262Smrg# func_config 2207e6d2e958Smrg# ----------- 220847e89262Smrg# Display the configuration for all the tags in this script. 220947e89262Smrgfunc_config () 221047e89262Smrg{ 221147e89262Smrg re_begincf='^# ### BEGIN LIBTOOL' 221247e89262Smrg re_endcf='^# ### END LIBTOOL' 221347e89262Smrg 221447e89262Smrg # Default configuration. 221547e89262Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 221647e89262Smrg 2217bd1da9d7Smrg # Now print the configurations for the tags. 2218bd1da9d7Smrg for tagname in $taglist; do 221947e89262Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2220bd1da9d7Smrg done 2221bd1da9d7Smrg 222247e89262Smrg exit $? 222347e89262Smrg} 2224bd1da9d7Smrg 2225e6d2e958Smrg 222647e89262Smrg# func_features 2227e6d2e958Smrg# ------------- 222847e89262Smrg# Display the features supported by this script. 222947e89262Smrgfunc_features () 223047e89262Smrg{ 223147e89262Smrg echo "host: $host" 2232e6d2e958Smrg if test yes = "$build_libtool_libs"; then 223347e89262Smrg echo "enable shared libraries" 2234bd1da9d7Smrg else 223547e89262Smrg echo "disable shared libraries" 2236bd1da9d7Smrg fi 2237e6d2e958Smrg if test yes = "$build_old_libs"; then 223847e89262Smrg echo "enable static libraries" 2239bd1da9d7Smrg else 224047e89262Smrg echo "disable static libraries" 2241bd1da9d7Smrg fi 224247e89262Smrg 2243bd1da9d7Smrg exit $? 224447e89262Smrg} 2245bd1da9d7Smrg 2246e6d2e958Smrg 2247e6d2e958Smrg# func_enable_tag TAGNAME 2248e6d2e958Smrg# ----------------------- 224947e89262Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 225047e89262Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 225147e89262Smrg# variable here. 225247e89262Smrgfunc_enable_tag () 225347e89262Smrg{ 2254e6d2e958Smrg # Global variable: 2255e6d2e958Smrg tagname=$1 2256bd1da9d7Smrg 2257e6d2e958Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2258e6d2e958Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2259e6d2e958Smrg sed_extractcf=/$re_begincf/,/$re_endcf/p 2260bd1da9d7Smrg 2261e6d2e958Smrg # Validate tagname. 2262e6d2e958Smrg case $tagname in 2263e6d2e958Smrg *[!-_A-Za-z0-9,/]*) 2264e6d2e958Smrg func_fatal_error "invalid tag name: $tagname" 2265e6d2e958Smrg ;; 2266e6d2e958Smrg esac 2267bd1da9d7Smrg 2268e6d2e958Smrg # Don't test for the "default" C tag, as we know it's 2269e6d2e958Smrg # there but not specially marked. 2270e6d2e958Smrg case $tagname in 2271e6d2e958Smrg CC) ;; 227247e89262Smrg *) 2273e6d2e958Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2274e6d2e958Smrg taglist="$taglist $tagname" 2275e6d2e958Smrg 2276e6d2e958Smrg # Evaluate the configuration. Be careful to quote the path 2277e6d2e958Smrg # and the sed script, to avoid splitting on whitespace, but 2278e6d2e958Smrg # also don't use non-portable quotes within backquotes within 2279e6d2e958Smrg # quotes we have to do it in 2 steps: 2280e6d2e958Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2281e6d2e958Smrg eval "$extractedcf" 2282e6d2e958Smrg else 2283e6d2e958Smrg func_error "ignoring unknown tag $tagname" 2284e6d2e958Smrg fi 2285e6d2e958Smrg ;; 2286e6d2e958Smrg esac 228747e89262Smrg} 228847e89262Smrg 2289e6d2e958Smrg 2290899129b3Smrg# func_check_version_match 2291e6d2e958Smrg# ------------------------ 2292899129b3Smrg# Ensure that we are using m4 macros, and libtool script from the same 2293899129b3Smrg# release of libtool. 2294899129b3Smrgfunc_check_version_match () 229547e89262Smrg{ 2296e6d2e958Smrg if test "$package_revision" != "$macro_revision"; then 2297e6d2e958Smrg if test "$VERSION" != "$macro_version"; then 2298e6d2e958Smrg if test -z "$macro_version"; then 2299e6d2e958Smrg cat >&2 <<_LT_EOF 2300899129b3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2301899129b3Smrg$progname: definition of this LT_INIT comes from an older release. 2302899129b3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2303899129b3Smrg$progname: and run autoconf again. 2304899129b3Smrg_LT_EOF 2305e6d2e958Smrg else 2306e6d2e958Smrg cat >&2 <<_LT_EOF 2307899129b3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2308899129b3Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2309899129b3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2310899129b3Smrg$progname: and run autoconf again. 2311899129b3Smrg_LT_EOF 2312e6d2e958Smrg fi 2313e6d2e958Smrg else 2314e6d2e958Smrg cat >&2 <<_LT_EOF 2315899129b3Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2316899129b3Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2317899129b3Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2318899129b3Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 2319899129b3Smrg_LT_EOF 2320e6d2e958Smrg fi 2321899129b3Smrg 2322e6d2e958Smrg exit $EXIT_MISMATCH 2323e6d2e958Smrg fi 2324899129b3Smrg} 2325899129b3Smrg 2326899129b3Smrg 2327e6d2e958Smrg# libtool_options_prep [ARG]... 2328e6d2e958Smrg# ----------------------------- 2329e6d2e958Smrg# Preparation for options parsed by libtool. 2330e6d2e958Smrglibtool_options_prep () 2331e6d2e958Smrg{ 2332e6d2e958Smrg $debug_mode 2333899129b3Smrg 2334e6d2e958Smrg # Option defaults: 2335e6d2e958Smrg opt_config=false 2336e6d2e958Smrg opt_dlopen= 2337e6d2e958Smrg opt_dry_run=false 2338e6d2e958Smrg opt_help=false 2339e6d2e958Smrg opt_mode= 2340e6d2e958Smrg opt_preserve_dup_deps=false 2341e6d2e958Smrg opt_quiet=false 2342899129b3Smrg 2343e6d2e958Smrg nonopt= 2344e6d2e958Smrg preserve_args= 2345899129b3Smrg 23466ad5a0e2Smrg _G_rc_lt_options_prep=: 23476ad5a0e2Smrg 2348e6d2e958Smrg # Shorthand for --mode=foo, only valid as the first argument 2349e6d2e958Smrg case $1 in 2350e6d2e958Smrg clean|clea|cle|cl) 2351e6d2e958Smrg shift; set dummy --mode clean ${1+"$@"}; shift 2352e6d2e958Smrg ;; 2353e6d2e958Smrg compile|compil|compi|comp|com|co|c) 2354e6d2e958Smrg shift; set dummy --mode compile ${1+"$@"}; shift 2355e6d2e958Smrg ;; 2356e6d2e958Smrg execute|execut|execu|exec|exe|ex|e) 2357e6d2e958Smrg shift; set dummy --mode execute ${1+"$@"}; shift 2358e6d2e958Smrg ;; 2359e6d2e958Smrg finish|finis|fini|fin|fi|f) 2360e6d2e958Smrg shift; set dummy --mode finish ${1+"$@"}; shift 2361e6d2e958Smrg ;; 2362e6d2e958Smrg install|instal|insta|inst|ins|in|i) 2363e6d2e958Smrg shift; set dummy --mode install ${1+"$@"}; shift 2364e6d2e958Smrg ;; 2365e6d2e958Smrg link|lin|li|l) 2366e6d2e958Smrg shift; set dummy --mode link ${1+"$@"}; shift 2367e6d2e958Smrg ;; 2368e6d2e958Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2369e6d2e958Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 2370e6d2e958Smrg ;; 23716ad5a0e2Smrg *) 23726ad5a0e2Smrg _G_rc_lt_options_prep=false 23736ad5a0e2Smrg ;; 2374e6d2e958Smrg esac 2375e6d2e958Smrg 23766ad5a0e2Smrg if $_G_rc_lt_options_prep; then 23776ad5a0e2Smrg # Pass back the list of options. 23786ad5a0e2Smrg func_quote_for_eval ${1+"$@"} 23796ad5a0e2Smrg libtool_options_prep_result=$func_quote_for_eval_result 23806ad5a0e2Smrg fi 23816ad5a0e2Smrg 23826ad5a0e2Smrg $_G_rc_lt_options_prep 2383e6d2e958Smrg} 2384e6d2e958Smrgfunc_add_hook func_options_prep libtool_options_prep 2385bd1da9d7Smrg 2386bd1da9d7Smrg 2387e6d2e958Smrg# libtool_parse_options [ARG]... 2388e6d2e958Smrg# --------------------------------- 2389e6d2e958Smrg# Provide handling for libtool specific options. 2390e6d2e958Smrglibtool_parse_options () 2391899129b3Smrg{ 2392e6d2e958Smrg $debug_cmd 239347e89262Smrg 23946ad5a0e2Smrg _G_rc_lt_parse_options=false 23956ad5a0e2Smrg 2396e6d2e958Smrg # Perform our own loop to consume as many options as possible in 2397e6d2e958Smrg # each iteration. 2398e6d2e958Smrg while test $# -gt 0; do 23996ad5a0e2Smrg _G_match_lt_parse_options=: 2400e6d2e958Smrg _G_opt=$1 2401e6d2e958Smrg shift 2402e6d2e958Smrg case $_G_opt in 2403e6d2e958Smrg --dry-run|--dryrun|-n) 2404e6d2e958Smrg opt_dry_run=: 2405e6d2e958Smrg ;; 2406e6d2e958Smrg 2407e6d2e958Smrg --config) func_config ;; 2408e6d2e958Smrg 2409e6d2e958Smrg --dlopen|-dlopen) 2410e6d2e958Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 2411e6d2e958Smrg}$1" 2412e6d2e958Smrg shift 2413e6d2e958Smrg ;; 2414e6d2e958Smrg 2415e6d2e958Smrg --preserve-dup-deps) 2416e6d2e958Smrg opt_preserve_dup_deps=: ;; 2417e6d2e958Smrg 2418e6d2e958Smrg --features) func_features ;; 2419e6d2e958Smrg 2420e6d2e958Smrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2421e6d2e958Smrg 2422e6d2e958Smrg --help) opt_help=: ;; 2423e6d2e958Smrg 2424e6d2e958Smrg --help-all) opt_help=': help-all' ;; 2425e6d2e958Smrg 2426e6d2e958Smrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 2427e6d2e958Smrg opt_mode=$1 2428e6d2e958Smrg case $1 in 2429e6d2e958Smrg # Valid mode arguments: 2430e6d2e958Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 2431e6d2e958Smrg 2432e6d2e958Smrg # Catch anything else as an error 2433e6d2e958Smrg *) func_error "invalid argument for $_G_opt" 2434e6d2e958Smrg exit_cmd=exit 2435e6d2e958Smrg break 2436e6d2e958Smrg ;; 2437e6d2e958Smrg esac 2438e6d2e958Smrg shift 2439e6d2e958Smrg ;; 2440e6d2e958Smrg 2441e6d2e958Smrg --no-silent|--no-quiet) 2442e6d2e958Smrg opt_quiet=false 2443e6d2e958Smrg func_append preserve_args " $_G_opt" 2444e6d2e958Smrg ;; 2445e6d2e958Smrg 2446e6d2e958Smrg --no-warnings|--no-warning|--no-warn) 2447e6d2e958Smrg opt_warning=false 2448e6d2e958Smrg func_append preserve_args " $_G_opt" 2449e6d2e958Smrg ;; 2450e6d2e958Smrg 2451e6d2e958Smrg --no-verbose) 2452e6d2e958Smrg opt_verbose=false 2453e6d2e958Smrg func_append preserve_args " $_G_opt" 2454e6d2e958Smrg ;; 2455e6d2e958Smrg 2456e6d2e958Smrg --silent|--quiet) 2457e6d2e958Smrg opt_quiet=: 2458e6d2e958Smrg opt_verbose=false 2459e6d2e958Smrg func_append preserve_args " $_G_opt" 2460e6d2e958Smrg ;; 2461e6d2e958Smrg 2462e6d2e958Smrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 2463e6d2e958Smrg opt_tag=$1 2464e6d2e958Smrg func_append preserve_args " $_G_opt $1" 2465e6d2e958Smrg func_enable_tag "$1" 2466e6d2e958Smrg shift 2467e6d2e958Smrg ;; 2468e6d2e958Smrg 2469e6d2e958Smrg --verbose|-v) opt_quiet=false 2470e6d2e958Smrg opt_verbose=: 2471e6d2e958Smrg func_append preserve_args " $_G_opt" 2472e6d2e958Smrg ;; 2473e6d2e958Smrg 24746ad5a0e2Smrg # An option not handled by this hook function: 24756ad5a0e2Smrg *) set dummy "$_G_opt" ${1+"$@"} ; shift 24766ad5a0e2Smrg _G_match_lt_parse_options=false 24776ad5a0e2Smrg break 24786ad5a0e2Smrg ;; 2479e6d2e958Smrg esac 24806ad5a0e2Smrg $_G_match_lt_parse_options && _G_rc_lt_parse_options=: 2481e6d2e958Smrg done 2482899129b3Smrg 24836ad5a0e2Smrg if $_G_rc_lt_parse_options; then 24846ad5a0e2Smrg # save modified positional parameters for caller 24856ad5a0e2Smrg func_quote_for_eval ${1+"$@"} 24866ad5a0e2Smrg libtool_parse_options_result=$func_quote_for_eval_result 24876ad5a0e2Smrg fi 2488899129b3Smrg 24896ad5a0e2Smrg $_G_rc_lt_parse_options 2490e6d2e958Smrg} 2491e6d2e958Smrgfunc_add_hook func_parse_options libtool_parse_options 249247e89262Smrg 2493bd1da9d7Smrg 249447e89262Smrg 2495e6d2e958Smrg# libtool_validate_options [ARG]... 2496e6d2e958Smrg# --------------------------------- 2497e6d2e958Smrg# Perform any sanity checks on option settings and/or unconsumed 2498e6d2e958Smrg# arguments. 2499e6d2e958Smrglibtool_validate_options () 2500e6d2e958Smrg{ 2501e6d2e958Smrg # save first non-option argument 2502e6d2e958Smrg if test 0 -lt $#; then 2503e6d2e958Smrg nonopt=$1 2504e6d2e958Smrg shift 250547e89262Smrg fi 250647e89262Smrg 2507e6d2e958Smrg # preserve --debug 2508e6d2e958Smrg test : = "$debug_cmd" || func_append preserve_args " --debug" 250947e89262Smrg 2510e6d2e958Smrg case $host in 2511e6d2e958Smrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2512e6d2e958Smrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2513e6d2e958Smrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2514e6d2e958Smrg # don't eliminate duplications in $postdeps and $predeps 2515e6d2e958Smrg opt_duplicate_compiler_generated_deps=: 2516e6d2e958Smrg ;; 2517e6d2e958Smrg *) 2518e6d2e958Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2519e6d2e958Smrg ;; 2520e6d2e958Smrg esac 252147e89262Smrg 2522e6d2e958Smrg $opt_help || { 2523e6d2e958Smrg # Sanity checks first: 2524e6d2e958Smrg func_check_version_match 2525e6d2e958Smrg 2526e6d2e958Smrg test yes != "$build_libtool_libs" \ 2527e6d2e958Smrg && test yes != "$build_old_libs" \ 2528e6d2e958Smrg && func_fatal_configuration "not configured to build any kind of library" 2529e6d2e958Smrg 2530e6d2e958Smrg # Darwin sucks 2531e6d2e958Smrg eval std_shrext=\"$shrext_cmds\" 2532e6d2e958Smrg 2533e6d2e958Smrg # Only execute mode is allowed to have -dlopen flags. 2534e6d2e958Smrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2535e6d2e958Smrg func_error "unrecognized option '-dlopen'" 2536e6d2e958Smrg $ECHO "$help" 1>&2 2537e6d2e958Smrg exit $EXIT_FAILURE 2538e6d2e958Smrg fi 253947e89262Smrg 2540e6d2e958Smrg # Change the help message to a mode-specific one. 2541e6d2e958Smrg generic_help=$help 2542e6d2e958Smrg help="Try '$progname --help --mode=$opt_mode' for more information." 2543e6d2e958Smrg } 254447e89262Smrg 2545e6d2e958Smrg # Pass back the unparsed argument list 2546e6d2e958Smrg func_quote_for_eval ${1+"$@"} 2547e6d2e958Smrg libtool_validate_options_result=$func_quote_for_eval_result 2548899129b3Smrg} 2549e6d2e958Smrgfunc_add_hook func_validate_options libtool_validate_options 255047e89262Smrg 255147e89262Smrg 2552e6d2e958Smrg# Process options as early as possible so that --help and --version 2553e6d2e958Smrg# can return quickly. 2554e6d2e958Smrgfunc_options ${1+"$@"} 2555e6d2e958Smrgeval set dummy "$func_options_result"; shift 2556e6d2e958Smrg 2557bd1da9d7Smrg 2558bd1da9d7Smrg 2559899129b3Smrg## ----------- ## 2560899129b3Smrg## Main. ## 2561899129b3Smrg## ----------- ## 2562bd1da9d7Smrg 2563e6d2e958Smrgmagic='%%%MAGIC variable%%%' 2564e6d2e958Smrgmagic_exe='%%%MAGIC EXE variable%%%' 2565e6d2e958Smrg 2566e6d2e958Smrg# Global variables. 2567e6d2e958Smrgextracted_archives= 2568e6d2e958Smrgextracted_serial=0 2569e6d2e958Smrg 2570e6d2e958Smrg# If this variable is set in any of the actions, the command in it 2571e6d2e958Smrg# will be execed at the end. This prevents here-documents from being 2572e6d2e958Smrg# left over by shells. 2573e6d2e958Smrgexec_cmd= 2574e6d2e958Smrg 2575e6d2e958Smrg 2576e6d2e958Smrg# A function that is used when there is no print builtin or printf. 2577e6d2e958Smrgfunc_fallback_echo () 2578e6d2e958Smrg{ 2579e6d2e958Smrg eval 'cat <<_LTECHO_EOF 2580e6d2e958Smrg$1 2581e6d2e958Smrg_LTECHO_EOF' 2582e6d2e958Smrg} 2583e6d2e958Smrg 2584e6d2e958Smrg# func_generated_by_libtool 2585e6d2e958Smrg# True iff stdin has been generated by Libtool. This function is only 2586e6d2e958Smrg# a basic sanity check; it will hardly flush out determined imposters. 2587e6d2e958Smrgfunc_generated_by_libtool_p () 2588e6d2e958Smrg{ 2589e6d2e958Smrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2590e6d2e958Smrg} 2591e6d2e958Smrg 259247e89262Smrg# func_lalib_p file 2593e6d2e958Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 259447e89262Smrg# This function is only a basic sanity check; it will hardly flush out 259547e89262Smrg# determined imposters. 259647e89262Smrgfunc_lalib_p () 259747e89262Smrg{ 259847e89262Smrg test -f "$1" && 2599e6d2e958Smrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 260047e89262Smrg} 2601bd1da9d7Smrg 260247e89262Smrg# func_lalib_unsafe_p file 2603e6d2e958Smrg# True iff FILE is a libtool '.la' library or '.lo' object file. 260447e89262Smrg# This function implements the same check as func_lalib_p without 260547e89262Smrg# resorting to external programs. To this end, it redirects stdin and 260647e89262Smrg# closes it afterwards, without saving the original file descriptor. 260747e89262Smrg# As a safety measure, use it only where a negative result would be 2608e6d2e958Smrg# fatal anyway. Works if 'file' does not exist. 260947e89262Smrgfunc_lalib_unsafe_p () 261047e89262Smrg{ 261147e89262Smrg lalib_p=no 261247e89262Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 261347e89262Smrg for lalib_p_l in 1 2 3 4 261447e89262Smrg do 261547e89262Smrg read lalib_p_line 2616e6d2e958Smrg case $lalib_p_line in 261747e89262Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 261847e89262Smrg esac 261947e89262Smrg done 262047e89262Smrg exec 0<&5 5<&- 262147e89262Smrg fi 2622e6d2e958Smrg test yes = "$lalib_p" 262347e89262Smrg} 2624bd1da9d7Smrg 262547e89262Smrg# func_ltwrapper_script_p file 262647e89262Smrg# True iff FILE is a libtool wrapper script 262747e89262Smrg# This function is only a basic sanity check; it will hardly flush out 262847e89262Smrg# determined imposters. 262947e89262Smrgfunc_ltwrapper_script_p () 263047e89262Smrg{ 2631e6d2e958Smrg test -f "$1" && 2632e6d2e958Smrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 263347e89262Smrg} 2634bd1da9d7Smrg 263547e89262Smrg# func_ltwrapper_executable_p file 263647e89262Smrg# True iff FILE is a libtool wrapper executable 263747e89262Smrg# This function is only a basic sanity check; it will hardly flush out 263847e89262Smrg# determined imposters. 263947e89262Smrgfunc_ltwrapper_executable_p () 264047e89262Smrg{ 264147e89262Smrg func_ltwrapper_exec_suffix= 264247e89262Smrg case $1 in 264347e89262Smrg *.exe) ;; 264447e89262Smrg *) func_ltwrapper_exec_suffix=.exe ;; 264547e89262Smrg esac 264647e89262Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 264747e89262Smrg} 264847e89262Smrg 264947e89262Smrg# func_ltwrapper_scriptname file 265047e89262Smrg# Assumes file is an ltwrapper_executable 265147e89262Smrg# uses $file to determine the appropriate filename for a 265247e89262Smrg# temporary ltwrapper_script. 265347e89262Smrgfunc_ltwrapper_scriptname () 265447e89262Smrg{ 2655899129b3Smrg func_dirname_and_basename "$1" "" "." 2656899129b3Smrg func_stripname '' '.exe' "$func_basename_result" 2657e6d2e958Smrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 265847e89262Smrg} 265947e89262Smrg 266047e89262Smrg# func_ltwrapper_p file 266147e89262Smrg# True iff FILE is a libtool wrapper script or wrapper executable 266247e89262Smrg# This function is only a basic sanity check; it will hardly flush out 266347e89262Smrg# determined imposters. 266447e89262Smrgfunc_ltwrapper_p () 266547e89262Smrg{ 266647e89262Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 266747e89262Smrg} 266847e89262Smrg 266947e89262Smrg 267047e89262Smrg# func_execute_cmds commands fail_cmd 267147e89262Smrg# Execute tilde-delimited COMMANDS. 267247e89262Smrg# If FAIL_CMD is given, eval that upon failure. 267347e89262Smrg# FAIL_CMD may read-access the current command in variable CMD! 267447e89262Smrgfunc_execute_cmds () 267547e89262Smrg{ 2676e6d2e958Smrg $debug_cmd 2677e6d2e958Smrg 267847e89262Smrg save_ifs=$IFS; IFS='~' 267947e89262Smrg for cmd in $1; do 2680e6d2e958Smrg IFS=$sp$nl 268147e89262Smrg eval cmd=\"$cmd\" 2682e6d2e958Smrg IFS=$save_ifs 268347e89262Smrg func_show_eval "$cmd" "${2-:}" 268447e89262Smrg done 268547e89262Smrg IFS=$save_ifs 268647e89262Smrg} 268747e89262Smrg 268847e89262Smrg 268947e89262Smrg# func_source file 269047e89262Smrg# Source FILE, adding directory component if necessary. 269147e89262Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 269247e89262Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 269347e89262Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 2694e6d2e958Smrg# 'FILE.' does not work on cygwin managed mounts. 269547e89262Smrgfunc_source () 269647e89262Smrg{ 2697e6d2e958Smrg $debug_cmd 2698e6d2e958Smrg 269947e89262Smrg case $1 in 270047e89262Smrg */* | *\\*) . "$1" ;; 270147e89262Smrg *) . "./$1" ;; 270247e89262Smrg esac 270347e89262Smrg} 270447e89262Smrg 270547e89262Smrg 2706899129b3Smrg# func_resolve_sysroot PATH 2707899129b3Smrg# Replace a leading = in PATH with a sysroot. Store the result into 2708899129b3Smrg# func_resolve_sysroot_result 2709899129b3Smrgfunc_resolve_sysroot () 2710899129b3Smrg{ 2711899129b3Smrg func_resolve_sysroot_result=$1 2712899129b3Smrg case $func_resolve_sysroot_result in 2713899129b3Smrg =*) 2714899129b3Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 2715899129b3Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2716899129b3Smrg ;; 2717899129b3Smrg esac 2718899129b3Smrg} 2719899129b3Smrg 2720899129b3Smrg# func_replace_sysroot PATH 2721899129b3Smrg# If PATH begins with the sysroot, replace it with = and 2722899129b3Smrg# store the result into func_replace_sysroot_result. 2723899129b3Smrgfunc_replace_sysroot () 2724899129b3Smrg{ 2725e6d2e958Smrg case $lt_sysroot:$1 in 2726899129b3Smrg ?*:"$lt_sysroot"*) 2727899129b3Smrg func_stripname "$lt_sysroot" '' "$1" 2728e6d2e958Smrg func_replace_sysroot_result='='$func_stripname_result 2729899129b3Smrg ;; 2730899129b3Smrg *) 2731899129b3Smrg # Including no sysroot. 2732899129b3Smrg func_replace_sysroot_result=$1 2733899129b3Smrg ;; 2734899129b3Smrg esac 2735899129b3Smrg} 2736899129b3Smrg 273747e89262Smrg# func_infer_tag arg 273847e89262Smrg# Infer tagged configuration to use if any are available and 273947e89262Smrg# if one wasn't chosen via the "--tag" command line option. 274047e89262Smrg# Only attempt this if the compiler in the base compile 274147e89262Smrg# command doesn't match the default compiler. 274247e89262Smrg# arg is usually of the form 'gcc ...' 274347e89262Smrgfunc_infer_tag () 274447e89262Smrg{ 2745e6d2e958Smrg $debug_cmd 2746e6d2e958Smrg 274747e89262Smrg if test -n "$available_tags" && test -z "$tagname"; then 274847e89262Smrg CC_quoted= 274947e89262Smrg for arg in $CC; do 2750899129b3Smrg func_append_quoted CC_quoted "$arg" 275147e89262Smrg done 275247e89262Smrg CC_expanded=`func_echo_all $CC` 275347e89262Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 275447e89262Smrg case $@ in 275547e89262Smrg # Blanks in the command may have been stripped by the calling shell, 275647e89262Smrg # but not from the CC environment variable when configure was run. 275747e89262Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 275847e89262Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 275947e89262Smrg # Blanks at the start of $base_compile will cause this to fail 276047e89262Smrg # if we don't check for them as well. 276147e89262Smrg *) 276247e89262Smrg for z in $available_tags; do 276347e89262Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 276447e89262Smrg # Evaluate the configuration. 2765e6d2e958Smrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 276647e89262Smrg CC_quoted= 276747e89262Smrg for arg in $CC; do 276847e89262Smrg # Double-quote args containing other shell metacharacters. 2769899129b3Smrg func_append_quoted CC_quoted "$arg" 277047e89262Smrg done 277147e89262Smrg CC_expanded=`func_echo_all $CC` 277247e89262Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 277347e89262Smrg case "$@ " in 277447e89262Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 277547e89262Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 277647e89262Smrg # The compiler in the base compile command matches 277747e89262Smrg # the one in the tagged configuration. 277847e89262Smrg # Assume this is the tagged configuration we want. 277947e89262Smrg tagname=$z 278047e89262Smrg break 278147e89262Smrg ;; 278247e89262Smrg esac 278347e89262Smrg fi 278447e89262Smrg done 278547e89262Smrg # If $tagname still isn't set, then no tagged configuration 278647e89262Smrg # was found and let the user know that the "--tag" command 278747e89262Smrg # line option must be used. 278847e89262Smrg if test -z "$tagname"; then 278947e89262Smrg func_echo "unable to infer tagged configuration" 2790e6d2e958Smrg func_fatal_error "specify a tag with '--tag'" 279147e89262Smrg# else 279247e89262Smrg# func_verbose "using $tagname tagged configuration" 279347e89262Smrg fi 279447e89262Smrg ;; 279547e89262Smrg esac 279647e89262Smrg fi 279747e89262Smrg} 279847e89262Smrg 279947e89262Smrg 2800899129b3Smrg 2801899129b3Smrg# func_write_libtool_object output_name pic_name nonpic_name 2802899129b3Smrg# Create a libtool object file (analogous to a ".la" file), 2803899129b3Smrg# but don't create it if we're doing a dry run. 2804899129b3Smrgfunc_write_libtool_object () 2805899129b3Smrg{ 2806e6d2e958Smrg write_libobj=$1 2807e6d2e958Smrg if test yes = "$build_libtool_libs"; then 2808e6d2e958Smrg write_lobj=\'$2\' 2809899129b3Smrg else 2810899129b3Smrg write_lobj=none 2811899129b3Smrg fi 2812899129b3Smrg 2813e6d2e958Smrg if test yes = "$build_old_libs"; then 2814e6d2e958Smrg write_oldobj=\'$3\' 2815899129b3Smrg else 2816899129b3Smrg write_oldobj=none 2817899129b3Smrg fi 2818899129b3Smrg 2819899129b3Smrg $opt_dry_run || { 2820899129b3Smrg cat >${write_libobj}T <<EOF 2821899129b3Smrg# $write_libobj - a libtool object file 2822e6d2e958Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2823899129b3Smrg# 2824899129b3Smrg# Please DO NOT delete this file! 2825899129b3Smrg# It is necessary for linking the library. 2826899129b3Smrg 2827899129b3Smrg# Name of the PIC object. 2828899129b3Smrgpic_object=$write_lobj 2829899129b3Smrg 2830899129b3Smrg# Name of the non-PIC object 2831899129b3Smrgnon_pic_object=$write_oldobj 2832899129b3Smrg 2833899129b3SmrgEOF 2834e6d2e958Smrg $MV "${write_libobj}T" "$write_libobj" 2835899129b3Smrg } 2836899129b3Smrg} 2837899129b3Smrg 2838899129b3Smrg 2839899129b3Smrg################################################## 2840899129b3Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 2841899129b3Smrg################################################## 2842899129b3Smrg 2843899129b3Smrg# func_convert_core_file_wine_to_w32 ARG 2844899129b3Smrg# Helper function used by file name conversion functions when $build is *nix, 2845899129b3Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 2846899129b3Smrg# correctly configured wine environment available, with the winepath program 2847899129b3Smrg# in $build's $PATH. 2848899129b3Smrg# 2849899129b3Smrg# ARG is the $build file name to be converted to w32 format. 2850899129b3Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 2851899129b3Smrg# be empty on error (or when ARG is empty) 2852899129b3Smrgfunc_convert_core_file_wine_to_w32 () 2853899129b3Smrg{ 2854e6d2e958Smrg $debug_cmd 2855e6d2e958Smrg 2856e6d2e958Smrg func_convert_core_file_wine_to_w32_result=$1 2857899129b3Smrg if test -n "$1"; then 2858899129b3Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 2859899129b3Smrg # are forced to check the contents of stdout. On the other hand, if the 2860899129b3Smrg # command is not found, the shell will set an exit code of 127 and print 2861899129b3Smrg # *an error message* to stdout. So we must check for both error code of 2862899129b3Smrg # zero AND non-empty stdout, which explains the odd construction: 2863899129b3Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 2864e6d2e958Smrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 2865899129b3Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 2866e6d2e958Smrg $SED -e "$sed_naive_backslashify"` 2867899129b3Smrg else 2868899129b3Smrg func_convert_core_file_wine_to_w32_result= 2869899129b3Smrg fi 2870899129b3Smrg fi 2871899129b3Smrg} 2872899129b3Smrg# end: func_convert_core_file_wine_to_w32 2873899129b3Smrg 2874899129b3Smrg 2875899129b3Smrg# func_convert_core_path_wine_to_w32 ARG 2876899129b3Smrg# Helper function used by path conversion functions when $build is *nix, and 2877899129b3Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 2878899129b3Smrg# configured wine environment available, with the winepath program in $build's 2879899129b3Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 2880899129b3Smrg# 2881899129b3Smrg# ARG is path to be converted from $build format to win32. 2882899129b3Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 2883899129b3Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 2884899129b3Smrg# are convertible, then the result may be empty. 2885899129b3Smrgfunc_convert_core_path_wine_to_w32 () 2886899129b3Smrg{ 2887e6d2e958Smrg $debug_cmd 2888e6d2e958Smrg 2889899129b3Smrg # unfortunately, winepath doesn't convert paths, only file names 2890e6d2e958Smrg func_convert_core_path_wine_to_w32_result= 2891899129b3Smrg if test -n "$1"; then 2892899129b3Smrg oldIFS=$IFS 2893899129b3Smrg IFS=: 2894899129b3Smrg for func_convert_core_path_wine_to_w32_f in $1; do 2895899129b3Smrg IFS=$oldIFS 2896899129b3Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 2897e6d2e958Smrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 2898899129b3Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 2899e6d2e958Smrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 2900899129b3Smrg else 2901899129b3Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 2902899129b3Smrg fi 2903899129b3Smrg fi 2904899129b3Smrg done 2905899129b3Smrg IFS=$oldIFS 2906899129b3Smrg fi 2907899129b3Smrg} 2908899129b3Smrg# end: func_convert_core_path_wine_to_w32 2909899129b3Smrg 2910899129b3Smrg 2911899129b3Smrg# func_cygpath ARGS... 2912899129b3Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 2913899129b3Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 2914899129b3Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 2915899129b3Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 2916899129b3Smrg# file name or path is assumed to be in w32 format, as previously converted 2917899129b3Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 2918899129b3Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 2919899129b3Smrg# Cygwin format). Returns an empty string on error. 2920899129b3Smrg# 2921899129b3Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 2922899129b3Smrg# be converted. 2923899129b3Smrg# 2924899129b3Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 2925899129b3Smrg# environment variable; do not put it in $PATH. 2926899129b3Smrgfunc_cygpath () 2927899129b3Smrg{ 2928e6d2e958Smrg $debug_cmd 2929e6d2e958Smrg 2930899129b3Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 2931899129b3Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 2932899129b3Smrg if test "$?" -ne 0; then 2933899129b3Smrg # on failure, ensure result is empty 2934899129b3Smrg func_cygpath_result= 2935899129b3Smrg fi 2936899129b3Smrg else 2937899129b3Smrg func_cygpath_result= 2938e6d2e958Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 2939899129b3Smrg fi 2940899129b3Smrg} 2941899129b3Smrg#end: func_cygpath 2942899129b3Smrg 2943899129b3Smrg 2944899129b3Smrg# func_convert_core_msys_to_w32 ARG 2945899129b3Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 2946899129b3Smrg# result in func_convert_core_msys_to_w32_result. 2947899129b3Smrgfunc_convert_core_msys_to_w32 () 2948899129b3Smrg{ 2949e6d2e958Smrg $debug_cmd 2950e6d2e958Smrg 2951899129b3Smrg # awkward: cmd appends spaces to result 2952899129b3Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 2953e6d2e958Smrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 2954899129b3Smrg} 2955899129b3Smrg#end: func_convert_core_msys_to_w32 2956899129b3Smrg 2957899129b3Smrg 2958899129b3Smrg# func_convert_file_check ARG1 ARG2 2959899129b3Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 2960899129b3Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 2961899129b3Smrg# func_to_host_file_result to ARG1). 2962899129b3Smrgfunc_convert_file_check () 2963899129b3Smrg{ 2964e6d2e958Smrg $debug_cmd 2965e6d2e958Smrg 2966e6d2e958Smrg if test -z "$2" && test -n "$1"; then 2967899129b3Smrg func_error "Could not determine host file name corresponding to" 2968e6d2e958Smrg func_error " '$1'" 2969899129b3Smrg func_error "Continuing, but uninstalled executables may not work." 2970899129b3Smrg # Fallback: 2971e6d2e958Smrg func_to_host_file_result=$1 2972899129b3Smrg fi 2973899129b3Smrg} 2974899129b3Smrg# end func_convert_file_check 2975899129b3Smrg 2976899129b3Smrg 2977899129b3Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 2978899129b3Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 2979899129b3Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 2980899129b3Smrg# func_to_host_file_result to a simplistic fallback value (see below). 2981899129b3Smrgfunc_convert_path_check () 2982899129b3Smrg{ 2983e6d2e958Smrg $debug_cmd 2984e6d2e958Smrg 2985899129b3Smrg if test -z "$4" && test -n "$3"; then 2986899129b3Smrg func_error "Could not determine the host path corresponding to" 2987e6d2e958Smrg func_error " '$3'" 2988899129b3Smrg func_error "Continuing, but uninstalled executables may not work." 2989899129b3Smrg # Fallback. This is a deliberately simplistic "conversion" and 2990899129b3Smrg # should not be "improved". See libtool.info. 2991899129b3Smrg if test "x$1" != "x$2"; then 2992899129b3Smrg lt_replace_pathsep_chars="s|$1|$2|g" 2993899129b3Smrg func_to_host_path_result=`echo "$3" | 2994899129b3Smrg $SED -e "$lt_replace_pathsep_chars"` 2995899129b3Smrg else 2996e6d2e958Smrg func_to_host_path_result=$3 2997899129b3Smrg fi 2998899129b3Smrg fi 2999899129b3Smrg} 3000899129b3Smrg# end func_convert_path_check 3001899129b3Smrg 3002899129b3Smrg 3003899129b3Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 3004899129b3Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 3005899129b3Smrg# and appending REPL if ORIG matches BACKPAT. 3006899129b3Smrgfunc_convert_path_front_back_pathsep () 3007899129b3Smrg{ 3008e6d2e958Smrg $debug_cmd 3009e6d2e958Smrg 3010899129b3Smrg case $4 in 3011e6d2e958Smrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 3012899129b3Smrg ;; 3013899129b3Smrg esac 3014899129b3Smrg case $4 in 3015899129b3Smrg $2 ) func_append func_to_host_path_result "$3" 3016899129b3Smrg ;; 3017899129b3Smrg esac 3018899129b3Smrg} 3019899129b3Smrg# end func_convert_path_front_back_pathsep 3020899129b3Smrg 3021899129b3Smrg 3022899129b3Smrg################################################## 3023899129b3Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 3024899129b3Smrg################################################## 3025e6d2e958Smrg# invoked via '$to_host_file_cmd ARG' 3026899129b3Smrg# 3027899129b3Smrg# In each case, ARG is the path to be converted from $build to $host format. 3028899129b3Smrg# Result will be available in $func_to_host_file_result. 3029899129b3Smrg 3030899129b3Smrg 3031899129b3Smrg# func_to_host_file ARG 3032899129b3Smrg# Converts the file name ARG from $build format to $host format. Return result 3033899129b3Smrg# in func_to_host_file_result. 3034899129b3Smrgfunc_to_host_file () 3035899129b3Smrg{ 3036e6d2e958Smrg $debug_cmd 3037e6d2e958Smrg 3038899129b3Smrg $to_host_file_cmd "$1" 3039899129b3Smrg} 3040899129b3Smrg# end func_to_host_file 3041899129b3Smrg 3042899129b3Smrg 3043899129b3Smrg# func_to_tool_file ARG LAZY 3044899129b3Smrg# converts the file name ARG from $build format to toolchain format. Return 3045899129b3Smrg# result in func_to_tool_file_result. If the conversion in use is listed 3046899129b3Smrg# in (the comma separated) LAZY, no conversion takes place. 3047899129b3Smrgfunc_to_tool_file () 3048899129b3Smrg{ 3049e6d2e958Smrg $debug_cmd 3050e6d2e958Smrg 3051899129b3Smrg case ,$2, in 3052899129b3Smrg *,"$to_tool_file_cmd",*) 3053899129b3Smrg func_to_tool_file_result=$1 3054899129b3Smrg ;; 3055899129b3Smrg *) 3056899129b3Smrg $to_tool_file_cmd "$1" 3057899129b3Smrg func_to_tool_file_result=$func_to_host_file_result 3058899129b3Smrg ;; 3059899129b3Smrg esac 3060899129b3Smrg} 3061899129b3Smrg# end func_to_tool_file 3062899129b3Smrg 3063899129b3Smrg 3064899129b3Smrg# func_convert_file_noop ARG 3065899129b3Smrg# Copy ARG to func_to_host_file_result. 3066899129b3Smrgfunc_convert_file_noop () 3067899129b3Smrg{ 3068e6d2e958Smrg func_to_host_file_result=$1 3069899129b3Smrg} 3070899129b3Smrg# end func_convert_file_noop 3071899129b3Smrg 3072899129b3Smrg 3073899129b3Smrg# func_convert_file_msys_to_w32 ARG 3074899129b3Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 3075899129b3Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3076899129b3Smrg# func_to_host_file_result. 3077899129b3Smrgfunc_convert_file_msys_to_w32 () 3078899129b3Smrg{ 3079e6d2e958Smrg $debug_cmd 3080e6d2e958Smrg 3081e6d2e958Smrg func_to_host_file_result=$1 3082899129b3Smrg if test -n "$1"; then 3083899129b3Smrg func_convert_core_msys_to_w32 "$1" 3084e6d2e958Smrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 3085899129b3Smrg fi 3086899129b3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3087899129b3Smrg} 3088899129b3Smrg# end func_convert_file_msys_to_w32 3089899129b3Smrg 3090899129b3Smrg 3091899129b3Smrg# func_convert_file_cygwin_to_w32 ARG 3092899129b3Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 3093899129b3Smrg# func_to_host_file_result. 3094899129b3Smrgfunc_convert_file_cygwin_to_w32 () 3095899129b3Smrg{ 3096e6d2e958Smrg $debug_cmd 3097e6d2e958Smrg 3098e6d2e958Smrg func_to_host_file_result=$1 3099899129b3Smrg if test -n "$1"; then 3100899129b3Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3101899129b3Smrg # LT_CYGPATH in this case. 3102899129b3Smrg func_to_host_file_result=`cygpath -m "$1"` 3103899129b3Smrg fi 3104899129b3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3105899129b3Smrg} 3106899129b3Smrg# end func_convert_file_cygwin_to_w32 3107899129b3Smrg 3108899129b3Smrg 3109899129b3Smrg# func_convert_file_nix_to_w32 ARG 3110899129b3Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 3111899129b3Smrg# and a working winepath. Returns result in func_to_host_file_result. 3112899129b3Smrgfunc_convert_file_nix_to_w32 () 3113899129b3Smrg{ 3114e6d2e958Smrg $debug_cmd 3115e6d2e958Smrg 3116e6d2e958Smrg func_to_host_file_result=$1 3117899129b3Smrg if test -n "$1"; then 3118899129b3Smrg func_convert_core_file_wine_to_w32 "$1" 3119e6d2e958Smrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3120899129b3Smrg fi 3121899129b3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3122899129b3Smrg} 3123899129b3Smrg# end func_convert_file_nix_to_w32 3124899129b3Smrg 3125899129b3Smrg 3126899129b3Smrg# func_convert_file_msys_to_cygwin ARG 3127899129b3Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3128899129b3Smrg# Returns result in func_to_host_file_result. 3129899129b3Smrgfunc_convert_file_msys_to_cygwin () 3130899129b3Smrg{ 3131e6d2e958Smrg $debug_cmd 3132e6d2e958Smrg 3133e6d2e958Smrg func_to_host_file_result=$1 3134899129b3Smrg if test -n "$1"; then 3135899129b3Smrg func_convert_core_msys_to_w32 "$1" 3136899129b3Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 3137e6d2e958Smrg func_to_host_file_result=$func_cygpath_result 3138899129b3Smrg fi 3139899129b3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3140899129b3Smrg} 3141899129b3Smrg# end func_convert_file_msys_to_cygwin 3142899129b3Smrg 3143899129b3Smrg 3144899129b3Smrg# func_convert_file_nix_to_cygwin ARG 3145899129b3Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3146899129b3Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3147899129b3Smrg# in func_to_host_file_result. 3148899129b3Smrgfunc_convert_file_nix_to_cygwin () 3149899129b3Smrg{ 3150e6d2e958Smrg $debug_cmd 3151e6d2e958Smrg 3152e6d2e958Smrg func_to_host_file_result=$1 3153899129b3Smrg if test -n "$1"; then 3154899129b3Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3155899129b3Smrg func_convert_core_file_wine_to_w32 "$1" 3156899129b3Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3157e6d2e958Smrg func_to_host_file_result=$func_cygpath_result 3158899129b3Smrg fi 3159899129b3Smrg func_convert_file_check "$1" "$func_to_host_file_result" 3160899129b3Smrg} 3161899129b3Smrg# end func_convert_file_nix_to_cygwin 3162899129b3Smrg 3163899129b3Smrg 3164899129b3Smrg############################################# 3165899129b3Smrg# $build to $host PATH CONVERSION FUNCTIONS # 3166899129b3Smrg############################################# 3167e6d2e958Smrg# invoked via '$to_host_path_cmd ARG' 3168899129b3Smrg# 3169899129b3Smrg# In each case, ARG is the path to be converted from $build to $host format. 3170899129b3Smrg# The result will be available in $func_to_host_path_result. 3171899129b3Smrg# 3172899129b3Smrg# Path separators are also converted from $build format to $host format. If 3173899129b3Smrg# ARG begins or ends with a path separator character, it is preserved (but 3174899129b3Smrg# converted to $host format) on output. 3175899129b3Smrg# 3176899129b3Smrg# All path conversion functions are named using the following convention: 3177899129b3Smrg# file name conversion function : func_convert_file_X_to_Y () 3178899129b3Smrg# path conversion function : func_convert_path_X_to_Y () 3179899129b3Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 3180899129b3Smrg# same. If conversion functions are added for new $build/$host combinations, 3181899129b3Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3182899129b3Smrg# will break. 3183899129b3Smrg 3184899129b3Smrg 3185899129b3Smrg# func_init_to_host_path_cmd 3186899129b3Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3187899129b3Smrg# appropriate value, based on the value of $to_host_file_cmd. 3188899129b3Smrgto_host_path_cmd= 3189899129b3Smrgfunc_init_to_host_path_cmd () 3190899129b3Smrg{ 3191e6d2e958Smrg $debug_cmd 3192e6d2e958Smrg 3193899129b3Smrg if test -z "$to_host_path_cmd"; then 3194899129b3Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3195e6d2e958Smrg to_host_path_cmd=func_convert_path_$func_stripname_result 3196899129b3Smrg fi 3197899129b3Smrg} 3198899129b3Smrg 3199899129b3Smrg 3200899129b3Smrg# func_to_host_path ARG 3201899129b3Smrg# Converts the path ARG from $build format to $host format. Return result 3202899129b3Smrg# in func_to_host_path_result. 3203899129b3Smrgfunc_to_host_path () 3204899129b3Smrg{ 3205e6d2e958Smrg $debug_cmd 3206e6d2e958Smrg 3207899129b3Smrg func_init_to_host_path_cmd 3208899129b3Smrg $to_host_path_cmd "$1" 3209899129b3Smrg} 3210899129b3Smrg# end func_to_host_path 3211899129b3Smrg 3212899129b3Smrg 3213899129b3Smrg# func_convert_path_noop ARG 3214899129b3Smrg# Copy ARG to func_to_host_path_result. 3215899129b3Smrgfunc_convert_path_noop () 3216899129b3Smrg{ 3217e6d2e958Smrg func_to_host_path_result=$1 3218899129b3Smrg} 3219899129b3Smrg# end func_convert_path_noop 3220899129b3Smrg 3221899129b3Smrg 3222899129b3Smrg# func_convert_path_msys_to_w32 ARG 3223899129b3Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3224899129b3Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 3225899129b3Smrg# func_to_host_path_result. 3226899129b3Smrgfunc_convert_path_msys_to_w32 () 3227899129b3Smrg{ 3228e6d2e958Smrg $debug_cmd 3229e6d2e958Smrg 3230e6d2e958Smrg func_to_host_path_result=$1 3231899129b3Smrg if test -n "$1"; then 3232899129b3Smrg # Remove leading and trailing path separator characters from ARG. MSYS 3233899129b3Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3234899129b3Smrg # and winepath ignores them completely. 3235899129b3Smrg func_stripname : : "$1" 3236899129b3Smrg func_to_host_path_tmp1=$func_stripname_result 3237899129b3Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3238e6d2e958Smrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 3239899129b3Smrg func_convert_path_check : ";" \ 3240899129b3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3241899129b3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3242899129b3Smrg fi 3243899129b3Smrg} 3244899129b3Smrg# end func_convert_path_msys_to_w32 3245899129b3Smrg 3246899129b3Smrg 3247899129b3Smrg# func_convert_path_cygwin_to_w32 ARG 3248899129b3Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 3249899129b3Smrg# func_to_host_file_result. 3250899129b3Smrgfunc_convert_path_cygwin_to_w32 () 3251899129b3Smrg{ 3252e6d2e958Smrg $debug_cmd 3253e6d2e958Smrg 3254e6d2e958Smrg func_to_host_path_result=$1 3255899129b3Smrg if test -n "$1"; then 3256899129b3Smrg # See func_convert_path_msys_to_w32: 3257899129b3Smrg func_stripname : : "$1" 3258899129b3Smrg func_to_host_path_tmp1=$func_stripname_result 3259899129b3Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3260899129b3Smrg func_convert_path_check : ";" \ 3261899129b3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3262899129b3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3263899129b3Smrg fi 3264899129b3Smrg} 3265899129b3Smrg# end func_convert_path_cygwin_to_w32 3266899129b3Smrg 3267899129b3Smrg 3268899129b3Smrg# func_convert_path_nix_to_w32 ARG 3269899129b3Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 3270899129b3Smrg# a working winepath. Returns result in func_to_host_file_result. 3271899129b3Smrgfunc_convert_path_nix_to_w32 () 327247e89262Smrg{ 3273e6d2e958Smrg $debug_cmd 3274e6d2e958Smrg 3275e6d2e958Smrg func_to_host_path_result=$1 3276899129b3Smrg if test -n "$1"; then 3277899129b3Smrg # See func_convert_path_msys_to_w32: 3278899129b3Smrg func_stripname : : "$1" 3279899129b3Smrg func_to_host_path_tmp1=$func_stripname_result 3280899129b3Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3281e6d2e958Smrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3282899129b3Smrg func_convert_path_check : ";" \ 3283899129b3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3284899129b3Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3285899129b3Smrg fi 3286899129b3Smrg} 3287899129b3Smrg# end func_convert_path_nix_to_w32 328847e89262Smrg 328947e89262Smrg 3290899129b3Smrg# func_convert_path_msys_to_cygwin ARG 3291899129b3Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3292899129b3Smrg# Returns result in func_to_host_file_result. 3293899129b3Smrgfunc_convert_path_msys_to_cygwin () 3294899129b3Smrg{ 3295e6d2e958Smrg $debug_cmd 3296e6d2e958Smrg 3297e6d2e958Smrg func_to_host_path_result=$1 3298899129b3Smrg if test -n "$1"; then 3299899129b3Smrg # See func_convert_path_msys_to_w32: 3300899129b3Smrg func_stripname : : "$1" 3301899129b3Smrg func_to_host_path_tmp1=$func_stripname_result 3302899129b3Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3303899129b3Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3304e6d2e958Smrg func_to_host_path_result=$func_cygpath_result 3305899129b3Smrg func_convert_path_check : : \ 3306899129b3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3307899129b3Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3308899129b3Smrg fi 3309899129b3Smrg} 3310899129b3Smrg# end func_convert_path_msys_to_cygwin 331147e89262Smrg 331247e89262Smrg 3313899129b3Smrg# func_convert_path_nix_to_cygwin ARG 3314899129b3Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3315899129b3Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3316899129b3Smrg# func_to_host_file_result. 3317899129b3Smrgfunc_convert_path_nix_to_cygwin () 3318899129b3Smrg{ 3319e6d2e958Smrg $debug_cmd 3320e6d2e958Smrg 3321e6d2e958Smrg func_to_host_path_result=$1 3322899129b3Smrg if test -n "$1"; then 3323899129b3Smrg # Remove leading and trailing path separator characters from 3324899129b3Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 3325899129b3Smrg # into '.;' and ';.', and winepath ignores them completely. 3326899129b3Smrg func_stripname : : "$1" 3327899129b3Smrg func_to_host_path_tmp1=$func_stripname_result 3328899129b3Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3329899129b3Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3330e6d2e958Smrg func_to_host_path_result=$func_cygpath_result 3331899129b3Smrg func_convert_path_check : : \ 3332899129b3Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 3333899129b3Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3334899129b3Smrg fi 333547e89262Smrg} 3336899129b3Smrg# end func_convert_path_nix_to_cygwin 3337899129b3Smrg 333847e89262Smrg 3339e6d2e958Smrg# func_dll_def_p FILE 3340e6d2e958Smrg# True iff FILE is a Windows DLL '.def' file. 3341e6d2e958Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3342e6d2e958Smrgfunc_dll_def_p () 3343e6d2e958Smrg{ 3344e6d2e958Smrg $debug_cmd 3345e6d2e958Smrg 3346e6d2e958Smrg func_dll_def_p_tmp=`$SED -n \ 3347e6d2e958Smrg -e 's/^[ ]*//' \ 3348e6d2e958Smrg -e '/^\(;.*\)*$/d' \ 3349e6d2e958Smrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3350e6d2e958Smrg -e q \ 3351e6d2e958Smrg "$1"` 3352e6d2e958Smrg test DEF = "$func_dll_def_p_tmp" 3353e6d2e958Smrg} 3354e6d2e958Smrg 3355e6d2e958Smrg 335647e89262Smrg# func_mode_compile arg... 335747e89262Smrgfunc_mode_compile () 335847e89262Smrg{ 3359e6d2e958Smrg $debug_cmd 3360e6d2e958Smrg 336147e89262Smrg # Get the compilation command and the source file. 336247e89262Smrg base_compile= 3363e6d2e958Smrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 336447e89262Smrg suppress_opt=yes 336547e89262Smrg suppress_output= 336647e89262Smrg arg_mode=normal 336747e89262Smrg libobj= 336847e89262Smrg later= 336947e89262Smrg pie_flag= 337047e89262Smrg 337147e89262Smrg for arg 337247e89262Smrg do 337347e89262Smrg case $arg_mode in 337447e89262Smrg arg ) 337547e89262Smrg # do not "continue". Instead, add this to base_compile 3376e6d2e958Smrg lastarg=$arg 337747e89262Smrg arg_mode=normal 337847e89262Smrg ;; 337947e89262Smrg 338047e89262Smrg target ) 3381e6d2e958Smrg libobj=$arg 338247e89262Smrg arg_mode=normal 338347e89262Smrg continue 338447e89262Smrg ;; 338547e89262Smrg 338647e89262Smrg normal ) 338747e89262Smrg # Accept any command-line options. 338847e89262Smrg case $arg in 338947e89262Smrg -o) 339047e89262Smrg test -n "$libobj" && \ 3391e6d2e958Smrg func_fatal_error "you cannot specify '-o' more than once" 339247e89262Smrg arg_mode=target 339347e89262Smrg continue 339447e89262Smrg ;; 339547e89262Smrg 339647e89262Smrg -pie | -fpie | -fPIE) 3397899129b3Smrg func_append pie_flag " $arg" 339847e89262Smrg continue 339947e89262Smrg ;; 340047e89262Smrg 340147e89262Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 3402899129b3Smrg func_append later " $arg" 340347e89262Smrg continue 340447e89262Smrg ;; 3405bd1da9d7Smrg 3406bd1da9d7Smrg -no-suppress) 3407bd1da9d7Smrg suppress_opt=no 3408bd1da9d7Smrg continue 3409bd1da9d7Smrg ;; 3410bd1da9d7Smrg 3411bd1da9d7Smrg -Xcompiler) 3412bd1da9d7Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 3413bd1da9d7Smrg continue # The current "srcfile" will either be retained or 3414bd1da9d7Smrg ;; # replaced later. I would guess that would be a bug. 3415bd1da9d7Smrg 3416bd1da9d7Smrg -Wc,*) 341747e89262Smrg func_stripname '-Wc,' '' "$arg" 341847e89262Smrg args=$func_stripname_result 3419bd1da9d7Smrg lastarg= 3420e6d2e958Smrg save_ifs=$IFS; IFS=, 342147e89262Smrg for arg in $args; do 3422e6d2e958Smrg IFS=$save_ifs 3423899129b3Smrg func_append_quoted lastarg "$arg" 3424bd1da9d7Smrg done 3425e6d2e958Smrg IFS=$save_ifs 342647e89262Smrg func_stripname ' ' '' "$lastarg" 342747e89262Smrg lastarg=$func_stripname_result 3428bd1da9d7Smrg 3429bd1da9d7Smrg # Add the arguments to base_compile. 3430899129b3Smrg func_append base_compile " $lastarg" 3431bd1da9d7Smrg continue 3432bd1da9d7Smrg ;; 3433bd1da9d7Smrg 343447e89262Smrg *) 3435bd1da9d7Smrg # Accept the current argument as the source file. 3436bd1da9d7Smrg # The previous "srcfile" becomes the current argument. 3437bd1da9d7Smrg # 3438e6d2e958Smrg lastarg=$srcfile 3439e6d2e958Smrg srcfile=$arg 3440bd1da9d7Smrg ;; 3441bd1da9d7Smrg esac # case $arg 3442bd1da9d7Smrg ;; 3443bd1da9d7Smrg esac # case $arg_mode 3444bd1da9d7Smrg 3445bd1da9d7Smrg # Aesthetically quote the previous argument. 3446899129b3Smrg func_append_quoted base_compile "$lastarg" 3447bd1da9d7Smrg done # for arg 3448bd1da9d7Smrg 3449bd1da9d7Smrg case $arg_mode in 3450bd1da9d7Smrg arg) 345147e89262Smrg func_fatal_error "you must specify an argument for -Xcompile" 3452bd1da9d7Smrg ;; 3453bd1da9d7Smrg target) 3454e6d2e958Smrg func_fatal_error "you must specify a target with '-o'" 3455bd1da9d7Smrg ;; 3456bd1da9d7Smrg *) 3457bd1da9d7Smrg # Get the name of the library object. 345847e89262Smrg test -z "$libobj" && { 345947e89262Smrg func_basename "$srcfile" 3460e6d2e958Smrg libobj=$func_basename_result 346147e89262Smrg } 3462bd1da9d7Smrg ;; 3463bd1da9d7Smrg esac 3464bd1da9d7Smrg 3465bd1da9d7Smrg # Recognize several different file suffixes. 3466bd1da9d7Smrg # If the user specifies -o file.o, it is replaced with file.lo 3467bd1da9d7Smrg case $libobj in 346847e89262Smrg *.[cCFSifmso] | \ 346947e89262Smrg *.ada | *.adb | *.ads | *.asm | \ 347047e89262Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3471899129b3Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 347247e89262Smrg func_xform "$libobj" 347347e89262Smrg libobj=$func_xform_result 347447e89262Smrg ;; 3475bd1da9d7Smrg esac 3476bd1da9d7Smrg 3477bd1da9d7Smrg case $libobj in 347847e89262Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3479bd1da9d7Smrg *) 3480e6d2e958Smrg func_fatal_error "cannot determine name of library object from '$libobj'" 3481bd1da9d7Smrg ;; 3482bd1da9d7Smrg esac 3483bd1da9d7Smrg 3484bd1da9d7Smrg func_infer_tag $base_compile 3485bd1da9d7Smrg 3486bd1da9d7Smrg for arg in $later; do 3487bd1da9d7Smrg case $arg in 348847e89262Smrg -shared) 3489e6d2e958Smrg test yes = "$build_libtool_libs" \ 3490e6d2e958Smrg || func_fatal_configuration "cannot build a shared library" 349147e89262Smrg build_old_libs=no 349247e89262Smrg continue 349347e89262Smrg ;; 349447e89262Smrg 3495bd1da9d7Smrg -static) 349647e89262Smrg build_libtool_libs=no 3497bd1da9d7Smrg build_old_libs=yes 3498bd1da9d7Smrg continue 3499bd1da9d7Smrg ;; 3500bd1da9d7Smrg 3501bd1da9d7Smrg -prefer-pic) 3502bd1da9d7Smrg pic_mode=yes 3503bd1da9d7Smrg continue 3504bd1da9d7Smrg ;; 3505bd1da9d7Smrg 3506bd1da9d7Smrg -prefer-non-pic) 3507bd1da9d7Smrg pic_mode=no 3508bd1da9d7Smrg continue 3509bd1da9d7Smrg ;; 3510bd1da9d7Smrg esac 3511bd1da9d7Smrg done 3512bd1da9d7Smrg 351347e89262Smrg func_quote_for_eval "$libobj" 351447e89262Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 351547e89262Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3516e6d2e958Smrg && func_warning "libobj name '$libobj' may not contain shell special characters." 351747e89262Smrg func_dirname_and_basename "$obj" "/" "" 3518e6d2e958Smrg objname=$func_basename_result 3519e6d2e958Smrg xdir=$func_dirname_result 3520e6d2e958Smrg lobj=$xdir$objdir/$objname 3521bd1da9d7Smrg 352247e89262Smrg test -z "$base_compile" && \ 352347e89262Smrg func_fatal_help "you must specify a compilation command" 3524bd1da9d7Smrg 3525bd1da9d7Smrg # Delete any leftover library objects. 3526e6d2e958Smrg if test yes = "$build_old_libs"; then 3527bd1da9d7Smrg removelist="$obj $lobj $libobj ${libobj}T" 3528bd1da9d7Smrg else 3529bd1da9d7Smrg removelist="$lobj $libobj ${libobj}T" 3530bd1da9d7Smrg fi 3531bd1da9d7Smrg 3532bd1da9d7Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 3533bd1da9d7Smrg case $host_os in 353447e89262Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 3535bd1da9d7Smrg pic_mode=default 3536bd1da9d7Smrg ;; 3537bd1da9d7Smrg esac 3538e6d2e958Smrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3539bd1da9d7Smrg # non-PIC code in shared libraries is not supported 3540bd1da9d7Smrg pic_mode=default 3541bd1da9d7Smrg fi 3542bd1da9d7Smrg 3543bd1da9d7Smrg # Calculate the filename of the output object if compiler does 3544bd1da9d7Smrg # not support -o with -c 3545e6d2e958Smrg if test no = "$compiler_c_o"; then 3546e6d2e958Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3547e6d2e958Smrg lockfile=$output_obj.lock 3548bd1da9d7Smrg else 3549bd1da9d7Smrg output_obj= 3550bd1da9d7Smrg need_locks=no 3551bd1da9d7Smrg lockfile= 3552bd1da9d7Smrg fi 3553bd1da9d7Smrg 3554bd1da9d7Smrg # Lock this critical section if it is needed 3555bd1da9d7Smrg # We use this script file to make the link, it avoids creating a new file 3556e6d2e958Smrg if test yes = "$need_locks"; then 355747e89262Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 355847e89262Smrg func_echo "Waiting for $lockfile to be removed" 3559bd1da9d7Smrg sleep 2 3560bd1da9d7Smrg done 3561e6d2e958Smrg elif test warn = "$need_locks"; then 3562bd1da9d7Smrg if test -f "$lockfile"; then 356347e89262Smrg $ECHO "\ 3564bd1da9d7Smrg*** ERROR, $lockfile exists and contains: 3565bd1da9d7Smrg`cat $lockfile 2>/dev/null` 3566bd1da9d7Smrg 3567bd1da9d7SmrgThis indicates that another process is trying to use the same 3568bd1da9d7Smrgtemporary object file, and libtool could not work around it because 3569e6d2e958Smrgyour compiler does not support '-c' and '-o' together. If you 3570bd1da9d7Smrgrepeat this compilation, it may succeed, by chance, but you had better 3571bd1da9d7Smrgavoid parallel builds (make -j) in this platform, or get a better 3572bd1da9d7Smrgcompiler." 3573bd1da9d7Smrg 357447e89262Smrg $opt_dry_run || $RM $removelist 3575bd1da9d7Smrg exit $EXIT_FAILURE 3576bd1da9d7Smrg fi 3577899129b3Smrg func_append removelist " $output_obj" 357847e89262Smrg $ECHO "$srcfile" > "$lockfile" 3579bd1da9d7Smrg fi 3580bd1da9d7Smrg 358147e89262Smrg $opt_dry_run || $RM $removelist 3582899129b3Smrg func_append removelist " $lockfile" 358347e89262Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 358447e89262Smrg 3585899129b3Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3586899129b3Smrg srcfile=$func_to_tool_file_result 358747e89262Smrg func_quote_for_eval "$srcfile" 358847e89262Smrg qsrcfile=$func_quote_for_eval_result 3589bd1da9d7Smrg 3590bd1da9d7Smrg # Only build a PIC object if we are building libtool libraries. 3591e6d2e958Smrg if test yes = "$build_libtool_libs"; then 3592bd1da9d7Smrg # Without this assignment, base_compile gets emptied. 3593bd1da9d7Smrg fbsd_hideous_sh_bug=$base_compile 3594bd1da9d7Smrg 3595e6d2e958Smrg if test no != "$pic_mode"; then 3596bd1da9d7Smrg command="$base_compile $qsrcfile $pic_flag" 3597bd1da9d7Smrg else 3598bd1da9d7Smrg # Don't build PIC code 3599bd1da9d7Smrg command="$base_compile $qsrcfile" 3600bd1da9d7Smrg fi 3601bd1da9d7Smrg 360247e89262Smrg func_mkdir_p "$xdir$objdir" 3603bd1da9d7Smrg 3604bd1da9d7Smrg if test -z "$output_obj"; then 3605bd1da9d7Smrg # Place PIC objects in $objdir 3606899129b3Smrg func_append command " -o $lobj" 3607bd1da9d7Smrg fi 3608bd1da9d7Smrg 360947e89262Smrg func_show_eval_locale "$command" \ 361047e89262Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3611bd1da9d7Smrg 3612e6d2e958Smrg if test warn = "$need_locks" && 3613bd1da9d7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 361447e89262Smrg $ECHO "\ 3615bd1da9d7Smrg*** ERROR, $lockfile contains: 3616bd1da9d7Smrg`cat $lockfile 2>/dev/null` 3617bd1da9d7Smrg 3618bd1da9d7Smrgbut it should contain: 3619bd1da9d7Smrg$srcfile 3620bd1da9d7Smrg 3621bd1da9d7SmrgThis indicates that another process is trying to use the same 3622bd1da9d7Smrgtemporary object file, and libtool could not work around it because 3623e6d2e958Smrgyour compiler does not support '-c' and '-o' together. If you 3624bd1da9d7Smrgrepeat this compilation, it may succeed, by chance, but you had better 3625bd1da9d7Smrgavoid parallel builds (make -j) in this platform, or get a better 3626bd1da9d7Smrgcompiler." 3627bd1da9d7Smrg 362847e89262Smrg $opt_dry_run || $RM $removelist 3629bd1da9d7Smrg exit $EXIT_FAILURE 3630bd1da9d7Smrg fi 3631bd1da9d7Smrg 3632bd1da9d7Smrg # Just move the object if needed, then go on to compile the next one 3633bd1da9d7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 363447e89262Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 363547e89262Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3636bd1da9d7Smrg fi 3637bd1da9d7Smrg 3638bd1da9d7Smrg # Allow error messages only from the first compilation. 3639e6d2e958Smrg if test yes = "$suppress_opt"; then 364047e89262Smrg suppress_output=' >/dev/null 2>&1' 3641bd1da9d7Smrg fi 3642bd1da9d7Smrg fi 3643bd1da9d7Smrg 3644bd1da9d7Smrg # Only build a position-dependent object if we build old libraries. 3645e6d2e958Smrg if test yes = "$build_old_libs"; then 3646e6d2e958Smrg if test yes != "$pic_mode"; then 3647bd1da9d7Smrg # Don't build PIC code 364847e89262Smrg command="$base_compile $qsrcfile$pie_flag" 3649bd1da9d7Smrg else 3650bd1da9d7Smrg command="$base_compile $qsrcfile $pic_flag" 3651bd1da9d7Smrg fi 3652e6d2e958Smrg if test yes = "$compiler_c_o"; then 3653899129b3Smrg func_append command " -o $obj" 3654bd1da9d7Smrg fi 3655bd1da9d7Smrg 3656bd1da9d7Smrg # Suppress compiler output if we already did a PIC compilation. 3657899129b3Smrg func_append command "$suppress_output" 365847e89262Smrg func_show_eval_locale "$command" \ 365947e89262Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3660bd1da9d7Smrg 3661e6d2e958Smrg if test warn = "$need_locks" && 3662bd1da9d7Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 366347e89262Smrg $ECHO "\ 3664bd1da9d7Smrg*** ERROR, $lockfile contains: 3665bd1da9d7Smrg`cat $lockfile 2>/dev/null` 3666bd1da9d7Smrg 3667bd1da9d7Smrgbut it should contain: 3668bd1da9d7Smrg$srcfile 3669bd1da9d7Smrg 3670bd1da9d7SmrgThis indicates that another process is trying to use the same 3671bd1da9d7Smrgtemporary object file, and libtool could not work around it because 3672e6d2e958Smrgyour compiler does not support '-c' and '-o' together. If you 3673bd1da9d7Smrgrepeat this compilation, it may succeed, by chance, but you had better 3674bd1da9d7Smrgavoid parallel builds (make -j) in this platform, or get a better 3675bd1da9d7Smrgcompiler." 3676bd1da9d7Smrg 367747e89262Smrg $opt_dry_run || $RM $removelist 3678bd1da9d7Smrg exit $EXIT_FAILURE 3679bd1da9d7Smrg fi 3680bd1da9d7Smrg 3681bd1da9d7Smrg # Just move the object if needed 3682bd1da9d7Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 368347e89262Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 368447e89262Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3685bd1da9d7Smrg fi 3686bd1da9d7Smrg fi 3687bd1da9d7Smrg 368847e89262Smrg $opt_dry_run || { 368947e89262Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3690bd1da9d7Smrg 369147e89262Smrg # Unlock the critical section if it was locked 3692e6d2e958Smrg if test no != "$need_locks"; then 369347e89262Smrg removelist=$lockfile 369447e89262Smrg $RM "$lockfile" 369547e89262Smrg fi 369647e89262Smrg } 3697bd1da9d7Smrg 3698bd1da9d7Smrg exit $EXIT_SUCCESS 369947e89262Smrg} 3700bd1da9d7Smrg 370147e89262Smrg$opt_help || { 3702e6d2e958Smrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 370347e89262Smrg} 3704bd1da9d7Smrg 370547e89262Smrgfunc_mode_help () 370647e89262Smrg{ 370747e89262Smrg # We need to display help for each of the modes. 3708899129b3Smrg case $opt_mode in 370947e89262Smrg "") 371047e89262Smrg # Generic help is extracted from the usage comments 371147e89262Smrg # at the start of this file. 371247e89262Smrg func_help 371347e89262Smrg ;; 3714bd1da9d7Smrg 371547e89262Smrg clean) 371647e89262Smrg $ECHO \ 371747e89262Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3718bd1da9d7Smrg 371947e89262SmrgRemove files from the build directory. 3720bd1da9d7Smrg 372147e89262SmrgRM is the name of the program to use to delete files associated with each FILE 3722e6d2e958Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 372347e89262Smrgto RM. 3724bd1da9d7Smrg 372547e89262SmrgIf FILE is a libtool library, object or program, all the files associated 372647e89262Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 372747e89262Smrg ;; 3728bd1da9d7Smrg 372947e89262Smrg compile) 373047e89262Smrg $ECHO \ 373147e89262Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3732bd1da9d7Smrg 373347e89262SmrgCompile a source file into a libtool library object. 3734bd1da9d7Smrg 373547e89262SmrgThis mode accepts the following additional options: 3736bd1da9d7Smrg 373747e89262Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 373847e89262Smrg -no-suppress do not suppress compiler output for multiple passes 373947e89262Smrg -prefer-pic try to build PIC objects only 374047e89262Smrg -prefer-non-pic try to build non-PIC objects only 3741e6d2e958Smrg -shared do not build a '.o' file suitable for static linking 3742e6d2e958Smrg -static only build a '.o' file suitable for static linking 374347e89262Smrg -Wc,FLAG pass FLAG directly to the compiler 3744bd1da9d7Smrg 3745e6d2e958SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 374647e89262Smrgfrom the given SOURCEFILE. 3747bd1da9d7Smrg 374847e89262SmrgThe output file name is determined by removing the directory component from 3749e6d2e958SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 3750e6d2e958Smrglibrary object suffix, '.lo'." 375147e89262Smrg ;; 3752bd1da9d7Smrg 375347e89262Smrg execute) 375447e89262Smrg $ECHO \ 375547e89262Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3756bd1da9d7Smrg 375747e89262SmrgAutomatically set library path, then run a program. 3758bd1da9d7Smrg 375947e89262SmrgThis mode accepts the following additional options: 3760bd1da9d7Smrg 376147e89262Smrg -dlopen FILE add the directory containing FILE to the library path 3762bd1da9d7Smrg 3763e6d2e958SmrgThis mode sets the library path environment variable according to '-dlopen' 376447e89262Smrgflags. 3765bd1da9d7Smrg 376647e89262SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 376747e89262Smrginto their corresponding uninstalled binary, and any of their required library 376847e89262Smrgdirectories are added to the library path. 3769bd1da9d7Smrg 377047e89262SmrgThen, COMMAND is executed, with ARGS as arguments." 377147e89262Smrg ;; 3772bd1da9d7Smrg 377347e89262Smrg finish) 377447e89262Smrg $ECHO \ 377547e89262Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3776bd1da9d7Smrg 377747e89262SmrgComplete the installation of libtool libraries. 3778bd1da9d7Smrg 377947e89262SmrgEach LIBDIR is a directory that contains libtool libraries. 3780bd1da9d7Smrg 378147e89262SmrgThe commands that this mode executes may require superuser privileges. Use 3782e6d2e958Smrgthe '--dry-run' option if you just want to see what would be executed." 378347e89262Smrg ;; 3784bd1da9d7Smrg 378547e89262Smrg install) 378647e89262Smrg $ECHO \ 378747e89262Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3788bd1da9d7Smrg 378947e89262SmrgInstall executables or libraries. 3790bd1da9d7Smrg 379147e89262SmrgINSTALL-COMMAND is the installation command. The first component should be 3792e6d2e958Smrgeither the 'install' or 'cp' program. 3793bd1da9d7Smrg 379447e89262SmrgThe following components of INSTALL-COMMAND are treated specially: 3795bd1da9d7Smrg 379647e89262Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3797bd1da9d7Smrg 379847e89262SmrgThe rest of the components are interpreted as arguments to that command (only 379947e89262SmrgBSD-compatible install options are recognized)." 380047e89262Smrg ;; 3801bd1da9d7Smrg 380247e89262Smrg link) 380347e89262Smrg $ECHO \ 380447e89262Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3805bd1da9d7Smrg 380647e89262SmrgLink object files or libraries together to form another library, or to 380747e89262Smrgcreate an executable program. 3808bd1da9d7Smrg 380947e89262SmrgLINK-COMMAND is a command using the C compiler that you would use to create 381047e89262Smrga program from several object files. 3811bd1da9d7Smrg 381247e89262SmrgThe following components of LINK-COMMAND are treated specially: 3813bd1da9d7Smrg 381447e89262Smrg -all-static do not do any dynamic linking at all 381547e89262Smrg -avoid-version do not add a version suffix if possible 381647e89262Smrg -bindir BINDIR specify path to binaries directory (for systems where 381747e89262Smrg libraries must be found in the PATH setting at runtime) 3818e6d2e958Smrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 381947e89262Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 382047e89262Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 382147e89262Smrg -export-symbols SYMFILE 382247e89262Smrg try to export only the symbols listed in SYMFILE 382347e89262Smrg -export-symbols-regex REGEX 382447e89262Smrg try to export only the symbols matching REGEX 382547e89262Smrg -LLIBDIR search LIBDIR for required installed libraries 382647e89262Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 382747e89262Smrg -module build a library that can dlopened 382847e89262Smrg -no-fast-install disable the fast-install mode 382947e89262Smrg -no-install link a not-installable executable 383047e89262Smrg -no-undefined declare that a library does not refer to external symbols 383147e89262Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3832e6d2e958Smrg -objectlist FILE use a list of object files found in FILE to specify objects 3833e6d2e958Smrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 383447e89262Smrg -precious-files-regex REGEX 383547e89262Smrg don't remove output files matching REGEX 383647e89262Smrg -release RELEASE specify package release information 383747e89262Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 383847e89262Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 383947e89262Smrg -shared only do dynamic linking of libtool libraries 384047e89262Smrg -shrext SUFFIX override the standard shared library file extension 384147e89262Smrg -static do not do any dynamic linking of uninstalled libtool libraries 384247e89262Smrg -static-libtool-libs 384347e89262Smrg do not do any dynamic linking of libtool libraries 384447e89262Smrg -version-info CURRENT[:REVISION[:AGE]] 384547e89262Smrg specify library version info [each variable defaults to 0] 384647e89262Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 384747e89262Smrg -Wc,FLAG 384847e89262Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 384947e89262Smrg -Wl,FLAG 385047e89262Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 385147e89262Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 3852bd1da9d7Smrg 3853e6d2e958SmrgAll other options (arguments beginning with '-') are ignored. 3854bd1da9d7Smrg 3855e6d2e958SmrgEvery other argument is treated as a filename. Files ending in '.la' are 385647e89262Smrgtreated as uninstalled libtool libraries, other files are standard or library 385747e89262Smrgobject files. 3858bd1da9d7Smrg 3859e6d2e958SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 3860e6d2e958Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is 386147e89262Smrgrequired, except when creating a convenience library. 3862bd1da9d7Smrg 3863e6d2e958SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 3864e6d2e958Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 38655bcb6992Smrg 3866e6d2e958SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 386747e89262Smrgis created, otherwise an executable program is created." 386847e89262Smrg ;; 3869bd1da9d7Smrg 387047e89262Smrg uninstall) 387147e89262Smrg $ECHO \ 387247e89262Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 3873bd1da9d7Smrg 387447e89262SmrgRemove libraries from an installation directory. 3875bd1da9d7Smrg 387647e89262SmrgRM is the name of the program to use to delete files associated with each FILE 3877e6d2e958Smrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 387847e89262Smrgto RM. 3879bd1da9d7Smrg 388047e89262SmrgIf FILE is a libtool library, all the files associated with it are deleted. 388147e89262SmrgOtherwise, only FILE itself is deleted using RM." 388247e89262Smrg ;; 3883bd1da9d7Smrg 388447e89262Smrg *) 3885e6d2e958Smrg func_fatal_help "invalid operation mode '$opt_mode'" 388647e89262Smrg ;; 388747e89262Smrg esac 3888bd1da9d7Smrg 388947e89262Smrg echo 3890e6d2e958Smrg $ECHO "Try '$progname --help' for more information about other modes." 389147e89262Smrg} 3892bd1da9d7Smrg 389347e89262Smrg# Now that we've collected a possible --mode arg, show help if necessary 389447e89262Smrgif $opt_help; then 3895e6d2e958Smrg if test : = "$opt_help"; then 389647e89262Smrg func_mode_help 389747e89262Smrg else 389847e89262Smrg { 389947e89262Smrg func_help noexit 3900899129b3Smrg for opt_mode in compile link execute install finish uninstall clean; do 390147e89262Smrg func_mode_help 390247e89262Smrg done 3903e6d2e958Smrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 390447e89262Smrg { 390547e89262Smrg func_help noexit 3906899129b3Smrg for opt_mode in compile link execute install finish uninstall clean; do 390747e89262Smrg echo 390847e89262Smrg func_mode_help 390947e89262Smrg done 391047e89262Smrg } | 3911e6d2e958Smrg $SED '1d 391247e89262Smrg /^When reporting/,/^Report/{ 391347e89262Smrg H 391447e89262Smrg d 391547e89262Smrg } 391647e89262Smrg $x 391747e89262Smrg /information about other modes/d 391847e89262Smrg /more detailed .*MODE/d 391947e89262Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 392047e89262Smrg fi 392147e89262Smrg exit $? 392247e89262Smrgfi 3923bd1da9d7Smrg 3924bd1da9d7Smrg 392547e89262Smrg# func_mode_execute arg... 392647e89262Smrgfunc_mode_execute () 392747e89262Smrg{ 3928e6d2e958Smrg $debug_cmd 3929e6d2e958Smrg 393047e89262Smrg # The first argument is the command name. 3931e6d2e958Smrg cmd=$nonopt 393247e89262Smrg test -z "$cmd" && \ 393347e89262Smrg func_fatal_help "you must specify a COMMAND" 3934bd1da9d7Smrg 393547e89262Smrg # Handle -dlopen flags immediately. 3936899129b3Smrg for file in $opt_dlopen; do 393747e89262Smrg test -f "$file" \ 3938e6d2e958Smrg || func_fatal_help "'$file' is not a file" 3939bd1da9d7Smrg 394047e89262Smrg dir= 394147e89262Smrg case $file in 394247e89262Smrg *.la) 3943899129b3Smrg func_resolve_sysroot "$file" 3944899129b3Smrg file=$func_resolve_sysroot_result 3945899129b3Smrg 394647e89262Smrg # Check to see that this really is a libtool archive. 394747e89262Smrg func_lalib_unsafe_p "$file" \ 3948e6d2e958Smrg || func_fatal_help "'$lib' is not a valid libtool archive" 3949bd1da9d7Smrg 395047e89262Smrg # Read the libtool library. 395147e89262Smrg dlname= 395247e89262Smrg library_names= 395347e89262Smrg func_source "$file" 3954bd1da9d7Smrg 395547e89262Smrg # Skip this library if it cannot be dlopened. 395647e89262Smrg if test -z "$dlname"; then 395747e89262Smrg # Warn if it was a shared library. 395847e89262Smrg test -n "$library_names" && \ 3959e6d2e958Smrg func_warning "'$file' was not linked with '-export-dynamic'" 396047e89262Smrg continue 396147e89262Smrg fi 3962bd1da9d7Smrg 396347e89262Smrg func_dirname "$file" "" "." 3964e6d2e958Smrg dir=$func_dirname_result 3965bd1da9d7Smrg 396647e89262Smrg if test -f "$dir/$objdir/$dlname"; then 3967899129b3Smrg func_append dir "/$objdir" 396847e89262Smrg else 396947e89262Smrg if test ! -f "$dir/$dlname"; then 3970e6d2e958Smrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 397147e89262Smrg fi 397247e89262Smrg fi 3973bd1da9d7Smrg ;; 3974bd1da9d7Smrg 397547e89262Smrg *.lo) 397647e89262Smrg # Just add the directory containing the .lo file. 397747e89262Smrg func_dirname "$file" "" "." 3978e6d2e958Smrg dir=$func_dirname_result 3979bd1da9d7Smrg ;; 398047e89262Smrg 398147e89262Smrg *) 3982e6d2e958Smrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 3983bd1da9d7Smrg continue 3984bd1da9d7Smrg ;; 398547e89262Smrg esac 3986bd1da9d7Smrg 398747e89262Smrg # Get the absolute pathname. 398847e89262Smrg absdir=`cd "$dir" && pwd` 3989e6d2e958Smrg test -n "$absdir" && dir=$absdir 3990bd1da9d7Smrg 399147e89262Smrg # Now add the directory to shlibpath_var. 399247e89262Smrg if eval "test -z \"\$$shlibpath_var\""; then 399347e89262Smrg eval "$shlibpath_var=\"\$dir\"" 399447e89262Smrg else 399547e89262Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 399647e89262Smrg fi 399747e89262Smrg done 3998bd1da9d7Smrg 399947e89262Smrg # This variable tells wrapper scripts just to set shlibpath_var 400047e89262Smrg # rather than running their programs. 4001e6d2e958Smrg libtool_execute_magic=$magic 4002bd1da9d7Smrg 400347e89262Smrg # Check if any of the arguments is a wrapper script. 400447e89262Smrg args= 400547e89262Smrg for file 400647e89262Smrg do 400747e89262Smrg case $file in 400847e89262Smrg -* | *.la | *.lo ) ;; 400947e89262Smrg *) 401047e89262Smrg # Do a test to see if this is really a libtool program. 401147e89262Smrg if func_ltwrapper_script_p "$file"; then 401247e89262Smrg func_source "$file" 401347e89262Smrg # Transform arg to wrapped name. 4014e6d2e958Smrg file=$progdir/$program 401547e89262Smrg elif func_ltwrapper_executable_p "$file"; then 401647e89262Smrg func_ltwrapper_scriptname "$file" 401747e89262Smrg func_source "$func_ltwrapper_scriptname_result" 401847e89262Smrg # Transform arg to wrapped name. 4019e6d2e958Smrg file=$progdir/$program 402047e89262Smrg fi 4021bd1da9d7Smrg ;; 402247e89262Smrg esac 402347e89262Smrg # Quote arguments (to preserve shell metacharacters). 4024899129b3Smrg func_append_quoted args "$file" 402547e89262Smrg done 4026bd1da9d7Smrg 4027e6d2e958Smrg if $opt_dry_run; then 4028e6d2e958Smrg # Display what would be done. 4029e6d2e958Smrg if test -n "$shlibpath_var"; then 4030e6d2e958Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 4031e6d2e958Smrg echo "export $shlibpath_var" 4032e6d2e958Smrg fi 4033e6d2e958Smrg $ECHO "$cmd$args" 4034e6d2e958Smrg exit $EXIT_SUCCESS 4035e6d2e958Smrg else 403647e89262Smrg if test -n "$shlibpath_var"; then 403747e89262Smrg # Export the shlibpath_var. 403847e89262Smrg eval "export $shlibpath_var" 403947e89262Smrg fi 4040bd1da9d7Smrg 404147e89262Smrg # Restore saved environment variables 404247e89262Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 404347e89262Smrg do 404447e89262Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 404547e89262Smrg $lt_var=\$save_$lt_var; export $lt_var 404647e89262Smrg else 404747e89262Smrg $lt_unset $lt_var 404847e89262Smrg fi" 404947e89262Smrg done 4050bd1da9d7Smrg 405147e89262Smrg # Now prepare to actually exec the command. 4052e6d2e958Smrg exec_cmd=\$cmd$args 405347e89262Smrg fi 405447e89262Smrg} 4055bd1da9d7Smrg 4056e6d2e958Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 4057bd1da9d7Smrg 4058bd1da9d7Smrg 405947e89262Smrg# func_mode_finish arg... 406047e89262Smrgfunc_mode_finish () 406147e89262Smrg{ 4062e6d2e958Smrg $debug_cmd 4063e6d2e958Smrg 4064899129b3Smrg libs= 4065899129b3Smrg libdirs= 406647e89262Smrg admincmds= 4067bd1da9d7Smrg 4068899129b3Smrg for opt in "$nonopt" ${1+"$@"} 4069899129b3Smrg do 4070899129b3Smrg if test -d "$opt"; then 4071899129b3Smrg func_append libdirs " $opt" 4072899129b3Smrg 4073899129b3Smrg elif test -f "$opt"; then 4074899129b3Smrg if func_lalib_unsafe_p "$opt"; then 4075899129b3Smrg func_append libs " $opt" 4076899129b3Smrg else 4077e6d2e958Smrg func_warning "'$opt' is not a valid libtool archive" 4078899129b3Smrg fi 4079899129b3Smrg 4080899129b3Smrg else 4081e6d2e958Smrg func_fatal_error "invalid argument '$opt'" 4082899129b3Smrg fi 4083899129b3Smrg done 4084899129b3Smrg 4085899129b3Smrg if test -n "$libs"; then 4086899129b3Smrg if test -n "$lt_sysroot"; then 4087899129b3Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 4088899129b3Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 4089899129b3Smrg else 4090899129b3Smrg sysroot_cmd= 4091899129b3Smrg fi 4092899129b3Smrg 4093899129b3Smrg # Remove sysroot references 4094899129b3Smrg if $opt_dry_run; then 4095899129b3Smrg for lib in $libs; do 4096e6d2e958Smrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4097899129b3Smrg done 4098899129b3Smrg else 4099899129b3Smrg tmpdir=`func_mktempdir` 4100899129b3Smrg for lib in $libs; do 4101e6d2e958Smrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4102899129b3Smrg > $tmpdir/tmp-la 4103899129b3Smrg mv -f $tmpdir/tmp-la $lib 4104899129b3Smrg done 4105899129b3Smrg ${RM}r "$tmpdir" 4106899129b3Smrg fi 4107899129b3Smrg fi 4108bd1da9d7Smrg 4109899129b3Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 411047e89262Smrg for libdir in $libdirs; do 411147e89262Smrg if test -n "$finish_cmds"; then 411247e89262Smrg # Do each command in the finish commands. 411347e89262Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 411447e89262Smrg'"$cmd"'"' 411547e89262Smrg fi 411647e89262Smrg if test -n "$finish_eval"; then 411747e89262Smrg # Do the single finish_eval. 411847e89262Smrg eval cmds=\"$finish_eval\" 4119899129b3Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 412047e89262Smrg $cmds" 412147e89262Smrg fi 412247e89262Smrg done 412347e89262Smrg fi 4124bd1da9d7Smrg 412547e89262Smrg # Exit here if they wanted silent mode. 4126e6d2e958Smrg $opt_quiet && exit $EXIT_SUCCESS 4127bd1da9d7Smrg 4128899129b3Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4129899129b3Smrg echo "----------------------------------------------------------------------" 4130899129b3Smrg echo "Libraries have been installed in:" 4131899129b3Smrg for libdir in $libdirs; do 4132899129b3Smrg $ECHO " $libdir" 4133899129b3Smrg done 4134899129b3Smrg echo 4135899129b3Smrg echo "If you ever happen to want to link against installed libraries" 4136899129b3Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 4137e6d2e958Smrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4138899129b3Smrg echo "flag during linking and do at least one of the following:" 4139899129b3Smrg if test -n "$shlibpath_var"; then 4140e6d2e958Smrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4141899129b3Smrg echo " during execution" 4142899129b3Smrg fi 4143899129b3Smrg if test -n "$runpath_var"; then 4144e6d2e958Smrg echo " - add LIBDIR to the '$runpath_var' environment variable" 4145899129b3Smrg echo " during linking" 4146899129b3Smrg fi 4147899129b3Smrg if test -n "$hardcode_libdir_flag_spec"; then 4148899129b3Smrg libdir=LIBDIR 4149899129b3Smrg eval flag=\"$hardcode_libdir_flag_spec\" 4150bd1da9d7Smrg 4151e6d2e958Smrg $ECHO " - use the '$flag' linker flag" 4152899129b3Smrg fi 4153899129b3Smrg if test -n "$admincmds"; then 4154899129b3Smrg $ECHO " - have your system administrator run these commands:$admincmds" 4155899129b3Smrg fi 4156899129b3Smrg if test -f /etc/ld.so.conf; then 4157e6d2e958Smrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4158899129b3Smrg fi 4159899129b3Smrg echo 4160bd1da9d7Smrg 4161899129b3Smrg echo "See any operating system documentation about shared libraries for" 4162899129b3Smrg case $host in 4163899129b3Smrg solaris2.[6789]|solaris2.1[0-9]) 4164899129b3Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4165899129b3Smrg echo "pages." 4166899129b3Smrg ;; 4167899129b3Smrg *) 4168899129b3Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 4169899129b3Smrg ;; 4170899129b3Smrg esac 4171899129b3Smrg echo "----------------------------------------------------------------------" 4172899129b3Smrg fi 417347e89262Smrg exit $EXIT_SUCCESS 417447e89262Smrg} 4175bd1da9d7Smrg 4176e6d2e958Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4177bd1da9d7Smrg 4178bd1da9d7Smrg 417947e89262Smrg# func_mode_install arg... 418047e89262Smrgfunc_mode_install () 418147e89262Smrg{ 4182e6d2e958Smrg $debug_cmd 4183e6d2e958Smrg 418447e89262Smrg # There may be an optional sh(1) argument at the beginning of 418547e89262Smrg # install_prog (especially on Windows NT). 4186e6d2e958Smrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 418747e89262Smrg # Allow the use of GNU shtool's install command. 4188e6d2e958Smrg case $nonopt in *shtool*) :;; *) false;; esac 4189e6d2e958Smrg then 419047e89262Smrg # Aesthetically quote it. 419147e89262Smrg func_quote_for_eval "$nonopt" 419247e89262Smrg install_prog="$func_quote_for_eval_result " 419347e89262Smrg arg=$1 419447e89262Smrg shift 419547e89262Smrg else 419647e89262Smrg install_prog= 419747e89262Smrg arg=$nonopt 419847e89262Smrg fi 4199bd1da9d7Smrg 420047e89262Smrg # The real first argument should be the name of the installation program. 420147e89262Smrg # Aesthetically quote it. 420247e89262Smrg func_quote_for_eval "$arg" 4203899129b3Smrg func_append install_prog "$func_quote_for_eval_result" 420447e89262Smrg install_shared_prog=$install_prog 420547e89262Smrg case " $install_prog " in 420647e89262Smrg *[\\\ /]cp\ *) install_cp=: ;; 420747e89262Smrg *) install_cp=false ;; 420847e89262Smrg esac 4209bd1da9d7Smrg 421047e89262Smrg # We need to accept at least all the BSD install flags. 421147e89262Smrg dest= 421247e89262Smrg files= 421347e89262Smrg opts= 421447e89262Smrg prev= 421547e89262Smrg install_type= 4216e6d2e958Smrg isdir=false 421747e89262Smrg stripme= 421847e89262Smrg no_mode=: 421947e89262Smrg for arg 422047e89262Smrg do 422147e89262Smrg arg2= 422247e89262Smrg if test -n "$dest"; then 4223899129b3Smrg func_append files " $dest" 422447e89262Smrg dest=$arg 4225bd1da9d7Smrg continue 422647e89262Smrg fi 4227bd1da9d7Smrg 422847e89262Smrg case $arg in 4229e6d2e958Smrg -d) isdir=: ;; 423047e89262Smrg -f) 423147e89262Smrg if $install_cp; then :; else 423247e89262Smrg prev=$arg 4233bd1da9d7Smrg fi 423447e89262Smrg ;; 423547e89262Smrg -g | -m | -o) 423647e89262Smrg prev=$arg 423747e89262Smrg ;; 423847e89262Smrg -s) 423947e89262Smrg stripme=" -s" 4240bd1da9d7Smrg continue 4241bd1da9d7Smrg ;; 424247e89262Smrg -*) 424347e89262Smrg ;; 4244bd1da9d7Smrg *) 424547e89262Smrg # If the previous option needed an argument, then skip it. 424647e89262Smrg if test -n "$prev"; then 4247e6d2e958Smrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 424847e89262Smrg arg2=$install_override_mode 424947e89262Smrg no_mode=false 425047e89262Smrg fi 425147e89262Smrg prev= 425247e89262Smrg else 425347e89262Smrg dest=$arg 425447e89262Smrg continue 425547e89262Smrg fi 4256bd1da9d7Smrg ;; 425747e89262Smrg esac 4258bd1da9d7Smrg 425947e89262Smrg # Aesthetically quote the argument. 426047e89262Smrg func_quote_for_eval "$arg" 4261899129b3Smrg func_append install_prog " $func_quote_for_eval_result" 426247e89262Smrg if test -n "$arg2"; then 426347e89262Smrg func_quote_for_eval "$arg2" 4264bd1da9d7Smrg fi 4265899129b3Smrg func_append install_shared_prog " $func_quote_for_eval_result" 426647e89262Smrg done 4267bd1da9d7Smrg 426847e89262Smrg test -z "$install_prog" && \ 426947e89262Smrg func_fatal_help "you must specify an install program" 4270bd1da9d7Smrg 427147e89262Smrg test -n "$prev" && \ 4272e6d2e958Smrg func_fatal_help "the '$prev' option requires an argument" 4273bd1da9d7Smrg 427447e89262Smrg if test -n "$install_override_mode" && $no_mode; then 427547e89262Smrg if $install_cp; then :; else 427647e89262Smrg func_quote_for_eval "$install_override_mode" 4277899129b3Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 427847e89262Smrg fi 4279bd1da9d7Smrg fi 4280bd1da9d7Smrg 428147e89262Smrg if test -z "$files"; then 428247e89262Smrg if test -z "$dest"; then 428347e89262Smrg func_fatal_help "no file or destination specified" 428447e89262Smrg else 428547e89262Smrg func_fatal_help "you must specify a destination" 4286bd1da9d7Smrg fi 4287bd1da9d7Smrg fi 4288bd1da9d7Smrg 428947e89262Smrg # Strip any trailing slash from the destination. 429047e89262Smrg func_stripname '' '/' "$dest" 429147e89262Smrg dest=$func_stripname_result 4292bd1da9d7Smrg 429347e89262Smrg # Check to see that the destination is a directory. 4294e6d2e958Smrg test -d "$dest" && isdir=: 4295e6d2e958Smrg if $isdir; then 4296e6d2e958Smrg destdir=$dest 429747e89262Smrg destname= 429847e89262Smrg else 429947e89262Smrg func_dirname_and_basename "$dest" "" "." 4300e6d2e958Smrg destdir=$func_dirname_result 4301e6d2e958Smrg destname=$func_basename_result 430247e89262Smrg 430347e89262Smrg # Not a directory, so check to see that there is only one file specified. 430447e89262Smrg set dummy $files; shift 430547e89262Smrg test "$#" -gt 1 && \ 4306e6d2e958Smrg func_fatal_help "'$dest' is not a directory" 430747e89262Smrg fi 430847e89262Smrg case $destdir in 430947e89262Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4310bd1da9d7Smrg *) 431147e89262Smrg for file in $files; do 431247e89262Smrg case $file in 431347e89262Smrg *.lo) ;; 431447e89262Smrg *) 4315e6d2e958Smrg func_fatal_help "'$destdir' must be an absolute directory name" 431647e89262Smrg ;; 431747e89262Smrg esac 431847e89262Smrg done 4319bd1da9d7Smrg ;; 4320bd1da9d7Smrg esac 4321bd1da9d7Smrg 432247e89262Smrg # This variable tells wrapper scripts just to set variables rather 432347e89262Smrg # than running their programs. 4324e6d2e958Smrg libtool_install_magic=$magic 4325bd1da9d7Smrg 432647e89262Smrg staticlibs= 432747e89262Smrg future_libdirs= 432847e89262Smrg current_libdirs= 432947e89262Smrg for file in $files; do 4330bd1da9d7Smrg 433147e89262Smrg # Do each installation. 433247e89262Smrg case $file in 433347e89262Smrg *.$libext) 433447e89262Smrg # Do the static libraries later. 4335899129b3Smrg func_append staticlibs " $file" 433647e89262Smrg ;; 433747e89262Smrg 433847e89262Smrg *.la) 4339899129b3Smrg func_resolve_sysroot "$file" 4340899129b3Smrg file=$func_resolve_sysroot_result 4341899129b3Smrg 434247e89262Smrg # Check to see that this really is a libtool archive. 434347e89262Smrg func_lalib_unsafe_p "$file" \ 4344e6d2e958Smrg || func_fatal_help "'$file' is not a valid libtool archive" 434547e89262Smrg 434647e89262Smrg library_names= 434747e89262Smrg old_library= 434847e89262Smrg relink_command= 434947e89262Smrg func_source "$file" 435047e89262Smrg 435147e89262Smrg # Add the libdir to current_libdirs if it is the destination. 435247e89262Smrg if test "X$destdir" = "X$libdir"; then 435347e89262Smrg case "$current_libdirs " in 435447e89262Smrg *" $libdir "*) ;; 4355899129b3Smrg *) func_append current_libdirs " $libdir" ;; 4356bd1da9d7Smrg esac 435747e89262Smrg else 435847e89262Smrg # Note the libdir as a future libdir. 435947e89262Smrg case "$future_libdirs " in 436047e89262Smrg *" $libdir "*) ;; 4361899129b3Smrg *) func_append future_libdirs " $libdir" ;; 436247e89262Smrg esac 436347e89262Smrg fi 4364bd1da9d7Smrg 436547e89262Smrg func_dirname "$file" "/" "" 4366e6d2e958Smrg dir=$func_dirname_result 4367899129b3Smrg func_append dir "$objdir" 436847e89262Smrg 436947e89262Smrg if test -n "$relink_command"; then 437047e89262Smrg # Determine the prefix the user has applied to our future dir. 437147e89262Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 437247e89262Smrg 437347e89262Smrg # Don't allow the user to place us outside of our expected 437447e89262Smrg # location b/c this prevents finding dependent libraries that 437547e89262Smrg # are installed to the same prefix. 437647e89262Smrg # At present, this check doesn't affect windows .dll's that 437747e89262Smrg # are installed into $libdir/../bin (currently, that works fine) 437847e89262Smrg # but it's something to keep an eye on. 437947e89262Smrg test "$inst_prefix_dir" = "$destdir" && \ 4380e6d2e958Smrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 438147e89262Smrg 438247e89262Smrg if test -n "$inst_prefix_dir"; then 438347e89262Smrg # Stick the inst_prefix_dir data into the link command. 438447e89262Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 438547e89262Smrg else 438647e89262Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 438747e89262Smrg fi 438847e89262Smrg 4389e6d2e958Smrg func_warning "relinking '$file'" 439047e89262Smrg func_show_eval "$relink_command" \ 4391e6d2e958Smrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 439247e89262Smrg fi 439347e89262Smrg 439447e89262Smrg # See the names of the shared library. 439547e89262Smrg set dummy $library_names; shift 439647e89262Smrg if test -n "$1"; then 4397e6d2e958Smrg realname=$1 439847e89262Smrg shift 439947e89262Smrg 4400e6d2e958Smrg srcname=$realname 4401e6d2e958Smrg test -n "$relink_command" && srcname=${realname}T 440247e89262Smrg 440347e89262Smrg # Install the shared library and build the symlinks. 440447e89262Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 440547e89262Smrg 'exit $?' 4406e6d2e958Smrg tstripme=$stripme 440747e89262Smrg case $host_os in 440847e89262Smrg cygwin* | mingw* | pw32* | cegcc*) 440947e89262Smrg case $realname in 441047e89262Smrg *.dll.a) 4411e6d2e958Smrg tstripme= 4412e6d2e958Smrg ;; 4413e6d2e958Smrg esac 4414e6d2e958Smrg ;; 4415e6d2e958Smrg os2*) 4416e6d2e958Smrg case $realname in 4417e6d2e958Smrg *_dll.a) 4418e6d2e958Smrg tstripme= 441947e89262Smrg ;; 442047e89262Smrg esac 4421bd1da9d7Smrg ;; 4422bd1da9d7Smrg esac 442347e89262Smrg if test -n "$tstripme" && test -n "$striplib"; then 442447e89262Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 442547e89262Smrg fi 442647e89262Smrg 442747e89262Smrg if test "$#" -gt 0; then 442847e89262Smrg # Delete the old symlinks, and create new ones. 4429e6d2e958Smrg # Try 'ln -sf' first, because the 'ln' binary might depend on 443047e89262Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 443147e89262Smrg # so we also need to try rm && ln -s. 443247e89262Smrg for linkname 443347e89262Smrg do 443447e89262Smrg test "$linkname" != "$realname" \ 443547e89262Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 443647e89262Smrg done 443747e89262Smrg fi 443847e89262Smrg 443947e89262Smrg # Do each command in the postinstall commands. 4440e6d2e958Smrg lib=$destdir/$realname 444147e89262Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 444247e89262Smrg fi 444347e89262Smrg 444447e89262Smrg # Install the pseudo-library for information purposes. 444547e89262Smrg func_basename "$file" 4446e6d2e958Smrg name=$func_basename_result 4447e6d2e958Smrg instname=$dir/${name}i 444847e89262Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 444947e89262Smrg 445047e89262Smrg # Maybe install the static library, too. 4451899129b3Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4452bd1da9d7Smrg ;; 445347e89262Smrg 445447e89262Smrg *.lo) 445547e89262Smrg # Install (i.e. copy) a libtool object. 445647e89262Smrg 445747e89262Smrg # Figure out destination file name, if it wasn't already specified. 445847e89262Smrg if test -n "$destname"; then 4459e6d2e958Smrg destfile=$destdir/$destname 446047e89262Smrg else 446147e89262Smrg func_basename "$file" 4462e6d2e958Smrg destfile=$func_basename_result 4463e6d2e958Smrg destfile=$destdir/$destfile 446447e89262Smrg fi 446547e89262Smrg 446647e89262Smrg # Deduce the name of the destination old-style object file. 446747e89262Smrg case $destfile in 446847e89262Smrg *.lo) 446947e89262Smrg func_lo2o "$destfile" 447047e89262Smrg staticdest=$func_lo2o_result 4471bd1da9d7Smrg ;; 447247e89262Smrg *.$objext) 4473e6d2e958Smrg staticdest=$destfile 447447e89262Smrg destfile= 4475bd1da9d7Smrg ;; 447647e89262Smrg *) 4477e6d2e958Smrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4478bd1da9d7Smrg ;; 447947e89262Smrg esac 448047e89262Smrg 448147e89262Smrg # Install the libtool object if requested. 448247e89262Smrg test -n "$destfile" && \ 448347e89262Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 448447e89262Smrg 448547e89262Smrg # Install the old object if enabled. 4486e6d2e958Smrg if test yes = "$build_old_libs"; then 448747e89262Smrg # Deduce the name of the old-style object file. 448847e89262Smrg func_lo2o "$file" 448947e89262Smrg staticobj=$func_lo2o_result 449047e89262Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4491bd1da9d7Smrg fi 449247e89262Smrg exit $EXIT_SUCCESS 449347e89262Smrg ;; 4494bd1da9d7Smrg 449547e89262Smrg *) 449647e89262Smrg # Figure out destination file name, if it wasn't already specified. 449747e89262Smrg if test -n "$destname"; then 4498e6d2e958Smrg destfile=$destdir/$destname 4499bd1da9d7Smrg else 450047e89262Smrg func_basename "$file" 4501e6d2e958Smrg destfile=$func_basename_result 4502e6d2e958Smrg destfile=$destdir/$destfile 4503bd1da9d7Smrg fi 4504bd1da9d7Smrg 450547e89262Smrg # If the file is missing, and there is a .exe on the end, strip it 450647e89262Smrg # because it is most likely a libtool script we actually want to 450747e89262Smrg # install 4508e6d2e958Smrg stripped_ext= 450947e89262Smrg case $file in 451047e89262Smrg *.exe) 451147e89262Smrg if test ! -f "$file"; then 451247e89262Smrg func_stripname '' '.exe' "$file" 451347e89262Smrg file=$func_stripname_result 4514e6d2e958Smrg stripped_ext=.exe 451547e89262Smrg fi 451647e89262Smrg ;; 451747e89262Smrg esac 4518bd1da9d7Smrg 451947e89262Smrg # Do a test to see if this is really a libtool program. 452047e89262Smrg case $host in 452147e89262Smrg *cygwin* | *mingw*) 452247e89262Smrg if func_ltwrapper_executable_p "$file"; then 452347e89262Smrg func_ltwrapper_scriptname "$file" 452447e89262Smrg wrapper=$func_ltwrapper_scriptname_result 452547e89262Smrg else 452647e89262Smrg func_stripname '' '.exe' "$file" 452747e89262Smrg wrapper=$func_stripname_result 452847e89262Smrg fi 452947e89262Smrg ;; 453047e89262Smrg *) 453147e89262Smrg wrapper=$file 453247e89262Smrg ;; 453347e89262Smrg esac 453447e89262Smrg if func_ltwrapper_script_p "$wrapper"; then 453547e89262Smrg notinst_deplibs= 453647e89262Smrg relink_command= 4537bd1da9d7Smrg 453847e89262Smrg func_source "$wrapper" 4539bd1da9d7Smrg 454047e89262Smrg # Check the variables that should have been set. 454147e89262Smrg test -z "$generated_by_libtool_version" && \ 4542e6d2e958Smrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4543bd1da9d7Smrg 4544e6d2e958Smrg finalize=: 454547e89262Smrg for lib in $notinst_deplibs; do 454647e89262Smrg # Check to see that each library is installed. 454747e89262Smrg libdir= 454847e89262Smrg if test -f "$lib"; then 454947e89262Smrg func_source "$lib" 4550bd1da9d7Smrg fi 4551e6d2e958Smrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 455247e89262Smrg if test -n "$libdir" && test ! -f "$libfile"; then 4553e6d2e958Smrg func_warning "'$lib' has not been installed in '$libdir'" 4554e6d2e958Smrg finalize=false 455547e89262Smrg fi 455647e89262Smrg done 4557bd1da9d7Smrg 455847e89262Smrg relink_command= 455947e89262Smrg func_source "$wrapper" 4560bd1da9d7Smrg 456147e89262Smrg outputname= 4562e6d2e958Smrg if test no = "$fast_install" && test -n "$relink_command"; then 456347e89262Smrg $opt_dry_run || { 4564e6d2e958Smrg if $finalize; then 456547e89262Smrg tmpdir=`func_mktempdir` 456647e89262Smrg func_basename "$file$stripped_ext" 4567e6d2e958Smrg file=$func_basename_result 4568e6d2e958Smrg outputname=$tmpdir/$file 456947e89262Smrg # Replace the output file specification. 457047e89262Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 457147e89262Smrg 4572e6d2e958Smrg $opt_quiet || { 457347e89262Smrg func_quote_for_expand "$relink_command" 457447e89262Smrg eval "func_echo $func_quote_for_expand_result" 457547e89262Smrg } 457647e89262Smrg if eval "$relink_command"; then : 457747e89262Smrg else 4578e6d2e958Smrg func_error "error: relink '$file' with the above command before installing it" 457947e89262Smrg $opt_dry_run || ${RM}r "$tmpdir" 458047e89262Smrg continue 458147e89262Smrg fi 4582e6d2e958Smrg file=$outputname 458347e89262Smrg else 4584e6d2e958Smrg func_warning "cannot relink '$file'" 458547e89262Smrg fi 458647e89262Smrg } 4587bd1da9d7Smrg else 458847e89262Smrg # Install the binary that we compiled earlier. 458947e89262Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4590bd1da9d7Smrg fi 459147e89262Smrg fi 4592bd1da9d7Smrg 459347e89262Smrg # remove .exe since cygwin /usr/bin/install will append another 459447e89262Smrg # one anyway 459547e89262Smrg case $install_prog,$host in 459647e89262Smrg */usr/bin/install*,*cygwin*) 459747e89262Smrg case $file:$destfile in 459847e89262Smrg *.exe:*.exe) 459947e89262Smrg # this is ok 460047e89262Smrg ;; 460147e89262Smrg *.exe:*) 460247e89262Smrg destfile=$destfile.exe 460347e89262Smrg ;; 460447e89262Smrg *:*.exe) 460547e89262Smrg func_stripname '' '.exe' "$destfile" 460647e89262Smrg destfile=$func_stripname_result 460747e89262Smrg ;; 460847e89262Smrg esac 4609bd1da9d7Smrg ;; 4610bd1da9d7Smrg esac 461147e89262Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 461247e89262Smrg $opt_dry_run || if test -n "$outputname"; then 461347e89262Smrg ${RM}r "$tmpdir" 461447e89262Smrg fi 461547e89262Smrg ;; 461647e89262Smrg esac 461747e89262Smrg done 4618bd1da9d7Smrg 461947e89262Smrg for file in $staticlibs; do 462047e89262Smrg func_basename "$file" 4621e6d2e958Smrg name=$func_basename_result 462247e89262Smrg 462347e89262Smrg # Set up the ranlib parameters. 4624e6d2e958Smrg oldlib=$destdir/$name 4625899129b3Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4626899129b3Smrg tool_oldlib=$func_to_tool_file_result 462747e89262Smrg 462847e89262Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 462947e89262Smrg 463047e89262Smrg if test -n "$stripme" && test -n "$old_striplib"; then 4631899129b3Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 463247e89262Smrg fi 463347e89262Smrg 463447e89262Smrg # Do each command in the postinstall commands. 463547e89262Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 463647e89262Smrg done 463747e89262Smrg 463847e89262Smrg test -n "$future_libdirs" && \ 4639e6d2e958Smrg func_warning "remember to run '$progname --finish$future_libdirs'" 464047e89262Smrg 464147e89262Smrg if test -n "$current_libdirs"; then 464247e89262Smrg # Maybe just do a dry run. 464347e89262Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 4644e6d2e958Smrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 464547e89262Smrg else 464647e89262Smrg exit $EXIT_SUCCESS 464747e89262Smrg fi 464847e89262Smrg} 464947e89262Smrg 4650e6d2e958Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 465147e89262Smrg 465247e89262Smrg 465347e89262Smrg# func_generate_dlsyms outputname originator pic_p 465447e89262Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 465547e89262Smrg# a dlpreopen symbol table. 465647e89262Smrgfunc_generate_dlsyms () 465747e89262Smrg{ 4658e6d2e958Smrg $debug_cmd 4659e6d2e958Smrg 4660e6d2e958Smrg my_outputname=$1 4661e6d2e958Smrg my_originator=$2 4662e6d2e958Smrg my_pic_p=${3-false} 4663e6d2e958Smrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 466447e89262Smrg my_dlsyms= 466547e89262Smrg 4666e6d2e958Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 466747e89262Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 4668e6d2e958Smrg my_dlsyms=${my_outputname}S.c 466947e89262Smrg else 467047e89262Smrg func_error "not configured to extract global symbols from dlpreopened files" 467147e89262Smrg fi 467247e89262Smrg fi 467347e89262Smrg 467447e89262Smrg if test -n "$my_dlsyms"; then 467547e89262Smrg case $my_dlsyms in 467647e89262Smrg "") ;; 467747e89262Smrg *.c) 467847e89262Smrg # Discover the nlist of each of the dlfiles. 4679e6d2e958Smrg nlist=$output_objdir/$my_outputname.nm 468047e89262Smrg 468147e89262Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 468247e89262Smrg 468347e89262Smrg # Parse the name list into a source file. 468447e89262Smrg func_verbose "creating $output_objdir/$my_dlsyms" 468547e89262Smrg 468647e89262Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4687e6d2e958Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4688e6d2e958Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 468947e89262Smrg 469047e89262Smrg#ifdef __cplusplus 469147e89262Smrgextern \"C\" { 469247e89262Smrg#endif 469347e89262Smrg 4694e6d2e958Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 469547e89262Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 469647e89262Smrg#endif 469747e89262Smrg 4698899129b3Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4699e6d2e958Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4700e6d2e958Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 4701899129b3Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 4702899129b3Smrg# define LT_DLSYM_CONST 4703e6d2e958Smrg#elif defined __osf__ 4704899129b3Smrg/* This system does not cope well with relocations in const data. */ 4705899129b3Smrg# define LT_DLSYM_CONST 4706899129b3Smrg#else 4707899129b3Smrg# define LT_DLSYM_CONST const 4708899129b3Smrg#endif 4709899129b3Smrg 4710e6d2e958Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4711e6d2e958Smrg 471247e89262Smrg/* External symbol declarations for the compiler. */\ 471347e89262Smrg" 471447e89262Smrg 4715e6d2e958Smrg if test yes = "$dlself"; then 4716e6d2e958Smrg func_verbose "generating symbol list for '$output'" 471747e89262Smrg 471847e89262Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 471947e89262Smrg 472047e89262Smrg # Add our own program objects to the symbol list. 472147e89262Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 472247e89262Smrg for progfile in $progfiles; do 4723899129b3Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4724e6d2e958Smrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4725899129b3Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 472647e89262Smrg done 472747e89262Smrg 472847e89262Smrg if test -n "$exclude_expsyms"; then 472947e89262Smrg $opt_dry_run || { 473047e89262Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 473147e89262Smrg eval '$MV "$nlist"T "$nlist"' 473247e89262Smrg } 4733bd1da9d7Smrg fi 473447e89262Smrg 473547e89262Smrg if test -n "$export_symbols_regex"; then 473647e89262Smrg $opt_dry_run || { 473747e89262Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 473847e89262Smrg eval '$MV "$nlist"T "$nlist"' 473947e89262Smrg } 474047e89262Smrg fi 474147e89262Smrg 474247e89262Smrg # Prepare the list of exported symbols 474347e89262Smrg if test -z "$export_symbols"; then 4744e6d2e958Smrg export_symbols=$output_objdir/$outputname.exp 474547e89262Smrg $opt_dry_run || { 474647e89262Smrg $RM $export_symbols 4747e6d2e958Smrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 474847e89262Smrg case $host in 474947e89262Smrg *cygwin* | *mingw* | *cegcc* ) 475047e89262Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 475147e89262Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 475247e89262Smrg ;; 475347e89262Smrg esac 475447e89262Smrg } 4755bd1da9d7Smrg else 475647e89262Smrg $opt_dry_run || { 4757e6d2e958Smrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 475847e89262Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 475947e89262Smrg eval '$MV "$nlist"T "$nlist"' 476047e89262Smrg case $host in 476147e89262Smrg *cygwin* | *mingw* | *cegcc* ) 476247e89262Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 476347e89262Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 476447e89262Smrg ;; 476547e89262Smrg esac 476647e89262Smrg } 4767bd1da9d7Smrg fi 476847e89262Smrg fi 4769bd1da9d7Smrg 477047e89262Smrg for dlprefile in $dlprefiles; do 4771e6d2e958Smrg func_verbose "extracting global C symbols from '$dlprefile'" 477247e89262Smrg func_basename "$dlprefile" 4773e6d2e958Smrg name=$func_basename_result 4774899129b3Smrg case $host in 4775899129b3Smrg *cygwin* | *mingw* | *cegcc* ) 4776899129b3Smrg # if an import library, we need to obtain dlname 4777899129b3Smrg if func_win32_import_lib_p "$dlprefile"; then 4778899129b3Smrg func_tr_sh "$dlprefile" 4779899129b3Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 4780e6d2e958Smrg dlprefile_dlbasename= 4781899129b3Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4782899129b3Smrg # Use subshell, to avoid clobbering current variable values 4783899129b3Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4784e6d2e958Smrg if test -n "$dlprefile_dlname"; then 4785899129b3Smrg func_basename "$dlprefile_dlname" 4786e6d2e958Smrg dlprefile_dlbasename=$func_basename_result 4787899129b3Smrg else 4788899129b3Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 4789899129b3Smrg $sharedlib_from_linklib_cmd "$dlprefile" 4790899129b3Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 4791899129b3Smrg fi 4792899129b3Smrg fi 4793899129b3Smrg $opt_dry_run || { 4794e6d2e958Smrg if test -n "$dlprefile_dlbasename"; then 4795899129b3Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4796899129b3Smrg else 4797899129b3Smrg func_warning "Could not compute DLL name from $name" 4798899129b3Smrg eval '$ECHO ": $name " >> "$nlist"' 4799899129b3Smrg fi 4800899129b3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4801899129b3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4802899129b3Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4803899129b3Smrg } 4804899129b3Smrg else # not an import lib 4805899129b3Smrg $opt_dry_run || { 4806899129b3Smrg eval '$ECHO ": $name " >> "$nlist"' 4807899129b3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4808899129b3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4809899129b3Smrg } 4810899129b3Smrg fi 4811899129b3Smrg ;; 4812899129b3Smrg *) 4813899129b3Smrg $opt_dry_run || { 4814899129b3Smrg eval '$ECHO ": $name " >> "$nlist"' 4815899129b3Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4816899129b3Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4817899129b3Smrg } 4818899129b3Smrg ;; 4819899129b3Smrg esac 482047e89262Smrg done 482147e89262Smrg 482247e89262Smrg $opt_dry_run || { 482347e89262Smrg # Make sure we have at least an empty file. 482447e89262Smrg test -f "$nlist" || : > "$nlist" 482547e89262Smrg 482647e89262Smrg if test -n "$exclude_expsyms"; then 482747e89262Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 482847e89262Smrg $MV "$nlist"T "$nlist" 4829bd1da9d7Smrg fi 483047e89262Smrg 483147e89262Smrg # Try sorting and uniquifying the output. 483247e89262Smrg if $GREP -v "^: " < "$nlist" | 483347e89262Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 483447e89262Smrg sort -k 3 483547e89262Smrg else 483647e89262Smrg sort +2 483747e89262Smrg fi | 483847e89262Smrg uniq > "$nlist"S; then 483947e89262Smrg : 4840bd1da9d7Smrg else 484147e89262Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 4842bd1da9d7Smrg fi 4843bd1da9d7Smrg 484447e89262Smrg if test -f "$nlist"S; then 484547e89262Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 4846bd1da9d7Smrg else 484747e89262Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 4848bd1da9d7Smrg fi 4849bd1da9d7Smrg 4850e6d2e958Smrg func_show_eval '$RM "${nlist}I"' 4851e6d2e958Smrg if test -n "$global_symbol_to_import"; then 4852e6d2e958Smrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 4853e6d2e958Smrg fi 4854e6d2e958Smrg 485547e89262Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4856bd1da9d7Smrg 485747e89262Smrg/* The mapping between symbol names and symbols. */ 485847e89262Smrgtypedef struct { 485947e89262Smrg const char *name; 486047e89262Smrg void *address; 486147e89262Smrg} lt_dlsymlist; 4862899129b3Smrgextern LT_DLSYM_CONST lt_dlsymlist 4863e6d2e958Smrglt_${my_prefix}_LTX_preloaded_symbols[];\ 4864e6d2e958Smrg" 4865e6d2e958Smrg 4866e6d2e958Smrg if test -s "$nlist"I; then 4867e6d2e958Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4868e6d2e958Smrgstatic void lt_syminit(void) 4869e6d2e958Smrg{ 4870e6d2e958Smrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 4871e6d2e958Smrg for (; symbol->name; ++symbol) 4872e6d2e958Smrg {" 4873e6d2e958Smrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 4874e6d2e958Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4875e6d2e958Smrg } 4876e6d2e958Smrg}" 4877e6d2e958Smrg fi 4878e6d2e958Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4879899129b3SmrgLT_DLSYM_CONST lt_dlsymlist 488047e89262Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 4881e6d2e958Smrg{ {\"$my_originator\", (void *) 0}," 4882e6d2e958Smrg 4883e6d2e958Smrg if test -s "$nlist"I; then 4884e6d2e958Smrg echo >> "$output_objdir/$my_dlsyms" "\ 4885e6d2e958Smrg {\"@INIT@\", (void *) <_syminit}," 4886e6d2e958Smrg fi 4887bd1da9d7Smrg 488847e89262Smrg case $need_lib_prefix in 488947e89262Smrg no) 489047e89262Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 489147e89262Smrg ;; 489247e89262Smrg *) 489347e89262Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 489447e89262Smrg ;; 489547e89262Smrg esac 489647e89262Smrg echo >> "$output_objdir/$my_dlsyms" "\ 489747e89262Smrg {0, (void *) 0} 489847e89262Smrg}; 4899bd1da9d7Smrg 490047e89262Smrg/* This works around a problem in FreeBSD linker */ 490147e89262Smrg#ifdef FREEBSD_WORKAROUND 490247e89262Smrgstatic const void *lt_preloaded_setup() { 490347e89262Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 490447e89262Smrg} 490547e89262Smrg#endif 4906bd1da9d7Smrg 490747e89262Smrg#ifdef __cplusplus 490847e89262Smrg} 490947e89262Smrg#endif\ 491047e89262Smrg" 491147e89262Smrg } # !$opt_dry_run 4912bd1da9d7Smrg 491347e89262Smrg pic_flag_for_symtable= 491447e89262Smrg case "$compile_command " in 491547e89262Smrg *" -static "*) ;; 491647e89262Smrg *) 491747e89262Smrg case $host in 491847e89262Smrg # compiling the symbol table file with pic_flag works around 491947e89262Smrg # a FreeBSD bug that causes programs to crash when -lm is 492047e89262Smrg # linked before any other PIC object. But we must not use 492147e89262Smrg # pic_flag when linking with -static. The problem exists in 492247e89262Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 4923899129b3Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 492447e89262Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 492547e89262Smrg *-*-hpux*) 492647e89262Smrg pic_flag_for_symtable=" $pic_flag" ;; 492747e89262Smrg *) 4928e6d2e958Smrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 492947e89262Smrg ;; 493047e89262Smrg esac 493147e89262Smrg ;; 493247e89262Smrg esac 493347e89262Smrg symtab_cflags= 493447e89262Smrg for arg in $LTCFLAGS; do 493547e89262Smrg case $arg in 493647e89262Smrg -pie | -fpie | -fPIE) ;; 4937899129b3Smrg *) func_append symtab_cflags " $arg" ;; 493847e89262Smrg esac 493947e89262Smrg done 4940bd1da9d7Smrg 494147e89262Smrg # Now compile the dynamic symbol file. 494247e89262Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 4943bd1da9d7Smrg 494447e89262Smrg # Clean up the generated files. 4945e6d2e958Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 4946bd1da9d7Smrg 494747e89262Smrg # Transform the symbol file into the correct name. 4948e6d2e958Smrg symfileobj=$output_objdir/${my_outputname}S.$objext 494947e89262Smrg case $host in 495047e89262Smrg *cygwin* | *mingw* | *cegcc* ) 495147e89262Smrg if test -f "$output_objdir/$my_outputname.def"; then 495247e89262Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 495347e89262Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 495447e89262Smrg else 495547e89262Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 495647e89262Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 495747e89262Smrg fi 495847e89262Smrg ;; 495947e89262Smrg *) 496047e89262Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 496147e89262Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 496247e89262Smrg ;; 496347e89262Smrg esac 496447e89262Smrg ;; 496547e89262Smrg *) 4966e6d2e958Smrg func_fatal_error "unknown suffix for '$my_dlsyms'" 496747e89262Smrg ;; 496847e89262Smrg esac 496947e89262Smrg else 497047e89262Smrg # We keep going just in case the user didn't refer to 497147e89262Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 497247e89262Smrg # really was required. 4973bd1da9d7Smrg 497447e89262Smrg # Nullify the symbol file. 497547e89262Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 497647e89262Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 497747e89262Smrg fi 497847e89262Smrg} 4979bd1da9d7Smrg 4980e6d2e958Smrg# func_cygming_gnu_implib_p ARG 4981e6d2e958Smrg# This predicate returns with zero status (TRUE) if 4982e6d2e958Smrg# ARG is a GNU/binutils-style import library. Returns 4983e6d2e958Smrg# with nonzero status (FALSE) otherwise. 4984e6d2e958Smrgfunc_cygming_gnu_implib_p () 4985e6d2e958Smrg{ 4986e6d2e958Smrg $debug_cmd 4987e6d2e958Smrg 4988e6d2e958Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 4989e6d2e958Smrg 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)$'` 4990e6d2e958Smrg test -n "$func_cygming_gnu_implib_tmp" 4991e6d2e958Smrg} 4992e6d2e958Smrg 4993e6d2e958Smrg# func_cygming_ms_implib_p ARG 4994e6d2e958Smrg# This predicate returns with zero status (TRUE) if 4995e6d2e958Smrg# ARG is an MS-style import library. Returns 4996e6d2e958Smrg# with nonzero status (FALSE) otherwise. 4997e6d2e958Smrgfunc_cygming_ms_implib_p () 4998e6d2e958Smrg{ 4999e6d2e958Smrg $debug_cmd 5000e6d2e958Smrg 5001e6d2e958Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5002e6d2e958Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 5003e6d2e958Smrg test -n "$func_cygming_ms_implib_tmp" 5004e6d2e958Smrg} 5005e6d2e958Smrg 500647e89262Smrg# func_win32_libid arg 500747e89262Smrg# return the library type of file 'arg' 500847e89262Smrg# 500947e89262Smrg# Need a lot of goo to handle *both* DLLs and import libs 501047e89262Smrg# Has to be a shell function in order to 'eat' the argument 501147e89262Smrg# that is supplied when $file_magic_command is called. 501247e89262Smrg# Despite the name, also deal with 64 bit binaries. 501347e89262Smrgfunc_win32_libid () 501447e89262Smrg{ 5015e6d2e958Smrg $debug_cmd 5016e6d2e958Smrg 5017e6d2e958Smrg win32_libid_type=unknown 501847e89262Smrg win32_fileres=`file -L $1 2>/dev/null` 501947e89262Smrg case $win32_fileres in 502047e89262Smrg *ar\ archive\ import\ library*) # definitely import 502147e89262Smrg win32_libid_type="x86 archive import" 502247e89262Smrg ;; 502347e89262Smrg *ar\ archive*) # could be an import, or static 502447e89262Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 502547e89262Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 502647e89262Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 5027e6d2e958Smrg case $nm_interface in 5028e6d2e958Smrg "MS dumpbin") 5029e6d2e958Smrg if func_cygming_ms_implib_p "$1" || 5030e6d2e958Smrg func_cygming_gnu_implib_p "$1" 5031e6d2e958Smrg then 5032e6d2e958Smrg win32_nmres=import 5033e6d2e958Smrg else 5034e6d2e958Smrg win32_nmres= 5035e6d2e958Smrg fi 5036e6d2e958Smrg ;; 5037e6d2e958Smrg *) 5038e6d2e958Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 5039e6d2e958Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 5040e6d2e958Smrg $SED -n -e ' 504147e89262Smrg 1,100{ 504247e89262Smrg / I /{ 5043e6d2e958Smrg s|.*|import| 504447e89262Smrg p 504547e89262Smrg q 504647e89262Smrg } 504747e89262Smrg }'` 5048e6d2e958Smrg ;; 5049e6d2e958Smrg esac 505047e89262Smrg case $win32_nmres in 505147e89262Smrg import*) win32_libid_type="x86 archive import";; 505247e89262Smrg *) win32_libid_type="x86 archive static";; 505347e89262Smrg esac 505447e89262Smrg fi 505547e89262Smrg ;; 505647e89262Smrg *DLL*) 505747e89262Smrg win32_libid_type="x86 DLL" 505847e89262Smrg ;; 505947e89262Smrg *executable*) # but shell scripts are "executable" too... 506047e89262Smrg case $win32_fileres in 506147e89262Smrg *MS\ Windows\ PE\ Intel*) 506247e89262Smrg win32_libid_type="x86 DLL" 506347e89262Smrg ;; 506447e89262Smrg esac 506547e89262Smrg ;; 506647e89262Smrg esac 506747e89262Smrg $ECHO "$win32_libid_type" 506847e89262Smrg} 5069bd1da9d7Smrg 5070899129b3Smrg# func_cygming_dll_for_implib ARG 5071899129b3Smrg# 5072899129b3Smrg# Platform-specific function to extract the 5073899129b3Smrg# name of the DLL associated with the specified 5074899129b3Smrg# import library ARG. 5075899129b3Smrg# Invoked by eval'ing the libtool variable 5076899129b3Smrg# $sharedlib_from_linklib_cmd 5077899129b3Smrg# Result is available in the variable 5078899129b3Smrg# $sharedlib_from_linklib_result 5079899129b3Smrgfunc_cygming_dll_for_implib () 5080899129b3Smrg{ 5081e6d2e958Smrg $debug_cmd 5082e6d2e958Smrg 5083899129b3Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 5084899129b3Smrg} 5085899129b3Smrg 5086899129b3Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 5087899129b3Smrg# 5088899129b3Smrg# The is the core of a fallback implementation of a 5089899129b3Smrg# platform-specific function to extract the name of the 5090899129b3Smrg# DLL associated with the specified import library LIBNAME. 5091899129b3Smrg# 5092899129b3Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 5093899129b3Smrg# on the platform and compiler that created the implib. 5094899129b3Smrg# 5095899129b3Smrg# Echos the name of the DLL associated with the 5096899129b3Smrg# specified import library. 5097899129b3Smrgfunc_cygming_dll_for_implib_fallback_core () 5098899129b3Smrg{ 5099e6d2e958Smrg $debug_cmd 5100e6d2e958Smrg 5101899129b3Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5102899129b3Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5103899129b3Smrg $SED '/^Contents of section '"$match_literal"':/{ 5104899129b3Smrg # Place marker at beginning of archive member dllname section 5105899129b3Smrg s/.*/====MARK====/ 5106899129b3Smrg p 5107899129b3Smrg d 5108899129b3Smrg } 5109899129b3Smrg # These lines can sometimes be longer than 43 characters, but 5110899129b3Smrg # are always uninteresting 5111899129b3Smrg /:[ ]*file format pe[i]\{,1\}-/d 5112899129b3Smrg /^In archive [^:]*:/d 5113899129b3Smrg # Ensure marker is printed 5114899129b3Smrg /^====MARK====/p 5115899129b3Smrg # Remove all lines with less than 43 characters 5116899129b3Smrg /^.\{43\}/!d 5117899129b3Smrg # From remaining lines, remove first 43 characters 5118899129b3Smrg s/^.\{43\}//' | 5119899129b3Smrg $SED -n ' 5120899129b3Smrg # Join marker and all lines until next marker into a single line 5121899129b3Smrg /^====MARK====/ b para 5122899129b3Smrg H 5123899129b3Smrg $ b para 5124899129b3Smrg b 5125899129b3Smrg :para 5126899129b3Smrg x 5127899129b3Smrg s/\n//g 5128899129b3Smrg # Remove the marker 5129899129b3Smrg s/^====MARK====// 5130899129b3Smrg # Remove trailing dots and whitespace 5131899129b3Smrg s/[\. \t]*$// 5132899129b3Smrg # Print 5133899129b3Smrg /./p' | 5134899129b3Smrg # we now have a list, one entry per line, of the stringified 5135899129b3Smrg # contents of the appropriate section of all members of the 5136e6d2e958Smrg # archive that possess that section. Heuristic: eliminate 5137e6d2e958Smrg # all those that have a first or second character that is 5138899129b3Smrg # a '.' (that is, objdump's representation of an unprintable 5139899129b3Smrg # character.) This should work for all archives with less than 5140899129b3Smrg # 0x302f exports -- but will fail for DLLs whose name actually 5141899129b3Smrg # begins with a literal '.' or a single character followed by 5142899129b3Smrg # a '.'. 5143899129b3Smrg # 5144899129b3Smrg # Of those that remain, print the first one. 5145899129b3Smrg $SED -e '/^\./d;/^.\./d;q' 5146899129b3Smrg} 5147899129b3Smrg 5148899129b3Smrg# func_cygming_dll_for_implib_fallback ARG 5149899129b3Smrg# Platform-specific function to extract the 5150899129b3Smrg# name of the DLL associated with the specified 5151899129b3Smrg# import library ARG. 5152899129b3Smrg# 5153899129b3Smrg# This fallback implementation is for use when $DLLTOOL 5154899129b3Smrg# does not support the --identify-strict option. 5155899129b3Smrg# Invoked by eval'ing the libtool variable 5156899129b3Smrg# $sharedlib_from_linklib_cmd 5157899129b3Smrg# Result is available in the variable 5158899129b3Smrg# $sharedlib_from_linklib_result 5159899129b3Smrgfunc_cygming_dll_for_implib_fallback () 5160899129b3Smrg{ 5161e6d2e958Smrg $debug_cmd 5162e6d2e958Smrg 5163e6d2e958Smrg if func_cygming_gnu_implib_p "$1"; then 5164899129b3Smrg # binutils import library 5165899129b3Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5166e6d2e958Smrg elif func_cygming_ms_implib_p "$1"; then 5167899129b3Smrg # ms-generated import library 5168899129b3Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5169899129b3Smrg else 5170899129b3Smrg # unknown 5171e6d2e958Smrg sharedlib_from_linklib_result= 5172899129b3Smrg fi 5173899129b3Smrg} 5174bd1da9d7Smrg 5175bd1da9d7Smrg 517647e89262Smrg# func_extract_an_archive dir oldlib 517747e89262Smrgfunc_extract_an_archive () 517847e89262Smrg{ 5179e6d2e958Smrg $debug_cmd 5180e6d2e958Smrg 5181e6d2e958Smrg f_ex_an_ar_dir=$1; shift 5182e6d2e958Smrg f_ex_an_ar_oldlib=$1 5183e6d2e958Smrg if test yes = "$lock_old_archive_extraction"; then 518447e89262Smrg lockfile=$f_ex_an_ar_oldlib.lock 518547e89262Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 518647e89262Smrg func_echo "Waiting for $lockfile to be removed" 518747e89262Smrg sleep 2 518847e89262Smrg done 518947e89262Smrg fi 519047e89262Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 519147e89262Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 5192e6d2e958Smrg if test yes = "$lock_old_archive_extraction"; then 519347e89262Smrg $opt_dry_run || rm -f "$lockfile" 519447e89262Smrg fi 519547e89262Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 519647e89262Smrg : 519747e89262Smrg else 519847e89262Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 519947e89262Smrg fi 520047e89262Smrg} 5201bd1da9d7Smrg 5202bd1da9d7Smrg 520347e89262Smrg# func_extract_archives gentop oldlib ... 520447e89262Smrgfunc_extract_archives () 520547e89262Smrg{ 5206e6d2e958Smrg $debug_cmd 5207e6d2e958Smrg 5208e6d2e958Smrg my_gentop=$1; shift 520947e89262Smrg my_oldlibs=${1+"$@"} 5210e6d2e958Smrg my_oldobjs= 5211e6d2e958Smrg my_xlib= 5212e6d2e958Smrg my_xabs= 5213e6d2e958Smrg my_xdir= 5214bd1da9d7Smrg 521547e89262Smrg for my_xlib in $my_oldlibs; do 521647e89262Smrg # Extract the objects. 521747e89262Smrg case $my_xlib in 5218e6d2e958Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 521947e89262Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 522047e89262Smrg esac 522147e89262Smrg func_basename "$my_xlib" 5222e6d2e958Smrg my_xlib=$func_basename_result 522347e89262Smrg my_xlib_u=$my_xlib 522447e89262Smrg while :; do 522547e89262Smrg case " $extracted_archives " in 522647e89262Smrg *" $my_xlib_u "*) 522747e89262Smrg func_arith $extracted_serial + 1 522847e89262Smrg extracted_serial=$func_arith_result 522947e89262Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 523047e89262Smrg *) break ;; 523147e89262Smrg esac 523247e89262Smrg done 523347e89262Smrg extracted_archives="$extracted_archives $my_xlib_u" 5234e6d2e958Smrg my_xdir=$my_gentop/$my_xlib_u 5235bd1da9d7Smrg 523647e89262Smrg func_mkdir_p "$my_xdir" 523747e89262Smrg 523847e89262Smrg case $host in 523947e89262Smrg *-darwin*) 524047e89262Smrg func_verbose "Extracting $my_xabs" 524147e89262Smrg # Do not bother doing anything if just a dry run 524247e89262Smrg $opt_dry_run || { 524347e89262Smrg darwin_orig_dir=`pwd` 524447e89262Smrg cd $my_xdir || exit $? 524547e89262Smrg darwin_archive=$my_xabs 524647e89262Smrg darwin_curdir=`pwd` 5247e6d2e958Smrg func_basename "$darwin_archive" 5248e6d2e958Smrg darwin_base_archive=$func_basename_result 524947e89262Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 525047e89262Smrg if test -n "$darwin_arches"; then 525147e89262Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 525247e89262Smrg darwin_arch= 525347e89262Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5254e6d2e958Smrg for darwin_arch in $darwin_arches; do 5255e6d2e958Smrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5256e6d2e958Smrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5257e6d2e958Smrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5258e6d2e958Smrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 525947e89262Smrg cd "$darwin_curdir" 5260e6d2e958Smrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 526147e89262Smrg done # $darwin_arches 526247e89262Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5263e6d2e958Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 526447e89262Smrg darwin_file= 526547e89262Smrg darwin_files= 526647e89262Smrg for darwin_file in $darwin_filelist; do 526747e89262Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 526847e89262Smrg $LIPO -create -output "$darwin_file" $darwin_files 526947e89262Smrg done # $darwin_filelist 527047e89262Smrg $RM -rf unfat-$$ 527147e89262Smrg cd "$darwin_orig_dir" 5272bd1da9d7Smrg else 527347e89262Smrg cd $darwin_orig_dir 527447e89262Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 527547e89262Smrg fi # $darwin_arches 527647e89262Smrg } # !$opt_dry_run 527747e89262Smrg ;; 527847e89262Smrg *) 527947e89262Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 528047e89262Smrg ;; 528147e89262Smrg esac 528247e89262Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 528347e89262Smrg done 5284bd1da9d7Smrg 5285e6d2e958Smrg func_extract_archives_result=$my_oldobjs 528647e89262Smrg} 5287bd1da9d7Smrg 5288bd1da9d7Smrg 528947e89262Smrg# func_emit_wrapper [arg=no] 529047e89262Smrg# 529147e89262Smrg# Emit a libtool wrapper script on stdout. 529247e89262Smrg# Don't directly open a file because we may want to 529347e89262Smrg# incorporate the script contents within a cygwin/mingw 529447e89262Smrg# wrapper executable. Must ONLY be called from within 529547e89262Smrg# func_mode_link because it depends on a number of variables 529647e89262Smrg# set therein. 529747e89262Smrg# 529847e89262Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 529947e89262Smrg# variable will take. If 'yes', then the emitted script 5300e6d2e958Smrg# will assume that the directory where it is stored is 530147e89262Smrg# the $objdir directory. This is a cygwin/mingw-specific 530247e89262Smrg# behavior. 530347e89262Smrgfunc_emit_wrapper () 530447e89262Smrg{ 530547e89262Smrg func_emit_wrapper_arg1=${1-no} 5306bd1da9d7Smrg 530747e89262Smrg $ECHO "\ 530847e89262Smrg#! $SHELL 5309bd1da9d7Smrg 531047e89262Smrg# $output - temporary wrapper script for $objdir/$outputname 5311e6d2e958Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 531247e89262Smrg# 531347e89262Smrg# The $output program cannot be directly executed until all the libtool 531447e89262Smrg# libraries that it depends on are installed. 531547e89262Smrg# 531647e89262Smrg# This wrapper script should never be moved out of the build directory. 531747e89262Smrg# If it is, it will not operate correctly. 5318bd1da9d7Smrg 531947e89262Smrg# Sed substitution that helps us do robust quoting. It backslashifies 532047e89262Smrg# metacharacters that are still active within double-quoted strings. 532147e89262Smrgsed_quote_subst='$sed_quote_subst' 5322bd1da9d7Smrg 532347e89262Smrg# Be Bourne compatible 532447e89262Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 532547e89262Smrg emulate sh 532647e89262Smrg NULLCMD=: 532747e89262Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 532847e89262Smrg # is contrary to our usage. Disable this feature. 532947e89262Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 533047e89262Smrg setopt NO_GLOB_SUBST 533147e89262Smrgelse 533247e89262Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 533347e89262Smrgfi 533447e89262SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 533547e89262SmrgDUALCASE=1; export DUALCASE # for MKS sh 5336bd1da9d7Smrg 533747e89262Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 533847e89262Smrg# if CDPATH is set. 533947e89262Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5340bd1da9d7Smrg 534147e89262Smrgrelink_command=\"$relink_command\" 5342bd1da9d7Smrg 534347e89262Smrg# This environment variable determines our operation mode. 534447e89262Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 534547e89262Smrg # install mode needs the following variables: 534647e89262Smrg generated_by_libtool_version='$macro_version' 534747e89262Smrg notinst_deplibs='$notinst_deplibs' 534847e89262Smrgelse 534947e89262Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 535047e89262Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 535147e89262Smrg file=\"\$0\"" 5352bd1da9d7Smrg 535347e89262Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 535447e89262Smrg $ECHO "\ 5355bd1da9d7Smrg 535647e89262Smrg# A function that is used when there is no print builtin or printf. 535747e89262Smrgfunc_fallback_echo () 535847e89262Smrg{ 535947e89262Smrg eval 'cat <<_LTECHO_EOF 536047e89262Smrg\$1 536147e89262Smrg_LTECHO_EOF' 536247e89262Smrg} 536347e89262Smrg ECHO=\"$qECHO\" 536447e89262Smrg fi 536547e89262Smrg 536647e89262Smrg# Very basic option parsing. These options are (a) specific to 536747e89262Smrg# the libtool wrapper, (b) are identical between the wrapper 5368e6d2e958Smrg# /script/ and the wrapper /executable/ that is used only on 536947e89262Smrg# windows platforms, and (c) all begin with the string "--lt-" 5370e6d2e958Smrg# (application programs are unlikely to have options that match 537147e89262Smrg# this pattern). 537247e89262Smrg# 537347e89262Smrg# There are only two supported options: --lt-debug and 537447e89262Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 537547e89262Smrg# 537647e89262Smrg# The first argument to this parsing function should be the 537747e89262Smrg# script's $0 value, followed by "$@". 537847e89262Smrglt_option_debug= 537947e89262Smrgfunc_parse_lt_options () 538047e89262Smrg{ 538147e89262Smrg lt_script_arg0=\$0 538247e89262Smrg shift 538347e89262Smrg for lt_opt 538447e89262Smrg do 538547e89262Smrg case \"\$lt_opt\" in 538647e89262Smrg --lt-debug) lt_option_debug=1 ;; 538747e89262Smrg --lt-dump-script) 538847e89262Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 538947e89262Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 539047e89262Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 539147e89262Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 539247e89262Smrg exit 0 539347e89262Smrg ;; 539447e89262Smrg --lt-*) 539547e89262Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 539647e89262Smrg exit 1 5397bd1da9d7Smrg ;; 539847e89262Smrg esac 539947e89262Smrg done 5400bd1da9d7Smrg 540147e89262Smrg # Print the debug banner immediately: 540247e89262Smrg if test -n \"\$lt_option_debug\"; then 5403e6d2e958Smrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 540447e89262Smrg fi 540547e89262Smrg} 5406bd1da9d7Smrg 540747e89262Smrg# Used when --lt-debug. Prints its arguments to stdout 540847e89262Smrg# (redirection is the responsibility of the caller) 540947e89262Smrgfunc_lt_dump_args () 541047e89262Smrg{ 541147e89262Smrg lt_dump_args_N=1; 541247e89262Smrg for lt_arg 541347e89262Smrg do 5414e6d2e958Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 541547e89262Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 541647e89262Smrg done 541747e89262Smrg} 5418bd1da9d7Smrg 541947e89262Smrg# Core function for launching the target application 542047e89262Smrgfunc_exec_program_core () 542147e89262Smrg{ 542247e89262Smrg" 542347e89262Smrg case $host in 542447e89262Smrg # Backslashes separate directories on plain windows 542547e89262Smrg *-*-mingw | *-*-os2* | *-cegcc*) 542647e89262Smrg $ECHO "\ 542747e89262Smrg if test -n \"\$lt_option_debug\"; then 5428e6d2e958Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 542947e89262Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5430bd1da9d7Smrg fi 543147e89262Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 543247e89262Smrg" 543347e89262Smrg ;; 5434bd1da9d7Smrg 543547e89262Smrg *) 543647e89262Smrg $ECHO "\ 543747e89262Smrg if test -n \"\$lt_option_debug\"; then 5438e6d2e958Smrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 543947e89262Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5440bd1da9d7Smrg fi 544147e89262Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 544247e89262Smrg" 544347e89262Smrg ;; 544447e89262Smrg esac 544547e89262Smrg $ECHO "\ 544647e89262Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 544747e89262Smrg exit 1 544847e89262Smrg} 5449bd1da9d7Smrg 545047e89262Smrg# A function to encapsulate launching the target application 545147e89262Smrg# Strips options in the --lt-* namespace from \$@ and 545247e89262Smrg# launches target application with the remaining arguments. 545347e89262Smrgfunc_exec_program () 545447e89262Smrg{ 5455899129b3Smrg case \" \$* \" in 5456899129b3Smrg *\\ --lt-*) 5457899129b3Smrg for lt_wr_arg 5458899129b3Smrg do 5459899129b3Smrg case \$lt_wr_arg in 5460899129b3Smrg --lt-*) ;; 5461899129b3Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5462899129b3Smrg esac 5463899129b3Smrg shift 5464899129b3Smrg done ;; 5465899129b3Smrg esac 546647e89262Smrg func_exec_program_core \${1+\"\$@\"} 546747e89262Smrg} 5468bd1da9d7Smrg 546947e89262Smrg # Parse options 547047e89262Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5471bd1da9d7Smrg 547247e89262Smrg # Find the directory that this script lives in. 547347e89262Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 547447e89262Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5475bd1da9d7Smrg 547647e89262Smrg # Follow symbolic links until we get to the real thisdir. 547747e89262Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 547847e89262Smrg while test -n \"\$file\"; do 547947e89262Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5480bd1da9d7Smrg 548147e89262Smrg # If there was a directory component, then change thisdir. 548247e89262Smrg if test \"x\$destdir\" != \"x\$file\"; then 548347e89262Smrg case \"\$destdir\" in 548447e89262Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 548547e89262Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 548647e89262Smrg esac 548747e89262Smrg fi 5488bd1da9d7Smrg 548947e89262Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 549047e89262Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 549147e89262Smrg done 5492bd1da9d7Smrg 549347e89262Smrg # Usually 'no', except on cygwin/mingw when embedded into 549447e89262Smrg # the cwrapper. 549547e89262Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 549647e89262Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 549747e89262Smrg # special case for '.' 549847e89262Smrg if test \"\$thisdir\" = \".\"; then 549947e89262Smrg thisdir=\`pwd\` 550047e89262Smrg fi 550147e89262Smrg # remove .libs from thisdir 550247e89262Smrg case \"\$thisdir\" in 550347e89262Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 550447e89262Smrg $objdir ) thisdir=. ;; 550547e89262Smrg esac 550647e89262Smrg fi 5507bd1da9d7Smrg 550847e89262Smrg # Try to get the absolute directory name. 550947e89262Smrg absdir=\`cd \"\$thisdir\" && pwd\` 551047e89262Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 551147e89262Smrg" 5512bd1da9d7Smrg 5513e6d2e958Smrg if test yes = "$fast_install"; then 551447e89262Smrg $ECHO "\ 551547e89262Smrg program=lt-'$outputname'$exeext 551647e89262Smrg progdir=\"\$thisdir/$objdir\" 5517bd1da9d7Smrg 551847e89262Smrg if test ! -f \"\$progdir/\$program\" || 5519e6d2e958Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 552047e89262Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5521bd1da9d7Smrg 552247e89262Smrg file=\"\$\$-\$program\" 5523bd1da9d7Smrg 552447e89262Smrg if test ! -d \"\$progdir\"; then 552547e89262Smrg $MKDIR \"\$progdir\" 552647e89262Smrg else 552747e89262Smrg $RM \"\$progdir/\$file\" 552847e89262Smrg fi" 5529bd1da9d7Smrg 553047e89262Smrg $ECHO "\ 5531bd1da9d7Smrg 553247e89262Smrg # relink executable if necessary 553347e89262Smrg if test -n \"\$relink_command\"; then 553447e89262Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 553547e89262Smrg else 5536e6d2e958Smrg \$ECHO \"\$relink_command_output\" >&2 553747e89262Smrg $RM \"\$progdir/\$file\" 553847e89262Smrg exit 1 553947e89262Smrg fi 554047e89262Smrg fi 5541bd1da9d7Smrg 554247e89262Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 554347e89262Smrg { $RM \"\$progdir/\$program\"; 554447e89262Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 554547e89262Smrg $RM \"\$progdir/\$file\" 554647e89262Smrg fi" 554747e89262Smrg else 554847e89262Smrg $ECHO "\ 554947e89262Smrg program='$outputname' 555047e89262Smrg progdir=\"\$thisdir/$objdir\" 555147e89262Smrg" 555247e89262Smrg fi 5553bd1da9d7Smrg 555447e89262Smrg $ECHO "\ 5555bd1da9d7Smrg 555647e89262Smrg if test -f \"\$progdir/\$program\"; then" 5557bd1da9d7Smrg 5558899129b3Smrg # fixup the dll searchpath if we need to. 5559899129b3Smrg # 5560899129b3Smrg # Fix the DLL searchpath if we need to. Do this before prepending 5561899129b3Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 5562899129b3Smrg # libraries must come first. 5563899129b3Smrg if test -n "$dllsearchpath"; then 5564899129b3Smrg $ECHO "\ 5565899129b3Smrg # Add the dll search path components to the executable PATH 5566899129b3Smrg PATH=$dllsearchpath:\$PATH 5567899129b3Smrg" 5568899129b3Smrg fi 5569899129b3Smrg 557047e89262Smrg # Export our shlibpath_var if we have one. 5571e6d2e958Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 557247e89262Smrg $ECHO "\ 557347e89262Smrg # Add our own library path to $shlibpath_var 557447e89262Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5575bd1da9d7Smrg 557647e89262Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 557747e89262Smrg # The second colon is a workaround for a bug in BeOS R4 sed 557847e89262Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5579bd1da9d7Smrg 558047e89262Smrg export $shlibpath_var 558147e89262Smrg" 558247e89262Smrg fi 5583bd1da9d7Smrg 558447e89262Smrg $ECHO "\ 558547e89262Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 558647e89262Smrg # Run the actual program with our arguments. 558747e89262Smrg func_exec_program \${1+\"\$@\"} 558847e89262Smrg fi 558947e89262Smrg else 559047e89262Smrg # The program doesn't exist. 5591e6d2e958Smrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 559247e89262Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 559347e89262Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 559447e89262Smrg exit 1 559547e89262Smrg fi 559647e89262Smrgfi\ 559747e89262Smrg" 559847e89262Smrg} 5599bd1da9d7Smrg 5600bd1da9d7Smrg 560147e89262Smrg# func_emit_cwrapperexe_src 560247e89262Smrg# emit the source code for a wrapper executable on stdout 560347e89262Smrg# Must ONLY be called from within func_mode_link because 560447e89262Smrg# it depends on a number of variable set therein. 560547e89262Smrgfunc_emit_cwrapperexe_src () 560647e89262Smrg{ 560747e89262Smrg cat <<EOF 5608bd1da9d7Smrg 560947e89262Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5610e6d2e958Smrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5611bd1da9d7Smrg 561247e89262Smrg The $output program cannot be directly executed until all the libtool 561347e89262Smrg libraries that it depends on are installed. 5614bd1da9d7Smrg 561547e89262Smrg This wrapper executable should never be moved out of the build directory. 561647e89262Smrg If it is, it will not operate correctly. 561747e89262Smrg*/ 561847e89262SmrgEOF 561947e89262Smrg cat <<"EOF" 562047e89262Smrg#ifdef _MSC_VER 562147e89262Smrg# define _CRT_SECURE_NO_DEPRECATE 1 562247e89262Smrg#endif 562347e89262Smrg#include <stdio.h> 562447e89262Smrg#include <stdlib.h> 562547e89262Smrg#ifdef _MSC_VER 562647e89262Smrg# include <direct.h> 562747e89262Smrg# include <process.h> 562847e89262Smrg# include <io.h> 562947e89262Smrg#else 563047e89262Smrg# include <unistd.h> 563147e89262Smrg# include <stdint.h> 563247e89262Smrg# ifdef __CYGWIN__ 563347e89262Smrg# include <io.h> 563447e89262Smrg# endif 563547e89262Smrg#endif 563647e89262Smrg#include <malloc.h> 563747e89262Smrg#include <stdarg.h> 563847e89262Smrg#include <assert.h> 563947e89262Smrg#include <string.h> 564047e89262Smrg#include <ctype.h> 564147e89262Smrg#include <errno.h> 564247e89262Smrg#include <fcntl.h> 564347e89262Smrg#include <sys/stat.h> 5644bd1da9d7Smrg 5645e6d2e958Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5646e6d2e958Smrg 564747e89262Smrg/* declarations of non-ANSI functions */ 5648e6d2e958Smrg#if defined __MINGW32__ 564947e89262Smrg# ifdef __STRICT_ANSI__ 565047e89262Smrgint _putenv (const char *); 565147e89262Smrg# endif 5652e6d2e958Smrg#elif defined __CYGWIN__ 565347e89262Smrg# ifdef __STRICT_ANSI__ 565447e89262Smrgchar *realpath (const char *, char *); 565547e89262Smrgint putenv (char *); 565647e89262Smrgint setenv (const char *, const char *, int); 565747e89262Smrg# endif 5658e6d2e958Smrg/* #elif defined other_platform || defined ... */ 565947e89262Smrg#endif 5660bd1da9d7Smrg 566147e89262Smrg/* portability defines, excluding path handling macros */ 5662e6d2e958Smrg#if defined _MSC_VER 566347e89262Smrg# define setmode _setmode 566447e89262Smrg# define stat _stat 566547e89262Smrg# define chmod _chmod 566647e89262Smrg# define getcwd _getcwd 566747e89262Smrg# define putenv _putenv 566847e89262Smrg# define S_IXUSR _S_IEXEC 5669e6d2e958Smrg#elif defined __MINGW32__ 567047e89262Smrg# define setmode _setmode 567147e89262Smrg# define stat _stat 567247e89262Smrg# define chmod _chmod 567347e89262Smrg# define getcwd _getcwd 567447e89262Smrg# define putenv _putenv 5675e6d2e958Smrg#elif defined __CYGWIN__ 567647e89262Smrg# define HAVE_SETENV 567747e89262Smrg# define FOPEN_WB "wb" 5678e6d2e958Smrg/* #elif defined other platforms ... */ 567947e89262Smrg#endif 5680bd1da9d7Smrg 5681e6d2e958Smrg#if defined PATH_MAX 568247e89262Smrg# define LT_PATHMAX PATH_MAX 5683e6d2e958Smrg#elif defined MAXPATHLEN 568447e89262Smrg# define LT_PATHMAX MAXPATHLEN 568547e89262Smrg#else 568647e89262Smrg# define LT_PATHMAX 1024 568747e89262Smrg#endif 5688bd1da9d7Smrg 568947e89262Smrg#ifndef S_IXOTH 569047e89262Smrg# define S_IXOTH 0 569147e89262Smrg#endif 569247e89262Smrg#ifndef S_IXGRP 569347e89262Smrg# define S_IXGRP 0 569447e89262Smrg#endif 5695bd1da9d7Smrg 569647e89262Smrg/* path handling portability macros */ 569747e89262Smrg#ifndef DIR_SEPARATOR 569847e89262Smrg# define DIR_SEPARATOR '/' 569947e89262Smrg# define PATH_SEPARATOR ':' 570047e89262Smrg#endif 5701bd1da9d7Smrg 5702e6d2e958Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5703e6d2e958Smrg defined __OS2__ 570447e89262Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 570547e89262Smrg# define FOPEN_WB "wb" 570647e89262Smrg# ifndef DIR_SEPARATOR_2 570747e89262Smrg# define DIR_SEPARATOR_2 '\\' 570847e89262Smrg# endif 570947e89262Smrg# ifndef PATH_SEPARATOR_2 571047e89262Smrg# define PATH_SEPARATOR_2 ';' 571147e89262Smrg# endif 571247e89262Smrg#endif 5713bd1da9d7Smrg 571447e89262Smrg#ifndef DIR_SEPARATOR_2 571547e89262Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 571647e89262Smrg#else /* DIR_SEPARATOR_2 */ 571747e89262Smrg# define IS_DIR_SEPARATOR(ch) \ 571847e89262Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 571947e89262Smrg#endif /* DIR_SEPARATOR_2 */ 5720bd1da9d7Smrg 572147e89262Smrg#ifndef PATH_SEPARATOR_2 572247e89262Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 572347e89262Smrg#else /* PATH_SEPARATOR_2 */ 572447e89262Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 572547e89262Smrg#endif /* PATH_SEPARATOR_2 */ 572647e89262Smrg 572747e89262Smrg#ifndef FOPEN_WB 572847e89262Smrg# define FOPEN_WB "w" 572947e89262Smrg#endif 573047e89262Smrg#ifndef _O_BINARY 573147e89262Smrg# define _O_BINARY 0 573247e89262Smrg#endif 573347e89262Smrg 573447e89262Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 573547e89262Smrg#define XFREE(stale) do { \ 5736e6d2e958Smrg if (stale) { free (stale); stale = 0; } \ 573747e89262Smrg} while (0) 573847e89262Smrg 5739e6d2e958Smrg#if defined LT_DEBUGWRAPPER 574047e89262Smrgstatic int lt_debug = 1; 574147e89262Smrg#else 574247e89262Smrgstatic int lt_debug = 0; 574347e89262Smrg#endif 574447e89262Smrg 574547e89262Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 574647e89262Smrg 574747e89262Smrgvoid *xmalloc (size_t num); 574847e89262Smrgchar *xstrdup (const char *string); 574947e89262Smrgconst char *base_name (const char *name); 575047e89262Smrgchar *find_executable (const char *wrapper); 575147e89262Smrgchar *chase_symlinks (const char *pathspec); 575247e89262Smrgint make_executable (const char *path); 575347e89262Smrgint check_executable (const char *path); 575447e89262Smrgchar *strendzap (char *str, const char *pat); 575547e89262Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 575647e89262Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 575747e89262Smrgstatic const char *nonnull (const char *s); 575847e89262Smrgstatic const char *nonempty (const char *s); 575947e89262Smrgvoid lt_setenv (const char *name, const char *value); 576047e89262Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 576147e89262Smrgvoid lt_update_exe_path (const char *name, const char *value); 576247e89262Smrgvoid lt_update_lib_path (const char *name, const char *value); 576347e89262Smrgchar **prepare_spawn (char **argv); 576447e89262Smrgvoid lt_dump_script (FILE *f); 576547e89262SmrgEOF 576647e89262Smrg 576747e89262Smrg cat <<EOF 5768e6d2e958Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5769e6d2e958Smrg# define externally_visible volatile 5770e6d2e958Smrg#else 5771e6d2e958Smrg# define externally_visible __attribute__((externally_visible)) volatile 5772e6d2e958Smrg#endif 5773e6d2e958Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 577447e89262Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 577547e89262SmrgEOF 577647e89262Smrg 5777e6d2e958Smrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5778899129b3Smrg func_to_host_path "$temp_rpath" 577947e89262Smrg cat <<EOF 5780899129b3Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5781bd1da9d7SmrgEOF 5782bd1da9d7Smrg else 578347e89262Smrg cat <<"EOF" 578447e89262Smrgconst char * LIB_PATH_VALUE = ""; 578547e89262SmrgEOF 5786bd1da9d7Smrg fi 578747e89262Smrg 578847e89262Smrg if test -n "$dllsearchpath"; then 5789899129b3Smrg func_to_host_path "$dllsearchpath:" 579047e89262Smrg cat <<EOF 579147e89262Smrgconst char * EXE_PATH_VARNAME = "PATH"; 5792899129b3Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 579347e89262SmrgEOF 5794bd1da9d7Smrg else 579547e89262Smrg cat <<"EOF" 579647e89262Smrgconst char * EXE_PATH_VARNAME = ""; 579747e89262Smrgconst char * EXE_PATH_VALUE = ""; 579847e89262SmrgEOF 5799bd1da9d7Smrg fi 580047e89262Smrg 5801e6d2e958Smrg if test yes = "$fast_install"; then 580247e89262Smrg cat <<EOF 580347e89262Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 580447e89262SmrgEOF 5805bd1da9d7Smrg else 580647e89262Smrg cat <<EOF 580747e89262Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 580847e89262SmrgEOF 5809bd1da9d7Smrg fi 5810bd1da9d7Smrg 5811bd1da9d7Smrg 581247e89262Smrg cat <<"EOF" 5813bd1da9d7Smrg 581447e89262Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 5815bd1da9d7Smrg 581647e89262Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 581747e89262Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 581847e89262Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5819bd1da9d7Smrg 582047e89262Smrgint 582147e89262Smrgmain (int argc, char *argv[]) 582247e89262Smrg{ 582347e89262Smrg char **newargz; 582447e89262Smrg int newargc; 582547e89262Smrg char *tmp_pathspec; 582647e89262Smrg char *actual_cwrapper_path; 582747e89262Smrg char *actual_cwrapper_name; 582847e89262Smrg char *target_name; 582947e89262Smrg char *lt_argv_zero; 5830e6d2e958Smrg int rval = 127; 5831bd1da9d7Smrg 583247e89262Smrg int i; 5833bd1da9d7Smrg 583447e89262Smrg program_name = (char *) xstrdup (base_name (argv[0])); 5835e6d2e958Smrg newargz = XMALLOC (char *, (size_t) argc + 1); 5836bd1da9d7Smrg 583747e89262Smrg /* very simple arg parsing; don't want to rely on getopt 583847e89262Smrg * also, copy all non cwrapper options to newargz, except 583947e89262Smrg * argz[0], which is handled differently 584047e89262Smrg */ 584147e89262Smrg newargc=0; 584247e89262Smrg for (i = 1; i < argc; i++) 584347e89262Smrg { 5844e6d2e958Smrg if (STREQ (argv[i], dumpscript_opt)) 584547e89262Smrg { 584647e89262SmrgEOF 5847e6d2e958Smrg case $host in 584847e89262Smrg *mingw* | *cygwin* ) 584947e89262Smrg # make stdout use "unix" line endings 585047e89262Smrg echo " setmode(1,_O_BINARY);" 585147e89262Smrg ;; 58525bcb6992Smrg esac 5853bd1da9d7Smrg 585447e89262Smrg cat <<"EOF" 585547e89262Smrg lt_dump_script (stdout); 585647e89262Smrg return 0; 585747e89262Smrg } 5858e6d2e958Smrg if (STREQ (argv[i], debug_opt)) 585947e89262Smrg { 586047e89262Smrg lt_debug = 1; 586147e89262Smrg continue; 586247e89262Smrg } 5863e6d2e958Smrg if (STREQ (argv[i], ltwrapper_option_prefix)) 586447e89262Smrg { 586547e89262Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 586647e89262Smrg namespace, but it is not one of the ones we know about and 586747e89262Smrg have already dealt with, above (inluding dump-script), then 586847e89262Smrg report an error. Otherwise, targets might begin to believe 586947e89262Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 587047e89262Smrg namespace. The first time any user complains about this, we'll 587147e89262Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 587247e89262Smrg or a configure.ac-settable value. 587347e89262Smrg */ 587447e89262Smrg lt_fatal (__FILE__, __LINE__, 587547e89262Smrg "unrecognized %s option: '%s'", 587647e89262Smrg ltwrapper_option_prefix, argv[i]); 587747e89262Smrg } 587847e89262Smrg /* otherwise ... */ 587947e89262Smrg newargz[++newargc] = xstrdup (argv[i]); 588047e89262Smrg } 588147e89262Smrg newargz[++newargc] = NULL; 5882bd1da9d7Smrg 588347e89262SmrgEOF 588447e89262Smrg cat <<EOF 588547e89262Smrg /* The GNU banner must be the first non-error debug message */ 5886e6d2e958Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 588747e89262SmrgEOF 588847e89262Smrg cat <<"EOF" 588947e89262Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 589047e89262Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 589147e89262Smrg 589247e89262Smrg tmp_pathspec = find_executable (argv[0]); 589347e89262Smrg if (tmp_pathspec == NULL) 589447e89262Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 589547e89262Smrg lt_debugprintf (__FILE__, __LINE__, 589647e89262Smrg "(main) found exe (before symlink chase) at: %s\n", 589747e89262Smrg tmp_pathspec); 589847e89262Smrg 589947e89262Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 590047e89262Smrg lt_debugprintf (__FILE__, __LINE__, 590147e89262Smrg "(main) found exe (after symlink chase) at: %s\n", 590247e89262Smrg actual_cwrapper_path); 590347e89262Smrg XFREE (tmp_pathspec); 590447e89262Smrg 590547e89262Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 590647e89262Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 590747e89262Smrg 590847e89262Smrg /* wrapper name transforms */ 590947e89262Smrg strendzap (actual_cwrapper_name, ".exe"); 591047e89262Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 591147e89262Smrg XFREE (actual_cwrapper_name); 591247e89262Smrg actual_cwrapper_name = tmp_pathspec; 591347e89262Smrg tmp_pathspec = 0; 591447e89262Smrg 591547e89262Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 591647e89262Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 591747e89262Smrg strendzap (target_name, ".exe"); 591847e89262Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 591947e89262Smrg XFREE (target_name); 592047e89262Smrg target_name = tmp_pathspec; 592147e89262Smrg tmp_pathspec = 0; 592247e89262Smrg 592347e89262Smrg lt_debugprintf (__FILE__, __LINE__, 592447e89262Smrg "(main) libtool target name: %s\n", 592547e89262Smrg target_name); 592647e89262SmrgEOF 5927bd1da9d7Smrg 592847e89262Smrg cat <<EOF 592947e89262Smrg newargz[0] = 593047e89262Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 593147e89262Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 593247e89262Smrg strcpy (newargz[0], actual_cwrapper_path); 593347e89262Smrg strcat (newargz[0], "$objdir"); 593447e89262Smrg strcat (newargz[0], "/"); 593547e89262SmrgEOF 5936bd1da9d7Smrg 593747e89262Smrg cat <<"EOF" 593847e89262Smrg /* stop here, and copy so we don't have to do this twice */ 593947e89262Smrg tmp_pathspec = xstrdup (newargz[0]); 5940bd1da9d7Smrg 594147e89262Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 594247e89262Smrg strcat (newargz[0], actual_cwrapper_name); 5943bd1da9d7Smrg 594447e89262Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 594547e89262Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 594647e89262Smrg XFREE (tmp_pathspec); 594747e89262Smrg tmp_pathspec = NULL; 594847e89262SmrgEOF 5949bd1da9d7Smrg 595047e89262Smrg case $host_os in 595147e89262Smrg mingw*) 595247e89262Smrg cat <<"EOF" 595347e89262Smrg { 595447e89262Smrg char* p; 595547e89262Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 595647e89262Smrg { 595747e89262Smrg *p = '/'; 595847e89262Smrg } 595947e89262Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 596047e89262Smrg { 596147e89262Smrg *p = '/'; 596247e89262Smrg } 596347e89262Smrg } 596447e89262SmrgEOF 596547e89262Smrg ;; 596647e89262Smrg esac 5967bd1da9d7Smrg 596847e89262Smrg cat <<"EOF" 596947e89262Smrg XFREE (target_name); 597047e89262Smrg XFREE (actual_cwrapper_path); 597147e89262Smrg XFREE (actual_cwrapper_name); 5972bd1da9d7Smrg 597347e89262Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 597447e89262Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 5975899129b3Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 5976899129b3Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 5977899129b3Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 5978899129b3Smrg libraries must come first. */ 597947e89262Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 5980899129b3Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 5981bd1da9d7Smrg 598247e89262Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 598347e89262Smrg nonnull (lt_argv_zero)); 598447e89262Smrg for (i = 0; i < newargc; i++) 598547e89262Smrg { 598647e89262Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 598747e89262Smrg i, nonnull (newargz[i])); 598847e89262Smrg } 5989bd1da9d7Smrg 599047e89262SmrgEOF 5991bd1da9d7Smrg 599247e89262Smrg case $host_os in 599347e89262Smrg mingw*) 599447e89262Smrg cat <<"EOF" 599547e89262Smrg /* execv doesn't actually work on mingw as expected on unix */ 599647e89262Smrg newargz = prepare_spawn (newargz); 5997e6d2e958Smrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 599847e89262Smrg if (rval == -1) 599947e89262Smrg { 600047e89262Smrg /* failed to start process */ 600147e89262Smrg lt_debugprintf (__FILE__, __LINE__, 600247e89262Smrg "(main) failed to launch target \"%s\": %s\n", 600347e89262Smrg lt_argv_zero, nonnull (strerror (errno))); 600447e89262Smrg return 127; 600547e89262Smrg } 600647e89262Smrg return rval; 600747e89262SmrgEOF 600847e89262Smrg ;; 600947e89262Smrg *) 601047e89262Smrg cat <<"EOF" 601147e89262Smrg execv (lt_argv_zero, newargz); 601247e89262Smrg return rval; /* =127, but avoids unused variable warning */ 601347e89262SmrgEOF 601447e89262Smrg ;; 601547e89262Smrg esac 6016bd1da9d7Smrg 601747e89262Smrg cat <<"EOF" 601847e89262Smrg} 6019bd1da9d7Smrg 602047e89262Smrgvoid * 602147e89262Smrgxmalloc (size_t num) 602247e89262Smrg{ 602347e89262Smrg void *p = (void *) malloc (num); 602447e89262Smrg if (!p) 602547e89262Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 6026bd1da9d7Smrg 602747e89262Smrg return p; 602847e89262Smrg} 6029bd1da9d7Smrg 603047e89262Smrgchar * 603147e89262Smrgxstrdup (const char *string) 603247e89262Smrg{ 603347e89262Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 603447e89262Smrg string) : NULL; 603547e89262Smrg} 6036bd1da9d7Smrg 603747e89262Smrgconst char * 603847e89262Smrgbase_name (const char *name) 603947e89262Smrg{ 604047e89262Smrg const char *base; 6041bd1da9d7Smrg 6042e6d2e958Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 604347e89262Smrg /* Skip over the disk name in MSDOS pathnames. */ 604447e89262Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 604547e89262Smrg name += 2; 604647e89262Smrg#endif 6047bd1da9d7Smrg 604847e89262Smrg for (base = name; *name; name++) 604947e89262Smrg if (IS_DIR_SEPARATOR (*name)) 605047e89262Smrg base = name + 1; 605147e89262Smrg return base; 605247e89262Smrg} 6053bd1da9d7Smrg 605447e89262Smrgint 605547e89262Smrgcheck_executable (const char *path) 605647e89262Smrg{ 605747e89262Smrg struct stat st; 6058bd1da9d7Smrg 605947e89262Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 606047e89262Smrg nonempty (path)); 606147e89262Smrg if ((!path) || (!*path)) 606247e89262Smrg return 0; 6063bd1da9d7Smrg 606447e89262Smrg if ((stat (path, &st) >= 0) 606547e89262Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 606647e89262Smrg return 1; 606747e89262Smrg else 606847e89262Smrg return 0; 606947e89262Smrg} 6070bd1da9d7Smrg 607147e89262Smrgint 607247e89262Smrgmake_executable (const char *path) 607347e89262Smrg{ 607447e89262Smrg int rval = 0; 607547e89262Smrg struct stat st; 6076bd1da9d7Smrg 607747e89262Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 607847e89262Smrg nonempty (path)); 607947e89262Smrg if ((!path) || (!*path)) 608047e89262Smrg return 0; 6081bd1da9d7Smrg 608247e89262Smrg if (stat (path, &st) >= 0) 608347e89262Smrg { 608447e89262Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 608547e89262Smrg } 608647e89262Smrg return rval; 608747e89262Smrg} 6088bd1da9d7Smrg 608947e89262Smrg/* Searches for the full path of the wrapper. Returns 609047e89262Smrg newly allocated full path name if found, NULL otherwise 609147e89262Smrg Does not chase symlinks, even on platforms that support them. 609247e89262Smrg*/ 609347e89262Smrgchar * 609447e89262Smrgfind_executable (const char *wrapper) 609547e89262Smrg{ 609647e89262Smrg int has_slash = 0; 609747e89262Smrg const char *p; 609847e89262Smrg const char *p_next; 609947e89262Smrg /* static buffer for getcwd */ 610047e89262Smrg char tmp[LT_PATHMAX + 1]; 6101e6d2e958Smrg size_t tmp_len; 610247e89262Smrg char *concat_name; 6103bd1da9d7Smrg 610447e89262Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 610547e89262Smrg nonempty (wrapper)); 6106bd1da9d7Smrg 610747e89262Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 610847e89262Smrg return NULL; 6109bd1da9d7Smrg 611047e89262Smrg /* Absolute path? */ 6111e6d2e958Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 611247e89262Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 611347e89262Smrg { 611447e89262Smrg concat_name = xstrdup (wrapper); 611547e89262Smrg if (check_executable (concat_name)) 611647e89262Smrg return concat_name; 611747e89262Smrg XFREE (concat_name); 611847e89262Smrg } 611947e89262Smrg else 612047e89262Smrg { 612147e89262Smrg#endif 612247e89262Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 612347e89262Smrg { 612447e89262Smrg concat_name = xstrdup (wrapper); 612547e89262Smrg if (check_executable (concat_name)) 612647e89262Smrg return concat_name; 612747e89262Smrg XFREE (concat_name); 612847e89262Smrg } 6129e6d2e958Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 613047e89262Smrg } 613147e89262Smrg#endif 6132bd1da9d7Smrg 613347e89262Smrg for (p = wrapper; *p; p++) 613447e89262Smrg if (*p == '/') 613547e89262Smrg { 613647e89262Smrg has_slash = 1; 613747e89262Smrg break; 613847e89262Smrg } 613947e89262Smrg if (!has_slash) 614047e89262Smrg { 614147e89262Smrg /* no slashes; search PATH */ 614247e89262Smrg const char *path = getenv ("PATH"); 614347e89262Smrg if (path != NULL) 614447e89262Smrg { 614547e89262Smrg for (p = path; *p; p = p_next) 614647e89262Smrg { 614747e89262Smrg const char *q; 614847e89262Smrg size_t p_len; 614947e89262Smrg for (q = p; *q; q++) 615047e89262Smrg if (IS_PATH_SEPARATOR (*q)) 615147e89262Smrg break; 6152e6d2e958Smrg p_len = (size_t) (q - p); 615347e89262Smrg p_next = (*q == '\0' ? q : q + 1); 615447e89262Smrg if (p_len == 0) 615547e89262Smrg { 615647e89262Smrg /* empty path: current directory */ 615747e89262Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 615847e89262Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 615947e89262Smrg nonnull (strerror (errno))); 616047e89262Smrg tmp_len = strlen (tmp); 616147e89262Smrg concat_name = 616247e89262Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 616347e89262Smrg memcpy (concat_name, tmp, tmp_len); 616447e89262Smrg concat_name[tmp_len] = '/'; 616547e89262Smrg strcpy (concat_name + tmp_len + 1, wrapper); 616647e89262Smrg } 616747e89262Smrg else 616847e89262Smrg { 616947e89262Smrg concat_name = 617047e89262Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 617147e89262Smrg memcpy (concat_name, p, p_len); 617247e89262Smrg concat_name[p_len] = '/'; 617347e89262Smrg strcpy (concat_name + p_len + 1, wrapper); 617447e89262Smrg } 617547e89262Smrg if (check_executable (concat_name)) 617647e89262Smrg return concat_name; 617747e89262Smrg XFREE (concat_name); 617847e89262Smrg } 617947e89262Smrg } 618047e89262Smrg /* not found in PATH; assume curdir */ 618147e89262Smrg } 618247e89262Smrg /* Relative path | not found in path: prepend cwd */ 618347e89262Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 618447e89262Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 618547e89262Smrg nonnull (strerror (errno))); 618647e89262Smrg tmp_len = strlen (tmp); 618747e89262Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 618847e89262Smrg memcpy (concat_name, tmp, tmp_len); 618947e89262Smrg concat_name[tmp_len] = '/'; 619047e89262Smrg strcpy (concat_name + tmp_len + 1, wrapper); 6191bd1da9d7Smrg 619247e89262Smrg if (check_executable (concat_name)) 619347e89262Smrg return concat_name; 619447e89262Smrg XFREE (concat_name); 619547e89262Smrg return NULL; 619647e89262Smrg} 6197bd1da9d7Smrg 619847e89262Smrgchar * 619947e89262Smrgchase_symlinks (const char *pathspec) 620047e89262Smrg{ 620147e89262Smrg#ifndef S_ISLNK 620247e89262Smrg return xstrdup (pathspec); 620347e89262Smrg#else 620447e89262Smrg char buf[LT_PATHMAX]; 620547e89262Smrg struct stat s; 620647e89262Smrg char *tmp_pathspec = xstrdup (pathspec); 620747e89262Smrg char *p; 620847e89262Smrg int has_symlinks = 0; 620947e89262Smrg while (strlen (tmp_pathspec) && !has_symlinks) 621047e89262Smrg { 621147e89262Smrg lt_debugprintf (__FILE__, __LINE__, 621247e89262Smrg "checking path component for symlinks: %s\n", 621347e89262Smrg tmp_pathspec); 621447e89262Smrg if (lstat (tmp_pathspec, &s) == 0) 621547e89262Smrg { 621647e89262Smrg if (S_ISLNK (s.st_mode) != 0) 621747e89262Smrg { 621847e89262Smrg has_symlinks = 1; 621947e89262Smrg break; 622047e89262Smrg } 6221bd1da9d7Smrg 622247e89262Smrg /* search backwards for last DIR_SEPARATOR */ 622347e89262Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 622447e89262Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 622547e89262Smrg p--; 622647e89262Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 622747e89262Smrg { 622847e89262Smrg /* no more DIR_SEPARATORS left */ 622947e89262Smrg break; 623047e89262Smrg } 623147e89262Smrg *p = '\0'; 623247e89262Smrg } 623347e89262Smrg else 623447e89262Smrg { 623547e89262Smrg lt_fatal (__FILE__, __LINE__, 623647e89262Smrg "error accessing file \"%s\": %s", 623747e89262Smrg tmp_pathspec, nonnull (strerror (errno))); 623847e89262Smrg } 623947e89262Smrg } 624047e89262Smrg XFREE (tmp_pathspec); 6241bd1da9d7Smrg 624247e89262Smrg if (!has_symlinks) 624347e89262Smrg { 624447e89262Smrg return xstrdup (pathspec); 624547e89262Smrg } 6246bd1da9d7Smrg 624747e89262Smrg tmp_pathspec = realpath (pathspec, buf); 624847e89262Smrg if (tmp_pathspec == 0) 624947e89262Smrg { 625047e89262Smrg lt_fatal (__FILE__, __LINE__, 625147e89262Smrg "could not follow symlinks for %s", pathspec); 625247e89262Smrg } 625347e89262Smrg return xstrdup (tmp_pathspec); 625447e89262Smrg#endif 625547e89262Smrg} 6256bd1da9d7Smrg 625747e89262Smrgchar * 625847e89262Smrgstrendzap (char *str, const char *pat) 625947e89262Smrg{ 626047e89262Smrg size_t len, patlen; 6261bd1da9d7Smrg 626247e89262Smrg assert (str != NULL); 626347e89262Smrg assert (pat != NULL); 6264bd1da9d7Smrg 626547e89262Smrg len = strlen (str); 626647e89262Smrg patlen = strlen (pat); 6267bd1da9d7Smrg 626847e89262Smrg if (patlen <= len) 626947e89262Smrg { 627047e89262Smrg str += len - patlen; 6271e6d2e958Smrg if (STREQ (str, pat)) 627247e89262Smrg *str = '\0'; 627347e89262Smrg } 627447e89262Smrg return str; 627547e89262Smrg} 6276bd1da9d7Smrg 627747e89262Smrgvoid 627847e89262Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 627947e89262Smrg{ 628047e89262Smrg va_list args; 628147e89262Smrg if (lt_debug) 628247e89262Smrg { 628347e89262Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 628447e89262Smrg va_start (args, fmt); 628547e89262Smrg (void) vfprintf (stderr, fmt, args); 628647e89262Smrg va_end (args); 628747e89262Smrg } 628847e89262Smrg} 6289bd1da9d7Smrg 629047e89262Smrgstatic void 629147e89262Smrglt_error_core (int exit_status, const char *file, 629247e89262Smrg int line, const char *mode, 629347e89262Smrg const char *message, va_list ap) 629447e89262Smrg{ 629547e89262Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 629647e89262Smrg vfprintf (stderr, message, ap); 629747e89262Smrg fprintf (stderr, ".\n"); 6298bd1da9d7Smrg 629947e89262Smrg if (exit_status >= 0) 630047e89262Smrg exit (exit_status); 630147e89262Smrg} 6302bd1da9d7Smrg 630347e89262Smrgvoid 630447e89262Smrglt_fatal (const char *file, int line, const char *message, ...) 630547e89262Smrg{ 630647e89262Smrg va_list ap; 630747e89262Smrg va_start (ap, message); 630847e89262Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 630947e89262Smrg va_end (ap); 631047e89262Smrg} 6311bd1da9d7Smrg 631247e89262Smrgstatic const char * 631347e89262Smrgnonnull (const char *s) 631447e89262Smrg{ 631547e89262Smrg return s ? s : "(null)"; 631647e89262Smrg} 6317bd1da9d7Smrg 631847e89262Smrgstatic const char * 631947e89262Smrgnonempty (const char *s) 632047e89262Smrg{ 632147e89262Smrg return (s && !*s) ? "(empty)" : nonnull (s); 632247e89262Smrg} 6323bd1da9d7Smrg 632447e89262Smrgvoid 632547e89262Smrglt_setenv (const char *name, const char *value) 632647e89262Smrg{ 632747e89262Smrg lt_debugprintf (__FILE__, __LINE__, 632847e89262Smrg "(lt_setenv) setting '%s' to '%s'\n", 632947e89262Smrg nonnull (name), nonnull (value)); 633047e89262Smrg { 633147e89262Smrg#ifdef HAVE_SETENV 633247e89262Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 633347e89262Smrg char *str = xstrdup (value); 633447e89262Smrg setenv (name, str, 1); 633547e89262Smrg#else 6336e6d2e958Smrg size_t len = strlen (name) + 1 + strlen (value) + 1; 633747e89262Smrg char *str = XMALLOC (char, len); 633847e89262Smrg sprintf (str, "%s=%s", name, value); 633947e89262Smrg if (putenv (str) != EXIT_SUCCESS) 634047e89262Smrg { 634147e89262Smrg XFREE (str); 634247e89262Smrg } 634347e89262Smrg#endif 634447e89262Smrg } 634547e89262Smrg} 6346bd1da9d7Smrg 634747e89262Smrgchar * 634847e89262Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 634947e89262Smrg{ 635047e89262Smrg char *new_value; 635147e89262Smrg if (orig_value && *orig_value) 635247e89262Smrg { 6353e6d2e958Smrg size_t orig_value_len = strlen (orig_value); 6354e6d2e958Smrg size_t add_len = strlen (add); 635547e89262Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 635647e89262Smrg if (to_end) 635747e89262Smrg { 635847e89262Smrg strcpy (new_value, orig_value); 635947e89262Smrg strcpy (new_value + orig_value_len, add); 636047e89262Smrg } 636147e89262Smrg else 636247e89262Smrg { 636347e89262Smrg strcpy (new_value, add); 636447e89262Smrg strcpy (new_value + add_len, orig_value); 636547e89262Smrg } 636647e89262Smrg } 636747e89262Smrg else 636847e89262Smrg { 636947e89262Smrg new_value = xstrdup (add); 637047e89262Smrg } 637147e89262Smrg return new_value; 637247e89262Smrg} 6373bd1da9d7Smrg 637447e89262Smrgvoid 637547e89262Smrglt_update_exe_path (const char *name, const char *value) 637647e89262Smrg{ 637747e89262Smrg lt_debugprintf (__FILE__, __LINE__, 637847e89262Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 637947e89262Smrg nonnull (name), nonnull (value)); 6380bd1da9d7Smrg 638147e89262Smrg if (name && *name && value && *value) 638247e89262Smrg { 638347e89262Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 638447e89262Smrg /* some systems can't cope with a ':'-terminated path #' */ 6385e6d2e958Smrg size_t len = strlen (new_value); 6386e6d2e958Smrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 638747e89262Smrg { 6388e6d2e958Smrg new_value[--len] = '\0'; 638947e89262Smrg } 639047e89262Smrg lt_setenv (name, new_value); 639147e89262Smrg XFREE (new_value); 639247e89262Smrg } 639347e89262Smrg} 6394bd1da9d7Smrg 639547e89262Smrgvoid 639647e89262Smrglt_update_lib_path (const char *name, const char *value) 639747e89262Smrg{ 639847e89262Smrg lt_debugprintf (__FILE__, __LINE__, 639947e89262Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 640047e89262Smrg nonnull (name), nonnull (value)); 6401bd1da9d7Smrg 640247e89262Smrg if (name && *name && value && *value) 640347e89262Smrg { 640447e89262Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 640547e89262Smrg lt_setenv (name, new_value); 640647e89262Smrg XFREE (new_value); 640747e89262Smrg } 640847e89262Smrg} 6409bd1da9d7Smrg 641047e89262SmrgEOF 641147e89262Smrg case $host_os in 641247e89262Smrg mingw*) 641347e89262Smrg cat <<"EOF" 641447e89262Smrg 641547e89262Smrg/* Prepares an argument vector before calling spawn(). 641647e89262Smrg Note that spawn() does not by itself call the command interpreter 641747e89262Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 641847e89262Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 641947e89262Smrg GetVersionEx(&v); 642047e89262Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 642147e89262Smrg }) ? "cmd.exe" : "command.com"). 642247e89262Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 642347e89262Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 642447e89262Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 642547e89262Smrg special way: 642647e89262Smrg - Space and tab are interpreted as delimiters. They are not treated as 642747e89262Smrg delimiters if they are surrounded by double quotes: "...". 642847e89262Smrg - Unescaped double quotes are removed from the input. Their only effect is 642947e89262Smrg that within double quotes, space and tab are treated like normal 643047e89262Smrg characters. 643147e89262Smrg - Backslashes not followed by double quotes are not special. 643247e89262Smrg - But 2*n+1 backslashes followed by a double quote become 643347e89262Smrg n backslashes followed by a double quote (n >= 0): 643447e89262Smrg \" -> " 643547e89262Smrg \\\" -> \" 643647e89262Smrg \\\\\" -> \\" 643747e89262Smrg */ 643847e89262Smrg#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" 643947e89262Smrg#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" 644047e89262Smrgchar ** 644147e89262Smrgprepare_spawn (char **argv) 644247e89262Smrg{ 644347e89262Smrg size_t argc; 644447e89262Smrg char **new_argv; 644547e89262Smrg size_t i; 6446bd1da9d7Smrg 644747e89262Smrg /* Count number of arguments. */ 644847e89262Smrg for (argc = 0; argv[argc] != NULL; argc++) 644947e89262Smrg ; 6450bd1da9d7Smrg 645147e89262Smrg /* Allocate new argument vector. */ 645247e89262Smrg new_argv = XMALLOC (char *, argc + 1); 6453bd1da9d7Smrg 645447e89262Smrg /* Put quoted arguments into the new argument vector. */ 645547e89262Smrg for (i = 0; i < argc; i++) 645647e89262Smrg { 645747e89262Smrg const char *string = argv[i]; 645847e89262Smrg 645947e89262Smrg if (string[0] == '\0') 646047e89262Smrg new_argv[i] = xstrdup ("\"\""); 646147e89262Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 646247e89262Smrg { 646347e89262Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 646447e89262Smrg size_t length; 646547e89262Smrg unsigned int backslashes; 646647e89262Smrg const char *s; 646747e89262Smrg char *quoted_string; 646847e89262Smrg char *p; 646947e89262Smrg 647047e89262Smrg length = 0; 647147e89262Smrg backslashes = 0; 647247e89262Smrg if (quote_around) 647347e89262Smrg length++; 647447e89262Smrg for (s = string; *s != '\0'; s++) 647547e89262Smrg { 647647e89262Smrg char c = *s; 647747e89262Smrg if (c == '"') 647847e89262Smrg length += backslashes + 1; 647947e89262Smrg length++; 648047e89262Smrg if (c == '\\') 648147e89262Smrg backslashes++; 648247e89262Smrg else 648347e89262Smrg backslashes = 0; 648447e89262Smrg } 648547e89262Smrg if (quote_around) 648647e89262Smrg length += backslashes + 1; 648747e89262Smrg 648847e89262Smrg quoted_string = XMALLOC (char, length + 1); 648947e89262Smrg 649047e89262Smrg p = quoted_string; 649147e89262Smrg backslashes = 0; 649247e89262Smrg if (quote_around) 649347e89262Smrg *p++ = '"'; 649447e89262Smrg for (s = string; *s != '\0'; s++) 649547e89262Smrg { 649647e89262Smrg char c = *s; 649747e89262Smrg if (c == '"') 649847e89262Smrg { 649947e89262Smrg unsigned int j; 650047e89262Smrg for (j = backslashes + 1; j > 0; j--) 650147e89262Smrg *p++ = '\\'; 650247e89262Smrg } 650347e89262Smrg *p++ = c; 650447e89262Smrg if (c == '\\') 650547e89262Smrg backslashes++; 650647e89262Smrg else 650747e89262Smrg backslashes = 0; 650847e89262Smrg } 650947e89262Smrg if (quote_around) 651047e89262Smrg { 651147e89262Smrg unsigned int j; 651247e89262Smrg for (j = backslashes; j > 0; j--) 651347e89262Smrg *p++ = '\\'; 651447e89262Smrg *p++ = '"'; 651547e89262Smrg } 651647e89262Smrg *p = '\0'; 6517bd1da9d7Smrg 651847e89262Smrg new_argv[i] = quoted_string; 651947e89262Smrg } 652047e89262Smrg else 652147e89262Smrg new_argv[i] = (char *) string; 652247e89262Smrg } 652347e89262Smrg new_argv[argc] = NULL; 6524bd1da9d7Smrg 652547e89262Smrg return new_argv; 652647e89262Smrg} 652747e89262SmrgEOF 6528bd1da9d7Smrg ;; 652947e89262Smrg esac 6530bd1da9d7Smrg 653147e89262Smrg cat <<"EOF" 653247e89262Smrgvoid lt_dump_script (FILE* f) 653347e89262Smrg{ 653447e89262SmrgEOF 653547e89262Smrg func_emit_wrapper yes | 6536899129b3Smrg $SED -n -e ' 6537899129b3Smrgs/^\(.\{79\}\)\(..*\)/\1\ 6538899129b3Smrg\2/ 6539899129b3Smrgh 6540899129b3Smrgs/\([\\"]\)/\\\1/g 6541899129b3Smrgs/$/\\n/ 6542899129b3Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 6543899129b3Smrgg 6544899129b3SmrgD' 654547e89262Smrg cat <<"EOF" 654647e89262Smrg} 654747e89262SmrgEOF 654847e89262Smrg} 654947e89262Smrg# end: func_emit_cwrapperexe_src 6550bd1da9d7Smrg 655147e89262Smrg# func_win32_import_lib_p ARG 655247e89262Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 655347e89262Smrgfunc_win32_import_lib_p () 655447e89262Smrg{ 6555e6d2e958Smrg $debug_cmd 6556e6d2e958Smrg 655747e89262Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 655847e89262Smrg *import*) : ;; 655947e89262Smrg *) false ;; 656047e89262Smrg esac 656147e89262Smrg} 6562bd1da9d7Smrg 6563e6d2e958Smrg# func_suncc_cstd_abi 6564e6d2e958Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6565e6d2e958Smrg# Several compiler flags select an ABI that is incompatible with the 6566e6d2e958Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6567e6d2e958Smrgfunc_suncc_cstd_abi () 6568e6d2e958Smrg{ 6569e6d2e958Smrg $debug_cmd 6570e6d2e958Smrg 6571e6d2e958Smrg case " $compile_command " in 6572e6d2e958Smrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6573e6d2e958Smrg suncc_use_cstd_abi=no 6574e6d2e958Smrg ;; 6575e6d2e958Smrg *) 6576e6d2e958Smrg suncc_use_cstd_abi=yes 6577e6d2e958Smrg ;; 6578e6d2e958Smrg esac 6579e6d2e958Smrg} 6580e6d2e958Smrg 658147e89262Smrg# func_mode_link arg... 658247e89262Smrgfunc_mode_link () 658347e89262Smrg{ 6584e6d2e958Smrg $debug_cmd 6585e6d2e958Smrg 658647e89262Smrg case $host in 658747e89262Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 658847e89262Smrg # It is impossible to link a dll without this setting, and 658947e89262Smrg # we shouldn't force the makefile maintainer to figure out 6590e6d2e958Smrg # what system we are compiling for in order to pass an extra 659147e89262Smrg # flag for every libtool invocation. 659247e89262Smrg # allow_undefined=no 6593bd1da9d7Smrg 659447e89262Smrg # FIXME: Unfortunately, there are problems with the above when trying 6595e6d2e958Smrg # to make a dll that has undefined symbols, in which case not 659647e89262Smrg # even a static library is built. For now, we need to specify 659747e89262Smrg # -no-undefined on the libtool link line when we can be certain 659847e89262Smrg # that all symbols are satisfied, otherwise we get a static library. 659947e89262Smrg allow_undefined=yes 660047e89262Smrg ;; 660147e89262Smrg *) 660247e89262Smrg allow_undefined=yes 660347e89262Smrg ;; 660447e89262Smrg esac 660547e89262Smrg libtool_args=$nonopt 660647e89262Smrg base_compile="$nonopt $@" 660747e89262Smrg compile_command=$nonopt 660847e89262Smrg finalize_command=$nonopt 6609bd1da9d7Smrg 661047e89262Smrg compile_rpath= 661147e89262Smrg finalize_rpath= 661247e89262Smrg compile_shlibpath= 661347e89262Smrg finalize_shlibpath= 661447e89262Smrg convenience= 661547e89262Smrg old_convenience= 661647e89262Smrg deplibs= 661747e89262Smrg old_deplibs= 661847e89262Smrg compiler_flags= 661947e89262Smrg linker_flags= 662047e89262Smrg dllsearchpath= 662147e89262Smrg lib_search_path=`pwd` 662247e89262Smrg inst_prefix_dir= 662347e89262Smrg new_inherited_linker_flags= 6624bd1da9d7Smrg 662547e89262Smrg avoid_version=no 662647e89262Smrg bindir= 662747e89262Smrg dlfiles= 662847e89262Smrg dlprefiles= 662947e89262Smrg dlself=no 663047e89262Smrg export_dynamic=no 663147e89262Smrg export_symbols= 663247e89262Smrg export_symbols_regex= 663347e89262Smrg generated= 663447e89262Smrg libobjs= 663547e89262Smrg ltlibs= 663647e89262Smrg module=no 663747e89262Smrg no_install=no 663847e89262Smrg objs= 6639e6d2e958Smrg os2dllname= 664047e89262Smrg non_pic_objects= 664147e89262Smrg precious_files_regex= 664247e89262Smrg prefer_static_libs=no 6643e6d2e958Smrg preload=false 664447e89262Smrg prev= 664547e89262Smrg prevarg= 664647e89262Smrg release= 664747e89262Smrg rpath= 664847e89262Smrg xrpath= 664947e89262Smrg perm_rpath= 665047e89262Smrg temp_rpath= 665147e89262Smrg thread_safe=no 665247e89262Smrg vinfo= 665347e89262Smrg vinfo_number=no 665447e89262Smrg weak_libs= 6655e6d2e958Smrg single_module=$wl-single_module 665647e89262Smrg func_infer_tag $base_compile 6657bd1da9d7Smrg 665847e89262Smrg # We need to know -static, to get the right output filenames. 665947e89262Smrg for arg 666047e89262Smrg do 666147e89262Smrg case $arg in 666247e89262Smrg -shared) 6663e6d2e958Smrg test yes != "$build_libtool_libs" \ 6664e6d2e958Smrg && func_fatal_configuration "cannot build a shared library" 666547e89262Smrg build_old_libs=no 666647e89262Smrg break 666747e89262Smrg ;; 666847e89262Smrg -all-static | -static | -static-libtool-libs) 666947e89262Smrg case $arg in 667047e89262Smrg -all-static) 6671e6d2e958Smrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 667247e89262Smrg func_warning "complete static linking is impossible in this configuration" 667347e89262Smrg fi 667447e89262Smrg if test -n "$link_static_flag"; then 667547e89262Smrg dlopen_self=$dlopen_self_static 667647e89262Smrg fi 667747e89262Smrg prefer_static_libs=yes 667847e89262Smrg ;; 667947e89262Smrg -static) 668047e89262Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 668147e89262Smrg dlopen_self=$dlopen_self_static 668247e89262Smrg fi 668347e89262Smrg prefer_static_libs=built 668447e89262Smrg ;; 668547e89262Smrg -static-libtool-libs) 668647e89262Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 668747e89262Smrg dlopen_self=$dlopen_self_static 668847e89262Smrg fi 668947e89262Smrg prefer_static_libs=yes 669047e89262Smrg ;; 669147e89262Smrg esac 669247e89262Smrg build_libtool_libs=no 669347e89262Smrg build_old_libs=yes 669447e89262Smrg break 669547e89262Smrg ;; 669647e89262Smrg esac 669747e89262Smrg done 6698bd1da9d7Smrg 669947e89262Smrg # See if our shared archives depend on static archives. 670047e89262Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6701bd1da9d7Smrg 670247e89262Smrg # Go through the arguments, transforming them on the way. 670347e89262Smrg while test "$#" -gt 0; do 6704e6d2e958Smrg arg=$1 670547e89262Smrg shift 670647e89262Smrg func_quote_for_eval "$arg" 670747e89262Smrg qarg=$func_quote_for_eval_unquoted_result 670847e89262Smrg func_append libtool_args " $func_quote_for_eval_result" 6709bd1da9d7Smrg 671047e89262Smrg # If the previous option needs an argument, assign it. 671147e89262Smrg if test -n "$prev"; then 671247e89262Smrg case $prev in 671347e89262Smrg output) 671447e89262Smrg func_append compile_command " @OUTPUT@" 671547e89262Smrg func_append finalize_command " @OUTPUT@" 671647e89262Smrg ;; 671747e89262Smrg esac 6718bd1da9d7Smrg 671947e89262Smrg case $prev in 672047e89262Smrg bindir) 6721e6d2e958Smrg bindir=$arg 672247e89262Smrg prev= 672347e89262Smrg continue 672447e89262Smrg ;; 672547e89262Smrg dlfiles|dlprefiles) 6726e6d2e958Smrg $preload || { 672747e89262Smrg # Add the symbol object into the linking commands. 672847e89262Smrg func_append compile_command " @SYMFILE@" 672947e89262Smrg func_append finalize_command " @SYMFILE@" 6730e6d2e958Smrg preload=: 6731e6d2e958Smrg } 673247e89262Smrg case $arg in 673347e89262Smrg *.la | *.lo) ;; # We handle these cases below. 673447e89262Smrg force) 6735e6d2e958Smrg if test no = "$dlself"; then 673647e89262Smrg dlself=needless 673747e89262Smrg export_dynamic=yes 6738bd1da9d7Smrg fi 673947e89262Smrg prev= 674047e89262Smrg continue 674147e89262Smrg ;; 674247e89262Smrg self) 6743e6d2e958Smrg if test dlprefiles = "$prev"; then 674447e89262Smrg dlself=yes 6745e6d2e958Smrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 674647e89262Smrg dlself=yes 6747bd1da9d7Smrg else 674847e89262Smrg dlself=needless 674947e89262Smrg export_dynamic=yes 6750bd1da9d7Smrg fi 675147e89262Smrg prev= 675247e89262Smrg continue 675347e89262Smrg ;; 675447e89262Smrg *) 6755e6d2e958Smrg if test dlfiles = "$prev"; then 6756899129b3Smrg func_append dlfiles " $arg" 6757bd1da9d7Smrg else 6758899129b3Smrg func_append dlprefiles " $arg" 6759bd1da9d7Smrg fi 676047e89262Smrg prev= 676147e89262Smrg continue 676247e89262Smrg ;; 676347e89262Smrg esac 676447e89262Smrg ;; 676547e89262Smrg expsyms) 6766e6d2e958Smrg export_symbols=$arg 676747e89262Smrg test -f "$arg" \ 6768e6d2e958Smrg || func_fatal_error "symbol file '$arg' does not exist" 676947e89262Smrg prev= 677047e89262Smrg continue 677147e89262Smrg ;; 677247e89262Smrg expsyms_regex) 6773e6d2e958Smrg export_symbols_regex=$arg 677447e89262Smrg prev= 677547e89262Smrg continue 677647e89262Smrg ;; 677747e89262Smrg framework) 6778bd1da9d7Smrg case $host in 677947e89262Smrg *-*-darwin*) 678047e89262Smrg case "$deplibs " in 678147e89262Smrg *" $qarg.ltframework "*) ;; 6782899129b3Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 678347e89262Smrg ;; 678447e89262Smrg esac 678547e89262Smrg ;; 6786bd1da9d7Smrg esac 678747e89262Smrg prev= 678847e89262Smrg continue 6789bd1da9d7Smrg ;; 679047e89262Smrg inst_prefix) 6791e6d2e958Smrg inst_prefix_dir=$arg 6792e6d2e958Smrg prev= 6793e6d2e958Smrg continue 6794e6d2e958Smrg ;; 6795e6d2e958Smrg mllvm) 6796e6d2e958Smrg # Clang does not use LLVM to link, so we can simply discard any 6797e6d2e958Smrg # '-mllvm $arg' options when doing the link step. 679847e89262Smrg prev= 679947e89262Smrg continue 6800bd1da9d7Smrg ;; 680147e89262Smrg objectlist) 680247e89262Smrg if test -f "$arg"; then 680347e89262Smrg save_arg=$arg 680447e89262Smrg moreargs= 680547e89262Smrg for fil in `cat "$save_arg"` 680647e89262Smrg do 6807899129b3Smrg# func_append moreargs " $fil" 680847e89262Smrg arg=$fil 680947e89262Smrg # A libtool-controlled object. 6810bd1da9d7Smrg 681147e89262Smrg # Check to see that this really is a libtool object. 681247e89262Smrg if func_lalib_unsafe_p "$arg"; then 681347e89262Smrg pic_object= 681447e89262Smrg non_pic_object= 6815bd1da9d7Smrg 681647e89262Smrg # Read the .lo file 681747e89262Smrg func_source "$arg" 6818bd1da9d7Smrg 681947e89262Smrg if test -z "$pic_object" || 682047e89262Smrg test -z "$non_pic_object" || 6821e6d2e958Smrg test none = "$pic_object" && 6822e6d2e958Smrg test none = "$non_pic_object"; then 6823e6d2e958Smrg func_fatal_error "cannot find name of object for '$arg'" 682447e89262Smrg fi 6825bd1da9d7Smrg 682647e89262Smrg # Extract subdirectory from the argument. 682747e89262Smrg func_dirname "$arg" "/" "" 6828e6d2e958Smrg xdir=$func_dirname_result 6829bd1da9d7Smrg 6830e6d2e958Smrg if test none != "$pic_object"; then 683147e89262Smrg # Prepend the subdirectory the object is found in. 6832e6d2e958Smrg pic_object=$xdir$pic_object 6833bd1da9d7Smrg 6834e6d2e958Smrg if test dlfiles = "$prev"; then 6835e6d2e958Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 6836899129b3Smrg func_append dlfiles " $pic_object" 683747e89262Smrg prev= 683847e89262Smrg continue 683947e89262Smrg else 684047e89262Smrg # If libtool objects are unsupported, then we need to preload. 684147e89262Smrg prev=dlprefiles 684247e89262Smrg fi 684347e89262Smrg fi 6844bd1da9d7Smrg 684547e89262Smrg # CHECK ME: I think I busted this. -Ossama 6846e6d2e958Smrg if test dlprefiles = "$prev"; then 684747e89262Smrg # Preload the old-style object. 6848899129b3Smrg func_append dlprefiles " $pic_object" 684947e89262Smrg prev= 685047e89262Smrg fi 6851bd1da9d7Smrg 685247e89262Smrg # A PIC object. 685347e89262Smrg func_append libobjs " $pic_object" 6854e6d2e958Smrg arg=$pic_object 685547e89262Smrg fi 6856bd1da9d7Smrg 685747e89262Smrg # Non-PIC object. 6858e6d2e958Smrg if test none != "$non_pic_object"; then 685947e89262Smrg # Prepend the subdirectory the object is found in. 6860e6d2e958Smrg non_pic_object=$xdir$non_pic_object 6861bd1da9d7Smrg 686247e89262Smrg # A standard non-PIC object 686347e89262Smrg func_append non_pic_objects " $non_pic_object" 6864e6d2e958Smrg if test -z "$pic_object" || test none = "$pic_object"; then 6865e6d2e958Smrg arg=$non_pic_object 686647e89262Smrg fi 686747e89262Smrg else 686847e89262Smrg # If the PIC object exists, use it instead. 686947e89262Smrg # $xdir was prepended to $pic_object above. 6870e6d2e958Smrg non_pic_object=$pic_object 687147e89262Smrg func_append non_pic_objects " $non_pic_object" 687247e89262Smrg fi 687347e89262Smrg else 687447e89262Smrg # Only an error if not doing a dry-run. 687547e89262Smrg if $opt_dry_run; then 687647e89262Smrg # Extract subdirectory from the argument. 687747e89262Smrg func_dirname "$arg" "/" "" 6878e6d2e958Smrg xdir=$func_dirname_result 687947e89262Smrg 688047e89262Smrg func_lo2o "$arg" 688147e89262Smrg pic_object=$xdir$objdir/$func_lo2o_result 688247e89262Smrg non_pic_object=$xdir$func_lo2o_result 688347e89262Smrg func_append libobjs " $pic_object" 688447e89262Smrg func_append non_pic_objects " $non_pic_object" 688547e89262Smrg else 6886e6d2e958Smrg func_fatal_error "'$arg' is not a valid libtool object" 688747e89262Smrg fi 688847e89262Smrg fi 688947e89262Smrg done 6890bd1da9d7Smrg else 6891e6d2e958Smrg func_fatal_error "link input file '$arg' does not exist" 6892bd1da9d7Smrg fi 689347e89262Smrg arg=$save_arg 689447e89262Smrg prev= 689547e89262Smrg continue 689647e89262Smrg ;; 6897e6d2e958Smrg os2dllname) 6898e6d2e958Smrg os2dllname=$arg 6899e6d2e958Smrg prev= 6900e6d2e958Smrg continue 6901e6d2e958Smrg ;; 690247e89262Smrg precious_regex) 6903e6d2e958Smrg precious_files_regex=$arg 690447e89262Smrg prev= 690547e89262Smrg continue 690647e89262Smrg ;; 690747e89262Smrg release) 6908e6d2e958Smrg release=-$arg 690947e89262Smrg prev= 691047e89262Smrg continue 691147e89262Smrg ;; 691247e89262Smrg rpath | xrpath) 691347e89262Smrg # We need an absolute path. 691447e89262Smrg case $arg in 691547e89262Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 691647e89262Smrg *) 691747e89262Smrg func_fatal_error "only absolute run-paths are allowed" 691847e89262Smrg ;; 691947e89262Smrg esac 6920e6d2e958Smrg if test rpath = "$prev"; then 692147e89262Smrg case "$rpath " in 692247e89262Smrg *" $arg "*) ;; 6923899129b3Smrg *) func_append rpath " $arg" ;; 692447e89262Smrg esac 6925bd1da9d7Smrg else 692647e89262Smrg case "$xrpath " in 692747e89262Smrg *" $arg "*) ;; 6928899129b3Smrg *) func_append xrpath " $arg" ;; 692947e89262Smrg esac 6930bd1da9d7Smrg fi 693147e89262Smrg prev= 693247e89262Smrg continue 693347e89262Smrg ;; 693447e89262Smrg shrext) 6935e6d2e958Smrg shrext_cmds=$arg 693647e89262Smrg prev= 693747e89262Smrg continue 693847e89262Smrg ;; 693947e89262Smrg weak) 6940899129b3Smrg func_append weak_libs " $arg" 694147e89262Smrg prev= 694247e89262Smrg continue 694347e89262Smrg ;; 694447e89262Smrg xcclinker) 6945899129b3Smrg func_append linker_flags " $qarg" 6946899129b3Smrg func_append compiler_flags " $qarg" 694747e89262Smrg prev= 694847e89262Smrg func_append compile_command " $qarg" 694947e89262Smrg func_append finalize_command " $qarg" 695047e89262Smrg continue 695147e89262Smrg ;; 695247e89262Smrg xcompiler) 6953899129b3Smrg func_append compiler_flags " $qarg" 695447e89262Smrg prev= 695547e89262Smrg func_append compile_command " $qarg" 695647e89262Smrg func_append finalize_command " $qarg" 695747e89262Smrg continue 695847e89262Smrg ;; 695947e89262Smrg xlinker) 6960899129b3Smrg func_append linker_flags " $qarg" 6961899129b3Smrg func_append compiler_flags " $wl$qarg" 696247e89262Smrg prev= 696347e89262Smrg func_append compile_command " $wl$qarg" 696447e89262Smrg func_append finalize_command " $wl$qarg" 696547e89262Smrg continue 696647e89262Smrg ;; 696747e89262Smrg *) 696847e89262Smrg eval "$prev=\"\$arg\"" 696947e89262Smrg prev= 697047e89262Smrg continue 697147e89262Smrg ;; 6972bd1da9d7Smrg esac 697347e89262Smrg fi # test -n "$prev" 6974bd1da9d7Smrg 6975e6d2e958Smrg prevarg=$arg 6976bd1da9d7Smrg 697747e89262Smrg case $arg in 697847e89262Smrg -all-static) 697947e89262Smrg if test -n "$link_static_flag"; then 698047e89262Smrg # See comment for -static flag below, for more details. 698147e89262Smrg func_append compile_command " $link_static_flag" 698247e89262Smrg func_append finalize_command " $link_static_flag" 698347e89262Smrg fi 698447e89262Smrg continue 698547e89262Smrg ;; 6986bd1da9d7Smrg 698747e89262Smrg -allow-undefined) 698847e89262Smrg # FIXME: remove this flag sometime in the future. 6989e6d2e958Smrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 699047e89262Smrg ;; 6991bd1da9d7Smrg 699247e89262Smrg -avoid-version) 699347e89262Smrg avoid_version=yes 699447e89262Smrg continue 699547e89262Smrg ;; 6996bd1da9d7Smrg 699747e89262Smrg -bindir) 699847e89262Smrg prev=bindir 699947e89262Smrg continue 700047e89262Smrg ;; 7001bd1da9d7Smrg 700247e89262Smrg -dlopen) 700347e89262Smrg prev=dlfiles 700447e89262Smrg continue 700547e89262Smrg ;; 7006bd1da9d7Smrg 700747e89262Smrg -dlpreopen) 700847e89262Smrg prev=dlprefiles 700947e89262Smrg continue 701047e89262Smrg ;; 7011bd1da9d7Smrg 701247e89262Smrg -export-dynamic) 701347e89262Smrg export_dynamic=yes 701447e89262Smrg continue 701547e89262Smrg ;; 7016bd1da9d7Smrg 701747e89262Smrg -export-symbols | -export-symbols-regex) 701847e89262Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 701947e89262Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 702047e89262Smrg fi 7021e6d2e958Smrg if test X-export-symbols = "X$arg"; then 702247e89262Smrg prev=expsyms 702347e89262Smrg else 702447e89262Smrg prev=expsyms_regex 702547e89262Smrg fi 702647e89262Smrg continue 702747e89262Smrg ;; 7028bd1da9d7Smrg 702947e89262Smrg -framework) 703047e89262Smrg prev=framework 703147e89262Smrg continue 703247e89262Smrg ;; 7033bd1da9d7Smrg 703447e89262Smrg -inst-prefix-dir) 703547e89262Smrg prev=inst_prefix 703647e89262Smrg continue 703747e89262Smrg ;; 7038bd1da9d7Smrg 703947e89262Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 704047e89262Smrg # so, if we see these flags be careful not to treat them like -L 704147e89262Smrg -L[A-Z][A-Z]*:*) 704247e89262Smrg case $with_gcc/$host in 704347e89262Smrg no/*-*-irix* | /*-*-irix*) 704447e89262Smrg func_append compile_command " $arg" 704547e89262Smrg func_append finalize_command " $arg" 704647e89262Smrg ;; 704747e89262Smrg esac 704847e89262Smrg continue 704947e89262Smrg ;; 7050bd1da9d7Smrg 705147e89262Smrg -L*) 7052899129b3Smrg func_stripname "-L" '' "$arg" 7053899129b3Smrg if test -z "$func_stripname_result"; then 705447e89262Smrg if test "$#" -gt 0; then 7055e6d2e958Smrg func_fatal_error "require no space between '-L' and '$1'" 705647e89262Smrg else 7057e6d2e958Smrg func_fatal_error "need path for '-L' option" 705847e89262Smrg fi 705947e89262Smrg fi 7060899129b3Smrg func_resolve_sysroot "$func_stripname_result" 7061899129b3Smrg dir=$func_resolve_sysroot_result 706247e89262Smrg # We need an absolute path. 706347e89262Smrg case $dir in 706447e89262Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 706547e89262Smrg *) 706647e89262Smrg absdir=`cd "$dir" && pwd` 706747e89262Smrg test -z "$absdir" && \ 7068e6d2e958Smrg func_fatal_error "cannot determine absolute directory name of '$dir'" 7069e6d2e958Smrg dir=$absdir 707047e89262Smrg ;; 707147e89262Smrg esac 707247e89262Smrg case "$deplibs " in 7073899129b3Smrg *" -L$dir "* | *" $arg "*) 7074899129b3Smrg # Will only happen for absolute or sysroot arguments 7075899129b3Smrg ;; 707647e89262Smrg *) 7077899129b3Smrg # Preserve sysroot, but never include relative directories 7078899129b3Smrg case $dir in 7079899129b3Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 7080899129b3Smrg *) func_append deplibs " -L$dir" ;; 7081899129b3Smrg esac 7082899129b3Smrg func_append lib_search_path " $dir" 708347e89262Smrg ;; 708447e89262Smrg esac 708547e89262Smrg case $host in 708647e89262Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 708747e89262Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 708847e89262Smrg case :$dllsearchpath: in 708947e89262Smrg *":$dir:"*) ;; 709047e89262Smrg ::) dllsearchpath=$dir;; 7091899129b3Smrg *) func_append dllsearchpath ":$dir";; 709247e89262Smrg esac 709347e89262Smrg case :$dllsearchpath: in 709447e89262Smrg *":$testbindir:"*) ;; 709547e89262Smrg ::) dllsearchpath=$testbindir;; 7096899129b3Smrg *) func_append dllsearchpath ":$testbindir";; 709747e89262Smrg esac 709847e89262Smrg ;; 709947e89262Smrg esac 710047e89262Smrg continue 710147e89262Smrg ;; 7102bd1da9d7Smrg 710347e89262Smrg -l*) 7104e6d2e958Smrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 710547e89262Smrg case $host in 710647e89262Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 710747e89262Smrg # These systems don't actually have a C or math library (as such) 710847e89262Smrg continue 710947e89262Smrg ;; 711047e89262Smrg *-*-os2*) 711147e89262Smrg # These systems don't actually have a C library (as such) 7112e6d2e958Smrg test X-lc = "X$arg" && continue 711347e89262Smrg ;; 7114e6d2e958Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 711547e89262Smrg # Do not include libc due to us having libc/libc_r. 7116e6d2e958Smrg test X-lc = "X$arg" && continue 711747e89262Smrg ;; 711847e89262Smrg *-*-rhapsody* | *-*-darwin1.[012]) 711947e89262Smrg # Rhapsody C and math libraries are in the System framework 7120899129b3Smrg func_append deplibs " System.ltframework" 712147e89262Smrg continue 712247e89262Smrg ;; 712347e89262Smrg *-*-sco3.2v5* | *-*-sco5v6*) 712447e89262Smrg # Causes problems with __ctype 7125e6d2e958Smrg test X-lc = "X$arg" && continue 712647e89262Smrg ;; 712747e89262Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 712847e89262Smrg # Compiler inserts libc in the correct place for threads to work 7129e6d2e958Smrg test X-lc = "X$arg" && continue 713047e89262Smrg ;; 713147e89262Smrg esac 7132e6d2e958Smrg elif test X-lc_r = "X$arg"; then 713347e89262Smrg case $host in 7134e6d2e958Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 713547e89262Smrg # Do not include libc_r directly, use -pthread flag. 713647e89262Smrg continue 713747e89262Smrg ;; 713847e89262Smrg esac 713947e89262Smrg fi 7140899129b3Smrg func_append deplibs " $arg" 714147e89262Smrg continue 714247e89262Smrg ;; 7143bd1da9d7Smrg 7144e6d2e958Smrg -mllvm) 7145e6d2e958Smrg prev=mllvm 7146e6d2e958Smrg continue 7147e6d2e958Smrg ;; 7148e6d2e958Smrg 714947e89262Smrg -module) 715047e89262Smrg module=yes 715147e89262Smrg continue 715247e89262Smrg ;; 7153bd1da9d7Smrg 715447e89262Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 715547e89262Smrg # classes, name mangling, and exception handling. 715647e89262Smrg # Darwin uses the -arch flag to determine output architecture. 7157899129b3Smrg -model|-arch|-isysroot|--sysroot) 7158899129b3Smrg func_append compiler_flags " $arg" 715947e89262Smrg func_append compile_command " $arg" 716047e89262Smrg func_append finalize_command " $arg" 716147e89262Smrg prev=xcompiler 716247e89262Smrg continue 716347e89262Smrg ;; 7164bd1da9d7Smrg 7165899129b3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7166899129b3Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7167899129b3Smrg func_append compiler_flags " $arg" 716847e89262Smrg func_append compile_command " $arg" 716947e89262Smrg func_append finalize_command " $arg" 717047e89262Smrg case "$new_inherited_linker_flags " in 717147e89262Smrg *" $arg "*) ;; 7172899129b3Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 717347e89262Smrg esac 717447e89262Smrg continue 717547e89262Smrg ;; 7176bd1da9d7Smrg 717747e89262Smrg -multi_module) 7178e6d2e958Smrg single_module=$wl-multi_module 717947e89262Smrg continue 718047e89262Smrg ;; 7181bd1da9d7Smrg 718247e89262Smrg -no-fast-install) 718347e89262Smrg fast_install=no 718447e89262Smrg continue 718547e89262Smrg ;; 7186bd1da9d7Smrg 718747e89262Smrg -no-install) 718847e89262Smrg case $host in 718947e89262Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 719047e89262Smrg # The PATH hackery in wrapper scripts is required on Windows 719147e89262Smrg # and Darwin in order for the loader to find any dlls it needs. 7192e6d2e958Smrg func_warning "'-no-install' is ignored for $host" 7193e6d2e958Smrg func_warning "assuming '-no-fast-install' instead" 719447e89262Smrg fast_install=no 719547e89262Smrg ;; 719647e89262Smrg *) no_install=yes ;; 719747e89262Smrg esac 719847e89262Smrg continue 719947e89262Smrg ;; 7200bd1da9d7Smrg 720147e89262Smrg -no-undefined) 720247e89262Smrg allow_undefined=no 720347e89262Smrg continue 720447e89262Smrg ;; 7205bd1da9d7Smrg 720647e89262Smrg -objectlist) 720747e89262Smrg prev=objectlist 720847e89262Smrg continue 720947e89262Smrg ;; 7210bd1da9d7Smrg 7211e6d2e958Smrg -os2dllname) 7212e6d2e958Smrg prev=os2dllname 7213e6d2e958Smrg continue 7214e6d2e958Smrg ;; 7215e6d2e958Smrg 721647e89262Smrg -o) prev=output ;; 7217bd1da9d7Smrg 721847e89262Smrg -precious-files-regex) 721947e89262Smrg prev=precious_regex 722047e89262Smrg continue 722147e89262Smrg ;; 7222bd1da9d7Smrg 722347e89262Smrg -release) 722447e89262Smrg prev=release 722547e89262Smrg continue 722647e89262Smrg ;; 7227bd1da9d7Smrg 722847e89262Smrg -rpath) 722947e89262Smrg prev=rpath 723047e89262Smrg continue 723147e89262Smrg ;; 7232bd1da9d7Smrg 723347e89262Smrg -R) 723447e89262Smrg prev=xrpath 723547e89262Smrg continue 723647e89262Smrg ;; 7237bd1da9d7Smrg 723847e89262Smrg -R*) 723947e89262Smrg func_stripname '-R' '' "$arg" 724047e89262Smrg dir=$func_stripname_result 724147e89262Smrg # We need an absolute path. 724247e89262Smrg case $dir in 724347e89262Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 7244899129b3Smrg =*) 7245899129b3Smrg func_stripname '=' '' "$dir" 7246899129b3Smrg dir=$lt_sysroot$func_stripname_result 7247899129b3Smrg ;; 724847e89262Smrg *) 724947e89262Smrg func_fatal_error "only absolute run-paths are allowed" 725047e89262Smrg ;; 725147e89262Smrg esac 725247e89262Smrg case "$xrpath " in 725347e89262Smrg *" $dir "*) ;; 7254899129b3Smrg *) func_append xrpath " $dir" ;; 725547e89262Smrg esac 725647e89262Smrg continue 725747e89262Smrg ;; 7258bd1da9d7Smrg 725947e89262Smrg -shared) 726047e89262Smrg # The effects of -shared are defined in a previous loop. 726147e89262Smrg continue 726247e89262Smrg ;; 7263bd1da9d7Smrg 726447e89262Smrg -shrext) 726547e89262Smrg prev=shrext 726647e89262Smrg continue 726747e89262Smrg ;; 7268bd1da9d7Smrg 726947e89262Smrg -static | -static-libtool-libs) 727047e89262Smrg # The effects of -static are defined in a previous loop. 727147e89262Smrg # We used to do the same as -all-static on platforms that 727247e89262Smrg # didn't have a PIC flag, but the assumption that the effects 727347e89262Smrg # would be equivalent was wrong. It would break on at least 727447e89262Smrg # Digital Unix and AIX. 727547e89262Smrg continue 727647e89262Smrg ;; 7277bd1da9d7Smrg 727847e89262Smrg -thread-safe) 727947e89262Smrg thread_safe=yes 728047e89262Smrg continue 728147e89262Smrg ;; 7282bd1da9d7Smrg 728347e89262Smrg -version-info) 728447e89262Smrg prev=vinfo 728547e89262Smrg continue 728647e89262Smrg ;; 7287bd1da9d7Smrg 728847e89262Smrg -version-number) 728947e89262Smrg prev=vinfo 729047e89262Smrg vinfo_number=yes 729147e89262Smrg continue 729247e89262Smrg ;; 7293bd1da9d7Smrg 729447e89262Smrg -weak) 729547e89262Smrg prev=weak 729647e89262Smrg continue 729747e89262Smrg ;; 7298bd1da9d7Smrg 729947e89262Smrg -Wc,*) 730047e89262Smrg func_stripname '-Wc,' '' "$arg" 730147e89262Smrg args=$func_stripname_result 730247e89262Smrg arg= 7303e6d2e958Smrg save_ifs=$IFS; IFS=, 730447e89262Smrg for flag in $args; do 7305e6d2e958Smrg IFS=$save_ifs 730647e89262Smrg func_quote_for_eval "$flag" 7307899129b3Smrg func_append arg " $func_quote_for_eval_result" 7308899129b3Smrg func_append compiler_flags " $func_quote_for_eval_result" 730947e89262Smrg done 7310e6d2e958Smrg IFS=$save_ifs 731147e89262Smrg func_stripname ' ' '' "$arg" 731247e89262Smrg arg=$func_stripname_result 731347e89262Smrg ;; 7314bd1da9d7Smrg 731547e89262Smrg -Wl,*) 731647e89262Smrg func_stripname '-Wl,' '' "$arg" 731747e89262Smrg args=$func_stripname_result 731847e89262Smrg arg= 7319e6d2e958Smrg save_ifs=$IFS; IFS=, 732047e89262Smrg for flag in $args; do 7321e6d2e958Smrg IFS=$save_ifs 732247e89262Smrg func_quote_for_eval "$flag" 7323899129b3Smrg func_append arg " $wl$func_quote_for_eval_result" 7324899129b3Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 7325899129b3Smrg func_append linker_flags " $func_quote_for_eval_result" 732647e89262Smrg done 7327e6d2e958Smrg IFS=$save_ifs 732847e89262Smrg func_stripname ' ' '' "$arg" 732947e89262Smrg arg=$func_stripname_result 733047e89262Smrg ;; 7331bd1da9d7Smrg 733247e89262Smrg -Xcompiler) 733347e89262Smrg prev=xcompiler 733447e89262Smrg continue 733547e89262Smrg ;; 7336bd1da9d7Smrg 733747e89262Smrg -Xlinker) 733847e89262Smrg prev=xlinker 733947e89262Smrg continue 734047e89262Smrg ;; 7341bd1da9d7Smrg 734247e89262Smrg -XCClinker) 734347e89262Smrg prev=xcclinker 734447e89262Smrg continue 734547e89262Smrg ;; 7346bd1da9d7Smrg 734747e89262Smrg # -msg_* for osf cc 734847e89262Smrg -msg_*) 734947e89262Smrg func_quote_for_eval "$arg" 7350e6d2e958Smrg arg=$func_quote_for_eval_result 735147e89262Smrg ;; 7352bd1da9d7Smrg 735347e89262Smrg # Flags to be passed through unchanged, with rationale: 735447e89262Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 735547e89262Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 735647e89262Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 735747e89262Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 735847e89262Smrg # -q* compiler args for the IBM compiler 735947e89262Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 736047e89262Smrg # -F/path path to uninstalled frameworks, gcc on darwin 736147e89262Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7362e6d2e958Smrg # -fstack-protector* stack protector flags for GCC 736347e89262Smrg # @file GCC response files 736447e89262Smrg # -tp=* Portland pgcc target processor selection 7365899129b3Smrg # --sysroot=* for sysroot support 7366e6d2e958Smrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 73676ad5a0e2Smrg # -specs=* GCC specs files 7368e6d2e958Smrg # -stdlib=* select c++ std lib with clang 73696ad5a0e2Smrg # -fsanitize=* Clang/GCC memory and address sanitizer 73706ad5a0e2Smrg # -fuse-ld=* Linker select flags for GCC 73716ad5a0e2Smrg # -static-* direct GCC to link specific libraries statically 73726ad5a0e2Smrg # -fcilkplus Cilk Plus language extension features for C/C++ 737347e89262Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7374899129b3Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 73756ad5a0e2Smrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 73766ad5a0e2Smrg -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) 737747e89262Smrg func_quote_for_eval "$arg" 7378e6d2e958Smrg arg=$func_quote_for_eval_result 737947e89262Smrg func_append compile_command " $arg" 738047e89262Smrg func_append finalize_command " $arg" 7381899129b3Smrg func_append compiler_flags " $arg" 738247e89262Smrg continue 738347e89262Smrg ;; 7384bd1da9d7Smrg 7385e6d2e958Smrg -Z*) 7386e6d2e958Smrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 7387e6d2e958Smrg # OS/2 uses -Zxxx to specify OS/2-specific options 7388e6d2e958Smrg compiler_flags="$compiler_flags $arg" 7389e6d2e958Smrg func_append compile_command " $arg" 7390e6d2e958Smrg func_append finalize_command " $arg" 7391e6d2e958Smrg case $arg in 7392e6d2e958Smrg -Zlinker | -Zstack) 7393e6d2e958Smrg prev=xcompiler 7394e6d2e958Smrg ;; 7395e6d2e958Smrg esac 7396e6d2e958Smrg continue 7397e6d2e958Smrg else 7398e6d2e958Smrg # Otherwise treat like 'Some other compiler flag' below 7399e6d2e958Smrg func_quote_for_eval "$arg" 7400e6d2e958Smrg arg=$func_quote_for_eval_result 7401e6d2e958Smrg fi 7402e6d2e958Smrg ;; 7403e6d2e958Smrg 740447e89262Smrg # Some other compiler flag. 740547e89262Smrg -* | +*) 740647e89262Smrg func_quote_for_eval "$arg" 7407e6d2e958Smrg arg=$func_quote_for_eval_result 740847e89262Smrg ;; 7409bd1da9d7Smrg 741047e89262Smrg *.$objext) 741147e89262Smrg # A standard object. 7412899129b3Smrg func_append objs " $arg" 741347e89262Smrg ;; 7414bd1da9d7Smrg 741547e89262Smrg *.lo) 741647e89262Smrg # A libtool-controlled object. 7417bd1da9d7Smrg 741847e89262Smrg # Check to see that this really is a libtool object. 741947e89262Smrg if func_lalib_unsafe_p "$arg"; then 742047e89262Smrg pic_object= 742147e89262Smrg non_pic_object= 7422bd1da9d7Smrg 742347e89262Smrg # Read the .lo file 742447e89262Smrg func_source "$arg" 7425bd1da9d7Smrg 742647e89262Smrg if test -z "$pic_object" || 742747e89262Smrg test -z "$non_pic_object" || 7428e6d2e958Smrg test none = "$pic_object" && 7429e6d2e958Smrg test none = "$non_pic_object"; then 7430e6d2e958Smrg func_fatal_error "cannot find name of object for '$arg'" 743147e89262Smrg fi 74325bcb6992Smrg 743347e89262Smrg # Extract subdirectory from the argument. 743447e89262Smrg func_dirname "$arg" "/" "" 7435e6d2e958Smrg xdir=$func_dirname_result 7436bd1da9d7Smrg 7437e6d2e958Smrg test none = "$pic_object" || { 743847e89262Smrg # Prepend the subdirectory the object is found in. 7439e6d2e958Smrg pic_object=$xdir$pic_object 7440bd1da9d7Smrg 7441e6d2e958Smrg if test dlfiles = "$prev"; then 7442e6d2e958Smrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7443899129b3Smrg func_append dlfiles " $pic_object" 744447e89262Smrg prev= 744547e89262Smrg continue 744647e89262Smrg else 744747e89262Smrg # If libtool objects are unsupported, then we need to preload. 744847e89262Smrg prev=dlprefiles 744947e89262Smrg fi 745047e89262Smrg fi 745147e89262Smrg 745247e89262Smrg # CHECK ME: I think I busted this. -Ossama 7453e6d2e958Smrg if test dlprefiles = "$prev"; then 745447e89262Smrg # Preload the old-style object. 7455899129b3Smrg func_append dlprefiles " $pic_object" 745647e89262Smrg prev= 745747e89262Smrg fi 745847e89262Smrg 745947e89262Smrg # A PIC object. 746047e89262Smrg func_append libobjs " $pic_object" 7461e6d2e958Smrg arg=$pic_object 7462e6d2e958Smrg } 746347e89262Smrg 746447e89262Smrg # Non-PIC object. 7465e6d2e958Smrg if test none != "$non_pic_object"; then 746647e89262Smrg # Prepend the subdirectory the object is found in. 7467e6d2e958Smrg non_pic_object=$xdir$non_pic_object 746847e89262Smrg 746947e89262Smrg # A standard non-PIC object 747047e89262Smrg func_append non_pic_objects " $non_pic_object" 7471e6d2e958Smrg if test -z "$pic_object" || test none = "$pic_object"; then 7472e6d2e958Smrg arg=$non_pic_object 747347e89262Smrg fi 747447e89262Smrg else 747547e89262Smrg # If the PIC object exists, use it instead. 747647e89262Smrg # $xdir was prepended to $pic_object above. 7477e6d2e958Smrg non_pic_object=$pic_object 747847e89262Smrg func_append non_pic_objects " $non_pic_object" 747947e89262Smrg fi 748047e89262Smrg else 748147e89262Smrg # Only an error if not doing a dry-run. 748247e89262Smrg if $opt_dry_run; then 748347e89262Smrg # Extract subdirectory from the argument. 748447e89262Smrg func_dirname "$arg" "/" "" 7485e6d2e958Smrg xdir=$func_dirname_result 748647e89262Smrg 748747e89262Smrg func_lo2o "$arg" 748847e89262Smrg pic_object=$xdir$objdir/$func_lo2o_result 748947e89262Smrg non_pic_object=$xdir$func_lo2o_result 749047e89262Smrg func_append libobjs " $pic_object" 749147e89262Smrg func_append non_pic_objects " $non_pic_object" 749247e89262Smrg else 7493e6d2e958Smrg func_fatal_error "'$arg' is not a valid libtool object" 749447e89262Smrg fi 749547e89262Smrg fi 749647e89262Smrg ;; 749747e89262Smrg 749847e89262Smrg *.$libext) 749947e89262Smrg # An archive. 7500899129b3Smrg func_append deplibs " $arg" 7501899129b3Smrg func_append old_deplibs " $arg" 750247e89262Smrg continue 750347e89262Smrg ;; 750447e89262Smrg 750547e89262Smrg *.la) 750647e89262Smrg # A libtool-controlled library. 750747e89262Smrg 7508899129b3Smrg func_resolve_sysroot "$arg" 7509e6d2e958Smrg if test dlfiles = "$prev"; then 751047e89262Smrg # This library was specified with -dlopen. 7511899129b3Smrg func_append dlfiles " $func_resolve_sysroot_result" 751247e89262Smrg prev= 7513e6d2e958Smrg elif test dlprefiles = "$prev"; then 751447e89262Smrg # The library was specified with -dlpreopen. 7515899129b3Smrg func_append dlprefiles " $func_resolve_sysroot_result" 751647e89262Smrg prev= 751747e89262Smrg else 7518899129b3Smrg func_append deplibs " $func_resolve_sysroot_result" 751947e89262Smrg fi 752047e89262Smrg continue 752147e89262Smrg ;; 752247e89262Smrg 752347e89262Smrg # Some other compiler argument. 752447e89262Smrg *) 752547e89262Smrg # Unknown arguments in both finalize_command and compile_command need 752647e89262Smrg # to be aesthetically quoted because they are evaled later. 752747e89262Smrg func_quote_for_eval "$arg" 7528e6d2e958Smrg arg=$func_quote_for_eval_result 752947e89262Smrg ;; 753047e89262Smrg esac # arg 753147e89262Smrg 753247e89262Smrg # Now actually substitute the argument into the commands. 753347e89262Smrg if test -n "$arg"; then 753447e89262Smrg func_append compile_command " $arg" 753547e89262Smrg func_append finalize_command " $arg" 753647e89262Smrg fi 753747e89262Smrg done # argument parsing loop 753847e89262Smrg 753947e89262Smrg test -n "$prev" && \ 7540e6d2e958Smrg func_fatal_help "the '$prevarg' option requires an argument" 754147e89262Smrg 7542e6d2e958Smrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 754347e89262Smrg eval arg=\"$export_dynamic_flag_spec\" 754447e89262Smrg func_append compile_command " $arg" 754547e89262Smrg func_append finalize_command " $arg" 754647e89262Smrg fi 754747e89262Smrg 754847e89262Smrg oldlibs= 754947e89262Smrg # calculate the name of the file, without its directory 755047e89262Smrg func_basename "$output" 7551e6d2e958Smrg outputname=$func_basename_result 7552e6d2e958Smrg libobjs_save=$libobjs 755347e89262Smrg 755447e89262Smrg if test -n "$shlibpath_var"; then 755547e89262Smrg # get the directories listed in $shlibpath_var 7556e6d2e958Smrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7557bd1da9d7Smrg else 755847e89262Smrg shlib_search_path= 7559bd1da9d7Smrg fi 756047e89262Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 756147e89262Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7562bd1da9d7Smrg 7563e6d2e958Smrg # Definition is injected by LT_CONFIG during libtool generation. 7564e6d2e958Smrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7565e6d2e958Smrg 756647e89262Smrg func_dirname "$output" "/" "" 7567e6d2e958Smrg output_objdir=$func_dirname_result$objdir 7568899129b3Smrg func_to_tool_file "$output_objdir/" 7569899129b3Smrg tool_output_objdir=$func_to_tool_file_result 757047e89262Smrg # Create the object directory. 757147e89262Smrg func_mkdir_p "$output_objdir" 7572bd1da9d7Smrg 757347e89262Smrg # Determine the type of output 757447e89262Smrg case $output in 757547e89262Smrg "") 757647e89262Smrg func_fatal_help "you must specify an output file" 757747e89262Smrg ;; 757847e89262Smrg *.$libext) linkmode=oldlib ;; 757947e89262Smrg *.lo | *.$objext) linkmode=obj ;; 758047e89262Smrg *.la) linkmode=lib ;; 758147e89262Smrg *) linkmode=prog ;; # Anything else should be a program. 758247e89262Smrg esac 758347e89262Smrg 758447e89262Smrg specialdeplibs= 758547e89262Smrg 758647e89262Smrg libs= 758747e89262Smrg # Find all interdependent deplibs by searching for libraries 758847e89262Smrg # that are linked more than once (e.g. -la -lb -la) 758947e89262Smrg for deplib in $deplibs; do 7590e6d2e958Smrg if $opt_preserve_dup_deps; then 759147e89262Smrg case "$libs " in 7592899129b3Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 759347e89262Smrg esac 759447e89262Smrg fi 7595899129b3Smrg func_append libs " $deplib" 759647e89262Smrg done 759747e89262Smrg 7598e6d2e958Smrg if test lib = "$linkmode"; then 759947e89262Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 760047e89262Smrg 760147e89262Smrg # Compute libraries that are listed more than once in $predeps 760247e89262Smrg # $postdeps and mark them as special (i.e., whose duplicates are 760347e89262Smrg # not to be eliminated). 760447e89262Smrg pre_post_deps= 760547e89262Smrg if $opt_duplicate_compiler_generated_deps; then 760647e89262Smrg for pre_post_dep in $predeps $postdeps; do 760747e89262Smrg case "$pre_post_deps " in 7608899129b3Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 760947e89262Smrg esac 7610899129b3Smrg func_append pre_post_deps " $pre_post_dep" 761147e89262Smrg done 761247e89262Smrg fi 761347e89262Smrg pre_post_deps= 761447e89262Smrg fi 761547e89262Smrg 761647e89262Smrg deplibs= 761747e89262Smrg newdependency_libs= 761847e89262Smrg newlib_search_path= 761947e89262Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 762047e89262Smrg notinst_deplibs= # not-installed libtool libraries 762147e89262Smrg notinst_path= # paths that contain not-installed libtool libraries 762247e89262Smrg 762347e89262Smrg case $linkmode in 762447e89262Smrg lib) 762547e89262Smrg passes="conv dlpreopen link" 762647e89262Smrg for file in $dlfiles $dlprefiles; do 762747e89262Smrg case $file in 762847e89262Smrg *.la) ;; 762947e89262Smrg *) 7630e6d2e958Smrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 763147e89262Smrg ;; 763247e89262Smrg esac 763347e89262Smrg done 763447e89262Smrg ;; 763547e89262Smrg prog) 763647e89262Smrg compile_deplibs= 763747e89262Smrg finalize_deplibs= 7638e6d2e958Smrg alldeplibs=false 763947e89262Smrg newdlfiles= 764047e89262Smrg newdlprefiles= 764147e89262Smrg passes="conv scan dlopen dlpreopen link" 764247e89262Smrg ;; 764347e89262Smrg *) passes="conv" 764447e89262Smrg ;; 764547e89262Smrg esac 764647e89262Smrg 764747e89262Smrg for pass in $passes; do 764847e89262Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 764947e89262Smrg # so that -L comes before libs that need it for instance... 7650e6d2e958Smrg if test lib,link = "$linkmode,$pass"; then 765147e89262Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 765247e89262Smrg ## order, and fix it there properly 765347e89262Smrg tmp_deplibs= 765447e89262Smrg for deplib in $deplibs; do 765547e89262Smrg tmp_deplibs="$deplib $tmp_deplibs" 765647e89262Smrg done 7657e6d2e958Smrg deplibs=$tmp_deplibs 765847e89262Smrg fi 765947e89262Smrg 7660e6d2e958Smrg if test lib,link = "$linkmode,$pass" || 7661e6d2e958Smrg test prog,scan = "$linkmode,$pass"; then 7662e6d2e958Smrg libs=$deplibs 766347e89262Smrg deplibs= 766447e89262Smrg fi 7665e6d2e958Smrg if test prog = "$linkmode"; then 766647e89262Smrg case $pass in 7667e6d2e958Smrg dlopen) libs=$dlfiles ;; 7668e6d2e958Smrg dlpreopen) libs=$dlprefiles ;; 76696ad5a0e2Smrg link) 76706ad5a0e2Smrg libs="$deplibs %DEPLIBS%" 76716ad5a0e2Smrg test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" 76726ad5a0e2Smrg ;; 767347e89262Smrg esac 767447e89262Smrg fi 7675e6d2e958Smrg if test lib,dlpreopen = "$linkmode,$pass"; then 767647e89262Smrg # Collect and forward deplibs of preopened libtool libs 767747e89262Smrg for lib in $dlprefiles; do 767847e89262Smrg # Ignore non-libtool-libs 767947e89262Smrg dependency_libs= 7680899129b3Smrg func_resolve_sysroot "$lib" 768147e89262Smrg case $lib in 7682899129b3Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 768347e89262Smrg esac 768447e89262Smrg 768547e89262Smrg # Collect preopened libtool deplibs, except any this library 768647e89262Smrg # has declared as weak libs 768747e89262Smrg for deplib in $dependency_libs; do 768847e89262Smrg func_basename "$deplib" 768947e89262Smrg deplib_base=$func_basename_result 769047e89262Smrg case " $weak_libs " in 769147e89262Smrg *" $deplib_base "*) ;; 7692899129b3Smrg *) func_append deplibs " $deplib" ;; 769347e89262Smrg esac 769447e89262Smrg done 769547e89262Smrg done 7696e6d2e958Smrg libs=$dlprefiles 769747e89262Smrg fi 7698e6d2e958Smrg if test dlopen = "$pass"; then 769947e89262Smrg # Collect dlpreopened libraries 7700e6d2e958Smrg save_deplibs=$deplibs 770147e89262Smrg deplibs= 770247e89262Smrg fi 770347e89262Smrg 770447e89262Smrg for deplib in $libs; do 770547e89262Smrg lib= 7706e6d2e958Smrg found=false 770747e89262Smrg case $deplib in 7708899129b3Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7709899129b3Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7710e6d2e958Smrg if test prog,link = "$linkmode,$pass"; then 771147e89262Smrg compile_deplibs="$deplib $compile_deplibs" 771247e89262Smrg finalize_deplibs="$deplib $finalize_deplibs" 771347e89262Smrg else 7714899129b3Smrg func_append compiler_flags " $deplib" 7715e6d2e958Smrg if test lib = "$linkmode"; then 771647e89262Smrg case "$new_inherited_linker_flags " in 771747e89262Smrg *" $deplib "*) ;; 7718899129b3Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 771947e89262Smrg esac 772047e89262Smrg fi 772147e89262Smrg fi 772247e89262Smrg continue 772347e89262Smrg ;; 772447e89262Smrg -l*) 7725e6d2e958Smrg if test lib != "$linkmode" && test prog != "$linkmode"; then 7726e6d2e958Smrg func_warning "'-l' is ignored for archives/objects" 772747e89262Smrg continue 772847e89262Smrg fi 772947e89262Smrg func_stripname '-l' '' "$deplib" 773047e89262Smrg name=$func_stripname_result 7731e6d2e958Smrg if test lib = "$linkmode"; then 773247e89262Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 773347e89262Smrg else 773447e89262Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 773547e89262Smrg fi 773647e89262Smrg for searchdir in $searchdirs; do 773747e89262Smrg for search_ext in .la $std_shrext .so .a; do 773847e89262Smrg # Search the libtool library 7739e6d2e958Smrg lib=$searchdir/lib$name$search_ext 774047e89262Smrg if test -f "$lib"; then 7741e6d2e958Smrg if test .la = "$search_ext"; then 7742e6d2e958Smrg found=: 774347e89262Smrg else 7744e6d2e958Smrg found=false 774547e89262Smrg fi 774647e89262Smrg break 2 774747e89262Smrg fi 774847e89262Smrg done 774947e89262Smrg done 7750e6d2e958Smrg if $found; then 7751e6d2e958Smrg # deplib is a libtool library 775247e89262Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 775347e89262Smrg # We need to do some special things here, and not later. 7754e6d2e958Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 775547e89262Smrg case " $predeps $postdeps " in 775647e89262Smrg *" $deplib "*) 775747e89262Smrg if func_lalib_p "$lib"; then 775847e89262Smrg library_names= 775947e89262Smrg old_library= 776047e89262Smrg func_source "$lib" 776147e89262Smrg for l in $old_library $library_names; do 7762e6d2e958Smrg ll=$l 776347e89262Smrg done 7764e6d2e958Smrg if test "X$ll" = "X$old_library"; then # only static version available 7765e6d2e958Smrg found=false 776647e89262Smrg func_dirname "$lib" "" "." 7767e6d2e958Smrg ladir=$func_dirname_result 776847e89262Smrg lib=$ladir/$old_library 7769e6d2e958Smrg if test prog,link = "$linkmode,$pass"; then 777047e89262Smrg compile_deplibs="$deplib $compile_deplibs" 777147e89262Smrg finalize_deplibs="$deplib $finalize_deplibs" 777247e89262Smrg else 777347e89262Smrg deplibs="$deplib $deplibs" 7774e6d2e958Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 777547e89262Smrg fi 777647e89262Smrg continue 777747e89262Smrg fi 777847e89262Smrg fi 777947e89262Smrg ;; 778047e89262Smrg *) ;; 778147e89262Smrg esac 778247e89262Smrg fi 7783e6d2e958Smrg else 7784e6d2e958Smrg # deplib doesn't seem to be a libtool library 7785e6d2e958Smrg if test prog,link = "$linkmode,$pass"; then 7786e6d2e958Smrg compile_deplibs="$deplib $compile_deplibs" 7787e6d2e958Smrg finalize_deplibs="$deplib $finalize_deplibs" 7788e6d2e958Smrg else 7789e6d2e958Smrg deplibs="$deplib $deplibs" 7790e6d2e958Smrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7791e6d2e958Smrg fi 7792e6d2e958Smrg continue 779347e89262Smrg fi 779447e89262Smrg ;; # -l 779547e89262Smrg *.ltframework) 7796e6d2e958Smrg if test prog,link = "$linkmode,$pass"; then 779747e89262Smrg compile_deplibs="$deplib $compile_deplibs" 779847e89262Smrg finalize_deplibs="$deplib $finalize_deplibs" 779947e89262Smrg else 780047e89262Smrg deplibs="$deplib $deplibs" 7801e6d2e958Smrg if test lib = "$linkmode"; then 780247e89262Smrg case "$new_inherited_linker_flags " in 780347e89262Smrg *" $deplib "*) ;; 7804899129b3Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 780547e89262Smrg esac 780647e89262Smrg fi 780747e89262Smrg fi 780847e89262Smrg continue 780947e89262Smrg ;; 781047e89262Smrg -L*) 781147e89262Smrg case $linkmode in 781247e89262Smrg lib) 781347e89262Smrg deplibs="$deplib $deplibs" 7814e6d2e958Smrg test conv = "$pass" && continue 781547e89262Smrg newdependency_libs="$deplib $newdependency_libs" 781647e89262Smrg func_stripname '-L' '' "$deplib" 7817899129b3Smrg func_resolve_sysroot "$func_stripname_result" 7818899129b3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 781947e89262Smrg ;; 782047e89262Smrg prog) 7821e6d2e958Smrg if test conv = "$pass"; then 782247e89262Smrg deplibs="$deplib $deplibs" 782347e89262Smrg continue 782447e89262Smrg fi 7825e6d2e958Smrg if test scan = "$pass"; then 782647e89262Smrg deplibs="$deplib $deplibs" 782747e89262Smrg else 782847e89262Smrg compile_deplibs="$deplib $compile_deplibs" 782947e89262Smrg finalize_deplibs="$deplib $finalize_deplibs" 783047e89262Smrg fi 783147e89262Smrg func_stripname '-L' '' "$deplib" 7832899129b3Smrg func_resolve_sysroot "$func_stripname_result" 7833899129b3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 783447e89262Smrg ;; 783547e89262Smrg *) 7836e6d2e958Smrg func_warning "'-L' is ignored for archives/objects" 783747e89262Smrg ;; 783847e89262Smrg esac # linkmode 783947e89262Smrg continue 784047e89262Smrg ;; # -L 784147e89262Smrg -R*) 7842e6d2e958Smrg if test link = "$pass"; then 784347e89262Smrg func_stripname '-R' '' "$deplib" 7844899129b3Smrg func_resolve_sysroot "$func_stripname_result" 7845899129b3Smrg dir=$func_resolve_sysroot_result 784647e89262Smrg # Make sure the xrpath contains only unique directories. 784747e89262Smrg case "$xrpath " in 784847e89262Smrg *" $dir "*) ;; 7849899129b3Smrg *) func_append xrpath " $dir" ;; 785047e89262Smrg esac 785147e89262Smrg fi 785247e89262Smrg deplibs="$deplib $deplibs" 785347e89262Smrg continue 785447e89262Smrg ;; 7855899129b3Smrg *.la) 7856899129b3Smrg func_resolve_sysroot "$deplib" 7857899129b3Smrg lib=$func_resolve_sysroot_result 7858899129b3Smrg ;; 785947e89262Smrg *.$libext) 7860e6d2e958Smrg if test conv = "$pass"; then 786147e89262Smrg deplibs="$deplib $deplibs" 786247e89262Smrg continue 786347e89262Smrg fi 786447e89262Smrg case $linkmode in 786547e89262Smrg lib) 786647e89262Smrg # Linking convenience modules into shared libraries is allowed, 786747e89262Smrg # but linking other static libraries is non-portable. 786847e89262Smrg case " $dlpreconveniencelibs " in 786947e89262Smrg *" $deplib "*) ;; 787047e89262Smrg *) 7871e6d2e958Smrg valid_a_lib=false 787247e89262Smrg case $deplibs_check_method in 787347e89262Smrg match_pattern*) 787447e89262Smrg set dummy $deplibs_check_method; shift 787547e89262Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 787647e89262Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 787747e89262Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 7878e6d2e958Smrg valid_a_lib=: 787947e89262Smrg fi 788047e89262Smrg ;; 788147e89262Smrg pass_all) 7882e6d2e958Smrg valid_a_lib=: 788347e89262Smrg ;; 788447e89262Smrg esac 7885e6d2e958Smrg if $valid_a_lib; then 7886e6d2e958Smrg echo 7887e6d2e958Smrg $ECHO "*** Warning: Linking the shared library $output against the" 7888e6d2e958Smrg $ECHO "*** static library $deplib is not portable!" 7889e6d2e958Smrg deplibs="$deplib $deplibs" 7890e6d2e958Smrg else 789147e89262Smrg echo 789247e89262Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 789347e89262Smrg echo "*** I have the capability to make that library automatically link in when" 789447e89262Smrg echo "*** you link to this library. But I can only do this if you have a" 789547e89262Smrg echo "*** shared version of the library, which you do not appear to have" 789647e89262Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 789747e89262Smrg echo "*** that it is just a static archive that I should not use here." 789847e89262Smrg fi 789947e89262Smrg ;; 790047e89262Smrg esac 790147e89262Smrg continue 790247e89262Smrg ;; 790347e89262Smrg prog) 7904e6d2e958Smrg if test link != "$pass"; then 790547e89262Smrg deplibs="$deplib $deplibs" 790647e89262Smrg else 790747e89262Smrg compile_deplibs="$deplib $compile_deplibs" 790847e89262Smrg finalize_deplibs="$deplib $finalize_deplibs" 790947e89262Smrg fi 791047e89262Smrg continue 791147e89262Smrg ;; 791247e89262Smrg esac # linkmode 791347e89262Smrg ;; # *.$libext 791447e89262Smrg *.lo | *.$objext) 7915e6d2e958Smrg if test conv = "$pass"; then 791647e89262Smrg deplibs="$deplib $deplibs" 7917e6d2e958Smrg elif test prog = "$linkmode"; then 7918e6d2e958Smrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 791947e89262Smrg # If there is no dlopen support or we're linking statically, 792047e89262Smrg # we need to preload. 7921899129b3Smrg func_append newdlprefiles " $deplib" 792247e89262Smrg compile_deplibs="$deplib $compile_deplibs" 792347e89262Smrg finalize_deplibs="$deplib $finalize_deplibs" 792447e89262Smrg else 7925899129b3Smrg func_append newdlfiles " $deplib" 792647e89262Smrg fi 792747e89262Smrg fi 792847e89262Smrg continue 792947e89262Smrg ;; 793047e89262Smrg %DEPLIBS%) 7931e6d2e958Smrg alldeplibs=: 793247e89262Smrg continue 793347e89262Smrg ;; 793447e89262Smrg esac # case $deplib 793547e89262Smrg 7936e6d2e958Smrg $found || test -f "$lib" \ 7937e6d2e958Smrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 793847e89262Smrg 793947e89262Smrg # Check to see that this really is a libtool archive. 794047e89262Smrg func_lalib_unsafe_p "$lib" \ 7941e6d2e958Smrg || func_fatal_error "'$lib' is not a valid libtool archive" 794247e89262Smrg 794347e89262Smrg func_dirname "$lib" "" "." 7944e6d2e958Smrg ladir=$func_dirname_result 794547e89262Smrg 794647e89262Smrg dlname= 794747e89262Smrg dlopen= 794847e89262Smrg dlpreopen= 794947e89262Smrg libdir= 795047e89262Smrg library_names= 795147e89262Smrg old_library= 795247e89262Smrg inherited_linker_flags= 795347e89262Smrg # If the library was installed with an old release of libtool, 795447e89262Smrg # it will not redefine variables installed, or shouldnotlink 795547e89262Smrg installed=yes 795647e89262Smrg shouldnotlink=no 795747e89262Smrg avoidtemprpath= 795847e89262Smrg 795947e89262Smrg 796047e89262Smrg # Read the .la file 796147e89262Smrg func_source "$lib" 796247e89262Smrg 796347e89262Smrg # Convert "-framework foo" to "foo.ltframework" 796447e89262Smrg if test -n "$inherited_linker_flags"; then 796547e89262Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 796647e89262Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 796747e89262Smrg case " $new_inherited_linker_flags " in 796847e89262Smrg *" $tmp_inherited_linker_flag "*) ;; 7969899129b3Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 797047e89262Smrg esac 797147e89262Smrg done 797247e89262Smrg fi 797347e89262Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7974e6d2e958Smrg if test lib,link = "$linkmode,$pass" || 7975e6d2e958Smrg test prog,scan = "$linkmode,$pass" || 7976e6d2e958Smrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 7977899129b3Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 7978899129b3Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 797947e89262Smrg fi 798047e89262Smrg 7981e6d2e958Smrg if test conv = "$pass"; then 798247e89262Smrg # Only check for convenience libraries 798347e89262Smrg deplibs="$lib $deplibs" 798447e89262Smrg if test -z "$libdir"; then 798547e89262Smrg if test -z "$old_library"; then 7986e6d2e958Smrg func_fatal_error "cannot find name of link library for '$lib'" 798747e89262Smrg fi 798847e89262Smrg # It is a libtool convenience library, so add in its objects. 7989899129b3Smrg func_append convenience " $ladir/$objdir/$old_library" 7990899129b3Smrg func_append old_convenience " $ladir/$objdir/$old_library" 79916ad5a0e2Smrg tmp_libs= 79926ad5a0e2Smrg for deplib in $dependency_libs; do 79936ad5a0e2Smrg deplibs="$deplib $deplibs" 79946ad5a0e2Smrg if $opt_preserve_dup_deps; then 79956ad5a0e2Smrg case "$tmp_libs " in 79966ad5a0e2Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 79976ad5a0e2Smrg esac 79986ad5a0e2Smrg fi 79996ad5a0e2Smrg func_append tmp_libs " $deplib" 80006ad5a0e2Smrg done 8001e6d2e958Smrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 8002e6d2e958Smrg func_fatal_error "'$lib' is not a convenience library" 800347e89262Smrg fi 800447e89262Smrg continue 800547e89262Smrg fi # $pass = conv 800647e89262Smrg 800747e89262Smrg 800847e89262Smrg # Get the name of the library we link against. 800947e89262Smrg linklib= 8010899129b3Smrg if test -n "$old_library" && 8011e6d2e958Smrg { test yes = "$prefer_static_libs" || 8012e6d2e958Smrg test built,no = "$prefer_static_libs,$installed"; }; then 8013899129b3Smrg linklib=$old_library 8014899129b3Smrg else 8015899129b3Smrg for l in $old_library $library_names; do 8016e6d2e958Smrg linklib=$l 8017899129b3Smrg done 8018899129b3Smrg fi 801947e89262Smrg if test -z "$linklib"; then 8020e6d2e958Smrg func_fatal_error "cannot find name of link library for '$lib'" 802147e89262Smrg fi 802247e89262Smrg 802347e89262Smrg # This library was specified with -dlopen. 8024e6d2e958Smrg if test dlopen = "$pass"; then 8025e6d2e958Smrg test -z "$libdir" \ 8026e6d2e958Smrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 802747e89262Smrg if test -z "$dlname" || 8028e6d2e958Smrg test yes != "$dlopen_support" || 8029e6d2e958Smrg test no = "$build_libtool_libs" 8030e6d2e958Smrg then 803147e89262Smrg # If there is no dlname, no dlopen support or we're linking 803247e89262Smrg # statically, we need to preload. We also need to preload any 803347e89262Smrg # dependent libraries so libltdl's deplib preloader doesn't 803447e89262Smrg # bomb out in the load deplibs phase. 8035899129b3Smrg func_append dlprefiles " $lib $dependency_libs" 803647e89262Smrg else 8037899129b3Smrg func_append newdlfiles " $lib" 803847e89262Smrg fi 803947e89262Smrg continue 804047e89262Smrg fi # $pass = dlopen 804147e89262Smrg 804247e89262Smrg # We need an absolute path. 804347e89262Smrg case $ladir in 8044e6d2e958Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 804547e89262Smrg *) 804647e89262Smrg abs_ladir=`cd "$ladir" && pwd` 804747e89262Smrg if test -z "$abs_ladir"; then 8048e6d2e958Smrg func_warning "cannot determine absolute directory name of '$ladir'" 804947e89262Smrg func_warning "passing it literally to the linker, although it might fail" 8050e6d2e958Smrg abs_ladir=$ladir 805147e89262Smrg fi 805247e89262Smrg ;; 805347e89262Smrg esac 805447e89262Smrg func_basename "$lib" 8055e6d2e958Smrg laname=$func_basename_result 805647e89262Smrg 805747e89262Smrg # Find the relevant object directory and library name. 8058e6d2e958Smrg if test yes = "$installed"; then 8059899129b3Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8060e6d2e958Smrg func_warning "library '$lib' was moved." 8061e6d2e958Smrg dir=$ladir 8062e6d2e958Smrg absdir=$abs_ladir 8063e6d2e958Smrg libdir=$abs_ladir 806447e89262Smrg else 8065e6d2e958Smrg dir=$lt_sysroot$libdir 8066e6d2e958Smrg absdir=$lt_sysroot$libdir 806747e89262Smrg fi 8068e6d2e958Smrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 806947e89262Smrg else 807047e89262Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 8071e6d2e958Smrg dir=$ladir 8072e6d2e958Smrg absdir=$abs_ladir 807347e89262Smrg # Remove this search path later 8074899129b3Smrg func_append notinst_path " $abs_ladir" 807547e89262Smrg else 8076e6d2e958Smrg dir=$ladir/$objdir 8077e6d2e958Smrg absdir=$abs_ladir/$objdir 807847e89262Smrg # Remove this search path later 8079899129b3Smrg func_append notinst_path " $abs_ladir" 808047e89262Smrg fi 808147e89262Smrg fi # $installed = yes 808247e89262Smrg func_stripname 'lib' '.la' "$laname" 808347e89262Smrg name=$func_stripname_result 808447e89262Smrg 808547e89262Smrg # This library was specified with -dlpreopen. 8086e6d2e958Smrg if test dlpreopen = "$pass"; then 8087e6d2e958Smrg if test -z "$libdir" && test prog = "$linkmode"; then 8088e6d2e958Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 808947e89262Smrg fi 8090e6d2e958Smrg case $host in 8091899129b3Smrg # special handling for platforms with PE-DLLs. 8092899129b3Smrg *cygwin* | *mingw* | *cegcc* ) 8093899129b3Smrg # Linker will automatically link against shared library if both 8094899129b3Smrg # static and shared are present. Therefore, ensure we extract 8095899129b3Smrg # symbols from the import library if a shared library is present 8096899129b3Smrg # (otherwise, the dlopen module name will be incorrect). We do 8097899129b3Smrg # this by putting the import library name into $newdlprefiles. 8098899129b3Smrg # We recover the dlopen module name by 'saving' the la file 8099899129b3Smrg # name in a special purpose variable, and (later) extracting the 8100899129b3Smrg # dlname from the la file. 8101899129b3Smrg if test -n "$dlname"; then 8102899129b3Smrg func_tr_sh "$dir/$linklib" 8103899129b3Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8104899129b3Smrg func_append newdlprefiles " $dir/$linklib" 8105899129b3Smrg else 8106899129b3Smrg func_append newdlprefiles " $dir/$old_library" 8107899129b3Smrg # Keep a list of preopened convenience libraries to check 8108899129b3Smrg # that they are being used correctly in the link pass. 8109899129b3Smrg test -z "$libdir" && \ 8110899129b3Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8111899129b3Smrg fi 8112899129b3Smrg ;; 8113899129b3Smrg * ) 8114899129b3Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 8115899129b3Smrg # are required to link). 8116899129b3Smrg if test -n "$old_library"; then 8117899129b3Smrg func_append newdlprefiles " $dir/$old_library" 8118899129b3Smrg # Keep a list of preopened convenience libraries to check 8119899129b3Smrg # that they are being used correctly in the link pass. 8120899129b3Smrg test -z "$libdir" && \ 8121899129b3Smrg func_append dlpreconveniencelibs " $dir/$old_library" 8122899129b3Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 8123899129b3Smrg elif test -n "$dlname"; then 8124899129b3Smrg func_append newdlprefiles " $dir/$dlname" 8125899129b3Smrg else 8126899129b3Smrg func_append newdlprefiles " $dir/$linklib" 8127899129b3Smrg fi 8128899129b3Smrg ;; 8129899129b3Smrg esac 813047e89262Smrg fi # $pass = dlpreopen 813147e89262Smrg 813247e89262Smrg if test -z "$libdir"; then 813347e89262Smrg # Link the convenience library 8134e6d2e958Smrg if test lib = "$linkmode"; then 813547e89262Smrg deplibs="$dir/$old_library $deplibs" 8136e6d2e958Smrg elif test prog,link = "$linkmode,$pass"; then 813747e89262Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 813847e89262Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 813947e89262Smrg else 814047e89262Smrg deplibs="$lib $deplibs" # used for prog,scan pass 814147e89262Smrg fi 814247e89262Smrg continue 814347e89262Smrg fi 814447e89262Smrg 814547e89262Smrg 8146e6d2e958Smrg if test prog = "$linkmode" && test link != "$pass"; then 8147899129b3Smrg func_append newlib_search_path " $ladir" 814847e89262Smrg deplibs="$lib $deplibs" 814947e89262Smrg 8150e6d2e958Smrg linkalldeplibs=false 8151e6d2e958Smrg if test no != "$link_all_deplibs" || test -z "$library_names" || 8152e6d2e958Smrg test no = "$build_libtool_libs"; then 8153e6d2e958Smrg linkalldeplibs=: 815447e89262Smrg fi 815547e89262Smrg 815647e89262Smrg tmp_libs= 815747e89262Smrg for deplib in $dependency_libs; do 815847e89262Smrg case $deplib in 815947e89262Smrg -L*) func_stripname '-L' '' "$deplib" 8160899129b3Smrg func_resolve_sysroot "$func_stripname_result" 8161899129b3Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 816247e89262Smrg ;; 816347e89262Smrg esac 816447e89262Smrg # Need to link against all dependency_libs? 8165e6d2e958Smrg if $linkalldeplibs; then 816647e89262Smrg deplibs="$deplib $deplibs" 816747e89262Smrg else 816847e89262Smrg # Need to hardcode shared library paths 816947e89262Smrg # or/and link against static libraries 817047e89262Smrg newdependency_libs="$deplib $newdependency_libs" 817147e89262Smrg fi 8172e6d2e958Smrg if $opt_preserve_dup_deps; then 817347e89262Smrg case "$tmp_libs " in 8174899129b3Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 817547e89262Smrg esac 817647e89262Smrg fi 8177899129b3Smrg func_append tmp_libs " $deplib" 817847e89262Smrg done # for deplib 817947e89262Smrg continue 818047e89262Smrg fi # $linkmode = prog... 818147e89262Smrg 8182e6d2e958Smrg if test prog,link = "$linkmode,$pass"; then 818347e89262Smrg if test -n "$library_names" && 8184e6d2e958Smrg { { test no = "$prefer_static_libs" || 8185e6d2e958Smrg test built,yes = "$prefer_static_libs,$installed"; } || 818647e89262Smrg test -z "$old_library"; }; then 818747e89262Smrg # We need to hardcode the library path 8188e6d2e958Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 818947e89262Smrg # Make sure the rpath contains only unique directories. 8190e6d2e958Smrg case $temp_rpath: in 819147e89262Smrg *"$absdir:"*) ;; 8192899129b3Smrg *) func_append temp_rpath "$absdir:" ;; 819347e89262Smrg esac 819447e89262Smrg fi 819547e89262Smrg 819647e89262Smrg # Hardcode the library path. 819747e89262Smrg # Skip directories that are in the system default run-time 819847e89262Smrg # search path. 819947e89262Smrg case " $sys_lib_dlsearch_path " in 820047e89262Smrg *" $absdir "*) ;; 820147e89262Smrg *) 820247e89262Smrg case "$compile_rpath " in 820347e89262Smrg *" $absdir "*) ;; 8204899129b3Smrg *) func_append compile_rpath " $absdir" ;; 820547e89262Smrg esac 820647e89262Smrg ;; 820747e89262Smrg esac 820847e89262Smrg case " $sys_lib_dlsearch_path " in 820947e89262Smrg *" $libdir "*) ;; 821047e89262Smrg *) 821147e89262Smrg case "$finalize_rpath " in 821247e89262Smrg *" $libdir "*) ;; 8213899129b3Smrg *) func_append finalize_rpath " $libdir" ;; 821447e89262Smrg esac 821547e89262Smrg ;; 821647e89262Smrg esac 821747e89262Smrg fi # $linkmode,$pass = prog,link... 821847e89262Smrg 8219e6d2e958Smrg if $alldeplibs && 8220e6d2e958Smrg { test pass_all = "$deplibs_check_method" || 8221e6d2e958Smrg { test yes = "$build_libtool_libs" && 822247e89262Smrg test -n "$library_names"; }; }; then 822347e89262Smrg # We only need to search for static libraries 822447e89262Smrg continue 822547e89262Smrg fi 822647e89262Smrg fi 822747e89262Smrg 822847e89262Smrg link_static=no # Whether the deplib will be linked statically 822947e89262Smrg use_static_libs=$prefer_static_libs 8230e6d2e958Smrg if test built = "$use_static_libs" && test yes = "$installed"; then 823147e89262Smrg use_static_libs=no 823247e89262Smrg fi 823347e89262Smrg if test -n "$library_names" && 8234e6d2e958Smrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 823547e89262Smrg case $host in 8236e6d2e958Smrg *cygwin* | *mingw* | *cegcc* | *os2*) 823747e89262Smrg # No point in relinking DLLs because paths are not encoded 8238899129b3Smrg func_append notinst_deplibs " $lib" 823947e89262Smrg need_relink=no 824047e89262Smrg ;; 824147e89262Smrg *) 8242e6d2e958Smrg if test no = "$installed"; then 8243899129b3Smrg func_append notinst_deplibs " $lib" 824447e89262Smrg need_relink=yes 824547e89262Smrg fi 824647e89262Smrg ;; 824747e89262Smrg esac 824847e89262Smrg # This is a shared library 824947e89262Smrg 825047e89262Smrg # Warn about portability, can't link against -module's on some 825147e89262Smrg # systems (darwin). Don't bleat about dlopened modules though! 8252e6d2e958Smrg dlopenmodule= 825347e89262Smrg for dlpremoduletest in $dlprefiles; do 825447e89262Smrg if test "X$dlpremoduletest" = "X$lib"; then 8255e6d2e958Smrg dlopenmodule=$dlpremoduletest 825647e89262Smrg break 825747e89262Smrg fi 825847e89262Smrg done 8259e6d2e958Smrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 826047e89262Smrg echo 8261e6d2e958Smrg if test prog = "$linkmode"; then 826247e89262Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 826347e89262Smrg else 826447e89262Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 826547e89262Smrg fi 826647e89262Smrg $ECHO "*** $linklib is not portable!" 826747e89262Smrg fi 8268e6d2e958Smrg if test lib = "$linkmode" && 8269e6d2e958Smrg test yes = "$hardcode_into_libs"; then 827047e89262Smrg # Hardcode the library path. 827147e89262Smrg # Skip directories that are in the system default run-time 827247e89262Smrg # search path. 827347e89262Smrg case " $sys_lib_dlsearch_path " in 827447e89262Smrg *" $absdir "*) ;; 827547e89262Smrg *) 827647e89262Smrg case "$compile_rpath " in 827747e89262Smrg *" $absdir "*) ;; 8278899129b3Smrg *) func_append compile_rpath " $absdir" ;; 827947e89262Smrg esac 828047e89262Smrg ;; 828147e89262Smrg esac 828247e89262Smrg case " $sys_lib_dlsearch_path " in 828347e89262Smrg *" $libdir "*) ;; 828447e89262Smrg *) 828547e89262Smrg case "$finalize_rpath " in 828647e89262Smrg *" $libdir "*) ;; 8287899129b3Smrg *) func_append finalize_rpath " $libdir" ;; 828847e89262Smrg esac 828947e89262Smrg ;; 829047e89262Smrg esac 829147e89262Smrg fi 829247e89262Smrg 829347e89262Smrg if test -n "$old_archive_from_expsyms_cmds"; then 829447e89262Smrg # figure out the soname 829547e89262Smrg set dummy $library_names 829647e89262Smrg shift 8297e6d2e958Smrg realname=$1 829847e89262Smrg shift 829947e89262Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 830047e89262Smrg # use dlname if we got it. it's perfectly good, no? 830147e89262Smrg if test -n "$dlname"; then 8302e6d2e958Smrg soname=$dlname 830347e89262Smrg elif test -n "$soname_spec"; then 830447e89262Smrg # bleh windows 830547e89262Smrg case $host in 8306e6d2e958Smrg *cygwin* | mingw* | *cegcc* | *os2*) 830747e89262Smrg func_arith $current - $age 830847e89262Smrg major=$func_arith_result 8309e6d2e958Smrg versuffix=-$major 831047e89262Smrg ;; 831147e89262Smrg esac 831247e89262Smrg eval soname=\"$soname_spec\" 831347e89262Smrg else 8314e6d2e958Smrg soname=$realname 831547e89262Smrg fi 831647e89262Smrg 831747e89262Smrg # Make a new name for the extract_expsyms_cmds to use 8318e6d2e958Smrg soroot=$soname 831947e89262Smrg func_basename "$soroot" 8320e6d2e958Smrg soname=$func_basename_result 832147e89262Smrg func_stripname 'lib' '.dll' "$soname" 832247e89262Smrg newlib=libimp-$func_stripname_result.a 832347e89262Smrg 832447e89262Smrg # If the library has no export list, then create one now 832547e89262Smrg if test -f "$output_objdir/$soname-def"; then : 832647e89262Smrg else 8327e6d2e958Smrg func_verbose "extracting exported symbol list from '$soname'" 832847e89262Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 832947e89262Smrg fi 833047e89262Smrg 833147e89262Smrg # Create $newlib 833247e89262Smrg if test -f "$output_objdir/$newlib"; then :; else 8333e6d2e958Smrg func_verbose "generating import library for '$soname'" 833447e89262Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 833547e89262Smrg fi 833647e89262Smrg # make sure the library variables are pointing to the new library 833747e89262Smrg dir=$output_objdir 833847e89262Smrg linklib=$newlib 833947e89262Smrg fi # test -n "$old_archive_from_expsyms_cmds" 834047e89262Smrg 8341e6d2e958Smrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 834247e89262Smrg add_shlibpath= 834347e89262Smrg add_dir= 834447e89262Smrg add= 834547e89262Smrg lib_linked=yes 834647e89262Smrg case $hardcode_action in 834747e89262Smrg immediate | unsupported) 8348e6d2e958Smrg if test no = "$hardcode_direct"; then 8349e6d2e958Smrg add=$dir/$linklib 835047e89262Smrg case $host in 8351e6d2e958Smrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8352e6d2e958Smrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 835347e89262Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8354e6d2e958Smrg *-*-unixware7*) add_dir=-L$dir ;; 835547e89262Smrg *-*-darwin* ) 8356e6d2e958Smrg # if the lib is a (non-dlopened) module then we cannot 835747e89262Smrg # link against it, someone is ignoring the earlier warnings 835847e89262Smrg if /usr/bin/file -L $add 2> /dev/null | 8359e6d2e958Smrg $GREP ": [^:]* bundle" >/dev/null; then 836047e89262Smrg if test "X$dlopenmodule" != "X$lib"; then 836147e89262Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8362e6d2e958Smrg if test -z "$old_library"; then 836347e89262Smrg echo 836447e89262Smrg echo "*** And there doesn't seem to be a static archive available" 836547e89262Smrg echo "*** The link will probably fail, sorry" 836647e89262Smrg else 8367e6d2e958Smrg add=$dir/$old_library 836847e89262Smrg fi 836947e89262Smrg elif test -n "$old_library"; then 8370e6d2e958Smrg add=$dir/$old_library 837147e89262Smrg fi 837247e89262Smrg fi 837347e89262Smrg esac 8374e6d2e958Smrg elif test no = "$hardcode_minus_L"; then 837547e89262Smrg case $host in 8376e6d2e958Smrg *-*-sunos*) add_shlibpath=$dir ;; 837747e89262Smrg esac 8378e6d2e958Smrg add_dir=-L$dir 8379e6d2e958Smrg add=-l$name 8380e6d2e958Smrg elif test no = "$hardcode_shlibpath_var"; then 8381e6d2e958Smrg add_shlibpath=$dir 8382e6d2e958Smrg add=-l$name 838347e89262Smrg else 838447e89262Smrg lib_linked=no 838547e89262Smrg fi 838647e89262Smrg ;; 838747e89262Smrg relink) 8388e6d2e958Smrg if test yes = "$hardcode_direct" && 8389e6d2e958Smrg test no = "$hardcode_direct_absolute"; then 8390e6d2e958Smrg add=$dir/$linklib 8391e6d2e958Smrg elif test yes = "$hardcode_minus_L"; then 8392e6d2e958Smrg add_dir=-L$absdir 839347e89262Smrg # Try looking first in the location we're being installed to. 839447e89262Smrg if test -n "$inst_prefix_dir"; then 839547e89262Smrg case $libdir in 839647e89262Smrg [\\/]*) 8397899129b3Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 839847e89262Smrg ;; 839947e89262Smrg esac 840047e89262Smrg fi 8401e6d2e958Smrg add=-l$name 8402e6d2e958Smrg elif test yes = "$hardcode_shlibpath_var"; then 8403e6d2e958Smrg add_shlibpath=$dir 8404e6d2e958Smrg add=-l$name 840547e89262Smrg else 840647e89262Smrg lib_linked=no 840747e89262Smrg fi 840847e89262Smrg ;; 840947e89262Smrg *) lib_linked=no ;; 841047e89262Smrg esac 841147e89262Smrg 8412e6d2e958Smrg if test yes != "$lib_linked"; then 841347e89262Smrg func_fatal_configuration "unsupported hardcode properties" 841447e89262Smrg fi 841547e89262Smrg 841647e89262Smrg if test -n "$add_shlibpath"; then 841747e89262Smrg case :$compile_shlibpath: in 841847e89262Smrg *":$add_shlibpath:"*) ;; 8419899129b3Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 842047e89262Smrg esac 842147e89262Smrg fi 8422e6d2e958Smrg if test prog = "$linkmode"; then 842347e89262Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 842447e89262Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 842547e89262Smrg else 842647e89262Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 842747e89262Smrg test -n "$add" && deplibs="$add $deplibs" 8428e6d2e958Smrg if test yes != "$hardcode_direct" && 8429e6d2e958Smrg test yes != "$hardcode_minus_L" && 8430e6d2e958Smrg test yes = "$hardcode_shlibpath_var"; then 843147e89262Smrg case :$finalize_shlibpath: in 843247e89262Smrg *":$libdir:"*) ;; 8433899129b3Smrg *) func_append finalize_shlibpath "$libdir:" ;; 843447e89262Smrg esac 843547e89262Smrg fi 843647e89262Smrg fi 843747e89262Smrg fi 843847e89262Smrg 8439e6d2e958Smrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 844047e89262Smrg add_shlibpath= 844147e89262Smrg add_dir= 844247e89262Smrg add= 844347e89262Smrg # Finalize command for both is simple: just hardcode it. 8444e6d2e958Smrg if test yes = "$hardcode_direct" && 8445e6d2e958Smrg test no = "$hardcode_direct_absolute"; then 8446e6d2e958Smrg add=$libdir/$linklib 8447e6d2e958Smrg elif test yes = "$hardcode_minus_L"; then 8448e6d2e958Smrg add_dir=-L$libdir 8449e6d2e958Smrg add=-l$name 8450e6d2e958Smrg elif test yes = "$hardcode_shlibpath_var"; then 845147e89262Smrg case :$finalize_shlibpath: in 845247e89262Smrg *":$libdir:"*) ;; 8453899129b3Smrg *) func_append finalize_shlibpath "$libdir:" ;; 845447e89262Smrg esac 8455e6d2e958Smrg add=-l$name 8456e6d2e958Smrg elif test yes = "$hardcode_automatic"; then 845747e89262Smrg if test -n "$inst_prefix_dir" && 8458e6d2e958Smrg test -f "$inst_prefix_dir$libdir/$linklib"; then 8459e6d2e958Smrg add=$inst_prefix_dir$libdir/$linklib 846047e89262Smrg else 8461e6d2e958Smrg add=$libdir/$linklib 846247e89262Smrg fi 846347e89262Smrg else 846447e89262Smrg # We cannot seem to hardcode it, guess we'll fake it. 8465e6d2e958Smrg add_dir=-L$libdir 846647e89262Smrg # Try looking first in the location we're being installed to. 846747e89262Smrg if test -n "$inst_prefix_dir"; then 846847e89262Smrg case $libdir in 846947e89262Smrg [\\/]*) 8470899129b3Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 847147e89262Smrg ;; 847247e89262Smrg esac 847347e89262Smrg fi 8474e6d2e958Smrg add=-l$name 847547e89262Smrg fi 847647e89262Smrg 8477e6d2e958Smrg if test prog = "$linkmode"; then 847847e89262Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 847947e89262Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 848047e89262Smrg else 848147e89262Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 848247e89262Smrg test -n "$add" && deplibs="$add $deplibs" 848347e89262Smrg fi 848447e89262Smrg fi 8485e6d2e958Smrg elif test prog = "$linkmode"; then 848647e89262Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 848747e89262Smrg # is not unsupported. This is valid on all known static and 848847e89262Smrg # shared platforms. 8489e6d2e958Smrg if test unsupported != "$hardcode_direct"; then 8490e6d2e958Smrg test -n "$old_library" && linklib=$old_library 849147e89262Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 849247e89262Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 849347e89262Smrg else 849447e89262Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 849547e89262Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 849647e89262Smrg fi 8497e6d2e958Smrg elif test yes = "$build_libtool_libs"; then 849847e89262Smrg # Not a shared library 8499e6d2e958Smrg if test pass_all != "$deplibs_check_method"; then 850047e89262Smrg # We're trying link a shared library against a static one 850147e89262Smrg # but the system doesn't support it. 850247e89262Smrg 850347e89262Smrg # Just print a warning and add the library to dependency_libs so 850447e89262Smrg # that the program can be linked against the static library. 850547e89262Smrg echo 8506e6d2e958Smrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 850747e89262Smrg echo "*** I have the capability to make that library automatically link in when" 850847e89262Smrg echo "*** you link to this library. But I can only do this if you have a" 850947e89262Smrg echo "*** shared version of the library, which you do not appear to have." 8510e6d2e958Smrg if test yes = "$module"; then 851147e89262Smrg echo "*** But as you try to build a module library, libtool will still create " 851247e89262Smrg echo "*** a static module, that should work as long as the dlopening application" 851347e89262Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 851447e89262Smrg if test -z "$global_symbol_pipe"; then 851547e89262Smrg echo 851647e89262Smrg echo "*** However, this would only work if libtool was able to extract symbol" 8517e6d2e958Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 851847e89262Smrg echo "*** not find such a program. So, this module is probably useless." 8519e6d2e958Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 852047e89262Smrg fi 8521e6d2e958Smrg if test no = "$build_old_libs"; then 852247e89262Smrg build_libtool_libs=module 852347e89262Smrg build_old_libs=yes 852447e89262Smrg else 852547e89262Smrg build_libtool_libs=no 852647e89262Smrg fi 852747e89262Smrg fi 852847e89262Smrg else 852947e89262Smrg deplibs="$dir/$old_library $deplibs" 853047e89262Smrg link_static=yes 853147e89262Smrg fi 853247e89262Smrg fi # link shared/static library? 853347e89262Smrg 8534e6d2e958Smrg if test lib = "$linkmode"; then 853547e89262Smrg if test -n "$dependency_libs" && 8536e6d2e958Smrg { test yes != "$hardcode_into_libs" || 8537e6d2e958Smrg test yes = "$build_old_libs" || 8538e6d2e958Smrg test yes = "$link_static"; }; then 853947e89262Smrg # Extract -R from dependency_libs 854047e89262Smrg temp_deplibs= 854147e89262Smrg for libdir in $dependency_libs; do 854247e89262Smrg case $libdir in 854347e89262Smrg -R*) func_stripname '-R' '' "$libdir" 854447e89262Smrg temp_xrpath=$func_stripname_result 854547e89262Smrg case " $xrpath " in 854647e89262Smrg *" $temp_xrpath "*) ;; 8547899129b3Smrg *) func_append xrpath " $temp_xrpath";; 854847e89262Smrg esac;; 8549899129b3Smrg *) func_append temp_deplibs " $libdir";; 855047e89262Smrg esac 855147e89262Smrg done 8552e6d2e958Smrg dependency_libs=$temp_deplibs 855347e89262Smrg fi 855447e89262Smrg 8555899129b3Smrg func_append newlib_search_path " $absdir" 855647e89262Smrg # Link against this library 8557e6d2e958Smrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 855847e89262Smrg # ... and its dependency_libs 855947e89262Smrg tmp_libs= 856047e89262Smrg for deplib in $dependency_libs; do 856147e89262Smrg newdependency_libs="$deplib $newdependency_libs" 8562899129b3Smrg case $deplib in 8563899129b3Smrg -L*) func_stripname '-L' '' "$deplib" 8564899129b3Smrg func_resolve_sysroot "$func_stripname_result";; 8565899129b3Smrg *) func_resolve_sysroot "$deplib" ;; 8566899129b3Smrg esac 8567e6d2e958Smrg if $opt_preserve_dup_deps; then 856847e89262Smrg case "$tmp_libs " in 8569899129b3Smrg *" $func_resolve_sysroot_result "*) 8570899129b3Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 857147e89262Smrg esac 857247e89262Smrg fi 8573899129b3Smrg func_append tmp_libs " $func_resolve_sysroot_result" 857447e89262Smrg done 857547e89262Smrg 8576e6d2e958Smrg if test no != "$link_all_deplibs"; then 857747e89262Smrg # Add the search paths of all dependency libraries 857847e89262Smrg for deplib in $dependency_libs; do 857947e89262Smrg path= 858047e89262Smrg case $deplib in 8581e6d2e958Smrg -L*) path=$deplib ;; 858247e89262Smrg *.la) 8583899129b3Smrg func_resolve_sysroot "$deplib" 8584899129b3Smrg deplib=$func_resolve_sysroot_result 858547e89262Smrg func_dirname "$deplib" "" "." 8586899129b3Smrg dir=$func_dirname_result 858747e89262Smrg # We need an absolute path. 858847e89262Smrg case $dir in 8589e6d2e958Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 859047e89262Smrg *) 859147e89262Smrg absdir=`cd "$dir" && pwd` 859247e89262Smrg if test -z "$absdir"; then 8593e6d2e958Smrg func_warning "cannot determine absolute directory name of '$dir'" 8594e6d2e958Smrg absdir=$dir 859547e89262Smrg fi 859647e89262Smrg ;; 859747e89262Smrg esac 859847e89262Smrg if $GREP "^installed=no" $deplib > /dev/null; then 859947e89262Smrg case $host in 860047e89262Smrg *-*-darwin*) 860147e89262Smrg depdepl= 8602e6d2e958Smrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8603e6d2e958Smrg if test -n "$deplibrary_names"; then 8604e6d2e958Smrg for tmp in $deplibrary_names; do 860547e89262Smrg depdepl=$tmp 860647e89262Smrg done 8607e6d2e958Smrg if test -f "$absdir/$objdir/$depdepl"; then 8608e6d2e958Smrg depdepl=$absdir/$objdir/$depdepl 8609e6d2e958Smrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 861047e89262Smrg if test -z "$darwin_install_name"; then 8611e6d2e958Smrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 861247e89262Smrg fi 8613e6d2e958Smrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8614e6d2e958Smrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 861547e89262Smrg path= 861647e89262Smrg fi 861747e89262Smrg fi 861847e89262Smrg ;; 861947e89262Smrg *) 8620e6d2e958Smrg path=-L$absdir/$objdir 862147e89262Smrg ;; 862247e89262Smrg esac 862347e89262Smrg else 8624e6d2e958Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 862547e89262Smrg test -z "$libdir" && \ 8626e6d2e958Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 862747e89262Smrg test "$absdir" != "$libdir" && \ 8628e6d2e958Smrg func_warning "'$deplib' seems to be moved" 862947e89262Smrg 8630e6d2e958Smrg path=-L$absdir 863147e89262Smrg fi 863247e89262Smrg ;; 863347e89262Smrg esac 863447e89262Smrg case " $deplibs " in 863547e89262Smrg *" $path "*) ;; 863647e89262Smrg *) deplibs="$path $deplibs" ;; 863747e89262Smrg esac 863847e89262Smrg done 863947e89262Smrg fi # link_all_deplibs != no 864047e89262Smrg fi # linkmode = lib 864147e89262Smrg done # for deplib in $libs 8642e6d2e958Smrg if test link = "$pass"; then 8643e6d2e958Smrg if test prog = "$linkmode"; then 864447e89262Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 864547e89262Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 864647e89262Smrg else 864747e89262Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 864847e89262Smrg fi 864947e89262Smrg fi 8650e6d2e958Smrg dependency_libs=$newdependency_libs 8651e6d2e958Smrg if test dlpreopen = "$pass"; then 865247e89262Smrg # Link the dlpreopened libraries before other libraries 865347e89262Smrg for deplib in $save_deplibs; do 865447e89262Smrg deplibs="$deplib $deplibs" 865547e89262Smrg done 865647e89262Smrg fi 8657e6d2e958Smrg if test dlopen != "$pass"; then 8658e6d2e958Smrg test conv = "$pass" || { 865947e89262Smrg # Make sure lib_search_path contains only unique directories. 866047e89262Smrg lib_search_path= 866147e89262Smrg for dir in $newlib_search_path; do 866247e89262Smrg case "$lib_search_path " in 866347e89262Smrg *" $dir "*) ;; 8664899129b3Smrg *) func_append lib_search_path " $dir" ;; 866547e89262Smrg esac 866647e89262Smrg done 866747e89262Smrg newlib_search_path= 8668e6d2e958Smrg } 866947e89262Smrg 8670e6d2e958Smrg if test prog,link = "$linkmode,$pass"; then 867147e89262Smrg vars="compile_deplibs finalize_deplibs" 8672e6d2e958Smrg else 8673e6d2e958Smrg vars=deplibs 867447e89262Smrg fi 867547e89262Smrg for var in $vars dependency_libs; do 867647e89262Smrg # Add libraries to $var in reverse order 867747e89262Smrg eval tmp_libs=\"\$$var\" 867847e89262Smrg new_libs= 867947e89262Smrg for deplib in $tmp_libs; do 868047e89262Smrg # FIXME: Pedantically, this is the right thing to do, so 868147e89262Smrg # that some nasty dependency loop isn't accidentally 868247e89262Smrg # broken: 868347e89262Smrg #new_libs="$deplib $new_libs" 868447e89262Smrg # Pragmatically, this seems to cause very few problems in 868547e89262Smrg # practice: 868647e89262Smrg case $deplib in 868747e89262Smrg -L*) new_libs="$deplib $new_libs" ;; 868847e89262Smrg -R*) ;; 868947e89262Smrg *) 869047e89262Smrg # And here is the reason: when a library appears more 869147e89262Smrg # than once as an explicit dependence of a library, or 869247e89262Smrg # is implicitly linked in more than once by the 869347e89262Smrg # compiler, it is considered special, and multiple 869447e89262Smrg # occurrences thereof are not removed. Compare this 869547e89262Smrg # with having the same library being listed as a 869647e89262Smrg # dependency of multiple other libraries: in this case, 869747e89262Smrg # we know (pedantically, we assume) the library does not 869847e89262Smrg # need to be listed more than once, so we keep only the 869947e89262Smrg # last copy. This is not always right, but it is rare 870047e89262Smrg # enough that we require users that really mean to play 870147e89262Smrg # such unportable linking tricks to link the library 870247e89262Smrg # using -Wl,-lname, so that libtool does not consider it 870347e89262Smrg # for duplicate removal. 870447e89262Smrg case " $specialdeplibs " in 870547e89262Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 870647e89262Smrg *) 870747e89262Smrg case " $new_libs " in 870847e89262Smrg *" $deplib "*) ;; 870947e89262Smrg *) new_libs="$deplib $new_libs" ;; 871047e89262Smrg esac 871147e89262Smrg ;; 871247e89262Smrg esac 871347e89262Smrg ;; 871447e89262Smrg esac 871547e89262Smrg done 871647e89262Smrg tmp_libs= 871747e89262Smrg for deplib in $new_libs; do 871847e89262Smrg case $deplib in 871947e89262Smrg -L*) 872047e89262Smrg case " $tmp_libs " in 872147e89262Smrg *" $deplib "*) ;; 8722899129b3Smrg *) func_append tmp_libs " $deplib" ;; 872347e89262Smrg esac 872447e89262Smrg ;; 8725899129b3Smrg *) func_append tmp_libs " $deplib" ;; 872647e89262Smrg esac 872747e89262Smrg done 872847e89262Smrg eval $var=\"$tmp_libs\" 872947e89262Smrg done # for var 873047e89262Smrg fi 8731e6d2e958Smrg 8732e6d2e958Smrg # Add Sun CC postdeps if required: 8733e6d2e958Smrg test CXX = "$tagname" && { 8734e6d2e958Smrg case $host_os in 8735e6d2e958Smrg linux*) 8736e6d2e958Smrg case `$CC -V 2>&1 | sed 5q` in 8737e6d2e958Smrg *Sun\ C*) # Sun C++ 5.9 8738e6d2e958Smrg func_suncc_cstd_abi 8739e6d2e958Smrg 8740e6d2e958Smrg if test no != "$suncc_use_cstd_abi"; then 8741e6d2e958Smrg func_append postdeps ' -library=Cstd -library=Crun' 8742e6d2e958Smrg fi 8743e6d2e958Smrg ;; 8744e6d2e958Smrg esac 8745e6d2e958Smrg ;; 8746e6d2e958Smrg 8747e6d2e958Smrg solaris*) 8748e6d2e958Smrg func_cc_basename "$CC" 8749e6d2e958Smrg case $func_cc_basename_result in 8750e6d2e958Smrg CC* | sunCC*) 8751e6d2e958Smrg func_suncc_cstd_abi 8752e6d2e958Smrg 8753e6d2e958Smrg if test no != "$suncc_use_cstd_abi"; then 8754e6d2e958Smrg func_append postdeps ' -library=Cstd -library=Crun' 8755e6d2e958Smrg fi 8756e6d2e958Smrg ;; 8757e6d2e958Smrg esac 8758e6d2e958Smrg ;; 8759e6d2e958Smrg esac 8760e6d2e958Smrg } 8761e6d2e958Smrg 876247e89262Smrg # Last step: remove runtime libs from dependency_libs 876347e89262Smrg # (they stay in deplibs) 876447e89262Smrg tmp_libs= 8765e6d2e958Smrg for i in $dependency_libs; do 876647e89262Smrg case " $predeps $postdeps $compiler_lib_search_path " in 876747e89262Smrg *" $i "*) 8768e6d2e958Smrg i= 876947e89262Smrg ;; 877047e89262Smrg esac 8771e6d2e958Smrg if test -n "$i"; then 8772899129b3Smrg func_append tmp_libs " $i" 877347e89262Smrg fi 877447e89262Smrg done 877547e89262Smrg dependency_libs=$tmp_libs 877647e89262Smrg done # for pass 8777e6d2e958Smrg if test prog = "$linkmode"; then 8778e6d2e958Smrg dlfiles=$newdlfiles 877947e89262Smrg fi 8780e6d2e958Smrg if test prog = "$linkmode" || test lib = "$linkmode"; then 8781e6d2e958Smrg dlprefiles=$newdlprefiles 878247e89262Smrg fi 878347e89262Smrg 878447e89262Smrg case $linkmode in 878547e89262Smrg oldlib) 8786e6d2e958Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8787e6d2e958Smrg func_warning "'-dlopen' is ignored for archives" 878847e89262Smrg fi 878947e89262Smrg 879047e89262Smrg case " $deplibs" in 879147e89262Smrg *\ -l* | *\ -L*) 8792e6d2e958Smrg func_warning "'-l' and '-L' are ignored for archives" ;; 879347e89262Smrg esac 879447e89262Smrg 879547e89262Smrg test -n "$rpath" && \ 8796e6d2e958Smrg func_warning "'-rpath' is ignored for archives" 879747e89262Smrg 879847e89262Smrg test -n "$xrpath" && \ 8799e6d2e958Smrg func_warning "'-R' is ignored for archives" 880047e89262Smrg 880147e89262Smrg test -n "$vinfo" && \ 8802e6d2e958Smrg func_warning "'-version-info/-version-number' is ignored for archives" 880347e89262Smrg 880447e89262Smrg test -n "$release" && \ 8805e6d2e958Smrg func_warning "'-release' is ignored for archives" 880647e89262Smrg 880747e89262Smrg test -n "$export_symbols$export_symbols_regex" && \ 8808e6d2e958Smrg func_warning "'-export-symbols' is ignored for archives" 880947e89262Smrg 881047e89262Smrg # Now set the variables for building old libraries. 881147e89262Smrg build_libtool_libs=no 8812e6d2e958Smrg oldlibs=$output 8813899129b3Smrg func_append objs "$old_deplibs" 881447e89262Smrg ;; 881547e89262Smrg 881647e89262Smrg lib) 8817e6d2e958Smrg # Make sure we only generate libraries of the form 'libNAME.la'. 881847e89262Smrg case $outputname in 881947e89262Smrg lib*) 882047e89262Smrg func_stripname 'lib' '.la' "$outputname" 882147e89262Smrg name=$func_stripname_result 882247e89262Smrg eval shared_ext=\"$shrext_cmds\" 882347e89262Smrg eval libname=\"$libname_spec\" 882447e89262Smrg ;; 882547e89262Smrg *) 8826e6d2e958Smrg test no = "$module" \ 8827e6d2e958Smrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 882847e89262Smrg 8829e6d2e958Smrg if test no != "$need_lib_prefix"; then 883047e89262Smrg # Add the "lib" prefix for modules if required 883147e89262Smrg func_stripname '' '.la' "$outputname" 883247e89262Smrg name=$func_stripname_result 883347e89262Smrg eval shared_ext=\"$shrext_cmds\" 883447e89262Smrg eval libname=\"$libname_spec\" 883547e89262Smrg else 883647e89262Smrg func_stripname '' '.la' "$outputname" 883747e89262Smrg libname=$func_stripname_result 883847e89262Smrg fi 883947e89262Smrg ;; 884047e89262Smrg esac 884147e89262Smrg 884247e89262Smrg if test -n "$objs"; then 8843e6d2e958Smrg if test pass_all != "$deplibs_check_method"; then 8844e6d2e958Smrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 884547e89262Smrg else 884647e89262Smrg echo 884747e89262Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 884847e89262Smrg $ECHO "*** objects $objs is not portable!" 8849899129b3Smrg func_append libobjs " $objs" 885047e89262Smrg fi 885147e89262Smrg fi 885247e89262Smrg 8853e6d2e958Smrg test no = "$dlself" \ 8854e6d2e958Smrg || func_warning "'-dlopen self' is ignored for libtool libraries" 885547e89262Smrg 885647e89262Smrg set dummy $rpath 885747e89262Smrg shift 8858e6d2e958Smrg test 1 -lt "$#" \ 8859e6d2e958Smrg && func_warning "ignoring multiple '-rpath's for a libtool library" 886047e89262Smrg 8861e6d2e958Smrg install_libdir=$1 886247e89262Smrg 886347e89262Smrg oldlibs= 886447e89262Smrg if test -z "$rpath"; then 8865e6d2e958Smrg if test yes = "$build_libtool_libs"; then 886647e89262Smrg # Building a libtool convenience library. 8867e6d2e958Smrg # Some compilers have problems with a '.al' extension so 886847e89262Smrg # convenience libraries should have the same extension an 886947e89262Smrg # archive normally would. 887047e89262Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 887147e89262Smrg build_libtool_libs=convenience 887247e89262Smrg build_old_libs=yes 887347e89262Smrg fi 887447e89262Smrg 887547e89262Smrg test -n "$vinfo" && \ 8876e6d2e958Smrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 887747e89262Smrg 887847e89262Smrg test -n "$release" && \ 8879e6d2e958Smrg func_warning "'-release' is ignored for convenience libraries" 888047e89262Smrg else 888147e89262Smrg 888247e89262Smrg # Parse the version information argument. 8883e6d2e958Smrg save_ifs=$IFS; IFS=: 888447e89262Smrg set dummy $vinfo 0 0 0 888547e89262Smrg shift 8886e6d2e958Smrg IFS=$save_ifs 888747e89262Smrg 888847e89262Smrg test -n "$7" && \ 8889e6d2e958Smrg func_fatal_help "too many parameters to '-version-info'" 889047e89262Smrg 889147e89262Smrg # convert absolute version numbers to libtool ages 889247e89262Smrg # this retains compatibility with .la files and attempts 889347e89262Smrg # to make the code below a bit more comprehensible 889447e89262Smrg 889547e89262Smrg case $vinfo_number in 889647e89262Smrg yes) 8897e6d2e958Smrg number_major=$1 8898e6d2e958Smrg number_minor=$2 8899e6d2e958Smrg number_revision=$3 890047e89262Smrg # 890147e89262Smrg # There are really only two kinds -- those that 890247e89262Smrg # use the current revision as the major version 890347e89262Smrg # and those that subtract age and use age as 890447e89262Smrg # a minor version. But, then there is irix 8905e6d2e958Smrg # that has an extra 1 added just for fun 890647e89262Smrg # 890747e89262Smrg case $version_type in 8908899129b3Smrg # correct linux to gnu/linux during the next big refactor 8909e6d2e958Smrg darwin|freebsd-elf|linux|osf|windows|none) 891047e89262Smrg func_arith $number_major + $number_minor 891147e89262Smrg current=$func_arith_result 8912e6d2e958Smrg age=$number_minor 8913e6d2e958Smrg revision=$number_revision 891447e89262Smrg ;; 8915e6d2e958Smrg freebsd-aout|qnx|sunos) 8916e6d2e958Smrg current=$number_major 8917e6d2e958Smrg revision=$number_minor 8918e6d2e958Smrg age=0 891947e89262Smrg ;; 892047e89262Smrg irix|nonstopux) 892147e89262Smrg func_arith $number_major + $number_minor 892247e89262Smrg current=$func_arith_result 8923e6d2e958Smrg age=$number_minor 8924e6d2e958Smrg revision=$number_minor 892547e89262Smrg lt_irix_increment=no 892647e89262Smrg ;; 89276ad5a0e2Smrg *) 89286ad5a0e2Smrg func_fatal_configuration "$modename: unknown library version type '$version_type'" 89296ad5a0e2Smrg ;; 893047e89262Smrg esac 893147e89262Smrg ;; 893247e89262Smrg no) 8933e6d2e958Smrg current=$1 8934e6d2e958Smrg revision=$2 8935e6d2e958Smrg age=$3 893647e89262Smrg ;; 893747e89262Smrg esac 893847e89262Smrg 893947e89262Smrg # Check that each of the things are valid numbers. 894047e89262Smrg case $current in 894147e89262Smrg 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]) ;; 894247e89262Smrg *) 8943e6d2e958Smrg func_error "CURRENT '$current' must be a nonnegative integer" 8944e6d2e958Smrg func_fatal_error "'$vinfo' is not valid version information" 894547e89262Smrg ;; 894647e89262Smrg esac 894747e89262Smrg 894847e89262Smrg case $revision in 894947e89262Smrg 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]) ;; 895047e89262Smrg *) 8951e6d2e958Smrg func_error "REVISION '$revision' must be a nonnegative integer" 8952e6d2e958Smrg func_fatal_error "'$vinfo' is not valid version information" 895347e89262Smrg ;; 895447e89262Smrg esac 895547e89262Smrg 895647e89262Smrg case $age in 895747e89262Smrg 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]) ;; 895847e89262Smrg *) 8959e6d2e958Smrg func_error "AGE '$age' must be a nonnegative integer" 8960e6d2e958Smrg func_fatal_error "'$vinfo' is not valid version information" 896147e89262Smrg ;; 896247e89262Smrg esac 896347e89262Smrg 896447e89262Smrg if test "$age" -gt "$current"; then 8965e6d2e958Smrg func_error "AGE '$age' is greater than the current interface number '$current'" 8966e6d2e958Smrg func_fatal_error "'$vinfo' is not valid version information" 896747e89262Smrg fi 896847e89262Smrg 896947e89262Smrg # Calculate the version variables. 897047e89262Smrg major= 897147e89262Smrg versuffix= 897247e89262Smrg verstring= 897347e89262Smrg case $version_type in 897447e89262Smrg none) ;; 897547e89262Smrg 897647e89262Smrg darwin) 897747e89262Smrg # Like Linux, but with the current version available in 897847e89262Smrg # verstring for coding it into the library header 897947e89262Smrg func_arith $current - $age 898047e89262Smrg major=.$func_arith_result 8981e6d2e958Smrg versuffix=$major.$age.$revision 898247e89262Smrg # Darwin ld doesn't like 0 for these options... 898347e89262Smrg func_arith $current + 1 898447e89262Smrg minor_current=$func_arith_result 8985e6d2e958Smrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 898647e89262Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8987e6d2e958Smrg # On Darwin other compilers 8988e6d2e958Smrg case $CC in 8989e6d2e958Smrg nagfor*) 8990e6d2e958Smrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8991e6d2e958Smrg ;; 8992e6d2e958Smrg *) 8993e6d2e958Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8994e6d2e958Smrg ;; 8995e6d2e958Smrg esac 899647e89262Smrg ;; 899747e89262Smrg 899847e89262Smrg freebsd-aout) 8999e6d2e958Smrg major=.$current 9000e6d2e958Smrg versuffix=.$current.$revision 900147e89262Smrg ;; 900247e89262Smrg 900347e89262Smrg freebsd-elf) 9004e6d2e958Smrg func_arith $current - $age 9005e6d2e958Smrg major=.$func_arith_result 9006e6d2e958Smrg versuffix=$major.$age.$revision 900747e89262Smrg ;; 900847e89262Smrg 900947e89262Smrg irix | nonstopux) 9010e6d2e958Smrg if test no = "$lt_irix_increment"; then 901147e89262Smrg func_arith $current - $age 901247e89262Smrg else 901347e89262Smrg func_arith $current - $age + 1 901447e89262Smrg fi 901547e89262Smrg major=$func_arith_result 901647e89262Smrg 901747e89262Smrg case $version_type in 901847e89262Smrg nonstopux) verstring_prefix=nonstopux ;; 901947e89262Smrg *) verstring_prefix=sgi ;; 902047e89262Smrg esac 9021e6d2e958Smrg verstring=$verstring_prefix$major.$revision 902247e89262Smrg 902347e89262Smrg # Add in all the interfaces that we are compatible with. 902447e89262Smrg loop=$revision 9025e6d2e958Smrg while test 0 -ne "$loop"; do 902647e89262Smrg func_arith $revision - $loop 902747e89262Smrg iface=$func_arith_result 902847e89262Smrg func_arith $loop - 1 902947e89262Smrg loop=$func_arith_result 9030e6d2e958Smrg verstring=$verstring_prefix$major.$iface:$verstring 903147e89262Smrg done 903247e89262Smrg 9033e6d2e958Smrg # Before this point, $major must not contain '.'. 903447e89262Smrg major=.$major 9035e6d2e958Smrg versuffix=$major.$revision 903647e89262Smrg ;; 903747e89262Smrg 9038899129b3Smrg linux) # correct to gnu/linux during the next big refactor 903947e89262Smrg func_arith $current - $age 904047e89262Smrg major=.$func_arith_result 9041e6d2e958Smrg versuffix=$major.$age.$revision 904247e89262Smrg ;; 904347e89262Smrg 904447e89262Smrg osf) 904547e89262Smrg func_arith $current - $age 904647e89262Smrg major=.$func_arith_result 9047e6d2e958Smrg versuffix=.$current.$age.$revision 9048e6d2e958Smrg verstring=$current.$age.$revision 904947e89262Smrg 905047e89262Smrg # Add in all the interfaces that we are compatible with. 905147e89262Smrg loop=$age 9052e6d2e958Smrg while test 0 -ne "$loop"; do 905347e89262Smrg func_arith $current - $loop 905447e89262Smrg iface=$func_arith_result 905547e89262Smrg func_arith $loop - 1 905647e89262Smrg loop=$func_arith_result 9057e6d2e958Smrg verstring=$verstring:$iface.0 905847e89262Smrg done 905947e89262Smrg 906047e89262Smrg # Make executables depend on our current version. 9061e6d2e958Smrg func_append verstring ":$current.0" 906247e89262Smrg ;; 906347e89262Smrg 906447e89262Smrg qnx) 9065e6d2e958Smrg major=.$current 9066e6d2e958Smrg versuffix=.$current 9067e6d2e958Smrg ;; 9068e6d2e958Smrg 9069e6d2e958Smrg sco) 9070e6d2e958Smrg major=.$current 9071e6d2e958Smrg versuffix=.$current 907247e89262Smrg ;; 907347e89262Smrg 907447e89262Smrg sunos) 9075e6d2e958Smrg major=.$current 9076e6d2e958Smrg versuffix=.$current.$revision 907747e89262Smrg ;; 907847e89262Smrg 907947e89262Smrg windows) 908047e89262Smrg # Use '-' rather than '.', since we only want one 9081e6d2e958Smrg # extension on DOS 8.3 file systems. 908247e89262Smrg func_arith $current - $age 908347e89262Smrg major=$func_arith_result 9084e6d2e958Smrg versuffix=-$major 908547e89262Smrg ;; 908647e89262Smrg 908747e89262Smrg *) 9088e6d2e958Smrg func_fatal_configuration "unknown library version type '$version_type'" 908947e89262Smrg ;; 909047e89262Smrg esac 909147e89262Smrg 909247e89262Smrg # Clear the version info if we defaulted, and they specified a release. 909347e89262Smrg if test -z "$vinfo" && test -n "$release"; then 909447e89262Smrg major= 909547e89262Smrg case $version_type in 909647e89262Smrg darwin) 909747e89262Smrg # we can't check for "0.0" in archive_cmds due to quoting 909847e89262Smrg # problems, so we reset it completely 909947e89262Smrg verstring= 910047e89262Smrg ;; 910147e89262Smrg *) 9102e6d2e958Smrg verstring=0.0 910347e89262Smrg ;; 910447e89262Smrg esac 9105e6d2e958Smrg if test no = "$need_version"; then 910647e89262Smrg versuffix= 910747e89262Smrg else 9108e6d2e958Smrg versuffix=.0.0 910947e89262Smrg fi 911047e89262Smrg fi 911147e89262Smrg 911247e89262Smrg # Remove version info from name if versioning should be avoided 9113e6d2e958Smrg if test yes,no = "$avoid_version,$need_version"; then 911447e89262Smrg major= 911547e89262Smrg versuffix= 9116e6d2e958Smrg verstring= 911747e89262Smrg fi 911847e89262Smrg 911947e89262Smrg # Check to see if the archive will have undefined symbols. 9120e6d2e958Smrg if test yes = "$allow_undefined"; then 9121e6d2e958Smrg if test unsupported = "$allow_undefined_flag"; then 9122e6d2e958Smrg if test yes = "$build_old_libs"; then 9123e6d2e958Smrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9124e6d2e958Smrg build_libtool_libs=no 9125e6d2e958Smrg else 9126e6d2e958Smrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9127e6d2e958Smrg fi 912847e89262Smrg fi 912947e89262Smrg else 913047e89262Smrg # Don't allow undefined symbols. 9131e6d2e958Smrg allow_undefined_flag=$no_undefined_flag 913247e89262Smrg fi 913347e89262Smrg 913447e89262Smrg fi 913547e89262Smrg 9136e6d2e958Smrg func_generate_dlsyms "$libname" "$libname" : 9137899129b3Smrg func_append libobjs " $symfileobj" 9138e6d2e958Smrg test " " = "$libobjs" && libobjs= 913947e89262Smrg 9140e6d2e958Smrg if test relink != "$opt_mode"; then 914147e89262Smrg # Remove our outputs, but don't remove object files since they 914247e89262Smrg # may have been created when compiling PIC objects. 914347e89262Smrg removelist= 914447e89262Smrg tempremovelist=`$ECHO "$output_objdir/*"` 914547e89262Smrg for p in $tempremovelist; do 914647e89262Smrg case $p in 914747e89262Smrg *.$objext | *.gcno) 914847e89262Smrg ;; 9149e6d2e958Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9150e6d2e958Smrg if test -n "$precious_files_regex"; then 915147e89262Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 915247e89262Smrg then 915347e89262Smrg continue 915447e89262Smrg fi 915547e89262Smrg fi 9156899129b3Smrg func_append removelist " $p" 915747e89262Smrg ;; 915847e89262Smrg *) ;; 915947e89262Smrg esac 916047e89262Smrg done 916147e89262Smrg test -n "$removelist" && \ 916247e89262Smrg func_show_eval "${RM}r \$removelist" 916347e89262Smrg fi 916447e89262Smrg 916547e89262Smrg # Now set the variables for building old libraries. 9166e6d2e958Smrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9167899129b3Smrg func_append oldlibs " $output_objdir/$libname.$libext" 916847e89262Smrg 916947e89262Smrg # Transform .lo files to .o files. 9170e6d2e958Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 917147e89262Smrg fi 917247e89262Smrg 917347e89262Smrg # Eliminate all temporary directories. 917447e89262Smrg #for path in $notinst_path; do 917547e89262Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 917647e89262Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 917747e89262Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 917847e89262Smrg #done 917947e89262Smrg 918047e89262Smrg if test -n "$xrpath"; then 918147e89262Smrg # If the user specified any rpath flags, then add them. 918247e89262Smrg temp_xrpath= 918347e89262Smrg for libdir in $xrpath; do 9184899129b3Smrg func_replace_sysroot "$libdir" 9185899129b3Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 918647e89262Smrg case "$finalize_rpath " in 918747e89262Smrg *" $libdir "*) ;; 9188899129b3Smrg *) func_append finalize_rpath " $libdir" ;; 918947e89262Smrg esac 919047e89262Smrg done 9191e6d2e958Smrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 919247e89262Smrg dependency_libs="$temp_xrpath $dependency_libs" 919347e89262Smrg fi 919447e89262Smrg fi 919547e89262Smrg 919647e89262Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 9197e6d2e958Smrg old_dlfiles=$dlfiles 919847e89262Smrg dlfiles= 919947e89262Smrg for lib in $old_dlfiles; do 920047e89262Smrg case " $dlprefiles $dlfiles " in 920147e89262Smrg *" $lib "*) ;; 9202899129b3Smrg *) func_append dlfiles " $lib" ;; 920347e89262Smrg esac 920447e89262Smrg done 920547e89262Smrg 920647e89262Smrg # Make sure dlprefiles contains only unique files 9207e6d2e958Smrg old_dlprefiles=$dlprefiles 920847e89262Smrg dlprefiles= 920947e89262Smrg for lib in $old_dlprefiles; do 921047e89262Smrg case "$dlprefiles " in 921147e89262Smrg *" $lib "*) ;; 9212899129b3Smrg *) func_append dlprefiles " $lib" ;; 921347e89262Smrg esac 921447e89262Smrg done 921547e89262Smrg 9216e6d2e958Smrg if test yes = "$build_libtool_libs"; then 921747e89262Smrg if test -n "$rpath"; then 921847e89262Smrg case $host in 921947e89262Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 922047e89262Smrg # these systems don't actually have a c library (as such)! 922147e89262Smrg ;; 922247e89262Smrg *-*-rhapsody* | *-*-darwin1.[012]) 922347e89262Smrg # Rhapsody C library is in the System framework 9224899129b3Smrg func_append deplibs " System.ltframework" 922547e89262Smrg ;; 922647e89262Smrg *-*-netbsd*) 922747e89262Smrg # Don't link with libc until the a.out ld.so is fixed. 922847e89262Smrg ;; 922947e89262Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 923047e89262Smrg # Do not include libc due to us having libc/libc_r. 923147e89262Smrg ;; 923247e89262Smrg *-*-sco3.2v5* | *-*-sco5v6*) 923347e89262Smrg # Causes problems with __ctype 923447e89262Smrg ;; 923547e89262Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 923647e89262Smrg # Compiler inserts libc in the correct place for threads to work 923747e89262Smrg ;; 923847e89262Smrg *) 923947e89262Smrg # Add libc to deplibs on all other systems if necessary. 9240e6d2e958Smrg if test yes = "$build_libtool_need_lc"; then 9241899129b3Smrg func_append deplibs " -lc" 924247e89262Smrg fi 924347e89262Smrg ;; 924447e89262Smrg esac 924547e89262Smrg fi 924647e89262Smrg 924747e89262Smrg # Transform deplibs into only deplibs that can be linked in shared. 924847e89262Smrg name_save=$name 924947e89262Smrg libname_save=$libname 925047e89262Smrg release_save=$release 925147e89262Smrg versuffix_save=$versuffix 925247e89262Smrg major_save=$major 925347e89262Smrg # I'm not sure if I'm treating the release correctly. I think 925447e89262Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 925547e89262Smrg # add it in twice. Is that correct? 9256e6d2e958Smrg release= 9257e6d2e958Smrg versuffix= 9258e6d2e958Smrg major= 925947e89262Smrg newdeplibs= 926047e89262Smrg droppeddeps=no 926147e89262Smrg case $deplibs_check_method in 926247e89262Smrg pass_all) 926347e89262Smrg # Don't check for shared/static. Everything works. 926447e89262Smrg # This might be a little naive. We might want to check 926547e89262Smrg # whether the library exists or not. But this is on 926647e89262Smrg # osf3 & osf4 and I'm not really sure... Just 926747e89262Smrg # implementing what was already the behavior. 926847e89262Smrg newdeplibs=$deplibs 926947e89262Smrg ;; 927047e89262Smrg test_compile) 927147e89262Smrg # This code stresses the "libraries are programs" paradigm to its 927247e89262Smrg # limits. Maybe even breaks it. We compile a program, linking it 927347e89262Smrg # against the deplibs as a proxy for the library. Then we can check 927447e89262Smrg # whether they linked in statically or dynamically with ldd. 927547e89262Smrg $opt_dry_run || $RM conftest.c 927647e89262Smrg cat > conftest.c <<EOF 927747e89262Smrg int main() { return 0; } 927847e89262SmrgEOF 927947e89262Smrg $opt_dry_run || $RM conftest 928047e89262Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 928147e89262Smrg ldd_output=`ldd conftest` 928247e89262Smrg for i in $deplibs; do 928347e89262Smrg case $i in 928447e89262Smrg -l*) 928547e89262Smrg func_stripname -l '' "$i" 928647e89262Smrg name=$func_stripname_result 9287e6d2e958Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 928847e89262Smrg case " $predeps $postdeps " in 928947e89262Smrg *" $i "*) 9290899129b3Smrg func_append newdeplibs " $i" 9291e6d2e958Smrg i= 929247e89262Smrg ;; 929347e89262Smrg esac 929447e89262Smrg fi 9295e6d2e958Smrg if test -n "$i"; then 929647e89262Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 929747e89262Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 929847e89262Smrg set dummy $deplib_matches; shift 929947e89262Smrg deplib_match=$1 9300e6d2e958Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9301899129b3Smrg func_append newdeplibs " $i" 930247e89262Smrg else 930347e89262Smrg droppeddeps=yes 930447e89262Smrg echo 930547e89262Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 930647e89262Smrg echo "*** I have the capability to make that library automatically link in when" 930747e89262Smrg echo "*** you link to this library. But I can only do this if you have a" 930847e89262Smrg echo "*** shared version of the library, which I believe you do not have" 930947e89262Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 931047e89262Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 931147e89262Smrg fi 931247e89262Smrg fi 931347e89262Smrg ;; 931447e89262Smrg *) 9315899129b3Smrg func_append newdeplibs " $i" 931647e89262Smrg ;; 931747e89262Smrg esac 931847e89262Smrg done 931947e89262Smrg else 932047e89262Smrg # Error occurred in the first compile. Let's try to salvage 932147e89262Smrg # the situation: Compile a separate program for each library. 932247e89262Smrg for i in $deplibs; do 932347e89262Smrg case $i in 932447e89262Smrg -l*) 932547e89262Smrg func_stripname -l '' "$i" 932647e89262Smrg name=$func_stripname_result 932747e89262Smrg $opt_dry_run || $RM conftest 932847e89262Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 932947e89262Smrg ldd_output=`ldd conftest` 9330e6d2e958Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 933147e89262Smrg case " $predeps $postdeps " in 933247e89262Smrg *" $i "*) 9333899129b3Smrg func_append newdeplibs " $i" 9334e6d2e958Smrg i= 933547e89262Smrg ;; 933647e89262Smrg esac 933747e89262Smrg fi 9338e6d2e958Smrg if test -n "$i"; then 933947e89262Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 934047e89262Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 934147e89262Smrg set dummy $deplib_matches; shift 934247e89262Smrg deplib_match=$1 9343e6d2e958Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9344899129b3Smrg func_append newdeplibs " $i" 934547e89262Smrg else 934647e89262Smrg droppeddeps=yes 934747e89262Smrg echo 934847e89262Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 934947e89262Smrg echo "*** I have the capability to make that library automatically link in when" 935047e89262Smrg echo "*** you link to this library. But I can only do this if you have a" 935147e89262Smrg echo "*** shared version of the library, which you do not appear to have" 935247e89262Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 935347e89262Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 935447e89262Smrg fi 935547e89262Smrg fi 935647e89262Smrg else 935747e89262Smrg droppeddeps=yes 935847e89262Smrg echo 935947e89262Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 936047e89262Smrg echo "*** make it link in! You will probably need to install it or some" 936147e89262Smrg echo "*** library that it depends on before this library will be fully" 936247e89262Smrg echo "*** functional. Installing it before continuing would be even better." 936347e89262Smrg fi 936447e89262Smrg ;; 936547e89262Smrg *) 9366899129b3Smrg func_append newdeplibs " $i" 936747e89262Smrg ;; 936847e89262Smrg esac 936947e89262Smrg done 937047e89262Smrg fi 937147e89262Smrg ;; 937247e89262Smrg file_magic*) 937347e89262Smrg set dummy $deplibs_check_method; shift 937447e89262Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 937547e89262Smrg for a_deplib in $deplibs; do 937647e89262Smrg case $a_deplib in 937747e89262Smrg -l*) 937847e89262Smrg func_stripname -l '' "$a_deplib" 937947e89262Smrg name=$func_stripname_result 9380e6d2e958Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 938147e89262Smrg case " $predeps $postdeps " in 938247e89262Smrg *" $a_deplib "*) 9383899129b3Smrg func_append newdeplibs " $a_deplib" 9384e6d2e958Smrg a_deplib= 938547e89262Smrg ;; 938647e89262Smrg esac 938747e89262Smrg fi 9388e6d2e958Smrg if test -n "$a_deplib"; then 938947e89262Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 9390899129b3Smrg if test -n "$file_magic_glob"; then 9391899129b3Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9392899129b3Smrg else 9393899129b3Smrg libnameglob=$libname 9394899129b3Smrg fi 9395e6d2e958Smrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 939647e89262Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9397e6d2e958Smrg if test yes = "$want_nocaseglob"; then 9398899129b3Smrg shopt -s nocaseglob 9399899129b3Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9400899129b3Smrg $nocaseglob 9401899129b3Smrg else 9402899129b3Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9403899129b3Smrg fi 940447e89262Smrg for potent_lib in $potential_libs; do 940547e89262Smrg # Follow soft links. 940647e89262Smrg if ls -lLd "$potent_lib" 2>/dev/null | 940747e89262Smrg $GREP " -> " >/dev/null; then 940847e89262Smrg continue 940947e89262Smrg fi 941047e89262Smrg # The statement above tries to avoid entering an 941147e89262Smrg # endless loop below, in case of cyclic links. 941247e89262Smrg # We might still enter an endless loop, since a link 941347e89262Smrg # loop can be closed while we follow links, 941447e89262Smrg # but so what? 9415e6d2e958Smrg potlib=$potent_lib 941647e89262Smrg while test -h "$potlib" 2>/dev/null; do 9417e6d2e958Smrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 941847e89262Smrg case $potliblink in 9419e6d2e958Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9420e6d2e958Smrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 942147e89262Smrg esac 942247e89262Smrg done 942347e89262Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 942447e89262Smrg $SED -e 10q | 942547e89262Smrg $EGREP "$file_magic_regex" > /dev/null; then 9426899129b3Smrg func_append newdeplibs " $a_deplib" 9427e6d2e958Smrg a_deplib= 942847e89262Smrg break 2 942947e89262Smrg fi 943047e89262Smrg done 943147e89262Smrg done 943247e89262Smrg fi 9433e6d2e958Smrg if test -n "$a_deplib"; then 943447e89262Smrg droppeddeps=yes 943547e89262Smrg echo 943647e89262Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 943747e89262Smrg echo "*** I have the capability to make that library automatically link in when" 943847e89262Smrg echo "*** you link to this library. But I can only do this if you have a" 943947e89262Smrg echo "*** shared version of the library, which you do not appear to have" 944047e89262Smrg echo "*** because I did check the linker path looking for a file starting" 9441e6d2e958Smrg if test -z "$potlib"; then 944247e89262Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 944347e89262Smrg else 944447e89262Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 944547e89262Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 944647e89262Smrg fi 944747e89262Smrg fi 944847e89262Smrg ;; 944947e89262Smrg *) 945047e89262Smrg # Add a -L argument. 9451899129b3Smrg func_append newdeplibs " $a_deplib" 945247e89262Smrg ;; 945347e89262Smrg esac 945447e89262Smrg done # Gone through all deplibs. 945547e89262Smrg ;; 945647e89262Smrg match_pattern*) 945747e89262Smrg set dummy $deplibs_check_method; shift 945847e89262Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 945947e89262Smrg for a_deplib in $deplibs; do 946047e89262Smrg case $a_deplib in 946147e89262Smrg -l*) 946247e89262Smrg func_stripname -l '' "$a_deplib" 946347e89262Smrg name=$func_stripname_result 9464e6d2e958Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 946547e89262Smrg case " $predeps $postdeps " in 946647e89262Smrg *" $a_deplib "*) 9467899129b3Smrg func_append newdeplibs " $a_deplib" 9468e6d2e958Smrg a_deplib= 946947e89262Smrg ;; 947047e89262Smrg esac 947147e89262Smrg fi 9472e6d2e958Smrg if test -n "$a_deplib"; then 947347e89262Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 947447e89262Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 947547e89262Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 947647e89262Smrg for potent_lib in $potential_libs; do 9477e6d2e958Smrg potlib=$potent_lib # see symlink-check above in file_magic test 947847e89262Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 947947e89262Smrg $EGREP "$match_pattern_regex" > /dev/null; then 9480899129b3Smrg func_append newdeplibs " $a_deplib" 9481e6d2e958Smrg a_deplib= 948247e89262Smrg break 2 948347e89262Smrg fi 948447e89262Smrg done 948547e89262Smrg done 948647e89262Smrg fi 9487e6d2e958Smrg if test -n "$a_deplib"; then 948847e89262Smrg droppeddeps=yes 948947e89262Smrg echo 949047e89262Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 949147e89262Smrg echo "*** I have the capability to make that library automatically link in when" 949247e89262Smrg echo "*** you link to this library. But I can only do this if you have a" 949347e89262Smrg echo "*** shared version of the library, which you do not appear to have" 949447e89262Smrg echo "*** because I did check the linker path looking for a file starting" 9495e6d2e958Smrg if test -z "$potlib"; then 949647e89262Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 949747e89262Smrg else 949847e89262Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 949947e89262Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 950047e89262Smrg fi 950147e89262Smrg fi 950247e89262Smrg ;; 950347e89262Smrg *) 950447e89262Smrg # Add a -L argument. 9505899129b3Smrg func_append newdeplibs " $a_deplib" 950647e89262Smrg ;; 950747e89262Smrg esac 950847e89262Smrg done # Gone through all deplibs. 950947e89262Smrg ;; 951047e89262Smrg none | unknown | *) 9511e6d2e958Smrg newdeplibs= 951247e89262Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9513e6d2e958Smrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9514e6d2e958Smrg for i in $predeps $postdeps; do 951547e89262Smrg # can't use Xsed below, because $i might contain '/' 9516e6d2e958Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 951747e89262Smrg done 951847e89262Smrg fi 951947e89262Smrg case $tmp_deplibs in 952047e89262Smrg *[!\ \ ]*) 952147e89262Smrg echo 9522e6d2e958Smrg if test none = "$deplibs_check_method"; then 952347e89262Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 952447e89262Smrg else 952547e89262Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 952647e89262Smrg fi 952747e89262Smrg echo "*** All declared inter-library dependencies are being dropped." 952847e89262Smrg droppeddeps=yes 952947e89262Smrg ;; 953047e89262Smrg esac 953147e89262Smrg ;; 953247e89262Smrg esac 953347e89262Smrg versuffix=$versuffix_save 953447e89262Smrg major=$major_save 953547e89262Smrg release=$release_save 953647e89262Smrg libname=$libname_save 953747e89262Smrg name=$name_save 953847e89262Smrg 953947e89262Smrg case $host in 954047e89262Smrg *-*-rhapsody* | *-*-darwin1.[012]) 954147e89262Smrg # On Rhapsody replace the C library with the System framework 954247e89262Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 954347e89262Smrg ;; 954447e89262Smrg esac 954547e89262Smrg 9546e6d2e958Smrg if test yes = "$droppeddeps"; then 9547e6d2e958Smrg if test yes = "$module"; then 954847e89262Smrg echo 954947e89262Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 955047e89262Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 955147e89262Smrg echo "*** a static module, that should work as long as the dlopening" 955247e89262Smrg echo "*** application is linked with the -dlopen flag." 955347e89262Smrg if test -z "$global_symbol_pipe"; then 955447e89262Smrg echo 955547e89262Smrg echo "*** However, this would only work if libtool was able to extract symbol" 9556e6d2e958Smrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 955747e89262Smrg echo "*** not find such a program. So, this module is probably useless." 9558e6d2e958Smrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 955947e89262Smrg fi 9560e6d2e958Smrg if test no = "$build_old_libs"; then 9561e6d2e958Smrg oldlibs=$output_objdir/$libname.$libext 956247e89262Smrg build_libtool_libs=module 956347e89262Smrg build_old_libs=yes 956447e89262Smrg else 956547e89262Smrg build_libtool_libs=no 956647e89262Smrg fi 956747e89262Smrg else 956847e89262Smrg echo "*** The inter-library dependencies that have been dropped here will be" 956947e89262Smrg echo "*** automatically added whenever a program is linked with this library" 957047e89262Smrg echo "*** or is declared to -dlopen it." 957147e89262Smrg 9572e6d2e958Smrg if test no = "$allow_undefined"; then 957347e89262Smrg echo 957447e89262Smrg echo "*** Since this library must not contain undefined symbols," 957547e89262Smrg echo "*** because either the platform does not support them or" 957647e89262Smrg echo "*** it was explicitly requested with -no-undefined," 957747e89262Smrg echo "*** libtool will only create a static version of it." 9578e6d2e958Smrg if test no = "$build_old_libs"; then 9579e6d2e958Smrg oldlibs=$output_objdir/$libname.$libext 958047e89262Smrg build_libtool_libs=module 958147e89262Smrg build_old_libs=yes 958247e89262Smrg else 958347e89262Smrg build_libtool_libs=no 958447e89262Smrg fi 958547e89262Smrg fi 958647e89262Smrg fi 958747e89262Smrg fi 958847e89262Smrg # Done checking deplibs! 958947e89262Smrg deplibs=$newdeplibs 959047e89262Smrg fi 959147e89262Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 959247e89262Smrg case $host in 959347e89262Smrg *-*-darwin*) 959447e89262Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 959547e89262Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 959647e89262Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 959747e89262Smrg ;; 959847e89262Smrg esac 959947e89262Smrg 960047e89262Smrg # move library search paths that coincide with paths to not yet 960147e89262Smrg # installed libraries to the beginning of the library search list 960247e89262Smrg new_libs= 960347e89262Smrg for path in $notinst_path; do 960447e89262Smrg case " $new_libs " in 960547e89262Smrg *" -L$path/$objdir "*) ;; 960647e89262Smrg *) 960747e89262Smrg case " $deplibs " in 960847e89262Smrg *" -L$path/$objdir "*) 9609899129b3Smrg func_append new_libs " -L$path/$objdir" ;; 961047e89262Smrg esac 961147e89262Smrg ;; 961247e89262Smrg esac 961347e89262Smrg done 961447e89262Smrg for deplib in $deplibs; do 961547e89262Smrg case $deplib in 961647e89262Smrg -L*) 961747e89262Smrg case " $new_libs " in 961847e89262Smrg *" $deplib "*) ;; 9619899129b3Smrg *) func_append new_libs " $deplib" ;; 962047e89262Smrg esac 962147e89262Smrg ;; 9622899129b3Smrg *) func_append new_libs " $deplib" ;; 962347e89262Smrg esac 962447e89262Smrg done 9625e6d2e958Smrg deplibs=$new_libs 962647e89262Smrg 962747e89262Smrg # All the library-specific variables (install_libdir is set above). 962847e89262Smrg library_names= 962947e89262Smrg old_library= 963047e89262Smrg dlname= 963147e89262Smrg 963247e89262Smrg # Test again, we may have decided not to build it any more 9633e6d2e958Smrg if test yes = "$build_libtool_libs"; then 9634e6d2e958Smrg # Remove $wl instances when linking with ld. 9635899129b3Smrg # FIXME: should test the right _cmds variable. 9636899129b3Smrg case $archive_cmds in 9637899129b3Smrg *\$LD\ *) wl= ;; 9638899129b3Smrg esac 9639e6d2e958Smrg if test yes = "$hardcode_into_libs"; then 964047e89262Smrg # Hardcode the library paths 964147e89262Smrg hardcode_libdirs= 964247e89262Smrg dep_rpath= 9643e6d2e958Smrg rpath=$finalize_rpath 9644e6d2e958Smrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 964547e89262Smrg for libdir in $rpath; do 964647e89262Smrg if test -n "$hardcode_libdir_flag_spec"; then 964747e89262Smrg if test -n "$hardcode_libdir_separator"; then 9648899129b3Smrg func_replace_sysroot "$libdir" 9649899129b3Smrg libdir=$func_replace_sysroot_result 965047e89262Smrg if test -z "$hardcode_libdirs"; then 9651e6d2e958Smrg hardcode_libdirs=$libdir 965247e89262Smrg else 965347e89262Smrg # Just accumulate the unique libdirs. 965447e89262Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 965547e89262Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 965647e89262Smrg ;; 965747e89262Smrg *) 9658899129b3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 965947e89262Smrg ;; 966047e89262Smrg esac 966147e89262Smrg fi 966247e89262Smrg else 966347e89262Smrg eval flag=\"$hardcode_libdir_flag_spec\" 9664899129b3Smrg func_append dep_rpath " $flag" 966547e89262Smrg fi 966647e89262Smrg elif test -n "$runpath_var"; then 966747e89262Smrg case "$perm_rpath " in 966847e89262Smrg *" $libdir "*) ;; 9669899129b3Smrg *) func_append perm_rpath " $libdir" ;; 967047e89262Smrg esac 967147e89262Smrg fi 967247e89262Smrg done 967347e89262Smrg # Substitute the hardcoded libdirs into the rpath. 967447e89262Smrg if test -n "$hardcode_libdir_separator" && 967547e89262Smrg test -n "$hardcode_libdirs"; then 9676e6d2e958Smrg libdir=$hardcode_libdirs 9677899129b3Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 967847e89262Smrg fi 967947e89262Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 968047e89262Smrg # We should set the runpath_var. 968147e89262Smrg rpath= 968247e89262Smrg for dir in $perm_rpath; do 9683899129b3Smrg func_append rpath "$dir:" 968447e89262Smrg done 968547e89262Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 968647e89262Smrg fi 968747e89262Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 968847e89262Smrg fi 9689bd1da9d7Smrg 9690e6d2e958Smrg shlibpath=$finalize_shlibpath 9691e6d2e958Smrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 969247e89262Smrg if test -n "$shlibpath"; then 969347e89262Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 969447e89262Smrg fi 9695bd1da9d7Smrg 969647e89262Smrg # Get the real and link names of the library. 969747e89262Smrg eval shared_ext=\"$shrext_cmds\" 969847e89262Smrg eval library_names=\"$library_names_spec\" 969947e89262Smrg set dummy $library_names 970047e89262Smrg shift 9701e6d2e958Smrg realname=$1 970247e89262Smrg shift 9703bd1da9d7Smrg 970447e89262Smrg if test -n "$soname_spec"; then 970547e89262Smrg eval soname=\"$soname_spec\" 970647e89262Smrg else 9707e6d2e958Smrg soname=$realname 970847e89262Smrg fi 970947e89262Smrg if test -z "$dlname"; then 971047e89262Smrg dlname=$soname 971147e89262Smrg fi 9712bd1da9d7Smrg 9713e6d2e958Smrg lib=$output_objdir/$realname 971447e89262Smrg linknames= 971547e89262Smrg for link 971647e89262Smrg do 9717899129b3Smrg func_append linknames " $link" 971847e89262Smrg done 9719bd1da9d7Smrg 972047e89262Smrg # Use standard objects if they are pic 972147e89262Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 972247e89262Smrg test "X$libobjs" = "X " && libobjs= 9723bd1da9d7Smrg 972447e89262Smrg delfiles= 972547e89262Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 972647e89262Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9727e6d2e958Smrg export_symbols=$output_objdir/$libname.uexp 9728899129b3Smrg func_append delfiles " $export_symbols" 972947e89262Smrg fi 9730bd1da9d7Smrg 973147e89262Smrg orig_export_symbols= 973247e89262Smrg case $host_os in 973347e89262Smrg cygwin* | mingw* | cegcc*) 973447e89262Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 973547e89262Smrg # exporting using user supplied symfile 9736e6d2e958Smrg func_dll_def_p "$export_symbols" || { 973747e89262Smrg # and it's NOT already a .def file. Must figure out 973847e89262Smrg # which of the given symbols are data symbols and tag 973947e89262Smrg # them as such. So, trigger use of export_symbols_cmds. 974047e89262Smrg # export_symbols gets reassigned inside the "prepare 974147e89262Smrg # the list of exported symbols" if statement, so the 974247e89262Smrg # include_expsyms logic still works. 9743e6d2e958Smrg orig_export_symbols=$export_symbols 974447e89262Smrg export_symbols= 974547e89262Smrg always_export_symbols=yes 9746e6d2e958Smrg } 974747e89262Smrg fi 974847e89262Smrg ;; 974947e89262Smrg esac 9750bd1da9d7Smrg 975147e89262Smrg # Prepare the list of exported symbols 975247e89262Smrg if test -z "$export_symbols"; then 9753e6d2e958Smrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9754e6d2e958Smrg func_verbose "generating symbol list for '$libname.la'" 9755e6d2e958Smrg export_symbols=$output_objdir/$libname.exp 975647e89262Smrg $opt_dry_run || $RM $export_symbols 975747e89262Smrg cmds=$export_symbols_cmds 9758e6d2e958Smrg save_ifs=$IFS; IFS='~' 9759899129b3Smrg for cmd1 in $cmds; do 9760e6d2e958Smrg IFS=$save_ifs 9761899129b3Smrg # Take the normal branch if the nm_file_list_spec branch 9762899129b3Smrg # doesn't work or if tool conversion is not needed. 9763899129b3Smrg case $nm_file_list_spec~$to_tool_file_cmd in 9764899129b3Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9765899129b3Smrg try_normal_branch=yes 9766899129b3Smrg eval cmd=\"$cmd1\" 9767899129b3Smrg func_len " $cmd" 9768899129b3Smrg len=$func_len_result 9769899129b3Smrg ;; 9770899129b3Smrg *) 9771899129b3Smrg try_normal_branch=no 9772899129b3Smrg ;; 9773899129b3Smrg esac 9774e6d2e958Smrg if test yes = "$try_normal_branch" \ 9775899129b3Smrg && { test "$len" -lt "$max_cmd_len" \ 9776899129b3Smrg || test "$max_cmd_len" -le -1; } 9777899129b3Smrg then 9778899129b3Smrg func_show_eval "$cmd" 'exit $?' 9779899129b3Smrg skipped_export=false 9780899129b3Smrg elif test -n "$nm_file_list_spec"; then 9781899129b3Smrg func_basename "$output" 9782899129b3Smrg output_la=$func_basename_result 9783899129b3Smrg save_libobjs=$libobjs 9784899129b3Smrg save_output=$output 9785e6d2e958Smrg output=$output_objdir/$output_la.nm 9786899129b3Smrg func_to_tool_file "$output" 9787899129b3Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 9788899129b3Smrg func_append delfiles " $output" 9789899129b3Smrg func_verbose "creating $NM input file list: $output" 9790899129b3Smrg for obj in $save_libobjs; do 9791899129b3Smrg func_to_tool_file "$obj" 9792899129b3Smrg $ECHO "$func_to_tool_file_result" 9793899129b3Smrg done > "$output" 9794899129b3Smrg eval cmd=\"$cmd1\" 979547e89262Smrg func_show_eval "$cmd" 'exit $?' 9796899129b3Smrg output=$save_output 9797899129b3Smrg libobjs=$save_libobjs 979847e89262Smrg skipped_export=false 979947e89262Smrg else 980047e89262Smrg # The command line is too long to execute in one step. 980147e89262Smrg func_verbose "using reloadable object file for export list..." 980247e89262Smrg skipped_export=: 980347e89262Smrg # Break out early, otherwise skipped_export may be 980447e89262Smrg # set to false by a later but shorter cmd. 980547e89262Smrg break 980647e89262Smrg fi 980747e89262Smrg done 9808e6d2e958Smrg IFS=$save_ifs 9809e6d2e958Smrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 981047e89262Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 981147e89262Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 981247e89262Smrg fi 981347e89262Smrg fi 981447e89262Smrg fi 9815bd1da9d7Smrg 981647e89262Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9817e6d2e958Smrg tmp_export_symbols=$export_symbols 9818e6d2e958Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 981947e89262Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 982047e89262Smrg fi 9821bd1da9d7Smrg 9822e6d2e958Smrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 982347e89262Smrg # The given exports_symbols file has to be filtered, so filter it. 9824e6d2e958Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 982547e89262Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 9826e6d2e958Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 982747e89262Smrg # though. Also, the filter scales superlinearly with the number of 982847e89262Smrg # global variables. join(1) would be nice here, but unfortunately 982947e89262Smrg # isn't a blessed tool. 983047e89262Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9831899129b3Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 983247e89262Smrg export_symbols=$output_objdir/$libname.def 983347e89262Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9834bd1da9d7Smrg fi 9835bd1da9d7Smrg 983647e89262Smrg tmp_deplibs= 983747e89262Smrg for test_deplib in $deplibs; do 983847e89262Smrg case " $convenience " in 983947e89262Smrg *" $test_deplib "*) ;; 984047e89262Smrg *) 9841899129b3Smrg func_append tmp_deplibs " $test_deplib" 984247e89262Smrg ;; 984347e89262Smrg esac 984447e89262Smrg done 9845e6d2e958Smrg deplibs=$tmp_deplibs 9846bd1da9d7Smrg 984747e89262Smrg if test -n "$convenience"; then 984847e89262Smrg if test -n "$whole_archive_flag_spec" && 9849e6d2e958Smrg test yes = "$compiler_needs_object" && 985047e89262Smrg test -z "$libobjs"; then 985147e89262Smrg # extract the archives, so we have objects to list. 985247e89262Smrg # TODO: could optimize this to just extract one archive. 985347e89262Smrg whole_archive_flag_spec= 985447e89262Smrg fi 985547e89262Smrg if test -n "$whole_archive_flag_spec"; then 985647e89262Smrg save_libobjs=$libobjs 985747e89262Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 985847e89262Smrg test "X$libobjs" = "X " && libobjs= 985947e89262Smrg else 9860e6d2e958Smrg gentop=$output_objdir/${outputname}x 9861899129b3Smrg func_append generated " $gentop" 9862bd1da9d7Smrg 986347e89262Smrg func_extract_archives $gentop $convenience 9864899129b3Smrg func_append libobjs " $func_extract_archives_result" 986547e89262Smrg test "X$libobjs" = "X " && libobjs= 986647e89262Smrg fi 986747e89262Smrg fi 9868bd1da9d7Smrg 9869e6d2e958Smrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 987047e89262Smrg eval flag=\"$thread_safe_flag_spec\" 9871899129b3Smrg func_append linker_flags " $flag" 987247e89262Smrg fi 9873bd1da9d7Smrg 987447e89262Smrg # Make a backup of the uninstalled library when relinking 9875e6d2e958Smrg if test relink = "$opt_mode"; then 987647e89262Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9877bd1da9d7Smrg fi 9878bd1da9d7Smrg 987947e89262Smrg # Do each of the archive commands. 9880e6d2e958Smrg if test yes = "$module" && test -n "$module_cmds"; then 988147e89262Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 988247e89262Smrg eval test_cmds=\"$module_expsym_cmds\" 988347e89262Smrg cmds=$module_expsym_cmds 988447e89262Smrg else 988547e89262Smrg eval test_cmds=\"$module_cmds\" 988647e89262Smrg cmds=$module_cmds 988747e89262Smrg fi 988847e89262Smrg else 988947e89262Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 989047e89262Smrg eval test_cmds=\"$archive_expsym_cmds\" 989147e89262Smrg cmds=$archive_expsym_cmds 989247e89262Smrg else 989347e89262Smrg eval test_cmds=\"$archive_cmds\" 989447e89262Smrg cmds=$archive_cmds 989547e89262Smrg fi 9896bd1da9d7Smrg fi 9897bd1da9d7Smrg 9898e6d2e958Smrg if test : != "$skipped_export" && 989947e89262Smrg func_len " $test_cmds" && 990047e89262Smrg len=$func_len_result && 990147e89262Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 990247e89262Smrg : 990347e89262Smrg else 990447e89262Smrg # The command line is too long to link in one step, link piecewise 990547e89262Smrg # or, if using GNU ld and skipped_export is not :, use a linker 990647e89262Smrg # script. 9907bd1da9d7Smrg 990847e89262Smrg # Save the value of $output and $libobjs because we want to 990947e89262Smrg # use them later. If we have whole_archive_flag_spec, we 991047e89262Smrg # want to use save_libobjs as it was before 991147e89262Smrg # whole_archive_flag_spec was expanded, because we can't 991247e89262Smrg # assume the linker understands whole_archive_flag_spec. 991347e89262Smrg # This may have to be revisited, in case too many 991447e89262Smrg # convenience libraries get linked in and end up exceeding 991547e89262Smrg # the spec. 991647e89262Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 991747e89262Smrg save_libobjs=$libobjs 991847e89262Smrg fi 991947e89262Smrg save_output=$output 992047e89262Smrg func_basename "$output" 992147e89262Smrg output_la=$func_basename_result 9922bd1da9d7Smrg 992347e89262Smrg # Clear the reloadable object creation command queue and 992447e89262Smrg # initialize k to one. 992547e89262Smrg test_cmds= 992647e89262Smrg concat_cmds= 992747e89262Smrg objlist= 992847e89262Smrg last_robj= 992947e89262Smrg k=1 9930bd1da9d7Smrg 9931e6d2e958Smrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 9932e6d2e958Smrg output=$output_objdir/$output_la.lnkscript 993347e89262Smrg func_verbose "creating GNU ld script: $output" 993447e89262Smrg echo 'INPUT (' > $output 993547e89262Smrg for obj in $save_libobjs 993647e89262Smrg do 9937899129b3Smrg func_to_tool_file "$obj" 9938899129b3Smrg $ECHO "$func_to_tool_file_result" >> $output 993947e89262Smrg done 994047e89262Smrg echo ')' >> $output 9941899129b3Smrg func_append delfiles " $output" 9942899129b3Smrg func_to_tool_file "$output" 9943899129b3Smrg output=$func_to_tool_file_result 9944e6d2e958Smrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 9945e6d2e958Smrg output=$output_objdir/$output_la.lnk 994647e89262Smrg func_verbose "creating linker input file list: $output" 994747e89262Smrg : > $output 994847e89262Smrg set x $save_libobjs 994947e89262Smrg shift 995047e89262Smrg firstobj= 9951e6d2e958Smrg if test yes = "$compiler_needs_object"; then 995247e89262Smrg firstobj="$1 " 995347e89262Smrg shift 995447e89262Smrg fi 995547e89262Smrg for obj 995647e89262Smrg do 9957899129b3Smrg func_to_tool_file "$obj" 9958899129b3Smrg $ECHO "$func_to_tool_file_result" >> $output 995947e89262Smrg done 9960899129b3Smrg func_append delfiles " $output" 9961899129b3Smrg func_to_tool_file "$output" 9962899129b3Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 996347e89262Smrg else 996447e89262Smrg if test -n "$save_libobjs"; then 996547e89262Smrg func_verbose "creating reloadable object files..." 9966e6d2e958Smrg output=$output_objdir/$output_la-$k.$objext 996747e89262Smrg eval test_cmds=\"$reload_cmds\" 996847e89262Smrg func_len " $test_cmds" 996947e89262Smrg len0=$func_len_result 997047e89262Smrg len=$len0 997147e89262Smrg 997247e89262Smrg # Loop over the list of objects to be linked. 997347e89262Smrg for obj in $save_libobjs 997447e89262Smrg do 997547e89262Smrg func_len " $obj" 997647e89262Smrg func_arith $len + $func_len_result 997747e89262Smrg len=$func_arith_result 9978e6d2e958Smrg if test -z "$objlist" || 997947e89262Smrg test "$len" -lt "$max_cmd_len"; then 998047e89262Smrg func_append objlist " $obj" 998147e89262Smrg else 998247e89262Smrg # The command $test_cmds is almost too long, add a 998347e89262Smrg # command to the queue. 9984e6d2e958Smrg if test 1 -eq "$k"; then 998547e89262Smrg # The first file doesn't have a previous command to add. 998647e89262Smrg reload_objs=$objlist 998747e89262Smrg eval concat_cmds=\"$reload_cmds\" 998847e89262Smrg else 998947e89262Smrg # All subsequent reloadable object files will link in 999047e89262Smrg # the last one created. 999147e89262Smrg reload_objs="$objlist $last_robj" 999247e89262Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 999347e89262Smrg fi 9994e6d2e958Smrg last_robj=$output_objdir/$output_la-$k.$objext 999547e89262Smrg func_arith $k + 1 999647e89262Smrg k=$func_arith_result 9997e6d2e958Smrg output=$output_objdir/$output_la-$k.$objext 999847e89262Smrg objlist=" $obj" 999947e89262Smrg func_len " $last_robj" 1000047e89262Smrg func_arith $len0 + $func_len_result 1000147e89262Smrg len=$func_arith_result 1000247e89262Smrg fi 1000347e89262Smrg done 1000447e89262Smrg # Handle the remaining objects by creating one last 1000547e89262Smrg # reloadable object file. All subsequent reloadable object 1000647e89262Smrg # files will link in the last one created. 1000747e89262Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 1000847e89262Smrg reload_objs="$objlist $last_robj" 10009e6d2e958Smrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 1001047e89262Smrg if test -n "$last_robj"; then 10011e6d2e958Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 1001247e89262Smrg fi 10013899129b3Smrg func_append delfiles " $output" 1001447e89262Smrg 1001547e89262Smrg else 1001647e89262Smrg output= 1001747e89262Smrg fi 10018bd1da9d7Smrg 10019e6d2e958Smrg ${skipped_export-false} && { 10020e6d2e958Smrg func_verbose "generating symbol list for '$libname.la'" 10021e6d2e958Smrg export_symbols=$output_objdir/$libname.exp 1002247e89262Smrg $opt_dry_run || $RM $export_symbols 1002347e89262Smrg libobjs=$output 1002447e89262Smrg # Append the command to create the export file. 1002547e89262Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 1002647e89262Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 1002747e89262Smrg if test -n "$last_robj"; then 1002847e89262Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 1002947e89262Smrg fi 10030e6d2e958Smrg } 10031bd1da9d7Smrg 1003247e89262Smrg test -n "$save_libobjs" && 1003347e89262Smrg func_verbose "creating a temporary reloadable object file: $output" 10034bd1da9d7Smrg 1003547e89262Smrg # Loop through the commands generated above and execute them. 10036e6d2e958Smrg save_ifs=$IFS; IFS='~' 1003747e89262Smrg for cmd in $concat_cmds; do 10038e6d2e958Smrg IFS=$save_ifs 10039e6d2e958Smrg $opt_quiet || { 1004047e89262Smrg func_quote_for_expand "$cmd" 1004147e89262Smrg eval "func_echo $func_quote_for_expand_result" 1004247e89262Smrg } 1004347e89262Smrg $opt_dry_run || eval "$cmd" || { 1004447e89262Smrg lt_exit=$? 1004547e89262Smrg 1004647e89262Smrg # Restore the uninstalled library and exit 10047e6d2e958Smrg if test relink = "$opt_mode"; then 1004847e89262Smrg ( cd "$output_objdir" && \ 1004947e89262Smrg $RM "${realname}T" && \ 1005047e89262Smrg $MV "${realname}U" "$realname" ) 1005147e89262Smrg fi 10052bd1da9d7Smrg 1005347e89262Smrg exit $lt_exit 1005447e89262Smrg } 1005547e89262Smrg done 10056e6d2e958Smrg IFS=$save_ifs 10057bd1da9d7Smrg 1005847e89262Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 1005947e89262Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 1006047e89262Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 10061bd1da9d7Smrg fi 10062bd1da9d7Smrg fi 10063bd1da9d7Smrg 10064e6d2e958Smrg ${skipped_export-false} && { 1006547e89262Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 10066e6d2e958Smrg tmp_export_symbols=$export_symbols 10067e6d2e958Smrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 1006847e89262Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 1006947e89262Smrg fi 10070bd1da9d7Smrg 1007147e89262Smrg if test -n "$orig_export_symbols"; then 1007247e89262Smrg # The given exports_symbols file has to be filtered, so filter it. 10073e6d2e958Smrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 1007447e89262Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 10075e6d2e958Smrg # 's' commands, which not all seds can handle. GNU sed should be fine 1007647e89262Smrg # though. Also, the filter scales superlinearly with the number of 1007747e89262Smrg # global variables. join(1) would be nice here, but unfortunately 1007847e89262Smrg # isn't a blessed tool. 1007947e89262Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 10080899129b3Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 1008147e89262Smrg export_symbols=$output_objdir/$libname.def 1008247e89262Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 1008347e89262Smrg fi 10084e6d2e958Smrg } 10085bd1da9d7Smrg 1008647e89262Smrg libobjs=$output 1008747e89262Smrg # Restore the value of output. 1008847e89262Smrg output=$save_output 10089bd1da9d7Smrg 1009047e89262Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 1009147e89262Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 1009247e89262Smrg test "X$libobjs" = "X " && libobjs= 1009347e89262Smrg fi 1009447e89262Smrg # Expand the library linking commands again to reset the 1009547e89262Smrg # value of $libobjs for piecewise linking. 1009647e89262Smrg 1009747e89262Smrg # Do each of the archive commands. 10098e6d2e958Smrg if test yes = "$module" && test -n "$module_cmds"; then 1009947e89262Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 1010047e89262Smrg cmds=$module_expsym_cmds 10101bd1da9d7Smrg else 1010247e89262Smrg cmds=$module_cmds 10103bd1da9d7Smrg fi 10104bd1da9d7Smrg else 1010547e89262Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 1010647e89262Smrg cmds=$archive_expsym_cmds 1010747e89262Smrg else 1010847e89262Smrg cmds=$archive_cmds 1010947e89262Smrg fi 10110bd1da9d7Smrg fi 10111bd1da9d7Smrg fi 10112bd1da9d7Smrg 1011347e89262Smrg if test -n "$delfiles"; then 1011447e89262Smrg # Append the command to remove temporary files to $cmds. 1011547e89262Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 1011647e89262Smrg fi 10117bd1da9d7Smrg 1011847e89262Smrg # Add any objects from preloaded convenience libraries 1011947e89262Smrg if test -n "$dlprefiles"; then 10120e6d2e958Smrg gentop=$output_objdir/${outputname}x 10121899129b3Smrg func_append generated " $gentop" 10122bd1da9d7Smrg 1012347e89262Smrg func_extract_archives $gentop $dlprefiles 10124899129b3Smrg func_append libobjs " $func_extract_archives_result" 1012547e89262Smrg test "X$libobjs" = "X " && libobjs= 10126bd1da9d7Smrg fi 10127bd1da9d7Smrg 10128e6d2e958Smrg save_ifs=$IFS; IFS='~' 1012947e89262Smrg for cmd in $cmds; do 10130e6d2e958Smrg IFS=$sp$nl 1013147e89262Smrg eval cmd=\"$cmd\" 10132e6d2e958Smrg IFS=$save_ifs 10133e6d2e958Smrg $opt_quiet || { 1013447e89262Smrg func_quote_for_expand "$cmd" 1013547e89262Smrg eval "func_echo $func_quote_for_expand_result" 1013647e89262Smrg } 1013747e89262Smrg $opt_dry_run || eval "$cmd" || { 1013847e89262Smrg lt_exit=$? 10139bd1da9d7Smrg 1014047e89262Smrg # Restore the uninstalled library and exit 10141e6d2e958Smrg if test relink = "$opt_mode"; then 1014247e89262Smrg ( cd "$output_objdir" && \ 1014347e89262Smrg $RM "${realname}T" && \ 1014447e89262Smrg $MV "${realname}U" "$realname" ) 10145bd1da9d7Smrg fi 10146bd1da9d7Smrg 1014747e89262Smrg exit $lt_exit 1014847e89262Smrg } 1014947e89262Smrg done 10150e6d2e958Smrg IFS=$save_ifs 10151bd1da9d7Smrg 1015247e89262Smrg # Restore the uninstalled library and exit 10153e6d2e958Smrg if test relink = "$opt_mode"; then 1015447e89262Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10155bd1da9d7Smrg 1015647e89262Smrg if test -n "$convenience"; then 1015747e89262Smrg if test -z "$whole_archive_flag_spec"; then 1015847e89262Smrg func_show_eval '${RM}r "$gentop"' 1015947e89262Smrg fi 1016047e89262Smrg fi 10161bd1da9d7Smrg 1016247e89262Smrg exit $EXIT_SUCCESS 1016347e89262Smrg fi 10164bd1da9d7Smrg 1016547e89262Smrg # Create links to the real library. 1016647e89262Smrg for linkname in $linknames; do 1016747e89262Smrg if test "$realname" != "$linkname"; then 1016847e89262Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 1016947e89262Smrg fi 1017047e89262Smrg done 10171bd1da9d7Smrg 1017247e89262Smrg # If -module or -export-dynamic was specified, set the dlname. 10173e6d2e958Smrg if test yes = "$module" || test yes = "$export_dynamic"; then 1017447e89262Smrg # On all known operating systems, these are identical. 10175e6d2e958Smrg dlname=$soname 1017647e89262Smrg fi 1017747e89262Smrg fi 1017847e89262Smrg ;; 10179bd1da9d7Smrg 1018047e89262Smrg obj) 10181e6d2e958Smrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10182e6d2e958Smrg func_warning "'-dlopen' is ignored for objects" 1018347e89262Smrg fi 10184bd1da9d7Smrg 1018547e89262Smrg case " $deplibs" in 1018647e89262Smrg *\ -l* | *\ -L*) 10187e6d2e958Smrg func_warning "'-l' and '-L' are ignored for objects" ;; 1018847e89262Smrg esac 10189bd1da9d7Smrg 1019047e89262Smrg test -n "$rpath" && \ 10191e6d2e958Smrg func_warning "'-rpath' is ignored for objects" 10192bd1da9d7Smrg 1019347e89262Smrg test -n "$xrpath" && \ 10194e6d2e958Smrg func_warning "'-R' is ignored for objects" 1019547e89262Smrg 1019647e89262Smrg test -n "$vinfo" && \ 10197e6d2e958Smrg func_warning "'-version-info' is ignored for objects" 10198bd1da9d7Smrg 1019947e89262Smrg test -n "$release" && \ 10200e6d2e958Smrg func_warning "'-release' is ignored for objects" 10201bd1da9d7Smrg 1020247e89262Smrg case $output in 1020347e89262Smrg *.lo) 1020447e89262Smrg test -n "$objs$old_deplibs" && \ 10205e6d2e958Smrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 1020647e89262Smrg 1020747e89262Smrg libobj=$output 1020847e89262Smrg func_lo2o "$libobj" 1020947e89262Smrg obj=$func_lo2o_result 1021047e89262Smrg ;; 1021147e89262Smrg *) 1021247e89262Smrg libobj= 10213e6d2e958Smrg obj=$output 10214bd1da9d7Smrg ;; 10215bd1da9d7Smrg esac 10216bd1da9d7Smrg 1021747e89262Smrg # Delete the old objects. 1021847e89262Smrg $opt_dry_run || $RM $obj $libobj 10219bd1da9d7Smrg 1022047e89262Smrg # Objects from convenience libraries. This assumes 1022147e89262Smrg # single-version convenience libraries. Whenever we create 1022247e89262Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 1022347e89262Smrg # the extraction. 1022447e89262Smrg reload_conv_objs= 1022547e89262Smrg gentop= 10226e6d2e958Smrg # if reload_cmds runs $LD directly, get rid of -Wl from 10227e6d2e958Smrg # whole_archive_flag_spec and hope we can get by with turning comma 10228e6d2e958Smrg # into space. 10229e6d2e958Smrg case $reload_cmds in 10230e6d2e958Smrg *\$LD[\ \$]*) wl= ;; 10231e6d2e958Smrg esac 1023247e89262Smrg if test -n "$convenience"; then 1023347e89262Smrg if test -n "$whole_archive_flag_spec"; then 1023447e89262Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10235e6d2e958Smrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10236e6d2e958Smrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10237bd1da9d7Smrg else 10238e6d2e958Smrg gentop=$output_objdir/${obj}x 10239899129b3Smrg func_append generated " $gentop" 1024047e89262Smrg 1024147e89262Smrg func_extract_archives $gentop $convenience 1024247e89262Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10243bd1da9d7Smrg fi 1024447e89262Smrg fi 10245bd1da9d7Smrg 10246899129b3Smrg # If we're not building shared, we need to use non_pic_objs 10247e6d2e958Smrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10248899129b3Smrg 1024947e89262Smrg # Create the old-style object. 10250e6d2e958Smrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10251bd1da9d7Smrg 10252e6d2e958Smrg output=$obj 1025347e89262Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10254bd1da9d7Smrg 1025547e89262Smrg # Exit if we aren't doing a library object file. 1025647e89262Smrg if test -z "$libobj"; then 1025747e89262Smrg if test -n "$gentop"; then 1025847e89262Smrg func_show_eval '${RM}r "$gentop"' 1025947e89262Smrg fi 10260bd1da9d7Smrg 1026147e89262Smrg exit $EXIT_SUCCESS 10262bd1da9d7Smrg fi 10263bd1da9d7Smrg 10264e6d2e958Smrg test yes = "$build_libtool_libs" || { 1026547e89262Smrg if test -n "$gentop"; then 1026647e89262Smrg func_show_eval '${RM}r "$gentop"' 1026747e89262Smrg fi 10268bd1da9d7Smrg 1026947e89262Smrg # Create an invalid libtool object if no PIC, so that we don't 1027047e89262Smrg # accidentally link it into a program. 1027147e89262Smrg # $show "echo timestamp > $libobj" 1027247e89262Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 1027347e89262Smrg exit $EXIT_SUCCESS 10274e6d2e958Smrg } 10275bd1da9d7Smrg 10276e6d2e958Smrg if test -n "$pic_flag" || test default != "$pic_mode"; then 1027747e89262Smrg # Only do commands if we really have different PIC objects. 1027847e89262Smrg reload_objs="$libobjs $reload_conv_objs" 10279e6d2e958Smrg output=$libobj 1028047e89262Smrg func_execute_cmds "$reload_cmds" 'exit $?' 10281bd1da9d7Smrg fi 1028247e89262Smrg 1028347e89262Smrg if test -n "$gentop"; then 1028447e89262Smrg func_show_eval '${RM}r "$gentop"' 1028547e89262Smrg fi 1028647e89262Smrg 1028747e89262Smrg exit $EXIT_SUCCESS 10288bd1da9d7Smrg ;; 10289bd1da9d7Smrg 1029047e89262Smrg prog) 1029147e89262Smrg case $host in 1029247e89262Smrg *cygwin*) func_stripname '' '.exe' "$output" 1029347e89262Smrg output=$func_stripname_result.exe;; 1029447e89262Smrg esac 1029547e89262Smrg test -n "$vinfo" && \ 10296e6d2e958Smrg func_warning "'-version-info' is ignored for programs" 10297bd1da9d7Smrg 1029847e89262Smrg test -n "$release" && \ 10299e6d2e958Smrg func_warning "'-release' is ignored for programs" 10300bd1da9d7Smrg 10301e6d2e958Smrg $preload \ 10302e6d2e958Smrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10303e6d2e958Smrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 1030447e89262Smrg 1030547e89262Smrg case $host in 1030647e89262Smrg *-*-rhapsody* | *-*-darwin1.[012]) 1030747e89262Smrg # On Rhapsody replace the C library is the System framework 1030847e89262Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 1030947e89262Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10310bd1da9d7Smrg ;; 1031147e89262Smrg esac 10312bd1da9d7Smrg 1031347e89262Smrg case $host in 1031447e89262Smrg *-*-darwin*) 1031547e89262Smrg # Don't allow lazy linking, it breaks C++ global constructors 1031647e89262Smrg # But is supposedly fixed on 10.4 or later (yay!). 10317e6d2e958Smrg if test CXX = "$tagname"; then 1031847e89262Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 1031947e89262Smrg 10.[0123]) 10320e6d2e958Smrg func_append compile_command " $wl-bind_at_load" 10321e6d2e958Smrg func_append finalize_command " $wl-bind_at_load" 1032247e89262Smrg ;; 1032347e89262Smrg esac 10324bd1da9d7Smrg fi 1032547e89262Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 1032647e89262Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 1032747e89262Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 1032847e89262Smrg ;; 1032947e89262Smrg esac 10330bd1da9d7Smrg 10331bd1da9d7Smrg 1033247e89262Smrg # move library search paths that coincide with paths to not yet 1033347e89262Smrg # installed libraries to the beginning of the library search list 1033447e89262Smrg new_libs= 1033547e89262Smrg for path in $notinst_path; do 1033647e89262Smrg case " $new_libs " in 1033747e89262Smrg *" -L$path/$objdir "*) ;; 1033847e89262Smrg *) 1033947e89262Smrg case " $compile_deplibs " in 1034047e89262Smrg *" -L$path/$objdir "*) 10341899129b3Smrg func_append new_libs " -L$path/$objdir" ;; 10342bd1da9d7Smrg esac 1034347e89262Smrg ;; 1034447e89262Smrg esac 1034547e89262Smrg done 1034647e89262Smrg for deplib in $compile_deplibs; do 1034747e89262Smrg case $deplib in 1034847e89262Smrg -L*) 1034947e89262Smrg case " $new_libs " in 1035047e89262Smrg *" $deplib "*) ;; 10351899129b3Smrg *) func_append new_libs " $deplib" ;; 10352bd1da9d7Smrg esac 1035347e89262Smrg ;; 10354899129b3Smrg *) func_append new_libs " $deplib" ;; 1035547e89262Smrg esac 1035647e89262Smrg done 10357e6d2e958Smrg compile_deplibs=$new_libs 10358bd1da9d7Smrg 10359bd1da9d7Smrg 10360899129b3Smrg func_append compile_command " $compile_deplibs" 10361899129b3Smrg func_append finalize_command " $finalize_deplibs" 10362bd1da9d7Smrg 1036347e89262Smrg if test -n "$rpath$xrpath"; then 1036447e89262Smrg # If the user specified any rpath flags, then add them. 1036547e89262Smrg for libdir in $rpath $xrpath; do 1036647e89262Smrg # This is the magic to use -rpath. 1036747e89262Smrg case "$finalize_rpath " in 1036847e89262Smrg *" $libdir "*) ;; 10369899129b3Smrg *) func_append finalize_rpath " $libdir" ;; 1037047e89262Smrg esac 1037147e89262Smrg done 1037247e89262Smrg fi 10373bd1da9d7Smrg 1037447e89262Smrg # Now hardcode the library paths 1037547e89262Smrg rpath= 1037647e89262Smrg hardcode_libdirs= 1037747e89262Smrg for libdir in $compile_rpath $finalize_rpath; do 1037847e89262Smrg if test -n "$hardcode_libdir_flag_spec"; then 1037947e89262Smrg if test -n "$hardcode_libdir_separator"; then 1038047e89262Smrg if test -z "$hardcode_libdirs"; then 10381e6d2e958Smrg hardcode_libdirs=$libdir 1038247e89262Smrg else 1038347e89262Smrg # Just accumulate the unique libdirs. 1038447e89262Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 1038547e89262Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 1038647e89262Smrg ;; 1038747e89262Smrg *) 10388899129b3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 1038947e89262Smrg ;; 1039047e89262Smrg esac 1039147e89262Smrg fi 10392bd1da9d7Smrg else 1039347e89262Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10394899129b3Smrg func_append rpath " $flag" 10395bd1da9d7Smrg fi 1039647e89262Smrg elif test -n "$runpath_var"; then 1039747e89262Smrg case "$perm_rpath " in 1039847e89262Smrg *" $libdir "*) ;; 10399899129b3Smrg *) func_append perm_rpath " $libdir" ;; 1040047e89262Smrg esac 1040147e89262Smrg fi 1040247e89262Smrg case $host in 1040347e89262Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10404e6d2e958Smrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 1040547e89262Smrg case :$dllsearchpath: in 1040647e89262Smrg *":$libdir:"*) ;; 1040747e89262Smrg ::) dllsearchpath=$libdir;; 10408899129b3Smrg *) func_append dllsearchpath ":$libdir";; 1040947e89262Smrg esac 1041047e89262Smrg case :$dllsearchpath: in 1041147e89262Smrg *":$testbindir:"*) ;; 1041247e89262Smrg ::) dllsearchpath=$testbindir;; 10413899129b3Smrg *) func_append dllsearchpath ":$testbindir";; 1041447e89262Smrg esac 1041547e89262Smrg ;; 1041647e89262Smrg esac 1041747e89262Smrg done 1041847e89262Smrg # Substitute the hardcoded libdirs into the rpath. 1041947e89262Smrg if test -n "$hardcode_libdir_separator" && 1042047e89262Smrg test -n "$hardcode_libdirs"; then 10421e6d2e958Smrg libdir=$hardcode_libdirs 1042247e89262Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 1042347e89262Smrg fi 10424e6d2e958Smrg compile_rpath=$rpath 10425bd1da9d7Smrg 1042647e89262Smrg rpath= 1042747e89262Smrg hardcode_libdirs= 1042847e89262Smrg for libdir in $finalize_rpath; do 1042947e89262Smrg if test -n "$hardcode_libdir_flag_spec"; then 1043047e89262Smrg if test -n "$hardcode_libdir_separator"; then 1043147e89262Smrg if test -z "$hardcode_libdirs"; then 10432e6d2e958Smrg hardcode_libdirs=$libdir 1043347e89262Smrg else 1043447e89262Smrg # Just accumulate the unique libdirs. 1043547e89262Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 1043647e89262Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 1043747e89262Smrg ;; 1043847e89262Smrg *) 10439899129b3Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 1044047e89262Smrg ;; 1044147e89262Smrg esac 1044247e89262Smrg fi 10443bd1da9d7Smrg else 1044447e89262Smrg eval flag=\"$hardcode_libdir_flag_spec\" 10445899129b3Smrg func_append rpath " $flag" 10446bd1da9d7Smrg fi 1044747e89262Smrg elif test -n "$runpath_var"; then 1044847e89262Smrg case "$finalize_perm_rpath " in 1044947e89262Smrg *" $libdir "*) ;; 10450899129b3Smrg *) func_append finalize_perm_rpath " $libdir" ;; 1045147e89262Smrg esac 10452bd1da9d7Smrg fi 1045347e89262Smrg done 1045447e89262Smrg # Substitute the hardcoded libdirs into the rpath. 1045547e89262Smrg if test -n "$hardcode_libdir_separator" && 1045647e89262Smrg test -n "$hardcode_libdirs"; then 10457e6d2e958Smrg libdir=$hardcode_libdirs 1045847e89262Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 1045947e89262Smrg fi 10460e6d2e958Smrg finalize_rpath=$rpath 10461bd1da9d7Smrg 10462e6d2e958Smrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 1046347e89262Smrg # Transform all the library objects into standard objects. 1046447e89262Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 1046547e89262Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 1046647e89262Smrg fi 10467bd1da9d7Smrg 10468e6d2e958Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 10469bd1da9d7Smrg 1047047e89262Smrg # template prelinking step 1047147e89262Smrg if test -n "$prelink_cmds"; then 1047247e89262Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 1047347e89262Smrg fi 10474bd1da9d7Smrg 10475e6d2e958Smrg wrappers_required=: 1047647e89262Smrg case $host in 1047747e89262Smrg *cegcc* | *mingw32ce*) 1047847e89262Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10479e6d2e958Smrg wrappers_required=false 1048047e89262Smrg ;; 1048147e89262Smrg *cygwin* | *mingw* ) 10482e6d2e958Smrg test yes = "$build_libtool_libs" || wrappers_required=false 1048347e89262Smrg ;; 1048447e89262Smrg *) 10485e6d2e958Smrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10486e6d2e958Smrg wrappers_required=false 1048747e89262Smrg fi 1048847e89262Smrg ;; 1048947e89262Smrg esac 10490e6d2e958Smrg $wrappers_required || { 1049147e89262Smrg # Replace the output file specification. 1049247e89262Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10493e6d2e958Smrg link_command=$compile_command$compile_rpath 10494bd1da9d7Smrg 1049547e89262Smrg # We have no uninstalled library dependencies, so finalize right now. 1049647e89262Smrg exit_status=0 1049747e89262Smrg func_show_eval "$link_command" 'exit_status=$?' 10498bd1da9d7Smrg 10499899129b3Smrg if test -n "$postlink_cmds"; then 10500899129b3Smrg func_to_tool_file "$output" 10501899129b3Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10502899129b3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10503899129b3Smrg fi 10504899129b3Smrg 1050547e89262Smrg # Delete the generated files. 10506e6d2e958Smrg if test -f "$output_objdir/${outputname}S.$objext"; then 10507e6d2e958Smrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10508bd1da9d7Smrg fi 10509bd1da9d7Smrg 1051047e89262Smrg exit $exit_status 10511e6d2e958Smrg } 10512bd1da9d7Smrg 1051347e89262Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 1051447e89262Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 1051547e89262Smrg fi 1051647e89262Smrg if test -n "$finalize_shlibpath"; then 1051747e89262Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 1051847e89262Smrg fi 10519bd1da9d7Smrg 1052047e89262Smrg compile_var= 1052147e89262Smrg finalize_var= 1052247e89262Smrg if test -n "$runpath_var"; then 1052347e89262Smrg if test -n "$perm_rpath"; then 1052447e89262Smrg # We should set the runpath_var. 1052547e89262Smrg rpath= 1052647e89262Smrg for dir in $perm_rpath; do 10527899129b3Smrg func_append rpath "$dir:" 1052847e89262Smrg done 1052947e89262Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10530bd1da9d7Smrg fi 1053147e89262Smrg if test -n "$finalize_perm_rpath"; then 1053247e89262Smrg # We should set the runpath_var. 1053347e89262Smrg rpath= 1053447e89262Smrg for dir in $finalize_perm_rpath; do 10535899129b3Smrg func_append rpath "$dir:" 1053647e89262Smrg done 1053747e89262Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10538bd1da9d7Smrg fi 1053947e89262Smrg fi 10540bd1da9d7Smrg 10541e6d2e958Smrg if test yes = "$no_install"; then 1054247e89262Smrg # We don't need to create a wrapper script. 10543e6d2e958Smrg link_command=$compile_var$compile_command$compile_rpath 1054447e89262Smrg # Replace the output file specification. 1054547e89262Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 1054647e89262Smrg # Delete the old output file. 1054747e89262Smrg $opt_dry_run || $RM $output 1054847e89262Smrg # Link the executable and exit 1054947e89262Smrg func_show_eval "$link_command" 'exit $?' 10550899129b3Smrg 10551899129b3Smrg if test -n "$postlink_cmds"; then 10552899129b3Smrg func_to_tool_file "$output" 10553899129b3Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10554899129b3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10555899129b3Smrg fi 10556899129b3Smrg 10557bd1da9d7Smrg exit $EXIT_SUCCESS 1055847e89262Smrg fi 10559bd1da9d7Smrg 10560e6d2e958Smrg case $hardcode_action,$fast_install in 10561e6d2e958Smrg relink,*) 10562e6d2e958Smrg # Fast installation is not supported 10563e6d2e958Smrg link_command=$compile_var$compile_command$compile_rpath 10564e6d2e958Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 1056547e89262Smrg 10566e6d2e958Smrg func_warning "this platform does not like uninstalled shared libraries" 10567e6d2e958Smrg func_warning "'$output' will be relinked during installation" 10568e6d2e958Smrg ;; 10569e6d2e958Smrg *,yes) 10570e6d2e958Smrg link_command=$finalize_var$compile_command$finalize_rpath 10571e6d2e958Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10572e6d2e958Smrg ;; 10573e6d2e958Smrg *,no) 10574e6d2e958Smrg link_command=$compile_var$compile_command$compile_rpath 10575e6d2e958Smrg relink_command=$finalize_var$finalize_command$finalize_rpath 10576e6d2e958Smrg ;; 10577e6d2e958Smrg *,needless) 10578e6d2e958Smrg link_command=$finalize_var$compile_command$finalize_rpath 10579e6d2e958Smrg relink_command= 10580e6d2e958Smrg ;; 10581e6d2e958Smrg esac 10582bd1da9d7Smrg 1058347e89262Smrg # Replace the output file specification. 1058447e89262Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10585bd1da9d7Smrg 1058647e89262Smrg # Delete the old output files. 1058747e89262Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10588bd1da9d7Smrg 1058947e89262Smrg func_show_eval "$link_command" 'exit $?' 10590bd1da9d7Smrg 10591899129b3Smrg if test -n "$postlink_cmds"; then 10592899129b3Smrg func_to_tool_file "$output_objdir/$outputname" 10593899129b3Smrg 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'` 10594899129b3Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 10595899129b3Smrg fi 10596899129b3Smrg 1059747e89262Smrg # Now create the wrapper script. 1059847e89262Smrg func_verbose "creating $output" 10599bd1da9d7Smrg 1060047e89262Smrg # Quote the relink command for shipping. 1060147e89262Smrg if test -n "$relink_command"; then 1060247e89262Smrg # Preserve any variables that may affect compiler behavior 1060347e89262Smrg for var in $variables_saved_for_relink; do 1060447e89262Smrg if eval test -z \"\${$var+set}\"; then 1060547e89262Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 1060647e89262Smrg elif eval var_value=\$$var; test -z "$var_value"; then 1060747e89262Smrg relink_command="$var=; export $var; $relink_command" 10608bd1da9d7Smrg else 1060947e89262Smrg func_quote_for_eval "$var_value" 1061047e89262Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10611bd1da9d7Smrg fi 1061247e89262Smrg done 1061347e89262Smrg relink_command="(cd `pwd`; $relink_command)" 1061447e89262Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 1061547e89262Smrg fi 10616bd1da9d7Smrg 1061747e89262Smrg # Only actually do things if not in dry run mode. 1061847e89262Smrg $opt_dry_run || { 1061947e89262Smrg # win32 will think the script is a binary if it has 1062047e89262Smrg # a .exe suffix, so we strip it off here. 1062147e89262Smrg case $output in 1062247e89262Smrg *.exe) func_stripname '' '.exe' "$output" 1062347e89262Smrg output=$func_stripname_result ;; 1062447e89262Smrg esac 1062547e89262Smrg # test for cygwin because mv fails w/o .exe extensions 1062647e89262Smrg case $host in 1062747e89262Smrg *cygwin*) 1062847e89262Smrg exeext=.exe 1062947e89262Smrg func_stripname '' '.exe' "$outputname" 1063047e89262Smrg outputname=$func_stripname_result ;; 1063147e89262Smrg *) exeext= ;; 10632bd1da9d7Smrg esac 1063347e89262Smrg case $host in 1063447e89262Smrg *cygwin* | *mingw* ) 1063547e89262Smrg func_dirname_and_basename "$output" "" "." 1063647e89262Smrg output_name=$func_basename_result 1063747e89262Smrg output_path=$func_dirname_result 10638e6d2e958Smrg cwrappersource=$output_path/$objdir/lt-$output_name.c 10639e6d2e958Smrg cwrapper=$output_path/$output_name.exe 1064047e89262Smrg $RM $cwrappersource $cwrapper 1064147e89262Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 1064247e89262Smrg 1064347e89262Smrg func_emit_cwrapperexe_src > $cwrappersource 1064447e89262Smrg 1064547e89262Smrg # The wrapper executable is built using the $host compiler, 1064647e89262Smrg # because it contains $host paths and files. If cross- 1064747e89262Smrg # compiling, it, like the target executable, must be 1064847e89262Smrg # executed on the $host or under an emulation environment. 1064947e89262Smrg $opt_dry_run || { 1065047e89262Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 1065147e89262Smrg $STRIP $cwrapper 1065247e89262Smrg } 10653bd1da9d7Smrg 1065447e89262Smrg # Now, create the wrapper script for func_source use: 1065547e89262Smrg func_ltwrapper_scriptname $cwrapper 1065647e89262Smrg $RM $func_ltwrapper_scriptname_result 1065747e89262Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 1065847e89262Smrg $opt_dry_run || { 1065947e89262Smrg # note: this script will not be executed, so do not chmod. 10660e6d2e958Smrg if test "x$build" = "x$host"; then 1066147e89262Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 1066247e89262Smrg else 1066347e89262Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 1066447e89262Smrg fi 1066547e89262Smrg } 1066647e89262Smrg ;; 1066747e89262Smrg * ) 1066847e89262Smrg $RM $output 1066947e89262Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10670bd1da9d7Smrg 1067147e89262Smrg func_emit_wrapper no > $output 1067247e89262Smrg chmod +x $output 1067347e89262Smrg ;; 1067447e89262Smrg esac 1067547e89262Smrg } 1067647e89262Smrg exit $EXIT_SUCCESS 1067747e89262Smrg ;; 1067847e89262Smrg esac 10679bd1da9d7Smrg 1068047e89262Smrg # See if we need to build an old-fashioned archive. 1068147e89262Smrg for oldlib in $oldlibs; do 10682bd1da9d7Smrg 10683e6d2e958Smrg case $build_libtool_libs in 10684e6d2e958Smrg convenience) 10685e6d2e958Smrg oldobjs="$libobjs_save $symfileobj" 10686e6d2e958Smrg addlibs=$convenience 1068747e89262Smrg build_libtool_libs=no 10688e6d2e958Smrg ;; 10689e6d2e958Smrg module) 10690e6d2e958Smrg oldobjs=$libobjs_save 10691e6d2e958Smrg addlibs=$old_convenience 10692e6d2e958Smrg build_libtool_libs=no 10693e6d2e958Smrg ;; 10694e6d2e958Smrg *) 1069547e89262Smrg oldobjs="$old_deplibs $non_pic_objects" 10696e6d2e958Smrg $preload && test -f "$symfileobj" \ 10697e6d2e958Smrg && func_append oldobjs " $symfileobj" 10698e6d2e958Smrg addlibs=$old_convenience 10699e6d2e958Smrg ;; 10700e6d2e958Smrg esac 10701bd1da9d7Smrg 1070247e89262Smrg if test -n "$addlibs"; then 10703e6d2e958Smrg gentop=$output_objdir/${outputname}x 10704899129b3Smrg func_append generated " $gentop" 10705bd1da9d7Smrg 1070647e89262Smrg func_extract_archives $gentop $addlibs 10707899129b3Smrg func_append oldobjs " $func_extract_archives_result" 1070847e89262Smrg fi 10709bd1da9d7Smrg 1071047e89262Smrg # Do each command in the archive commands. 10711e6d2e958Smrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 1071247e89262Smrg cmds=$old_archive_from_new_cmds 1071347e89262Smrg else 10714bd1da9d7Smrg 1071547e89262Smrg # Add any objects from preloaded convenience libraries 1071647e89262Smrg if test -n "$dlprefiles"; then 10717e6d2e958Smrg gentop=$output_objdir/${outputname}x 10718899129b3Smrg func_append generated " $gentop" 10719bd1da9d7Smrg 1072047e89262Smrg func_extract_archives $gentop $dlprefiles 10721899129b3Smrg func_append oldobjs " $func_extract_archives_result" 1072247e89262Smrg fi 10723bd1da9d7Smrg 1072447e89262Smrg # POSIX demands no paths to be encoded in archives. We have 1072547e89262Smrg # to avoid creating archives with duplicate basenames if we 1072647e89262Smrg # might have to extract them afterwards, e.g., when creating a 1072747e89262Smrg # static archive out of a convenience library, or when linking 1072847e89262Smrg # the entirety of a libtool archive into another (currently 1072947e89262Smrg # not supported by libtool). 1073047e89262Smrg if (for obj in $oldobjs 1073147e89262Smrg do 1073247e89262Smrg func_basename "$obj" 1073347e89262Smrg $ECHO "$func_basename_result" 1073447e89262Smrg done | sort | sort -uc >/dev/null 2>&1); then 1073547e89262Smrg : 1073647e89262Smrg else 1073747e89262Smrg echo "copying selected object files to avoid basename conflicts..." 10738e6d2e958Smrg gentop=$output_objdir/${outputname}x 10739899129b3Smrg func_append generated " $gentop" 1074047e89262Smrg func_mkdir_p "$gentop" 1074147e89262Smrg save_oldobjs=$oldobjs 1074247e89262Smrg oldobjs= 1074347e89262Smrg counter=1 1074447e89262Smrg for obj in $save_oldobjs 1074547e89262Smrg do 1074647e89262Smrg func_basename "$obj" 10747e6d2e958Smrg objbase=$func_basename_result 1074847e89262Smrg case " $oldobjs " in 1074947e89262Smrg " ") oldobjs=$obj ;; 1075047e89262Smrg *[\ /]"$objbase "*) 1075147e89262Smrg while :; do 1075247e89262Smrg # Make sure we don't pick an alternate name that also 1075347e89262Smrg # overlaps. 1075447e89262Smrg newobj=lt$counter-$objbase 1075547e89262Smrg func_arith $counter + 1 1075647e89262Smrg counter=$func_arith_result 1075747e89262Smrg case " $oldobjs " in 1075847e89262Smrg *[\ /]"$newobj "*) ;; 1075947e89262Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 1076047e89262Smrg esac 1076147e89262Smrg done 1076247e89262Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10763899129b3Smrg func_append oldobjs " $gentop/$newobj" 1076447e89262Smrg ;; 10765899129b3Smrg *) func_append oldobjs " $obj" ;; 1076647e89262Smrg esac 10767bd1da9d7Smrg done 10768bd1da9d7Smrg fi 10769899129b3Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10770899129b3Smrg tool_oldlib=$func_to_tool_file_result 1077147e89262Smrg eval cmds=\"$old_archive_cmds\" 10772bd1da9d7Smrg 1077347e89262Smrg func_len " $cmds" 1077447e89262Smrg len=$func_len_result 1077547e89262Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 1077647e89262Smrg cmds=$old_archive_cmds 10777899129b3Smrg elif test -n "$archiver_list_spec"; then 10778899129b3Smrg func_verbose "using command file archive linking..." 10779899129b3Smrg for obj in $oldobjs 10780899129b3Smrg do 10781899129b3Smrg func_to_tool_file "$obj" 10782899129b3Smrg $ECHO "$func_to_tool_file_result" 10783899129b3Smrg done > $output_objdir/$libname.libcmd 10784899129b3Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 10785899129b3Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10786899129b3Smrg cmds=$old_archive_cmds 1078747e89262Smrg else 1078847e89262Smrg # the command line is too long to link in one step, link in parts 1078947e89262Smrg func_verbose "using piecewise archive linking..." 1079047e89262Smrg save_RANLIB=$RANLIB 1079147e89262Smrg RANLIB=: 1079247e89262Smrg objlist= 1079347e89262Smrg concat_cmds= 1079447e89262Smrg save_oldobjs=$oldobjs 1079547e89262Smrg oldobjs= 1079647e89262Smrg # Is there a better way of finding the last object in the list? 1079747e89262Smrg for obj in $save_oldobjs 1079847e89262Smrg do 1079947e89262Smrg last_oldobj=$obj 1080047e89262Smrg done 1080147e89262Smrg eval test_cmds=\"$old_archive_cmds\" 1080247e89262Smrg func_len " $test_cmds" 1080347e89262Smrg len0=$func_len_result 1080447e89262Smrg len=$len0 1080547e89262Smrg for obj in $save_oldobjs 1080647e89262Smrg do 1080747e89262Smrg func_len " $obj" 1080847e89262Smrg func_arith $len + $func_len_result 1080947e89262Smrg len=$func_arith_result 1081047e89262Smrg func_append objlist " $obj" 1081147e89262Smrg if test "$len" -lt "$max_cmd_len"; then 1081247e89262Smrg : 1081347e89262Smrg else 1081447e89262Smrg # the above command should be used before it gets too long 1081547e89262Smrg oldobjs=$objlist 10816e6d2e958Smrg if test "$obj" = "$last_oldobj"; then 1081747e89262Smrg RANLIB=$save_RANLIB 1081847e89262Smrg fi 1081947e89262Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10820e6d2e958Smrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 1082147e89262Smrg objlist= 1082247e89262Smrg len=$len0 1082347e89262Smrg fi 1082447e89262Smrg done 1082547e89262Smrg RANLIB=$save_RANLIB 1082647e89262Smrg oldobjs=$objlist 10827e6d2e958Smrg if test -z "$oldobjs"; then 1082847e89262Smrg eval cmds=\"\$concat_cmds\" 1082947e89262Smrg else 1083047e89262Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 1083147e89262Smrg fi 1083247e89262Smrg fi 1083347e89262Smrg fi 1083447e89262Smrg func_execute_cmds "$cmds" 'exit $?' 10835bd1da9d7Smrg done 10836bd1da9d7Smrg 1083747e89262Smrg test -n "$generated" && \ 1083847e89262Smrg func_show_eval "${RM}r$generated" 10839bd1da9d7Smrg 1084047e89262Smrg # Now create the libtool archive. 1084147e89262Smrg case $output in 1084247e89262Smrg *.la) 1084347e89262Smrg old_library= 10844e6d2e958Smrg test yes = "$build_old_libs" && old_library=$libname.$libext 1084547e89262Smrg func_verbose "creating $output" 10846bd1da9d7Smrg 1084747e89262Smrg # Preserve any variables that may affect compiler behavior 1084847e89262Smrg for var in $variables_saved_for_relink; do 1084947e89262Smrg if eval test -z \"\${$var+set}\"; then 1085047e89262Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 1085147e89262Smrg elif eval var_value=\$$var; test -z "$var_value"; then 1085247e89262Smrg relink_command="$var=; export $var; $relink_command" 10853bd1da9d7Smrg else 1085447e89262Smrg func_quote_for_eval "$var_value" 1085547e89262Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10856bd1da9d7Smrg fi 1085747e89262Smrg done 1085847e89262Smrg # Quote the link command for shipping. 10859e6d2e958Smrg relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 1086047e89262Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10861e6d2e958Smrg if test yes = "$hardcode_automatic"; then 1086247e89262Smrg relink_command= 1086347e89262Smrg fi 10864bd1da9d7Smrg 1086547e89262Smrg # Only create the output if not a dry run. 1086647e89262Smrg $opt_dry_run || { 1086747e89262Smrg for installed in no yes; do 10868e6d2e958Smrg if test yes = "$installed"; then 1086947e89262Smrg if test -z "$install_libdir"; then 1087047e89262Smrg break 1087147e89262Smrg fi 10872e6d2e958Smrg output=$output_objdir/${outputname}i 1087347e89262Smrg # Replace all uninstalled libtool libraries with the installed ones 1087447e89262Smrg newdependency_libs= 1087547e89262Smrg for deplib in $dependency_libs; do 1087647e89262Smrg case $deplib in 1087747e89262Smrg *.la) 1087847e89262Smrg func_basename "$deplib" 10879e6d2e958Smrg name=$func_basename_result 10880899129b3Smrg func_resolve_sysroot "$deplib" 10881e6d2e958Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 1088247e89262Smrg test -z "$libdir" && \ 10883e6d2e958Smrg func_fatal_error "'$deplib' is not a valid libtool archive" 10884899129b3Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 10885899129b3Smrg ;; 10886899129b3Smrg -L*) 10887899129b3Smrg func_stripname -L '' "$deplib" 10888899129b3Smrg func_replace_sysroot "$func_stripname_result" 10889899129b3Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 10890899129b3Smrg ;; 10891899129b3Smrg -R*) 10892899129b3Smrg func_stripname -R '' "$deplib" 10893899129b3Smrg func_replace_sysroot "$func_stripname_result" 10894899129b3Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 1089547e89262Smrg ;; 10896899129b3Smrg *) func_append newdependency_libs " $deplib" ;; 1089747e89262Smrg esac 1089847e89262Smrg done 10899e6d2e958Smrg dependency_libs=$newdependency_libs 1090047e89262Smrg newdlfiles= 1090147e89262Smrg 1090247e89262Smrg for lib in $dlfiles; do 1090347e89262Smrg case $lib in 1090447e89262Smrg *.la) 1090547e89262Smrg func_basename "$lib" 10906e6d2e958Smrg name=$func_basename_result 10907e6d2e958Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 1090847e89262Smrg test -z "$libdir" && \ 10909e6d2e958Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10910899129b3Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 1091147e89262Smrg ;; 10912899129b3Smrg *) func_append newdlfiles " $lib" ;; 1091347e89262Smrg esac 1091447e89262Smrg done 10915e6d2e958Smrg dlfiles=$newdlfiles 1091647e89262Smrg newdlprefiles= 1091747e89262Smrg for lib in $dlprefiles; do 1091847e89262Smrg case $lib in 1091947e89262Smrg *.la) 1092047e89262Smrg # Only pass preopened files to the pseudo-archive (for 1092147e89262Smrg # eventual linking with the app. that links it) if we 1092247e89262Smrg # didn't already link the preopened objects directly into 1092347e89262Smrg # the library: 1092447e89262Smrg func_basename "$lib" 10925e6d2e958Smrg name=$func_basename_result 10926e6d2e958Smrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 1092747e89262Smrg test -z "$libdir" && \ 10928e6d2e958Smrg func_fatal_error "'$lib' is not a valid libtool archive" 10929899129b3Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 1093047e89262Smrg ;; 1093147e89262Smrg esac 1093247e89262Smrg done 10933e6d2e958Smrg dlprefiles=$newdlprefiles 1093447e89262Smrg else 1093547e89262Smrg newdlfiles= 1093647e89262Smrg for lib in $dlfiles; do 1093747e89262Smrg case $lib in 10938e6d2e958Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 1093947e89262Smrg *) abs=`pwd`"/$lib" ;; 1094047e89262Smrg esac 10941899129b3Smrg func_append newdlfiles " $abs" 1094247e89262Smrg done 10943e6d2e958Smrg dlfiles=$newdlfiles 1094447e89262Smrg newdlprefiles= 1094547e89262Smrg for lib in $dlprefiles; do 1094647e89262Smrg case $lib in 10947e6d2e958Smrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 1094847e89262Smrg *) abs=`pwd`"/$lib" ;; 1094947e89262Smrg esac 10950899129b3Smrg func_append newdlprefiles " $abs" 1095147e89262Smrg done 10952e6d2e958Smrg dlprefiles=$newdlprefiles 1095347e89262Smrg fi 1095447e89262Smrg $RM $output 1095547e89262Smrg # place dlname in correct position for cygwin 1095647e89262Smrg # In fact, it would be nice if we could use this code for all target 1095747e89262Smrg # systems that can't hard-code library paths into their executables 1095847e89262Smrg # and that have no shared library path variable independent of PATH, 1095947e89262Smrg # but it turns out we can't easily determine that from inspecting 1096047e89262Smrg # libtool variables, so we have to hard-code the OSs to which it 1096147e89262Smrg # applies here; at the moment, that means platforms that use the PE 1096247e89262Smrg # object format with DLL files. See the long comment at the top of 1096347e89262Smrg # tests/bindir.at for full details. 1096447e89262Smrg tdlname=$dlname 1096547e89262Smrg case $host,$output,$installed,$module,$dlname in 1096647e89262Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 1096747e89262Smrg # If a -bindir argument was supplied, place the dll there. 10968e6d2e958Smrg if test -n "$bindir"; then 1096947e89262Smrg func_relative_path "$install_libdir" "$bindir" 10970e6d2e958Smrg tdlname=$func_relative_path_result/$dlname 1097147e89262Smrg else 1097247e89262Smrg # Otherwise fall back on heuristic. 1097347e89262Smrg tdlname=../bin/$dlname 1097447e89262Smrg fi 1097547e89262Smrg ;; 1097647e89262Smrg esac 1097747e89262Smrg $ECHO > $output "\ 1097847e89262Smrg# $outputname - a libtool library file 10979e6d2e958Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 1098047e89262Smrg# 1098147e89262Smrg# Please DO NOT delete this file! 1098247e89262Smrg# It is necessary for linking the library. 10983bd1da9d7Smrg 1098447e89262Smrg# The name that we can dlopen(3). 1098547e89262Smrgdlname='$tdlname' 10986bd1da9d7Smrg 1098747e89262Smrg# Names of this library. 1098847e89262Smrglibrary_names='$library_names' 10989bd1da9d7Smrg 1099047e89262Smrg# The name of the static archive. 1099147e89262Smrgold_library='$old_library' 10992bd1da9d7Smrg 10993e6d2e958Smrg# Linker flags that cannot go in dependency_libs. 1099447e89262Smrginherited_linker_flags='$new_inherited_linker_flags' 10995bd1da9d7Smrg 1099647e89262Smrg# Libraries that this one depends upon. 1099747e89262Smrgdependency_libs='$dependency_libs' 10998bd1da9d7Smrg 1099947e89262Smrg# Names of additional weak libraries provided by this library 1100047e89262Smrgweak_library_names='$weak_libs' 11001bd1da9d7Smrg 1100247e89262Smrg# Version information for $libname. 1100347e89262Smrgcurrent=$current 1100447e89262Smrgage=$age 1100547e89262Smrgrevision=$revision 11006bd1da9d7Smrg 1100747e89262Smrg# Is this an already installed library? 1100847e89262Smrginstalled=$installed 11009bd1da9d7Smrg 1101047e89262Smrg# Should we warn about portability when linking against -modules? 1101147e89262Smrgshouldnotlink=$module 11012bd1da9d7Smrg 1101347e89262Smrg# Files to dlopen/dlpreopen 1101447e89262Smrgdlopen='$dlfiles' 1101547e89262Smrgdlpreopen='$dlprefiles' 11016bd1da9d7Smrg 1101747e89262Smrg# Directory that this library needs to be installed in: 1101847e89262Smrglibdir='$install_libdir'" 11019e6d2e958Smrg if test no,yes = "$installed,$need_relink"; then 1102047e89262Smrg $ECHO >> $output "\ 1102147e89262Smrgrelink_command=\"$relink_command\"" 1102247e89262Smrg fi 1102347e89262Smrg done 1102447e89262Smrg } 11025bd1da9d7Smrg 1102647e89262Smrg # Do a symbolic link so that the libtool archive can be found in 1102747e89262Smrg # LD_LIBRARY_PATH before the program is installed. 1102847e89262Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 1102947e89262Smrg ;; 1103047e89262Smrg esac 1103147e89262Smrg exit $EXIT_SUCCESS 1103247e89262Smrg} 11033bd1da9d7Smrg 11034e6d2e958Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 11035e6d2e958Smrg func_mode_link ${1+"$@"} 11036e6d2e958Smrgfi 11037bd1da9d7Smrg 11038bd1da9d7Smrg 1103947e89262Smrg# func_mode_uninstall arg... 1104047e89262Smrgfunc_mode_uninstall () 1104147e89262Smrg{ 11042e6d2e958Smrg $debug_cmd 11043e6d2e958Smrg 11044e6d2e958Smrg RM=$nonopt 11045bd1da9d7Smrg files= 11046e6d2e958Smrg rmforce=false 11047bd1da9d7Smrg exit_status=0 11048bd1da9d7Smrg 11049bd1da9d7Smrg # This variable tells wrapper scripts just to set variables rather 11050bd1da9d7Smrg # than running their programs. 11051e6d2e958Smrg libtool_install_magic=$magic 11052bd1da9d7Smrg 11053bd1da9d7Smrg for arg 11054bd1da9d7Smrg do 11055bd1da9d7Smrg case $arg in 11056e6d2e958Smrg -f) func_append RM " $arg"; rmforce=: ;; 11057899129b3Smrg -*) func_append RM " $arg" ;; 11058899129b3Smrg *) func_append files " $arg" ;; 11059bd1da9d7Smrg esac 11060bd1da9d7Smrg done 11061bd1da9d7Smrg 1106247e89262Smrg test -z "$RM" && \ 1106347e89262Smrg func_fatal_help "you must specify an RM program" 11064bd1da9d7Smrg 11065bd1da9d7Smrg rmdirs= 11066bd1da9d7Smrg 11067bd1da9d7Smrg for file in $files; do 1106847e89262Smrg func_dirname "$file" "" "." 11069e6d2e958Smrg dir=$func_dirname_result 11070e6d2e958Smrg if test . = "$dir"; then 11071e6d2e958Smrg odir=$objdir 11072bd1da9d7Smrg else 11073e6d2e958Smrg odir=$dir/$objdir 11074bd1da9d7Smrg fi 1107547e89262Smrg func_basename "$file" 11076e6d2e958Smrg name=$func_basename_result 11077e6d2e958Smrg test uninstall = "$opt_mode" && odir=$dir 11078bd1da9d7Smrg 11079899129b3Smrg # Remember odir for removal later, being careful to avoid duplicates 11080e6d2e958Smrg if test clean = "$opt_mode"; then 11081bd1da9d7Smrg case " $rmdirs " in 11082899129b3Smrg *" $odir "*) ;; 11083899129b3Smrg *) func_append rmdirs " $odir" ;; 11084bd1da9d7Smrg esac 11085bd1da9d7Smrg fi 11086bd1da9d7Smrg 11087bd1da9d7Smrg # Don't error if the file doesn't exist and rm -f was used. 1108847e89262Smrg if { test -L "$file"; } >/dev/null 2>&1 || 1108947e89262Smrg { test -h "$file"; } >/dev/null 2>&1 || 1109047e89262Smrg test -f "$file"; then 11091bd1da9d7Smrg : 11092bd1da9d7Smrg elif test -d "$file"; then 11093bd1da9d7Smrg exit_status=1 11094bd1da9d7Smrg continue 11095e6d2e958Smrg elif $rmforce; then 11096bd1da9d7Smrg continue 11097bd1da9d7Smrg fi 11098bd1da9d7Smrg 11099e6d2e958Smrg rmfiles=$file 11100bd1da9d7Smrg 11101bd1da9d7Smrg case $name in 11102bd1da9d7Smrg *.la) 11103bd1da9d7Smrg # Possibly a libtool archive, so verify it. 1110447e89262Smrg if func_lalib_p "$file"; then 1110547e89262Smrg func_source $dir/$name 11106bd1da9d7Smrg 11107bd1da9d7Smrg # Delete the libtool libraries and symlinks. 11108bd1da9d7Smrg for n in $library_names; do 11109899129b3Smrg func_append rmfiles " $odir/$n" 11110bd1da9d7Smrg done 11111899129b3Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11112bd1da9d7Smrg 11113e6d2e958Smrg case $opt_mode in 11114bd1da9d7Smrg clean) 11115899129b3Smrg case " $library_names " in 11116bd1da9d7Smrg *" $dlname "*) ;; 11117899129b3Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11118bd1da9d7Smrg esac 11119899129b3Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11120bd1da9d7Smrg ;; 11121bd1da9d7Smrg uninstall) 11122bd1da9d7Smrg if test -n "$library_names"; then 11123bd1da9d7Smrg # Do each command in the postuninstall commands. 11124e6d2e958Smrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11125bd1da9d7Smrg fi 11126bd1da9d7Smrg 11127bd1da9d7Smrg if test -n "$old_library"; then 11128bd1da9d7Smrg # Do each command in the old_postuninstall commands. 11129e6d2e958Smrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11130bd1da9d7Smrg fi 11131bd1da9d7Smrg # FIXME: should reinstall the best remaining shared library. 11132bd1da9d7Smrg ;; 11133bd1da9d7Smrg esac 11134bd1da9d7Smrg fi 11135bd1da9d7Smrg ;; 11136bd1da9d7Smrg 11137bd1da9d7Smrg *.lo) 11138bd1da9d7Smrg # Possibly a libtool object, so verify it. 1113947e89262Smrg if func_lalib_p "$file"; then 11140bd1da9d7Smrg 11141bd1da9d7Smrg # Read the .lo file 1114247e89262Smrg func_source $dir/$name 11143bd1da9d7Smrg 11144bd1da9d7Smrg # Add PIC object to the list of files to remove. 11145e6d2e958Smrg if test -n "$pic_object" && test none != "$pic_object"; then 11146899129b3Smrg func_append rmfiles " $dir/$pic_object" 11147bd1da9d7Smrg fi 11148bd1da9d7Smrg 11149bd1da9d7Smrg # Add non-PIC object to the list of files to remove. 11150e6d2e958Smrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11151899129b3Smrg func_append rmfiles " $dir/$non_pic_object" 11152bd1da9d7Smrg fi 11153bd1da9d7Smrg fi 11154bd1da9d7Smrg ;; 11155bd1da9d7Smrg 11156bd1da9d7Smrg *) 11157e6d2e958Smrg if test clean = "$opt_mode"; then 11158bd1da9d7Smrg noexename=$name 11159bd1da9d7Smrg case $file in 11160bd1da9d7Smrg *.exe) 1116147e89262Smrg func_stripname '' '.exe' "$file" 1116247e89262Smrg file=$func_stripname_result 1116347e89262Smrg func_stripname '' '.exe' "$name" 1116447e89262Smrg noexename=$func_stripname_result 11165bd1da9d7Smrg # $file with .exe has already been added to rmfiles, 11166bd1da9d7Smrg # add $file without .exe 11167899129b3Smrg func_append rmfiles " $file" 11168bd1da9d7Smrg ;; 11169bd1da9d7Smrg esac 11170bd1da9d7Smrg # Do a test to see if this is a libtool program. 1117147e89262Smrg if func_ltwrapper_p "$file"; then 1117247e89262Smrg if func_ltwrapper_executable_p "$file"; then 1117347e89262Smrg func_ltwrapper_scriptname "$file" 1117447e89262Smrg relink_command= 1117547e89262Smrg func_source $func_ltwrapper_scriptname_result 11176899129b3Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 1117747e89262Smrg else 1117847e89262Smrg relink_command= 1117947e89262Smrg func_source $dir/$noexename 1118047e89262Smrg fi 11181bd1da9d7Smrg 11182bd1da9d7Smrg # note $name still contains .exe if it was in $file originally 11183bd1da9d7Smrg # as does the version of $file that was added into $rmfiles 11184e6d2e958Smrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11185e6d2e958Smrg if test yes = "$fast_install" && test -n "$relink_command"; then 11186899129b3Smrg func_append rmfiles " $odir/lt-$name" 11187bd1da9d7Smrg fi 11188e6d2e958Smrg if test "X$noexename" != "X$name"; then 11189e6d2e958Smrg func_append rmfiles " $odir/lt-$noexename.c" 11190bd1da9d7Smrg fi 11191bd1da9d7Smrg fi 11192bd1da9d7Smrg fi 11193bd1da9d7Smrg ;; 11194bd1da9d7Smrg esac 1119547e89262Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 11196bd1da9d7Smrg done 11197bd1da9d7Smrg 11198e6d2e958Smrg # Try to remove the $objdir's in the directories where we deleted files 11199bd1da9d7Smrg for dir in $rmdirs; do 11200bd1da9d7Smrg if test -d "$dir"; then 1120147e89262Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 11202bd1da9d7Smrg fi 11203bd1da9d7Smrg done 11204bd1da9d7Smrg 11205bd1da9d7Smrg exit $exit_status 1120647e89262Smrg} 11207bd1da9d7Smrg 11208e6d2e958Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11209e6d2e958Smrg func_mode_uninstall ${1+"$@"} 11210e6d2e958Smrgfi 11211bd1da9d7Smrg 11212899129b3Smrgtest -z "$opt_mode" && { 11213e6d2e958Smrg help=$generic_help 1121447e89262Smrg func_fatal_help "you must specify a MODE" 1121547e89262Smrg} 1121647e89262Smrg 1121747e89262Smrgtest -z "$exec_cmd" && \ 11218e6d2e958Smrg func_fatal_help "invalid operation mode '$opt_mode'" 11219bd1da9d7Smrg 11220bd1da9d7Smrgif test -n "$exec_cmd"; then 1122147e89262Smrg eval exec "$exec_cmd" 11222bd1da9d7Smrg exit $EXIT_FAILURE 11223bd1da9d7Smrgfi 11224bd1da9d7Smrg 1122547e89262Smrgexit $exit_status 11226bd1da9d7Smrg 11227bd1da9d7Smrg 11228bd1da9d7Smrg# The TAGs below are defined such that we never get into a situation 11229e6d2e958Smrg# where we disable both kinds of libraries. Given conflicting 11230bd1da9d7Smrg# choices, we go for a static library, that is the most portable, 11231bd1da9d7Smrg# since we can't tell whether shared libraries were disabled because 11232bd1da9d7Smrg# the user asked for that or because the platform doesn't support 11233bd1da9d7Smrg# them. This is particularly important on AIX, because we don't 11234bd1da9d7Smrg# support having both static and shared libraries enabled at the same 11235bd1da9d7Smrg# time on that platform, so we default to a shared-only configuration. 11236bd1da9d7Smrg# If a disable-shared tag is given, we'll fallback to a static-only 11237bd1da9d7Smrg# configuration. But we'll never go from static-only to shared-only. 11238bd1da9d7Smrg 11239bd1da9d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 1124047e89262Smrgbuild_libtool_libs=no 1124147e89262Smrgbuild_old_libs=yes 11242bd1da9d7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 11243bd1da9d7Smrg 11244bd1da9d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 1124547e89262Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11246bd1da9d7Smrg# ### END LIBTOOL TAG CONFIG: disable-static 11247bd1da9d7Smrg 11248bd1da9d7Smrg# Local Variables: 11249bd1da9d7Smrg# mode:shell-script 11250bd1da9d7Smrg# sh-indentation:2 11251bd1da9d7Smrg# End: 11252