ltmain.sh revision fe4c343a
1fe4c343aSmrg#! /bin/sh 2fe4c343aSmrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3fe4c343aSmrg## by inline-source v2014-01-03.01 4549e21daSmrg 5fe4c343aSmrg# libtool (GNU libtool) 2.4.6 6fe4c343aSmrg# Provide generalized library-building support services. 7549e21daSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8549e21daSmrg 9fe4c343aSmrg# Copyright (C) 1996-2015 Free Software Foundation, Inc. 10549e21daSmrg# This is free software; see the source for copying conditions. There is NO 11549e21daSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12549e21daSmrg 13549e21daSmrg# GNU Libtool is free software; you can redistribute it and/or modify 14ba6a1819Smrg# it under the terms of the GNU General Public License as published by 15ba6a1819Smrg# the Free Software Foundation; either version 2 of the License, or 16ba6a1819Smrg# (at your option) any later version. 17ba6a1819Smrg# 18549e21daSmrg# As a special exception to the GNU General Public License, 19549e21daSmrg# if you distribute this file as part of a program or library that 20549e21daSmrg# is built using GNU Libtool, you may include this file under the 21549e21daSmrg# same distribution terms that you use for the rest of that program. 22549e21daSmrg# 23549e21daSmrg# GNU Libtool is distributed in the hope that it will be useful, but 24ba6a1819Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 25ba6a1819Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26ba6a1819Smrg# General Public License for more details. 27ba6a1819Smrg# 28ba6a1819Smrg# You should have received a copy of the GNU General Public License 29fe4c343aSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 30549e21daSmrg 31549e21daSmrg 32549e21daSmrgPROGRAM=libtool 33549e21daSmrgPACKAGE=libtool 34fe4c343aSmrgVERSION=2.4.6 35fe4c343aSmrgpackage_revision=2.4.6 36549e21daSmrg 37fe4c343aSmrg 38fe4c343aSmrg## ------ ## 39fe4c343aSmrg## Usage. ## 40fe4c343aSmrg## ------ ## 41fe4c343aSmrg 42fe4c343aSmrg# Run './libtool --help' for help with using this script from the 43fe4c343aSmrg# command line. 44fe4c343aSmrg 45fe4c343aSmrg 46fe4c343aSmrg## ------------------------------- ## 47fe4c343aSmrg## User overridable command paths. ## 48fe4c343aSmrg## ------------------------------- ## 49fe4c343aSmrg 50fe4c343aSmrg# After configure completes, it has a better idea of some of the 51fe4c343aSmrg# shell tools we need than the defaults used by the functions shared 52fe4c343aSmrg# with bootstrap, so set those here where they can still be over- 53fe4c343aSmrg# ridden by the user, but otherwise take precedence. 54fe4c343aSmrg 55fe4c343aSmrg: ${AUTOCONF="autoconf"} 56fe4c343aSmrg: ${AUTOMAKE="automake"} 57fe4c343aSmrg 58fe4c343aSmrg 59fe4c343aSmrg## -------------------------- ## 60fe4c343aSmrg## Source external libraries. ## 61fe4c343aSmrg## -------------------------- ## 62fe4c343aSmrg 63fe4c343aSmrg# Much of our low-level functionality needs to be sourced from external 64fe4c343aSmrg# libraries, which are installed to $pkgauxdir. 65fe4c343aSmrg 66fe4c343aSmrg# Set a version string for this script. 67fe4c343aSmrgscriptversion=2015-01-20.17; # UTC 68fe4c343aSmrg 69fe4c343aSmrg# General shell script boiler plate, and helper functions. 70fe4c343aSmrg# Written by Gary V. Vaughan, 2004 71fe4c343aSmrg 72fe4c343aSmrg# Copyright (C) 2004-2015 Free Software Foundation, Inc. 73fe4c343aSmrg# This is free software; see the source for copying conditions. There is NO 74fe4c343aSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 75fe4c343aSmrg 76fe4c343aSmrg# This program is free software; you can redistribute it and/or modify 77fe4c343aSmrg# it under the terms of the GNU General Public License as published by 78fe4c343aSmrg# the Free Software Foundation; either version 3 of the License, or 79fe4c343aSmrg# (at your option) any later version. 80fe4c343aSmrg 81fe4c343aSmrg# As a special exception to the GNU General Public License, if you distribute 82fe4c343aSmrg# this file as part of a program or library that is built using GNU Libtool, 83fe4c343aSmrg# you may include this file under the same distribution terms that you use 84fe4c343aSmrg# for the rest of that program. 85fe4c343aSmrg 86fe4c343aSmrg# This program is distributed in the hope that it will be useful, 87fe4c343aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 88fe4c343aSmrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 89fe4c343aSmrg# General Public License for more details. 90fe4c343aSmrg 91fe4c343aSmrg# You should have received a copy of the GNU General Public License 92fe4c343aSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 93fe4c343aSmrg 94fe4c343aSmrg# Please report bugs or propose patches to gary@gnu.org. 95fe4c343aSmrg 96fe4c343aSmrg 97fe4c343aSmrg## ------ ## 98fe4c343aSmrg## Usage. ## 99fe4c343aSmrg## ------ ## 100fe4c343aSmrg 101fe4c343aSmrg# Evaluate this file near the top of your script to gain access to 102fe4c343aSmrg# the functions and variables defined here: 103fe4c343aSmrg# 104fe4c343aSmrg# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 105fe4c343aSmrg# 106fe4c343aSmrg# If you need to override any of the default environment variable 107fe4c343aSmrg# settings, do that before evaluating this file. 108fe4c343aSmrg 109fe4c343aSmrg 110fe4c343aSmrg## -------------------- ## 111fe4c343aSmrg## Shell normalisation. ## 112fe4c343aSmrg## -------------------- ## 113fe4c343aSmrg 114fe4c343aSmrg# Some shells need a little help to be as Bourne compatible as possible. 115fe4c343aSmrg# Before doing anything else, make sure all that help has been provided! 116fe4c343aSmrg 117fe4c343aSmrgDUALCASE=1; export DUALCASE # for MKS sh 118fe4c343aSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 119549e21daSmrg emulate sh 120549e21daSmrg NULLCMD=: 121fe4c343aSmrg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 122549e21daSmrg # is contrary to our usage. Disable this feature. 123549e21daSmrg alias -g '${1+"$@"}'='"$@"' 124549e21daSmrg setopt NO_GLOB_SUBST 125549e21daSmrgelse 126fe4c343aSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 127549e21daSmrgfi 128549e21daSmrg 129fe4c343aSmrg# NLS nuisances: We save the old values in case they are required later. 130fe4c343aSmrg_G_user_locale= 131fe4c343aSmrg_G_safe_locale= 132fe4c343aSmrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 133549e21daSmrgdo 134fe4c343aSmrg eval "if test set = \"\${$_G_var+set}\"; then 135fe4c343aSmrg save_$_G_var=\$$_G_var 136fe4c343aSmrg $_G_var=C 137fe4c343aSmrg export $_G_var 138fe4c343aSmrg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 139fe4c343aSmrg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 140549e21daSmrg fi" 141549e21daSmrgdone 142549e21daSmrg 143fe4c343aSmrg# CDPATH. 144fe4c343aSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 145ba6a1819Smrg 146fe4c343aSmrg# Make sure IFS has a sensible default 147fe4c343aSmrgsp=' ' 148fe4c343aSmrgnl=' 149fe4c343aSmrg' 150fe4c343aSmrgIFS="$sp $nl" 151fe4c343aSmrg 152fe4c343aSmrg# There are apparently some retarded systems that use ';' as a PATH separator! 153fe4c343aSmrgif test "${PATH_SEPARATOR+set}" != set; then 154fe4c343aSmrg PATH_SEPARATOR=: 155fe4c343aSmrg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 156fe4c343aSmrg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 157fe4c343aSmrg PATH_SEPARATOR=';' 158fe4c343aSmrg } 159fe4c343aSmrgfi 160ba6a1819Smrg 161ba6a1819Smrg 162549e21daSmrg 163fe4c343aSmrg## ------------------------- ## 164fe4c343aSmrg## Locate command utilities. ## 165fe4c343aSmrg## ------------------------- ## 166fe4c343aSmrg 167fe4c343aSmrg 168fe4c343aSmrg# func_executable_p FILE 169fe4c343aSmrg# ---------------------- 170fe4c343aSmrg# Check that FILE is an executable regular file. 171fe4c343aSmrgfunc_executable_p () 172fe4c343aSmrg{ 173fe4c343aSmrg test -f "$1" && test -x "$1" 174fe4c343aSmrg} 175fe4c343aSmrg 176fe4c343aSmrg 177fe4c343aSmrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 178fe4c343aSmrg# -------------------------------------------- 179fe4c343aSmrg# Search for either a program that responds to --version with output 180fe4c343aSmrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by 181fe4c343aSmrg# trying all the directories in PATH with each of the elements of 182fe4c343aSmrg# PROGS_LIST. 183fe4c343aSmrg# 184fe4c343aSmrg# CHECK_FUNC should accept the path to a candidate program, and 185fe4c343aSmrg# set $func_check_prog_result if it truncates its output less than 186fe4c343aSmrg# $_G_path_prog_max characters. 187fe4c343aSmrgfunc_path_progs () 188fe4c343aSmrg{ 189fe4c343aSmrg _G_progs_list=$1 190fe4c343aSmrg _G_check_func=$2 191fe4c343aSmrg _G_PATH=${3-"$PATH"} 192fe4c343aSmrg 193fe4c343aSmrg _G_path_prog_max=0 194fe4c343aSmrg _G_path_prog_found=false 195fe4c343aSmrg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 196fe4c343aSmrg for _G_dir in $_G_PATH; do 197fe4c343aSmrg IFS=$_G_save_IFS 198fe4c343aSmrg test -z "$_G_dir" && _G_dir=. 199fe4c343aSmrg for _G_prog_name in $_G_progs_list; do 200fe4c343aSmrg for _exeext in '' .EXE; do 201fe4c343aSmrg _G_path_prog=$_G_dir/$_G_prog_name$_exeext 202fe4c343aSmrg func_executable_p "$_G_path_prog" || continue 203fe4c343aSmrg case `"$_G_path_prog" --version 2>&1` in 204fe4c343aSmrg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 205fe4c343aSmrg *) $_G_check_func $_G_path_prog 206fe4c343aSmrg func_path_progs_result=$func_check_prog_result 207fe4c343aSmrg ;; 208fe4c343aSmrg esac 209fe4c343aSmrg $_G_path_prog_found && break 3 210fe4c343aSmrg done 211fe4c343aSmrg done 212fe4c343aSmrg done 213fe4c343aSmrg IFS=$_G_save_IFS 214fe4c343aSmrg test -z "$func_path_progs_result" && { 215fe4c343aSmrg echo "no acceptable sed could be found in \$PATH" >&2 216fe4c343aSmrg exit 1 217fe4c343aSmrg } 218fe4c343aSmrg} 219fe4c343aSmrg 220fe4c343aSmrg 221fe4c343aSmrg# We want to be able to use the functions in this file before configure 222fe4c343aSmrg# has figured out where the best binaries are kept, which means we have 223fe4c343aSmrg# to search for them ourselves - except when the results are already set 224fe4c343aSmrg# where we skip the searches. 225fe4c343aSmrg 226fe4c343aSmrg# Unless the user overrides by setting SED, search the path for either GNU 227fe4c343aSmrg# sed, or the sed that truncates its output the least. 228fe4c343aSmrgtest -z "$SED" && { 229fe4c343aSmrg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 230fe4c343aSmrg for _G_i in 1 2 3 4 5 6 7; do 231fe4c343aSmrg _G_sed_script=$_G_sed_script$nl$_G_sed_script 232fe4c343aSmrg done 233fe4c343aSmrg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 234fe4c343aSmrg _G_sed_script= 235fe4c343aSmrg 236fe4c343aSmrg func_check_prog_sed () 237fe4c343aSmrg { 238fe4c343aSmrg _G_path_prog=$1 239fe4c343aSmrg 240fe4c343aSmrg _G_count=0 241fe4c343aSmrg printf 0123456789 >conftest.in 242fe4c343aSmrg while : 243fe4c343aSmrg do 244fe4c343aSmrg cat conftest.in conftest.in >conftest.tmp 245fe4c343aSmrg mv conftest.tmp conftest.in 246fe4c343aSmrg cp conftest.in conftest.nl 247fe4c343aSmrg echo '' >> conftest.nl 248fe4c343aSmrg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 249fe4c343aSmrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 250fe4c343aSmrg _G_count=`expr $_G_count + 1` 251fe4c343aSmrg if test "$_G_count" -gt "$_G_path_prog_max"; then 252fe4c343aSmrg # Best one so far, save it but keep looking for a better one 253fe4c343aSmrg func_check_prog_result=$_G_path_prog 254fe4c343aSmrg _G_path_prog_max=$_G_count 255fe4c343aSmrg fi 256fe4c343aSmrg # 10*(2^10) chars as input seems more than enough 257fe4c343aSmrg test 10 -lt "$_G_count" && break 258fe4c343aSmrg done 259fe4c343aSmrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 260fe4c343aSmrg } 261fe4c343aSmrg 262fe4c343aSmrg func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 263fe4c343aSmrg rm -f conftest.sed 264fe4c343aSmrg SED=$func_path_progs_result 265fe4c343aSmrg} 266fe4c343aSmrg 267fe4c343aSmrg 268fe4c343aSmrg# Unless the user overrides by setting GREP, search the path for either GNU 269fe4c343aSmrg# grep, or the grep that truncates its output the least. 270fe4c343aSmrgtest -z "$GREP" && { 271fe4c343aSmrg func_check_prog_grep () 272fe4c343aSmrg { 273fe4c343aSmrg _G_path_prog=$1 274fe4c343aSmrg 275fe4c343aSmrg _G_count=0 276fe4c343aSmrg _G_path_prog_max=0 277fe4c343aSmrg printf 0123456789 >conftest.in 278fe4c343aSmrg while : 279fe4c343aSmrg do 280fe4c343aSmrg cat conftest.in conftest.in >conftest.tmp 281fe4c343aSmrg mv conftest.tmp conftest.in 282fe4c343aSmrg cp conftest.in conftest.nl 283fe4c343aSmrg echo 'GREP' >> conftest.nl 284fe4c343aSmrg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 285fe4c343aSmrg diff conftest.out conftest.nl >/dev/null 2>&1 || break 286fe4c343aSmrg _G_count=`expr $_G_count + 1` 287fe4c343aSmrg if test "$_G_count" -gt "$_G_path_prog_max"; then 288fe4c343aSmrg # Best one so far, save it but keep looking for a better one 289fe4c343aSmrg func_check_prog_result=$_G_path_prog 290fe4c343aSmrg _G_path_prog_max=$_G_count 291fe4c343aSmrg fi 292fe4c343aSmrg # 10*(2^10) chars as input seems more than enough 293fe4c343aSmrg test 10 -lt "$_G_count" && break 294fe4c343aSmrg done 295fe4c343aSmrg rm -f conftest.in conftest.tmp conftest.nl conftest.out 296fe4c343aSmrg } 297fe4c343aSmrg 298fe4c343aSmrg func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 299fe4c343aSmrg GREP=$func_path_progs_result 300fe4c343aSmrg} 301fe4c343aSmrg 302fe4c343aSmrg 303fe4c343aSmrg## ------------------------------- ## 304fe4c343aSmrg## User overridable command paths. ## 305fe4c343aSmrg## ------------------------------- ## 306fe4c343aSmrg 307fe4c343aSmrg# All uppercase variable names are used for environment variables. These 308fe4c343aSmrg# variables can be overridden by the user before calling a script that 309fe4c343aSmrg# uses them if a suitable command of that name is not already available 310fe4c343aSmrg# in the command search PATH. 311549e21daSmrg 312549e21daSmrg: ${CP="cp -f"} 313fe4c343aSmrg: ${ECHO="printf %s\n"} 314fe4c343aSmrg: ${EGREP="$GREP -E"} 315fe4c343aSmrg: ${FGREP="$GREP -F"} 316fe4c343aSmrg: ${LN_S="ln -s"} 317549e21daSmrg: ${MAKE="make"} 318549e21daSmrg: ${MKDIR="mkdir"} 319549e21daSmrg: ${MV="mv -f"} 320549e21daSmrg: ${RM="rm -f"} 321549e21daSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 322ba6a1819Smrg 323549e21daSmrg 324fe4c343aSmrg## -------------------- ## 325fe4c343aSmrg## Useful sed snippets. ## 326fe4c343aSmrg## -------------------- ## 3271bedbe3fSmrg 328fe4c343aSmrgsed_dirname='s|/[^/]*$||' 329fe4c343aSmrgsed_basename='s|^.*/||' 3301bedbe3fSmrg 331fe4c343aSmrg# Sed substitution that helps us do robust quoting. It backslashifies 332fe4c343aSmrg# metacharacters that are still active within double-quoted strings. 333fe4c343aSmrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 3341bedbe3fSmrg 335fe4c343aSmrg# Same as above, but do not quote variable references. 336fe4c343aSmrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 3371bedbe3fSmrg 338fe4c343aSmrg# Sed substitution that turns a string into a regex matching for the 339fe4c343aSmrg# string literally. 340fe4c343aSmrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 3411bedbe3fSmrg 342fe4c343aSmrg# Sed substitution that converts a w32 file name or path 343fe4c343aSmrg# that contains forward slashes, into one that contains 344fe4c343aSmrg# (escaped) backslashes. A very naive implementation. 345fe4c343aSmrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 346fe4c343aSmrg 347fe4c343aSmrg# Re-'\' parameter expansions in output of sed_double_quote_subst that 348fe4c343aSmrg# were '\'-ed in input to the same. If an odd number of '\' preceded a 349fe4c343aSmrg# '$' in input to sed_double_quote_subst, that '$' was protected from 350fe4c343aSmrg# expansion. Since each input '\' is now two '\'s, look for any number 351fe4c343aSmrg# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 352fe4c343aSmrg_G_bs='\\' 353fe4c343aSmrg_G_bs2='\\\\' 354fe4c343aSmrg_G_bs4='\\\\\\\\' 355fe4c343aSmrg_G_dollar='\$' 356fe4c343aSmrgsed_double_backslash="\ 357fe4c343aSmrg s/$_G_bs4/&\\ 358fe4c343aSmrg/g 359fe4c343aSmrg s/^$_G_bs2$_G_dollar/$_G_bs&/ 360fe4c343aSmrg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 361fe4c343aSmrg s/\n//g" 3621bedbe3fSmrg 363ba6a1819Smrg 364fe4c343aSmrg## ----------------- ## 365fe4c343aSmrg## Global variables. ## 366fe4c343aSmrg## ----------------- ## 367549e21daSmrg 368fe4c343aSmrg# Except for the global variables explicitly listed below, the following 369fe4c343aSmrg# functions in the '^func_' namespace, and the '^require_' namespace 370fe4c343aSmrg# variables initialised in the 'Resource management' section, sourcing 371fe4c343aSmrg# this file will not pollute your global namespace with anything 372fe4c343aSmrg# else. There's no portable way to scope variables in Bourne shell 373fe4c343aSmrg# though, so actually running these functions will sometimes place 374fe4c343aSmrg# results into a variable named after the function, and often use 375fe4c343aSmrg# temporary variables in the '^_G_' namespace. If you are careful to 376fe4c343aSmrg# avoid using those namespaces casually in your sourcing script, things 377fe4c343aSmrg# should continue to work as you expect. And, of course, you can freely 378fe4c343aSmrg# overwrite any of the functions or variables defined here before 379fe4c343aSmrg# calling anything to customize them. 380549e21daSmrg 381fe4c343aSmrgEXIT_SUCCESS=0 382fe4c343aSmrgEXIT_FAILURE=1 383fe4c343aSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 384fe4c343aSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 385ba6a1819Smrg 386fe4c343aSmrg# Allow overriding, eg assuming that you follow the convention of 387fe4c343aSmrg# putting '$debug_cmd' at the start of all your functions, you can get 388fe4c343aSmrg# bash to show function call trace with: 389fe4c343aSmrg# 390fe4c343aSmrg# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 391fe4c343aSmrgdebug_cmd=${debug_cmd-":"} 392fe4c343aSmrgexit_cmd=: 393549e21daSmrg 394fe4c343aSmrg# By convention, finish your script with: 395fe4c343aSmrg# 396fe4c343aSmrg# exit $exit_status 397fe4c343aSmrg# 398fe4c343aSmrg# so that you can set exit_status to non-zero if you want to indicate 399fe4c343aSmrg# something went wrong during execution without actually bailing out at 400fe4c343aSmrg# the point of failure. 401fe4c343aSmrgexit_status=$EXIT_SUCCESS 402549e21daSmrg 403fe4c343aSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 404fe4c343aSmrg# is ksh but when the shell is invoked as "sh" and the current value of 405fe4c343aSmrg# the _XPG environment variable is not equal to 1 (one), the special 406fe4c343aSmrg# positional parameter $0, within a function call, is the name of the 407fe4c343aSmrg# function. 408fe4c343aSmrgprogpath=$0 409549e21daSmrg 410fe4c343aSmrg# The name of this program. 411fe4c343aSmrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 412549e21daSmrg 413fe4c343aSmrg# Make sure we have an absolute progpath for reexecution: 414549e21daSmrgcase $progpath in 415549e21daSmrg [\\/]*|[A-Za-z]:\\*) ;; 416549e21daSmrg *[\\/]*) 417fe4c343aSmrg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 418549e21daSmrg progdir=`cd "$progdir" && pwd` 419fe4c343aSmrg progpath=$progdir/$progname 420549e21daSmrg ;; 421549e21daSmrg *) 422fe4c343aSmrg _G_IFS=$IFS 4231bedbe3fSmrg IFS=${PATH_SEPARATOR-:} 424549e21daSmrg for progdir in $PATH; do 425fe4c343aSmrg IFS=$_G_IFS 426549e21daSmrg test -x "$progdir/$progname" && break 427549e21daSmrg done 428fe4c343aSmrg IFS=$_G_IFS 429549e21daSmrg test -n "$progdir" || progdir=`pwd` 430fe4c343aSmrg progpath=$progdir/$progname 431549e21daSmrg ;; 432549e21daSmrgesac 433ba6a1819Smrg 434549e21daSmrg 435fe4c343aSmrg## ----------------- ## 436fe4c343aSmrg## Standard options. ## 437fe4c343aSmrg## ----------------- ## 4381bedbe3fSmrg 439fe4c343aSmrg# The following options affect the operation of the functions defined 440fe4c343aSmrg# below, and should be set appropriately depending on run-time para- 441fe4c343aSmrg# meters passed on the command line. 442549e21daSmrg 443549e21daSmrgopt_dry_run=false 444549e21daSmrgopt_quiet=false 445549e21daSmrgopt_verbose=false 446549e21daSmrg 447fe4c343aSmrg# Categories 'all' and 'none' are always available. Append any others 448fe4c343aSmrg# you will pass as the first argument to func_warning from your own 449fe4c343aSmrg# code. 450fe4c343aSmrgwarning_categories= 451ba6a1819Smrg 452fe4c343aSmrg# By default, display warnings according to 'opt_warning_types'. Set 453fe4c343aSmrg# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 454fe4c343aSmrg# treat the next displayed warning as a fatal error. 455fe4c343aSmrgwarning_func=func_warn_and_continue 456ba6a1819Smrg 457fe4c343aSmrg# Set to 'all' to display all warnings, 'none' to suppress all 458fe4c343aSmrg# warnings, or a space delimited list of some subset of 459fe4c343aSmrg# 'warning_categories' to display only the listed warnings. 460fe4c343aSmrgopt_warning_types=all 461ba6a1819Smrg 462ba6a1819Smrg 463fe4c343aSmrg## -------------------- ## 464fe4c343aSmrg## Resource management. ## 465fe4c343aSmrg## -------------------- ## 466549e21daSmrg 467fe4c343aSmrg# This section contains definitions for functions that each ensure a 468fe4c343aSmrg# particular resource (a file, or a non-empty configuration variable for 469fe4c343aSmrg# example) is available, and if appropriate to extract default values 470fe4c343aSmrg# from pertinent package files. Call them using their associated 471fe4c343aSmrg# 'require_*' variable to ensure that they are executed, at most, once. 472fe4c343aSmrg# 473fe4c343aSmrg# It's entirely deliberate that calling these functions can set 474fe4c343aSmrg# variables that don't obey the namespace limitations obeyed by the rest 475fe4c343aSmrg# of this file, in order that that they be as useful as possible to 476fe4c343aSmrg# callers. 477549e21daSmrg 478549e21daSmrg 479fe4c343aSmrg# require_term_colors 480fe4c343aSmrg# ------------------- 481fe4c343aSmrg# Allow display of bold text on terminals that support it. 482fe4c343aSmrgrequire_term_colors=func_require_term_colors 483fe4c343aSmrgfunc_require_term_colors () 484549e21daSmrg{ 485fe4c343aSmrg $debug_cmd 486fe4c343aSmrg 487fe4c343aSmrg test -t 1 && { 488fe4c343aSmrg # COLORTERM and USE_ANSI_COLORS environment variables take 489fe4c343aSmrg # precedence, because most terminfo databases neglect to describe 490fe4c343aSmrg # whether color sequences are supported. 491fe4c343aSmrg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 492fe4c343aSmrg 493fe4c343aSmrg if test 1 = "$USE_ANSI_COLORS"; then 494fe4c343aSmrg # Standard ANSI escape sequences 495fe4c343aSmrg tc_reset='[0m' 496fe4c343aSmrg tc_bold='[1m'; tc_standout='[7m' 497fe4c343aSmrg tc_red='[31m'; tc_green='[32m' 498fe4c343aSmrg tc_blue='[34m'; tc_cyan='[36m' 499fe4c343aSmrg else 500fe4c343aSmrg # Otherwise trust the terminfo database after all. 501fe4c343aSmrg test -n "`tput sgr0 2>/dev/null`" && { 502fe4c343aSmrg tc_reset=`tput sgr0` 503fe4c343aSmrg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 504fe4c343aSmrg tc_standout=$tc_bold 505fe4c343aSmrg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 506fe4c343aSmrg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 507fe4c343aSmrg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 508fe4c343aSmrg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 509fe4c343aSmrg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 510fe4c343aSmrg } 511fe4c343aSmrg fi 512fe4c343aSmrg } 513549e21daSmrg 514fe4c343aSmrg require_term_colors=: 515549e21daSmrg} 516549e21daSmrg 517549e21daSmrg 518fe4c343aSmrg## ----------------- ## 519fe4c343aSmrg## Function library. ## 520fe4c343aSmrg## ----------------- ## 521fe4c343aSmrg 522fe4c343aSmrg# This section contains a variety of useful functions to call in your 523fe4c343aSmrg# scripts. Take note of the portable wrappers for features provided by 524fe4c343aSmrg# some modern shells, which will fall back to slower equivalents on 525fe4c343aSmrg# less featureful shells. 526fe4c343aSmrg 527fe4c343aSmrg 528fe4c343aSmrg# func_append VAR VALUE 529fe4c343aSmrg# --------------------- 530fe4c343aSmrg# Append VALUE onto the existing contents of VAR. 531fe4c343aSmrg 532fe4c343aSmrg # We should try to minimise forks, especially on Windows where they are 533fe4c343aSmrg # unreasonably slow, so skip the feature probes when bash or zsh are 534fe4c343aSmrg # being used: 535fe4c343aSmrg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 536fe4c343aSmrg : ${_G_HAVE_ARITH_OP="yes"} 537fe4c343aSmrg : ${_G_HAVE_XSI_OPS="yes"} 538fe4c343aSmrg # The += operator was introduced in bash 3.1 539fe4c343aSmrg case $BASH_VERSION in 540fe4c343aSmrg [12].* | 3.0 | 3.0*) ;; 541fe4c343aSmrg *) 542fe4c343aSmrg : ${_G_HAVE_PLUSEQ_OP="yes"} 543fe4c343aSmrg ;; 544fe4c343aSmrg esac 545fe4c343aSmrg fi 546fe4c343aSmrg 547fe4c343aSmrg # _G_HAVE_PLUSEQ_OP 548fe4c343aSmrg # Can be empty, in which case the shell is probed, "yes" if += is 549fe4c343aSmrg # useable or anything else if it does not work. 550fe4c343aSmrg test -z "$_G_HAVE_PLUSEQ_OP" \ 551fe4c343aSmrg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 552fe4c343aSmrg && _G_HAVE_PLUSEQ_OP=yes 553fe4c343aSmrg 554fe4c343aSmrgif test yes = "$_G_HAVE_PLUSEQ_OP" 555fe4c343aSmrgthen 556fe4c343aSmrg # This is an XSI compatible shell, allowing a faster implementation... 557fe4c343aSmrg eval 'func_append () 558fe4c343aSmrg { 559fe4c343aSmrg $debug_cmd 560fe4c343aSmrg 561fe4c343aSmrg eval "$1+=\$2" 562fe4c343aSmrg }' 563fe4c343aSmrgelse 564fe4c343aSmrg # ...otherwise fall back to using expr, which is often a shell builtin. 565fe4c343aSmrg func_append () 566fe4c343aSmrg { 567fe4c343aSmrg $debug_cmd 568fe4c343aSmrg 569fe4c343aSmrg eval "$1=\$$1\$2" 570fe4c343aSmrg } 571fe4c343aSmrgfi 572fe4c343aSmrg 573fe4c343aSmrg 574fe4c343aSmrg# func_append_quoted VAR VALUE 575fe4c343aSmrg# ---------------------------- 576fe4c343aSmrg# Quote VALUE and append to the end of shell variable VAR, separated 577fe4c343aSmrg# by a space. 578fe4c343aSmrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then 579fe4c343aSmrg eval 'func_append_quoted () 580fe4c343aSmrg { 581fe4c343aSmrg $debug_cmd 582fe4c343aSmrg 583fe4c343aSmrg func_quote_for_eval "$2" 584fe4c343aSmrg eval "$1+=\\ \$func_quote_for_eval_result" 585fe4c343aSmrg }' 586fe4c343aSmrgelse 587fe4c343aSmrg func_append_quoted () 588fe4c343aSmrg { 589fe4c343aSmrg $debug_cmd 590fe4c343aSmrg 591fe4c343aSmrg func_quote_for_eval "$2" 592fe4c343aSmrg eval "$1=\$$1\\ \$func_quote_for_eval_result" 593fe4c343aSmrg } 594fe4c343aSmrgfi 595fe4c343aSmrg 596fe4c343aSmrg 597fe4c343aSmrg# func_append_uniq VAR VALUE 598fe4c343aSmrg# -------------------------- 599fe4c343aSmrg# Append unique VALUE onto the existing contents of VAR, assuming 600fe4c343aSmrg# entries are delimited by the first character of VALUE. For example: 601fe4c343aSmrg# 602fe4c343aSmrg# func_append_uniq options " --another-option option-argument" 603fe4c343aSmrg# 604fe4c343aSmrg# will only append to $options if " --another-option option-argument " 605fe4c343aSmrg# is not already present somewhere in $options already (note spaces at 606fe4c343aSmrg# each end implied by leading space in second argument). 607fe4c343aSmrgfunc_append_uniq () 608fe4c343aSmrg{ 609fe4c343aSmrg $debug_cmd 610fe4c343aSmrg 611fe4c343aSmrg eval _G_current_value='`$ECHO $'$1'`' 612fe4c343aSmrg _G_delim=`expr "$2" : '\(.\)'` 613fe4c343aSmrg 614fe4c343aSmrg case $_G_delim$_G_current_value$_G_delim in 615fe4c343aSmrg *"$2$_G_delim"*) ;; 616fe4c343aSmrg *) func_append "$@" ;; 617fe4c343aSmrg esac 618fe4c343aSmrg} 619fe4c343aSmrg 620fe4c343aSmrg 621fe4c343aSmrg# func_arith TERM... 622fe4c343aSmrg# ------------------ 623fe4c343aSmrg# Set func_arith_result to the result of evaluating TERMs. 624fe4c343aSmrg test -z "$_G_HAVE_ARITH_OP" \ 625fe4c343aSmrg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 626fe4c343aSmrg && _G_HAVE_ARITH_OP=yes 627fe4c343aSmrg 628fe4c343aSmrgif test yes = "$_G_HAVE_ARITH_OP"; then 629fe4c343aSmrg eval 'func_arith () 630fe4c343aSmrg { 631fe4c343aSmrg $debug_cmd 632fe4c343aSmrg 633fe4c343aSmrg func_arith_result=$(( $* )) 634fe4c343aSmrg }' 635fe4c343aSmrgelse 636fe4c343aSmrg func_arith () 637fe4c343aSmrg { 638fe4c343aSmrg $debug_cmd 639fe4c343aSmrg 640fe4c343aSmrg func_arith_result=`expr "$@"` 641fe4c343aSmrg } 642fe4c343aSmrgfi 643fe4c343aSmrg 644fe4c343aSmrg 645fe4c343aSmrg# func_basename FILE 646fe4c343aSmrg# ------------------ 647fe4c343aSmrg# Set func_basename_result to FILE with everything up to and including 648fe4c343aSmrg# the last / stripped. 649fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 650fe4c343aSmrg # If this shell supports suffix pattern removal, then use it to avoid 651fe4c343aSmrg # forking. Hide the definitions single quotes in case the shell chokes 652fe4c343aSmrg # on unsupported syntax... 653fe4c343aSmrg _b='func_basename_result=${1##*/}' 654fe4c343aSmrg _d='case $1 in 655fe4c343aSmrg */*) func_dirname_result=${1%/*}$2 ;; 656fe4c343aSmrg * ) func_dirname_result=$3 ;; 657fe4c343aSmrg esac' 658fe4c343aSmrg 659fe4c343aSmrgelse 660fe4c343aSmrg # ...otherwise fall back to using sed. 661fe4c343aSmrg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 662fe4c343aSmrg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 663fe4c343aSmrg if test "X$func_dirname_result" = "X$1"; then 664fe4c343aSmrg func_dirname_result=$3 665fe4c343aSmrg else 666fe4c343aSmrg func_append func_dirname_result "$2" 667fe4c343aSmrg fi' 668fe4c343aSmrgfi 669fe4c343aSmrg 670fe4c343aSmrgeval 'func_basename () 671fe4c343aSmrg{ 672fe4c343aSmrg $debug_cmd 673fe4c343aSmrg 674fe4c343aSmrg '"$_b"' 675fe4c343aSmrg}' 676fe4c343aSmrg 677fe4c343aSmrg 678fe4c343aSmrg# func_dirname FILE APPEND NONDIR_REPLACEMENT 679fe4c343aSmrg# ------------------------------------------- 680fe4c343aSmrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 681fe4c343aSmrg# otherwise set result to NONDIR_REPLACEMENT. 682fe4c343aSmrgeval 'func_dirname () 683fe4c343aSmrg{ 684fe4c343aSmrg $debug_cmd 685fe4c343aSmrg 686fe4c343aSmrg '"$_d"' 687fe4c343aSmrg}' 688fe4c343aSmrg 689fe4c343aSmrg 690fe4c343aSmrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 691fe4c343aSmrg# -------------------------------------------------------- 692fe4c343aSmrg# Perform func_basename and func_dirname in a single function 693fe4c343aSmrg# call: 694fe4c343aSmrg# dirname: Compute the dirname of FILE. If nonempty, 695fe4c343aSmrg# add APPEND to the result, otherwise set result 696fe4c343aSmrg# to NONDIR_REPLACEMENT. 697fe4c343aSmrg# value returned in "$func_dirname_result" 698fe4c343aSmrg# basename: Compute filename of FILE. 699fe4c343aSmrg# value retuned in "$func_basename_result" 700fe4c343aSmrg# For efficiency, we do not delegate to the functions above but instead 701fe4c343aSmrg# duplicate the functionality here. 702fe4c343aSmrgeval 'func_dirname_and_basename () 703fe4c343aSmrg{ 704fe4c343aSmrg $debug_cmd 705fe4c343aSmrg 706fe4c343aSmrg '"$_b"' 707fe4c343aSmrg '"$_d"' 708fe4c343aSmrg}' 709fe4c343aSmrg 710fe4c343aSmrg 711fe4c343aSmrg# func_echo ARG... 712fe4c343aSmrg# ---------------- 713fe4c343aSmrg# Echo program name prefixed message. 714fe4c343aSmrgfunc_echo () 715fe4c343aSmrg{ 716fe4c343aSmrg $debug_cmd 717fe4c343aSmrg 718fe4c343aSmrg _G_message=$* 719fe4c343aSmrg 720fe4c343aSmrg func_echo_IFS=$IFS 721fe4c343aSmrg IFS=$nl 722fe4c343aSmrg for _G_line in $_G_message; do 723fe4c343aSmrg IFS=$func_echo_IFS 724fe4c343aSmrg $ECHO "$progname: $_G_line" 725fe4c343aSmrg done 726fe4c343aSmrg IFS=$func_echo_IFS 727fe4c343aSmrg} 728fe4c343aSmrg 729fe4c343aSmrg 730fe4c343aSmrg# func_echo_all ARG... 731fe4c343aSmrg# -------------------- 732fe4c343aSmrg# Invoke $ECHO with all args, space-separated. 733fe4c343aSmrgfunc_echo_all () 734fe4c343aSmrg{ 735fe4c343aSmrg $ECHO "$*" 736fe4c343aSmrg} 737fe4c343aSmrg 738fe4c343aSmrg 739fe4c343aSmrg# func_echo_infix_1 INFIX ARG... 740fe4c343aSmrg# ------------------------------ 741fe4c343aSmrg# Echo program name, followed by INFIX on the first line, with any 742fe4c343aSmrg# additional lines not showing INFIX. 743fe4c343aSmrgfunc_echo_infix_1 () 744fe4c343aSmrg{ 745fe4c343aSmrg $debug_cmd 746fe4c343aSmrg 747fe4c343aSmrg $require_term_colors 748fe4c343aSmrg 749fe4c343aSmrg _G_infix=$1; shift 750fe4c343aSmrg _G_indent=$_G_infix 751fe4c343aSmrg _G_prefix="$progname: $_G_infix: " 752fe4c343aSmrg _G_message=$* 753fe4c343aSmrg 754fe4c343aSmrg # Strip color escape sequences before counting printable length 755fe4c343aSmrg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 756fe4c343aSmrg do 757fe4c343aSmrg test -n "$_G_tc" && { 758fe4c343aSmrg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 759fe4c343aSmrg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 760fe4c343aSmrg } 761fe4c343aSmrg done 762fe4c343aSmrg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 763fe4c343aSmrg 764fe4c343aSmrg func_echo_infix_1_IFS=$IFS 765fe4c343aSmrg IFS=$nl 766fe4c343aSmrg for _G_line in $_G_message; do 767fe4c343aSmrg IFS=$func_echo_infix_1_IFS 768fe4c343aSmrg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 769fe4c343aSmrg _G_prefix=$_G_indent 770fe4c343aSmrg done 771fe4c343aSmrg IFS=$func_echo_infix_1_IFS 772fe4c343aSmrg} 773fe4c343aSmrg 774fe4c343aSmrg 775fe4c343aSmrg# func_error ARG... 776fe4c343aSmrg# ----------------- 777fe4c343aSmrg# Echo program name prefixed message to standard error. 778fe4c343aSmrgfunc_error () 779fe4c343aSmrg{ 780fe4c343aSmrg $debug_cmd 781fe4c343aSmrg 782fe4c343aSmrg $require_term_colors 783fe4c343aSmrg 784fe4c343aSmrg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 785fe4c343aSmrg} 786fe4c343aSmrg 787fe4c343aSmrg 788fe4c343aSmrg# func_fatal_error ARG... 789fe4c343aSmrg# ----------------------- 790fe4c343aSmrg# Echo program name prefixed message to standard error, and exit. 791fe4c343aSmrgfunc_fatal_error () 792fe4c343aSmrg{ 793fe4c343aSmrg $debug_cmd 794fe4c343aSmrg 795fe4c343aSmrg func_error "$*" 796fe4c343aSmrg exit $EXIT_FAILURE 797fe4c343aSmrg} 798fe4c343aSmrg 799fe4c343aSmrg 800fe4c343aSmrg# func_grep EXPRESSION FILENAME 801fe4c343aSmrg# ----------------------------- 802549e21daSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 803549e21daSmrgfunc_grep () 804549e21daSmrg{ 805fe4c343aSmrg $debug_cmd 806fe4c343aSmrg 807549e21daSmrg $GREP "$1" "$2" >/dev/null 2>&1 808549e21daSmrg} 809549e21daSmrg 810549e21daSmrg 811fe4c343aSmrg# func_len STRING 812fe4c343aSmrg# --------------- 813fe4c343aSmrg# Set func_len_result to the length of STRING. STRING may not 814fe4c343aSmrg# start with a hyphen. 815fe4c343aSmrg test -z "$_G_HAVE_XSI_OPS" \ 816fe4c343aSmrg && (eval 'x=a/b/c; 817fe4c343aSmrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 818fe4c343aSmrg && _G_HAVE_XSI_OPS=yes 819fe4c343aSmrg 820fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 821fe4c343aSmrg eval 'func_len () 822fe4c343aSmrg { 823fe4c343aSmrg $debug_cmd 824fe4c343aSmrg 825fe4c343aSmrg func_len_result=${#1} 826fe4c343aSmrg }' 827fe4c343aSmrgelse 828fe4c343aSmrg func_len () 829fe4c343aSmrg { 830fe4c343aSmrg $debug_cmd 831fe4c343aSmrg 832fe4c343aSmrg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 833fe4c343aSmrg } 834fe4c343aSmrgfi 835fe4c343aSmrg 836fe4c343aSmrg 837fe4c343aSmrg# func_mkdir_p DIRECTORY-PATH 838fe4c343aSmrg# --------------------------- 839549e21daSmrg# Make sure the entire path to DIRECTORY-PATH is available. 840549e21daSmrgfunc_mkdir_p () 841549e21daSmrg{ 842fe4c343aSmrg $debug_cmd 843549e21daSmrg 844fe4c343aSmrg _G_directory_path=$1 845fe4c343aSmrg _G_dir_list= 846549e21daSmrg 847fe4c343aSmrg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 848fe4c343aSmrg 849fe4c343aSmrg # Protect directory names starting with '-' 850fe4c343aSmrg case $_G_directory_path in 851fe4c343aSmrg -*) _G_directory_path=./$_G_directory_path ;; 852549e21daSmrg esac 853549e21daSmrg 854549e21daSmrg # While some portion of DIR does not yet exist... 855fe4c343aSmrg while test ! -d "$_G_directory_path"; do 856549e21daSmrg # ...make a list in topmost first order. Use a colon delimited 857549e21daSmrg # list incase some portion of path contains whitespace. 858fe4c343aSmrg _G_dir_list=$_G_directory_path:$_G_dir_list 859549e21daSmrg 860549e21daSmrg # If the last portion added has no slash in it, the list is done 861fe4c343aSmrg case $_G_directory_path in */*) ;; *) break ;; esac 862549e21daSmrg 863549e21daSmrg # ...otherwise throw away the child directory and loop 864fe4c343aSmrg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 865549e21daSmrg done 866fe4c343aSmrg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 867549e21daSmrg 868fe4c343aSmrg func_mkdir_p_IFS=$IFS; IFS=: 869fe4c343aSmrg for _G_dir in $_G_dir_list; do 870fe4c343aSmrg IFS=$func_mkdir_p_IFS 871fe4c343aSmrg # mkdir can fail with a 'File exist' error if two processes 872549e21daSmrg # try to create one of the directories concurrently. Don't 873549e21daSmrg # stop in that case! 874fe4c343aSmrg $MKDIR "$_G_dir" 2>/dev/null || : 875549e21daSmrg done 876fe4c343aSmrg IFS=$func_mkdir_p_IFS 877549e21daSmrg 878549e21daSmrg # Bail out if we (or some other process) failed to create a directory. 879fe4c343aSmrg test -d "$_G_directory_path" || \ 880fe4c343aSmrg func_fatal_error "Failed to create '$1'" 881549e21daSmrg fi 882549e21daSmrg} 883ba6a1819Smrg 884ba6a1819Smrg 885fe4c343aSmrg# func_mktempdir [BASENAME] 886fe4c343aSmrg# ------------------------- 887ba6a1819Smrg# Make a temporary directory that won't clash with other running 888ba6a1819Smrg# libtool processes, and avoids race conditions if possible. If 889fe4c343aSmrg# given, BASENAME is the basename for that directory. 890ba6a1819Smrgfunc_mktempdir () 891ba6a1819Smrg{ 892fe4c343aSmrg $debug_cmd 893fe4c343aSmrg 894fe4c343aSmrg _G_template=${TMPDIR-/tmp}/${1-$progname} 895ba6a1819Smrg 896fe4c343aSmrg if test : = "$opt_dry_run"; then 897ba6a1819Smrg # Return a directory name, but don't create it in dry-run mode 898fe4c343aSmrg _G_tmpdir=$_G_template-$$ 899ba6a1819Smrg else 900ba6a1819Smrg 901ba6a1819Smrg # If mktemp works, use that first and foremost 902fe4c343aSmrg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 903ba6a1819Smrg 904fe4c343aSmrg if test ! -d "$_G_tmpdir"; then 905549e21daSmrg # Failing that, at least try and use $RANDOM to avoid a race 906fe4c343aSmrg _G_tmpdir=$_G_template-${RANDOM-0}$$ 907ba6a1819Smrg 908fe4c343aSmrg func_mktempdir_umask=`umask` 909549e21daSmrg umask 0077 910fe4c343aSmrg $MKDIR "$_G_tmpdir" 911fe4c343aSmrg umask $func_mktempdir_umask 912ba6a1819Smrg fi 913ba6a1819Smrg 914ba6a1819Smrg # If we're not in dry-run mode, bomb out on failure 915fe4c343aSmrg test -d "$_G_tmpdir" || \ 916fe4c343aSmrg func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 917fe4c343aSmrg fi 918fe4c343aSmrg 919fe4c343aSmrg $ECHO "$_G_tmpdir" 920fe4c343aSmrg} 921fe4c343aSmrg 922fe4c343aSmrg 923fe4c343aSmrg# func_normal_abspath PATH 924fe4c343aSmrg# ------------------------ 925fe4c343aSmrg# Remove doubled-up and trailing slashes, "." path components, 926fe4c343aSmrg# and cancel out any ".." path components in PATH after making 927fe4c343aSmrg# it an absolute path. 928fe4c343aSmrgfunc_normal_abspath () 929fe4c343aSmrg{ 930fe4c343aSmrg $debug_cmd 931fe4c343aSmrg 932fe4c343aSmrg # These SED scripts presuppose an absolute path with a trailing slash. 933fe4c343aSmrg _G_pathcar='s|^/\([^/]*\).*$|\1|' 934fe4c343aSmrg _G_pathcdr='s|^/[^/]*||' 935fe4c343aSmrg _G_removedotparts=':dotsl 936fe4c343aSmrg s|/\./|/|g 937fe4c343aSmrg t dotsl 938fe4c343aSmrg s|/\.$|/|' 939fe4c343aSmrg _G_collapseslashes='s|/\{1,\}|/|g' 940fe4c343aSmrg _G_finalslash='s|/*$|/|' 941fe4c343aSmrg 942fe4c343aSmrg # Start from root dir and reassemble the path. 943fe4c343aSmrg func_normal_abspath_result= 944fe4c343aSmrg func_normal_abspath_tpath=$1 945fe4c343aSmrg func_normal_abspath_altnamespace= 946fe4c343aSmrg case $func_normal_abspath_tpath in 947fe4c343aSmrg "") 948fe4c343aSmrg # Empty path, that just means $cwd. 949fe4c343aSmrg func_stripname '' '/' "`pwd`" 950fe4c343aSmrg func_normal_abspath_result=$func_stripname_result 951fe4c343aSmrg return 952fe4c343aSmrg ;; 953fe4c343aSmrg # The next three entries are used to spot a run of precisely 954fe4c343aSmrg # two leading slashes without using negated character classes; 955fe4c343aSmrg # we take advantage of case's first-match behaviour. 956fe4c343aSmrg ///*) 957fe4c343aSmrg # Unusual form of absolute path, do nothing. 958fe4c343aSmrg ;; 959fe4c343aSmrg //*) 960fe4c343aSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 961fe4c343aSmrg # and for example Cygwin uses it to access remote file shares 962fe4c343aSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 963fe4c343aSmrg func_normal_abspath_altnamespace=/ 964fe4c343aSmrg ;; 965fe4c343aSmrg /*) 966fe4c343aSmrg # Absolute path, do nothing. 967fe4c343aSmrg ;; 968fe4c343aSmrg *) 969fe4c343aSmrg # Relative path, prepend $cwd. 970fe4c343aSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 971fe4c343aSmrg ;; 972fe4c343aSmrg esac 973fe4c343aSmrg 974fe4c343aSmrg # Cancel out all the simple stuff to save iterations. We also want 975fe4c343aSmrg # the path to end with a slash for ease of parsing, so make sure 976fe4c343aSmrg # there is one (and only one) here. 977fe4c343aSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 978fe4c343aSmrg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 979fe4c343aSmrg while :; do 980fe4c343aSmrg # Processed it all yet? 981fe4c343aSmrg if test / = "$func_normal_abspath_tpath"; then 982fe4c343aSmrg # If we ascended to the root using ".." the result may be empty now. 983fe4c343aSmrg if test -z "$func_normal_abspath_result"; then 984fe4c343aSmrg func_normal_abspath_result=/ 985fe4c343aSmrg fi 986fe4c343aSmrg break 987fe4c343aSmrg fi 988fe4c343aSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 989fe4c343aSmrg -e "$_G_pathcar"` 990fe4c343aSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 991fe4c343aSmrg -e "$_G_pathcdr"` 992fe4c343aSmrg # Figure out what to do with it 993fe4c343aSmrg case $func_normal_abspath_tcomponent in 994fe4c343aSmrg "") 995fe4c343aSmrg # Trailing empty path component, ignore it. 996fe4c343aSmrg ;; 997fe4c343aSmrg ..) 998fe4c343aSmrg # Parent dir; strip last assembled component from result. 999fe4c343aSmrg func_dirname "$func_normal_abspath_result" 1000fe4c343aSmrg func_normal_abspath_result=$func_dirname_result 1001fe4c343aSmrg ;; 1002fe4c343aSmrg *) 1003fe4c343aSmrg # Actual path component, append it. 1004fe4c343aSmrg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1005fe4c343aSmrg ;; 1006fe4c343aSmrg esac 1007fe4c343aSmrg done 1008fe4c343aSmrg # Restore leading double-slash if one was found on entry. 1009fe4c343aSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1010fe4c343aSmrg} 1011fe4c343aSmrg 1012fe4c343aSmrg 1013fe4c343aSmrg# func_notquiet ARG... 1014fe4c343aSmrg# -------------------- 1015fe4c343aSmrg# Echo program name prefixed message only when not in quiet mode. 1016fe4c343aSmrgfunc_notquiet () 1017fe4c343aSmrg{ 1018fe4c343aSmrg $debug_cmd 1019fe4c343aSmrg 1020fe4c343aSmrg $opt_quiet || func_echo ${1+"$@"} 1021fe4c343aSmrg 1022fe4c343aSmrg # A bug in bash halts the script if the last line of a function 1023fe4c343aSmrg # fails when set -e is in force, so we need another command to 1024fe4c343aSmrg # work around that: 1025fe4c343aSmrg : 1026fe4c343aSmrg} 1027fe4c343aSmrg 1028fe4c343aSmrg 1029fe4c343aSmrg# func_relative_path SRCDIR DSTDIR 1030fe4c343aSmrg# -------------------------------- 1031fe4c343aSmrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1032fe4c343aSmrgfunc_relative_path () 1033fe4c343aSmrg{ 1034fe4c343aSmrg $debug_cmd 1035fe4c343aSmrg 1036fe4c343aSmrg func_relative_path_result= 1037fe4c343aSmrg func_normal_abspath "$1" 1038fe4c343aSmrg func_relative_path_tlibdir=$func_normal_abspath_result 1039fe4c343aSmrg func_normal_abspath "$2" 1040fe4c343aSmrg func_relative_path_tbindir=$func_normal_abspath_result 1041fe4c343aSmrg 1042fe4c343aSmrg # Ascend the tree starting from libdir 1043fe4c343aSmrg while :; do 1044fe4c343aSmrg # check if we have found a prefix of bindir 1045fe4c343aSmrg case $func_relative_path_tbindir in 1046fe4c343aSmrg $func_relative_path_tlibdir) 1047fe4c343aSmrg # found an exact match 1048fe4c343aSmrg func_relative_path_tcancelled= 1049fe4c343aSmrg break 1050fe4c343aSmrg ;; 1051fe4c343aSmrg $func_relative_path_tlibdir*) 1052fe4c343aSmrg # found a matching prefix 1053fe4c343aSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1054fe4c343aSmrg func_relative_path_tcancelled=$func_stripname_result 1055fe4c343aSmrg if test -z "$func_relative_path_result"; then 1056fe4c343aSmrg func_relative_path_result=. 1057fe4c343aSmrg fi 1058fe4c343aSmrg break 1059fe4c343aSmrg ;; 1060fe4c343aSmrg *) 1061fe4c343aSmrg func_dirname $func_relative_path_tlibdir 1062fe4c343aSmrg func_relative_path_tlibdir=$func_dirname_result 1063fe4c343aSmrg if test -z "$func_relative_path_tlibdir"; then 1064fe4c343aSmrg # Have to descend all the way to the root! 1065fe4c343aSmrg func_relative_path_result=../$func_relative_path_result 1066fe4c343aSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 1067fe4c343aSmrg break 1068fe4c343aSmrg fi 1069fe4c343aSmrg func_relative_path_result=../$func_relative_path_result 1070fe4c343aSmrg ;; 1071fe4c343aSmrg esac 1072fe4c343aSmrg done 1073fe4c343aSmrg 1074fe4c343aSmrg # Now calculate path; take care to avoid doubling-up slashes. 1075fe4c343aSmrg func_stripname '' '/' "$func_relative_path_result" 1076fe4c343aSmrg func_relative_path_result=$func_stripname_result 1077fe4c343aSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 1078fe4c343aSmrg if test -n "$func_stripname_result"; then 1079fe4c343aSmrg func_append func_relative_path_result "/$func_stripname_result" 1080fe4c343aSmrg fi 1081fe4c343aSmrg 1082fe4c343aSmrg # Normalisation. If bindir is libdir, return '.' else relative path. 1083fe4c343aSmrg if test -n "$func_relative_path_result"; then 1084fe4c343aSmrg func_stripname './' '' "$func_relative_path_result" 1085fe4c343aSmrg func_relative_path_result=$func_stripname_result 1086ba6a1819Smrg fi 1087ba6a1819Smrg 1088fe4c343aSmrg test -n "$func_relative_path_result" || func_relative_path_result=. 1089fe4c343aSmrg 1090fe4c343aSmrg : 1091fe4c343aSmrg} 1092fe4c343aSmrg 1093fe4c343aSmrg 1094fe4c343aSmrg# func_quote_for_eval ARG... 1095fe4c343aSmrg# -------------------------- 1096fe4c343aSmrg# Aesthetically quote ARGs to be evaled later. 1097fe4c343aSmrg# This function returns two values: 1098fe4c343aSmrg# i) func_quote_for_eval_result 1099fe4c343aSmrg# double-quoted, suitable for a subsequent eval 1100fe4c343aSmrg# ii) func_quote_for_eval_unquoted_result 1101fe4c343aSmrg# has all characters that are still active within double 1102fe4c343aSmrg# quotes backslashified. 1103fe4c343aSmrgfunc_quote_for_eval () 1104fe4c343aSmrg{ 1105fe4c343aSmrg $debug_cmd 1106fe4c343aSmrg 1107fe4c343aSmrg func_quote_for_eval_unquoted_result= 1108fe4c343aSmrg func_quote_for_eval_result= 1109fe4c343aSmrg while test 0 -lt $#; do 1110fe4c343aSmrg case $1 in 1111fe4c343aSmrg *[\\\`\"\$]*) 1112fe4c343aSmrg _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; 1113fe4c343aSmrg *) 1114fe4c343aSmrg _G_unquoted_arg=$1 ;; 1115fe4c343aSmrg esac 1116fe4c343aSmrg if test -n "$func_quote_for_eval_unquoted_result"; then 1117fe4c343aSmrg func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 1118fe4c343aSmrg else 1119fe4c343aSmrg func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 1120fe4c343aSmrg fi 1121fe4c343aSmrg 1122fe4c343aSmrg case $_G_unquoted_arg in 1123fe4c343aSmrg # Double-quote args containing shell metacharacters to delay 1124fe4c343aSmrg # word splitting, command substitution and variable expansion 1125fe4c343aSmrg # for a subsequent eval. 1126fe4c343aSmrg # Many Bourne shells cannot handle close brackets correctly 1127fe4c343aSmrg # in scan sets, so we specify it separately. 1128fe4c343aSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1129fe4c343aSmrg _G_quoted_arg=\"$_G_unquoted_arg\" 1130fe4c343aSmrg ;; 1131fe4c343aSmrg *) 1132fe4c343aSmrg _G_quoted_arg=$_G_unquoted_arg 1133fe4c343aSmrg ;; 1134fe4c343aSmrg esac 1135fe4c343aSmrg 1136fe4c343aSmrg if test -n "$func_quote_for_eval_result"; then 1137fe4c343aSmrg func_append func_quote_for_eval_result " $_G_quoted_arg" 1138fe4c343aSmrg else 1139fe4c343aSmrg func_append func_quote_for_eval_result "$_G_quoted_arg" 1140fe4c343aSmrg fi 1141fe4c343aSmrg shift 1142fe4c343aSmrg done 1143fe4c343aSmrg} 1144fe4c343aSmrg 1145fe4c343aSmrg 1146fe4c343aSmrg# func_quote_for_expand ARG 1147fe4c343aSmrg# ------------------------- 1148fe4c343aSmrg# Aesthetically quote ARG to be evaled later; same as above, 1149fe4c343aSmrg# but do not quote variable references. 1150fe4c343aSmrgfunc_quote_for_expand () 1151fe4c343aSmrg{ 1152fe4c343aSmrg $debug_cmd 1153fe4c343aSmrg 1154fe4c343aSmrg case $1 in 1155fe4c343aSmrg *[\\\`\"]*) 1156fe4c343aSmrg _G_arg=`$ECHO "$1" | $SED \ 1157fe4c343aSmrg -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 1158fe4c343aSmrg *) 1159fe4c343aSmrg _G_arg=$1 ;; 1160fe4c343aSmrg esac 1161fe4c343aSmrg 1162fe4c343aSmrg case $_G_arg in 1163fe4c343aSmrg # Double-quote args containing shell metacharacters to delay 1164fe4c343aSmrg # word splitting and command substitution for a subsequent eval. 1165fe4c343aSmrg # Many Bourne shells cannot handle close brackets correctly 1166fe4c343aSmrg # in scan sets, so we specify it separately. 1167fe4c343aSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1168fe4c343aSmrg _G_arg=\"$_G_arg\" 1169fe4c343aSmrg ;; 1170fe4c343aSmrg esac 1171fe4c343aSmrg 1172fe4c343aSmrg func_quote_for_expand_result=$_G_arg 1173fe4c343aSmrg} 1174fe4c343aSmrg 1175fe4c343aSmrg 1176fe4c343aSmrg# func_stripname PREFIX SUFFIX NAME 1177fe4c343aSmrg# --------------------------------- 1178fe4c343aSmrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1179fe4c343aSmrg# PREFIX and SUFFIX must not contain globbing or regex special 1180fe4c343aSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading 1181fe4c343aSmrg# dot (in which case that matches only a dot). 1182fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 1183fe4c343aSmrg eval 'func_stripname () 1184fe4c343aSmrg { 1185fe4c343aSmrg $debug_cmd 1186fe4c343aSmrg 1187fe4c343aSmrg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1188fe4c343aSmrg # positional parameters, so assign one to ordinary variable first. 1189fe4c343aSmrg func_stripname_result=$3 1190fe4c343aSmrg func_stripname_result=${func_stripname_result#"$1"} 1191fe4c343aSmrg func_stripname_result=${func_stripname_result%"$2"} 1192fe4c343aSmrg }' 1193fe4c343aSmrgelse 1194fe4c343aSmrg func_stripname () 1195fe4c343aSmrg { 1196fe4c343aSmrg $debug_cmd 1197fe4c343aSmrg 1198fe4c343aSmrg case $2 in 1199fe4c343aSmrg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1200fe4c343aSmrg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1201fe4c343aSmrg esac 1202fe4c343aSmrg } 1203fe4c343aSmrgfi 1204fe4c343aSmrg 1205fe4c343aSmrg 1206fe4c343aSmrg# func_show_eval CMD [FAIL_EXP] 1207fe4c343aSmrg# ----------------------------- 1208fe4c343aSmrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1209fe4c343aSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1210fe4c343aSmrg# is given, then evaluate it. 1211fe4c343aSmrgfunc_show_eval () 1212fe4c343aSmrg{ 1213fe4c343aSmrg $debug_cmd 1214fe4c343aSmrg 1215fe4c343aSmrg _G_cmd=$1 1216fe4c343aSmrg _G_fail_exp=${2-':'} 1217fe4c343aSmrg 1218fe4c343aSmrg func_quote_for_expand "$_G_cmd" 1219fe4c343aSmrg eval "func_notquiet $func_quote_for_expand_result" 1220fe4c343aSmrg 1221fe4c343aSmrg $opt_dry_run || { 1222fe4c343aSmrg eval "$_G_cmd" 1223fe4c343aSmrg _G_status=$? 1224fe4c343aSmrg if test 0 -ne "$_G_status"; then 1225fe4c343aSmrg eval "(exit $_G_status); $_G_fail_exp" 1226fe4c343aSmrg fi 1227fe4c343aSmrg } 1228fe4c343aSmrg} 1229fe4c343aSmrg 1230fe4c343aSmrg 1231fe4c343aSmrg# func_show_eval_locale CMD [FAIL_EXP] 1232fe4c343aSmrg# ------------------------------------ 1233fe4c343aSmrg# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1234fe4c343aSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1235fe4c343aSmrg# is given, then evaluate it. Use the saved locale for evaluation. 1236fe4c343aSmrgfunc_show_eval_locale () 1237fe4c343aSmrg{ 1238fe4c343aSmrg $debug_cmd 1239fe4c343aSmrg 1240fe4c343aSmrg _G_cmd=$1 1241fe4c343aSmrg _G_fail_exp=${2-':'} 1242fe4c343aSmrg 1243fe4c343aSmrg $opt_quiet || { 1244fe4c343aSmrg func_quote_for_expand "$_G_cmd" 1245fe4c343aSmrg eval "func_echo $func_quote_for_expand_result" 1246fe4c343aSmrg } 1247fe4c343aSmrg 1248fe4c343aSmrg $opt_dry_run || { 1249fe4c343aSmrg eval "$_G_user_locale 1250fe4c343aSmrg $_G_cmd" 1251fe4c343aSmrg _G_status=$? 1252fe4c343aSmrg eval "$_G_safe_locale" 1253fe4c343aSmrg if test 0 -ne "$_G_status"; then 1254fe4c343aSmrg eval "(exit $_G_status); $_G_fail_exp" 1255fe4c343aSmrg fi 1256fe4c343aSmrg } 1257fe4c343aSmrg} 1258fe4c343aSmrg 1259fe4c343aSmrg 1260fe4c343aSmrg# func_tr_sh 1261fe4c343aSmrg# ---------- 1262fe4c343aSmrg# Turn $1 into a string suitable for a shell variable name. 1263fe4c343aSmrg# Result is stored in $func_tr_sh_result. All characters 1264fe4c343aSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1265fe4c343aSmrg# if $1 begins with a digit, a '_' is prepended as well. 1266fe4c343aSmrgfunc_tr_sh () 1267fe4c343aSmrg{ 1268fe4c343aSmrg $debug_cmd 1269fe4c343aSmrg 1270fe4c343aSmrg case $1 in 1271fe4c343aSmrg [0-9]* | *[!a-zA-Z0-9_]*) 1272fe4c343aSmrg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1273fe4c343aSmrg ;; 1274fe4c343aSmrg * ) 1275fe4c343aSmrg func_tr_sh_result=$1 1276fe4c343aSmrg ;; 1277fe4c343aSmrg esac 1278fe4c343aSmrg} 1279fe4c343aSmrg 1280fe4c343aSmrg 1281fe4c343aSmrg# func_verbose ARG... 1282fe4c343aSmrg# ------------------- 1283fe4c343aSmrg# Echo program name prefixed message in verbose mode only. 1284fe4c343aSmrgfunc_verbose () 1285fe4c343aSmrg{ 1286fe4c343aSmrg $debug_cmd 1287fe4c343aSmrg 1288fe4c343aSmrg $opt_verbose && func_echo "$*" 1289fe4c343aSmrg 1290fe4c343aSmrg : 1291fe4c343aSmrg} 1292fe4c343aSmrg 1293fe4c343aSmrg 1294fe4c343aSmrg# func_warn_and_continue ARG... 1295fe4c343aSmrg# ----------------------------- 1296fe4c343aSmrg# Echo program name prefixed warning message to standard error. 1297fe4c343aSmrgfunc_warn_and_continue () 1298fe4c343aSmrg{ 1299fe4c343aSmrg $debug_cmd 1300fe4c343aSmrg 1301fe4c343aSmrg $require_term_colors 1302fe4c343aSmrg 1303fe4c343aSmrg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1304fe4c343aSmrg} 1305fe4c343aSmrg 1306fe4c343aSmrg 1307fe4c343aSmrg# func_warning CATEGORY ARG... 1308fe4c343aSmrg# ---------------------------- 1309fe4c343aSmrg# Echo program name prefixed warning message to standard error. Warning 1310fe4c343aSmrg# messages can be filtered according to CATEGORY, where this function 1311fe4c343aSmrg# elides messages where CATEGORY is not listed in the global variable 1312fe4c343aSmrg# 'opt_warning_types'. 1313fe4c343aSmrgfunc_warning () 1314fe4c343aSmrg{ 1315fe4c343aSmrg $debug_cmd 1316fe4c343aSmrg 1317fe4c343aSmrg # CATEGORY must be in the warning_categories list! 1318fe4c343aSmrg case " $warning_categories " in 1319fe4c343aSmrg *" $1 "*) ;; 1320fe4c343aSmrg *) func_internal_error "invalid warning category '$1'" ;; 1321fe4c343aSmrg esac 1322fe4c343aSmrg 1323fe4c343aSmrg _G_category=$1 1324fe4c343aSmrg shift 1325fe4c343aSmrg 1326fe4c343aSmrg case " $opt_warning_types " in 1327fe4c343aSmrg *" $_G_category "*) $warning_func ${1+"$@"} ;; 1328fe4c343aSmrg esac 1329fe4c343aSmrg} 1330fe4c343aSmrg 1331fe4c343aSmrg 1332fe4c343aSmrg# func_sort_ver VER1 VER2 1333fe4c343aSmrg# ----------------------- 1334fe4c343aSmrg# 'sort -V' is not generally available. 1335fe4c343aSmrg# Note this deviates from the version comparison in automake 1336fe4c343aSmrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1337fe4c343aSmrg# but this should suffice as we won't be specifying old 1338fe4c343aSmrg# version formats or redundant trailing .0 in bootstrap.conf. 1339fe4c343aSmrg# If we did want full compatibility then we should probably 1340fe4c343aSmrg# use m4_version_compare from autoconf. 1341fe4c343aSmrgfunc_sort_ver () 1342fe4c343aSmrg{ 1343fe4c343aSmrg $debug_cmd 1344fe4c343aSmrg 1345fe4c343aSmrg printf '%s\n%s\n' "$1" "$2" \ 1346fe4c343aSmrg | 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 1347fe4c343aSmrg} 1348fe4c343aSmrg 1349fe4c343aSmrg# func_lt_ver PREV CURR 1350fe4c343aSmrg# --------------------- 1351fe4c343aSmrg# Return true if PREV and CURR are in the correct order according to 1352fe4c343aSmrg# func_sort_ver, otherwise false. Use it like this: 1353fe4c343aSmrg# 1354fe4c343aSmrg# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1355fe4c343aSmrgfunc_lt_ver () 1356fe4c343aSmrg{ 1357fe4c343aSmrg $debug_cmd 1358fe4c343aSmrg 1359fe4c343aSmrg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1360fe4c343aSmrg} 1361fe4c343aSmrg 1362fe4c343aSmrg 1363fe4c343aSmrg# Local variables: 1364fe4c343aSmrg# mode: shell-script 1365fe4c343aSmrg# sh-indentation: 2 1366fe4c343aSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 1367fe4c343aSmrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1368fe4c343aSmrg# time-stamp-time-zone: "UTC" 1369fe4c343aSmrg# End: 1370fe4c343aSmrg#! /bin/sh 1371fe4c343aSmrg 1372fe4c343aSmrg# Set a version string for this script. 1373fe4c343aSmrgscriptversion=2014-01-07.03; # UTC 1374fe4c343aSmrg 1375fe4c343aSmrg# A portable, pluggable option parser for Bourne shell. 1376fe4c343aSmrg# Written by Gary V. Vaughan, 2010 1377fe4c343aSmrg 1378fe4c343aSmrg# Copyright (C) 2010-2015 Free Software Foundation, Inc. 1379fe4c343aSmrg# This is free software; see the source for copying conditions. There is NO 1380fe4c343aSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1381fe4c343aSmrg 1382fe4c343aSmrg# This program is free software: you can redistribute it and/or modify 1383fe4c343aSmrg# it under the terms of the GNU General Public License as published by 1384fe4c343aSmrg# the Free Software Foundation, either version 3 of the License, or 1385fe4c343aSmrg# (at your option) any later version. 1386fe4c343aSmrg 1387fe4c343aSmrg# This program is distributed in the hope that it will be useful, 1388fe4c343aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of 1389fe4c343aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1390fe4c343aSmrg# GNU General Public License for more details. 1391fe4c343aSmrg 1392fe4c343aSmrg# You should have received a copy of the GNU General Public License 1393fe4c343aSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>. 1394fe4c343aSmrg 1395fe4c343aSmrg# Please report bugs or propose patches to gary@gnu.org. 1396fe4c343aSmrg 1397fe4c343aSmrg 1398fe4c343aSmrg## ------ ## 1399fe4c343aSmrg## Usage. ## 1400fe4c343aSmrg## ------ ## 1401fe4c343aSmrg 1402fe4c343aSmrg# This file is a library for parsing options in your shell scripts along 1403fe4c343aSmrg# with assorted other useful supporting features that you can make use 1404fe4c343aSmrg# of too. 1405fe4c343aSmrg# 1406fe4c343aSmrg# For the simplest scripts you might need only: 1407fe4c343aSmrg# 1408fe4c343aSmrg# #!/bin/sh 1409fe4c343aSmrg# . relative/path/to/funclib.sh 1410fe4c343aSmrg# . relative/path/to/options-parser 1411fe4c343aSmrg# scriptversion=1.0 1412fe4c343aSmrg# func_options ${1+"$@"} 1413fe4c343aSmrg# eval set dummy "$func_options_result"; shift 1414fe4c343aSmrg# ...rest of your script... 1415fe4c343aSmrg# 1416fe4c343aSmrg# In order for the '--version' option to work, you will need to have a 1417fe4c343aSmrg# suitably formatted comment like the one at the top of this file 1418fe4c343aSmrg# starting with '# Written by ' and ending with '# warranty; '. 1419fe4c343aSmrg# 1420fe4c343aSmrg# For '-h' and '--help' to work, you will also need a one line 1421fe4c343aSmrg# description of your script's purpose in a comment directly above the 1422fe4c343aSmrg# '# Written by ' line, like the one at the top of this file. 1423fe4c343aSmrg# 1424fe4c343aSmrg# The default options also support '--debug', which will turn on shell 1425fe4c343aSmrg# execution tracing (see the comment above debug_cmd below for another 1426fe4c343aSmrg# use), and '--verbose' and the func_verbose function to allow your script 1427fe4c343aSmrg# to display verbose messages only when your user has specified 1428fe4c343aSmrg# '--verbose'. 1429fe4c343aSmrg# 1430fe4c343aSmrg# After sourcing this file, you can plug processing for additional 1431fe4c343aSmrg# options by amending the variables from the 'Configuration' section 1432fe4c343aSmrg# below, and following the instructions in the 'Option parsing' 1433fe4c343aSmrg# section further down. 1434fe4c343aSmrg 1435fe4c343aSmrg## -------------- ## 1436fe4c343aSmrg## Configuration. ## 1437fe4c343aSmrg## -------------- ## 1438fe4c343aSmrg 1439fe4c343aSmrg# You should override these variables in your script after sourcing this 1440fe4c343aSmrg# file so that they reflect the customisations you have added to the 1441fe4c343aSmrg# option parser. 1442fe4c343aSmrg 1443fe4c343aSmrg# The usage line for option parsing errors and the start of '-h' and 1444fe4c343aSmrg# '--help' output messages. You can embed shell variables for delayed 1445fe4c343aSmrg# expansion at the time the message is displayed, but you will need to 1446fe4c343aSmrg# quote other shell meta-characters carefully to prevent them being 1447fe4c343aSmrg# expanded when the contents are evaled. 1448fe4c343aSmrgusage='$progpath [OPTION]...' 1449fe4c343aSmrg 1450fe4c343aSmrg# Short help message in response to '-h' and '--help'. Add to this or 1451fe4c343aSmrg# override it after sourcing this library to reflect the full set of 1452fe4c343aSmrg# options your script accepts. 1453fe4c343aSmrgusage_message="\ 1454fe4c343aSmrg --debug enable verbose shell tracing 1455fe4c343aSmrg -W, --warnings=CATEGORY 1456fe4c343aSmrg report the warnings falling in CATEGORY [all] 1457fe4c343aSmrg -v, --verbose verbosely report processing 1458fe4c343aSmrg --version print version information and exit 1459fe4c343aSmrg -h, --help print short or long help message and exit 1460fe4c343aSmrg" 1461fe4c343aSmrg 1462fe4c343aSmrg# Additional text appended to 'usage_message' in response to '--help'. 1463fe4c343aSmrglong_help_message=" 1464fe4c343aSmrgWarning categories include: 1465fe4c343aSmrg 'all' show all warnings 1466fe4c343aSmrg 'none' turn off all the warnings 1467fe4c343aSmrg 'error' warnings are treated as fatal errors" 1468fe4c343aSmrg 1469fe4c343aSmrg# Help message printed before fatal option parsing errors. 1470fe4c343aSmrgfatal_help="Try '\$progname --help' for more information." 1471fe4c343aSmrg 1472fe4c343aSmrg 1473fe4c343aSmrg 1474fe4c343aSmrg## ------------------------- ## 1475fe4c343aSmrg## Hook function management. ## 1476fe4c343aSmrg## ------------------------- ## 1477fe4c343aSmrg 1478fe4c343aSmrg# This section contains functions for adding, removing, and running hooks 1479fe4c343aSmrg# to the main code. A hook is just a named list of of function, that can 1480fe4c343aSmrg# be run in order later on. 1481fe4c343aSmrg 1482fe4c343aSmrg# func_hookable FUNC_NAME 1483fe4c343aSmrg# ----------------------- 1484fe4c343aSmrg# Declare that FUNC_NAME will run hooks added with 1485fe4c343aSmrg# 'func_add_hook FUNC_NAME ...'. 1486fe4c343aSmrgfunc_hookable () 1487fe4c343aSmrg{ 1488fe4c343aSmrg $debug_cmd 1489fe4c343aSmrg 1490fe4c343aSmrg func_append hookable_fns " $1" 1491fe4c343aSmrg} 1492fe4c343aSmrg 1493fe4c343aSmrg 1494fe4c343aSmrg# func_add_hook FUNC_NAME HOOK_FUNC 1495fe4c343aSmrg# --------------------------------- 1496fe4c343aSmrg# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1497fe4c343aSmrg# first have been declared "hookable" by a call to 'func_hookable'. 1498fe4c343aSmrgfunc_add_hook () 1499fe4c343aSmrg{ 1500fe4c343aSmrg $debug_cmd 1501fe4c343aSmrg 1502fe4c343aSmrg case " $hookable_fns " in 1503fe4c343aSmrg *" $1 "*) ;; 1504fe4c343aSmrg *) func_fatal_error "'$1' does not accept hook functions." ;; 1505fe4c343aSmrg esac 1506fe4c343aSmrg 1507fe4c343aSmrg eval func_append ${1}_hooks '" $2"' 1508fe4c343aSmrg} 1509fe4c343aSmrg 1510fe4c343aSmrg 1511fe4c343aSmrg# func_remove_hook FUNC_NAME HOOK_FUNC 1512fe4c343aSmrg# ------------------------------------ 1513fe4c343aSmrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 1514fe4c343aSmrgfunc_remove_hook () 1515fe4c343aSmrg{ 1516fe4c343aSmrg $debug_cmd 1517fe4c343aSmrg 1518fe4c343aSmrg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1519fe4c343aSmrg} 1520fe4c343aSmrg 1521fe4c343aSmrg 1522fe4c343aSmrg# func_run_hooks FUNC_NAME [ARG]... 1523fe4c343aSmrg# --------------------------------- 1524fe4c343aSmrg# Run all hook functions registered to FUNC_NAME. 1525fe4c343aSmrg# It is assumed that the list of hook functions contains nothing more 1526fe4c343aSmrg# than a whitespace-delimited list of legal shell function names, and 1527fe4c343aSmrg# no effort is wasted trying to catch shell meta-characters or preserve 1528fe4c343aSmrg# whitespace. 1529fe4c343aSmrgfunc_run_hooks () 1530fe4c343aSmrg{ 1531fe4c343aSmrg $debug_cmd 1532fe4c343aSmrg 1533fe4c343aSmrg case " $hookable_fns " in 1534fe4c343aSmrg *" $1 "*) ;; 1535fe4c343aSmrg *) func_fatal_error "'$1' does not support hook funcions.n" ;; 1536fe4c343aSmrg esac 1537fe4c343aSmrg 1538fe4c343aSmrg eval _G_hook_fns=\$$1_hooks; shift 1539fe4c343aSmrg 1540fe4c343aSmrg for _G_hook in $_G_hook_fns; do 1541fe4c343aSmrg eval $_G_hook '"$@"' 1542fe4c343aSmrg 1543fe4c343aSmrg # store returned options list back into positional 1544fe4c343aSmrg # parameters for next 'cmd' execution. 1545fe4c343aSmrg eval _G_hook_result=\$${_G_hook}_result 1546fe4c343aSmrg eval set dummy "$_G_hook_result"; shift 1547fe4c343aSmrg done 1548fe4c343aSmrg 1549fe4c343aSmrg func_quote_for_eval ${1+"$@"} 1550fe4c343aSmrg func_run_hooks_result=$func_quote_for_eval_result 1551fe4c343aSmrg} 1552fe4c343aSmrg 1553fe4c343aSmrg 1554fe4c343aSmrg 1555fe4c343aSmrg## --------------- ## 1556fe4c343aSmrg## Option parsing. ## 1557fe4c343aSmrg## --------------- ## 1558fe4c343aSmrg 1559fe4c343aSmrg# In order to add your own option parsing hooks, you must accept the 1560fe4c343aSmrg# full positional parameter list in your hook function, remove any 1561fe4c343aSmrg# options that you action, and then pass back the remaining unprocessed 1562fe4c343aSmrg# options in '<hooked_function_name>_result', escaped suitably for 1563fe4c343aSmrg# 'eval'. Like this: 1564fe4c343aSmrg# 1565fe4c343aSmrg# my_options_prep () 1566fe4c343aSmrg# { 1567fe4c343aSmrg# $debug_cmd 1568fe4c343aSmrg# 1569fe4c343aSmrg# # Extend the existing usage message. 1570fe4c343aSmrg# usage_message=$usage_message' 1571fe4c343aSmrg# -s, --silent don'\''t print informational messages 1572fe4c343aSmrg# ' 1573fe4c343aSmrg# 1574fe4c343aSmrg# func_quote_for_eval ${1+"$@"} 1575fe4c343aSmrg# my_options_prep_result=$func_quote_for_eval_result 1576fe4c343aSmrg# } 1577fe4c343aSmrg# func_add_hook func_options_prep my_options_prep 1578fe4c343aSmrg# 1579fe4c343aSmrg# 1580fe4c343aSmrg# my_silent_option () 1581fe4c343aSmrg# { 1582fe4c343aSmrg# $debug_cmd 1583fe4c343aSmrg# 1584fe4c343aSmrg# # Note that for efficiency, we parse as many options as we can 1585fe4c343aSmrg# # recognise in a loop before passing the remainder back to the 1586fe4c343aSmrg# # caller on the first unrecognised argument we encounter. 1587fe4c343aSmrg# while test $# -gt 0; do 1588fe4c343aSmrg# opt=$1; shift 1589fe4c343aSmrg# case $opt in 1590fe4c343aSmrg# --silent|-s) opt_silent=: ;; 1591fe4c343aSmrg# # Separate non-argument short options: 1592fe4c343aSmrg# -s*) func_split_short_opt "$_G_opt" 1593fe4c343aSmrg# set dummy "$func_split_short_opt_name" \ 1594fe4c343aSmrg# "-$func_split_short_opt_arg" ${1+"$@"} 1595fe4c343aSmrg# shift 1596fe4c343aSmrg# ;; 1597fe4c343aSmrg# *) set dummy "$_G_opt" "$*"; shift; break ;; 1598fe4c343aSmrg# esac 1599fe4c343aSmrg# done 1600fe4c343aSmrg# 1601fe4c343aSmrg# func_quote_for_eval ${1+"$@"} 1602fe4c343aSmrg# my_silent_option_result=$func_quote_for_eval_result 1603fe4c343aSmrg# } 1604fe4c343aSmrg# func_add_hook func_parse_options my_silent_option 1605fe4c343aSmrg# 1606fe4c343aSmrg# 1607fe4c343aSmrg# my_option_validation () 1608fe4c343aSmrg# { 1609fe4c343aSmrg# $debug_cmd 1610fe4c343aSmrg# 1611fe4c343aSmrg# $opt_silent && $opt_verbose && func_fatal_help "\ 1612fe4c343aSmrg# '--silent' and '--verbose' options are mutually exclusive." 1613fe4c343aSmrg# 1614fe4c343aSmrg# func_quote_for_eval ${1+"$@"} 1615fe4c343aSmrg# my_option_validation_result=$func_quote_for_eval_result 1616fe4c343aSmrg# } 1617fe4c343aSmrg# func_add_hook func_validate_options my_option_validation 1618fe4c343aSmrg# 1619fe4c343aSmrg# You'll alse need to manually amend $usage_message to reflect the extra 1620fe4c343aSmrg# options you parse. It's preferable to append if you can, so that 1621fe4c343aSmrg# multiple option parsing hooks can be added safely. 1622fe4c343aSmrg 1623fe4c343aSmrg 1624fe4c343aSmrg# func_options [ARG]... 1625fe4c343aSmrg# --------------------- 1626fe4c343aSmrg# All the functions called inside func_options are hookable. See the 1627fe4c343aSmrg# individual implementations for details. 1628fe4c343aSmrgfunc_hookable func_options 1629fe4c343aSmrgfunc_options () 1630fe4c343aSmrg{ 1631fe4c343aSmrg $debug_cmd 1632fe4c343aSmrg 1633fe4c343aSmrg func_options_prep ${1+"$@"} 1634fe4c343aSmrg eval func_parse_options \ 1635fe4c343aSmrg ${func_options_prep_result+"$func_options_prep_result"} 1636fe4c343aSmrg eval func_validate_options \ 1637fe4c343aSmrg ${func_parse_options_result+"$func_parse_options_result"} 1638fe4c343aSmrg 1639fe4c343aSmrg eval func_run_hooks func_options \ 1640fe4c343aSmrg ${func_validate_options_result+"$func_validate_options_result"} 1641fe4c343aSmrg 1642fe4c343aSmrg # save modified positional parameters for caller 1643fe4c343aSmrg func_options_result=$func_run_hooks_result 1644ba6a1819Smrg} 1645ba6a1819Smrg 1646ba6a1819Smrg 1647fe4c343aSmrg# func_options_prep [ARG]... 1648fe4c343aSmrg# -------------------------- 1649fe4c343aSmrg# All initialisations required before starting the option parse loop. 1650fe4c343aSmrg# Note that when calling hook functions, we pass through the list of 1651fe4c343aSmrg# positional parameters. If a hook function modifies that list, and 1652fe4c343aSmrg# needs to propogate that back to rest of this script, then the complete 1653fe4c343aSmrg# modified list must be put in 'func_run_hooks_result' before 1654fe4c343aSmrg# returning. 1655fe4c343aSmrgfunc_hookable func_options_prep 1656fe4c343aSmrgfunc_options_prep () 1657ba6a1819Smrg{ 1658fe4c343aSmrg $debug_cmd 1659549e21daSmrg 1660fe4c343aSmrg # Option defaults: 1661fe4c343aSmrg opt_verbose=false 1662fe4c343aSmrg opt_warning_types= 1663fe4c343aSmrg 1664fe4c343aSmrg func_run_hooks func_options_prep ${1+"$@"} 1665fe4c343aSmrg 1666fe4c343aSmrg # save modified positional parameters for caller 1667fe4c343aSmrg func_options_prep_result=$func_run_hooks_result 1668ba6a1819Smrg} 1669ba6a1819Smrg 1670ba6a1819Smrg 1671fe4c343aSmrg# func_parse_options [ARG]... 1672fe4c343aSmrg# --------------------------- 1673fe4c343aSmrg# The main option parsing loop. 1674fe4c343aSmrgfunc_hookable func_parse_options 1675fe4c343aSmrgfunc_parse_options () 1676ba6a1819Smrg{ 1677fe4c343aSmrg $debug_cmd 1678549e21daSmrg 1679fe4c343aSmrg func_parse_options_result= 1680549e21daSmrg 1681fe4c343aSmrg # this just eases exit handling 1682fe4c343aSmrg while test $# -gt 0; do 1683fe4c343aSmrg # Defer to hook functions for initial option parsing, so they 1684fe4c343aSmrg # get priority in the event of reusing an option name. 1685fe4c343aSmrg func_run_hooks func_parse_options ${1+"$@"} 1686ba6a1819Smrg 1687fe4c343aSmrg # Adjust func_parse_options positional parameters to match 1688fe4c343aSmrg eval set dummy "$func_run_hooks_result"; shift 1689ba6a1819Smrg 1690fe4c343aSmrg # Break out of the loop if we already parsed every option. 1691fe4c343aSmrg test $# -gt 0 || break 1692ba6a1819Smrg 1693fe4c343aSmrg _G_opt=$1 1694fe4c343aSmrg shift 1695fe4c343aSmrg case $_G_opt in 1696fe4c343aSmrg --debug|-x) debug_cmd='set -x' 1697fe4c343aSmrg func_echo "enabling shell trace mode" 1698fe4c343aSmrg $debug_cmd 1699fe4c343aSmrg ;; 1700fe4c343aSmrg 1701fe4c343aSmrg --no-warnings|--no-warning|--no-warn) 1702fe4c343aSmrg set dummy --warnings none ${1+"$@"} 1703fe4c343aSmrg shift 1704fe4c343aSmrg ;; 1705549e21daSmrg 1706fe4c343aSmrg --warnings|--warning|-W) 1707fe4c343aSmrg test $# = 0 && func_missing_arg $_G_opt && break 1708fe4c343aSmrg case " $warning_categories $1" in 1709fe4c343aSmrg *" $1 "*) 1710fe4c343aSmrg # trailing space prevents matching last $1 above 1711fe4c343aSmrg func_append_uniq opt_warning_types " $1" 1712fe4c343aSmrg ;; 1713fe4c343aSmrg *all) 1714fe4c343aSmrg opt_warning_types=$warning_categories 1715fe4c343aSmrg ;; 1716fe4c343aSmrg *none) 1717fe4c343aSmrg opt_warning_types=none 1718fe4c343aSmrg warning_func=: 1719fe4c343aSmrg ;; 1720fe4c343aSmrg *error) 1721fe4c343aSmrg opt_warning_types=$warning_categories 1722fe4c343aSmrg warning_func=func_fatal_error 1723fe4c343aSmrg ;; 1724fe4c343aSmrg *) 1725fe4c343aSmrg func_fatal_error \ 1726fe4c343aSmrg "unsupported warning category: '$1'" 1727fe4c343aSmrg ;; 1728fe4c343aSmrg esac 1729fe4c343aSmrg shift 1730fe4c343aSmrg ;; 1731fe4c343aSmrg 1732fe4c343aSmrg --verbose|-v) opt_verbose=: ;; 1733fe4c343aSmrg --version) func_version ;; 1734fe4c343aSmrg -\?|-h) func_usage ;; 1735fe4c343aSmrg --help) func_help ;; 1736fe4c343aSmrg 1737fe4c343aSmrg # Separate optargs to long options (plugins may need this): 1738fe4c343aSmrg --*=*) func_split_equals "$_G_opt" 1739fe4c343aSmrg set dummy "$func_split_equals_lhs" \ 1740fe4c343aSmrg "$func_split_equals_rhs" ${1+"$@"} 1741fe4c343aSmrg shift 1742fe4c343aSmrg ;; 1743fe4c343aSmrg 1744fe4c343aSmrg # Separate optargs to short options: 1745fe4c343aSmrg -W*) 1746fe4c343aSmrg func_split_short_opt "$_G_opt" 1747fe4c343aSmrg set dummy "$func_split_short_opt_name" \ 1748fe4c343aSmrg "$func_split_short_opt_arg" ${1+"$@"} 1749fe4c343aSmrg shift 1750fe4c343aSmrg ;; 1751fe4c343aSmrg 1752fe4c343aSmrg # Separate non-argument short options: 1753fe4c343aSmrg -\?*|-h*|-v*|-x*) 1754fe4c343aSmrg func_split_short_opt "$_G_opt" 1755fe4c343aSmrg set dummy "$func_split_short_opt_name" \ 1756fe4c343aSmrg "-$func_split_short_opt_arg" ${1+"$@"} 1757fe4c343aSmrg shift 1758fe4c343aSmrg ;; 1759fe4c343aSmrg 1760fe4c343aSmrg --) break ;; 1761fe4c343aSmrg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 1762fe4c343aSmrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1763fe4c343aSmrg esac 1764fe4c343aSmrg done 1765fe4c343aSmrg 1766fe4c343aSmrg # save modified positional parameters for caller 1767fe4c343aSmrg func_quote_for_eval ${1+"$@"} 1768fe4c343aSmrg func_parse_options_result=$func_quote_for_eval_result 1769ba6a1819Smrg} 1770ba6a1819Smrg 1771549e21daSmrg 1772fe4c343aSmrg# func_validate_options [ARG]... 1773fe4c343aSmrg# ------------------------------ 1774fe4c343aSmrg# Perform any sanity checks on option settings and/or unconsumed 1775fe4c343aSmrg# arguments. 1776fe4c343aSmrgfunc_hookable func_validate_options 1777fe4c343aSmrgfunc_validate_options () 1778ba6a1819Smrg{ 1779fe4c343aSmrg $debug_cmd 1780ba6a1819Smrg 1781fe4c343aSmrg # Display all warnings if -W was not given. 1782fe4c343aSmrg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 1783549e21daSmrg 1784fe4c343aSmrg func_run_hooks func_validate_options ${1+"$@"} 1785ba6a1819Smrg 1786fe4c343aSmrg # Bail if the options were screwed! 1787fe4c343aSmrg $exit_cmd $EXIT_FAILURE 1788fe4c343aSmrg 1789fe4c343aSmrg # save modified positional parameters for caller 1790fe4c343aSmrg func_validate_options_result=$func_run_hooks_result 17911bedbe3fSmrg} 17921bedbe3fSmrg 1793ba6a1819Smrg 17941bedbe3fSmrg 1795fe4c343aSmrg## ----------------- ## 1796fe4c343aSmrg## Helper functions. ## 1797fe4c343aSmrg## ----------------- ## 1798ba6a1819Smrg 1799fe4c343aSmrg# This section contains the helper functions used by the rest of the 1800fe4c343aSmrg# hookable option parser framework in ascii-betical order. 1801fe4c343aSmrg 1802fe4c343aSmrg 1803fe4c343aSmrg# func_fatal_help ARG... 1804fe4c343aSmrg# ---------------------- 1805fe4c343aSmrg# Echo program name prefixed message to standard error, followed by 1806fe4c343aSmrg# a help hint, and exit. 1807fe4c343aSmrgfunc_fatal_help () 1808549e21daSmrg{ 1809fe4c343aSmrg $debug_cmd 18101bedbe3fSmrg 1811fe4c343aSmrg eval \$ECHO \""Usage: $usage"\" 1812fe4c343aSmrg eval \$ECHO \""$fatal_help"\" 1813fe4c343aSmrg func_error ${1+"$@"} 1814fe4c343aSmrg exit $EXIT_FAILURE 1815549e21daSmrg} 1816ba6a1819Smrg 1817fe4c343aSmrg 1818fe4c343aSmrg# func_help 1819fe4c343aSmrg# --------- 1820fe4c343aSmrg# Echo long help message to standard output and exit. 1821549e21daSmrgfunc_help () 1822549e21daSmrg{ 1823fe4c343aSmrg $debug_cmd 1824fe4c343aSmrg 1825fe4c343aSmrg func_usage_message 1826fe4c343aSmrg $ECHO "$long_help_message" 1827fe4c343aSmrg exit 0 1828549e21daSmrg} 1829ba6a1819Smrg 1830fe4c343aSmrg 1831fe4c343aSmrg# func_missing_arg ARGNAME 1832fe4c343aSmrg# ------------------------ 1833549e21daSmrg# Echo program name prefixed message to standard error and set global 1834549e21daSmrg# exit_cmd. 1835549e21daSmrgfunc_missing_arg () 1836549e21daSmrg{ 1837fe4c343aSmrg $debug_cmd 18381bedbe3fSmrg 1839fe4c343aSmrg func_error "Missing argument for '$1'." 1840549e21daSmrg exit_cmd=exit 1841549e21daSmrg} 1842ba6a1819Smrg 1843ba6a1819Smrg 1844fe4c343aSmrg# func_split_equals STRING 1845fe4c343aSmrg# ------------------------ 1846fe4c343aSmrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 1847fe4c343aSmrg# splitting STRING at the '=' sign. 1848fe4c343aSmrgtest -z "$_G_HAVE_XSI_OPS" \ 1849fe4c343aSmrg && (eval 'x=a/b/c; 1850fe4c343aSmrg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 1851fe4c343aSmrg && _G_HAVE_XSI_OPS=yes 1852fe4c343aSmrg 1853fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS" 1854fe4c343aSmrgthen 1855fe4c343aSmrg # This is an XSI compatible shell, allowing a faster implementation... 1856fe4c343aSmrg eval 'func_split_equals () 1857fe4c343aSmrg { 1858fe4c343aSmrg $debug_cmd 1859fe4c343aSmrg 1860fe4c343aSmrg func_split_equals_lhs=${1%%=*} 1861fe4c343aSmrg func_split_equals_rhs=${1#*=} 1862fe4c343aSmrg test "x$func_split_equals_lhs" = "x$1" \ 1863fe4c343aSmrg && func_split_equals_rhs= 1864fe4c343aSmrg }' 1865fe4c343aSmrgelse 1866fe4c343aSmrg # ...otherwise fall back to using expr, which is often a shell builtin. 1867fe4c343aSmrg func_split_equals () 1868fe4c343aSmrg { 1869fe4c343aSmrg $debug_cmd 1870fe4c343aSmrg 1871fe4c343aSmrg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 1872fe4c343aSmrg func_split_equals_rhs= 1873fe4c343aSmrg test "x$func_split_equals_lhs" = "x$1" \ 1874fe4c343aSmrg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 1875fe4c343aSmrg } 1876fe4c343aSmrgfi #func_split_equals 1877fe4c343aSmrg 1878fe4c343aSmrg 1879fe4c343aSmrg# func_split_short_opt SHORTOPT 1880fe4c343aSmrg# ----------------------------- 18811bedbe3fSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 18821bedbe3fSmrg# variables after splitting SHORTOPT after the 2nd character. 1883fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS" 1884fe4c343aSmrgthen 1885fe4c343aSmrg # This is an XSI compatible shell, allowing a faster implementation... 1886fe4c343aSmrg eval 'func_split_short_opt () 1887fe4c343aSmrg { 1888fe4c343aSmrg $debug_cmd 1889fe4c343aSmrg 1890fe4c343aSmrg func_split_short_opt_arg=${1#??} 1891fe4c343aSmrg func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 1892fe4c343aSmrg }' 1893fe4c343aSmrgelse 1894fe4c343aSmrg # ...otherwise fall back to using expr, which is often a shell builtin. 1895fe4c343aSmrg func_split_short_opt () 1896fe4c343aSmrg { 1897fe4c343aSmrg $debug_cmd 1898fe4c343aSmrg 1899fe4c343aSmrg func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 1900fe4c343aSmrg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 1901fe4c343aSmrg } 1902fe4c343aSmrgfi #func_split_short_opt 1903fe4c343aSmrg 1904fe4c343aSmrg 1905fe4c343aSmrg# func_usage 1906fe4c343aSmrg# ---------- 1907fe4c343aSmrg# Echo short help message to standard output and exit. 1908fe4c343aSmrgfunc_usage () 19091bedbe3fSmrg{ 1910fe4c343aSmrg $debug_cmd 19111bedbe3fSmrg 1912fe4c343aSmrg func_usage_message 1913fe4c343aSmrg $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 1914fe4c343aSmrg exit 0 1915fe4c343aSmrg} 19161bedbe3fSmrg 19171bedbe3fSmrg 1918fe4c343aSmrg# func_usage_message 1919fe4c343aSmrg# ------------------ 1920fe4c343aSmrg# Echo short help message to standard output. 1921fe4c343aSmrgfunc_usage_message () 19221bedbe3fSmrg{ 1923fe4c343aSmrg $debug_cmd 19241bedbe3fSmrg 1925fe4c343aSmrg eval \$ECHO \""Usage: $usage"\" 1926fe4c343aSmrg echo 1927fe4c343aSmrg $SED -n 's|^# || 1928fe4c343aSmrg /^Written by/{ 1929fe4c343aSmrg x;p;x 1930fe4c343aSmrg } 1931fe4c343aSmrg h 1932fe4c343aSmrg /^Written by/q' < "$progpath" 1933fe4c343aSmrg echo 1934fe4c343aSmrg eval \$ECHO \""$usage_message"\" 1935fe4c343aSmrg} 19361bedbe3fSmrg 1937ba6a1819Smrg 1938fe4c343aSmrg# func_version 1939fe4c343aSmrg# ------------ 1940fe4c343aSmrg# Echo version message to standard output and exit. 1941fe4c343aSmrgfunc_version () 1942fe4c343aSmrg{ 1943fe4c343aSmrg $debug_cmd 1944ba6a1819Smrg 1945fe4c343aSmrg printf '%s\n' "$progname $scriptversion" 1946fe4c343aSmrg $SED -n ' 1947fe4c343aSmrg /(C)/!b go 1948fe4c343aSmrg :more 1949fe4c343aSmrg /\./!{ 1950fe4c343aSmrg N 1951fe4c343aSmrg s|\n# | | 1952fe4c343aSmrg b more 1953fe4c343aSmrg } 1954fe4c343aSmrg :go 1955fe4c343aSmrg /^# Written by /,/# warranty; / { 1956fe4c343aSmrg s|^# || 1957fe4c343aSmrg s|^# *$|| 1958fe4c343aSmrg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 1959fe4c343aSmrg p 1960fe4c343aSmrg } 1961fe4c343aSmrg /^# Written by / { 1962fe4c343aSmrg s|^# || 1963fe4c343aSmrg p 1964fe4c343aSmrg } 1965fe4c343aSmrg /^warranty; /q' < "$progpath" 1966ba6a1819Smrg 1967fe4c343aSmrg exit $? 1968fe4c343aSmrg} 1969549e21daSmrg 1970549e21daSmrg 1971fe4c343aSmrg# Local variables: 1972fe4c343aSmrg# mode: shell-script 1973fe4c343aSmrg# sh-indentation: 2 1974fe4c343aSmrg# eval: (add-hook 'before-save-hook 'time-stamp) 1975fe4c343aSmrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1976fe4c343aSmrg# time-stamp-time-zone: "UTC" 1977fe4c343aSmrg# End: 1978549e21daSmrg 1979fe4c343aSmrg# Set a version string. 1980fe4c343aSmrgscriptversion='(GNU libtool) 2.4.6' 1981549e21daSmrg 1982549e21daSmrg 1983fe4c343aSmrg# func_echo ARG... 1984fe4c343aSmrg# ---------------- 1985fe4c343aSmrg# Libtool also displays the current mode in messages, so override 1986fe4c343aSmrg# funclib.sh func_echo with this custom definition. 1987fe4c343aSmrgfunc_echo () 19881bedbe3fSmrg{ 1989fe4c343aSmrg $debug_cmd 19901bedbe3fSmrg 1991fe4c343aSmrg _G_message=$* 19921bedbe3fSmrg 1993fe4c343aSmrg func_echo_IFS=$IFS 1994fe4c343aSmrg IFS=$nl 1995fe4c343aSmrg for _G_line in $_G_message; do 1996fe4c343aSmrg IFS=$func_echo_IFS 1997fe4c343aSmrg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 1998fe4c343aSmrg done 1999fe4c343aSmrg IFS=$func_echo_IFS 2000fe4c343aSmrg} 20011bedbe3fSmrg 2002fe4c343aSmrg 2003fe4c343aSmrg# func_warning ARG... 2004fe4c343aSmrg# ------------------- 2005fe4c343aSmrg# Libtool warnings are not categorized, so override funclib.sh 2006fe4c343aSmrg# func_warning with this simpler definition. 2007fe4c343aSmrgfunc_warning () 20081bedbe3fSmrg{ 2009fe4c343aSmrg $debug_cmd 20101bedbe3fSmrg 2011fe4c343aSmrg $warning_func ${1+"$@"} 2012fe4c343aSmrg} 20131bedbe3fSmrg 20141bedbe3fSmrg 2015fe4c343aSmrg## ---------------- ## 2016fe4c343aSmrg## Options parsing. ## 2017fe4c343aSmrg## ---------------- ## 2018fe4c343aSmrg 2019fe4c343aSmrg# Hook in the functions to make sure our own options are parsed during 2020fe4c343aSmrg# the option parsing loop. 2021fe4c343aSmrg 2022fe4c343aSmrgusage='$progpath [OPTION]... [MODE-ARG]...' 2023fe4c343aSmrg 2024fe4c343aSmrg# Short help message in response to '-h'. 2025fe4c343aSmrgusage_message="Options: 2026fe4c343aSmrg --config show all configuration variables 2027fe4c343aSmrg --debug enable verbose shell tracing 2028fe4c343aSmrg -n, --dry-run display commands without modifying any files 2029fe4c343aSmrg --features display basic configuration information and exit 2030fe4c343aSmrg --mode=MODE use operation mode MODE 2031fe4c343aSmrg --no-warnings equivalent to '-Wnone' 2032fe4c343aSmrg --preserve-dup-deps don't remove duplicate dependency libraries 2033fe4c343aSmrg --quiet, --silent don't print informational messages 2034fe4c343aSmrg --tag=TAG use configuration variables from tag TAG 2035fe4c343aSmrg -v, --verbose print more informational messages than default 2036fe4c343aSmrg --version print version information 2037fe4c343aSmrg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2038fe4c343aSmrg -h, --help, --help-all print short, long, or detailed help message 2039fe4c343aSmrg" 20401bedbe3fSmrg 2041fe4c343aSmrg# Additional text appended to 'usage_message' in response to '--help'. 2042fe4c343aSmrgfunc_help () 20431bedbe3fSmrg{ 2044fe4c343aSmrg $debug_cmd 2045fe4c343aSmrg 2046fe4c343aSmrg func_usage_message 2047fe4c343aSmrg $ECHO "$long_help_message 2048fe4c343aSmrg 2049fe4c343aSmrgMODE must be one of the following: 2050fe4c343aSmrg 2051fe4c343aSmrg clean remove files from the build directory 2052fe4c343aSmrg compile compile a source file into a libtool object 2053fe4c343aSmrg execute automatically set library path, then run a program 2054fe4c343aSmrg finish complete the installation of libtool libraries 2055fe4c343aSmrg install install libraries or executables 2056fe4c343aSmrg link create a library or an executable 2057fe4c343aSmrg uninstall remove libraries from an installed directory 2058fe4c343aSmrg 2059fe4c343aSmrgMODE-ARGS vary depending on the MODE. When passed as first option, 2060fe4c343aSmrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2061fe4c343aSmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2062fe4c343aSmrg 2063fe4c343aSmrgWhen reporting a bug, please describe a test case to reproduce it and 2064fe4c343aSmrginclude the following information: 2065fe4c343aSmrg 2066fe4c343aSmrg host-triplet: $host 2067fe4c343aSmrg shell: $SHELL 2068fe4c343aSmrg compiler: $LTCC 2069fe4c343aSmrg compiler flags: $LTCFLAGS 2070fe4c343aSmrg linker: $LD (gnu? $with_gnu_ld) 2071fe4c343aSmrg version: $progname (GNU libtool) 2.4.6 2072fe4c343aSmrg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2073fe4c343aSmrg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2074fe4c343aSmrg 2075fe4c343aSmrgReport bugs to <bug-libtool@gnu.org>. 2076fe4c343aSmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>. 2077fe4c343aSmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2078fe4c343aSmrg exit 0 2079fe4c343aSmrg} 20801bedbe3fSmrg 20811bedbe3fSmrg 2082fe4c343aSmrg# func_lo2o OBJECT-NAME 2083fe4c343aSmrg# --------------------- 2084fe4c343aSmrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2085fe4c343aSmrg# object suffix. 2086fe4c343aSmrg 2087fe4c343aSmrglo2o=s/\\.lo\$/.$objext/ 2088fe4c343aSmrgo2lo=s/\\.$objext\$/.lo/ 2089fe4c343aSmrg 2090fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then 2091fe4c343aSmrg eval 'func_lo2o () 2092fe4c343aSmrg { 2093fe4c343aSmrg case $1 in 2094fe4c343aSmrg *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2095fe4c343aSmrg * ) func_lo2o_result=$1 ;; 2096fe4c343aSmrg esac 2097fe4c343aSmrg }' 2098fe4c343aSmrg 2099fe4c343aSmrg # func_xform LIBOBJ-OR-SOURCE 2100fe4c343aSmrg # --------------------------- 2101fe4c343aSmrg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2102fe4c343aSmrg # suffix to a '.lo' libtool-object suffix. 2103fe4c343aSmrg eval 'func_xform () 2104fe4c343aSmrg { 2105fe4c343aSmrg func_xform_result=${1%.*}.lo 2106fe4c343aSmrg }' 2107fe4c343aSmrgelse 2108fe4c343aSmrg # ...otherwise fall back to using sed. 2109fe4c343aSmrg func_lo2o () 2110fe4c343aSmrg { 2111fe4c343aSmrg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2112fe4c343aSmrg } 2113fe4c343aSmrg 2114fe4c343aSmrg func_xform () 2115fe4c343aSmrg { 2116fe4c343aSmrg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2117fe4c343aSmrg } 2118fe4c343aSmrgfi 21191bedbe3fSmrg 21201bedbe3fSmrg 2121fe4c343aSmrg# func_fatal_configuration ARG... 2122fe4c343aSmrg# ------------------------------- 2123549e21daSmrg# Echo program name prefixed message to standard error, followed by 2124549e21daSmrg# a configuration failure hint, and exit. 2125549e21daSmrgfunc_fatal_configuration () 2126549e21daSmrg{ 2127fe4c343aSmrg func__fatal_error ${1+"$@"} \ 2128fe4c343aSmrg "See the $PACKAGE documentation for more information." \ 2129fe4c343aSmrg "Fatal configuration error." 2130549e21daSmrg} 2131549e21daSmrg 2132549e21daSmrg 2133549e21daSmrg# func_config 2134fe4c343aSmrg# ----------- 2135549e21daSmrg# Display the configuration for all the tags in this script. 2136549e21daSmrgfunc_config () 2137549e21daSmrg{ 2138549e21daSmrg re_begincf='^# ### BEGIN LIBTOOL' 2139549e21daSmrg re_endcf='^# ### END LIBTOOL' 2140549e21daSmrg 2141549e21daSmrg # Default configuration. 2142549e21daSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2143549e21daSmrg 2144ba6a1819Smrg # Now print the configurations for the tags. 2145ba6a1819Smrg for tagname in $taglist; do 2146549e21daSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2147ba6a1819Smrg done 2148ba6a1819Smrg 2149549e21daSmrg exit $? 2150549e21daSmrg} 2151ba6a1819Smrg 2152fe4c343aSmrg 2153549e21daSmrg# func_features 2154fe4c343aSmrg# ------------- 2155549e21daSmrg# Display the features supported by this script. 2156549e21daSmrgfunc_features () 2157549e21daSmrg{ 2158549e21daSmrg echo "host: $host" 2159fe4c343aSmrg if test yes = "$build_libtool_libs"; then 2160549e21daSmrg echo "enable shared libraries" 2161ba6a1819Smrg else 2162549e21daSmrg echo "disable shared libraries" 2163ba6a1819Smrg fi 2164fe4c343aSmrg if test yes = "$build_old_libs"; then 2165549e21daSmrg echo "enable static libraries" 2166ba6a1819Smrg else 2167549e21daSmrg echo "disable static libraries" 2168ba6a1819Smrg fi 2169549e21daSmrg 2170ba6a1819Smrg exit $? 2171549e21daSmrg} 2172549e21daSmrg 2173fe4c343aSmrg 2174fe4c343aSmrg# func_enable_tag TAGNAME 2175fe4c343aSmrg# ----------------------- 2176549e21daSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 2177549e21daSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2178549e21daSmrg# variable here. 2179549e21daSmrgfunc_enable_tag () 2180549e21daSmrg{ 2181fe4c343aSmrg # Global variable: 2182fe4c343aSmrg tagname=$1 2183ba6a1819Smrg 2184fe4c343aSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2185fe4c343aSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2186fe4c343aSmrg sed_extractcf=/$re_begincf/,/$re_endcf/p 2187ba6a1819Smrg 2188fe4c343aSmrg # Validate tagname. 2189fe4c343aSmrg case $tagname in 2190fe4c343aSmrg *[!-_A-Za-z0-9,/]*) 2191fe4c343aSmrg func_fatal_error "invalid tag name: $tagname" 2192fe4c343aSmrg ;; 2193fe4c343aSmrg esac 2194ba6a1819Smrg 2195fe4c343aSmrg # Don't test for the "default" C tag, as we know it's 2196fe4c343aSmrg # there but not specially marked. 2197fe4c343aSmrg case $tagname in 2198fe4c343aSmrg CC) ;; 2199549e21daSmrg *) 2200fe4c343aSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2201fe4c343aSmrg taglist="$taglist $tagname" 2202fe4c343aSmrg 2203fe4c343aSmrg # Evaluate the configuration. Be careful to quote the path 2204fe4c343aSmrg # and the sed script, to avoid splitting on whitespace, but 2205fe4c343aSmrg # also don't use non-portable quotes within backquotes within 2206fe4c343aSmrg # quotes we have to do it in 2 steps: 2207fe4c343aSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2208fe4c343aSmrg eval "$extractedcf" 2209fe4c343aSmrg else 2210fe4c343aSmrg func_error "ignoring unknown tag $tagname" 2211fe4c343aSmrg fi 2212fe4c343aSmrg ;; 2213fe4c343aSmrg esac 2214549e21daSmrg} 2215ba6a1819Smrg 2216fe4c343aSmrg 22171bedbe3fSmrg# func_check_version_match 2218fe4c343aSmrg# ------------------------ 22191bedbe3fSmrg# Ensure that we are using m4 macros, and libtool script from the same 22201bedbe3fSmrg# release of libtool. 22211bedbe3fSmrgfunc_check_version_match () 2222549e21daSmrg{ 2223fe4c343aSmrg if test "$package_revision" != "$macro_revision"; then 2224fe4c343aSmrg if test "$VERSION" != "$macro_version"; then 2225fe4c343aSmrg if test -z "$macro_version"; then 2226fe4c343aSmrg cat >&2 <<_LT_EOF 22271bedbe3fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 22281bedbe3fSmrg$progname: definition of this LT_INIT comes from an older release. 22291bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 22301bedbe3fSmrg$progname: and run autoconf again. 22311bedbe3fSmrg_LT_EOF 2232fe4c343aSmrg else 2233fe4c343aSmrg cat >&2 <<_LT_EOF 22341bedbe3fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 22351bedbe3fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 22361bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 22371bedbe3fSmrg$progname: and run autoconf again. 22381bedbe3fSmrg_LT_EOF 2239fe4c343aSmrg fi 2240fe4c343aSmrg else 2241fe4c343aSmrg cat >&2 <<_LT_EOF 22421bedbe3fSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 22431bedbe3fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 22441bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 22451bedbe3fSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 22461bedbe3fSmrg_LT_EOF 2247fe4c343aSmrg fi 22481bedbe3fSmrg 2249fe4c343aSmrg exit $EXIT_MISMATCH 2250fe4c343aSmrg fi 22511bedbe3fSmrg} 22521bedbe3fSmrg 22531bedbe3fSmrg 2254fe4c343aSmrg# libtool_options_prep [ARG]... 2255fe4c343aSmrg# ----------------------------- 2256fe4c343aSmrg# Preparation for options parsed by libtool. 2257fe4c343aSmrglibtool_options_prep () 2258fe4c343aSmrg{ 2259fe4c343aSmrg $debug_mode 22601bedbe3fSmrg 2261fe4c343aSmrg # Option defaults: 2262fe4c343aSmrg opt_config=false 2263fe4c343aSmrg opt_dlopen= 2264fe4c343aSmrg opt_dry_run=false 2265fe4c343aSmrg opt_help=false 2266fe4c343aSmrg opt_mode= 2267fe4c343aSmrg opt_preserve_dup_deps=false 2268fe4c343aSmrg opt_quiet=false 22691bedbe3fSmrg 2270fe4c343aSmrg nonopt= 2271fe4c343aSmrg preserve_args= 22721bedbe3fSmrg 2273fe4c343aSmrg # Shorthand for --mode=foo, only valid as the first argument 2274fe4c343aSmrg case $1 in 2275fe4c343aSmrg clean|clea|cle|cl) 2276fe4c343aSmrg shift; set dummy --mode clean ${1+"$@"}; shift 2277fe4c343aSmrg ;; 2278fe4c343aSmrg compile|compil|compi|comp|com|co|c) 2279fe4c343aSmrg shift; set dummy --mode compile ${1+"$@"}; shift 2280fe4c343aSmrg ;; 2281fe4c343aSmrg execute|execut|execu|exec|exe|ex|e) 2282fe4c343aSmrg shift; set dummy --mode execute ${1+"$@"}; shift 2283fe4c343aSmrg ;; 2284fe4c343aSmrg finish|finis|fini|fin|fi|f) 2285fe4c343aSmrg shift; set dummy --mode finish ${1+"$@"}; shift 2286fe4c343aSmrg ;; 2287fe4c343aSmrg install|instal|insta|inst|ins|in|i) 2288fe4c343aSmrg shift; set dummy --mode install ${1+"$@"}; shift 2289fe4c343aSmrg ;; 2290fe4c343aSmrg link|lin|li|l) 2291fe4c343aSmrg shift; set dummy --mode link ${1+"$@"}; shift 2292fe4c343aSmrg ;; 2293fe4c343aSmrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2294fe4c343aSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 2295fe4c343aSmrg ;; 2296fe4c343aSmrg esac 2297fe4c343aSmrg 2298fe4c343aSmrg # Pass back the list of options. 2299fe4c343aSmrg func_quote_for_eval ${1+"$@"} 2300fe4c343aSmrg libtool_options_prep_result=$func_quote_for_eval_result 2301fe4c343aSmrg} 2302fe4c343aSmrgfunc_add_hook func_options_prep libtool_options_prep 2303ba6a1819Smrg 2304ba6a1819Smrg 2305fe4c343aSmrg# libtool_parse_options [ARG]... 2306fe4c343aSmrg# --------------------------------- 2307fe4c343aSmrg# Provide handling for libtool specific options. 2308fe4c343aSmrglibtool_parse_options () 23091bedbe3fSmrg{ 2310fe4c343aSmrg $debug_cmd 2311549e21daSmrg 2312fe4c343aSmrg # Perform our own loop to consume as many options as possible in 2313fe4c343aSmrg # each iteration. 2314fe4c343aSmrg while test $# -gt 0; do 2315fe4c343aSmrg _G_opt=$1 2316fe4c343aSmrg shift 2317fe4c343aSmrg case $_G_opt in 2318fe4c343aSmrg --dry-run|--dryrun|-n) 2319fe4c343aSmrg opt_dry_run=: 2320fe4c343aSmrg ;; 2321fe4c343aSmrg 2322fe4c343aSmrg --config) func_config ;; 2323fe4c343aSmrg 2324fe4c343aSmrg --dlopen|-dlopen) 2325fe4c343aSmrg opt_dlopen="${opt_dlopen+$opt_dlopen 2326fe4c343aSmrg}$1" 2327fe4c343aSmrg shift 2328fe4c343aSmrg ;; 2329fe4c343aSmrg 2330fe4c343aSmrg --preserve-dup-deps) 2331fe4c343aSmrg opt_preserve_dup_deps=: ;; 2332fe4c343aSmrg 2333fe4c343aSmrg --features) func_features ;; 2334fe4c343aSmrg 2335fe4c343aSmrg --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2336fe4c343aSmrg 2337fe4c343aSmrg --help) opt_help=: ;; 2338fe4c343aSmrg 2339fe4c343aSmrg --help-all) opt_help=': help-all' ;; 2340fe4c343aSmrg 2341fe4c343aSmrg --mode) test $# = 0 && func_missing_arg $_G_opt && break 2342fe4c343aSmrg opt_mode=$1 2343fe4c343aSmrg case $1 in 2344fe4c343aSmrg # Valid mode arguments: 2345fe4c343aSmrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 2346fe4c343aSmrg 2347fe4c343aSmrg # Catch anything else as an error 2348fe4c343aSmrg *) func_error "invalid argument for $_G_opt" 2349fe4c343aSmrg exit_cmd=exit 2350fe4c343aSmrg break 2351fe4c343aSmrg ;; 2352fe4c343aSmrg esac 2353fe4c343aSmrg shift 2354fe4c343aSmrg ;; 2355fe4c343aSmrg 2356fe4c343aSmrg --no-silent|--no-quiet) 2357fe4c343aSmrg opt_quiet=false 2358fe4c343aSmrg func_append preserve_args " $_G_opt" 2359fe4c343aSmrg ;; 2360fe4c343aSmrg 2361fe4c343aSmrg --no-warnings|--no-warning|--no-warn) 2362fe4c343aSmrg opt_warning=false 2363fe4c343aSmrg func_append preserve_args " $_G_opt" 2364fe4c343aSmrg ;; 2365fe4c343aSmrg 2366fe4c343aSmrg --no-verbose) 2367fe4c343aSmrg opt_verbose=false 2368fe4c343aSmrg func_append preserve_args " $_G_opt" 2369fe4c343aSmrg ;; 2370fe4c343aSmrg 2371fe4c343aSmrg --silent|--quiet) 2372fe4c343aSmrg opt_quiet=: 2373fe4c343aSmrg opt_verbose=false 2374fe4c343aSmrg func_append preserve_args " $_G_opt" 2375fe4c343aSmrg ;; 2376fe4c343aSmrg 2377fe4c343aSmrg --tag) test $# = 0 && func_missing_arg $_G_opt && break 2378fe4c343aSmrg opt_tag=$1 2379fe4c343aSmrg func_append preserve_args " $_G_opt $1" 2380fe4c343aSmrg func_enable_tag "$1" 2381fe4c343aSmrg shift 2382fe4c343aSmrg ;; 2383fe4c343aSmrg 2384fe4c343aSmrg --verbose|-v) opt_quiet=false 2385fe4c343aSmrg opt_verbose=: 2386fe4c343aSmrg func_append preserve_args " $_G_opt" 2387fe4c343aSmrg ;; 2388fe4c343aSmrg 2389fe4c343aSmrg # An option not handled by this hook function: 2390fe4c343aSmrg *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 2391fe4c343aSmrg esac 2392fe4c343aSmrg done 23931bedbe3fSmrg 23941bedbe3fSmrg 2395fe4c343aSmrg # save modified positional parameters for caller 2396fe4c343aSmrg func_quote_for_eval ${1+"$@"} 2397fe4c343aSmrg libtool_parse_options_result=$func_quote_for_eval_result 2398fe4c343aSmrg} 2399fe4c343aSmrgfunc_add_hook func_parse_options libtool_parse_options 2400549e21daSmrg 2401ba6a1819Smrg 2402549e21daSmrg 2403fe4c343aSmrg# libtool_validate_options [ARG]... 2404fe4c343aSmrg# --------------------------------- 2405fe4c343aSmrg# Perform any sanity checks on option settings and/or unconsumed 2406fe4c343aSmrg# arguments. 2407fe4c343aSmrglibtool_validate_options () 2408fe4c343aSmrg{ 2409fe4c343aSmrg # save first non-option argument 2410fe4c343aSmrg if test 0 -lt $#; then 2411fe4c343aSmrg nonopt=$1 2412fe4c343aSmrg shift 2413549e21daSmrg fi 2414549e21daSmrg 2415fe4c343aSmrg # preserve --debug 2416fe4c343aSmrg test : = "$debug_cmd" || func_append preserve_args " --debug" 2417549e21daSmrg 2418fe4c343aSmrg case $host in 2419fe4c343aSmrg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2420fe4c343aSmrg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2421fe4c343aSmrg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2422fe4c343aSmrg # don't eliminate duplications in $postdeps and $predeps 2423fe4c343aSmrg opt_duplicate_compiler_generated_deps=: 2424fe4c343aSmrg ;; 2425fe4c343aSmrg *) 2426fe4c343aSmrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2427fe4c343aSmrg ;; 2428fe4c343aSmrg esac 2429549e21daSmrg 2430fe4c343aSmrg $opt_help || { 2431fe4c343aSmrg # Sanity checks first: 2432fe4c343aSmrg func_check_version_match 2433fe4c343aSmrg 2434fe4c343aSmrg test yes != "$build_libtool_libs" \ 2435fe4c343aSmrg && test yes != "$build_old_libs" \ 2436fe4c343aSmrg && func_fatal_configuration "not configured to build any kind of library" 2437fe4c343aSmrg 2438fe4c343aSmrg # Darwin sucks 2439fe4c343aSmrg eval std_shrext=\"$shrext_cmds\" 2440fe4c343aSmrg 2441fe4c343aSmrg # Only execute mode is allowed to have -dlopen flags. 2442fe4c343aSmrg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2443fe4c343aSmrg func_error "unrecognized option '-dlopen'" 2444fe4c343aSmrg $ECHO "$help" 1>&2 2445fe4c343aSmrg exit $EXIT_FAILURE 2446fe4c343aSmrg fi 2447549e21daSmrg 2448fe4c343aSmrg # Change the help message to a mode-specific one. 2449fe4c343aSmrg generic_help=$help 2450fe4c343aSmrg help="Try '$progname --help --mode=$opt_mode' for more information." 2451fe4c343aSmrg } 2452549e21daSmrg 2453fe4c343aSmrg # Pass back the unparsed argument list 2454fe4c343aSmrg func_quote_for_eval ${1+"$@"} 2455fe4c343aSmrg libtool_validate_options_result=$func_quote_for_eval_result 24561bedbe3fSmrg} 2457fe4c343aSmrgfunc_add_hook func_validate_options libtool_validate_options 2458549e21daSmrg 2459549e21daSmrg 2460fe4c343aSmrg# Process options as early as possible so that --help and --version 2461fe4c343aSmrg# can return quickly. 2462fe4c343aSmrgfunc_options ${1+"$@"} 2463fe4c343aSmrgeval set dummy "$func_options_result"; shift 2464fe4c343aSmrg 2465ba6a1819Smrg 2466ba6a1819Smrg 24671bedbe3fSmrg## ----------- ## 24681bedbe3fSmrg## Main. ## 24691bedbe3fSmrg## ----------- ## 2470ba6a1819Smrg 2471fe4c343aSmrgmagic='%%%MAGIC variable%%%' 2472fe4c343aSmrgmagic_exe='%%%MAGIC EXE variable%%%' 2473fe4c343aSmrg 2474fe4c343aSmrg# Global variables. 2475fe4c343aSmrgextracted_archives= 2476fe4c343aSmrgextracted_serial=0 2477fe4c343aSmrg 2478fe4c343aSmrg# If this variable is set in any of the actions, the command in it 2479fe4c343aSmrg# will be execed at the end. This prevents here-documents from being 2480fe4c343aSmrg# left over by shells. 2481fe4c343aSmrgexec_cmd= 2482fe4c343aSmrg 2483fe4c343aSmrg 2484fe4c343aSmrg# A function that is used when there is no print builtin or printf. 2485fe4c343aSmrgfunc_fallback_echo () 2486fe4c343aSmrg{ 2487fe4c343aSmrg eval 'cat <<_LTECHO_EOF 2488fe4c343aSmrg$1 2489fe4c343aSmrg_LTECHO_EOF' 2490fe4c343aSmrg} 2491fe4c343aSmrg 2492fe4c343aSmrg# func_generated_by_libtool 2493fe4c343aSmrg# True iff stdin has been generated by Libtool. This function is only 2494fe4c343aSmrg# a basic sanity check; it will hardly flush out determined imposters. 2495fe4c343aSmrgfunc_generated_by_libtool_p () 2496fe4c343aSmrg{ 2497fe4c343aSmrg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2498fe4c343aSmrg} 2499fe4c343aSmrg 2500549e21daSmrg# func_lalib_p file 2501fe4c343aSmrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2502549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 2503549e21daSmrg# determined imposters. 2504549e21daSmrgfunc_lalib_p () 2505549e21daSmrg{ 2506549e21daSmrg test -f "$1" && 2507fe4c343aSmrg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2508549e21daSmrg} 2509ba6a1819Smrg 2510549e21daSmrg# func_lalib_unsafe_p file 2511fe4c343aSmrg# True iff FILE is a libtool '.la' library or '.lo' object file. 2512549e21daSmrg# This function implements the same check as func_lalib_p without 2513549e21daSmrg# resorting to external programs. To this end, it redirects stdin and 2514549e21daSmrg# closes it afterwards, without saving the original file descriptor. 2515549e21daSmrg# As a safety measure, use it only where a negative result would be 2516fe4c343aSmrg# fatal anyway. Works if 'file' does not exist. 2517549e21daSmrgfunc_lalib_unsafe_p () 2518549e21daSmrg{ 2519549e21daSmrg lalib_p=no 2520549e21daSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2521549e21daSmrg for lalib_p_l in 1 2 3 4 2522549e21daSmrg do 2523549e21daSmrg read lalib_p_line 2524fe4c343aSmrg case $lalib_p_line in 2525549e21daSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2526549e21daSmrg esac 2527549e21daSmrg done 2528549e21daSmrg exec 0<&5 5<&- 2529549e21daSmrg fi 2530fe4c343aSmrg test yes = "$lalib_p" 2531549e21daSmrg} 2532ba6a1819Smrg 2533549e21daSmrg# func_ltwrapper_script_p file 2534549e21daSmrg# True iff FILE is a libtool wrapper script 2535549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 2536549e21daSmrg# determined imposters. 2537549e21daSmrgfunc_ltwrapper_script_p () 2538549e21daSmrg{ 2539fe4c343aSmrg test -f "$1" && 2540fe4c343aSmrg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2541549e21daSmrg} 2542ba6a1819Smrg 2543549e21daSmrg# func_ltwrapper_executable_p file 2544549e21daSmrg# True iff FILE is a libtool wrapper executable 2545549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 2546549e21daSmrg# determined imposters. 2547549e21daSmrgfunc_ltwrapper_executable_p () 2548549e21daSmrg{ 2549549e21daSmrg func_ltwrapper_exec_suffix= 2550549e21daSmrg case $1 in 2551549e21daSmrg *.exe) ;; 2552549e21daSmrg *) func_ltwrapper_exec_suffix=.exe ;; 2553549e21daSmrg esac 2554549e21daSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2555549e21daSmrg} 2556ba6a1819Smrg 2557549e21daSmrg# func_ltwrapper_scriptname file 2558549e21daSmrg# Assumes file is an ltwrapper_executable 2559549e21daSmrg# uses $file to determine the appropriate filename for a 2560549e21daSmrg# temporary ltwrapper_script. 2561549e21daSmrgfunc_ltwrapper_scriptname () 2562549e21daSmrg{ 25631bedbe3fSmrg func_dirname_and_basename "$1" "" "." 25641bedbe3fSmrg func_stripname '' '.exe' "$func_basename_result" 2565fe4c343aSmrg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2566549e21daSmrg} 2567ba6a1819Smrg 2568549e21daSmrg# func_ltwrapper_p file 2569549e21daSmrg# True iff FILE is a libtool wrapper script or wrapper executable 2570549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 2571549e21daSmrg# determined imposters. 2572549e21daSmrgfunc_ltwrapper_p () 2573549e21daSmrg{ 2574549e21daSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2575549e21daSmrg} 2576ba6a1819Smrg 2577ba6a1819Smrg 2578549e21daSmrg# func_execute_cmds commands fail_cmd 2579549e21daSmrg# Execute tilde-delimited COMMANDS. 2580549e21daSmrg# If FAIL_CMD is given, eval that upon failure. 2581549e21daSmrg# FAIL_CMD may read-access the current command in variable CMD! 2582549e21daSmrgfunc_execute_cmds () 2583549e21daSmrg{ 2584fe4c343aSmrg $debug_cmd 2585fe4c343aSmrg 2586549e21daSmrg save_ifs=$IFS; IFS='~' 2587549e21daSmrg for cmd in $1; do 2588fe4c343aSmrg IFS=$sp$nl 2589549e21daSmrg eval cmd=\"$cmd\" 2590fe4c343aSmrg IFS=$save_ifs 2591549e21daSmrg func_show_eval "$cmd" "${2-:}" 2592549e21daSmrg done 2593549e21daSmrg IFS=$save_ifs 2594549e21daSmrg} 2595ba6a1819Smrg 2596ba6a1819Smrg 2597549e21daSmrg# func_source file 2598549e21daSmrg# Source FILE, adding directory component if necessary. 2599549e21daSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 2600549e21daSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2601549e21daSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 2602fe4c343aSmrg# 'FILE.' does not work on cygwin managed mounts. 2603549e21daSmrgfunc_source () 2604549e21daSmrg{ 2605fe4c343aSmrg $debug_cmd 2606fe4c343aSmrg 2607549e21daSmrg case $1 in 2608549e21daSmrg */* | *\\*) . "$1" ;; 2609549e21daSmrg *) . "./$1" ;; 2610549e21daSmrg esac 2611549e21daSmrg} 2612549e21daSmrg 2613549e21daSmrg 26141bedbe3fSmrg# func_resolve_sysroot PATH 26151bedbe3fSmrg# Replace a leading = in PATH with a sysroot. Store the result into 26161bedbe3fSmrg# func_resolve_sysroot_result 26171bedbe3fSmrgfunc_resolve_sysroot () 26181bedbe3fSmrg{ 26191bedbe3fSmrg func_resolve_sysroot_result=$1 26201bedbe3fSmrg case $func_resolve_sysroot_result in 26211bedbe3fSmrg =*) 26221bedbe3fSmrg func_stripname '=' '' "$func_resolve_sysroot_result" 26231bedbe3fSmrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 26241bedbe3fSmrg ;; 26251bedbe3fSmrg esac 26261bedbe3fSmrg} 26271bedbe3fSmrg 26281bedbe3fSmrg# func_replace_sysroot PATH 26291bedbe3fSmrg# If PATH begins with the sysroot, replace it with = and 26301bedbe3fSmrg# store the result into func_replace_sysroot_result. 26311bedbe3fSmrgfunc_replace_sysroot () 26321bedbe3fSmrg{ 2633fe4c343aSmrg case $lt_sysroot:$1 in 26341bedbe3fSmrg ?*:"$lt_sysroot"*) 26351bedbe3fSmrg func_stripname "$lt_sysroot" '' "$1" 2636fe4c343aSmrg func_replace_sysroot_result='='$func_stripname_result 26371bedbe3fSmrg ;; 26381bedbe3fSmrg *) 26391bedbe3fSmrg # Including no sysroot. 26401bedbe3fSmrg func_replace_sysroot_result=$1 26411bedbe3fSmrg ;; 26421bedbe3fSmrg esac 26431bedbe3fSmrg} 26441bedbe3fSmrg 2645549e21daSmrg# func_infer_tag arg 2646549e21daSmrg# Infer tagged configuration to use if any are available and 2647549e21daSmrg# if one wasn't chosen via the "--tag" command line option. 2648549e21daSmrg# Only attempt this if the compiler in the base compile 2649549e21daSmrg# command doesn't match the default compiler. 2650549e21daSmrg# arg is usually of the form 'gcc ...' 2651549e21daSmrgfunc_infer_tag () 2652549e21daSmrg{ 2653fe4c343aSmrg $debug_cmd 2654fe4c343aSmrg 2655549e21daSmrg if test -n "$available_tags" && test -z "$tagname"; then 2656549e21daSmrg CC_quoted= 2657549e21daSmrg for arg in $CC; do 26581bedbe3fSmrg func_append_quoted CC_quoted "$arg" 2659549e21daSmrg done 2660549e21daSmrg CC_expanded=`func_echo_all $CC` 2661549e21daSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2662549e21daSmrg case $@ in 2663549e21daSmrg # Blanks in the command may have been stripped by the calling shell, 2664549e21daSmrg # but not from the CC environment variable when configure was run. 2665549e21daSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2666549e21daSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2667549e21daSmrg # Blanks at the start of $base_compile will cause this to fail 2668549e21daSmrg # if we don't check for them as well. 2669549e21daSmrg *) 2670549e21daSmrg for z in $available_tags; do 2671549e21daSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2672549e21daSmrg # Evaluate the configuration. 2673fe4c343aSmrg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2674549e21daSmrg CC_quoted= 2675549e21daSmrg for arg in $CC; do 2676549e21daSmrg # Double-quote args containing other shell metacharacters. 26771bedbe3fSmrg func_append_quoted CC_quoted "$arg" 2678549e21daSmrg done 2679549e21daSmrg CC_expanded=`func_echo_all $CC` 2680549e21daSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 2681549e21daSmrg case "$@ " in 2682549e21daSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2683549e21daSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2684549e21daSmrg # The compiler in the base compile command matches 2685549e21daSmrg # the one in the tagged configuration. 2686549e21daSmrg # Assume this is the tagged configuration we want. 2687549e21daSmrg tagname=$z 2688549e21daSmrg break 2689549e21daSmrg ;; 2690549e21daSmrg esac 2691549e21daSmrg fi 2692549e21daSmrg done 2693549e21daSmrg # If $tagname still isn't set, then no tagged configuration 2694549e21daSmrg # was found and let the user know that the "--tag" command 2695549e21daSmrg # line option must be used. 2696549e21daSmrg if test -z "$tagname"; then 2697549e21daSmrg func_echo "unable to infer tagged configuration" 2698fe4c343aSmrg func_fatal_error "specify a tag with '--tag'" 2699549e21daSmrg# else 2700549e21daSmrg# func_verbose "using $tagname tagged configuration" 2701549e21daSmrg fi 2702549e21daSmrg ;; 2703549e21daSmrg esac 2704549e21daSmrg fi 2705549e21daSmrg} 2706549e21daSmrg 2707549e21daSmrg 27081bedbe3fSmrg 27091bedbe3fSmrg# func_write_libtool_object output_name pic_name nonpic_name 27101bedbe3fSmrg# Create a libtool object file (analogous to a ".la" file), 27111bedbe3fSmrg# but don't create it if we're doing a dry run. 27121bedbe3fSmrgfunc_write_libtool_object () 27131bedbe3fSmrg{ 2714fe4c343aSmrg write_libobj=$1 2715fe4c343aSmrg if test yes = "$build_libtool_libs"; then 2716fe4c343aSmrg write_lobj=\'$2\' 27171bedbe3fSmrg else 27181bedbe3fSmrg write_lobj=none 27191bedbe3fSmrg fi 27201bedbe3fSmrg 2721fe4c343aSmrg if test yes = "$build_old_libs"; then 2722fe4c343aSmrg write_oldobj=\'$3\' 27231bedbe3fSmrg else 27241bedbe3fSmrg write_oldobj=none 27251bedbe3fSmrg fi 27261bedbe3fSmrg 27271bedbe3fSmrg $opt_dry_run || { 27281bedbe3fSmrg cat >${write_libobj}T <<EOF 27291bedbe3fSmrg# $write_libobj - a libtool object file 2730fe4c343aSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 27311bedbe3fSmrg# 27321bedbe3fSmrg# Please DO NOT delete this file! 27331bedbe3fSmrg# It is necessary for linking the library. 27341bedbe3fSmrg 27351bedbe3fSmrg# Name of the PIC object. 27361bedbe3fSmrgpic_object=$write_lobj 27371bedbe3fSmrg 27381bedbe3fSmrg# Name of the non-PIC object 27391bedbe3fSmrgnon_pic_object=$write_oldobj 27401bedbe3fSmrg 27411bedbe3fSmrgEOF 2742fe4c343aSmrg $MV "${write_libobj}T" "$write_libobj" 27431bedbe3fSmrg } 27441bedbe3fSmrg} 27451bedbe3fSmrg 27461bedbe3fSmrg 27471bedbe3fSmrg################################################## 27481bedbe3fSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 27491bedbe3fSmrg################################################## 27501bedbe3fSmrg 27511bedbe3fSmrg# func_convert_core_file_wine_to_w32 ARG 27521bedbe3fSmrg# Helper function used by file name conversion functions when $build is *nix, 27531bedbe3fSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 27541bedbe3fSmrg# correctly configured wine environment available, with the winepath program 27551bedbe3fSmrg# in $build's $PATH. 27561bedbe3fSmrg# 27571bedbe3fSmrg# ARG is the $build file name to be converted to w32 format. 27581bedbe3fSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 27591bedbe3fSmrg# be empty on error (or when ARG is empty) 27601bedbe3fSmrgfunc_convert_core_file_wine_to_w32 () 27611bedbe3fSmrg{ 2762fe4c343aSmrg $debug_cmd 2763fe4c343aSmrg 2764fe4c343aSmrg func_convert_core_file_wine_to_w32_result=$1 27651bedbe3fSmrg if test -n "$1"; then 27661bedbe3fSmrg # Unfortunately, winepath does not exit with a non-zero error code, so we 27671bedbe3fSmrg # are forced to check the contents of stdout. On the other hand, if the 27681bedbe3fSmrg # command is not found, the shell will set an exit code of 127 and print 27691bedbe3fSmrg # *an error message* to stdout. So we must check for both error code of 27701bedbe3fSmrg # zero AND non-empty stdout, which explains the odd construction: 27711bedbe3fSmrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 2772fe4c343aSmrg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 27731bedbe3fSmrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 2774fe4c343aSmrg $SED -e "$sed_naive_backslashify"` 27751bedbe3fSmrg else 27761bedbe3fSmrg func_convert_core_file_wine_to_w32_result= 27771bedbe3fSmrg fi 27781bedbe3fSmrg fi 27791bedbe3fSmrg} 27801bedbe3fSmrg# end: func_convert_core_file_wine_to_w32 27811bedbe3fSmrg 27821bedbe3fSmrg 27831bedbe3fSmrg# func_convert_core_path_wine_to_w32 ARG 27841bedbe3fSmrg# Helper function used by path conversion functions when $build is *nix, and 27851bedbe3fSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 27861bedbe3fSmrg# configured wine environment available, with the winepath program in $build's 27871bedbe3fSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 27881bedbe3fSmrg# 27891bedbe3fSmrg# ARG is path to be converted from $build format to win32. 27901bedbe3fSmrg# Result is available in $func_convert_core_path_wine_to_w32_result. 27911bedbe3fSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 27921bedbe3fSmrg# are convertible, then the result may be empty. 27931bedbe3fSmrgfunc_convert_core_path_wine_to_w32 () 27941bedbe3fSmrg{ 2795fe4c343aSmrg $debug_cmd 2796fe4c343aSmrg 27971bedbe3fSmrg # unfortunately, winepath doesn't convert paths, only file names 2798fe4c343aSmrg func_convert_core_path_wine_to_w32_result= 27991bedbe3fSmrg if test -n "$1"; then 28001bedbe3fSmrg oldIFS=$IFS 28011bedbe3fSmrg IFS=: 28021bedbe3fSmrg for func_convert_core_path_wine_to_w32_f in $1; do 28031bedbe3fSmrg IFS=$oldIFS 28041bedbe3fSmrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 2805fe4c343aSmrg if test -n "$func_convert_core_file_wine_to_w32_result"; then 28061bedbe3fSmrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 2807fe4c343aSmrg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 28081bedbe3fSmrg else 28091bedbe3fSmrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 28101bedbe3fSmrg fi 28111bedbe3fSmrg fi 28121bedbe3fSmrg done 28131bedbe3fSmrg IFS=$oldIFS 28141bedbe3fSmrg fi 28151bedbe3fSmrg} 28161bedbe3fSmrg# end: func_convert_core_path_wine_to_w32 28171bedbe3fSmrg 28181bedbe3fSmrg 28191bedbe3fSmrg# func_cygpath ARGS... 28201bedbe3fSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 28211bedbe3fSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 28221bedbe3fSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 28231bedbe3fSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 28241bedbe3fSmrg# file name or path is assumed to be in w32 format, as previously converted 28251bedbe3fSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 28261bedbe3fSmrg# or path in func_cygpath_result (input file name or path is assumed to be in 28271bedbe3fSmrg# Cygwin format). Returns an empty string on error. 28281bedbe3fSmrg# 28291bedbe3fSmrg# ARGS are passed to cygpath, with the last one being the file name or path to 28301bedbe3fSmrg# be converted. 28311bedbe3fSmrg# 28321bedbe3fSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 28331bedbe3fSmrg# environment variable; do not put it in $PATH. 28341bedbe3fSmrgfunc_cygpath () 28351bedbe3fSmrg{ 2836fe4c343aSmrg $debug_cmd 2837fe4c343aSmrg 28381bedbe3fSmrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 28391bedbe3fSmrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 28401bedbe3fSmrg if test "$?" -ne 0; then 28411bedbe3fSmrg # on failure, ensure result is empty 28421bedbe3fSmrg func_cygpath_result= 28431bedbe3fSmrg fi 28441bedbe3fSmrg else 28451bedbe3fSmrg func_cygpath_result= 2846fe4c343aSmrg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 28471bedbe3fSmrg fi 28481bedbe3fSmrg} 28491bedbe3fSmrg#end: func_cygpath 28501bedbe3fSmrg 28511bedbe3fSmrg 28521bedbe3fSmrg# func_convert_core_msys_to_w32 ARG 28531bedbe3fSmrg# Convert file name or path ARG from MSYS format to w32 format. Return 28541bedbe3fSmrg# result in func_convert_core_msys_to_w32_result. 28551bedbe3fSmrgfunc_convert_core_msys_to_w32 () 28561bedbe3fSmrg{ 2857fe4c343aSmrg $debug_cmd 2858fe4c343aSmrg 28591bedbe3fSmrg # awkward: cmd appends spaces to result 28601bedbe3fSmrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 2861fe4c343aSmrg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 28621bedbe3fSmrg} 28631bedbe3fSmrg#end: func_convert_core_msys_to_w32 28641bedbe3fSmrg 28651bedbe3fSmrg 28661bedbe3fSmrg# func_convert_file_check ARG1 ARG2 28671bedbe3fSmrg# Verify that ARG1 (a file name in $build format) was converted to $host 28681bedbe3fSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 28691bedbe3fSmrg# func_to_host_file_result to ARG1). 28701bedbe3fSmrgfunc_convert_file_check () 28711bedbe3fSmrg{ 2872fe4c343aSmrg $debug_cmd 2873fe4c343aSmrg 2874fe4c343aSmrg if test -z "$2" && test -n "$1"; then 28751bedbe3fSmrg func_error "Could not determine host file name corresponding to" 2876fe4c343aSmrg func_error " '$1'" 28771bedbe3fSmrg func_error "Continuing, but uninstalled executables may not work." 28781bedbe3fSmrg # Fallback: 2879fe4c343aSmrg func_to_host_file_result=$1 28801bedbe3fSmrg fi 28811bedbe3fSmrg} 28821bedbe3fSmrg# end func_convert_file_check 28831bedbe3fSmrg 28841bedbe3fSmrg 28851bedbe3fSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 28861bedbe3fSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host 28871bedbe3fSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 28881bedbe3fSmrg# func_to_host_file_result to a simplistic fallback value (see below). 28891bedbe3fSmrgfunc_convert_path_check () 28901bedbe3fSmrg{ 2891fe4c343aSmrg $debug_cmd 2892fe4c343aSmrg 28931bedbe3fSmrg if test -z "$4" && test -n "$3"; then 28941bedbe3fSmrg func_error "Could not determine the host path corresponding to" 2895fe4c343aSmrg func_error " '$3'" 28961bedbe3fSmrg func_error "Continuing, but uninstalled executables may not work." 28971bedbe3fSmrg # Fallback. This is a deliberately simplistic "conversion" and 28981bedbe3fSmrg # should not be "improved". See libtool.info. 28991bedbe3fSmrg if test "x$1" != "x$2"; then 29001bedbe3fSmrg lt_replace_pathsep_chars="s|$1|$2|g" 29011bedbe3fSmrg func_to_host_path_result=`echo "$3" | 29021bedbe3fSmrg $SED -e "$lt_replace_pathsep_chars"` 29031bedbe3fSmrg else 2904fe4c343aSmrg func_to_host_path_result=$3 29051bedbe3fSmrg fi 29061bedbe3fSmrg fi 29071bedbe3fSmrg} 29081bedbe3fSmrg# end func_convert_path_check 29091bedbe3fSmrg 29101bedbe3fSmrg 29111bedbe3fSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 29121bedbe3fSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 29131bedbe3fSmrg# and appending REPL if ORIG matches BACKPAT. 29141bedbe3fSmrgfunc_convert_path_front_back_pathsep () 29151bedbe3fSmrg{ 2916fe4c343aSmrg $debug_cmd 2917fe4c343aSmrg 29181bedbe3fSmrg case $4 in 2919fe4c343aSmrg $1 ) func_to_host_path_result=$3$func_to_host_path_result 29201bedbe3fSmrg ;; 29211bedbe3fSmrg esac 29221bedbe3fSmrg case $4 in 29231bedbe3fSmrg $2 ) func_append func_to_host_path_result "$3" 29241bedbe3fSmrg ;; 29251bedbe3fSmrg esac 29261bedbe3fSmrg} 29271bedbe3fSmrg# end func_convert_path_front_back_pathsep 29281bedbe3fSmrg 29291bedbe3fSmrg 29301bedbe3fSmrg################################################## 29311bedbe3fSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 29321bedbe3fSmrg################################################## 2933fe4c343aSmrg# invoked via '$to_host_file_cmd ARG' 29341bedbe3fSmrg# 29351bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format. 29361bedbe3fSmrg# Result will be available in $func_to_host_file_result. 29371bedbe3fSmrg 29381bedbe3fSmrg 29391bedbe3fSmrg# func_to_host_file ARG 29401bedbe3fSmrg# Converts the file name ARG from $build format to $host format. Return result 29411bedbe3fSmrg# in func_to_host_file_result. 29421bedbe3fSmrgfunc_to_host_file () 29431bedbe3fSmrg{ 2944fe4c343aSmrg $debug_cmd 2945fe4c343aSmrg 29461bedbe3fSmrg $to_host_file_cmd "$1" 29471bedbe3fSmrg} 29481bedbe3fSmrg# end func_to_host_file 29491bedbe3fSmrg 29501bedbe3fSmrg 29511bedbe3fSmrg# func_to_tool_file ARG LAZY 29521bedbe3fSmrg# converts the file name ARG from $build format to toolchain format. Return 29531bedbe3fSmrg# result in func_to_tool_file_result. If the conversion in use is listed 29541bedbe3fSmrg# in (the comma separated) LAZY, no conversion takes place. 29551bedbe3fSmrgfunc_to_tool_file () 29561bedbe3fSmrg{ 2957fe4c343aSmrg $debug_cmd 2958fe4c343aSmrg 29591bedbe3fSmrg case ,$2, in 29601bedbe3fSmrg *,"$to_tool_file_cmd",*) 29611bedbe3fSmrg func_to_tool_file_result=$1 29621bedbe3fSmrg ;; 29631bedbe3fSmrg *) 29641bedbe3fSmrg $to_tool_file_cmd "$1" 29651bedbe3fSmrg func_to_tool_file_result=$func_to_host_file_result 29661bedbe3fSmrg ;; 29671bedbe3fSmrg esac 29681bedbe3fSmrg} 29691bedbe3fSmrg# end func_to_tool_file 29701bedbe3fSmrg 29711bedbe3fSmrg 29721bedbe3fSmrg# func_convert_file_noop ARG 29731bedbe3fSmrg# Copy ARG to func_to_host_file_result. 29741bedbe3fSmrgfunc_convert_file_noop () 29751bedbe3fSmrg{ 2976fe4c343aSmrg func_to_host_file_result=$1 29771bedbe3fSmrg} 29781bedbe3fSmrg# end func_convert_file_noop 29791bedbe3fSmrg 29801bedbe3fSmrg 29811bedbe3fSmrg# func_convert_file_msys_to_w32 ARG 29821bedbe3fSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 29831bedbe3fSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 29841bedbe3fSmrg# func_to_host_file_result. 29851bedbe3fSmrgfunc_convert_file_msys_to_w32 () 29861bedbe3fSmrg{ 2987fe4c343aSmrg $debug_cmd 2988fe4c343aSmrg 2989fe4c343aSmrg func_to_host_file_result=$1 29901bedbe3fSmrg if test -n "$1"; then 29911bedbe3fSmrg func_convert_core_msys_to_w32 "$1" 2992fe4c343aSmrg func_to_host_file_result=$func_convert_core_msys_to_w32_result 29931bedbe3fSmrg fi 29941bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 29951bedbe3fSmrg} 29961bedbe3fSmrg# end func_convert_file_msys_to_w32 29971bedbe3fSmrg 29981bedbe3fSmrg 29991bedbe3fSmrg# func_convert_file_cygwin_to_w32 ARG 30001bedbe3fSmrg# Convert file name ARG from Cygwin to w32 format. Returns result in 30011bedbe3fSmrg# func_to_host_file_result. 30021bedbe3fSmrgfunc_convert_file_cygwin_to_w32 () 30031bedbe3fSmrg{ 3004fe4c343aSmrg $debug_cmd 3005fe4c343aSmrg 3006fe4c343aSmrg func_to_host_file_result=$1 30071bedbe3fSmrg if test -n "$1"; then 30081bedbe3fSmrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 30091bedbe3fSmrg # LT_CYGPATH in this case. 30101bedbe3fSmrg func_to_host_file_result=`cygpath -m "$1"` 30111bedbe3fSmrg fi 30121bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 30131bedbe3fSmrg} 30141bedbe3fSmrg# end func_convert_file_cygwin_to_w32 30151bedbe3fSmrg 30161bedbe3fSmrg 30171bedbe3fSmrg# func_convert_file_nix_to_w32 ARG 30181bedbe3fSmrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 30191bedbe3fSmrg# and a working winepath. Returns result in func_to_host_file_result. 30201bedbe3fSmrgfunc_convert_file_nix_to_w32 () 30211bedbe3fSmrg{ 3022fe4c343aSmrg $debug_cmd 3023fe4c343aSmrg 3024fe4c343aSmrg func_to_host_file_result=$1 30251bedbe3fSmrg if test -n "$1"; then 30261bedbe3fSmrg func_convert_core_file_wine_to_w32 "$1" 3027fe4c343aSmrg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 30281bedbe3fSmrg fi 30291bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 30301bedbe3fSmrg} 30311bedbe3fSmrg# end func_convert_file_nix_to_w32 30321bedbe3fSmrg 30331bedbe3fSmrg 30341bedbe3fSmrg# func_convert_file_msys_to_cygwin ARG 30351bedbe3fSmrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 30361bedbe3fSmrg# Returns result in func_to_host_file_result. 30371bedbe3fSmrgfunc_convert_file_msys_to_cygwin () 30381bedbe3fSmrg{ 3039fe4c343aSmrg $debug_cmd 3040fe4c343aSmrg 3041fe4c343aSmrg func_to_host_file_result=$1 30421bedbe3fSmrg if test -n "$1"; then 30431bedbe3fSmrg func_convert_core_msys_to_w32 "$1" 30441bedbe3fSmrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 3045fe4c343aSmrg func_to_host_file_result=$func_cygpath_result 30461bedbe3fSmrg fi 30471bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 30481bedbe3fSmrg} 30491bedbe3fSmrg# end func_convert_file_msys_to_cygwin 30501bedbe3fSmrg 30511bedbe3fSmrg 30521bedbe3fSmrg# func_convert_file_nix_to_cygwin ARG 30531bedbe3fSmrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 30541bedbe3fSmrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 30551bedbe3fSmrg# in func_to_host_file_result. 30561bedbe3fSmrgfunc_convert_file_nix_to_cygwin () 30571bedbe3fSmrg{ 3058fe4c343aSmrg $debug_cmd 3059fe4c343aSmrg 3060fe4c343aSmrg func_to_host_file_result=$1 30611bedbe3fSmrg if test -n "$1"; then 30621bedbe3fSmrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 30631bedbe3fSmrg func_convert_core_file_wine_to_w32 "$1" 30641bedbe3fSmrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3065fe4c343aSmrg func_to_host_file_result=$func_cygpath_result 30661bedbe3fSmrg fi 30671bedbe3fSmrg func_convert_file_check "$1" "$func_to_host_file_result" 30681bedbe3fSmrg} 30691bedbe3fSmrg# end func_convert_file_nix_to_cygwin 30701bedbe3fSmrg 30711bedbe3fSmrg 30721bedbe3fSmrg############################################# 30731bedbe3fSmrg# $build to $host PATH CONVERSION FUNCTIONS # 30741bedbe3fSmrg############################################# 3075fe4c343aSmrg# invoked via '$to_host_path_cmd ARG' 30761bedbe3fSmrg# 30771bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format. 30781bedbe3fSmrg# The result will be available in $func_to_host_path_result. 30791bedbe3fSmrg# 30801bedbe3fSmrg# Path separators are also converted from $build format to $host format. If 30811bedbe3fSmrg# ARG begins or ends with a path separator character, it is preserved (but 30821bedbe3fSmrg# converted to $host format) on output. 30831bedbe3fSmrg# 30841bedbe3fSmrg# All path conversion functions are named using the following convention: 30851bedbe3fSmrg# file name conversion function : func_convert_file_X_to_Y () 30861bedbe3fSmrg# path conversion function : func_convert_path_X_to_Y () 30871bedbe3fSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the 30881bedbe3fSmrg# same. If conversion functions are added for new $build/$host combinations, 30891bedbe3fSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 30901bedbe3fSmrg# will break. 30911bedbe3fSmrg 30921bedbe3fSmrg 30931bedbe3fSmrg# func_init_to_host_path_cmd 30941bedbe3fSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 30951bedbe3fSmrg# appropriate value, based on the value of $to_host_file_cmd. 30961bedbe3fSmrgto_host_path_cmd= 30971bedbe3fSmrgfunc_init_to_host_path_cmd () 30981bedbe3fSmrg{ 3099fe4c343aSmrg $debug_cmd 3100fe4c343aSmrg 31011bedbe3fSmrg if test -z "$to_host_path_cmd"; then 31021bedbe3fSmrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3103fe4c343aSmrg to_host_path_cmd=func_convert_path_$func_stripname_result 31041bedbe3fSmrg fi 31051bedbe3fSmrg} 31061bedbe3fSmrg 31071bedbe3fSmrg 31081bedbe3fSmrg# func_to_host_path ARG 31091bedbe3fSmrg# Converts the path ARG from $build format to $host format. Return result 31101bedbe3fSmrg# in func_to_host_path_result. 31111bedbe3fSmrgfunc_to_host_path () 31121bedbe3fSmrg{ 3113fe4c343aSmrg $debug_cmd 3114fe4c343aSmrg 31151bedbe3fSmrg func_init_to_host_path_cmd 31161bedbe3fSmrg $to_host_path_cmd "$1" 31171bedbe3fSmrg} 31181bedbe3fSmrg# end func_to_host_path 31191bedbe3fSmrg 31201bedbe3fSmrg 31211bedbe3fSmrg# func_convert_path_noop ARG 31221bedbe3fSmrg# Copy ARG to func_to_host_path_result. 31231bedbe3fSmrgfunc_convert_path_noop () 31241bedbe3fSmrg{ 3125fe4c343aSmrg func_to_host_path_result=$1 31261bedbe3fSmrg} 31271bedbe3fSmrg# end func_convert_path_noop 31281bedbe3fSmrg 31291bedbe3fSmrg 31301bedbe3fSmrg# func_convert_path_msys_to_w32 ARG 31311bedbe3fSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 31321bedbe3fSmrg# conversion to w32 is not available inside the cwrapper. Returns result in 31331bedbe3fSmrg# func_to_host_path_result. 31341bedbe3fSmrgfunc_convert_path_msys_to_w32 () 31351bedbe3fSmrg{ 3136fe4c343aSmrg $debug_cmd 3137fe4c343aSmrg 3138fe4c343aSmrg func_to_host_path_result=$1 31391bedbe3fSmrg if test -n "$1"; then 31401bedbe3fSmrg # Remove leading and trailing path separator characters from ARG. MSYS 31411bedbe3fSmrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 31421bedbe3fSmrg # and winepath ignores them completely. 31431bedbe3fSmrg func_stripname : : "$1" 31441bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 31451bedbe3fSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3146fe4c343aSmrg func_to_host_path_result=$func_convert_core_msys_to_w32_result 31471bedbe3fSmrg func_convert_path_check : ";" \ 31481bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 31491bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 31501bedbe3fSmrg fi 31511bedbe3fSmrg} 31521bedbe3fSmrg# end func_convert_path_msys_to_w32 31531bedbe3fSmrg 31541bedbe3fSmrg 31551bedbe3fSmrg# func_convert_path_cygwin_to_w32 ARG 31561bedbe3fSmrg# Convert path ARG from Cygwin to w32 format. Returns result in 31571bedbe3fSmrg# func_to_host_file_result. 31581bedbe3fSmrgfunc_convert_path_cygwin_to_w32 () 31591bedbe3fSmrg{ 3160fe4c343aSmrg $debug_cmd 3161fe4c343aSmrg 3162fe4c343aSmrg func_to_host_path_result=$1 31631bedbe3fSmrg if test -n "$1"; then 31641bedbe3fSmrg # See func_convert_path_msys_to_w32: 31651bedbe3fSmrg func_stripname : : "$1" 31661bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 31671bedbe3fSmrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 31681bedbe3fSmrg func_convert_path_check : ";" \ 31691bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 31701bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 31711bedbe3fSmrg fi 31721bedbe3fSmrg} 31731bedbe3fSmrg# end func_convert_path_cygwin_to_w32 31741bedbe3fSmrg 31751bedbe3fSmrg 31761bedbe3fSmrg# func_convert_path_nix_to_w32 ARG 31771bedbe3fSmrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 31781bedbe3fSmrg# a working winepath. Returns result in func_to_host_file_result. 31791bedbe3fSmrgfunc_convert_path_nix_to_w32 () 3180549e21daSmrg{ 3181fe4c343aSmrg $debug_cmd 3182fe4c343aSmrg 3183fe4c343aSmrg func_to_host_path_result=$1 31841bedbe3fSmrg if test -n "$1"; then 31851bedbe3fSmrg # See func_convert_path_msys_to_w32: 31861bedbe3fSmrg func_stripname : : "$1" 31871bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 31881bedbe3fSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3189fe4c343aSmrg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 31901bedbe3fSmrg func_convert_path_check : ";" \ 31911bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 31921bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 31931bedbe3fSmrg fi 31941bedbe3fSmrg} 31951bedbe3fSmrg# end func_convert_path_nix_to_w32 3196549e21daSmrg 3197549e21daSmrg 31981bedbe3fSmrg# func_convert_path_msys_to_cygwin ARG 31991bedbe3fSmrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 32001bedbe3fSmrg# Returns result in func_to_host_file_result. 32011bedbe3fSmrgfunc_convert_path_msys_to_cygwin () 32021bedbe3fSmrg{ 3203fe4c343aSmrg $debug_cmd 3204fe4c343aSmrg 3205fe4c343aSmrg func_to_host_path_result=$1 32061bedbe3fSmrg if test -n "$1"; then 32071bedbe3fSmrg # See func_convert_path_msys_to_w32: 32081bedbe3fSmrg func_stripname : : "$1" 32091bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 32101bedbe3fSmrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 32111bedbe3fSmrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3212fe4c343aSmrg func_to_host_path_result=$func_cygpath_result 32131bedbe3fSmrg func_convert_path_check : : \ 32141bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 32151bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 32161bedbe3fSmrg fi 32171bedbe3fSmrg} 32181bedbe3fSmrg# end func_convert_path_msys_to_cygwin 3219549e21daSmrg 3220549e21daSmrg 32211bedbe3fSmrg# func_convert_path_nix_to_cygwin ARG 32221bedbe3fSmrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 32231bedbe3fSmrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 32241bedbe3fSmrg# func_to_host_file_result. 32251bedbe3fSmrgfunc_convert_path_nix_to_cygwin () 32261bedbe3fSmrg{ 3227fe4c343aSmrg $debug_cmd 3228fe4c343aSmrg 3229fe4c343aSmrg func_to_host_path_result=$1 32301bedbe3fSmrg if test -n "$1"; then 32311bedbe3fSmrg # Remove leading and trailing path separator characters from 32321bedbe3fSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 32331bedbe3fSmrg # into '.;' and ';.', and winepath ignores them completely. 32341bedbe3fSmrg func_stripname : : "$1" 32351bedbe3fSmrg func_to_host_path_tmp1=$func_stripname_result 32361bedbe3fSmrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 32371bedbe3fSmrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3238fe4c343aSmrg func_to_host_path_result=$func_cygpath_result 32391bedbe3fSmrg func_convert_path_check : : \ 32401bedbe3fSmrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 32411bedbe3fSmrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 32421bedbe3fSmrg fi 3243549e21daSmrg} 32441bedbe3fSmrg# end func_convert_path_nix_to_cygwin 32451bedbe3fSmrg 3246549e21daSmrg 3247fe4c343aSmrg# func_dll_def_p FILE 3248fe4c343aSmrg# True iff FILE is a Windows DLL '.def' file. 3249fe4c343aSmrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3250fe4c343aSmrgfunc_dll_def_p () 3251fe4c343aSmrg{ 3252fe4c343aSmrg $debug_cmd 3253fe4c343aSmrg 3254fe4c343aSmrg func_dll_def_p_tmp=`$SED -n \ 3255fe4c343aSmrg -e 's/^[ ]*//' \ 3256fe4c343aSmrg -e '/^\(;.*\)*$/d' \ 3257fe4c343aSmrg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3258fe4c343aSmrg -e q \ 3259fe4c343aSmrg "$1"` 3260fe4c343aSmrg test DEF = "$func_dll_def_p_tmp" 3261fe4c343aSmrg} 3262fe4c343aSmrg 3263fe4c343aSmrg 3264549e21daSmrg# func_mode_compile arg... 3265549e21daSmrgfunc_mode_compile () 3266549e21daSmrg{ 3267fe4c343aSmrg $debug_cmd 3268fe4c343aSmrg 3269549e21daSmrg # Get the compilation command and the source file. 3270549e21daSmrg base_compile= 3271fe4c343aSmrg srcfile=$nonopt # always keep a non-empty value in "srcfile" 3272549e21daSmrg suppress_opt=yes 3273549e21daSmrg suppress_output= 3274549e21daSmrg arg_mode=normal 3275549e21daSmrg libobj= 3276549e21daSmrg later= 3277549e21daSmrg pie_flag= 3278549e21daSmrg 3279549e21daSmrg for arg 3280549e21daSmrg do 3281549e21daSmrg case $arg_mode in 3282549e21daSmrg arg ) 3283549e21daSmrg # do not "continue". Instead, add this to base_compile 3284fe4c343aSmrg lastarg=$arg 3285549e21daSmrg arg_mode=normal 3286549e21daSmrg ;; 3287549e21daSmrg 3288549e21daSmrg target ) 3289fe4c343aSmrg libobj=$arg 3290549e21daSmrg arg_mode=normal 3291549e21daSmrg continue 3292549e21daSmrg ;; 3293549e21daSmrg 3294549e21daSmrg normal ) 3295549e21daSmrg # Accept any command-line options. 3296549e21daSmrg case $arg in 3297549e21daSmrg -o) 3298549e21daSmrg test -n "$libobj" && \ 3299fe4c343aSmrg func_fatal_error "you cannot specify '-o' more than once" 3300549e21daSmrg arg_mode=target 3301549e21daSmrg continue 3302549e21daSmrg ;; 3303549e21daSmrg 3304549e21daSmrg -pie | -fpie | -fPIE) 33051bedbe3fSmrg func_append pie_flag " $arg" 3306549e21daSmrg continue 3307549e21daSmrg ;; 3308549e21daSmrg 3309549e21daSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 33101bedbe3fSmrg func_append later " $arg" 3311549e21daSmrg continue 3312549e21daSmrg ;; 3313549e21daSmrg 3314549e21daSmrg -no-suppress) 3315549e21daSmrg suppress_opt=no 3316549e21daSmrg continue 3317549e21daSmrg ;; 3318549e21daSmrg 3319549e21daSmrg -Xcompiler) 3320549e21daSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 3321549e21daSmrg continue # The current "srcfile" will either be retained or 3322549e21daSmrg ;; # replaced later. I would guess that would be a bug. 3323549e21daSmrg 3324549e21daSmrg -Wc,*) 3325549e21daSmrg func_stripname '-Wc,' '' "$arg" 3326549e21daSmrg args=$func_stripname_result 3327549e21daSmrg lastarg= 3328fe4c343aSmrg save_ifs=$IFS; IFS=, 3329549e21daSmrg for arg in $args; do 3330fe4c343aSmrg IFS=$save_ifs 33311bedbe3fSmrg func_append_quoted lastarg "$arg" 3332549e21daSmrg done 3333fe4c343aSmrg IFS=$save_ifs 3334549e21daSmrg func_stripname ' ' '' "$lastarg" 3335549e21daSmrg lastarg=$func_stripname_result 3336549e21daSmrg 3337549e21daSmrg # Add the arguments to base_compile. 33381bedbe3fSmrg func_append base_compile " $lastarg" 3339549e21daSmrg continue 3340549e21daSmrg ;; 3341549e21daSmrg 3342549e21daSmrg *) 3343549e21daSmrg # Accept the current argument as the source file. 3344549e21daSmrg # The previous "srcfile" becomes the current argument. 3345ba6a1819Smrg # 3346fe4c343aSmrg lastarg=$srcfile 3347fe4c343aSmrg srcfile=$arg 3348ba6a1819Smrg ;; 3349ba6a1819Smrg esac # case $arg 3350ba6a1819Smrg ;; 3351ba6a1819Smrg esac # case $arg_mode 3352ba6a1819Smrg 3353ba6a1819Smrg # Aesthetically quote the previous argument. 33541bedbe3fSmrg func_append_quoted base_compile "$lastarg" 3355ba6a1819Smrg done # for arg 3356ba6a1819Smrg 3357ba6a1819Smrg case $arg_mode in 3358ba6a1819Smrg arg) 3359549e21daSmrg func_fatal_error "you must specify an argument for -Xcompile" 3360ba6a1819Smrg ;; 3361ba6a1819Smrg target) 3362fe4c343aSmrg func_fatal_error "you must specify a target with '-o'" 3363ba6a1819Smrg ;; 3364ba6a1819Smrg *) 3365ba6a1819Smrg # Get the name of the library object. 3366549e21daSmrg test -z "$libobj" && { 3367549e21daSmrg func_basename "$srcfile" 3368fe4c343aSmrg libobj=$func_basename_result 3369549e21daSmrg } 3370ba6a1819Smrg ;; 3371ba6a1819Smrg esac 3372ba6a1819Smrg 3373ba6a1819Smrg # Recognize several different file suffixes. 3374ba6a1819Smrg # If the user specifies -o file.o, it is replaced with file.lo 3375ba6a1819Smrg case $libobj in 3376549e21daSmrg *.[cCFSifmso] | \ 3377549e21daSmrg *.ada | *.adb | *.ads | *.asm | \ 3378549e21daSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 33791bedbe3fSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3380549e21daSmrg func_xform "$libobj" 3381549e21daSmrg libobj=$func_xform_result 3382549e21daSmrg ;; 3383ba6a1819Smrg esac 3384ba6a1819Smrg 3385ba6a1819Smrg case $libobj in 3386549e21daSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3387ba6a1819Smrg *) 3388fe4c343aSmrg func_fatal_error "cannot determine name of library object from '$libobj'" 3389ba6a1819Smrg ;; 3390ba6a1819Smrg esac 3391ba6a1819Smrg 3392ba6a1819Smrg func_infer_tag $base_compile 3393ba6a1819Smrg 3394ba6a1819Smrg for arg in $later; do 3395ba6a1819Smrg case $arg in 3396549e21daSmrg -shared) 3397fe4c343aSmrg test yes = "$build_libtool_libs" \ 3398fe4c343aSmrg || func_fatal_configuration "cannot build a shared library" 3399549e21daSmrg build_old_libs=no 3400549e21daSmrg continue 3401549e21daSmrg ;; 3402549e21daSmrg 3403ba6a1819Smrg -static) 3404549e21daSmrg build_libtool_libs=no 3405ba6a1819Smrg build_old_libs=yes 3406ba6a1819Smrg continue 3407ba6a1819Smrg ;; 3408ba6a1819Smrg 3409ba6a1819Smrg -prefer-pic) 3410ba6a1819Smrg pic_mode=yes 3411ba6a1819Smrg continue 3412ba6a1819Smrg ;; 3413ba6a1819Smrg 3414ba6a1819Smrg -prefer-non-pic) 3415ba6a1819Smrg pic_mode=no 3416ba6a1819Smrg continue 3417ba6a1819Smrg ;; 3418ba6a1819Smrg esac 3419ba6a1819Smrg done 3420ba6a1819Smrg 3421549e21daSmrg func_quote_for_eval "$libobj" 3422549e21daSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 3423549e21daSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3424fe4c343aSmrg && func_warning "libobj name '$libobj' may not contain shell special characters." 3425549e21daSmrg func_dirname_and_basename "$obj" "/" "" 3426fe4c343aSmrg objname=$func_basename_result 3427fe4c343aSmrg xdir=$func_dirname_result 3428fe4c343aSmrg lobj=$xdir$objdir/$objname 3429ba6a1819Smrg 3430549e21daSmrg test -z "$base_compile" && \ 3431549e21daSmrg func_fatal_help "you must specify a compilation command" 3432ba6a1819Smrg 3433ba6a1819Smrg # Delete any leftover library objects. 3434fe4c343aSmrg if test yes = "$build_old_libs"; then 3435ba6a1819Smrg removelist="$obj $lobj $libobj ${libobj}T" 3436ba6a1819Smrg else 3437ba6a1819Smrg removelist="$lobj $libobj ${libobj}T" 3438ba6a1819Smrg fi 3439ba6a1819Smrg 3440ba6a1819Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 3441ba6a1819Smrg case $host_os in 3442549e21daSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 3443ba6a1819Smrg pic_mode=default 3444ba6a1819Smrg ;; 3445ba6a1819Smrg esac 3446fe4c343aSmrg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3447ba6a1819Smrg # non-PIC code in shared libraries is not supported 3448ba6a1819Smrg pic_mode=default 3449ba6a1819Smrg fi 3450ba6a1819Smrg 3451ba6a1819Smrg # Calculate the filename of the output object if compiler does 3452ba6a1819Smrg # not support -o with -c 3453fe4c343aSmrg if test no = "$compiler_c_o"; then 3454fe4c343aSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3455fe4c343aSmrg lockfile=$output_obj.lock 3456ba6a1819Smrg else 3457ba6a1819Smrg output_obj= 3458ba6a1819Smrg need_locks=no 3459ba6a1819Smrg lockfile= 3460ba6a1819Smrg fi 3461ba6a1819Smrg 3462ba6a1819Smrg # Lock this critical section if it is needed 3463ba6a1819Smrg # We use this script file to make the link, it avoids creating a new file 3464fe4c343aSmrg if test yes = "$need_locks"; then 3465549e21daSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3466549e21daSmrg func_echo "Waiting for $lockfile to be removed" 3467ba6a1819Smrg sleep 2 3468ba6a1819Smrg done 3469fe4c343aSmrg elif test warn = "$need_locks"; then 3470ba6a1819Smrg if test -f "$lockfile"; then 3471549e21daSmrg $ECHO "\ 3472ba6a1819Smrg*** ERROR, $lockfile exists and contains: 3473ba6a1819Smrg`cat $lockfile 2>/dev/null` 3474ba6a1819Smrg 3475ba6a1819SmrgThis indicates that another process is trying to use the same 3476ba6a1819Smrgtemporary object file, and libtool could not work around it because 3477fe4c343aSmrgyour compiler does not support '-c' and '-o' together. If you 3478ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 3479ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 3480ba6a1819Smrgcompiler." 3481ba6a1819Smrg 3482549e21daSmrg $opt_dry_run || $RM $removelist 3483ba6a1819Smrg exit $EXIT_FAILURE 3484ba6a1819Smrg fi 34851bedbe3fSmrg func_append removelist " $output_obj" 3486549e21daSmrg $ECHO "$srcfile" > "$lockfile" 3487ba6a1819Smrg fi 3488ba6a1819Smrg 3489549e21daSmrg $opt_dry_run || $RM $removelist 34901bedbe3fSmrg func_append removelist " $lockfile" 3491549e21daSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3492549e21daSmrg 34931bedbe3fSmrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 34941bedbe3fSmrg srcfile=$func_to_tool_file_result 3495549e21daSmrg func_quote_for_eval "$srcfile" 3496549e21daSmrg qsrcfile=$func_quote_for_eval_result 3497ba6a1819Smrg 3498ba6a1819Smrg # Only build a PIC object if we are building libtool libraries. 3499fe4c343aSmrg if test yes = "$build_libtool_libs"; then 3500ba6a1819Smrg # Without this assignment, base_compile gets emptied. 3501ba6a1819Smrg fbsd_hideous_sh_bug=$base_compile 3502ba6a1819Smrg 3503fe4c343aSmrg if test no != "$pic_mode"; then 3504ba6a1819Smrg command="$base_compile $qsrcfile $pic_flag" 3505ba6a1819Smrg else 3506ba6a1819Smrg # Don't build PIC code 3507ba6a1819Smrg command="$base_compile $qsrcfile" 3508ba6a1819Smrg fi 3509ba6a1819Smrg 3510549e21daSmrg func_mkdir_p "$xdir$objdir" 3511ba6a1819Smrg 3512ba6a1819Smrg if test -z "$output_obj"; then 3513ba6a1819Smrg # Place PIC objects in $objdir 35141bedbe3fSmrg func_append command " -o $lobj" 3515ba6a1819Smrg fi 3516ba6a1819Smrg 3517549e21daSmrg func_show_eval_locale "$command" \ 3518549e21daSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3519ba6a1819Smrg 3520fe4c343aSmrg if test warn = "$need_locks" && 3521ba6a1819Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3522549e21daSmrg $ECHO "\ 3523ba6a1819Smrg*** ERROR, $lockfile contains: 3524ba6a1819Smrg`cat $lockfile 2>/dev/null` 3525ba6a1819Smrg 3526ba6a1819Smrgbut it should contain: 3527ba6a1819Smrg$srcfile 3528ba6a1819Smrg 3529ba6a1819SmrgThis indicates that another process is trying to use the same 3530ba6a1819Smrgtemporary object file, and libtool could not work around it because 3531fe4c343aSmrgyour compiler does not support '-c' and '-o' together. If you 3532ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 3533ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 3534ba6a1819Smrgcompiler." 3535ba6a1819Smrg 3536549e21daSmrg $opt_dry_run || $RM $removelist 3537ba6a1819Smrg exit $EXIT_FAILURE 3538ba6a1819Smrg fi 3539ba6a1819Smrg 3540ba6a1819Smrg # Just move the object if needed, then go on to compile the next one 3541ba6a1819Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3542549e21daSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 3543549e21daSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3544ba6a1819Smrg fi 3545ba6a1819Smrg 3546ba6a1819Smrg # Allow error messages only from the first compilation. 3547fe4c343aSmrg if test yes = "$suppress_opt"; then 3548549e21daSmrg suppress_output=' >/dev/null 2>&1' 3549ba6a1819Smrg fi 3550ba6a1819Smrg fi 3551ba6a1819Smrg 3552ba6a1819Smrg # Only build a position-dependent object if we build old libraries. 3553fe4c343aSmrg if test yes = "$build_old_libs"; then 3554fe4c343aSmrg if test yes != "$pic_mode"; then 3555ba6a1819Smrg # Don't build PIC code 3556549e21daSmrg command="$base_compile $qsrcfile$pie_flag" 3557ba6a1819Smrg else 3558ba6a1819Smrg command="$base_compile $qsrcfile $pic_flag" 3559ba6a1819Smrg fi 3560fe4c343aSmrg if test yes = "$compiler_c_o"; then 35611bedbe3fSmrg func_append command " -o $obj" 3562ba6a1819Smrg fi 3563ba6a1819Smrg 3564ba6a1819Smrg # Suppress compiler output if we already did a PIC compilation. 35651bedbe3fSmrg func_append command "$suppress_output" 3566549e21daSmrg func_show_eval_locale "$command" \ 3567549e21daSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3568ba6a1819Smrg 3569fe4c343aSmrg if test warn = "$need_locks" && 3570ba6a1819Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3571549e21daSmrg $ECHO "\ 3572ba6a1819Smrg*** ERROR, $lockfile contains: 3573ba6a1819Smrg`cat $lockfile 2>/dev/null` 3574ba6a1819Smrg 3575ba6a1819Smrgbut it should contain: 3576ba6a1819Smrg$srcfile 3577ba6a1819Smrg 3578ba6a1819SmrgThis indicates that another process is trying to use the same 3579ba6a1819Smrgtemporary object file, and libtool could not work around it because 3580fe4c343aSmrgyour compiler does not support '-c' and '-o' together. If you 3581ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 3582ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 3583ba6a1819Smrgcompiler." 3584ba6a1819Smrg 3585549e21daSmrg $opt_dry_run || $RM $removelist 3586ba6a1819Smrg exit $EXIT_FAILURE 3587ba6a1819Smrg fi 3588ba6a1819Smrg 3589ba6a1819Smrg # Just move the object if needed 3590ba6a1819Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3591549e21daSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 3592549e21daSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3593ba6a1819Smrg fi 3594549e21daSmrg fi 3595ba6a1819Smrg 3596549e21daSmrg $opt_dry_run || { 3597549e21daSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3598ba6a1819Smrg 3599549e21daSmrg # Unlock the critical section if it was locked 3600fe4c343aSmrg if test no != "$need_locks"; then 3601549e21daSmrg removelist=$lockfile 3602549e21daSmrg $RM "$lockfile" 3603549e21daSmrg fi 3604549e21daSmrg } 3605ba6a1819Smrg 3606549e21daSmrg exit $EXIT_SUCCESS 3607549e21daSmrg} 3608ba6a1819Smrg 3609549e21daSmrg$opt_help || { 3610fe4c343aSmrg test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3611549e21daSmrg} 3612ba6a1819Smrg 3613549e21daSmrgfunc_mode_help () 3614549e21daSmrg{ 3615549e21daSmrg # We need to display help for each of the modes. 36161bedbe3fSmrg case $opt_mode in 3617549e21daSmrg "") 3618549e21daSmrg # Generic help is extracted from the usage comments 3619549e21daSmrg # at the start of this file. 3620549e21daSmrg func_help 3621549e21daSmrg ;; 3622ba6a1819Smrg 3623549e21daSmrg clean) 3624549e21daSmrg $ECHO \ 3625549e21daSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3626ba6a1819Smrg 3627549e21daSmrgRemove files from the build directory. 3628ba6a1819Smrg 3629549e21daSmrgRM is the name of the program to use to delete files associated with each FILE 3630fe4c343aSmrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3631549e21daSmrgto RM. 3632ba6a1819Smrg 3633549e21daSmrgIf FILE is a libtool library, object or program, all the files associated 3634549e21daSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3635549e21daSmrg ;; 3636ba6a1819Smrg 3637549e21daSmrg compile) 3638549e21daSmrg $ECHO \ 3639549e21daSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3640ba6a1819Smrg 3641549e21daSmrgCompile a source file into a libtool library object. 3642ba6a1819Smrg 3643549e21daSmrgThis mode accepts the following additional options: 3644ba6a1819Smrg 3645549e21daSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3646549e21daSmrg -no-suppress do not suppress compiler output for multiple passes 3647549e21daSmrg -prefer-pic try to build PIC objects only 3648549e21daSmrg -prefer-non-pic try to build non-PIC objects only 3649fe4c343aSmrg -shared do not build a '.o' file suitable for static linking 3650fe4c343aSmrg -static only build a '.o' file suitable for static linking 3651549e21daSmrg -Wc,FLAG pass FLAG directly to the compiler 3652ba6a1819Smrg 3653fe4c343aSmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3654549e21daSmrgfrom the given SOURCEFILE. 3655ba6a1819Smrg 3656549e21daSmrgThe output file name is determined by removing the directory component from 3657fe4c343aSmrgSOURCEFILE, then substituting the C source code suffix '.c' with the 3658fe4c343aSmrglibrary object suffix, '.lo'." 3659549e21daSmrg ;; 3660ba6a1819Smrg 3661549e21daSmrg execute) 3662549e21daSmrg $ECHO \ 3663549e21daSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3664ba6a1819Smrg 3665549e21daSmrgAutomatically set library path, then run a program. 3666ba6a1819Smrg 3667549e21daSmrgThis mode accepts the following additional options: 3668ba6a1819Smrg 3669549e21daSmrg -dlopen FILE add the directory containing FILE to the library path 3670ba6a1819Smrg 3671fe4c343aSmrgThis mode sets the library path environment variable according to '-dlopen' 3672549e21daSmrgflags. 3673ba6a1819Smrg 3674549e21daSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 3675549e21daSmrginto their corresponding uninstalled binary, and any of their required library 3676549e21daSmrgdirectories are added to the library path. 3677ba6a1819Smrg 3678549e21daSmrgThen, COMMAND is executed, with ARGS as arguments." 3679549e21daSmrg ;; 3680ba6a1819Smrg 3681549e21daSmrg finish) 3682549e21daSmrg $ECHO \ 3683549e21daSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3684ba6a1819Smrg 3685549e21daSmrgComplete the installation of libtool libraries. 3686ba6a1819Smrg 3687549e21daSmrgEach LIBDIR is a directory that contains libtool libraries. 3688ba6a1819Smrg 3689549e21daSmrgThe commands that this mode executes may require superuser privileges. Use 3690fe4c343aSmrgthe '--dry-run' option if you just want to see what would be executed." 3691549e21daSmrg ;; 3692ba6a1819Smrg 3693549e21daSmrg install) 3694549e21daSmrg $ECHO \ 3695549e21daSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3696ba6a1819Smrg 3697549e21daSmrgInstall executables or libraries. 3698ba6a1819Smrg 3699549e21daSmrgINSTALL-COMMAND is the installation command. The first component should be 3700fe4c343aSmrgeither the 'install' or 'cp' program. 3701ba6a1819Smrg 3702549e21daSmrgThe following components of INSTALL-COMMAND are treated specially: 3703ba6a1819Smrg 3704549e21daSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3705ba6a1819Smrg 3706549e21daSmrgThe rest of the components are interpreted as arguments to that command (only 3707549e21daSmrgBSD-compatible install options are recognized)." 3708549e21daSmrg ;; 3709ba6a1819Smrg 3710549e21daSmrg link) 3711549e21daSmrg $ECHO \ 3712549e21daSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3713ba6a1819Smrg 3714549e21daSmrgLink object files or libraries together to form another library, or to 3715549e21daSmrgcreate an executable program. 3716ba6a1819Smrg 3717549e21daSmrgLINK-COMMAND is a command using the C compiler that you would use to create 3718549e21daSmrga program from several object files. 3719ba6a1819Smrg 3720549e21daSmrgThe following components of LINK-COMMAND are treated specially: 3721ba6a1819Smrg 3722549e21daSmrg -all-static do not do any dynamic linking at all 3723549e21daSmrg -avoid-version do not add a version suffix if possible 3724549e21daSmrg -bindir BINDIR specify path to binaries directory (for systems where 3725549e21daSmrg libraries must be found in the PATH setting at runtime) 3726fe4c343aSmrg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3727549e21daSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3728549e21daSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3729549e21daSmrg -export-symbols SYMFILE 3730549e21daSmrg try to export only the symbols listed in SYMFILE 3731549e21daSmrg -export-symbols-regex REGEX 3732549e21daSmrg try to export only the symbols matching REGEX 3733549e21daSmrg -LLIBDIR search LIBDIR for required installed libraries 3734549e21daSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 3735549e21daSmrg -module build a library that can dlopened 3736549e21daSmrg -no-fast-install disable the fast-install mode 3737549e21daSmrg -no-install link a not-installable executable 3738549e21daSmrg -no-undefined declare that a library does not refer to external symbols 3739549e21daSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3740fe4c343aSmrg -objectlist FILE use a list of object files found in FILE to specify objects 3741fe4c343aSmrg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3742549e21daSmrg -precious-files-regex REGEX 3743549e21daSmrg don't remove output files matching REGEX 3744549e21daSmrg -release RELEASE specify package release information 3745549e21daSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 3746549e21daSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 3747549e21daSmrg -shared only do dynamic linking of libtool libraries 3748549e21daSmrg -shrext SUFFIX override the standard shared library file extension 3749549e21daSmrg -static do not do any dynamic linking of uninstalled libtool libraries 3750549e21daSmrg -static-libtool-libs 3751549e21daSmrg do not do any dynamic linking of libtool libraries 3752549e21daSmrg -version-info CURRENT[:REVISION[:AGE]] 3753549e21daSmrg specify library version info [each variable defaults to 0] 3754549e21daSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 3755549e21daSmrg -Wc,FLAG 3756549e21daSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 3757549e21daSmrg -Wl,FLAG 3758549e21daSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 3759549e21daSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 3760ba6a1819Smrg 3761fe4c343aSmrgAll other options (arguments beginning with '-') are ignored. 3762ba6a1819Smrg 3763fe4c343aSmrgEvery other argument is treated as a filename. Files ending in '.la' are 3764549e21daSmrgtreated as uninstalled libtool libraries, other files are standard or library 3765549e21daSmrgobject files. 3766ba6a1819Smrg 3767fe4c343aSmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 3768fe4c343aSmrgonly library objects ('.lo' files) may be specified, and '-rpath' is 3769549e21daSmrgrequired, except when creating a convenience library. 3770ba6a1819Smrg 3771fe4c343aSmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 3772fe4c343aSmrgusing 'ar' and 'ranlib', or on Windows using 'lib'. 3773ba6a1819Smrg 3774fe4c343aSmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 3775549e21daSmrgis created, otherwise an executable program is created." 3776549e21daSmrg ;; 3777ba6a1819Smrg 3778549e21daSmrg uninstall) 3779549e21daSmrg $ECHO \ 3780549e21daSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 3781ba6a1819Smrg 3782549e21daSmrgRemove libraries from an installation directory. 3783ba6a1819Smrg 3784549e21daSmrgRM is the name of the program to use to delete files associated with each FILE 3785fe4c343aSmrg(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3786549e21daSmrgto RM. 3787ba6a1819Smrg 3788549e21daSmrgIf FILE is a libtool library, all the files associated with it are deleted. 3789549e21daSmrgOtherwise, only FILE itself is deleted using RM." 3790ba6a1819Smrg ;; 3791ba6a1819Smrg 3792549e21daSmrg *) 3793fe4c343aSmrg func_fatal_help "invalid operation mode '$opt_mode'" 3794549e21daSmrg ;; 3795549e21daSmrg esac 3796ba6a1819Smrg 3797549e21daSmrg echo 3798fe4c343aSmrg $ECHO "Try '$progname --help' for more information about other modes." 3799549e21daSmrg} 3800ba6a1819Smrg 3801549e21daSmrg# Now that we've collected a possible --mode arg, show help if necessary 3802549e21daSmrgif $opt_help; then 3803fe4c343aSmrg if test : = "$opt_help"; then 3804549e21daSmrg func_mode_help 3805549e21daSmrg else 3806549e21daSmrg { 3807549e21daSmrg func_help noexit 38081bedbe3fSmrg for opt_mode in compile link execute install finish uninstall clean; do 3809549e21daSmrg func_mode_help 3810549e21daSmrg done 3811fe4c343aSmrg } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 3812549e21daSmrg { 3813549e21daSmrg func_help noexit 38141bedbe3fSmrg for opt_mode in compile link execute install finish uninstall clean; do 3815549e21daSmrg echo 3816549e21daSmrg func_mode_help 3817549e21daSmrg done 3818549e21daSmrg } | 3819fe4c343aSmrg $SED '1d 3820549e21daSmrg /^When reporting/,/^Report/{ 3821549e21daSmrg H 3822549e21daSmrg d 3823549e21daSmrg } 3824549e21daSmrg $x 3825549e21daSmrg /information about other modes/d 3826549e21daSmrg /more detailed .*MODE/d 3827549e21daSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 3828549e21daSmrg fi 3829549e21daSmrg exit $? 3830549e21daSmrgfi 3831ba6a1819Smrg 3832ba6a1819Smrg 3833549e21daSmrg# func_mode_execute arg... 3834549e21daSmrgfunc_mode_execute () 3835549e21daSmrg{ 3836fe4c343aSmrg $debug_cmd 3837fe4c343aSmrg 3838549e21daSmrg # The first argument is the command name. 3839fe4c343aSmrg cmd=$nonopt 3840549e21daSmrg test -z "$cmd" && \ 3841549e21daSmrg func_fatal_help "you must specify a COMMAND" 3842ba6a1819Smrg 3843549e21daSmrg # Handle -dlopen flags immediately. 38441bedbe3fSmrg for file in $opt_dlopen; do 3845549e21daSmrg test -f "$file" \ 3846fe4c343aSmrg || func_fatal_help "'$file' is not a file" 3847ba6a1819Smrg 3848549e21daSmrg dir= 3849549e21daSmrg case $file in 3850549e21daSmrg *.la) 38511bedbe3fSmrg func_resolve_sysroot "$file" 38521bedbe3fSmrg file=$func_resolve_sysroot_result 38531bedbe3fSmrg 3854549e21daSmrg # Check to see that this really is a libtool archive. 3855549e21daSmrg func_lalib_unsafe_p "$file" \ 3856fe4c343aSmrg || func_fatal_help "'$lib' is not a valid libtool archive" 3857ba6a1819Smrg 3858549e21daSmrg # Read the libtool library. 3859549e21daSmrg dlname= 3860549e21daSmrg library_names= 3861549e21daSmrg func_source "$file" 3862ba6a1819Smrg 3863549e21daSmrg # Skip this library if it cannot be dlopened. 3864549e21daSmrg if test -z "$dlname"; then 3865549e21daSmrg # Warn if it was a shared library. 3866549e21daSmrg test -n "$library_names" && \ 3867fe4c343aSmrg func_warning "'$file' was not linked with '-export-dynamic'" 3868549e21daSmrg continue 3869549e21daSmrg fi 3870ba6a1819Smrg 3871549e21daSmrg func_dirname "$file" "" "." 3872fe4c343aSmrg dir=$func_dirname_result 3873ba6a1819Smrg 3874549e21daSmrg if test -f "$dir/$objdir/$dlname"; then 38751bedbe3fSmrg func_append dir "/$objdir" 3876549e21daSmrg else 3877549e21daSmrg if test ! -f "$dir/$dlname"; then 3878fe4c343aSmrg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 3879549e21daSmrg fi 3880549e21daSmrg fi 3881ba6a1819Smrg ;; 3882ba6a1819Smrg 3883549e21daSmrg *.lo) 3884549e21daSmrg # Just add the directory containing the .lo file. 3885549e21daSmrg func_dirname "$file" "" "." 3886fe4c343aSmrg dir=$func_dirname_result 3887ba6a1819Smrg ;; 3888ba6a1819Smrg 3889549e21daSmrg *) 3890fe4c343aSmrg func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 3891ba6a1819Smrg continue 3892ba6a1819Smrg ;; 3893549e21daSmrg esac 3894ba6a1819Smrg 3895549e21daSmrg # Get the absolute pathname. 3896549e21daSmrg absdir=`cd "$dir" && pwd` 3897fe4c343aSmrg test -n "$absdir" && dir=$absdir 3898ba6a1819Smrg 3899549e21daSmrg # Now add the directory to shlibpath_var. 3900549e21daSmrg if eval "test -z \"\$$shlibpath_var\""; then 3901549e21daSmrg eval "$shlibpath_var=\"\$dir\"" 3902549e21daSmrg else 3903549e21daSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 3904549e21daSmrg fi 3905549e21daSmrg done 3906ba6a1819Smrg 3907549e21daSmrg # This variable tells wrapper scripts just to set shlibpath_var 3908549e21daSmrg # rather than running their programs. 3909fe4c343aSmrg libtool_execute_magic=$magic 3910ba6a1819Smrg 3911549e21daSmrg # Check if any of the arguments is a wrapper script. 3912549e21daSmrg args= 3913549e21daSmrg for file 3914549e21daSmrg do 3915549e21daSmrg case $file in 3916549e21daSmrg -* | *.la | *.lo ) ;; 3917549e21daSmrg *) 3918549e21daSmrg # Do a test to see if this is really a libtool program. 3919549e21daSmrg if func_ltwrapper_script_p "$file"; then 3920549e21daSmrg func_source "$file" 3921549e21daSmrg # Transform arg to wrapped name. 3922fe4c343aSmrg file=$progdir/$program 3923549e21daSmrg elif func_ltwrapper_executable_p "$file"; then 3924549e21daSmrg func_ltwrapper_scriptname "$file" 3925549e21daSmrg func_source "$func_ltwrapper_scriptname_result" 3926549e21daSmrg # Transform arg to wrapped name. 3927fe4c343aSmrg file=$progdir/$program 3928549e21daSmrg fi 3929ba6a1819Smrg ;; 3930549e21daSmrg esac 3931549e21daSmrg # Quote arguments (to preserve shell metacharacters). 39321bedbe3fSmrg func_append_quoted args "$file" 3933549e21daSmrg done 3934ba6a1819Smrg 3935fe4c343aSmrg if $opt_dry_run; then 3936fe4c343aSmrg # Display what would be done. 3937fe4c343aSmrg if test -n "$shlibpath_var"; then 3938fe4c343aSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 3939fe4c343aSmrg echo "export $shlibpath_var" 3940fe4c343aSmrg fi 3941fe4c343aSmrg $ECHO "$cmd$args" 3942fe4c343aSmrg exit $EXIT_SUCCESS 3943fe4c343aSmrg else 3944549e21daSmrg if test -n "$shlibpath_var"; then 3945549e21daSmrg # Export the shlibpath_var. 3946549e21daSmrg eval "export $shlibpath_var" 3947549e21daSmrg fi 3948ba6a1819Smrg 3949549e21daSmrg # Restore saved environment variables 3950549e21daSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 3951549e21daSmrg do 3952549e21daSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 3953549e21daSmrg $lt_var=\$save_$lt_var; export $lt_var 3954549e21daSmrg else 3955549e21daSmrg $lt_unset $lt_var 3956549e21daSmrg fi" 3957549e21daSmrg done 3958ba6a1819Smrg 3959549e21daSmrg # Now prepare to actually exec the command. 3960fe4c343aSmrg exec_cmd=\$cmd$args 3961549e21daSmrg fi 3962549e21daSmrg} 3963ba6a1819Smrg 3964fe4c343aSmrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 3965ba6a1819Smrg 3966ba6a1819Smrg 3967549e21daSmrg# func_mode_finish arg... 3968549e21daSmrgfunc_mode_finish () 3969549e21daSmrg{ 3970fe4c343aSmrg $debug_cmd 3971fe4c343aSmrg 39721bedbe3fSmrg libs= 39731bedbe3fSmrg libdirs= 3974549e21daSmrg admincmds= 3975ba6a1819Smrg 39761bedbe3fSmrg for opt in "$nonopt" ${1+"$@"} 39771bedbe3fSmrg do 39781bedbe3fSmrg if test -d "$opt"; then 39791bedbe3fSmrg func_append libdirs " $opt" 39801bedbe3fSmrg 39811bedbe3fSmrg elif test -f "$opt"; then 39821bedbe3fSmrg if func_lalib_unsafe_p "$opt"; then 39831bedbe3fSmrg func_append libs " $opt" 39841bedbe3fSmrg else 3985fe4c343aSmrg func_warning "'$opt' is not a valid libtool archive" 39861bedbe3fSmrg fi 39871bedbe3fSmrg 39881bedbe3fSmrg else 3989fe4c343aSmrg func_fatal_error "invalid argument '$opt'" 39901bedbe3fSmrg fi 39911bedbe3fSmrg done 39921bedbe3fSmrg 39931bedbe3fSmrg if test -n "$libs"; then 39941bedbe3fSmrg if test -n "$lt_sysroot"; then 39951bedbe3fSmrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 39961bedbe3fSmrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 39971bedbe3fSmrg else 39981bedbe3fSmrg sysroot_cmd= 39991bedbe3fSmrg fi 40001bedbe3fSmrg 40011bedbe3fSmrg # Remove sysroot references 40021bedbe3fSmrg if $opt_dry_run; then 40031bedbe3fSmrg for lib in $libs; do 4004fe4c343aSmrg echo "removing references to $lt_sysroot and '=' prefixes from $lib" 40051bedbe3fSmrg done 40061bedbe3fSmrg else 40071bedbe3fSmrg tmpdir=`func_mktempdir` 40081bedbe3fSmrg for lib in $libs; do 4009fe4c343aSmrg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 40101bedbe3fSmrg > $tmpdir/tmp-la 40111bedbe3fSmrg mv -f $tmpdir/tmp-la $lib 40121bedbe3fSmrg done 40131bedbe3fSmrg ${RM}r "$tmpdir" 40141bedbe3fSmrg fi 40151bedbe3fSmrg fi 4016ba6a1819Smrg 40171bedbe3fSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4018549e21daSmrg for libdir in $libdirs; do 4019549e21daSmrg if test -n "$finish_cmds"; then 4020549e21daSmrg # Do each command in the finish commands. 4021549e21daSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4022549e21daSmrg'"$cmd"'"' 4023549e21daSmrg fi 4024549e21daSmrg if test -n "$finish_eval"; then 4025549e21daSmrg # Do the single finish_eval. 4026549e21daSmrg eval cmds=\"$finish_eval\" 40271bedbe3fSmrg $opt_dry_run || eval "$cmds" || func_append admincmds " 4028549e21daSmrg $cmds" 4029549e21daSmrg fi 4030549e21daSmrg done 4031549e21daSmrg fi 4032ba6a1819Smrg 4033549e21daSmrg # Exit here if they wanted silent mode. 4034fe4c343aSmrg $opt_quiet && exit $EXIT_SUCCESS 4035ba6a1819Smrg 40361bedbe3fSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 40371bedbe3fSmrg echo "----------------------------------------------------------------------" 40381bedbe3fSmrg echo "Libraries have been installed in:" 40391bedbe3fSmrg for libdir in $libdirs; do 40401bedbe3fSmrg $ECHO " $libdir" 40411bedbe3fSmrg done 40421bedbe3fSmrg echo 40431bedbe3fSmrg echo "If you ever happen to want to link against installed libraries" 40441bedbe3fSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 4045fe4c343aSmrg echo "specify the full pathname of the library, or use the '-LLIBDIR'" 40461bedbe3fSmrg echo "flag during linking and do at least one of the following:" 40471bedbe3fSmrg if test -n "$shlibpath_var"; then 4048fe4c343aSmrg echo " - add LIBDIR to the '$shlibpath_var' environment variable" 40491bedbe3fSmrg echo " during execution" 40501bedbe3fSmrg fi 40511bedbe3fSmrg if test -n "$runpath_var"; then 4052fe4c343aSmrg echo " - add LIBDIR to the '$runpath_var' environment variable" 40531bedbe3fSmrg echo " during linking" 40541bedbe3fSmrg fi 40551bedbe3fSmrg if test -n "$hardcode_libdir_flag_spec"; then 40561bedbe3fSmrg libdir=LIBDIR 40571bedbe3fSmrg eval flag=\"$hardcode_libdir_flag_spec\" 4058ba6a1819Smrg 4059fe4c343aSmrg $ECHO " - use the '$flag' linker flag" 40601bedbe3fSmrg fi 40611bedbe3fSmrg if test -n "$admincmds"; then 40621bedbe3fSmrg $ECHO " - have your system administrator run these commands:$admincmds" 40631bedbe3fSmrg fi 40641bedbe3fSmrg if test -f /etc/ld.so.conf; then 4065fe4c343aSmrg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 40661bedbe3fSmrg fi 40671bedbe3fSmrg echo 4068ba6a1819Smrg 40691bedbe3fSmrg echo "See any operating system documentation about shared libraries for" 40701bedbe3fSmrg case $host in 40711bedbe3fSmrg solaris2.[6789]|solaris2.1[0-9]) 40721bedbe3fSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 40731bedbe3fSmrg echo "pages." 40741bedbe3fSmrg ;; 40751bedbe3fSmrg *) 40761bedbe3fSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 40771bedbe3fSmrg ;; 40781bedbe3fSmrg esac 40791bedbe3fSmrg echo "----------------------------------------------------------------------" 40801bedbe3fSmrg fi 4081549e21daSmrg exit $EXIT_SUCCESS 4082549e21daSmrg} 4083ba6a1819Smrg 4084fe4c343aSmrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4085ba6a1819Smrg 4086ba6a1819Smrg 4087549e21daSmrg# func_mode_install arg... 4088549e21daSmrgfunc_mode_install () 4089549e21daSmrg{ 4090fe4c343aSmrg $debug_cmd 4091fe4c343aSmrg 4092549e21daSmrg # There may be an optional sh(1) argument at the beginning of 4093549e21daSmrg # install_prog (especially on Windows NT). 4094fe4c343aSmrg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4095549e21daSmrg # Allow the use of GNU shtool's install command. 4096fe4c343aSmrg case $nonopt in *shtool*) :;; *) false;; esac 4097fe4c343aSmrg then 4098549e21daSmrg # Aesthetically quote it. 4099549e21daSmrg func_quote_for_eval "$nonopt" 4100549e21daSmrg install_prog="$func_quote_for_eval_result " 4101549e21daSmrg arg=$1 4102549e21daSmrg shift 4103549e21daSmrg else 4104549e21daSmrg install_prog= 4105549e21daSmrg arg=$nonopt 4106549e21daSmrg fi 4107ba6a1819Smrg 4108549e21daSmrg # The real first argument should be the name of the installation program. 4109549e21daSmrg # Aesthetically quote it. 4110549e21daSmrg func_quote_for_eval "$arg" 41111bedbe3fSmrg func_append install_prog "$func_quote_for_eval_result" 4112549e21daSmrg install_shared_prog=$install_prog 4113549e21daSmrg case " $install_prog " in 4114549e21daSmrg *[\\\ /]cp\ *) install_cp=: ;; 4115549e21daSmrg *) install_cp=false ;; 4116549e21daSmrg esac 4117ba6a1819Smrg 4118549e21daSmrg # We need to accept at least all the BSD install flags. 4119549e21daSmrg dest= 4120549e21daSmrg files= 4121549e21daSmrg opts= 4122549e21daSmrg prev= 4123549e21daSmrg install_type= 4124fe4c343aSmrg isdir=false 4125549e21daSmrg stripme= 4126549e21daSmrg no_mode=: 4127549e21daSmrg for arg 4128549e21daSmrg do 4129549e21daSmrg arg2= 4130549e21daSmrg if test -n "$dest"; then 41311bedbe3fSmrg func_append files " $dest" 4132549e21daSmrg dest=$arg 4133549e21daSmrg continue 4134549e21daSmrg fi 4135ba6a1819Smrg 4136549e21daSmrg case $arg in 4137fe4c343aSmrg -d) isdir=: ;; 4138549e21daSmrg -f) 4139549e21daSmrg if $install_cp; then :; else 4140549e21daSmrg prev=$arg 4141ba6a1819Smrg fi 4142549e21daSmrg ;; 4143549e21daSmrg -g | -m | -o) 4144549e21daSmrg prev=$arg 4145549e21daSmrg ;; 4146549e21daSmrg -s) 4147549e21daSmrg stripme=" -s" 4148ba6a1819Smrg continue 4149ba6a1819Smrg ;; 4150549e21daSmrg -*) 4151549e21daSmrg ;; 4152ba6a1819Smrg *) 4153549e21daSmrg # If the previous option needed an argument, then skip it. 4154549e21daSmrg if test -n "$prev"; then 4155fe4c343aSmrg if test X-m = "X$prev" && test -n "$install_override_mode"; then 4156549e21daSmrg arg2=$install_override_mode 4157549e21daSmrg no_mode=false 4158549e21daSmrg fi 4159549e21daSmrg prev= 4160549e21daSmrg else 4161549e21daSmrg dest=$arg 4162549e21daSmrg continue 4163549e21daSmrg fi 4164ba6a1819Smrg ;; 4165549e21daSmrg esac 4166ba6a1819Smrg 4167549e21daSmrg # Aesthetically quote the argument. 4168549e21daSmrg func_quote_for_eval "$arg" 41691bedbe3fSmrg func_append install_prog " $func_quote_for_eval_result" 4170549e21daSmrg if test -n "$arg2"; then 4171549e21daSmrg func_quote_for_eval "$arg2" 4172ba6a1819Smrg fi 41731bedbe3fSmrg func_append install_shared_prog " $func_quote_for_eval_result" 4174549e21daSmrg done 4175ba6a1819Smrg 4176549e21daSmrg test -z "$install_prog" && \ 4177549e21daSmrg func_fatal_help "you must specify an install program" 4178ba6a1819Smrg 4179549e21daSmrg test -n "$prev" && \ 4180fe4c343aSmrg func_fatal_help "the '$prev' option requires an argument" 4181ba6a1819Smrg 4182549e21daSmrg if test -n "$install_override_mode" && $no_mode; then 4183549e21daSmrg if $install_cp; then :; else 4184549e21daSmrg func_quote_for_eval "$install_override_mode" 41851bedbe3fSmrg func_append install_shared_prog " -m $func_quote_for_eval_result" 4186549e21daSmrg fi 4187ba6a1819Smrg fi 4188ba6a1819Smrg 4189549e21daSmrg if test -z "$files"; then 4190549e21daSmrg if test -z "$dest"; then 4191549e21daSmrg func_fatal_help "no file or destination specified" 4192549e21daSmrg else 4193549e21daSmrg func_fatal_help "you must specify a destination" 4194ba6a1819Smrg fi 4195ba6a1819Smrg fi 4196ba6a1819Smrg 4197549e21daSmrg # Strip any trailing slash from the destination. 4198549e21daSmrg func_stripname '' '/' "$dest" 4199549e21daSmrg dest=$func_stripname_result 4200ba6a1819Smrg 4201549e21daSmrg # Check to see that the destination is a directory. 4202fe4c343aSmrg test -d "$dest" && isdir=: 4203fe4c343aSmrg if $isdir; then 4204fe4c343aSmrg destdir=$dest 4205549e21daSmrg destname= 4206549e21daSmrg else 4207549e21daSmrg func_dirname_and_basename "$dest" "" "." 4208fe4c343aSmrg destdir=$func_dirname_result 4209fe4c343aSmrg destname=$func_basename_result 4210549e21daSmrg 4211549e21daSmrg # Not a directory, so check to see that there is only one file specified. 4212549e21daSmrg set dummy $files; shift 4213549e21daSmrg test "$#" -gt 1 && \ 4214fe4c343aSmrg func_fatal_help "'$dest' is not a directory" 4215549e21daSmrg fi 4216549e21daSmrg case $destdir in 4217549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4218ba6a1819Smrg *) 4219549e21daSmrg for file in $files; do 4220549e21daSmrg case $file in 4221549e21daSmrg *.lo) ;; 4222549e21daSmrg *) 4223fe4c343aSmrg func_fatal_help "'$destdir' must be an absolute directory name" 4224549e21daSmrg ;; 4225549e21daSmrg esac 4226549e21daSmrg done 4227ba6a1819Smrg ;; 4228ba6a1819Smrg esac 4229ba6a1819Smrg 4230549e21daSmrg # This variable tells wrapper scripts just to set variables rather 4231549e21daSmrg # than running their programs. 4232fe4c343aSmrg libtool_install_magic=$magic 4233ba6a1819Smrg 4234549e21daSmrg staticlibs= 4235549e21daSmrg future_libdirs= 4236549e21daSmrg current_libdirs= 4237549e21daSmrg for file in $files; do 4238ba6a1819Smrg 4239549e21daSmrg # Do each installation. 4240549e21daSmrg case $file in 4241549e21daSmrg *.$libext) 4242549e21daSmrg # Do the static libraries later. 42431bedbe3fSmrg func_append staticlibs " $file" 4244549e21daSmrg ;; 4245ba6a1819Smrg 4246549e21daSmrg *.la) 42471bedbe3fSmrg func_resolve_sysroot "$file" 42481bedbe3fSmrg file=$func_resolve_sysroot_result 42491bedbe3fSmrg 4250549e21daSmrg # Check to see that this really is a libtool archive. 4251549e21daSmrg func_lalib_unsafe_p "$file" \ 4252fe4c343aSmrg || func_fatal_help "'$file' is not a valid libtool archive" 4253549e21daSmrg 4254549e21daSmrg library_names= 4255549e21daSmrg old_library= 4256549e21daSmrg relink_command= 4257549e21daSmrg func_source "$file" 4258549e21daSmrg 4259549e21daSmrg # Add the libdir to current_libdirs if it is the destination. 4260549e21daSmrg if test "X$destdir" = "X$libdir"; then 4261549e21daSmrg case "$current_libdirs " in 4262549e21daSmrg *" $libdir "*) ;; 42631bedbe3fSmrg *) func_append current_libdirs " $libdir" ;; 4264ba6a1819Smrg esac 4265549e21daSmrg else 4266549e21daSmrg # Note the libdir as a future libdir. 4267549e21daSmrg case "$future_libdirs " in 4268549e21daSmrg *" $libdir "*) ;; 42691bedbe3fSmrg *) func_append future_libdirs " $libdir" ;; 4270549e21daSmrg esac 4271549e21daSmrg fi 4272549e21daSmrg 4273549e21daSmrg func_dirname "$file" "/" "" 4274fe4c343aSmrg dir=$func_dirname_result 42751bedbe3fSmrg func_append dir "$objdir" 4276549e21daSmrg 4277549e21daSmrg if test -n "$relink_command"; then 4278549e21daSmrg # Determine the prefix the user has applied to our future dir. 4279549e21daSmrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4280549e21daSmrg 4281549e21daSmrg # Don't allow the user to place us outside of our expected 4282549e21daSmrg # location b/c this prevents finding dependent libraries that 4283549e21daSmrg # are installed to the same prefix. 4284549e21daSmrg # At present, this check doesn't affect windows .dll's that 4285549e21daSmrg # are installed into $libdir/../bin (currently, that works fine) 4286549e21daSmrg # but it's something to keep an eye on. 4287549e21daSmrg test "$inst_prefix_dir" = "$destdir" && \ 4288fe4c343aSmrg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4289549e21daSmrg 4290549e21daSmrg if test -n "$inst_prefix_dir"; then 4291549e21daSmrg # Stick the inst_prefix_dir data into the link command. 4292549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4293ba6a1819Smrg else 4294549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4295ba6a1819Smrg fi 4296549e21daSmrg 4297fe4c343aSmrg func_warning "relinking '$file'" 4298549e21daSmrg func_show_eval "$relink_command" \ 4299fe4c343aSmrg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4300549e21daSmrg fi 4301549e21daSmrg 4302549e21daSmrg # See the names of the shared library. 4303549e21daSmrg set dummy $library_names; shift 4304549e21daSmrg if test -n "$1"; then 4305fe4c343aSmrg realname=$1 4306549e21daSmrg shift 4307549e21daSmrg 4308fe4c343aSmrg srcname=$realname 4309fe4c343aSmrg test -n "$relink_command" && srcname=${realname}T 4310549e21daSmrg 4311549e21daSmrg # Install the shared library and build the symlinks. 4312549e21daSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4313549e21daSmrg 'exit $?' 4314fe4c343aSmrg tstripme=$stripme 4315549e21daSmrg case $host_os in 4316549e21daSmrg cygwin* | mingw* | pw32* | cegcc*) 4317549e21daSmrg case $realname in 4318549e21daSmrg *.dll.a) 4319fe4c343aSmrg tstripme= 4320fe4c343aSmrg ;; 4321fe4c343aSmrg esac 4322fe4c343aSmrg ;; 4323fe4c343aSmrg os2*) 4324fe4c343aSmrg case $realname in 4325fe4c343aSmrg *_dll.a) 4326fe4c343aSmrg tstripme= 4327549e21daSmrg ;; 4328549e21daSmrg esac 4329549e21daSmrg ;; 4330549e21daSmrg esac 4331549e21daSmrg if test -n "$tstripme" && test -n "$striplib"; then 4332549e21daSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 4333ba6a1819Smrg fi 4334549e21daSmrg 4335549e21daSmrg if test "$#" -gt 0; then 4336549e21daSmrg # Delete the old symlinks, and create new ones. 4337fe4c343aSmrg # Try 'ln -sf' first, because the 'ln' binary might depend on 4338549e21daSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 4339549e21daSmrg # so we also need to try rm && ln -s. 4340549e21daSmrg for linkname 4341549e21daSmrg do 4342549e21daSmrg test "$linkname" != "$realname" \ 4343549e21daSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4344ba6a1819Smrg done 4345ba6a1819Smrg fi 4346549e21daSmrg 4347549e21daSmrg # Do each command in the postinstall commands. 4348fe4c343aSmrg lib=$destdir/$realname 4349549e21daSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 4350549e21daSmrg fi 4351549e21daSmrg 4352549e21daSmrg # Install the pseudo-library for information purposes. 4353549e21daSmrg func_basename "$file" 4354fe4c343aSmrg name=$func_basename_result 4355fe4c343aSmrg instname=$dir/${name}i 4356549e21daSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4357549e21daSmrg 4358549e21daSmrg # Maybe install the static library, too. 43591bedbe3fSmrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4360549e21daSmrg ;; 4361549e21daSmrg 4362549e21daSmrg *.lo) 4363549e21daSmrg # Install (i.e. copy) a libtool object. 4364549e21daSmrg 4365549e21daSmrg # Figure out destination file name, if it wasn't already specified. 4366549e21daSmrg if test -n "$destname"; then 4367fe4c343aSmrg destfile=$destdir/$destname 4368549e21daSmrg else 4369549e21daSmrg func_basename "$file" 4370fe4c343aSmrg destfile=$func_basename_result 4371fe4c343aSmrg destfile=$destdir/$destfile 4372549e21daSmrg fi 4373549e21daSmrg 4374549e21daSmrg # Deduce the name of the destination old-style object file. 4375549e21daSmrg case $destfile in 4376549e21daSmrg *.lo) 4377549e21daSmrg func_lo2o "$destfile" 4378549e21daSmrg staticdest=$func_lo2o_result 4379ba6a1819Smrg ;; 4380549e21daSmrg *.$objext) 4381fe4c343aSmrg staticdest=$destfile 4382549e21daSmrg destfile= 4383ba6a1819Smrg ;; 4384549e21daSmrg *) 4385fe4c343aSmrg func_fatal_help "cannot copy a libtool object to '$destfile'" 4386ba6a1819Smrg ;; 4387549e21daSmrg esac 4388549e21daSmrg 4389549e21daSmrg # Install the libtool object if requested. 4390549e21daSmrg test -n "$destfile" && \ 4391549e21daSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 4392549e21daSmrg 4393549e21daSmrg # Install the old object if enabled. 4394fe4c343aSmrg if test yes = "$build_old_libs"; then 4395549e21daSmrg # Deduce the name of the old-style object file. 4396549e21daSmrg func_lo2o "$file" 4397549e21daSmrg staticobj=$func_lo2o_result 4398549e21daSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4399ba6a1819Smrg fi 4400549e21daSmrg exit $EXIT_SUCCESS 4401549e21daSmrg ;; 4402ba6a1819Smrg 4403549e21daSmrg *) 4404549e21daSmrg # Figure out destination file name, if it wasn't already specified. 4405549e21daSmrg if test -n "$destname"; then 4406fe4c343aSmrg destfile=$destdir/$destname 4407ba6a1819Smrg else 4408549e21daSmrg func_basename "$file" 4409fe4c343aSmrg destfile=$func_basename_result 4410fe4c343aSmrg destfile=$destdir/$destfile 4411ba6a1819Smrg fi 4412ba6a1819Smrg 4413549e21daSmrg # If the file is missing, and there is a .exe on the end, strip it 4414549e21daSmrg # because it is most likely a libtool script we actually want to 4415549e21daSmrg # install 4416fe4c343aSmrg stripped_ext= 4417549e21daSmrg case $file in 4418549e21daSmrg *.exe) 4419549e21daSmrg if test ! -f "$file"; then 4420549e21daSmrg func_stripname '' '.exe' "$file" 4421549e21daSmrg file=$func_stripname_result 4422fe4c343aSmrg stripped_ext=.exe 4423549e21daSmrg fi 4424549e21daSmrg ;; 4425549e21daSmrg esac 4426ba6a1819Smrg 4427549e21daSmrg # Do a test to see if this is really a libtool program. 4428549e21daSmrg case $host in 4429549e21daSmrg *cygwin* | *mingw*) 4430549e21daSmrg if func_ltwrapper_executable_p "$file"; then 4431549e21daSmrg func_ltwrapper_scriptname "$file" 4432549e21daSmrg wrapper=$func_ltwrapper_scriptname_result 4433549e21daSmrg else 4434549e21daSmrg func_stripname '' '.exe' "$file" 4435549e21daSmrg wrapper=$func_stripname_result 4436549e21daSmrg fi 4437549e21daSmrg ;; 4438549e21daSmrg *) 4439549e21daSmrg wrapper=$file 4440549e21daSmrg ;; 4441ba6a1819Smrg esac 4442549e21daSmrg if func_ltwrapper_script_p "$wrapper"; then 4443549e21daSmrg notinst_deplibs= 4444549e21daSmrg relink_command= 4445ba6a1819Smrg 4446549e21daSmrg func_source "$wrapper" 4447ba6a1819Smrg 4448549e21daSmrg # Check the variables that should have been set. 4449549e21daSmrg test -z "$generated_by_libtool_version" && \ 4450fe4c343aSmrg func_fatal_error "invalid libtool wrapper script '$wrapper'" 4451549e21daSmrg 4452fe4c343aSmrg finalize=: 4453549e21daSmrg for lib in $notinst_deplibs; do 4454549e21daSmrg # Check to see that each library is installed. 4455549e21daSmrg libdir= 4456549e21daSmrg if test -f "$lib"; then 4457549e21daSmrg func_source "$lib" 4458ba6a1819Smrg fi 4459fe4c343aSmrg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4460549e21daSmrg if test -n "$libdir" && test ! -f "$libfile"; then 4461fe4c343aSmrg func_warning "'$lib' has not been installed in '$libdir'" 4462fe4c343aSmrg finalize=false 4463549e21daSmrg fi 4464549e21daSmrg done 4465ba6a1819Smrg 4466549e21daSmrg relink_command= 4467549e21daSmrg func_source "$wrapper" 4468ba6a1819Smrg 4469549e21daSmrg outputname= 4470fe4c343aSmrg if test no = "$fast_install" && test -n "$relink_command"; then 4471549e21daSmrg $opt_dry_run || { 4472fe4c343aSmrg if $finalize; then 4473549e21daSmrg tmpdir=`func_mktempdir` 4474549e21daSmrg func_basename "$file$stripped_ext" 4475fe4c343aSmrg file=$func_basename_result 4476fe4c343aSmrg outputname=$tmpdir/$file 4477549e21daSmrg # Replace the output file specification. 4478549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4479549e21daSmrg 4480fe4c343aSmrg $opt_quiet || { 4481549e21daSmrg func_quote_for_expand "$relink_command" 4482549e21daSmrg eval "func_echo $func_quote_for_expand_result" 4483549e21daSmrg } 4484549e21daSmrg if eval "$relink_command"; then : 4485549e21daSmrg else 4486fe4c343aSmrg func_error "error: relink '$file' with the above command before installing it" 4487549e21daSmrg $opt_dry_run || ${RM}r "$tmpdir" 4488549e21daSmrg continue 4489549e21daSmrg fi 4490fe4c343aSmrg file=$outputname 4491549e21daSmrg else 4492fe4c343aSmrg func_warning "cannot relink '$file'" 4493549e21daSmrg fi 4494549e21daSmrg } 4495ba6a1819Smrg else 4496549e21daSmrg # Install the binary that we compiled earlier. 4497549e21daSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4498ba6a1819Smrg fi 4499549e21daSmrg fi 4500ba6a1819Smrg 4501549e21daSmrg # remove .exe since cygwin /usr/bin/install will append another 4502549e21daSmrg # one anyway 4503549e21daSmrg case $install_prog,$host in 4504549e21daSmrg */usr/bin/install*,*cygwin*) 4505549e21daSmrg case $file:$destfile in 4506549e21daSmrg *.exe:*.exe) 4507549e21daSmrg # this is ok 4508549e21daSmrg ;; 4509549e21daSmrg *.exe:*) 4510549e21daSmrg destfile=$destfile.exe 4511549e21daSmrg ;; 4512549e21daSmrg *:*.exe) 4513549e21daSmrg func_stripname '' '.exe' "$destfile" 4514549e21daSmrg destfile=$func_stripname_result 4515549e21daSmrg ;; 4516549e21daSmrg esac 4517ba6a1819Smrg ;; 4518ba6a1819Smrg esac 4519549e21daSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4520549e21daSmrg $opt_dry_run || if test -n "$outputname"; then 4521549e21daSmrg ${RM}r "$tmpdir" 4522549e21daSmrg fi 4523549e21daSmrg ;; 4524549e21daSmrg esac 4525549e21daSmrg done 4526ba6a1819Smrg 4527549e21daSmrg for file in $staticlibs; do 4528549e21daSmrg func_basename "$file" 4529fe4c343aSmrg name=$func_basename_result 4530ba6a1819Smrg 4531549e21daSmrg # Set up the ranlib parameters. 4532fe4c343aSmrg oldlib=$destdir/$name 45331bedbe3fSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 45341bedbe3fSmrg tool_oldlib=$func_to_tool_file_result 4535ba6a1819Smrg 4536549e21daSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4537ba6a1819Smrg 4538549e21daSmrg if test -n "$stripme" && test -n "$old_striplib"; then 45391bedbe3fSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4540549e21daSmrg fi 4541ba6a1819Smrg 4542549e21daSmrg # Do each command in the postinstall commands. 4543549e21daSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4544549e21daSmrg done 4545ba6a1819Smrg 4546549e21daSmrg test -n "$future_libdirs" && \ 4547fe4c343aSmrg func_warning "remember to run '$progname --finish$future_libdirs'" 4548ba6a1819Smrg 4549549e21daSmrg if test -n "$current_libdirs"; then 4550549e21daSmrg # Maybe just do a dry run. 4551549e21daSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 4552fe4c343aSmrg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4553549e21daSmrg else 4554549e21daSmrg exit $EXIT_SUCCESS 4555549e21daSmrg fi 4556549e21daSmrg} 4557ba6a1819Smrg 4558fe4c343aSmrgtest install = "$opt_mode" && func_mode_install ${1+"$@"} 4559ba6a1819Smrg 4560ba6a1819Smrg 4561549e21daSmrg# func_generate_dlsyms outputname originator pic_p 4562549e21daSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 4563549e21daSmrg# a dlpreopen symbol table. 4564549e21daSmrgfunc_generate_dlsyms () 4565549e21daSmrg{ 4566fe4c343aSmrg $debug_cmd 4567fe4c343aSmrg 4568fe4c343aSmrg my_outputname=$1 4569fe4c343aSmrg my_originator=$2 4570fe4c343aSmrg my_pic_p=${3-false} 4571fe4c343aSmrg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4572549e21daSmrg my_dlsyms= 4573549e21daSmrg 4574fe4c343aSmrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4575549e21daSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 4576fe4c343aSmrg my_dlsyms=${my_outputname}S.c 4577549e21daSmrg else 4578549e21daSmrg func_error "not configured to extract global symbols from dlpreopened files" 4579549e21daSmrg fi 4580549e21daSmrg fi 4581ba6a1819Smrg 4582549e21daSmrg if test -n "$my_dlsyms"; then 4583549e21daSmrg case $my_dlsyms in 4584549e21daSmrg "") ;; 4585549e21daSmrg *.c) 4586549e21daSmrg # Discover the nlist of each of the dlfiles. 4587fe4c343aSmrg nlist=$output_objdir/$my_outputname.nm 4588549e21daSmrg 4589549e21daSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4590549e21daSmrg 4591549e21daSmrg # Parse the name list into a source file. 4592549e21daSmrg func_verbose "creating $output_objdir/$my_dlsyms" 4593549e21daSmrg 4594549e21daSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4595fe4c343aSmrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4596fe4c343aSmrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4597549e21daSmrg 4598549e21daSmrg#ifdef __cplusplus 4599549e21daSmrgextern \"C\" { 4600549e21daSmrg#endif 4601549e21daSmrg 4602fe4c343aSmrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4603549e21daSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4604549e21daSmrg#endif 4605549e21daSmrg 46061bedbe3fSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4607fe4c343aSmrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4608fe4c343aSmrg/* DATA imports from DLLs on WIN32 can't be const, because runtime 46091bedbe3fSmrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 46101bedbe3fSmrg# define LT_DLSYM_CONST 4611fe4c343aSmrg#elif defined __osf__ 46121bedbe3fSmrg/* This system does not cope well with relocations in const data. */ 46131bedbe3fSmrg# define LT_DLSYM_CONST 46141bedbe3fSmrg#else 46151bedbe3fSmrg# define LT_DLSYM_CONST const 46161bedbe3fSmrg#endif 46171bedbe3fSmrg 4618fe4c343aSmrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4619fe4c343aSmrg 4620549e21daSmrg/* External symbol declarations for the compiler. */\ 4621549e21daSmrg" 4622549e21daSmrg 4623fe4c343aSmrg if test yes = "$dlself"; then 4624fe4c343aSmrg func_verbose "generating symbol list for '$output'" 4625549e21daSmrg 4626549e21daSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4627549e21daSmrg 4628549e21daSmrg # Add our own program objects to the symbol list. 4629549e21daSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4630549e21daSmrg for progfile in $progfiles; do 46311bedbe3fSmrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4632fe4c343aSmrg func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 46331bedbe3fSmrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4634549e21daSmrg done 4635549e21daSmrg 4636549e21daSmrg if test -n "$exclude_expsyms"; then 4637549e21daSmrg $opt_dry_run || { 4638549e21daSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4639549e21daSmrg eval '$MV "$nlist"T "$nlist"' 4640549e21daSmrg } 4641ba6a1819Smrg fi 4642ba6a1819Smrg 4643549e21daSmrg if test -n "$export_symbols_regex"; then 4644549e21daSmrg $opt_dry_run || { 4645549e21daSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4646549e21daSmrg eval '$MV "$nlist"T "$nlist"' 4647549e21daSmrg } 4648ba6a1819Smrg fi 4649549e21daSmrg 4650549e21daSmrg # Prepare the list of exported symbols 4651549e21daSmrg if test -z "$export_symbols"; then 4652fe4c343aSmrg export_symbols=$output_objdir/$outputname.exp 4653549e21daSmrg $opt_dry_run || { 4654549e21daSmrg $RM $export_symbols 4655fe4c343aSmrg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4656549e21daSmrg case $host in 4657549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 4658549e21daSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4659549e21daSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4660549e21daSmrg ;; 4661ba6a1819Smrg esac 4662549e21daSmrg } 4663549e21daSmrg else 4664549e21daSmrg $opt_dry_run || { 4665fe4c343aSmrg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4666549e21daSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4667549e21daSmrg eval '$MV "$nlist"T "$nlist"' 4668549e21daSmrg case $host in 4669549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 4670549e21daSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4671549e21daSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4672549e21daSmrg ;; 4673ba6a1819Smrg esac 4674549e21daSmrg } 4675ba6a1819Smrg fi 4676549e21daSmrg fi 4677ba6a1819Smrg 4678549e21daSmrg for dlprefile in $dlprefiles; do 4679fe4c343aSmrg func_verbose "extracting global C symbols from '$dlprefile'" 4680549e21daSmrg func_basename "$dlprefile" 4681fe4c343aSmrg name=$func_basename_result 46821bedbe3fSmrg case $host in 46831bedbe3fSmrg *cygwin* | *mingw* | *cegcc* ) 46841bedbe3fSmrg # if an import library, we need to obtain dlname 46851bedbe3fSmrg if func_win32_import_lib_p "$dlprefile"; then 46861bedbe3fSmrg func_tr_sh "$dlprefile" 46871bedbe3fSmrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 4688fe4c343aSmrg dlprefile_dlbasename= 46891bedbe3fSmrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 46901bedbe3fSmrg # Use subshell, to avoid clobbering current variable values 46911bedbe3fSmrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4692fe4c343aSmrg if test -n "$dlprefile_dlname"; then 46931bedbe3fSmrg func_basename "$dlprefile_dlname" 4694fe4c343aSmrg dlprefile_dlbasename=$func_basename_result 46951bedbe3fSmrg else 46961bedbe3fSmrg # no lafile. user explicitly requested -dlpreopen <import library>. 46971bedbe3fSmrg $sharedlib_from_linklib_cmd "$dlprefile" 46981bedbe3fSmrg dlprefile_dlbasename=$sharedlib_from_linklib_result 46991bedbe3fSmrg fi 47001bedbe3fSmrg fi 47011bedbe3fSmrg $opt_dry_run || { 4702fe4c343aSmrg if test -n "$dlprefile_dlbasename"; then 47031bedbe3fSmrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 47041bedbe3fSmrg else 47051bedbe3fSmrg func_warning "Could not compute DLL name from $name" 47061bedbe3fSmrg eval '$ECHO ": $name " >> "$nlist"' 47071bedbe3fSmrg fi 47081bedbe3fSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 47091bedbe3fSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 47101bedbe3fSmrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 47111bedbe3fSmrg } 47121bedbe3fSmrg else # not an import lib 47131bedbe3fSmrg $opt_dry_run || { 47141bedbe3fSmrg eval '$ECHO ": $name " >> "$nlist"' 47151bedbe3fSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 47161bedbe3fSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 47171bedbe3fSmrg } 47181bedbe3fSmrg fi 47191bedbe3fSmrg ;; 47201bedbe3fSmrg *) 47211bedbe3fSmrg $opt_dry_run || { 47221bedbe3fSmrg eval '$ECHO ": $name " >> "$nlist"' 47231bedbe3fSmrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 47241bedbe3fSmrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 47251bedbe3fSmrg } 47261bedbe3fSmrg ;; 47271bedbe3fSmrg esac 4728549e21daSmrg done 4729ba6a1819Smrg 4730549e21daSmrg $opt_dry_run || { 4731549e21daSmrg # Make sure we have at least an empty file. 4732549e21daSmrg test -f "$nlist" || : > "$nlist" 4733ba6a1819Smrg 4734549e21daSmrg if test -n "$exclude_expsyms"; then 4735549e21daSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4736549e21daSmrg $MV "$nlist"T "$nlist" 4737ba6a1819Smrg fi 4738ba6a1819Smrg 4739549e21daSmrg # Try sorting and uniquifying the output. 4740549e21daSmrg if $GREP -v "^: " < "$nlist" | 4741549e21daSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 4742549e21daSmrg sort -k 3 4743ba6a1819Smrg else 4744549e21daSmrg sort +2 4745549e21daSmrg fi | 4746549e21daSmrg uniq > "$nlist"S; then 4747549e21daSmrg : 4748ba6a1819Smrg else 4749549e21daSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 4750ba6a1819Smrg fi 4751ba6a1819Smrg 4752549e21daSmrg if test -f "$nlist"S; then 4753549e21daSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 4754ba6a1819Smrg else 4755549e21daSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 4756ba6a1819Smrg fi 4757ba6a1819Smrg 4758fe4c343aSmrg func_show_eval '$RM "${nlist}I"' 4759fe4c343aSmrg if test -n "$global_symbol_to_import"; then 4760fe4c343aSmrg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 4761fe4c343aSmrg fi 4762fe4c343aSmrg 4763549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 4764ba6a1819Smrg 4765549e21daSmrg/* The mapping between symbol names and symbols. */ 4766549e21daSmrgtypedef struct { 4767549e21daSmrg const char *name; 4768549e21daSmrg void *address; 4769549e21daSmrg} lt_dlsymlist; 47701bedbe3fSmrgextern LT_DLSYM_CONST lt_dlsymlist 4771fe4c343aSmrglt_${my_prefix}_LTX_preloaded_symbols[];\ 4772fe4c343aSmrg" 4773fe4c343aSmrg 4774fe4c343aSmrg if test -s "$nlist"I; then 4775fe4c343aSmrg echo >> "$output_objdir/$my_dlsyms" "\ 4776fe4c343aSmrgstatic void lt_syminit(void) 4777fe4c343aSmrg{ 4778fe4c343aSmrg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 4779fe4c343aSmrg for (; symbol->name; ++symbol) 4780fe4c343aSmrg {" 4781fe4c343aSmrg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 4782fe4c343aSmrg echo >> "$output_objdir/$my_dlsyms" "\ 4783fe4c343aSmrg } 4784fe4c343aSmrg}" 4785fe4c343aSmrg fi 4786fe4c343aSmrg echo >> "$output_objdir/$my_dlsyms" "\ 47871bedbe3fSmrgLT_DLSYM_CONST lt_dlsymlist 4788549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 4789fe4c343aSmrg{ {\"$my_originator\", (void *) 0}," 4790fe4c343aSmrg 4791fe4c343aSmrg if test -s "$nlist"I; then 4792fe4c343aSmrg echo >> "$output_objdir/$my_dlsyms" "\ 4793fe4c343aSmrg {\"@INIT@\", (void *) <_syminit}," 4794fe4c343aSmrg fi 4795549e21daSmrg 4796549e21daSmrg case $need_lib_prefix in 4797549e21daSmrg no) 4798549e21daSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 4799549e21daSmrg ;; 4800549e21daSmrg *) 4801549e21daSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 4802549e21daSmrg ;; 4803549e21daSmrg esac 4804549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 4805549e21daSmrg {0, (void *) 0} 4806549e21daSmrg}; 4807549e21daSmrg 4808549e21daSmrg/* This works around a problem in FreeBSD linker */ 4809549e21daSmrg#ifdef FREEBSD_WORKAROUND 4810549e21daSmrgstatic const void *lt_preloaded_setup() { 4811549e21daSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 4812549e21daSmrg} 4813549e21daSmrg#endif 4814549e21daSmrg 4815549e21daSmrg#ifdef __cplusplus 4816549e21daSmrg} 4817549e21daSmrg#endif\ 4818549e21daSmrg" 4819549e21daSmrg } # !$opt_dry_run 4820549e21daSmrg 4821549e21daSmrg pic_flag_for_symtable= 4822549e21daSmrg case "$compile_command " in 4823549e21daSmrg *" -static "*) ;; 4824549e21daSmrg *) 4825549e21daSmrg case $host in 4826549e21daSmrg # compiling the symbol table file with pic_flag works around 4827549e21daSmrg # a FreeBSD bug that causes programs to crash when -lm is 4828549e21daSmrg # linked before any other PIC object. But we must not use 4829549e21daSmrg # pic_flag when linking with -static. The problem exists in 4830549e21daSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 48311bedbe3fSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 4832549e21daSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 4833549e21daSmrg *-*-hpux*) 4834549e21daSmrg pic_flag_for_symtable=" $pic_flag" ;; 4835549e21daSmrg *) 4836fe4c343aSmrg $my_pic_p && pic_flag_for_symtable=" $pic_flag" 4837549e21daSmrg ;; 4838549e21daSmrg esac 4839549e21daSmrg ;; 4840549e21daSmrg esac 4841549e21daSmrg symtab_cflags= 4842549e21daSmrg for arg in $LTCFLAGS; do 4843549e21daSmrg case $arg in 4844549e21daSmrg -pie | -fpie | -fPIE) ;; 48451bedbe3fSmrg *) func_append symtab_cflags " $arg" ;; 4846549e21daSmrg esac 4847549e21daSmrg done 4848ba6a1819Smrg 4849549e21daSmrg # Now compile the dynamic symbol file. 4850549e21daSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 4851ba6a1819Smrg 4852549e21daSmrg # Clean up the generated files. 4853fe4c343aSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 4854549e21daSmrg 4855549e21daSmrg # Transform the symbol file into the correct name. 4856fe4c343aSmrg symfileobj=$output_objdir/${my_outputname}S.$objext 4857549e21daSmrg case $host in 4858549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 4859549e21daSmrg if test -f "$output_objdir/$my_outputname.def"; then 4860549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4861549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4862549e21daSmrg else 4863549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4864549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4865549e21daSmrg fi 4866549e21daSmrg ;; 4867549e21daSmrg *) 4868549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4869549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4870ba6a1819Smrg ;; 4871ba6a1819Smrg esac 4872549e21daSmrg ;; 4873549e21daSmrg *) 4874fe4c343aSmrg func_fatal_error "unknown suffix for '$my_dlsyms'" 4875549e21daSmrg ;; 4876549e21daSmrg esac 4877549e21daSmrg else 4878549e21daSmrg # We keep going just in case the user didn't refer to 4879549e21daSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 4880549e21daSmrg # really was required. 4881ba6a1819Smrg 4882549e21daSmrg # Nullify the symbol file. 4883549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 4884549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 4885549e21daSmrg fi 4886549e21daSmrg} 4887ba6a1819Smrg 4888fe4c343aSmrg# func_cygming_gnu_implib_p ARG 4889fe4c343aSmrg# This predicate returns with zero status (TRUE) if 4890fe4c343aSmrg# ARG is a GNU/binutils-style import library. Returns 4891fe4c343aSmrg# with nonzero status (FALSE) otherwise. 4892fe4c343aSmrgfunc_cygming_gnu_implib_p () 4893fe4c343aSmrg{ 4894fe4c343aSmrg $debug_cmd 4895fe4c343aSmrg 4896fe4c343aSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 4897fe4c343aSmrg 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)$'` 4898fe4c343aSmrg test -n "$func_cygming_gnu_implib_tmp" 4899fe4c343aSmrg} 4900fe4c343aSmrg 4901fe4c343aSmrg# func_cygming_ms_implib_p ARG 4902fe4c343aSmrg# This predicate returns with zero status (TRUE) if 4903fe4c343aSmrg# ARG is an MS-style import library. Returns 4904fe4c343aSmrg# with nonzero status (FALSE) otherwise. 4905fe4c343aSmrgfunc_cygming_ms_implib_p () 4906fe4c343aSmrg{ 4907fe4c343aSmrg $debug_cmd 4908fe4c343aSmrg 4909fe4c343aSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 4910fe4c343aSmrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 4911fe4c343aSmrg test -n "$func_cygming_ms_implib_tmp" 4912fe4c343aSmrg} 4913fe4c343aSmrg 4914549e21daSmrg# func_win32_libid arg 4915549e21daSmrg# return the library type of file 'arg' 4916549e21daSmrg# 4917549e21daSmrg# Need a lot of goo to handle *both* DLLs and import libs 4918549e21daSmrg# Has to be a shell function in order to 'eat' the argument 4919549e21daSmrg# that is supplied when $file_magic_command is called. 4920549e21daSmrg# Despite the name, also deal with 64 bit binaries. 4921549e21daSmrgfunc_win32_libid () 4922549e21daSmrg{ 4923fe4c343aSmrg $debug_cmd 4924fe4c343aSmrg 4925fe4c343aSmrg win32_libid_type=unknown 4926549e21daSmrg win32_fileres=`file -L $1 2>/dev/null` 4927549e21daSmrg case $win32_fileres in 4928549e21daSmrg *ar\ archive\ import\ library*) # definitely import 4929549e21daSmrg win32_libid_type="x86 archive import" 4930549e21daSmrg ;; 4931549e21daSmrg *ar\ archive*) # could be an import, or static 4932549e21daSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 4933549e21daSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 4934549e21daSmrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 4935fe4c343aSmrg case $nm_interface in 4936fe4c343aSmrg "MS dumpbin") 4937fe4c343aSmrg if func_cygming_ms_implib_p "$1" || 4938fe4c343aSmrg func_cygming_gnu_implib_p "$1" 4939fe4c343aSmrg then 4940fe4c343aSmrg win32_nmres=import 4941fe4c343aSmrg else 4942fe4c343aSmrg win32_nmres= 4943fe4c343aSmrg fi 4944fe4c343aSmrg ;; 4945fe4c343aSmrg *) 4946fe4c343aSmrg func_to_tool_file "$1" func_convert_file_msys_to_w32 4947fe4c343aSmrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 4948fe4c343aSmrg $SED -n -e ' 4949549e21daSmrg 1,100{ 4950549e21daSmrg / I /{ 4951fe4c343aSmrg s|.*|import| 4952549e21daSmrg p 4953549e21daSmrg q 4954549e21daSmrg } 4955549e21daSmrg }'` 4956fe4c343aSmrg ;; 4957fe4c343aSmrg esac 4958549e21daSmrg case $win32_nmres in 4959549e21daSmrg import*) win32_libid_type="x86 archive import";; 4960549e21daSmrg *) win32_libid_type="x86 archive static";; 4961549e21daSmrg esac 4962549e21daSmrg fi 4963549e21daSmrg ;; 4964549e21daSmrg *DLL*) 4965549e21daSmrg win32_libid_type="x86 DLL" 4966549e21daSmrg ;; 4967549e21daSmrg *executable*) # but shell scripts are "executable" too... 4968549e21daSmrg case $win32_fileres in 4969549e21daSmrg *MS\ Windows\ PE\ Intel*) 4970549e21daSmrg win32_libid_type="x86 DLL" 4971549e21daSmrg ;; 4972549e21daSmrg esac 4973549e21daSmrg ;; 4974549e21daSmrg esac 4975549e21daSmrg $ECHO "$win32_libid_type" 4976549e21daSmrg} 4977ba6a1819Smrg 49781bedbe3fSmrg# func_cygming_dll_for_implib ARG 49791bedbe3fSmrg# 49801bedbe3fSmrg# Platform-specific function to extract the 49811bedbe3fSmrg# name of the DLL associated with the specified 49821bedbe3fSmrg# import library ARG. 49831bedbe3fSmrg# Invoked by eval'ing the libtool variable 49841bedbe3fSmrg# $sharedlib_from_linklib_cmd 49851bedbe3fSmrg# Result is available in the variable 49861bedbe3fSmrg# $sharedlib_from_linklib_result 49871bedbe3fSmrgfunc_cygming_dll_for_implib () 49881bedbe3fSmrg{ 4989fe4c343aSmrg $debug_cmd 4990fe4c343aSmrg 49911bedbe3fSmrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 49921bedbe3fSmrg} 49931bedbe3fSmrg 49941bedbe3fSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 49951bedbe3fSmrg# 49961bedbe3fSmrg# The is the core of a fallback implementation of a 49971bedbe3fSmrg# platform-specific function to extract the name of the 49981bedbe3fSmrg# DLL associated with the specified import library LIBNAME. 49991bedbe3fSmrg# 50001bedbe3fSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending 50011bedbe3fSmrg# on the platform and compiler that created the implib. 50021bedbe3fSmrg# 50031bedbe3fSmrg# Echos the name of the DLL associated with the 50041bedbe3fSmrg# specified import library. 50051bedbe3fSmrgfunc_cygming_dll_for_implib_fallback_core () 50061bedbe3fSmrg{ 5007fe4c343aSmrg $debug_cmd 5008fe4c343aSmrg 50091bedbe3fSmrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 50101bedbe3fSmrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 50111bedbe3fSmrg $SED '/^Contents of section '"$match_literal"':/{ 50121bedbe3fSmrg # Place marker at beginning of archive member dllname section 50131bedbe3fSmrg s/.*/====MARK====/ 50141bedbe3fSmrg p 50151bedbe3fSmrg d 50161bedbe3fSmrg } 50171bedbe3fSmrg # These lines can sometimes be longer than 43 characters, but 50181bedbe3fSmrg # are always uninteresting 50191bedbe3fSmrg /:[ ]*file format pe[i]\{,1\}-/d 50201bedbe3fSmrg /^In archive [^:]*:/d 50211bedbe3fSmrg # Ensure marker is printed 50221bedbe3fSmrg /^====MARK====/p 50231bedbe3fSmrg # Remove all lines with less than 43 characters 50241bedbe3fSmrg /^.\{43\}/!d 50251bedbe3fSmrg # From remaining lines, remove first 43 characters 50261bedbe3fSmrg s/^.\{43\}//' | 50271bedbe3fSmrg $SED -n ' 50281bedbe3fSmrg # Join marker and all lines until next marker into a single line 50291bedbe3fSmrg /^====MARK====/ b para 50301bedbe3fSmrg H 50311bedbe3fSmrg $ b para 50321bedbe3fSmrg b 50331bedbe3fSmrg :para 50341bedbe3fSmrg x 50351bedbe3fSmrg s/\n//g 50361bedbe3fSmrg # Remove the marker 50371bedbe3fSmrg s/^====MARK====// 50381bedbe3fSmrg # Remove trailing dots and whitespace 50391bedbe3fSmrg s/[\. \t]*$// 50401bedbe3fSmrg # Print 50411bedbe3fSmrg /./p' | 50421bedbe3fSmrg # we now have a list, one entry per line, of the stringified 50431bedbe3fSmrg # contents of the appropriate section of all members of the 5044fe4c343aSmrg # archive that possess that section. Heuristic: eliminate 5045fe4c343aSmrg # all those that have a first or second character that is 50461bedbe3fSmrg # a '.' (that is, objdump's representation of an unprintable 50471bedbe3fSmrg # character.) This should work for all archives with less than 50481bedbe3fSmrg # 0x302f exports -- but will fail for DLLs whose name actually 50491bedbe3fSmrg # begins with a literal '.' or a single character followed by 50501bedbe3fSmrg # a '.'. 50511bedbe3fSmrg # 50521bedbe3fSmrg # Of those that remain, print the first one. 50531bedbe3fSmrg $SED -e '/^\./d;/^.\./d;q' 50541bedbe3fSmrg} 50551bedbe3fSmrg 50561bedbe3fSmrg# func_cygming_dll_for_implib_fallback ARG 50571bedbe3fSmrg# Platform-specific function to extract the 50581bedbe3fSmrg# name of the DLL associated with the specified 50591bedbe3fSmrg# import library ARG. 50601bedbe3fSmrg# 50611bedbe3fSmrg# This fallback implementation is for use when $DLLTOOL 50621bedbe3fSmrg# does not support the --identify-strict option. 50631bedbe3fSmrg# Invoked by eval'ing the libtool variable 50641bedbe3fSmrg# $sharedlib_from_linklib_cmd 50651bedbe3fSmrg# Result is available in the variable 50661bedbe3fSmrg# $sharedlib_from_linklib_result 50671bedbe3fSmrgfunc_cygming_dll_for_implib_fallback () 50681bedbe3fSmrg{ 5069fe4c343aSmrg $debug_cmd 5070fe4c343aSmrg 5071fe4c343aSmrg if func_cygming_gnu_implib_p "$1"; then 50721bedbe3fSmrg # binutils import library 50731bedbe3fSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5074fe4c343aSmrg elif func_cygming_ms_implib_p "$1"; then 50751bedbe3fSmrg # ms-generated import library 50761bedbe3fSmrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 50771bedbe3fSmrg else 50781bedbe3fSmrg # unknown 5079fe4c343aSmrg sharedlib_from_linklib_result= 50801bedbe3fSmrg fi 50811bedbe3fSmrg} 5082ba6a1819Smrg 5083ba6a1819Smrg 5084549e21daSmrg# func_extract_an_archive dir oldlib 5085549e21daSmrgfunc_extract_an_archive () 5086549e21daSmrg{ 5087fe4c343aSmrg $debug_cmd 5088fe4c343aSmrg 5089fe4c343aSmrg f_ex_an_ar_dir=$1; shift 5090fe4c343aSmrg f_ex_an_ar_oldlib=$1 5091fe4c343aSmrg if test yes = "$lock_old_archive_extraction"; then 5092549e21daSmrg lockfile=$f_ex_an_ar_oldlib.lock 5093549e21daSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5094549e21daSmrg func_echo "Waiting for $lockfile to be removed" 5095549e21daSmrg sleep 2 5096549e21daSmrg done 5097549e21daSmrg fi 5098549e21daSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5099549e21daSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 5100fe4c343aSmrg if test yes = "$lock_old_archive_extraction"; then 5101549e21daSmrg $opt_dry_run || rm -f "$lockfile" 5102549e21daSmrg fi 5103549e21daSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5104549e21daSmrg : 5105549e21daSmrg else 5106549e21daSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5107549e21daSmrg fi 5108549e21daSmrg} 5109ba6a1819Smrg 5110ba6a1819Smrg 5111549e21daSmrg# func_extract_archives gentop oldlib ... 5112549e21daSmrgfunc_extract_archives () 5113549e21daSmrg{ 5114fe4c343aSmrg $debug_cmd 5115fe4c343aSmrg 5116fe4c343aSmrg my_gentop=$1; shift 5117549e21daSmrg my_oldlibs=${1+"$@"} 5118fe4c343aSmrg my_oldobjs= 5119fe4c343aSmrg my_xlib= 5120fe4c343aSmrg my_xabs= 5121fe4c343aSmrg my_xdir= 5122ba6a1819Smrg 5123549e21daSmrg for my_xlib in $my_oldlibs; do 5124549e21daSmrg # Extract the objects. 5125549e21daSmrg case $my_xlib in 5126fe4c343aSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5127549e21daSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 5128ba6a1819Smrg esac 5129549e21daSmrg func_basename "$my_xlib" 5130fe4c343aSmrg my_xlib=$func_basename_result 5131549e21daSmrg my_xlib_u=$my_xlib 5132549e21daSmrg while :; do 5133549e21daSmrg case " $extracted_archives " in 5134549e21daSmrg *" $my_xlib_u "*) 5135549e21daSmrg func_arith $extracted_serial + 1 5136549e21daSmrg extracted_serial=$func_arith_result 5137549e21daSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 5138549e21daSmrg *) break ;; 5139549e21daSmrg esac 5140549e21daSmrg done 5141549e21daSmrg extracted_archives="$extracted_archives $my_xlib_u" 5142fe4c343aSmrg my_xdir=$my_gentop/$my_xlib_u 5143ba6a1819Smrg 5144549e21daSmrg func_mkdir_p "$my_xdir" 5145ba6a1819Smrg 5146549e21daSmrg case $host in 5147549e21daSmrg *-darwin*) 5148549e21daSmrg func_verbose "Extracting $my_xabs" 5149549e21daSmrg # Do not bother doing anything if just a dry run 5150549e21daSmrg $opt_dry_run || { 5151549e21daSmrg darwin_orig_dir=`pwd` 5152549e21daSmrg cd $my_xdir || exit $? 5153549e21daSmrg darwin_archive=$my_xabs 5154549e21daSmrg darwin_curdir=`pwd` 5155fe4c343aSmrg func_basename "$darwin_archive" 5156fe4c343aSmrg darwin_base_archive=$func_basename_result 5157549e21daSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5158549e21daSmrg if test -n "$darwin_arches"; then 5159549e21daSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5160549e21daSmrg darwin_arch= 5161549e21daSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5162fe4c343aSmrg for darwin_arch in $darwin_arches; do 5163fe4c343aSmrg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5164fe4c343aSmrg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5165fe4c343aSmrg cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5166fe4c343aSmrg func_extract_an_archive "`pwd`" "$darwin_base_archive" 5167549e21daSmrg cd "$darwin_curdir" 5168fe4c343aSmrg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5169549e21daSmrg done # $darwin_arches 5170549e21daSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5171fe4c343aSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5172549e21daSmrg darwin_file= 5173549e21daSmrg darwin_files= 5174549e21daSmrg for darwin_file in $darwin_filelist; do 5175549e21daSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5176549e21daSmrg $LIPO -create -output "$darwin_file" $darwin_files 5177549e21daSmrg done # $darwin_filelist 5178549e21daSmrg $RM -rf unfat-$$ 5179549e21daSmrg cd "$darwin_orig_dir" 5180549e21daSmrg else 5181549e21daSmrg cd $darwin_orig_dir 5182549e21daSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 5183549e21daSmrg fi # $darwin_arches 5184549e21daSmrg } # !$opt_dry_run 5185549e21daSmrg ;; 5186549e21daSmrg *) 5187549e21daSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 5188549e21daSmrg ;; 5189549e21daSmrg esac 5190549e21daSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5191549e21daSmrg done 5192ba6a1819Smrg 5193fe4c343aSmrg func_extract_archives_result=$my_oldobjs 5194549e21daSmrg} 5195ba6a1819Smrg 5196ba6a1819Smrg 5197549e21daSmrg# func_emit_wrapper [arg=no] 5198549e21daSmrg# 5199549e21daSmrg# Emit a libtool wrapper script on stdout. 5200549e21daSmrg# Don't directly open a file because we may want to 5201549e21daSmrg# incorporate the script contents within a cygwin/mingw 5202549e21daSmrg# wrapper executable. Must ONLY be called from within 5203549e21daSmrg# func_mode_link because it depends on a number of variables 5204549e21daSmrg# set therein. 5205549e21daSmrg# 5206549e21daSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5207549e21daSmrg# variable will take. If 'yes', then the emitted script 5208fe4c343aSmrg# will assume that the directory where it is stored is 5209549e21daSmrg# the $objdir directory. This is a cygwin/mingw-specific 5210549e21daSmrg# behavior. 5211549e21daSmrgfunc_emit_wrapper () 5212549e21daSmrg{ 5213549e21daSmrg func_emit_wrapper_arg1=${1-no} 5214ba6a1819Smrg 5215549e21daSmrg $ECHO "\ 5216549e21daSmrg#! $SHELL 5217ba6a1819Smrg 5218549e21daSmrg# $output - temporary wrapper script for $objdir/$outputname 5219fe4c343aSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5220549e21daSmrg# 5221549e21daSmrg# The $output program cannot be directly executed until all the libtool 5222549e21daSmrg# libraries that it depends on are installed. 5223549e21daSmrg# 5224549e21daSmrg# This wrapper script should never be moved out of the build directory. 5225549e21daSmrg# If it is, it will not operate correctly. 5226ba6a1819Smrg 5227549e21daSmrg# Sed substitution that helps us do robust quoting. It backslashifies 5228549e21daSmrg# metacharacters that are still active within double-quoted strings. 5229549e21daSmrgsed_quote_subst='$sed_quote_subst' 5230ba6a1819Smrg 5231549e21daSmrg# Be Bourne compatible 5232549e21daSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5233549e21daSmrg emulate sh 5234549e21daSmrg NULLCMD=: 5235549e21daSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5236549e21daSmrg # is contrary to our usage. Disable this feature. 5237549e21daSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5238549e21daSmrg setopt NO_GLOB_SUBST 5239549e21daSmrgelse 5240549e21daSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5241549e21daSmrgfi 5242549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5243549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh 5244ba6a1819Smrg 5245549e21daSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5246549e21daSmrg# if CDPATH is set. 5247549e21daSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5248ba6a1819Smrg 5249549e21daSmrgrelink_command=\"$relink_command\" 5250ba6a1819Smrg 5251549e21daSmrg# This environment variable determines our operation mode. 5252549e21daSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5253549e21daSmrg # install mode needs the following variables: 5254549e21daSmrg generated_by_libtool_version='$macro_version' 5255549e21daSmrg notinst_deplibs='$notinst_deplibs' 5256549e21daSmrgelse 5257549e21daSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 5258549e21daSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5259549e21daSmrg file=\"\$0\"" 5260ba6a1819Smrg 5261549e21daSmrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 5262549e21daSmrg $ECHO "\ 5263ba6a1819Smrg 5264549e21daSmrg# A function that is used when there is no print builtin or printf. 5265549e21daSmrgfunc_fallback_echo () 5266549e21daSmrg{ 5267549e21daSmrg eval 'cat <<_LTECHO_EOF 5268549e21daSmrg\$1 5269549e21daSmrg_LTECHO_EOF' 5270549e21daSmrg} 5271549e21daSmrg ECHO=\"$qECHO\" 5272549e21daSmrg fi 5273ba6a1819Smrg 5274549e21daSmrg# Very basic option parsing. These options are (a) specific to 5275549e21daSmrg# the libtool wrapper, (b) are identical between the wrapper 5276fe4c343aSmrg# /script/ and the wrapper /executable/ that is used only on 5277549e21daSmrg# windows platforms, and (c) all begin with the string "--lt-" 5278fe4c343aSmrg# (application programs are unlikely to have options that match 5279549e21daSmrg# this pattern). 5280549e21daSmrg# 5281549e21daSmrg# There are only two supported options: --lt-debug and 5282549e21daSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 5283549e21daSmrg# 5284549e21daSmrg# The first argument to this parsing function should be the 5285549e21daSmrg# script's $0 value, followed by "$@". 5286549e21daSmrglt_option_debug= 5287549e21daSmrgfunc_parse_lt_options () 5288549e21daSmrg{ 5289549e21daSmrg lt_script_arg0=\$0 5290549e21daSmrg shift 5291549e21daSmrg for lt_opt 5292549e21daSmrg do 5293549e21daSmrg case \"\$lt_opt\" in 5294549e21daSmrg --lt-debug) lt_option_debug=1 ;; 5295549e21daSmrg --lt-dump-script) 5296549e21daSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5297549e21daSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5298549e21daSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5299549e21daSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 5300549e21daSmrg exit 0 5301549e21daSmrg ;; 5302549e21daSmrg --lt-*) 5303549e21daSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5304549e21daSmrg exit 1 5305549e21daSmrg ;; 5306549e21daSmrg esac 5307549e21daSmrg done 5308ba6a1819Smrg 5309549e21daSmrg # Print the debug banner immediately: 5310549e21daSmrg if test -n \"\$lt_option_debug\"; then 5311fe4c343aSmrg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5312549e21daSmrg fi 5313549e21daSmrg} 5314ba6a1819Smrg 5315549e21daSmrg# Used when --lt-debug. Prints its arguments to stdout 5316549e21daSmrg# (redirection is the responsibility of the caller) 5317549e21daSmrgfunc_lt_dump_args () 5318549e21daSmrg{ 5319549e21daSmrg lt_dump_args_N=1; 5320549e21daSmrg for lt_arg 5321549e21daSmrg do 5322fe4c343aSmrg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5323549e21daSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5324549e21daSmrg done 5325549e21daSmrg} 5326ba6a1819Smrg 5327549e21daSmrg# Core function for launching the target application 5328549e21daSmrgfunc_exec_program_core () 5329549e21daSmrg{ 5330549e21daSmrg" 5331549e21daSmrg case $host in 5332549e21daSmrg # Backslashes separate directories on plain windows 5333549e21daSmrg *-*-mingw | *-*-os2* | *-cegcc*) 5334549e21daSmrg $ECHO "\ 5335549e21daSmrg if test -n \"\$lt_option_debug\"; then 5336fe4c343aSmrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5337549e21daSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5338549e21daSmrg fi 5339549e21daSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5340549e21daSmrg" 5341549e21daSmrg ;; 5342ba6a1819Smrg 5343549e21daSmrg *) 5344549e21daSmrg $ECHO "\ 5345549e21daSmrg if test -n \"\$lt_option_debug\"; then 5346fe4c343aSmrg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5347549e21daSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 5348549e21daSmrg fi 5349549e21daSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5350549e21daSmrg" 5351549e21daSmrg ;; 5352549e21daSmrg esac 5353549e21daSmrg $ECHO "\ 5354549e21daSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5355549e21daSmrg exit 1 5356549e21daSmrg} 5357ba6a1819Smrg 5358549e21daSmrg# A function to encapsulate launching the target application 5359549e21daSmrg# Strips options in the --lt-* namespace from \$@ and 5360549e21daSmrg# launches target application with the remaining arguments. 5361549e21daSmrgfunc_exec_program () 5362549e21daSmrg{ 53631bedbe3fSmrg case \" \$* \" in 53641bedbe3fSmrg *\\ --lt-*) 53651bedbe3fSmrg for lt_wr_arg 53661bedbe3fSmrg do 53671bedbe3fSmrg case \$lt_wr_arg in 53681bedbe3fSmrg --lt-*) ;; 53691bedbe3fSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 53701bedbe3fSmrg esac 53711bedbe3fSmrg shift 53721bedbe3fSmrg done ;; 53731bedbe3fSmrg esac 5374549e21daSmrg func_exec_program_core \${1+\"\$@\"} 5375549e21daSmrg} 5376ba6a1819Smrg 5377549e21daSmrg # Parse options 5378549e21daSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5379ba6a1819Smrg 5380549e21daSmrg # Find the directory that this script lives in. 5381549e21daSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5382549e21daSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5383ba6a1819Smrg 5384549e21daSmrg # Follow symbolic links until we get to the real thisdir. 5385549e21daSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5386549e21daSmrg while test -n \"\$file\"; do 5387549e21daSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5388ba6a1819Smrg 5389549e21daSmrg # If there was a directory component, then change thisdir. 5390549e21daSmrg if test \"x\$destdir\" != \"x\$file\"; then 5391549e21daSmrg case \"\$destdir\" in 5392549e21daSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5393549e21daSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5394549e21daSmrg esac 5395549e21daSmrg fi 5396ba6a1819Smrg 5397549e21daSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5398549e21daSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5399549e21daSmrg done 5400ba6a1819Smrg 5401549e21daSmrg # Usually 'no', except on cygwin/mingw when embedded into 5402549e21daSmrg # the cwrapper. 5403549e21daSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5404549e21daSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5405549e21daSmrg # special case for '.' 5406549e21daSmrg if test \"\$thisdir\" = \".\"; then 5407549e21daSmrg thisdir=\`pwd\` 5408549e21daSmrg fi 5409549e21daSmrg # remove .libs from thisdir 5410549e21daSmrg case \"\$thisdir\" in 5411549e21daSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5412549e21daSmrg $objdir ) thisdir=. ;; 5413549e21daSmrg esac 5414549e21daSmrg fi 5415ba6a1819Smrg 5416549e21daSmrg # Try to get the absolute directory name. 5417549e21daSmrg absdir=\`cd \"\$thisdir\" && pwd\` 5418549e21daSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5419549e21daSmrg" 5420ba6a1819Smrg 5421fe4c343aSmrg if test yes = "$fast_install"; then 5422549e21daSmrg $ECHO "\ 5423549e21daSmrg program=lt-'$outputname'$exeext 5424549e21daSmrg progdir=\"\$thisdir/$objdir\" 5425ba6a1819Smrg 5426549e21daSmrg if test ! -f \"\$progdir/\$program\" || 5427fe4c343aSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5428549e21daSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5429ba6a1819Smrg 5430549e21daSmrg file=\"\$\$-\$program\" 5431ba6a1819Smrg 5432549e21daSmrg if test ! -d \"\$progdir\"; then 5433549e21daSmrg $MKDIR \"\$progdir\" 5434549e21daSmrg else 5435549e21daSmrg $RM \"\$progdir/\$file\" 5436549e21daSmrg fi" 5437ba6a1819Smrg 5438549e21daSmrg $ECHO "\ 5439549e21daSmrg 5440549e21daSmrg # relink executable if necessary 5441549e21daSmrg if test -n \"\$relink_command\"; then 5442549e21daSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5443549e21daSmrg else 5444fe4c343aSmrg \$ECHO \"\$relink_command_output\" >&2 5445549e21daSmrg $RM \"\$progdir/\$file\" 5446549e21daSmrg exit 1 5447ba6a1819Smrg fi 5448549e21daSmrg fi 5449ba6a1819Smrg 5450549e21daSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5451549e21daSmrg { $RM \"\$progdir/\$program\"; 5452549e21daSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5453549e21daSmrg $RM \"\$progdir/\$file\" 5454549e21daSmrg fi" 5455549e21daSmrg else 5456549e21daSmrg $ECHO "\ 5457549e21daSmrg program='$outputname' 5458549e21daSmrg progdir=\"\$thisdir/$objdir\" 5459549e21daSmrg" 5460ba6a1819Smrg fi 5461ba6a1819Smrg 5462549e21daSmrg $ECHO "\ 5463ba6a1819Smrg 5464549e21daSmrg if test -f \"\$progdir/\$program\"; then" 5465ba6a1819Smrg 54661bedbe3fSmrg # fixup the dll searchpath if we need to. 54671bedbe3fSmrg # 54681bedbe3fSmrg # Fix the DLL searchpath if we need to. Do this before prepending 54691bedbe3fSmrg # to shlibpath, because on Windows, both are PATH and uninstalled 54701bedbe3fSmrg # libraries must come first. 54711bedbe3fSmrg if test -n "$dllsearchpath"; then 54721bedbe3fSmrg $ECHO "\ 54731bedbe3fSmrg # Add the dll search path components to the executable PATH 54741bedbe3fSmrg PATH=$dllsearchpath:\$PATH 54751bedbe3fSmrg" 54761bedbe3fSmrg fi 54771bedbe3fSmrg 5478549e21daSmrg # Export our shlibpath_var if we have one. 5479fe4c343aSmrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5480549e21daSmrg $ECHO "\ 5481549e21daSmrg # Add our own library path to $shlibpath_var 5482549e21daSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5483ba6a1819Smrg 5484549e21daSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 5485549e21daSmrg # The second colon is a workaround for a bug in BeOS R4 sed 5486549e21daSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5487549e21daSmrg 5488549e21daSmrg export $shlibpath_var 5489549e21daSmrg" 5490ba6a1819Smrg fi 5491ba6a1819Smrg 5492549e21daSmrg $ECHO "\ 5493549e21daSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5494549e21daSmrg # Run the actual program with our arguments. 5495549e21daSmrg func_exec_program \${1+\"\$@\"} 5496549e21daSmrg fi 5497549e21daSmrg else 5498549e21daSmrg # The program doesn't exist. 5499fe4c343aSmrg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5500549e21daSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5501549e21daSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5502549e21daSmrg exit 1 5503549e21daSmrg fi 5504549e21daSmrgfi\ 5505549e21daSmrg" 5506549e21daSmrg} 5507ba6a1819Smrg 5508ba6a1819Smrg 5509549e21daSmrg# func_emit_cwrapperexe_src 5510549e21daSmrg# emit the source code for a wrapper executable on stdout 5511549e21daSmrg# Must ONLY be called from within func_mode_link because 5512549e21daSmrg# it depends on a number of variable set therein. 5513549e21daSmrgfunc_emit_cwrapperexe_src () 5514549e21daSmrg{ 5515549e21daSmrg cat <<EOF 5516549e21daSmrg 5517549e21daSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5518fe4c343aSmrg Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5519549e21daSmrg 5520549e21daSmrg The $output program cannot be directly executed until all the libtool 5521549e21daSmrg libraries that it depends on are installed. 5522549e21daSmrg 5523549e21daSmrg This wrapper executable should never be moved out of the build directory. 5524549e21daSmrg If it is, it will not operate correctly. 5525549e21daSmrg*/ 5526549e21daSmrgEOF 5527549e21daSmrg cat <<"EOF" 5528549e21daSmrg#ifdef _MSC_VER 5529549e21daSmrg# define _CRT_SECURE_NO_DEPRECATE 1 5530549e21daSmrg#endif 5531549e21daSmrg#include <stdio.h> 5532549e21daSmrg#include <stdlib.h> 5533549e21daSmrg#ifdef _MSC_VER 5534549e21daSmrg# include <direct.h> 5535549e21daSmrg# include <process.h> 5536549e21daSmrg# include <io.h> 5537549e21daSmrg#else 5538549e21daSmrg# include <unistd.h> 5539549e21daSmrg# include <stdint.h> 5540549e21daSmrg# ifdef __CYGWIN__ 5541549e21daSmrg# include <io.h> 5542549e21daSmrg# endif 5543549e21daSmrg#endif 5544549e21daSmrg#include <malloc.h> 5545549e21daSmrg#include <stdarg.h> 5546549e21daSmrg#include <assert.h> 5547549e21daSmrg#include <string.h> 5548549e21daSmrg#include <ctype.h> 5549549e21daSmrg#include <errno.h> 5550549e21daSmrg#include <fcntl.h> 5551549e21daSmrg#include <sys/stat.h> 5552549e21daSmrg 5553fe4c343aSmrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5554fe4c343aSmrg 5555549e21daSmrg/* declarations of non-ANSI functions */ 5556fe4c343aSmrg#if defined __MINGW32__ 5557549e21daSmrg# ifdef __STRICT_ANSI__ 5558549e21daSmrgint _putenv (const char *); 5559549e21daSmrg# endif 5560fe4c343aSmrg#elif defined __CYGWIN__ 5561549e21daSmrg# ifdef __STRICT_ANSI__ 5562549e21daSmrgchar *realpath (const char *, char *); 5563549e21daSmrgint putenv (char *); 5564549e21daSmrgint setenv (const char *, const char *, int); 5565549e21daSmrg# endif 5566fe4c343aSmrg/* #elif defined other_platform || defined ... */ 5567549e21daSmrg#endif 5568549e21daSmrg 5569549e21daSmrg/* portability defines, excluding path handling macros */ 5570fe4c343aSmrg#if defined _MSC_VER 5571549e21daSmrg# define setmode _setmode 5572549e21daSmrg# define stat _stat 5573549e21daSmrg# define chmod _chmod 5574549e21daSmrg# define getcwd _getcwd 5575549e21daSmrg# define putenv _putenv 5576549e21daSmrg# define S_IXUSR _S_IEXEC 5577fe4c343aSmrg#elif defined __MINGW32__ 5578549e21daSmrg# define setmode _setmode 5579549e21daSmrg# define stat _stat 5580549e21daSmrg# define chmod _chmod 5581549e21daSmrg# define getcwd _getcwd 5582549e21daSmrg# define putenv _putenv 5583fe4c343aSmrg#elif defined __CYGWIN__ 5584549e21daSmrg# define HAVE_SETENV 5585549e21daSmrg# define FOPEN_WB "wb" 5586fe4c343aSmrg/* #elif defined other platforms ... */ 5587549e21daSmrg#endif 5588549e21daSmrg 5589fe4c343aSmrg#if defined PATH_MAX 5590549e21daSmrg# define LT_PATHMAX PATH_MAX 5591fe4c343aSmrg#elif defined MAXPATHLEN 5592549e21daSmrg# define LT_PATHMAX MAXPATHLEN 5593549e21daSmrg#else 5594549e21daSmrg# define LT_PATHMAX 1024 5595549e21daSmrg#endif 5596549e21daSmrg 5597549e21daSmrg#ifndef S_IXOTH 5598549e21daSmrg# define S_IXOTH 0 5599549e21daSmrg#endif 5600549e21daSmrg#ifndef S_IXGRP 5601549e21daSmrg# define S_IXGRP 0 5602549e21daSmrg#endif 5603549e21daSmrg 5604549e21daSmrg/* path handling portability macros */ 5605549e21daSmrg#ifndef DIR_SEPARATOR 5606549e21daSmrg# define DIR_SEPARATOR '/' 5607549e21daSmrg# define PATH_SEPARATOR ':' 5608549e21daSmrg#endif 5609549e21daSmrg 5610fe4c343aSmrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5611fe4c343aSmrg defined __OS2__ 5612549e21daSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 5613549e21daSmrg# define FOPEN_WB "wb" 5614549e21daSmrg# ifndef DIR_SEPARATOR_2 5615549e21daSmrg# define DIR_SEPARATOR_2 '\\' 5616549e21daSmrg# endif 5617549e21daSmrg# ifndef PATH_SEPARATOR_2 5618549e21daSmrg# define PATH_SEPARATOR_2 ';' 5619549e21daSmrg# endif 5620549e21daSmrg#endif 5621549e21daSmrg 5622549e21daSmrg#ifndef DIR_SEPARATOR_2 5623549e21daSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5624549e21daSmrg#else /* DIR_SEPARATOR_2 */ 5625549e21daSmrg# define IS_DIR_SEPARATOR(ch) \ 5626549e21daSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5627549e21daSmrg#endif /* DIR_SEPARATOR_2 */ 5628549e21daSmrg 5629549e21daSmrg#ifndef PATH_SEPARATOR_2 5630549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5631549e21daSmrg#else /* PATH_SEPARATOR_2 */ 5632549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5633549e21daSmrg#endif /* PATH_SEPARATOR_2 */ 5634549e21daSmrg 5635549e21daSmrg#ifndef FOPEN_WB 5636549e21daSmrg# define FOPEN_WB "w" 5637549e21daSmrg#endif 5638549e21daSmrg#ifndef _O_BINARY 5639549e21daSmrg# define _O_BINARY 0 5640549e21daSmrg#endif 5641549e21daSmrg 5642549e21daSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5643549e21daSmrg#define XFREE(stale) do { \ 5644fe4c343aSmrg if (stale) { free (stale); stale = 0; } \ 5645549e21daSmrg} while (0) 5646549e21daSmrg 5647fe4c343aSmrg#if defined LT_DEBUGWRAPPER 5648549e21daSmrgstatic int lt_debug = 1; 5649549e21daSmrg#else 5650549e21daSmrgstatic int lt_debug = 0; 5651549e21daSmrg#endif 5652549e21daSmrg 5653549e21daSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5654549e21daSmrg 5655549e21daSmrgvoid *xmalloc (size_t num); 5656549e21daSmrgchar *xstrdup (const char *string); 5657549e21daSmrgconst char *base_name (const char *name); 5658549e21daSmrgchar *find_executable (const char *wrapper); 5659549e21daSmrgchar *chase_symlinks (const char *pathspec); 5660549e21daSmrgint make_executable (const char *path); 5661549e21daSmrgint check_executable (const char *path); 5662549e21daSmrgchar *strendzap (char *str, const char *pat); 5663549e21daSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5664549e21daSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 5665549e21daSmrgstatic const char *nonnull (const char *s); 5666549e21daSmrgstatic const char *nonempty (const char *s); 5667549e21daSmrgvoid lt_setenv (const char *name, const char *value); 5668549e21daSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5669549e21daSmrgvoid lt_update_exe_path (const char *name, const char *value); 5670549e21daSmrgvoid lt_update_lib_path (const char *name, const char *value); 5671549e21daSmrgchar **prepare_spawn (char **argv); 5672549e21daSmrgvoid lt_dump_script (FILE *f); 5673549e21daSmrgEOF 5674549e21daSmrg 5675549e21daSmrg cat <<EOF 5676fe4c343aSmrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5677fe4c343aSmrg# define externally_visible volatile 5678fe4c343aSmrg#else 5679fe4c343aSmrg# define externally_visible __attribute__((externally_visible)) volatile 5680fe4c343aSmrg#endif 5681fe4c343aSmrgexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5682549e21daSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5683549e21daSmrgEOF 5684549e21daSmrg 5685fe4c343aSmrg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 56861bedbe3fSmrg func_to_host_path "$temp_rpath" 5687549e21daSmrg cat <<EOF 56881bedbe3fSmrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5689ba6a1819SmrgEOF 5690ba6a1819Smrg else 5691549e21daSmrg cat <<"EOF" 5692549e21daSmrgconst char * LIB_PATH_VALUE = ""; 5693549e21daSmrgEOF 5694ba6a1819Smrg fi 5695549e21daSmrg 5696549e21daSmrg if test -n "$dllsearchpath"; then 56971bedbe3fSmrg func_to_host_path "$dllsearchpath:" 5698549e21daSmrg cat <<EOF 5699549e21daSmrgconst char * EXE_PATH_VARNAME = "PATH"; 57001bedbe3fSmrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5701549e21daSmrgEOF 5702ba6a1819Smrg else 5703549e21daSmrg cat <<"EOF" 5704549e21daSmrgconst char * EXE_PATH_VARNAME = ""; 5705549e21daSmrgconst char * EXE_PATH_VALUE = ""; 5706549e21daSmrgEOF 5707ba6a1819Smrg fi 5708ba6a1819Smrg 5709fe4c343aSmrg if test yes = "$fast_install"; then 5710549e21daSmrg cat <<EOF 5711549e21daSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5712549e21daSmrgEOF 5713ba6a1819Smrg else 5714549e21daSmrg cat <<EOF 5715549e21daSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5716549e21daSmrgEOF 5717ba6a1819Smrg fi 5718ba6a1819Smrg 5719ba6a1819Smrg 5720549e21daSmrg cat <<"EOF" 5721ba6a1819Smrg 5722549e21daSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 5723ba6a1819Smrg 5724549e21daSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5725549e21daSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5726549e21daSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5727ba6a1819Smrg 5728549e21daSmrgint 5729549e21daSmrgmain (int argc, char *argv[]) 5730549e21daSmrg{ 5731549e21daSmrg char **newargz; 5732549e21daSmrg int newargc; 5733549e21daSmrg char *tmp_pathspec; 5734549e21daSmrg char *actual_cwrapper_path; 5735549e21daSmrg char *actual_cwrapper_name; 5736549e21daSmrg char *target_name; 5737549e21daSmrg char *lt_argv_zero; 5738fe4c343aSmrg int rval = 127; 5739ba6a1819Smrg 5740549e21daSmrg int i; 5741ba6a1819Smrg 5742549e21daSmrg program_name = (char *) xstrdup (base_name (argv[0])); 5743fe4c343aSmrg newargz = XMALLOC (char *, (size_t) argc + 1); 5744ba6a1819Smrg 5745549e21daSmrg /* very simple arg parsing; don't want to rely on getopt 5746549e21daSmrg * also, copy all non cwrapper options to newargz, except 5747549e21daSmrg * argz[0], which is handled differently 5748549e21daSmrg */ 5749549e21daSmrg newargc=0; 5750549e21daSmrg for (i = 1; i < argc; i++) 5751549e21daSmrg { 5752fe4c343aSmrg if (STREQ (argv[i], dumpscript_opt)) 5753549e21daSmrg { 5754549e21daSmrgEOF 5755fe4c343aSmrg case $host in 5756549e21daSmrg *mingw* | *cygwin* ) 5757549e21daSmrg # make stdout use "unix" line endings 5758549e21daSmrg echo " setmode(1,_O_BINARY);" 5759549e21daSmrg ;; 5760549e21daSmrg esac 5761ba6a1819Smrg 5762549e21daSmrg cat <<"EOF" 5763549e21daSmrg lt_dump_script (stdout); 5764549e21daSmrg return 0; 5765549e21daSmrg } 5766fe4c343aSmrg if (STREQ (argv[i], debug_opt)) 5767549e21daSmrg { 5768549e21daSmrg lt_debug = 1; 5769549e21daSmrg continue; 5770549e21daSmrg } 5771fe4c343aSmrg if (STREQ (argv[i], ltwrapper_option_prefix)) 5772549e21daSmrg { 5773549e21daSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 5774549e21daSmrg namespace, but it is not one of the ones we know about and 5775549e21daSmrg have already dealt with, above (inluding dump-script), then 5776549e21daSmrg report an error. Otherwise, targets might begin to believe 5777549e21daSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 5778549e21daSmrg namespace. The first time any user complains about this, we'll 5779549e21daSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 5780549e21daSmrg or a configure.ac-settable value. 5781549e21daSmrg */ 5782549e21daSmrg lt_fatal (__FILE__, __LINE__, 5783549e21daSmrg "unrecognized %s option: '%s'", 5784549e21daSmrg ltwrapper_option_prefix, argv[i]); 5785549e21daSmrg } 5786549e21daSmrg /* otherwise ... */ 5787549e21daSmrg newargz[++newargc] = xstrdup (argv[i]); 5788549e21daSmrg } 5789549e21daSmrg newargz[++newargc] = NULL; 5790ba6a1819Smrg 5791549e21daSmrgEOF 5792549e21daSmrg cat <<EOF 5793549e21daSmrg /* The GNU banner must be the first non-error debug message */ 5794fe4c343aSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 5795549e21daSmrgEOF 5796549e21daSmrg cat <<"EOF" 5797549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 5798549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 5799549e21daSmrg 5800549e21daSmrg tmp_pathspec = find_executable (argv[0]); 5801549e21daSmrg if (tmp_pathspec == NULL) 5802549e21daSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 5803549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 5804549e21daSmrg "(main) found exe (before symlink chase) at: %s\n", 5805549e21daSmrg tmp_pathspec); 5806549e21daSmrg 5807549e21daSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 5808549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 5809549e21daSmrg "(main) found exe (after symlink chase) at: %s\n", 5810549e21daSmrg actual_cwrapper_path); 5811549e21daSmrg XFREE (tmp_pathspec); 5812549e21daSmrg 5813549e21daSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 5814549e21daSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 5815549e21daSmrg 5816549e21daSmrg /* wrapper name transforms */ 5817549e21daSmrg strendzap (actual_cwrapper_name, ".exe"); 5818549e21daSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 5819549e21daSmrg XFREE (actual_cwrapper_name); 5820549e21daSmrg actual_cwrapper_name = tmp_pathspec; 5821549e21daSmrg tmp_pathspec = 0; 5822549e21daSmrg 5823549e21daSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 5824549e21daSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 5825549e21daSmrg strendzap (target_name, ".exe"); 5826549e21daSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 5827549e21daSmrg XFREE (target_name); 5828549e21daSmrg target_name = tmp_pathspec; 5829549e21daSmrg tmp_pathspec = 0; 5830549e21daSmrg 5831549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 5832549e21daSmrg "(main) libtool target name: %s\n", 5833549e21daSmrg target_name); 5834549e21daSmrgEOF 5835ba6a1819Smrg 5836549e21daSmrg cat <<EOF 5837549e21daSmrg newargz[0] = 5838549e21daSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 5839549e21daSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 5840549e21daSmrg strcpy (newargz[0], actual_cwrapper_path); 5841549e21daSmrg strcat (newargz[0], "$objdir"); 5842549e21daSmrg strcat (newargz[0], "/"); 5843549e21daSmrgEOF 5844ba6a1819Smrg 5845549e21daSmrg cat <<"EOF" 5846549e21daSmrg /* stop here, and copy so we don't have to do this twice */ 5847549e21daSmrg tmp_pathspec = xstrdup (newargz[0]); 5848ba6a1819Smrg 5849549e21daSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 5850549e21daSmrg strcat (newargz[0], actual_cwrapper_name); 5851ba6a1819Smrg 5852549e21daSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 5853549e21daSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 5854549e21daSmrg XFREE (tmp_pathspec); 5855549e21daSmrg tmp_pathspec = NULL; 5856549e21daSmrgEOF 5857ba6a1819Smrg 5858549e21daSmrg case $host_os in 5859549e21daSmrg mingw*) 5860549e21daSmrg cat <<"EOF" 5861549e21daSmrg { 5862549e21daSmrg char* p; 5863549e21daSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 5864549e21daSmrg { 5865549e21daSmrg *p = '/'; 5866549e21daSmrg } 5867549e21daSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 5868549e21daSmrg { 5869549e21daSmrg *p = '/'; 5870549e21daSmrg } 5871549e21daSmrg } 5872549e21daSmrgEOF 5873549e21daSmrg ;; 5874549e21daSmrg esac 5875ba6a1819Smrg 5876549e21daSmrg cat <<"EOF" 5877549e21daSmrg XFREE (target_name); 5878549e21daSmrg XFREE (actual_cwrapper_path); 5879549e21daSmrg XFREE (actual_cwrapper_name); 5880ba6a1819Smrg 5881549e21daSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 5882549e21daSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 58831bedbe3fSmrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 58841bedbe3fSmrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 58851bedbe3fSmrg because on Windows, both *_VARNAMEs are PATH but uninstalled 58861bedbe3fSmrg libraries must come first. */ 5887549e21daSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 58881bedbe3fSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 5889ba6a1819Smrg 5890549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 5891549e21daSmrg nonnull (lt_argv_zero)); 5892549e21daSmrg for (i = 0; i < newargc; i++) 5893549e21daSmrg { 5894549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 5895549e21daSmrg i, nonnull (newargz[i])); 5896549e21daSmrg } 5897ba6a1819Smrg 5898549e21daSmrgEOF 5899ba6a1819Smrg 5900549e21daSmrg case $host_os in 5901549e21daSmrg mingw*) 5902549e21daSmrg cat <<"EOF" 5903549e21daSmrg /* execv doesn't actually work on mingw as expected on unix */ 5904549e21daSmrg newargz = prepare_spawn (newargz); 5905fe4c343aSmrg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 5906549e21daSmrg if (rval == -1) 5907549e21daSmrg { 5908549e21daSmrg /* failed to start process */ 5909549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 5910549e21daSmrg "(main) failed to launch target \"%s\": %s\n", 5911549e21daSmrg lt_argv_zero, nonnull (strerror (errno))); 5912549e21daSmrg return 127; 5913549e21daSmrg } 5914549e21daSmrg return rval; 5915549e21daSmrgEOF 5916549e21daSmrg ;; 5917549e21daSmrg *) 5918549e21daSmrg cat <<"EOF" 5919549e21daSmrg execv (lt_argv_zero, newargz); 5920549e21daSmrg return rval; /* =127, but avoids unused variable warning */ 5921549e21daSmrgEOF 5922549e21daSmrg ;; 5923549e21daSmrg esac 5924ba6a1819Smrg 5925549e21daSmrg cat <<"EOF" 5926549e21daSmrg} 5927ba6a1819Smrg 5928549e21daSmrgvoid * 5929549e21daSmrgxmalloc (size_t num) 5930549e21daSmrg{ 5931549e21daSmrg void *p = (void *) malloc (num); 5932549e21daSmrg if (!p) 5933549e21daSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 5934ba6a1819Smrg 5935549e21daSmrg return p; 5936549e21daSmrg} 5937ba6a1819Smrg 5938549e21daSmrgchar * 5939549e21daSmrgxstrdup (const char *string) 5940549e21daSmrg{ 5941549e21daSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 5942549e21daSmrg string) : NULL; 5943549e21daSmrg} 5944ba6a1819Smrg 5945549e21daSmrgconst char * 5946549e21daSmrgbase_name (const char *name) 5947549e21daSmrg{ 5948549e21daSmrg const char *base; 5949ba6a1819Smrg 5950fe4c343aSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 5951549e21daSmrg /* Skip over the disk name in MSDOS pathnames. */ 5952549e21daSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 5953549e21daSmrg name += 2; 5954549e21daSmrg#endif 5955ba6a1819Smrg 5956549e21daSmrg for (base = name; *name; name++) 5957549e21daSmrg if (IS_DIR_SEPARATOR (*name)) 5958549e21daSmrg base = name + 1; 5959549e21daSmrg return base; 5960549e21daSmrg} 5961ba6a1819Smrg 5962549e21daSmrgint 5963549e21daSmrgcheck_executable (const char *path) 5964549e21daSmrg{ 5965549e21daSmrg struct stat st; 5966ba6a1819Smrg 5967549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 5968549e21daSmrg nonempty (path)); 5969549e21daSmrg if ((!path) || (!*path)) 5970549e21daSmrg return 0; 5971ba6a1819Smrg 5972549e21daSmrg if ((stat (path, &st) >= 0) 5973549e21daSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 5974549e21daSmrg return 1; 5975549e21daSmrg else 5976549e21daSmrg return 0; 5977549e21daSmrg} 5978ba6a1819Smrg 5979549e21daSmrgint 5980549e21daSmrgmake_executable (const char *path) 5981549e21daSmrg{ 5982549e21daSmrg int rval = 0; 5983549e21daSmrg struct stat st; 5984ba6a1819Smrg 5985549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 5986549e21daSmrg nonempty (path)); 5987549e21daSmrg if ((!path) || (!*path)) 5988549e21daSmrg return 0; 5989ba6a1819Smrg 5990549e21daSmrg if (stat (path, &st) >= 0) 5991549e21daSmrg { 5992549e21daSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 5993549e21daSmrg } 5994549e21daSmrg return rval; 5995549e21daSmrg} 5996ba6a1819Smrg 5997549e21daSmrg/* Searches for the full path of the wrapper. Returns 5998549e21daSmrg newly allocated full path name if found, NULL otherwise 5999549e21daSmrg Does not chase symlinks, even on platforms that support them. 6000549e21daSmrg*/ 6001549e21daSmrgchar * 6002549e21daSmrgfind_executable (const char *wrapper) 6003549e21daSmrg{ 6004549e21daSmrg int has_slash = 0; 6005549e21daSmrg const char *p; 6006549e21daSmrg const char *p_next; 6007549e21daSmrg /* static buffer for getcwd */ 6008549e21daSmrg char tmp[LT_PATHMAX + 1]; 6009fe4c343aSmrg size_t tmp_len; 6010549e21daSmrg char *concat_name; 6011ba6a1819Smrg 6012549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6013549e21daSmrg nonempty (wrapper)); 6014ba6a1819Smrg 6015549e21daSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 6016549e21daSmrg return NULL; 6017ba6a1819Smrg 6018549e21daSmrg /* Absolute path? */ 6019fe4c343aSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6020549e21daSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6021549e21daSmrg { 6022549e21daSmrg concat_name = xstrdup (wrapper); 6023549e21daSmrg if (check_executable (concat_name)) 6024549e21daSmrg return concat_name; 6025549e21daSmrg XFREE (concat_name); 6026549e21daSmrg } 6027549e21daSmrg else 6028549e21daSmrg { 6029549e21daSmrg#endif 6030549e21daSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 6031549e21daSmrg { 6032549e21daSmrg concat_name = xstrdup (wrapper); 6033549e21daSmrg if (check_executable (concat_name)) 6034549e21daSmrg return concat_name; 6035549e21daSmrg XFREE (concat_name); 6036549e21daSmrg } 6037fe4c343aSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM 6038549e21daSmrg } 6039549e21daSmrg#endif 6040ba6a1819Smrg 6041549e21daSmrg for (p = wrapper; *p; p++) 6042549e21daSmrg if (*p == '/') 6043549e21daSmrg { 6044549e21daSmrg has_slash = 1; 6045549e21daSmrg break; 6046549e21daSmrg } 6047549e21daSmrg if (!has_slash) 6048549e21daSmrg { 6049549e21daSmrg /* no slashes; search PATH */ 6050549e21daSmrg const char *path = getenv ("PATH"); 6051549e21daSmrg if (path != NULL) 6052549e21daSmrg { 6053549e21daSmrg for (p = path; *p; p = p_next) 6054549e21daSmrg { 6055549e21daSmrg const char *q; 6056549e21daSmrg size_t p_len; 6057549e21daSmrg for (q = p; *q; q++) 6058549e21daSmrg if (IS_PATH_SEPARATOR (*q)) 6059549e21daSmrg break; 6060fe4c343aSmrg p_len = (size_t) (q - p); 6061549e21daSmrg p_next = (*q == '\0' ? q : q + 1); 6062549e21daSmrg if (p_len == 0) 6063549e21daSmrg { 6064549e21daSmrg /* empty path: current directory */ 6065549e21daSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6066549e21daSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6067549e21daSmrg nonnull (strerror (errno))); 6068549e21daSmrg tmp_len = strlen (tmp); 6069549e21daSmrg concat_name = 6070549e21daSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6071549e21daSmrg memcpy (concat_name, tmp, tmp_len); 6072549e21daSmrg concat_name[tmp_len] = '/'; 6073549e21daSmrg strcpy (concat_name + tmp_len + 1, wrapper); 6074549e21daSmrg } 6075549e21daSmrg else 6076549e21daSmrg { 6077549e21daSmrg concat_name = 6078549e21daSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6079549e21daSmrg memcpy (concat_name, p, p_len); 6080549e21daSmrg concat_name[p_len] = '/'; 6081549e21daSmrg strcpy (concat_name + p_len + 1, wrapper); 6082549e21daSmrg } 6083549e21daSmrg if (check_executable (concat_name)) 6084549e21daSmrg return concat_name; 6085549e21daSmrg XFREE (concat_name); 6086549e21daSmrg } 6087549e21daSmrg } 6088549e21daSmrg /* not found in PATH; assume curdir */ 6089549e21daSmrg } 6090549e21daSmrg /* Relative path | not found in path: prepend cwd */ 6091549e21daSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 6092549e21daSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6093549e21daSmrg nonnull (strerror (errno))); 6094549e21daSmrg tmp_len = strlen (tmp); 6095549e21daSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6096549e21daSmrg memcpy (concat_name, tmp, tmp_len); 6097549e21daSmrg concat_name[tmp_len] = '/'; 6098549e21daSmrg strcpy (concat_name + tmp_len + 1, wrapper); 6099ba6a1819Smrg 6100549e21daSmrg if (check_executable (concat_name)) 6101549e21daSmrg return concat_name; 6102549e21daSmrg XFREE (concat_name); 6103549e21daSmrg return NULL; 6104549e21daSmrg} 6105ba6a1819Smrg 6106549e21daSmrgchar * 6107549e21daSmrgchase_symlinks (const char *pathspec) 6108549e21daSmrg{ 6109549e21daSmrg#ifndef S_ISLNK 6110549e21daSmrg return xstrdup (pathspec); 6111549e21daSmrg#else 6112549e21daSmrg char buf[LT_PATHMAX]; 6113549e21daSmrg struct stat s; 6114549e21daSmrg char *tmp_pathspec = xstrdup (pathspec); 6115549e21daSmrg char *p; 6116549e21daSmrg int has_symlinks = 0; 6117549e21daSmrg while (strlen (tmp_pathspec) && !has_symlinks) 6118549e21daSmrg { 6119549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 6120549e21daSmrg "checking path component for symlinks: %s\n", 6121549e21daSmrg tmp_pathspec); 6122549e21daSmrg if (lstat (tmp_pathspec, &s) == 0) 6123549e21daSmrg { 6124549e21daSmrg if (S_ISLNK (s.st_mode) != 0) 6125549e21daSmrg { 6126549e21daSmrg has_symlinks = 1; 6127549e21daSmrg break; 6128549e21daSmrg } 6129ba6a1819Smrg 6130549e21daSmrg /* search backwards for last DIR_SEPARATOR */ 6131549e21daSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6132549e21daSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6133549e21daSmrg p--; 6134549e21daSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6135549e21daSmrg { 6136549e21daSmrg /* no more DIR_SEPARATORS left */ 6137549e21daSmrg break; 6138549e21daSmrg } 6139549e21daSmrg *p = '\0'; 6140549e21daSmrg } 6141549e21daSmrg else 6142549e21daSmrg { 6143549e21daSmrg lt_fatal (__FILE__, __LINE__, 6144549e21daSmrg "error accessing file \"%s\": %s", 6145549e21daSmrg tmp_pathspec, nonnull (strerror (errno))); 6146549e21daSmrg } 6147549e21daSmrg } 6148549e21daSmrg XFREE (tmp_pathspec); 6149ba6a1819Smrg 6150549e21daSmrg if (!has_symlinks) 6151549e21daSmrg { 6152549e21daSmrg return xstrdup (pathspec); 6153549e21daSmrg } 6154ba6a1819Smrg 6155549e21daSmrg tmp_pathspec = realpath (pathspec, buf); 6156549e21daSmrg if (tmp_pathspec == 0) 6157549e21daSmrg { 6158549e21daSmrg lt_fatal (__FILE__, __LINE__, 6159549e21daSmrg "could not follow symlinks for %s", pathspec); 6160549e21daSmrg } 6161549e21daSmrg return xstrdup (tmp_pathspec); 6162549e21daSmrg#endif 6163549e21daSmrg} 6164ba6a1819Smrg 6165549e21daSmrgchar * 6166549e21daSmrgstrendzap (char *str, const char *pat) 6167549e21daSmrg{ 6168549e21daSmrg size_t len, patlen; 6169ba6a1819Smrg 6170549e21daSmrg assert (str != NULL); 6171549e21daSmrg assert (pat != NULL); 6172ba6a1819Smrg 6173549e21daSmrg len = strlen (str); 6174549e21daSmrg patlen = strlen (pat); 6175ba6a1819Smrg 6176549e21daSmrg if (patlen <= len) 6177549e21daSmrg { 6178549e21daSmrg str += len - patlen; 6179fe4c343aSmrg if (STREQ (str, pat)) 6180549e21daSmrg *str = '\0'; 6181549e21daSmrg } 6182549e21daSmrg return str; 6183549e21daSmrg} 6184ba6a1819Smrg 6185549e21daSmrgvoid 6186549e21daSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 6187549e21daSmrg{ 6188549e21daSmrg va_list args; 6189549e21daSmrg if (lt_debug) 6190549e21daSmrg { 6191549e21daSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6192549e21daSmrg va_start (args, fmt); 6193549e21daSmrg (void) vfprintf (stderr, fmt, args); 6194549e21daSmrg va_end (args); 6195549e21daSmrg } 6196549e21daSmrg} 6197ba6a1819Smrg 6198549e21daSmrgstatic void 6199549e21daSmrglt_error_core (int exit_status, const char *file, 6200549e21daSmrg int line, const char *mode, 6201549e21daSmrg const char *message, va_list ap) 6202549e21daSmrg{ 6203549e21daSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6204549e21daSmrg vfprintf (stderr, message, ap); 6205549e21daSmrg fprintf (stderr, ".\n"); 6206ba6a1819Smrg 6207549e21daSmrg if (exit_status >= 0) 6208549e21daSmrg exit (exit_status); 6209549e21daSmrg} 6210ba6a1819Smrg 6211549e21daSmrgvoid 6212549e21daSmrglt_fatal (const char *file, int line, const char *message, ...) 6213549e21daSmrg{ 6214549e21daSmrg va_list ap; 6215549e21daSmrg va_start (ap, message); 6216549e21daSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6217549e21daSmrg va_end (ap); 6218549e21daSmrg} 6219ba6a1819Smrg 6220549e21daSmrgstatic const char * 6221549e21daSmrgnonnull (const char *s) 6222549e21daSmrg{ 6223549e21daSmrg return s ? s : "(null)"; 6224549e21daSmrg} 6225ba6a1819Smrg 6226549e21daSmrgstatic const char * 6227549e21daSmrgnonempty (const char *s) 6228549e21daSmrg{ 6229549e21daSmrg return (s && !*s) ? "(empty)" : nonnull (s); 6230549e21daSmrg} 6231ba6a1819Smrg 6232549e21daSmrgvoid 6233549e21daSmrglt_setenv (const char *name, const char *value) 6234549e21daSmrg{ 6235549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 6236549e21daSmrg "(lt_setenv) setting '%s' to '%s'\n", 6237549e21daSmrg nonnull (name), nonnull (value)); 6238549e21daSmrg { 6239549e21daSmrg#ifdef HAVE_SETENV 6240549e21daSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 6241549e21daSmrg char *str = xstrdup (value); 6242549e21daSmrg setenv (name, str, 1); 6243549e21daSmrg#else 6244fe4c343aSmrg size_t len = strlen (name) + 1 + strlen (value) + 1; 6245549e21daSmrg char *str = XMALLOC (char, len); 6246549e21daSmrg sprintf (str, "%s=%s", name, value); 6247549e21daSmrg if (putenv (str) != EXIT_SUCCESS) 6248549e21daSmrg { 6249549e21daSmrg XFREE (str); 6250549e21daSmrg } 6251549e21daSmrg#endif 6252549e21daSmrg } 6253549e21daSmrg} 6254ba6a1819Smrg 6255549e21daSmrgchar * 6256549e21daSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 6257549e21daSmrg{ 6258549e21daSmrg char *new_value; 6259549e21daSmrg if (orig_value && *orig_value) 6260549e21daSmrg { 6261fe4c343aSmrg size_t orig_value_len = strlen (orig_value); 6262fe4c343aSmrg size_t add_len = strlen (add); 6263549e21daSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 6264549e21daSmrg if (to_end) 6265549e21daSmrg { 6266549e21daSmrg strcpy (new_value, orig_value); 6267549e21daSmrg strcpy (new_value + orig_value_len, add); 6268549e21daSmrg } 6269549e21daSmrg else 6270549e21daSmrg { 6271549e21daSmrg strcpy (new_value, add); 6272549e21daSmrg strcpy (new_value + add_len, orig_value); 6273549e21daSmrg } 6274549e21daSmrg } 6275549e21daSmrg else 6276549e21daSmrg { 6277549e21daSmrg new_value = xstrdup (add); 6278549e21daSmrg } 6279549e21daSmrg return new_value; 6280549e21daSmrg} 6281ba6a1819Smrg 6282549e21daSmrgvoid 6283549e21daSmrglt_update_exe_path (const char *name, const char *value) 6284549e21daSmrg{ 6285549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 6286549e21daSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6287549e21daSmrg nonnull (name), nonnull (value)); 6288ba6a1819Smrg 6289549e21daSmrg if (name && *name && value && *value) 6290549e21daSmrg { 6291549e21daSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 6292549e21daSmrg /* some systems can't cope with a ':'-terminated path #' */ 6293fe4c343aSmrg size_t len = strlen (new_value); 6294fe4c343aSmrg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6295549e21daSmrg { 6296fe4c343aSmrg new_value[--len] = '\0'; 6297549e21daSmrg } 6298549e21daSmrg lt_setenv (name, new_value); 6299549e21daSmrg XFREE (new_value); 6300549e21daSmrg } 6301549e21daSmrg} 6302ba6a1819Smrg 6303549e21daSmrgvoid 6304549e21daSmrglt_update_lib_path (const char *name, const char *value) 6305549e21daSmrg{ 6306549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 6307549e21daSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6308549e21daSmrg nonnull (name), nonnull (value)); 6309ba6a1819Smrg 6310549e21daSmrg if (name && *name && value && *value) 6311549e21daSmrg { 6312549e21daSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 6313549e21daSmrg lt_setenv (name, new_value); 6314549e21daSmrg XFREE (new_value); 6315549e21daSmrg } 6316549e21daSmrg} 6317ba6a1819Smrg 6318549e21daSmrgEOF 6319549e21daSmrg case $host_os in 6320549e21daSmrg mingw*) 6321549e21daSmrg cat <<"EOF" 6322549e21daSmrg 6323549e21daSmrg/* Prepares an argument vector before calling spawn(). 6324549e21daSmrg Note that spawn() does not by itself call the command interpreter 6325549e21daSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6326549e21daSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6327549e21daSmrg GetVersionEx(&v); 6328549e21daSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6329549e21daSmrg }) ? "cmd.exe" : "command.com"). 6330549e21daSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 6331549e21daSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6332549e21daSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6333549e21daSmrg special way: 6334549e21daSmrg - Space and tab are interpreted as delimiters. They are not treated as 6335549e21daSmrg delimiters if they are surrounded by double quotes: "...". 6336549e21daSmrg - Unescaped double quotes are removed from the input. Their only effect is 6337549e21daSmrg that within double quotes, space and tab are treated like normal 6338549e21daSmrg characters. 6339549e21daSmrg - Backslashes not followed by double quotes are not special. 6340549e21daSmrg - But 2*n+1 backslashes followed by a double quote become 6341549e21daSmrg n backslashes followed by a double quote (n >= 0): 6342549e21daSmrg \" -> " 6343549e21daSmrg \\\" -> \" 6344549e21daSmrg \\\\\" -> \\" 6345549e21daSmrg */ 6346549e21daSmrg#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" 6347549e21daSmrg#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" 6348549e21daSmrgchar ** 6349549e21daSmrgprepare_spawn (char **argv) 6350549e21daSmrg{ 6351549e21daSmrg size_t argc; 6352549e21daSmrg char **new_argv; 6353549e21daSmrg size_t i; 6354ba6a1819Smrg 6355549e21daSmrg /* Count number of arguments. */ 6356549e21daSmrg for (argc = 0; argv[argc] != NULL; argc++) 6357549e21daSmrg ; 6358ba6a1819Smrg 6359549e21daSmrg /* Allocate new argument vector. */ 6360549e21daSmrg new_argv = XMALLOC (char *, argc + 1); 6361ba6a1819Smrg 6362549e21daSmrg /* Put quoted arguments into the new argument vector. */ 6363549e21daSmrg for (i = 0; i < argc; i++) 6364549e21daSmrg { 6365549e21daSmrg const char *string = argv[i]; 6366549e21daSmrg 6367549e21daSmrg if (string[0] == '\0') 6368549e21daSmrg new_argv[i] = xstrdup ("\"\""); 6369549e21daSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6370549e21daSmrg { 6371549e21daSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6372549e21daSmrg size_t length; 6373549e21daSmrg unsigned int backslashes; 6374549e21daSmrg const char *s; 6375549e21daSmrg char *quoted_string; 6376549e21daSmrg char *p; 6377549e21daSmrg 6378549e21daSmrg length = 0; 6379549e21daSmrg backslashes = 0; 6380549e21daSmrg if (quote_around) 6381549e21daSmrg length++; 6382549e21daSmrg for (s = string; *s != '\0'; s++) 6383549e21daSmrg { 6384549e21daSmrg char c = *s; 6385549e21daSmrg if (c == '"') 6386549e21daSmrg length += backslashes + 1; 6387549e21daSmrg length++; 6388549e21daSmrg if (c == '\\') 6389549e21daSmrg backslashes++; 6390549e21daSmrg else 6391549e21daSmrg backslashes = 0; 6392549e21daSmrg } 6393549e21daSmrg if (quote_around) 6394549e21daSmrg length += backslashes + 1; 6395549e21daSmrg 6396549e21daSmrg quoted_string = XMALLOC (char, length + 1); 6397549e21daSmrg 6398549e21daSmrg p = quoted_string; 6399549e21daSmrg backslashes = 0; 6400549e21daSmrg if (quote_around) 6401549e21daSmrg *p++ = '"'; 6402549e21daSmrg for (s = string; *s != '\0'; s++) 6403549e21daSmrg { 6404549e21daSmrg char c = *s; 6405549e21daSmrg if (c == '"') 6406549e21daSmrg { 6407549e21daSmrg unsigned int j; 6408549e21daSmrg for (j = backslashes + 1; j > 0; j--) 6409549e21daSmrg *p++ = '\\'; 6410549e21daSmrg } 6411549e21daSmrg *p++ = c; 6412549e21daSmrg if (c == '\\') 6413549e21daSmrg backslashes++; 6414549e21daSmrg else 6415549e21daSmrg backslashes = 0; 6416549e21daSmrg } 6417549e21daSmrg if (quote_around) 6418549e21daSmrg { 6419549e21daSmrg unsigned int j; 6420549e21daSmrg for (j = backslashes; j > 0; j--) 6421549e21daSmrg *p++ = '\\'; 6422549e21daSmrg *p++ = '"'; 6423549e21daSmrg } 6424549e21daSmrg *p = '\0'; 6425ba6a1819Smrg 6426549e21daSmrg new_argv[i] = quoted_string; 6427549e21daSmrg } 6428549e21daSmrg else 6429549e21daSmrg new_argv[i] = (char *) string; 6430549e21daSmrg } 6431549e21daSmrg new_argv[argc] = NULL; 6432ba6a1819Smrg 6433549e21daSmrg return new_argv; 6434549e21daSmrg} 6435549e21daSmrgEOF 6436ba6a1819Smrg ;; 6437549e21daSmrg esac 6438ba6a1819Smrg 6439549e21daSmrg cat <<"EOF" 6440549e21daSmrgvoid lt_dump_script (FILE* f) 6441549e21daSmrg{ 6442549e21daSmrgEOF 6443549e21daSmrg func_emit_wrapper yes | 64441bedbe3fSmrg $SED -n -e ' 64451bedbe3fSmrgs/^\(.\{79\}\)\(..*\)/\1\ 64461bedbe3fSmrg\2/ 64471bedbe3fSmrgh 64481bedbe3fSmrgs/\([\\"]\)/\\\1/g 64491bedbe3fSmrgs/$/\\n/ 64501bedbe3fSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 64511bedbe3fSmrgg 64521bedbe3fSmrgD' 6453549e21daSmrg cat <<"EOF" 6454549e21daSmrg} 6455549e21daSmrgEOF 6456549e21daSmrg} 6457549e21daSmrg# end: func_emit_cwrapperexe_src 6458ba6a1819Smrg 6459549e21daSmrg# func_win32_import_lib_p ARG 6460549e21daSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 6461549e21daSmrgfunc_win32_import_lib_p () 6462549e21daSmrg{ 6463fe4c343aSmrg $debug_cmd 6464fe4c343aSmrg 6465549e21daSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6466549e21daSmrg *import*) : ;; 6467549e21daSmrg *) false ;; 6468549e21daSmrg esac 6469549e21daSmrg} 6470ba6a1819Smrg 6471fe4c343aSmrg# func_suncc_cstd_abi 6472fe4c343aSmrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6473fe4c343aSmrg# Several compiler flags select an ABI that is incompatible with the 6474fe4c343aSmrg# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6475fe4c343aSmrgfunc_suncc_cstd_abi () 6476fe4c343aSmrg{ 6477fe4c343aSmrg $debug_cmd 6478fe4c343aSmrg 6479fe4c343aSmrg case " $compile_command " in 6480fe4c343aSmrg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6481fe4c343aSmrg suncc_use_cstd_abi=no 6482fe4c343aSmrg ;; 6483fe4c343aSmrg *) 6484fe4c343aSmrg suncc_use_cstd_abi=yes 6485fe4c343aSmrg ;; 6486fe4c343aSmrg esac 6487fe4c343aSmrg} 6488fe4c343aSmrg 6489549e21daSmrg# func_mode_link arg... 6490549e21daSmrgfunc_mode_link () 6491549e21daSmrg{ 6492fe4c343aSmrg $debug_cmd 6493fe4c343aSmrg 6494549e21daSmrg case $host in 6495549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6496549e21daSmrg # It is impossible to link a dll without this setting, and 6497549e21daSmrg # we shouldn't force the makefile maintainer to figure out 6498fe4c343aSmrg # what system we are compiling for in order to pass an extra 6499549e21daSmrg # flag for every libtool invocation. 6500549e21daSmrg # allow_undefined=no 6501ba6a1819Smrg 6502549e21daSmrg # FIXME: Unfortunately, there are problems with the above when trying 6503fe4c343aSmrg # to make a dll that has undefined symbols, in which case not 6504549e21daSmrg # even a static library is built. For now, we need to specify 6505549e21daSmrg # -no-undefined on the libtool link line when we can be certain 6506549e21daSmrg # that all symbols are satisfied, otherwise we get a static library. 6507549e21daSmrg allow_undefined=yes 6508549e21daSmrg ;; 6509549e21daSmrg *) 6510549e21daSmrg allow_undefined=yes 6511549e21daSmrg ;; 6512549e21daSmrg esac 6513549e21daSmrg libtool_args=$nonopt 6514549e21daSmrg base_compile="$nonopt $@" 6515549e21daSmrg compile_command=$nonopt 6516549e21daSmrg finalize_command=$nonopt 6517ba6a1819Smrg 6518549e21daSmrg compile_rpath= 6519549e21daSmrg finalize_rpath= 6520549e21daSmrg compile_shlibpath= 6521549e21daSmrg finalize_shlibpath= 6522549e21daSmrg convenience= 6523549e21daSmrg old_convenience= 6524549e21daSmrg deplibs= 6525549e21daSmrg old_deplibs= 6526549e21daSmrg compiler_flags= 6527549e21daSmrg linker_flags= 6528549e21daSmrg dllsearchpath= 6529549e21daSmrg lib_search_path=`pwd` 6530549e21daSmrg inst_prefix_dir= 6531549e21daSmrg new_inherited_linker_flags= 6532ba6a1819Smrg 6533549e21daSmrg avoid_version=no 6534549e21daSmrg bindir= 6535549e21daSmrg dlfiles= 6536549e21daSmrg dlprefiles= 6537549e21daSmrg dlself=no 6538549e21daSmrg export_dynamic=no 6539549e21daSmrg export_symbols= 6540549e21daSmrg export_symbols_regex= 6541549e21daSmrg generated= 6542549e21daSmrg libobjs= 6543549e21daSmrg ltlibs= 6544549e21daSmrg module=no 6545549e21daSmrg no_install=no 6546549e21daSmrg objs= 6547fe4c343aSmrg os2dllname= 6548549e21daSmrg non_pic_objects= 6549549e21daSmrg precious_files_regex= 6550549e21daSmrg prefer_static_libs=no 6551fe4c343aSmrg preload=false 6552549e21daSmrg prev= 6553549e21daSmrg prevarg= 6554549e21daSmrg release= 6555549e21daSmrg rpath= 6556549e21daSmrg xrpath= 6557549e21daSmrg perm_rpath= 6558549e21daSmrg temp_rpath= 6559549e21daSmrg thread_safe=no 6560549e21daSmrg vinfo= 6561549e21daSmrg vinfo_number=no 6562549e21daSmrg weak_libs= 6563fe4c343aSmrg single_module=$wl-single_module 6564549e21daSmrg func_infer_tag $base_compile 6565ba6a1819Smrg 6566549e21daSmrg # We need to know -static, to get the right output filenames. 6567549e21daSmrg for arg 6568549e21daSmrg do 6569549e21daSmrg case $arg in 6570549e21daSmrg -shared) 6571fe4c343aSmrg test yes != "$build_libtool_libs" \ 6572fe4c343aSmrg && func_fatal_configuration "cannot build a shared library" 6573549e21daSmrg build_old_libs=no 6574549e21daSmrg break 6575549e21daSmrg ;; 6576549e21daSmrg -all-static | -static | -static-libtool-libs) 6577549e21daSmrg case $arg in 6578549e21daSmrg -all-static) 6579fe4c343aSmrg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6580549e21daSmrg func_warning "complete static linking is impossible in this configuration" 6581549e21daSmrg fi 6582549e21daSmrg if test -n "$link_static_flag"; then 6583549e21daSmrg dlopen_self=$dlopen_self_static 6584549e21daSmrg fi 6585549e21daSmrg prefer_static_libs=yes 6586549e21daSmrg ;; 6587549e21daSmrg -static) 6588549e21daSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6589549e21daSmrg dlopen_self=$dlopen_self_static 6590549e21daSmrg fi 6591549e21daSmrg prefer_static_libs=built 6592549e21daSmrg ;; 6593549e21daSmrg -static-libtool-libs) 6594549e21daSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 6595549e21daSmrg dlopen_self=$dlopen_self_static 6596549e21daSmrg fi 6597549e21daSmrg prefer_static_libs=yes 6598549e21daSmrg ;; 6599549e21daSmrg esac 6600549e21daSmrg build_libtool_libs=no 6601549e21daSmrg build_old_libs=yes 6602549e21daSmrg break 6603549e21daSmrg ;; 6604549e21daSmrg esac 6605549e21daSmrg done 6606ba6a1819Smrg 6607549e21daSmrg # See if our shared archives depend on static archives. 6608549e21daSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6609ba6a1819Smrg 6610549e21daSmrg # Go through the arguments, transforming them on the way. 6611549e21daSmrg while test "$#" -gt 0; do 6612fe4c343aSmrg arg=$1 6613549e21daSmrg shift 6614549e21daSmrg func_quote_for_eval "$arg" 6615549e21daSmrg qarg=$func_quote_for_eval_unquoted_result 6616549e21daSmrg func_append libtool_args " $func_quote_for_eval_result" 6617ba6a1819Smrg 6618549e21daSmrg # If the previous option needs an argument, assign it. 6619549e21daSmrg if test -n "$prev"; then 6620549e21daSmrg case $prev in 6621549e21daSmrg output) 6622549e21daSmrg func_append compile_command " @OUTPUT@" 6623549e21daSmrg func_append finalize_command " @OUTPUT@" 6624549e21daSmrg ;; 6625549e21daSmrg esac 6626ba6a1819Smrg 6627549e21daSmrg case $prev in 6628549e21daSmrg bindir) 6629fe4c343aSmrg bindir=$arg 6630549e21daSmrg prev= 6631549e21daSmrg continue 6632549e21daSmrg ;; 6633549e21daSmrg dlfiles|dlprefiles) 6634fe4c343aSmrg $preload || { 6635549e21daSmrg # Add the symbol object into the linking commands. 6636549e21daSmrg func_append compile_command " @SYMFILE@" 6637549e21daSmrg func_append finalize_command " @SYMFILE@" 6638fe4c343aSmrg preload=: 6639fe4c343aSmrg } 6640549e21daSmrg case $arg in 6641549e21daSmrg *.la | *.lo) ;; # We handle these cases below. 6642549e21daSmrg force) 6643fe4c343aSmrg if test no = "$dlself"; then 6644549e21daSmrg dlself=needless 6645549e21daSmrg export_dynamic=yes 6646ba6a1819Smrg fi 6647549e21daSmrg prev= 6648549e21daSmrg continue 6649549e21daSmrg ;; 6650549e21daSmrg self) 6651fe4c343aSmrg if test dlprefiles = "$prev"; then 6652549e21daSmrg dlself=yes 6653fe4c343aSmrg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6654549e21daSmrg dlself=yes 6655ba6a1819Smrg else 6656549e21daSmrg dlself=needless 6657549e21daSmrg export_dynamic=yes 6658ba6a1819Smrg fi 6659549e21daSmrg prev= 6660549e21daSmrg continue 6661549e21daSmrg ;; 6662549e21daSmrg *) 6663fe4c343aSmrg if test dlfiles = "$prev"; then 66641bedbe3fSmrg func_append dlfiles " $arg" 6665ba6a1819Smrg else 66661bedbe3fSmrg func_append dlprefiles " $arg" 6667ba6a1819Smrg fi 6668549e21daSmrg prev= 6669549e21daSmrg continue 6670549e21daSmrg ;; 6671549e21daSmrg esac 6672549e21daSmrg ;; 6673549e21daSmrg expsyms) 6674fe4c343aSmrg export_symbols=$arg 6675549e21daSmrg test -f "$arg" \ 6676fe4c343aSmrg || func_fatal_error "symbol file '$arg' does not exist" 6677549e21daSmrg prev= 6678549e21daSmrg continue 6679549e21daSmrg ;; 6680549e21daSmrg expsyms_regex) 6681fe4c343aSmrg export_symbols_regex=$arg 6682549e21daSmrg prev= 6683549e21daSmrg continue 6684549e21daSmrg ;; 6685549e21daSmrg framework) 6686549e21daSmrg case $host in 6687549e21daSmrg *-*-darwin*) 6688549e21daSmrg case "$deplibs " in 6689549e21daSmrg *" $qarg.ltframework "*) ;; 66901bedbe3fSmrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 6691549e21daSmrg ;; 6692549e21daSmrg esac 6693549e21daSmrg ;; 6694549e21daSmrg esac 6695549e21daSmrg prev= 6696549e21daSmrg continue 6697549e21daSmrg ;; 6698549e21daSmrg inst_prefix) 6699fe4c343aSmrg inst_prefix_dir=$arg 6700fe4c343aSmrg prev= 6701fe4c343aSmrg continue 6702fe4c343aSmrg ;; 6703fe4c343aSmrg mllvm) 6704fe4c343aSmrg # Clang does not use LLVM to link, so we can simply discard any 6705fe4c343aSmrg # '-mllvm $arg' options when doing the link step. 6706549e21daSmrg prev= 6707549e21daSmrg continue 6708549e21daSmrg ;; 6709549e21daSmrg objectlist) 6710549e21daSmrg if test -f "$arg"; then 6711549e21daSmrg save_arg=$arg 6712549e21daSmrg moreargs= 6713549e21daSmrg for fil in `cat "$save_arg"` 6714549e21daSmrg do 67151bedbe3fSmrg# func_append moreargs " $fil" 6716549e21daSmrg arg=$fil 6717549e21daSmrg # A libtool-controlled object. 6718ba6a1819Smrg 6719549e21daSmrg # Check to see that this really is a libtool object. 6720549e21daSmrg if func_lalib_unsafe_p "$arg"; then 6721549e21daSmrg pic_object= 6722549e21daSmrg non_pic_object= 6723ba6a1819Smrg 6724549e21daSmrg # Read the .lo file 6725549e21daSmrg func_source "$arg" 6726ba6a1819Smrg 6727549e21daSmrg if test -z "$pic_object" || 6728549e21daSmrg test -z "$non_pic_object" || 6729fe4c343aSmrg test none = "$pic_object" && 6730fe4c343aSmrg test none = "$non_pic_object"; then 6731fe4c343aSmrg func_fatal_error "cannot find name of object for '$arg'" 6732549e21daSmrg fi 6733ba6a1819Smrg 6734549e21daSmrg # Extract subdirectory from the argument. 6735549e21daSmrg func_dirname "$arg" "/" "" 6736fe4c343aSmrg xdir=$func_dirname_result 6737ba6a1819Smrg 6738fe4c343aSmrg if test none != "$pic_object"; then 6739549e21daSmrg # Prepend the subdirectory the object is found in. 6740fe4c343aSmrg pic_object=$xdir$pic_object 6741ba6a1819Smrg 6742fe4c343aSmrg if test dlfiles = "$prev"; then 6743fe4c343aSmrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 67441bedbe3fSmrg func_append dlfiles " $pic_object" 6745549e21daSmrg prev= 6746549e21daSmrg continue 6747549e21daSmrg else 6748549e21daSmrg # If libtool objects are unsupported, then we need to preload. 6749549e21daSmrg prev=dlprefiles 6750549e21daSmrg fi 6751549e21daSmrg fi 6752ba6a1819Smrg 6753549e21daSmrg # CHECK ME: I think I busted this. -Ossama 6754fe4c343aSmrg if test dlprefiles = "$prev"; then 6755549e21daSmrg # Preload the old-style object. 67561bedbe3fSmrg func_append dlprefiles " $pic_object" 6757549e21daSmrg prev= 6758549e21daSmrg fi 6759ba6a1819Smrg 6760549e21daSmrg # A PIC object. 6761549e21daSmrg func_append libobjs " $pic_object" 6762fe4c343aSmrg arg=$pic_object 6763549e21daSmrg fi 6764ba6a1819Smrg 6765549e21daSmrg # Non-PIC object. 6766fe4c343aSmrg if test none != "$non_pic_object"; then 6767549e21daSmrg # Prepend the subdirectory the object is found in. 6768fe4c343aSmrg non_pic_object=$xdir$non_pic_object 6769ba6a1819Smrg 6770549e21daSmrg # A standard non-PIC object 6771549e21daSmrg func_append non_pic_objects " $non_pic_object" 6772fe4c343aSmrg if test -z "$pic_object" || test none = "$pic_object"; then 6773fe4c343aSmrg arg=$non_pic_object 6774549e21daSmrg fi 6775549e21daSmrg else 6776549e21daSmrg # If the PIC object exists, use it instead. 6777549e21daSmrg # $xdir was prepended to $pic_object above. 6778fe4c343aSmrg non_pic_object=$pic_object 6779549e21daSmrg func_append non_pic_objects " $non_pic_object" 6780549e21daSmrg fi 6781549e21daSmrg else 6782549e21daSmrg # Only an error if not doing a dry-run. 6783549e21daSmrg if $opt_dry_run; then 6784549e21daSmrg # Extract subdirectory from the argument. 6785549e21daSmrg func_dirname "$arg" "/" "" 6786fe4c343aSmrg xdir=$func_dirname_result 6787549e21daSmrg 6788549e21daSmrg func_lo2o "$arg" 6789549e21daSmrg pic_object=$xdir$objdir/$func_lo2o_result 6790549e21daSmrg non_pic_object=$xdir$func_lo2o_result 6791549e21daSmrg func_append libobjs " $pic_object" 6792549e21daSmrg func_append non_pic_objects " $non_pic_object" 6793549e21daSmrg else 6794fe4c343aSmrg func_fatal_error "'$arg' is not a valid libtool object" 6795549e21daSmrg fi 6796549e21daSmrg fi 6797549e21daSmrg done 6798549e21daSmrg else 6799fe4c343aSmrg func_fatal_error "link input file '$arg' does not exist" 6800ba6a1819Smrg fi 6801549e21daSmrg arg=$save_arg 6802549e21daSmrg prev= 6803549e21daSmrg continue 6804549e21daSmrg ;; 6805fe4c343aSmrg os2dllname) 6806fe4c343aSmrg os2dllname=$arg 6807fe4c343aSmrg prev= 6808fe4c343aSmrg continue 6809fe4c343aSmrg ;; 6810549e21daSmrg precious_regex) 6811fe4c343aSmrg precious_files_regex=$arg 6812549e21daSmrg prev= 6813549e21daSmrg continue 6814549e21daSmrg ;; 6815549e21daSmrg release) 6816fe4c343aSmrg release=-$arg 6817549e21daSmrg prev= 6818549e21daSmrg continue 6819549e21daSmrg ;; 6820549e21daSmrg rpath | xrpath) 6821549e21daSmrg # We need an absolute path. 6822549e21daSmrg case $arg in 6823549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 6824549e21daSmrg *) 6825549e21daSmrg func_fatal_error "only absolute run-paths are allowed" 6826549e21daSmrg ;; 6827ba6a1819Smrg esac 6828fe4c343aSmrg if test rpath = "$prev"; then 6829549e21daSmrg case "$rpath " in 6830549e21daSmrg *" $arg "*) ;; 68311bedbe3fSmrg *) func_append rpath " $arg" ;; 6832549e21daSmrg esac 6833549e21daSmrg else 6834549e21daSmrg case "$xrpath " in 6835549e21daSmrg *" $arg "*) ;; 68361bedbe3fSmrg *) func_append xrpath " $arg" ;; 6837549e21daSmrg esac 6838549e21daSmrg fi 6839549e21daSmrg prev= 6840549e21daSmrg continue 6841549e21daSmrg ;; 6842549e21daSmrg shrext) 6843fe4c343aSmrg shrext_cmds=$arg 6844549e21daSmrg prev= 6845549e21daSmrg continue 6846549e21daSmrg ;; 6847549e21daSmrg weak) 68481bedbe3fSmrg func_append weak_libs " $arg" 6849549e21daSmrg prev= 6850549e21daSmrg continue 6851549e21daSmrg ;; 6852549e21daSmrg xcclinker) 68531bedbe3fSmrg func_append linker_flags " $qarg" 68541bedbe3fSmrg func_append compiler_flags " $qarg" 6855549e21daSmrg prev= 6856549e21daSmrg func_append compile_command " $qarg" 6857549e21daSmrg func_append finalize_command " $qarg" 6858549e21daSmrg continue 6859549e21daSmrg ;; 6860549e21daSmrg xcompiler) 68611bedbe3fSmrg func_append compiler_flags " $qarg" 6862549e21daSmrg prev= 6863549e21daSmrg func_append compile_command " $qarg" 6864549e21daSmrg func_append finalize_command " $qarg" 6865549e21daSmrg continue 6866549e21daSmrg ;; 6867549e21daSmrg xlinker) 68681bedbe3fSmrg func_append linker_flags " $qarg" 68691bedbe3fSmrg func_append compiler_flags " $wl$qarg" 6870549e21daSmrg prev= 6871549e21daSmrg func_append compile_command " $wl$qarg" 6872549e21daSmrg func_append finalize_command " $wl$qarg" 6873549e21daSmrg continue 6874ba6a1819Smrg ;; 6875ba6a1819Smrg *) 6876549e21daSmrg eval "$prev=\"\$arg\"" 6877549e21daSmrg prev= 6878549e21daSmrg continue 6879ba6a1819Smrg ;; 6880ba6a1819Smrg esac 6881549e21daSmrg fi # test -n "$prev" 6882ba6a1819Smrg 6883fe4c343aSmrg prevarg=$arg 6884ba6a1819Smrg 6885549e21daSmrg case $arg in 6886549e21daSmrg -all-static) 6887549e21daSmrg if test -n "$link_static_flag"; then 6888549e21daSmrg # See comment for -static flag below, for more details. 6889549e21daSmrg func_append compile_command " $link_static_flag" 6890549e21daSmrg func_append finalize_command " $link_static_flag" 6891ba6a1819Smrg fi 6892549e21daSmrg continue 6893549e21daSmrg ;; 6894ba6a1819Smrg 6895549e21daSmrg -allow-undefined) 6896549e21daSmrg # FIXME: remove this flag sometime in the future. 6897fe4c343aSmrg func_fatal_error "'-allow-undefined' must not be used because it is the default" 6898549e21daSmrg ;; 6899ba6a1819Smrg 6900549e21daSmrg -avoid-version) 6901549e21daSmrg avoid_version=yes 6902549e21daSmrg continue 6903549e21daSmrg ;; 6904ba6a1819Smrg 6905549e21daSmrg -bindir) 6906549e21daSmrg prev=bindir 6907549e21daSmrg continue 6908549e21daSmrg ;; 6909ba6a1819Smrg 6910549e21daSmrg -dlopen) 6911549e21daSmrg prev=dlfiles 6912549e21daSmrg continue 6913549e21daSmrg ;; 6914ba6a1819Smrg 6915549e21daSmrg -dlpreopen) 6916549e21daSmrg prev=dlprefiles 6917549e21daSmrg continue 6918549e21daSmrg ;; 6919ba6a1819Smrg 6920549e21daSmrg -export-dynamic) 6921549e21daSmrg export_dynamic=yes 6922549e21daSmrg continue 6923549e21daSmrg ;; 6924ba6a1819Smrg 6925549e21daSmrg -export-symbols | -export-symbols-regex) 6926549e21daSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 6927549e21daSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 6928549e21daSmrg fi 6929fe4c343aSmrg if test X-export-symbols = "X$arg"; then 6930549e21daSmrg prev=expsyms 6931ba6a1819Smrg else 6932549e21daSmrg prev=expsyms_regex 6933ba6a1819Smrg fi 6934549e21daSmrg continue 6935549e21daSmrg ;; 6936ba6a1819Smrg 6937549e21daSmrg -framework) 6938549e21daSmrg prev=framework 6939549e21daSmrg continue 6940549e21daSmrg ;; 6941ba6a1819Smrg 6942549e21daSmrg -inst-prefix-dir) 6943549e21daSmrg prev=inst_prefix 6944549e21daSmrg continue 6945549e21daSmrg ;; 6946ba6a1819Smrg 6947549e21daSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 6948549e21daSmrg # so, if we see these flags be careful not to treat them like -L 6949549e21daSmrg -L[A-Z][A-Z]*:*) 6950549e21daSmrg case $with_gcc/$host in 6951549e21daSmrg no/*-*-irix* | /*-*-irix*) 6952549e21daSmrg func_append compile_command " $arg" 6953549e21daSmrg func_append finalize_command " $arg" 6954549e21daSmrg ;; 6955549e21daSmrg esac 6956549e21daSmrg continue 6957549e21daSmrg ;; 6958ba6a1819Smrg 6959549e21daSmrg -L*) 69601bedbe3fSmrg func_stripname "-L" '' "$arg" 69611bedbe3fSmrg if test -z "$func_stripname_result"; then 6962549e21daSmrg if test "$#" -gt 0; then 6963fe4c343aSmrg func_fatal_error "require no space between '-L' and '$1'" 6964ba6a1819Smrg else 6965fe4c343aSmrg func_fatal_error "need path for '-L' option" 6966ba6a1819Smrg fi 6967549e21daSmrg fi 69681bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 69691bedbe3fSmrg dir=$func_resolve_sysroot_result 6970549e21daSmrg # We need an absolute path. 6971549e21daSmrg case $dir in 6972549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 6973549e21daSmrg *) 6974549e21daSmrg absdir=`cd "$dir" && pwd` 6975549e21daSmrg test -z "$absdir" && \ 6976fe4c343aSmrg func_fatal_error "cannot determine absolute directory name of '$dir'" 6977fe4c343aSmrg dir=$absdir 6978549e21daSmrg ;; 6979ba6a1819Smrg esac 6980549e21daSmrg case "$deplibs " in 69811bedbe3fSmrg *" -L$dir "* | *" $arg "*) 69821bedbe3fSmrg # Will only happen for absolute or sysroot arguments 69831bedbe3fSmrg ;; 6984549e21daSmrg *) 69851bedbe3fSmrg # Preserve sysroot, but never include relative directories 69861bedbe3fSmrg case $dir in 69871bedbe3fSmrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 69881bedbe3fSmrg *) func_append deplibs " -L$dir" ;; 69891bedbe3fSmrg esac 69901bedbe3fSmrg func_append lib_search_path " $dir" 6991549e21daSmrg ;; 6992ba6a1819Smrg esac 6993ba6a1819Smrg case $host in 6994549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6995549e21daSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 6996549e21daSmrg case :$dllsearchpath: in 6997549e21daSmrg *":$dir:"*) ;; 6998549e21daSmrg ::) dllsearchpath=$dir;; 69991bedbe3fSmrg *) func_append dllsearchpath ":$dir";; 7000549e21daSmrg esac 7001549e21daSmrg case :$dllsearchpath: in 7002549e21daSmrg *":$testbindir:"*) ;; 7003549e21daSmrg ::) dllsearchpath=$testbindir;; 70041bedbe3fSmrg *) func_append dllsearchpath ":$testbindir";; 7005549e21daSmrg esac 7006549e21daSmrg ;; 7007ba6a1819Smrg esac 7008549e21daSmrg continue 7009549e21daSmrg ;; 7010ba6a1819Smrg 7011549e21daSmrg -l*) 7012fe4c343aSmrg if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7013549e21daSmrg case $host in 7014549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7015549e21daSmrg # These systems don't actually have a C or math library (as such) 7016549e21daSmrg continue 7017549e21daSmrg ;; 7018549e21daSmrg *-*-os2*) 7019549e21daSmrg # These systems don't actually have a C library (as such) 7020fe4c343aSmrg test X-lc = "X$arg" && continue 7021549e21daSmrg ;; 7022fe4c343aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7023549e21daSmrg # Do not include libc due to us having libc/libc_r. 7024fe4c343aSmrg test X-lc = "X$arg" && continue 7025549e21daSmrg ;; 7026549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7027549e21daSmrg # Rhapsody C and math libraries are in the System framework 70281bedbe3fSmrg func_append deplibs " System.ltframework" 7029549e21daSmrg continue 7030549e21daSmrg ;; 7031549e21daSmrg *-*-sco3.2v5* | *-*-sco5v6*) 7032549e21daSmrg # Causes problems with __ctype 7033fe4c343aSmrg test X-lc = "X$arg" && continue 7034549e21daSmrg ;; 7035549e21daSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7036549e21daSmrg # Compiler inserts libc in the correct place for threads to work 7037fe4c343aSmrg test X-lc = "X$arg" && continue 7038549e21daSmrg ;; 7039549e21daSmrg esac 7040fe4c343aSmrg elif test X-lc_r = "X$arg"; then 7041549e21daSmrg case $host in 7042fe4c343aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7043549e21daSmrg # Do not include libc_r directly, use -pthread flag. 7044549e21daSmrg continue 7045549e21daSmrg ;; 7046549e21daSmrg esac 7047549e21daSmrg fi 70481bedbe3fSmrg func_append deplibs " $arg" 7049549e21daSmrg continue 7050549e21daSmrg ;; 7051ba6a1819Smrg 7052fe4c343aSmrg -mllvm) 7053fe4c343aSmrg prev=mllvm 7054fe4c343aSmrg continue 7055fe4c343aSmrg ;; 7056fe4c343aSmrg 7057549e21daSmrg -module) 7058549e21daSmrg module=yes 7059549e21daSmrg continue 7060549e21daSmrg ;; 7061ba6a1819Smrg 7062549e21daSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7063549e21daSmrg # classes, name mangling, and exception handling. 7064549e21daSmrg # Darwin uses the -arch flag to determine output architecture. 70651bedbe3fSmrg -model|-arch|-isysroot|--sysroot) 70661bedbe3fSmrg func_append compiler_flags " $arg" 7067549e21daSmrg func_append compile_command " $arg" 7068549e21daSmrg func_append finalize_command " $arg" 7069549e21daSmrg prev=xcompiler 7070549e21daSmrg continue 7071549e21daSmrg ;; 7072ba6a1819Smrg 70731bedbe3fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 70741bedbe3fSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 70751bedbe3fSmrg func_append compiler_flags " $arg" 7076549e21daSmrg func_append compile_command " $arg" 7077549e21daSmrg func_append finalize_command " $arg" 7078549e21daSmrg case "$new_inherited_linker_flags " in 7079549e21daSmrg *" $arg "*) ;; 70801bedbe3fSmrg * ) func_append new_inherited_linker_flags " $arg" ;; 7081549e21daSmrg esac 7082549e21daSmrg continue 7083549e21daSmrg ;; 7084ba6a1819Smrg 7085549e21daSmrg -multi_module) 7086fe4c343aSmrg single_module=$wl-multi_module 7087549e21daSmrg continue 7088549e21daSmrg ;; 7089ba6a1819Smrg 7090549e21daSmrg -no-fast-install) 7091549e21daSmrg fast_install=no 7092549e21daSmrg continue 7093549e21daSmrg ;; 7094ba6a1819Smrg 7095549e21daSmrg -no-install) 7096549e21daSmrg case $host in 7097549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7098549e21daSmrg # The PATH hackery in wrapper scripts is required on Windows 7099549e21daSmrg # and Darwin in order for the loader to find any dlls it needs. 7100fe4c343aSmrg func_warning "'-no-install' is ignored for $host" 7101fe4c343aSmrg func_warning "assuming '-no-fast-install' instead" 7102549e21daSmrg fast_install=no 7103549e21daSmrg ;; 7104549e21daSmrg *) no_install=yes ;; 7105549e21daSmrg esac 7106549e21daSmrg continue 7107549e21daSmrg ;; 7108ba6a1819Smrg 7109549e21daSmrg -no-undefined) 7110549e21daSmrg allow_undefined=no 7111549e21daSmrg continue 7112549e21daSmrg ;; 7113ba6a1819Smrg 7114549e21daSmrg -objectlist) 7115549e21daSmrg prev=objectlist 7116549e21daSmrg continue 7117549e21daSmrg ;; 7118ba6a1819Smrg 7119fe4c343aSmrg -os2dllname) 7120fe4c343aSmrg prev=os2dllname 7121fe4c343aSmrg continue 7122fe4c343aSmrg ;; 7123fe4c343aSmrg 7124549e21daSmrg -o) prev=output ;; 7125ba6a1819Smrg 7126549e21daSmrg -precious-files-regex) 7127549e21daSmrg prev=precious_regex 7128549e21daSmrg continue 7129549e21daSmrg ;; 7130ba6a1819Smrg 7131549e21daSmrg -release) 7132549e21daSmrg prev=release 7133549e21daSmrg continue 7134549e21daSmrg ;; 7135ba6a1819Smrg 7136549e21daSmrg -rpath) 7137549e21daSmrg prev=rpath 7138549e21daSmrg continue 7139549e21daSmrg ;; 7140ba6a1819Smrg 7141549e21daSmrg -R) 7142549e21daSmrg prev=xrpath 7143549e21daSmrg continue 7144549e21daSmrg ;; 7145ba6a1819Smrg 7146549e21daSmrg -R*) 7147549e21daSmrg func_stripname '-R' '' "$arg" 7148549e21daSmrg dir=$func_stripname_result 7149549e21daSmrg # We need an absolute path. 7150549e21daSmrg case $dir in 7151549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 71521bedbe3fSmrg =*) 71531bedbe3fSmrg func_stripname '=' '' "$dir" 71541bedbe3fSmrg dir=$lt_sysroot$func_stripname_result 71551bedbe3fSmrg ;; 7156549e21daSmrg *) 7157549e21daSmrg func_fatal_error "only absolute run-paths are allowed" 7158549e21daSmrg ;; 7159549e21daSmrg esac 7160549e21daSmrg case "$xrpath " in 7161549e21daSmrg *" $dir "*) ;; 71621bedbe3fSmrg *) func_append xrpath " $dir" ;; 7163549e21daSmrg esac 7164549e21daSmrg continue 7165549e21daSmrg ;; 7166ba6a1819Smrg 7167549e21daSmrg -shared) 7168549e21daSmrg # The effects of -shared are defined in a previous loop. 7169549e21daSmrg continue 7170549e21daSmrg ;; 7171ba6a1819Smrg 7172549e21daSmrg -shrext) 7173549e21daSmrg prev=shrext 7174549e21daSmrg continue 7175549e21daSmrg ;; 7176ba6a1819Smrg 7177549e21daSmrg -static | -static-libtool-libs) 7178549e21daSmrg # The effects of -static are defined in a previous loop. 7179549e21daSmrg # We used to do the same as -all-static on platforms that 7180549e21daSmrg # didn't have a PIC flag, but the assumption that the effects 7181549e21daSmrg # would be equivalent was wrong. It would break on at least 7182549e21daSmrg # Digital Unix and AIX. 7183549e21daSmrg continue 7184549e21daSmrg ;; 7185ba6a1819Smrg 7186549e21daSmrg -thread-safe) 7187549e21daSmrg thread_safe=yes 7188549e21daSmrg continue 7189549e21daSmrg ;; 7190ba6a1819Smrg 7191549e21daSmrg -version-info) 7192549e21daSmrg prev=vinfo 7193549e21daSmrg continue 7194549e21daSmrg ;; 7195ba6a1819Smrg 7196549e21daSmrg -version-number) 7197549e21daSmrg prev=vinfo 7198549e21daSmrg vinfo_number=yes 7199549e21daSmrg continue 7200549e21daSmrg ;; 7201ba6a1819Smrg 7202549e21daSmrg -weak) 7203549e21daSmrg prev=weak 7204549e21daSmrg continue 7205549e21daSmrg ;; 7206ba6a1819Smrg 7207549e21daSmrg -Wc,*) 7208549e21daSmrg func_stripname '-Wc,' '' "$arg" 7209549e21daSmrg args=$func_stripname_result 7210549e21daSmrg arg= 7211fe4c343aSmrg save_ifs=$IFS; IFS=, 7212549e21daSmrg for flag in $args; do 7213fe4c343aSmrg IFS=$save_ifs 7214549e21daSmrg func_quote_for_eval "$flag" 72151bedbe3fSmrg func_append arg " $func_quote_for_eval_result" 72161bedbe3fSmrg func_append compiler_flags " $func_quote_for_eval_result" 7217549e21daSmrg done 7218fe4c343aSmrg IFS=$save_ifs 7219549e21daSmrg func_stripname ' ' '' "$arg" 7220549e21daSmrg arg=$func_stripname_result 7221549e21daSmrg ;; 7222ba6a1819Smrg 7223549e21daSmrg -Wl,*) 7224549e21daSmrg func_stripname '-Wl,' '' "$arg" 7225549e21daSmrg args=$func_stripname_result 7226549e21daSmrg arg= 7227fe4c343aSmrg save_ifs=$IFS; IFS=, 7228549e21daSmrg for flag in $args; do 7229fe4c343aSmrg IFS=$save_ifs 7230549e21daSmrg func_quote_for_eval "$flag" 72311bedbe3fSmrg func_append arg " $wl$func_quote_for_eval_result" 72321bedbe3fSmrg func_append compiler_flags " $wl$func_quote_for_eval_result" 72331bedbe3fSmrg func_append linker_flags " $func_quote_for_eval_result" 7234549e21daSmrg done 7235fe4c343aSmrg IFS=$save_ifs 7236549e21daSmrg func_stripname ' ' '' "$arg" 7237549e21daSmrg arg=$func_stripname_result 7238549e21daSmrg ;; 7239ba6a1819Smrg 7240549e21daSmrg -Xcompiler) 7241549e21daSmrg prev=xcompiler 7242549e21daSmrg continue 7243549e21daSmrg ;; 7244ba6a1819Smrg 7245549e21daSmrg -Xlinker) 7246549e21daSmrg prev=xlinker 7247549e21daSmrg continue 7248549e21daSmrg ;; 7249ba6a1819Smrg 7250549e21daSmrg -XCClinker) 7251549e21daSmrg prev=xcclinker 7252549e21daSmrg continue 7253549e21daSmrg ;; 7254ba6a1819Smrg 7255549e21daSmrg # -msg_* for osf cc 7256549e21daSmrg -msg_*) 7257549e21daSmrg func_quote_for_eval "$arg" 7258fe4c343aSmrg arg=$func_quote_for_eval_result 7259549e21daSmrg ;; 7260ba6a1819Smrg 7261549e21daSmrg # Flags to be passed through unchanged, with rationale: 7262549e21daSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7263549e21daSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 7264549e21daSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7265549e21daSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 7266549e21daSmrg # -q* compiler args for the IBM compiler 7267549e21daSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7268549e21daSmrg # -F/path path to uninstalled frameworks, gcc on darwin 7269549e21daSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7270fe4c343aSmrg # -fstack-protector* stack protector flags for GCC 7271549e21daSmrg # @file GCC response files 7272549e21daSmrg # -tp=* Portland pgcc target processor selection 72731bedbe3fSmrg # --sysroot=* for sysroot support 7274fe4c343aSmrg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7275fe4c343aSmrg # -stdlib=* select c++ std lib with clang 7276549e21daSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 72771bedbe3fSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7278fe4c343aSmrg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) 7279549e21daSmrg func_quote_for_eval "$arg" 7280fe4c343aSmrg arg=$func_quote_for_eval_result 7281549e21daSmrg func_append compile_command " $arg" 7282549e21daSmrg func_append finalize_command " $arg" 72831bedbe3fSmrg func_append compiler_flags " $arg" 7284549e21daSmrg continue 7285549e21daSmrg ;; 7286ba6a1819Smrg 7287fe4c343aSmrg -Z*) 7288fe4c343aSmrg if test os2 = "`expr $host : '.*\(os2\)'`"; then 7289fe4c343aSmrg # OS/2 uses -Zxxx to specify OS/2-specific options 7290fe4c343aSmrg compiler_flags="$compiler_flags $arg" 7291fe4c343aSmrg func_append compile_command " $arg" 7292fe4c343aSmrg func_append finalize_command " $arg" 7293fe4c343aSmrg case $arg in 7294fe4c343aSmrg -Zlinker | -Zstack) 7295fe4c343aSmrg prev=xcompiler 7296fe4c343aSmrg ;; 7297fe4c343aSmrg esac 7298fe4c343aSmrg continue 7299fe4c343aSmrg else 7300fe4c343aSmrg # Otherwise treat like 'Some other compiler flag' below 7301fe4c343aSmrg func_quote_for_eval "$arg" 7302fe4c343aSmrg arg=$func_quote_for_eval_result 7303fe4c343aSmrg fi 7304fe4c343aSmrg ;; 7305fe4c343aSmrg 7306549e21daSmrg # Some other compiler flag. 7307549e21daSmrg -* | +*) 7308549e21daSmrg func_quote_for_eval "$arg" 7309fe4c343aSmrg arg=$func_quote_for_eval_result 7310549e21daSmrg ;; 7311ba6a1819Smrg 7312549e21daSmrg *.$objext) 7313549e21daSmrg # A standard object. 73141bedbe3fSmrg func_append objs " $arg" 7315549e21daSmrg ;; 7316ba6a1819Smrg 7317549e21daSmrg *.lo) 7318549e21daSmrg # A libtool-controlled object. 7319ba6a1819Smrg 7320549e21daSmrg # Check to see that this really is a libtool object. 7321549e21daSmrg if func_lalib_unsafe_p "$arg"; then 7322549e21daSmrg pic_object= 7323549e21daSmrg non_pic_object= 7324ba6a1819Smrg 7325549e21daSmrg # Read the .lo file 7326549e21daSmrg func_source "$arg" 7327ba6a1819Smrg 7328549e21daSmrg if test -z "$pic_object" || 7329549e21daSmrg test -z "$non_pic_object" || 7330fe4c343aSmrg test none = "$pic_object" && 7331fe4c343aSmrg test none = "$non_pic_object"; then 7332fe4c343aSmrg func_fatal_error "cannot find name of object for '$arg'" 7333549e21daSmrg fi 7334ba6a1819Smrg 7335549e21daSmrg # Extract subdirectory from the argument. 7336549e21daSmrg func_dirname "$arg" "/" "" 7337fe4c343aSmrg xdir=$func_dirname_result 7338ba6a1819Smrg 7339fe4c343aSmrg test none = "$pic_object" || { 7340549e21daSmrg # Prepend the subdirectory the object is found in. 7341fe4c343aSmrg pic_object=$xdir$pic_object 7342ba6a1819Smrg 7343fe4c343aSmrg if test dlfiles = "$prev"; then 7344fe4c343aSmrg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 73451bedbe3fSmrg func_append dlfiles " $pic_object" 7346549e21daSmrg prev= 7347549e21daSmrg continue 7348549e21daSmrg else 7349549e21daSmrg # If libtool objects are unsupported, then we need to preload. 7350549e21daSmrg prev=dlprefiles 7351549e21daSmrg fi 7352549e21daSmrg fi 7353ba6a1819Smrg 7354549e21daSmrg # CHECK ME: I think I busted this. -Ossama 7355fe4c343aSmrg if test dlprefiles = "$prev"; then 7356549e21daSmrg # Preload the old-style object. 73571bedbe3fSmrg func_append dlprefiles " $pic_object" 7358549e21daSmrg prev= 7359549e21daSmrg fi 7360ba6a1819Smrg 7361549e21daSmrg # A PIC object. 7362549e21daSmrg func_append libobjs " $pic_object" 7363fe4c343aSmrg arg=$pic_object 7364fe4c343aSmrg } 7365ba6a1819Smrg 7366549e21daSmrg # Non-PIC object. 7367fe4c343aSmrg if test none != "$non_pic_object"; then 7368549e21daSmrg # Prepend the subdirectory the object is found in. 7369fe4c343aSmrg non_pic_object=$xdir$non_pic_object 7370ba6a1819Smrg 7371549e21daSmrg # A standard non-PIC object 7372549e21daSmrg func_append non_pic_objects " $non_pic_object" 7373fe4c343aSmrg if test -z "$pic_object" || test none = "$pic_object"; then 7374fe4c343aSmrg arg=$non_pic_object 7375549e21daSmrg fi 7376549e21daSmrg else 7377549e21daSmrg # If the PIC object exists, use it instead. 7378549e21daSmrg # $xdir was prepended to $pic_object above. 7379fe4c343aSmrg non_pic_object=$pic_object 7380549e21daSmrg func_append non_pic_objects " $non_pic_object" 7381549e21daSmrg fi 7382549e21daSmrg else 7383549e21daSmrg # Only an error if not doing a dry-run. 7384549e21daSmrg if $opt_dry_run; then 7385549e21daSmrg # Extract subdirectory from the argument. 7386549e21daSmrg func_dirname "$arg" "/" "" 7387fe4c343aSmrg xdir=$func_dirname_result 7388549e21daSmrg 7389549e21daSmrg func_lo2o "$arg" 7390549e21daSmrg pic_object=$xdir$objdir/$func_lo2o_result 7391549e21daSmrg non_pic_object=$xdir$func_lo2o_result 7392549e21daSmrg func_append libobjs " $pic_object" 7393549e21daSmrg func_append non_pic_objects " $non_pic_object" 7394549e21daSmrg else 7395fe4c343aSmrg func_fatal_error "'$arg' is not a valid libtool object" 7396549e21daSmrg fi 7397549e21daSmrg fi 7398549e21daSmrg ;; 7399ba6a1819Smrg 7400549e21daSmrg *.$libext) 7401549e21daSmrg # An archive. 74021bedbe3fSmrg func_append deplibs " $arg" 74031bedbe3fSmrg func_append old_deplibs " $arg" 7404549e21daSmrg continue 7405549e21daSmrg ;; 7406ba6a1819Smrg 7407549e21daSmrg *.la) 7408549e21daSmrg # A libtool-controlled library. 7409ba6a1819Smrg 74101bedbe3fSmrg func_resolve_sysroot "$arg" 7411fe4c343aSmrg if test dlfiles = "$prev"; then 7412549e21daSmrg # This library was specified with -dlopen. 74131bedbe3fSmrg func_append dlfiles " $func_resolve_sysroot_result" 7414549e21daSmrg prev= 7415fe4c343aSmrg elif test dlprefiles = "$prev"; then 7416549e21daSmrg # The library was specified with -dlpreopen. 74171bedbe3fSmrg func_append dlprefiles " $func_resolve_sysroot_result" 7418549e21daSmrg prev= 7419549e21daSmrg else 74201bedbe3fSmrg func_append deplibs " $func_resolve_sysroot_result" 7421549e21daSmrg fi 7422549e21daSmrg continue 7423549e21daSmrg ;; 7424ba6a1819Smrg 7425549e21daSmrg # Some other compiler argument. 7426549e21daSmrg *) 7427549e21daSmrg # Unknown arguments in both finalize_command and compile_command need 7428549e21daSmrg # to be aesthetically quoted because they are evaled later. 7429549e21daSmrg func_quote_for_eval "$arg" 7430fe4c343aSmrg arg=$func_quote_for_eval_result 7431549e21daSmrg ;; 7432549e21daSmrg esac # arg 7433ba6a1819Smrg 7434549e21daSmrg # Now actually substitute the argument into the commands. 7435549e21daSmrg if test -n "$arg"; then 7436549e21daSmrg func_append compile_command " $arg" 7437549e21daSmrg func_append finalize_command " $arg" 7438549e21daSmrg fi 7439549e21daSmrg done # argument parsing loop 7440ba6a1819Smrg 7441549e21daSmrg test -n "$prev" && \ 7442fe4c343aSmrg func_fatal_help "the '$prevarg' option requires an argument" 7443ba6a1819Smrg 7444fe4c343aSmrg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7445549e21daSmrg eval arg=\"$export_dynamic_flag_spec\" 7446549e21daSmrg func_append compile_command " $arg" 7447549e21daSmrg func_append finalize_command " $arg" 7448549e21daSmrg fi 7449ba6a1819Smrg 7450549e21daSmrg oldlibs= 7451549e21daSmrg # calculate the name of the file, without its directory 7452549e21daSmrg func_basename "$output" 7453fe4c343aSmrg outputname=$func_basename_result 7454fe4c343aSmrg libobjs_save=$libobjs 7455549e21daSmrg 7456549e21daSmrg if test -n "$shlibpath_var"; then 7457549e21daSmrg # get the directories listed in $shlibpath_var 7458fe4c343aSmrg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7459ba6a1819Smrg else 7460549e21daSmrg shlib_search_path= 7461ba6a1819Smrg fi 7462549e21daSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7463549e21daSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7464ba6a1819Smrg 7465fe4c343aSmrg # Definition is injected by LT_CONFIG during libtool generation. 7466fe4c343aSmrg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7467fe4c343aSmrg 7468549e21daSmrg func_dirname "$output" "/" "" 7469fe4c343aSmrg output_objdir=$func_dirname_result$objdir 74701bedbe3fSmrg func_to_tool_file "$output_objdir/" 74711bedbe3fSmrg tool_output_objdir=$func_to_tool_file_result 7472549e21daSmrg # Create the object directory. 7473549e21daSmrg func_mkdir_p "$output_objdir" 7474549e21daSmrg 7475549e21daSmrg # Determine the type of output 7476549e21daSmrg case $output in 7477549e21daSmrg "") 7478549e21daSmrg func_fatal_help "you must specify an output file" 7479549e21daSmrg ;; 7480549e21daSmrg *.$libext) linkmode=oldlib ;; 7481549e21daSmrg *.lo | *.$objext) linkmode=obj ;; 7482549e21daSmrg *.la) linkmode=lib ;; 7483549e21daSmrg *) linkmode=prog ;; # Anything else should be a program. 7484549e21daSmrg esac 7485549e21daSmrg 7486549e21daSmrg specialdeplibs= 7487549e21daSmrg 7488549e21daSmrg libs= 7489549e21daSmrg # Find all interdependent deplibs by searching for libraries 7490549e21daSmrg # that are linked more than once (e.g. -la -lb -la) 7491549e21daSmrg for deplib in $deplibs; do 7492fe4c343aSmrg if $opt_preserve_dup_deps; then 7493549e21daSmrg case "$libs " in 74941bedbe3fSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7495549e21daSmrg esac 7496549e21daSmrg fi 74971bedbe3fSmrg func_append libs " $deplib" 7498549e21daSmrg done 7499549e21daSmrg 7500fe4c343aSmrg if test lib = "$linkmode"; then 7501549e21daSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 7502549e21daSmrg 7503549e21daSmrg # Compute libraries that are listed more than once in $predeps 7504549e21daSmrg # $postdeps and mark them as special (i.e., whose duplicates are 7505549e21daSmrg # not to be eliminated). 7506549e21daSmrg pre_post_deps= 7507549e21daSmrg if $opt_duplicate_compiler_generated_deps; then 7508549e21daSmrg for pre_post_dep in $predeps $postdeps; do 7509549e21daSmrg case "$pre_post_deps " in 75101bedbe3fSmrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7511549e21daSmrg esac 75121bedbe3fSmrg func_append pre_post_deps " $pre_post_dep" 7513549e21daSmrg done 7514549e21daSmrg fi 7515549e21daSmrg pre_post_deps= 7516549e21daSmrg fi 7517549e21daSmrg 7518549e21daSmrg deplibs= 7519549e21daSmrg newdependency_libs= 7520549e21daSmrg newlib_search_path= 7521549e21daSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 7522549e21daSmrg notinst_deplibs= # not-installed libtool libraries 7523549e21daSmrg notinst_path= # paths that contain not-installed libtool libraries 7524549e21daSmrg 7525549e21daSmrg case $linkmode in 7526549e21daSmrg lib) 7527549e21daSmrg passes="conv dlpreopen link" 7528549e21daSmrg for file in $dlfiles $dlprefiles; do 7529549e21daSmrg case $file in 7530549e21daSmrg *.la) ;; 7531549e21daSmrg *) 7532fe4c343aSmrg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7533549e21daSmrg ;; 7534549e21daSmrg esac 7535549e21daSmrg done 7536549e21daSmrg ;; 7537549e21daSmrg prog) 7538549e21daSmrg compile_deplibs= 7539549e21daSmrg finalize_deplibs= 7540fe4c343aSmrg alldeplibs=false 7541549e21daSmrg newdlfiles= 7542549e21daSmrg newdlprefiles= 7543549e21daSmrg passes="conv scan dlopen dlpreopen link" 7544549e21daSmrg ;; 7545549e21daSmrg *) passes="conv" 7546549e21daSmrg ;; 7547549e21daSmrg esac 7548549e21daSmrg 7549549e21daSmrg for pass in $passes; do 7550549e21daSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 7551549e21daSmrg # so that -L comes before libs that need it for instance... 7552fe4c343aSmrg if test lib,link = "$linkmode,$pass"; then 7553549e21daSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 7554549e21daSmrg ## order, and fix it there properly 7555549e21daSmrg tmp_deplibs= 7556549e21daSmrg for deplib in $deplibs; do 7557549e21daSmrg tmp_deplibs="$deplib $tmp_deplibs" 7558549e21daSmrg done 7559fe4c343aSmrg deplibs=$tmp_deplibs 7560549e21daSmrg fi 7561549e21daSmrg 7562fe4c343aSmrg if test lib,link = "$linkmode,$pass" || 7563fe4c343aSmrg test prog,scan = "$linkmode,$pass"; then 7564fe4c343aSmrg libs=$deplibs 7565549e21daSmrg deplibs= 7566549e21daSmrg fi 7567fe4c343aSmrg if test prog = "$linkmode"; then 7568549e21daSmrg case $pass in 7569fe4c343aSmrg dlopen) libs=$dlfiles ;; 7570fe4c343aSmrg dlpreopen) libs=$dlprefiles ;; 7571549e21daSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7572549e21daSmrg esac 7573549e21daSmrg fi 7574fe4c343aSmrg if test lib,dlpreopen = "$linkmode,$pass"; then 7575549e21daSmrg # Collect and forward deplibs of preopened libtool libs 7576549e21daSmrg for lib in $dlprefiles; do 7577549e21daSmrg # Ignore non-libtool-libs 7578549e21daSmrg dependency_libs= 75791bedbe3fSmrg func_resolve_sysroot "$lib" 7580549e21daSmrg case $lib in 75811bedbe3fSmrg *.la) func_source "$func_resolve_sysroot_result" ;; 7582549e21daSmrg esac 7583549e21daSmrg 7584549e21daSmrg # Collect preopened libtool deplibs, except any this library 7585549e21daSmrg # has declared as weak libs 7586549e21daSmrg for deplib in $dependency_libs; do 7587549e21daSmrg func_basename "$deplib" 7588549e21daSmrg deplib_base=$func_basename_result 7589549e21daSmrg case " $weak_libs " in 7590549e21daSmrg *" $deplib_base "*) ;; 75911bedbe3fSmrg *) func_append deplibs " $deplib" ;; 7592549e21daSmrg esac 7593549e21daSmrg done 7594549e21daSmrg done 7595fe4c343aSmrg libs=$dlprefiles 7596549e21daSmrg fi 7597fe4c343aSmrg if test dlopen = "$pass"; then 7598549e21daSmrg # Collect dlpreopened libraries 7599fe4c343aSmrg save_deplibs=$deplibs 7600549e21daSmrg deplibs= 7601549e21daSmrg fi 7602549e21daSmrg 7603549e21daSmrg for deplib in $libs; do 7604549e21daSmrg lib= 7605fe4c343aSmrg found=false 7606549e21daSmrg case $deplib in 76071bedbe3fSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 76081bedbe3fSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7609fe4c343aSmrg if test prog,link = "$linkmode,$pass"; then 7610549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 7611549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 7612549e21daSmrg else 76131bedbe3fSmrg func_append compiler_flags " $deplib" 7614fe4c343aSmrg if test lib = "$linkmode"; then 7615549e21daSmrg case "$new_inherited_linker_flags " in 7616549e21daSmrg *" $deplib "*) ;; 76171bedbe3fSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7618549e21daSmrg esac 7619549e21daSmrg fi 7620549e21daSmrg fi 7621549e21daSmrg continue 7622549e21daSmrg ;; 7623549e21daSmrg -l*) 7624fe4c343aSmrg if test lib != "$linkmode" && test prog != "$linkmode"; then 7625fe4c343aSmrg func_warning "'-l' is ignored for archives/objects" 7626549e21daSmrg continue 7627549e21daSmrg fi 7628549e21daSmrg func_stripname '-l' '' "$deplib" 7629549e21daSmrg name=$func_stripname_result 7630fe4c343aSmrg if test lib = "$linkmode"; then 7631549e21daSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7632549e21daSmrg else 7633549e21daSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7634549e21daSmrg fi 7635549e21daSmrg for searchdir in $searchdirs; do 7636549e21daSmrg for search_ext in .la $std_shrext .so .a; do 7637549e21daSmrg # Search the libtool library 7638fe4c343aSmrg lib=$searchdir/lib$name$search_ext 7639549e21daSmrg if test -f "$lib"; then 7640fe4c343aSmrg if test .la = "$search_ext"; then 7641fe4c343aSmrg found=: 7642549e21daSmrg else 7643fe4c343aSmrg found=false 7644549e21daSmrg fi 7645549e21daSmrg break 2 7646549e21daSmrg fi 7647549e21daSmrg done 7648549e21daSmrg done 7649fe4c343aSmrg if $found; then 7650fe4c343aSmrg # deplib is a libtool library 7651549e21daSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7652549e21daSmrg # We need to do some special things here, and not later. 7653fe4c343aSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7654549e21daSmrg case " $predeps $postdeps " in 7655549e21daSmrg *" $deplib "*) 7656549e21daSmrg if func_lalib_p "$lib"; then 7657549e21daSmrg library_names= 7658549e21daSmrg old_library= 7659549e21daSmrg func_source "$lib" 7660549e21daSmrg for l in $old_library $library_names; do 7661fe4c343aSmrg ll=$l 7662549e21daSmrg done 7663fe4c343aSmrg if test "X$ll" = "X$old_library"; then # only static version available 7664fe4c343aSmrg found=false 7665549e21daSmrg func_dirname "$lib" "" "." 7666fe4c343aSmrg ladir=$func_dirname_result 7667549e21daSmrg lib=$ladir/$old_library 7668fe4c343aSmrg if test prog,link = "$linkmode,$pass"; then 7669549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 7670549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 7671549e21daSmrg else 7672549e21daSmrg deplibs="$deplib $deplibs" 7673fe4c343aSmrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7674549e21daSmrg fi 7675549e21daSmrg continue 7676549e21daSmrg fi 7677549e21daSmrg fi 7678549e21daSmrg ;; 7679549e21daSmrg *) ;; 7680549e21daSmrg esac 7681549e21daSmrg fi 7682fe4c343aSmrg else 7683fe4c343aSmrg # deplib doesn't seem to be a libtool library 7684fe4c343aSmrg if test prog,link = "$linkmode,$pass"; then 7685fe4c343aSmrg compile_deplibs="$deplib $compile_deplibs" 7686fe4c343aSmrg finalize_deplibs="$deplib $finalize_deplibs" 7687fe4c343aSmrg else 7688fe4c343aSmrg deplibs="$deplib $deplibs" 7689fe4c343aSmrg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7690fe4c343aSmrg fi 7691fe4c343aSmrg continue 7692549e21daSmrg fi 7693549e21daSmrg ;; # -l 7694549e21daSmrg *.ltframework) 7695fe4c343aSmrg if test prog,link = "$linkmode,$pass"; then 7696549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 7697549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 7698549e21daSmrg else 7699549e21daSmrg deplibs="$deplib $deplibs" 7700fe4c343aSmrg if test lib = "$linkmode"; then 7701549e21daSmrg case "$new_inherited_linker_flags " in 7702549e21daSmrg *" $deplib "*) ;; 77031bedbe3fSmrg * ) func_append new_inherited_linker_flags " $deplib" ;; 7704549e21daSmrg esac 7705549e21daSmrg fi 7706549e21daSmrg fi 7707549e21daSmrg continue 7708549e21daSmrg ;; 7709549e21daSmrg -L*) 7710549e21daSmrg case $linkmode in 7711549e21daSmrg lib) 7712549e21daSmrg deplibs="$deplib $deplibs" 7713fe4c343aSmrg test conv = "$pass" && continue 7714549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 7715549e21daSmrg func_stripname '-L' '' "$deplib" 77161bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 77171bedbe3fSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 7718549e21daSmrg ;; 7719549e21daSmrg prog) 7720fe4c343aSmrg if test conv = "$pass"; then 7721549e21daSmrg deplibs="$deplib $deplibs" 7722549e21daSmrg continue 7723549e21daSmrg fi 7724fe4c343aSmrg if test scan = "$pass"; then 7725549e21daSmrg deplibs="$deplib $deplibs" 7726549e21daSmrg else 7727549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 7728549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 7729549e21daSmrg fi 7730549e21daSmrg func_stripname '-L' '' "$deplib" 77311bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 77321bedbe3fSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 7733549e21daSmrg ;; 7734549e21daSmrg *) 7735fe4c343aSmrg func_warning "'-L' is ignored for archives/objects" 7736549e21daSmrg ;; 7737549e21daSmrg esac # linkmode 7738549e21daSmrg continue 7739549e21daSmrg ;; # -L 7740549e21daSmrg -R*) 7741fe4c343aSmrg if test link = "$pass"; then 7742549e21daSmrg func_stripname '-R' '' "$deplib" 77431bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 77441bedbe3fSmrg dir=$func_resolve_sysroot_result 7745549e21daSmrg # Make sure the xrpath contains only unique directories. 7746549e21daSmrg case "$xrpath " in 7747549e21daSmrg *" $dir "*) ;; 77481bedbe3fSmrg *) func_append xrpath " $dir" ;; 7749549e21daSmrg esac 7750549e21daSmrg fi 7751549e21daSmrg deplibs="$deplib $deplibs" 7752549e21daSmrg continue 7753549e21daSmrg ;; 77541bedbe3fSmrg *.la) 77551bedbe3fSmrg func_resolve_sysroot "$deplib" 77561bedbe3fSmrg lib=$func_resolve_sysroot_result 77571bedbe3fSmrg ;; 7758549e21daSmrg *.$libext) 7759fe4c343aSmrg if test conv = "$pass"; then 7760549e21daSmrg deplibs="$deplib $deplibs" 7761549e21daSmrg continue 7762549e21daSmrg fi 7763549e21daSmrg case $linkmode in 7764549e21daSmrg lib) 7765549e21daSmrg # Linking convenience modules into shared libraries is allowed, 7766549e21daSmrg # but linking other static libraries is non-portable. 7767549e21daSmrg case " $dlpreconveniencelibs " in 7768549e21daSmrg *" $deplib "*) ;; 7769549e21daSmrg *) 7770fe4c343aSmrg valid_a_lib=false 7771549e21daSmrg case $deplibs_check_method in 7772549e21daSmrg match_pattern*) 7773549e21daSmrg set dummy $deplibs_check_method; shift 7774549e21daSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7775549e21daSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7776549e21daSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 7777fe4c343aSmrg valid_a_lib=: 7778549e21daSmrg fi 7779549e21daSmrg ;; 7780549e21daSmrg pass_all) 7781fe4c343aSmrg valid_a_lib=: 7782549e21daSmrg ;; 7783549e21daSmrg esac 7784fe4c343aSmrg if $valid_a_lib; then 7785fe4c343aSmrg echo 7786fe4c343aSmrg $ECHO "*** Warning: Linking the shared library $output against the" 7787fe4c343aSmrg $ECHO "*** static library $deplib is not portable!" 7788fe4c343aSmrg deplibs="$deplib $deplibs" 7789fe4c343aSmrg else 7790549e21daSmrg echo 7791549e21daSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 7792549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 7793549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 7794549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 7795549e21daSmrg echo "*** because the file extensions .$libext of this argument makes me believe" 7796549e21daSmrg echo "*** that it is just a static archive that I should not use here." 7797549e21daSmrg fi 7798549e21daSmrg ;; 7799549e21daSmrg esac 7800549e21daSmrg continue 7801549e21daSmrg ;; 7802549e21daSmrg prog) 7803fe4c343aSmrg if test link != "$pass"; then 7804549e21daSmrg deplibs="$deplib $deplibs" 7805549e21daSmrg else 7806549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 7807549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 7808549e21daSmrg fi 7809549e21daSmrg continue 7810549e21daSmrg ;; 7811549e21daSmrg esac # linkmode 7812549e21daSmrg ;; # *.$libext 7813549e21daSmrg *.lo | *.$objext) 7814fe4c343aSmrg if test conv = "$pass"; then 7815549e21daSmrg deplibs="$deplib $deplibs" 7816fe4c343aSmrg elif test prog = "$linkmode"; then 7817fe4c343aSmrg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 7818549e21daSmrg # If there is no dlopen support or we're linking statically, 7819549e21daSmrg # we need to preload. 78201bedbe3fSmrg func_append newdlprefiles " $deplib" 7821549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 7822549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 7823549e21daSmrg else 78241bedbe3fSmrg func_append newdlfiles " $deplib" 7825549e21daSmrg fi 7826549e21daSmrg fi 7827549e21daSmrg continue 7828549e21daSmrg ;; 7829549e21daSmrg %DEPLIBS%) 7830fe4c343aSmrg alldeplibs=: 7831549e21daSmrg continue 7832549e21daSmrg ;; 7833549e21daSmrg esac # case $deplib 7834549e21daSmrg 7835fe4c343aSmrg $found || test -f "$lib" \ 7836fe4c343aSmrg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 7837549e21daSmrg 7838549e21daSmrg # Check to see that this really is a libtool archive. 7839549e21daSmrg func_lalib_unsafe_p "$lib" \ 7840fe4c343aSmrg || func_fatal_error "'$lib' is not a valid libtool archive" 7841549e21daSmrg 7842549e21daSmrg func_dirname "$lib" "" "." 7843fe4c343aSmrg ladir=$func_dirname_result 7844549e21daSmrg 7845549e21daSmrg dlname= 7846549e21daSmrg dlopen= 7847549e21daSmrg dlpreopen= 7848549e21daSmrg libdir= 7849549e21daSmrg library_names= 7850549e21daSmrg old_library= 7851549e21daSmrg inherited_linker_flags= 7852549e21daSmrg # If the library was installed with an old release of libtool, 7853549e21daSmrg # it will not redefine variables installed, or shouldnotlink 7854549e21daSmrg installed=yes 7855549e21daSmrg shouldnotlink=no 7856549e21daSmrg avoidtemprpath= 7857549e21daSmrg 7858549e21daSmrg 7859549e21daSmrg # Read the .la file 7860549e21daSmrg func_source "$lib" 7861549e21daSmrg 7862549e21daSmrg # Convert "-framework foo" to "foo.ltframework" 7863549e21daSmrg if test -n "$inherited_linker_flags"; then 7864549e21daSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 7865549e21daSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 7866549e21daSmrg case " $new_inherited_linker_flags " in 7867549e21daSmrg *" $tmp_inherited_linker_flag "*) ;; 78681bedbe3fSmrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 7869549e21daSmrg esac 7870549e21daSmrg done 7871549e21daSmrg fi 7872549e21daSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7873fe4c343aSmrg if test lib,link = "$linkmode,$pass" || 7874fe4c343aSmrg test prog,scan = "$linkmode,$pass" || 7875fe4c343aSmrg { test prog != "$linkmode" && test lib != "$linkmode"; }; then 78761bedbe3fSmrg test -n "$dlopen" && func_append dlfiles " $dlopen" 78771bedbe3fSmrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 7878549e21daSmrg fi 7879549e21daSmrg 7880fe4c343aSmrg if test conv = "$pass"; then 7881549e21daSmrg # Only check for convenience libraries 7882549e21daSmrg deplibs="$lib $deplibs" 7883549e21daSmrg if test -z "$libdir"; then 7884549e21daSmrg if test -z "$old_library"; then 7885fe4c343aSmrg func_fatal_error "cannot find name of link library for '$lib'" 7886549e21daSmrg fi 7887549e21daSmrg # It is a libtool convenience library, so add in its objects. 78881bedbe3fSmrg func_append convenience " $ladir/$objdir/$old_library" 78891bedbe3fSmrg func_append old_convenience " $ladir/$objdir/$old_library" 7890fe4c343aSmrg elif test prog != "$linkmode" && test lib != "$linkmode"; then 7891fe4c343aSmrg func_fatal_error "'$lib' is not a convenience library" 7892549e21daSmrg fi 7893549e21daSmrg tmp_libs= 7894549e21daSmrg for deplib in $dependency_libs; do 7895549e21daSmrg deplibs="$deplib $deplibs" 7896fe4c343aSmrg if $opt_preserve_dup_deps; then 7897549e21daSmrg case "$tmp_libs " in 78981bedbe3fSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7899549e21daSmrg esac 7900549e21daSmrg fi 79011bedbe3fSmrg func_append tmp_libs " $deplib" 7902549e21daSmrg done 7903549e21daSmrg continue 7904549e21daSmrg fi # $pass = conv 7905549e21daSmrg 7906549e21daSmrg 7907549e21daSmrg # Get the name of the library we link against. 7908549e21daSmrg linklib= 79091bedbe3fSmrg if test -n "$old_library" && 7910fe4c343aSmrg { test yes = "$prefer_static_libs" || 7911fe4c343aSmrg test built,no = "$prefer_static_libs,$installed"; }; then 79121bedbe3fSmrg linklib=$old_library 79131bedbe3fSmrg else 79141bedbe3fSmrg for l in $old_library $library_names; do 7915fe4c343aSmrg linklib=$l 79161bedbe3fSmrg done 79171bedbe3fSmrg fi 7918549e21daSmrg if test -z "$linklib"; then 7919fe4c343aSmrg func_fatal_error "cannot find name of link library for '$lib'" 7920549e21daSmrg fi 7921549e21daSmrg 7922549e21daSmrg # This library was specified with -dlopen. 7923fe4c343aSmrg if test dlopen = "$pass"; then 7924fe4c343aSmrg test -z "$libdir" \ 7925fe4c343aSmrg && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 7926549e21daSmrg if test -z "$dlname" || 7927fe4c343aSmrg test yes != "$dlopen_support" || 7928fe4c343aSmrg test no = "$build_libtool_libs" 7929fe4c343aSmrg then 7930549e21daSmrg # If there is no dlname, no dlopen support or we're linking 7931549e21daSmrg # statically, we need to preload. We also need to preload any 7932549e21daSmrg # dependent libraries so libltdl's deplib preloader doesn't 7933549e21daSmrg # bomb out in the load deplibs phase. 79341bedbe3fSmrg func_append dlprefiles " $lib $dependency_libs" 7935549e21daSmrg else 79361bedbe3fSmrg func_append newdlfiles " $lib" 7937549e21daSmrg fi 7938549e21daSmrg continue 7939549e21daSmrg fi # $pass = dlopen 7940549e21daSmrg 7941549e21daSmrg # We need an absolute path. 7942549e21daSmrg case $ladir in 7943fe4c343aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 7944549e21daSmrg *) 7945549e21daSmrg abs_ladir=`cd "$ladir" && pwd` 7946549e21daSmrg if test -z "$abs_ladir"; then 7947fe4c343aSmrg func_warning "cannot determine absolute directory name of '$ladir'" 7948549e21daSmrg func_warning "passing it literally to the linker, although it might fail" 7949fe4c343aSmrg abs_ladir=$ladir 7950549e21daSmrg fi 7951549e21daSmrg ;; 7952549e21daSmrg esac 7953549e21daSmrg func_basename "$lib" 7954fe4c343aSmrg laname=$func_basename_result 7955549e21daSmrg 7956549e21daSmrg # Find the relevant object directory and library name. 7957fe4c343aSmrg if test yes = "$installed"; then 79581bedbe3fSmrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7959fe4c343aSmrg func_warning "library '$lib' was moved." 7960fe4c343aSmrg dir=$ladir 7961fe4c343aSmrg absdir=$abs_ladir 7962fe4c343aSmrg libdir=$abs_ladir 7963549e21daSmrg else 7964fe4c343aSmrg dir=$lt_sysroot$libdir 7965fe4c343aSmrg absdir=$lt_sysroot$libdir 7966549e21daSmrg fi 7967fe4c343aSmrg test yes = "$hardcode_automatic" && avoidtemprpath=yes 7968549e21daSmrg else 7969549e21daSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7970fe4c343aSmrg dir=$ladir 7971fe4c343aSmrg absdir=$abs_ladir 7972549e21daSmrg # Remove this search path later 79731bedbe3fSmrg func_append notinst_path " $abs_ladir" 7974549e21daSmrg else 7975fe4c343aSmrg dir=$ladir/$objdir 7976fe4c343aSmrg absdir=$abs_ladir/$objdir 7977549e21daSmrg # Remove this search path later 79781bedbe3fSmrg func_append notinst_path " $abs_ladir" 7979549e21daSmrg fi 7980549e21daSmrg fi # $installed = yes 7981549e21daSmrg func_stripname 'lib' '.la' "$laname" 7982549e21daSmrg name=$func_stripname_result 7983549e21daSmrg 7984549e21daSmrg # This library was specified with -dlpreopen. 7985fe4c343aSmrg if test dlpreopen = "$pass"; then 7986fe4c343aSmrg if test -z "$libdir" && test prog = "$linkmode"; then 7987fe4c343aSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 7988549e21daSmrg fi 7989fe4c343aSmrg case $host in 79901bedbe3fSmrg # special handling for platforms with PE-DLLs. 79911bedbe3fSmrg *cygwin* | *mingw* | *cegcc* ) 79921bedbe3fSmrg # Linker will automatically link against shared library if both 79931bedbe3fSmrg # static and shared are present. Therefore, ensure we extract 79941bedbe3fSmrg # symbols from the import library if a shared library is present 79951bedbe3fSmrg # (otherwise, the dlopen module name will be incorrect). We do 79961bedbe3fSmrg # this by putting the import library name into $newdlprefiles. 79971bedbe3fSmrg # We recover the dlopen module name by 'saving' the la file 79981bedbe3fSmrg # name in a special purpose variable, and (later) extracting the 79991bedbe3fSmrg # dlname from the la file. 80001bedbe3fSmrg if test -n "$dlname"; then 80011bedbe3fSmrg func_tr_sh "$dir/$linklib" 80021bedbe3fSmrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 80031bedbe3fSmrg func_append newdlprefiles " $dir/$linklib" 80041bedbe3fSmrg else 80051bedbe3fSmrg func_append newdlprefiles " $dir/$old_library" 80061bedbe3fSmrg # Keep a list of preopened convenience libraries to check 80071bedbe3fSmrg # that they are being used correctly in the link pass. 80081bedbe3fSmrg test -z "$libdir" && \ 80091bedbe3fSmrg func_append dlpreconveniencelibs " $dir/$old_library" 80101bedbe3fSmrg fi 80111bedbe3fSmrg ;; 80121bedbe3fSmrg * ) 80131bedbe3fSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 80141bedbe3fSmrg # are required to link). 80151bedbe3fSmrg if test -n "$old_library"; then 80161bedbe3fSmrg func_append newdlprefiles " $dir/$old_library" 80171bedbe3fSmrg # Keep a list of preopened convenience libraries to check 80181bedbe3fSmrg # that they are being used correctly in the link pass. 80191bedbe3fSmrg test -z "$libdir" && \ 80201bedbe3fSmrg func_append dlpreconveniencelibs " $dir/$old_library" 80211bedbe3fSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 80221bedbe3fSmrg elif test -n "$dlname"; then 80231bedbe3fSmrg func_append newdlprefiles " $dir/$dlname" 80241bedbe3fSmrg else 80251bedbe3fSmrg func_append newdlprefiles " $dir/$linklib" 80261bedbe3fSmrg fi 80271bedbe3fSmrg ;; 80281bedbe3fSmrg esac 8029549e21daSmrg fi # $pass = dlpreopen 8030549e21daSmrg 8031549e21daSmrg if test -z "$libdir"; then 8032549e21daSmrg # Link the convenience library 8033fe4c343aSmrg if test lib = "$linkmode"; then 8034549e21daSmrg deplibs="$dir/$old_library $deplibs" 8035fe4c343aSmrg elif test prog,link = "$linkmode,$pass"; then 8036549e21daSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 8037549e21daSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 8038549e21daSmrg else 8039549e21daSmrg deplibs="$lib $deplibs" # used for prog,scan pass 8040549e21daSmrg fi 8041549e21daSmrg continue 8042549e21daSmrg fi 8043549e21daSmrg 8044549e21daSmrg 8045fe4c343aSmrg if test prog = "$linkmode" && test link != "$pass"; then 80461bedbe3fSmrg func_append newlib_search_path " $ladir" 8047549e21daSmrg deplibs="$lib $deplibs" 8048549e21daSmrg 8049fe4c343aSmrg linkalldeplibs=false 8050fe4c343aSmrg if test no != "$link_all_deplibs" || test -z "$library_names" || 8051fe4c343aSmrg test no = "$build_libtool_libs"; then 8052fe4c343aSmrg linkalldeplibs=: 8053549e21daSmrg fi 8054549e21daSmrg 8055549e21daSmrg tmp_libs= 8056549e21daSmrg for deplib in $dependency_libs; do 8057549e21daSmrg case $deplib in 8058549e21daSmrg -L*) func_stripname '-L' '' "$deplib" 80591bedbe3fSmrg func_resolve_sysroot "$func_stripname_result" 80601bedbe3fSmrg func_append newlib_search_path " $func_resolve_sysroot_result" 8061549e21daSmrg ;; 8062549e21daSmrg esac 8063549e21daSmrg # Need to link against all dependency_libs? 8064fe4c343aSmrg if $linkalldeplibs; then 8065549e21daSmrg deplibs="$deplib $deplibs" 8066549e21daSmrg else 8067549e21daSmrg # Need to hardcode shared library paths 8068549e21daSmrg # or/and link against static libraries 8069549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 8070549e21daSmrg fi 8071fe4c343aSmrg if $opt_preserve_dup_deps; then 8072549e21daSmrg case "$tmp_libs " in 80731bedbe3fSmrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8074549e21daSmrg esac 8075549e21daSmrg fi 80761bedbe3fSmrg func_append tmp_libs " $deplib" 8077549e21daSmrg done # for deplib 8078549e21daSmrg continue 8079549e21daSmrg fi # $linkmode = prog... 8080549e21daSmrg 8081fe4c343aSmrg if test prog,link = "$linkmode,$pass"; then 8082549e21daSmrg if test -n "$library_names" && 8083fe4c343aSmrg { { test no = "$prefer_static_libs" || 8084fe4c343aSmrg test built,yes = "$prefer_static_libs,$installed"; } || 8085549e21daSmrg test -z "$old_library"; }; then 8086549e21daSmrg # We need to hardcode the library path 8087fe4c343aSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8088549e21daSmrg # Make sure the rpath contains only unique directories. 8089fe4c343aSmrg case $temp_rpath: in 8090549e21daSmrg *"$absdir:"*) ;; 80911bedbe3fSmrg *) func_append temp_rpath "$absdir:" ;; 8092549e21daSmrg esac 8093549e21daSmrg fi 8094549e21daSmrg 8095549e21daSmrg # Hardcode the library path. 8096549e21daSmrg # Skip directories that are in the system default run-time 8097549e21daSmrg # search path. 8098549e21daSmrg case " $sys_lib_dlsearch_path " in 8099549e21daSmrg *" $absdir "*) ;; 8100549e21daSmrg *) 8101549e21daSmrg case "$compile_rpath " in 8102549e21daSmrg *" $absdir "*) ;; 81031bedbe3fSmrg *) func_append compile_rpath " $absdir" ;; 8104549e21daSmrg esac 8105549e21daSmrg ;; 8106549e21daSmrg esac 8107549e21daSmrg case " $sys_lib_dlsearch_path " in 8108549e21daSmrg *" $libdir "*) ;; 8109549e21daSmrg *) 8110549e21daSmrg case "$finalize_rpath " in 8111549e21daSmrg *" $libdir "*) ;; 81121bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 8113549e21daSmrg esac 8114549e21daSmrg ;; 8115549e21daSmrg esac 8116549e21daSmrg fi # $linkmode,$pass = prog,link... 8117549e21daSmrg 8118fe4c343aSmrg if $alldeplibs && 8119fe4c343aSmrg { test pass_all = "$deplibs_check_method" || 8120fe4c343aSmrg { test yes = "$build_libtool_libs" && 8121549e21daSmrg test -n "$library_names"; }; }; then 8122549e21daSmrg # We only need to search for static libraries 8123549e21daSmrg continue 8124549e21daSmrg fi 8125549e21daSmrg fi 8126549e21daSmrg 8127549e21daSmrg link_static=no # Whether the deplib will be linked statically 8128549e21daSmrg use_static_libs=$prefer_static_libs 8129fe4c343aSmrg if test built = "$use_static_libs" && test yes = "$installed"; then 8130549e21daSmrg use_static_libs=no 8131549e21daSmrg fi 8132549e21daSmrg if test -n "$library_names" && 8133fe4c343aSmrg { test no = "$use_static_libs" || test -z "$old_library"; }; then 8134549e21daSmrg case $host in 8135fe4c343aSmrg *cygwin* | *mingw* | *cegcc* | *os2*) 8136549e21daSmrg # No point in relinking DLLs because paths are not encoded 81371bedbe3fSmrg func_append notinst_deplibs " $lib" 8138549e21daSmrg need_relink=no 8139549e21daSmrg ;; 8140549e21daSmrg *) 8141fe4c343aSmrg if test no = "$installed"; then 81421bedbe3fSmrg func_append notinst_deplibs " $lib" 8143549e21daSmrg need_relink=yes 8144549e21daSmrg fi 8145549e21daSmrg ;; 8146549e21daSmrg esac 8147549e21daSmrg # This is a shared library 8148549e21daSmrg 8149549e21daSmrg # Warn about portability, can't link against -module's on some 8150549e21daSmrg # systems (darwin). Don't bleat about dlopened modules though! 8151fe4c343aSmrg dlopenmodule= 8152549e21daSmrg for dlpremoduletest in $dlprefiles; do 8153549e21daSmrg if test "X$dlpremoduletest" = "X$lib"; then 8154fe4c343aSmrg dlopenmodule=$dlpremoduletest 8155549e21daSmrg break 8156549e21daSmrg fi 8157549e21daSmrg done 8158fe4c343aSmrg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8159549e21daSmrg echo 8160fe4c343aSmrg if test prog = "$linkmode"; then 8161549e21daSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 8162549e21daSmrg else 8163549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8164549e21daSmrg fi 8165549e21daSmrg $ECHO "*** $linklib is not portable!" 8166549e21daSmrg fi 8167fe4c343aSmrg if test lib = "$linkmode" && 8168fe4c343aSmrg test yes = "$hardcode_into_libs"; then 8169549e21daSmrg # Hardcode the library path. 8170549e21daSmrg # Skip directories that are in the system default run-time 8171549e21daSmrg # search path. 8172549e21daSmrg case " $sys_lib_dlsearch_path " in 8173549e21daSmrg *" $absdir "*) ;; 8174549e21daSmrg *) 8175549e21daSmrg case "$compile_rpath " in 8176549e21daSmrg *" $absdir "*) ;; 81771bedbe3fSmrg *) func_append compile_rpath " $absdir" ;; 8178549e21daSmrg esac 8179549e21daSmrg ;; 8180549e21daSmrg esac 8181549e21daSmrg case " $sys_lib_dlsearch_path " in 8182549e21daSmrg *" $libdir "*) ;; 8183549e21daSmrg *) 8184549e21daSmrg case "$finalize_rpath " in 8185549e21daSmrg *" $libdir "*) ;; 81861bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 8187549e21daSmrg esac 8188549e21daSmrg ;; 8189549e21daSmrg esac 8190549e21daSmrg fi 8191549e21daSmrg 8192549e21daSmrg if test -n "$old_archive_from_expsyms_cmds"; then 8193549e21daSmrg # figure out the soname 8194549e21daSmrg set dummy $library_names 8195549e21daSmrg shift 8196fe4c343aSmrg realname=$1 8197549e21daSmrg shift 8198549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 8199549e21daSmrg # use dlname if we got it. it's perfectly good, no? 8200549e21daSmrg if test -n "$dlname"; then 8201fe4c343aSmrg soname=$dlname 8202549e21daSmrg elif test -n "$soname_spec"; then 8203549e21daSmrg # bleh windows 8204549e21daSmrg case $host in 8205fe4c343aSmrg *cygwin* | mingw* | *cegcc* | *os2*) 8206549e21daSmrg func_arith $current - $age 8207549e21daSmrg major=$func_arith_result 8208fe4c343aSmrg versuffix=-$major 8209549e21daSmrg ;; 8210549e21daSmrg esac 8211549e21daSmrg eval soname=\"$soname_spec\" 8212549e21daSmrg else 8213fe4c343aSmrg soname=$realname 8214549e21daSmrg fi 8215549e21daSmrg 8216549e21daSmrg # Make a new name for the extract_expsyms_cmds to use 8217fe4c343aSmrg soroot=$soname 8218549e21daSmrg func_basename "$soroot" 8219fe4c343aSmrg soname=$func_basename_result 8220549e21daSmrg func_stripname 'lib' '.dll' "$soname" 8221549e21daSmrg newlib=libimp-$func_stripname_result.a 8222549e21daSmrg 8223549e21daSmrg # If the library has no export list, then create one now 8224549e21daSmrg if test -f "$output_objdir/$soname-def"; then : 8225549e21daSmrg else 8226fe4c343aSmrg func_verbose "extracting exported symbol list from '$soname'" 8227549e21daSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8228549e21daSmrg fi 8229549e21daSmrg 8230549e21daSmrg # Create $newlib 8231549e21daSmrg if test -f "$output_objdir/$newlib"; then :; else 8232fe4c343aSmrg func_verbose "generating import library for '$soname'" 8233549e21daSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8234549e21daSmrg fi 8235549e21daSmrg # make sure the library variables are pointing to the new library 8236549e21daSmrg dir=$output_objdir 8237549e21daSmrg linklib=$newlib 8238549e21daSmrg fi # test -n "$old_archive_from_expsyms_cmds" 8239549e21daSmrg 8240fe4c343aSmrg if test prog = "$linkmode" || test relink != "$opt_mode"; then 8241549e21daSmrg add_shlibpath= 8242549e21daSmrg add_dir= 8243549e21daSmrg add= 8244549e21daSmrg lib_linked=yes 8245549e21daSmrg case $hardcode_action in 8246549e21daSmrg immediate | unsupported) 8247fe4c343aSmrg if test no = "$hardcode_direct"; then 8248fe4c343aSmrg add=$dir/$linklib 8249549e21daSmrg case $host in 8250fe4c343aSmrg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8251fe4c343aSmrg *-*-sysv4*uw2*) add_dir=-L$dir ;; 8252549e21daSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8253fe4c343aSmrg *-*-unixware7*) add_dir=-L$dir ;; 8254549e21daSmrg *-*-darwin* ) 8255fe4c343aSmrg # if the lib is a (non-dlopened) module then we cannot 8256549e21daSmrg # link against it, someone is ignoring the earlier warnings 8257549e21daSmrg if /usr/bin/file -L $add 2> /dev/null | 8258fe4c343aSmrg $GREP ": [^:]* bundle" >/dev/null; then 8259549e21daSmrg if test "X$dlopenmodule" != "X$lib"; then 8260549e21daSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8261fe4c343aSmrg if test -z "$old_library"; then 8262549e21daSmrg echo 8263549e21daSmrg echo "*** And there doesn't seem to be a static archive available" 8264549e21daSmrg echo "*** The link will probably fail, sorry" 8265549e21daSmrg else 8266fe4c343aSmrg add=$dir/$old_library 8267549e21daSmrg fi 8268549e21daSmrg elif test -n "$old_library"; then 8269fe4c343aSmrg add=$dir/$old_library 8270549e21daSmrg fi 8271549e21daSmrg fi 8272549e21daSmrg esac 8273fe4c343aSmrg elif test no = "$hardcode_minus_L"; then 8274549e21daSmrg case $host in 8275fe4c343aSmrg *-*-sunos*) add_shlibpath=$dir ;; 8276549e21daSmrg esac 8277fe4c343aSmrg add_dir=-L$dir 8278fe4c343aSmrg add=-l$name 8279fe4c343aSmrg elif test no = "$hardcode_shlibpath_var"; then 8280fe4c343aSmrg add_shlibpath=$dir 8281fe4c343aSmrg add=-l$name 8282549e21daSmrg else 8283549e21daSmrg lib_linked=no 8284549e21daSmrg fi 8285549e21daSmrg ;; 8286549e21daSmrg relink) 8287fe4c343aSmrg if test yes = "$hardcode_direct" && 8288fe4c343aSmrg test no = "$hardcode_direct_absolute"; then 8289fe4c343aSmrg add=$dir/$linklib 8290fe4c343aSmrg elif test yes = "$hardcode_minus_L"; then 8291fe4c343aSmrg add_dir=-L$absdir 8292549e21daSmrg # Try looking first in the location we're being installed to. 8293549e21daSmrg if test -n "$inst_prefix_dir"; then 8294549e21daSmrg case $libdir in 8295549e21daSmrg [\\/]*) 82961bedbe3fSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8297549e21daSmrg ;; 8298549e21daSmrg esac 8299549e21daSmrg fi 8300fe4c343aSmrg add=-l$name 8301fe4c343aSmrg elif test yes = "$hardcode_shlibpath_var"; then 8302fe4c343aSmrg add_shlibpath=$dir 8303fe4c343aSmrg add=-l$name 8304549e21daSmrg else 8305549e21daSmrg lib_linked=no 8306549e21daSmrg fi 8307549e21daSmrg ;; 8308549e21daSmrg *) lib_linked=no ;; 8309549e21daSmrg esac 8310549e21daSmrg 8311fe4c343aSmrg if test yes != "$lib_linked"; then 8312549e21daSmrg func_fatal_configuration "unsupported hardcode properties" 8313549e21daSmrg fi 8314549e21daSmrg 8315549e21daSmrg if test -n "$add_shlibpath"; then 8316549e21daSmrg case :$compile_shlibpath: in 8317549e21daSmrg *":$add_shlibpath:"*) ;; 83181bedbe3fSmrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 8319549e21daSmrg esac 8320549e21daSmrg fi 8321fe4c343aSmrg if test prog = "$linkmode"; then 8322549e21daSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8323549e21daSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 8324549e21daSmrg else 8325549e21daSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8326549e21daSmrg test -n "$add" && deplibs="$add $deplibs" 8327fe4c343aSmrg if test yes != "$hardcode_direct" && 8328fe4c343aSmrg test yes != "$hardcode_minus_L" && 8329fe4c343aSmrg test yes = "$hardcode_shlibpath_var"; then 8330549e21daSmrg case :$finalize_shlibpath: in 8331549e21daSmrg *":$libdir:"*) ;; 83321bedbe3fSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8333549e21daSmrg esac 8334549e21daSmrg fi 8335549e21daSmrg fi 8336549e21daSmrg fi 8337549e21daSmrg 8338fe4c343aSmrg if test prog = "$linkmode" || test relink = "$opt_mode"; then 8339549e21daSmrg add_shlibpath= 8340549e21daSmrg add_dir= 8341549e21daSmrg add= 8342549e21daSmrg # Finalize command for both is simple: just hardcode it. 8343fe4c343aSmrg if test yes = "$hardcode_direct" && 8344fe4c343aSmrg test no = "$hardcode_direct_absolute"; then 8345fe4c343aSmrg add=$libdir/$linklib 8346fe4c343aSmrg elif test yes = "$hardcode_minus_L"; then 8347fe4c343aSmrg add_dir=-L$libdir 8348fe4c343aSmrg add=-l$name 8349fe4c343aSmrg elif test yes = "$hardcode_shlibpath_var"; then 8350549e21daSmrg case :$finalize_shlibpath: in 8351549e21daSmrg *":$libdir:"*) ;; 83521bedbe3fSmrg *) func_append finalize_shlibpath "$libdir:" ;; 8353549e21daSmrg esac 8354fe4c343aSmrg add=-l$name 8355fe4c343aSmrg elif test yes = "$hardcode_automatic"; then 8356549e21daSmrg if test -n "$inst_prefix_dir" && 8357fe4c343aSmrg test -f "$inst_prefix_dir$libdir/$linklib"; then 8358fe4c343aSmrg add=$inst_prefix_dir$libdir/$linklib 8359549e21daSmrg else 8360fe4c343aSmrg add=$libdir/$linklib 8361549e21daSmrg fi 8362549e21daSmrg else 8363549e21daSmrg # We cannot seem to hardcode it, guess we'll fake it. 8364fe4c343aSmrg add_dir=-L$libdir 8365549e21daSmrg # Try looking first in the location we're being installed to. 8366549e21daSmrg if test -n "$inst_prefix_dir"; then 8367549e21daSmrg case $libdir in 8368549e21daSmrg [\\/]*) 83691bedbe3fSmrg func_append add_dir " -L$inst_prefix_dir$libdir" 8370549e21daSmrg ;; 8371549e21daSmrg esac 8372549e21daSmrg fi 8373fe4c343aSmrg add=-l$name 8374549e21daSmrg fi 8375549e21daSmrg 8376fe4c343aSmrg if test prog = "$linkmode"; then 8377549e21daSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8378549e21daSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8379549e21daSmrg else 8380549e21daSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 8381549e21daSmrg test -n "$add" && deplibs="$add $deplibs" 8382549e21daSmrg fi 8383549e21daSmrg fi 8384fe4c343aSmrg elif test prog = "$linkmode"; then 8385549e21daSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 8386549e21daSmrg # is not unsupported. This is valid on all known static and 8387549e21daSmrg # shared platforms. 8388fe4c343aSmrg if test unsupported != "$hardcode_direct"; then 8389fe4c343aSmrg test -n "$old_library" && linklib=$old_library 8390549e21daSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 8391549e21daSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 8392549e21daSmrg else 8393549e21daSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 8394549e21daSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8395549e21daSmrg fi 8396fe4c343aSmrg elif test yes = "$build_libtool_libs"; then 8397549e21daSmrg # Not a shared library 8398fe4c343aSmrg if test pass_all != "$deplibs_check_method"; then 8399549e21daSmrg # We're trying link a shared library against a static one 8400549e21daSmrg # but the system doesn't support it. 8401549e21daSmrg 8402549e21daSmrg # Just print a warning and add the library to dependency_libs so 8403549e21daSmrg # that the program can be linked against the static library. 8404549e21daSmrg echo 8405fe4c343aSmrg $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8406549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 8407549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 8408549e21daSmrg echo "*** shared version of the library, which you do not appear to have." 8409fe4c343aSmrg if test yes = "$module"; then 8410549e21daSmrg echo "*** But as you try to build a module library, libtool will still create " 8411549e21daSmrg echo "*** a static module, that should work as long as the dlopening application" 8412549e21daSmrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8413549e21daSmrg if test -z "$global_symbol_pipe"; then 8414549e21daSmrg echo 8415549e21daSmrg echo "*** However, this would only work if libtool was able to extract symbol" 8416fe4c343aSmrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8417549e21daSmrg echo "*** not find such a program. So, this module is probably useless." 8418fe4c343aSmrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 8419549e21daSmrg fi 8420fe4c343aSmrg if test no = "$build_old_libs"; then 8421549e21daSmrg build_libtool_libs=module 8422549e21daSmrg build_old_libs=yes 8423549e21daSmrg else 8424549e21daSmrg build_libtool_libs=no 8425549e21daSmrg fi 8426549e21daSmrg fi 8427549e21daSmrg else 8428549e21daSmrg deplibs="$dir/$old_library $deplibs" 8429549e21daSmrg link_static=yes 8430549e21daSmrg fi 8431549e21daSmrg fi # link shared/static library? 8432549e21daSmrg 8433fe4c343aSmrg if test lib = "$linkmode"; then 8434549e21daSmrg if test -n "$dependency_libs" && 8435fe4c343aSmrg { test yes != "$hardcode_into_libs" || 8436fe4c343aSmrg test yes = "$build_old_libs" || 8437fe4c343aSmrg test yes = "$link_static"; }; then 8438549e21daSmrg # Extract -R from dependency_libs 8439549e21daSmrg temp_deplibs= 8440549e21daSmrg for libdir in $dependency_libs; do 8441549e21daSmrg case $libdir in 8442549e21daSmrg -R*) func_stripname '-R' '' "$libdir" 8443549e21daSmrg temp_xrpath=$func_stripname_result 8444549e21daSmrg case " $xrpath " in 8445549e21daSmrg *" $temp_xrpath "*) ;; 84461bedbe3fSmrg *) func_append xrpath " $temp_xrpath";; 8447549e21daSmrg esac;; 84481bedbe3fSmrg *) func_append temp_deplibs " $libdir";; 8449549e21daSmrg esac 8450549e21daSmrg done 8451fe4c343aSmrg dependency_libs=$temp_deplibs 8452549e21daSmrg fi 8453549e21daSmrg 84541bedbe3fSmrg func_append newlib_search_path " $absdir" 8455549e21daSmrg # Link against this library 8456fe4c343aSmrg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8457549e21daSmrg # ... and its dependency_libs 8458549e21daSmrg tmp_libs= 8459549e21daSmrg for deplib in $dependency_libs; do 8460549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 84611bedbe3fSmrg case $deplib in 84621bedbe3fSmrg -L*) func_stripname '-L' '' "$deplib" 84631bedbe3fSmrg func_resolve_sysroot "$func_stripname_result";; 84641bedbe3fSmrg *) func_resolve_sysroot "$deplib" ;; 84651bedbe3fSmrg esac 8466fe4c343aSmrg if $opt_preserve_dup_deps; then 8467549e21daSmrg case "$tmp_libs " in 84681bedbe3fSmrg *" $func_resolve_sysroot_result "*) 84691bedbe3fSmrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8470549e21daSmrg esac 8471549e21daSmrg fi 84721bedbe3fSmrg func_append tmp_libs " $func_resolve_sysroot_result" 8473549e21daSmrg done 8474549e21daSmrg 8475fe4c343aSmrg if test no != "$link_all_deplibs"; then 8476549e21daSmrg # Add the search paths of all dependency libraries 8477549e21daSmrg for deplib in $dependency_libs; do 8478549e21daSmrg path= 8479549e21daSmrg case $deplib in 8480fe4c343aSmrg -L*) path=$deplib ;; 8481549e21daSmrg *.la) 84821bedbe3fSmrg func_resolve_sysroot "$deplib" 84831bedbe3fSmrg deplib=$func_resolve_sysroot_result 8484549e21daSmrg func_dirname "$deplib" "" "." 84851bedbe3fSmrg dir=$func_dirname_result 8486549e21daSmrg # We need an absolute path. 8487549e21daSmrg case $dir in 8488fe4c343aSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8489549e21daSmrg *) 8490549e21daSmrg absdir=`cd "$dir" && pwd` 8491549e21daSmrg if test -z "$absdir"; then 8492fe4c343aSmrg func_warning "cannot determine absolute directory name of '$dir'" 8493fe4c343aSmrg absdir=$dir 8494549e21daSmrg fi 8495549e21daSmrg ;; 8496549e21daSmrg esac 8497549e21daSmrg if $GREP "^installed=no" $deplib > /dev/null; then 8498549e21daSmrg case $host in 8499549e21daSmrg *-*-darwin*) 8500549e21daSmrg depdepl= 8501fe4c343aSmrg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8502fe4c343aSmrg if test -n "$deplibrary_names"; then 8503fe4c343aSmrg for tmp in $deplibrary_names; do 8504549e21daSmrg depdepl=$tmp 8505549e21daSmrg done 8506fe4c343aSmrg if test -f "$absdir/$objdir/$depdepl"; then 8507fe4c343aSmrg depdepl=$absdir/$objdir/$depdepl 8508fe4c343aSmrg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8509549e21daSmrg if test -z "$darwin_install_name"; then 8510fe4c343aSmrg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8511549e21daSmrg fi 8512fe4c343aSmrg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8513fe4c343aSmrg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8514549e21daSmrg path= 8515549e21daSmrg fi 8516549e21daSmrg fi 8517549e21daSmrg ;; 8518549e21daSmrg *) 8519fe4c343aSmrg path=-L$absdir/$objdir 8520549e21daSmrg ;; 8521549e21daSmrg esac 8522549e21daSmrg else 8523fe4c343aSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8524549e21daSmrg test -z "$libdir" && \ 8525fe4c343aSmrg func_fatal_error "'$deplib' is not a valid libtool archive" 8526549e21daSmrg test "$absdir" != "$libdir" && \ 8527fe4c343aSmrg func_warning "'$deplib' seems to be moved" 8528549e21daSmrg 8529fe4c343aSmrg path=-L$absdir 8530549e21daSmrg fi 8531549e21daSmrg ;; 8532549e21daSmrg esac 8533549e21daSmrg case " $deplibs " in 8534549e21daSmrg *" $path "*) ;; 8535549e21daSmrg *) deplibs="$path $deplibs" ;; 8536549e21daSmrg esac 8537549e21daSmrg done 8538549e21daSmrg fi # link_all_deplibs != no 8539549e21daSmrg fi # linkmode = lib 8540549e21daSmrg done # for deplib in $libs 8541fe4c343aSmrg if test link = "$pass"; then 8542fe4c343aSmrg if test prog = "$linkmode"; then 8543549e21daSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8544549e21daSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8545549e21daSmrg else 8546549e21daSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8547549e21daSmrg fi 8548549e21daSmrg fi 8549fe4c343aSmrg dependency_libs=$newdependency_libs 8550fe4c343aSmrg if test dlpreopen = "$pass"; then 8551549e21daSmrg # Link the dlpreopened libraries before other libraries 8552549e21daSmrg for deplib in $save_deplibs; do 8553549e21daSmrg deplibs="$deplib $deplibs" 8554549e21daSmrg done 8555549e21daSmrg fi 8556fe4c343aSmrg if test dlopen != "$pass"; then 8557fe4c343aSmrg test conv = "$pass" || { 8558549e21daSmrg # Make sure lib_search_path contains only unique directories. 8559549e21daSmrg lib_search_path= 8560549e21daSmrg for dir in $newlib_search_path; do 8561549e21daSmrg case "$lib_search_path " in 8562549e21daSmrg *" $dir "*) ;; 85631bedbe3fSmrg *) func_append lib_search_path " $dir" ;; 8564549e21daSmrg esac 8565549e21daSmrg done 8566549e21daSmrg newlib_search_path= 8567fe4c343aSmrg } 8568549e21daSmrg 8569fe4c343aSmrg if test prog,link = "$linkmode,$pass"; then 8570549e21daSmrg vars="compile_deplibs finalize_deplibs" 8571fe4c343aSmrg else 8572fe4c343aSmrg vars=deplibs 8573549e21daSmrg fi 8574549e21daSmrg for var in $vars dependency_libs; do 8575549e21daSmrg # Add libraries to $var in reverse order 8576549e21daSmrg eval tmp_libs=\"\$$var\" 8577549e21daSmrg new_libs= 8578549e21daSmrg for deplib in $tmp_libs; do 8579549e21daSmrg # FIXME: Pedantically, this is the right thing to do, so 8580549e21daSmrg # that some nasty dependency loop isn't accidentally 8581549e21daSmrg # broken: 8582549e21daSmrg #new_libs="$deplib $new_libs" 8583549e21daSmrg # Pragmatically, this seems to cause very few problems in 8584549e21daSmrg # practice: 8585549e21daSmrg case $deplib in 8586549e21daSmrg -L*) new_libs="$deplib $new_libs" ;; 8587549e21daSmrg -R*) ;; 8588549e21daSmrg *) 8589549e21daSmrg # And here is the reason: when a library appears more 8590549e21daSmrg # than once as an explicit dependence of a library, or 8591549e21daSmrg # is implicitly linked in more than once by the 8592549e21daSmrg # compiler, it is considered special, and multiple 8593549e21daSmrg # occurrences thereof are not removed. Compare this 8594549e21daSmrg # with having the same library being listed as a 8595549e21daSmrg # dependency of multiple other libraries: in this case, 8596549e21daSmrg # we know (pedantically, we assume) the library does not 8597549e21daSmrg # need to be listed more than once, so we keep only the 8598549e21daSmrg # last copy. This is not always right, but it is rare 8599549e21daSmrg # enough that we require users that really mean to play 8600549e21daSmrg # such unportable linking tricks to link the library 8601549e21daSmrg # using -Wl,-lname, so that libtool does not consider it 8602549e21daSmrg # for duplicate removal. 8603549e21daSmrg case " $specialdeplibs " in 8604549e21daSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 8605549e21daSmrg *) 8606549e21daSmrg case " $new_libs " in 8607549e21daSmrg *" $deplib "*) ;; 8608549e21daSmrg *) new_libs="$deplib $new_libs" ;; 8609549e21daSmrg esac 8610549e21daSmrg ;; 8611549e21daSmrg esac 8612549e21daSmrg ;; 8613549e21daSmrg esac 8614549e21daSmrg done 8615549e21daSmrg tmp_libs= 8616549e21daSmrg for deplib in $new_libs; do 8617549e21daSmrg case $deplib in 8618549e21daSmrg -L*) 8619549e21daSmrg case " $tmp_libs " in 8620549e21daSmrg *" $deplib "*) ;; 86211bedbe3fSmrg *) func_append tmp_libs " $deplib" ;; 8622549e21daSmrg esac 8623549e21daSmrg ;; 86241bedbe3fSmrg *) func_append tmp_libs " $deplib" ;; 8625549e21daSmrg esac 8626549e21daSmrg done 8627549e21daSmrg eval $var=\"$tmp_libs\" 8628549e21daSmrg done # for var 8629549e21daSmrg fi 8630fe4c343aSmrg 8631fe4c343aSmrg # Add Sun CC postdeps if required: 8632fe4c343aSmrg test CXX = "$tagname" && { 8633fe4c343aSmrg case $host_os in 8634fe4c343aSmrg linux*) 8635fe4c343aSmrg case `$CC -V 2>&1 | sed 5q` in 8636fe4c343aSmrg *Sun\ C*) # Sun C++ 5.9 8637fe4c343aSmrg func_suncc_cstd_abi 8638fe4c343aSmrg 8639fe4c343aSmrg if test no != "$suncc_use_cstd_abi"; then 8640fe4c343aSmrg func_append postdeps ' -library=Cstd -library=Crun' 8641fe4c343aSmrg fi 8642fe4c343aSmrg ;; 8643fe4c343aSmrg esac 8644fe4c343aSmrg ;; 8645fe4c343aSmrg 8646fe4c343aSmrg solaris*) 8647fe4c343aSmrg func_cc_basename "$CC" 8648fe4c343aSmrg case $func_cc_basename_result in 8649fe4c343aSmrg CC* | sunCC*) 8650fe4c343aSmrg func_suncc_cstd_abi 8651fe4c343aSmrg 8652fe4c343aSmrg if test no != "$suncc_use_cstd_abi"; then 8653fe4c343aSmrg func_append postdeps ' -library=Cstd -library=Crun' 8654fe4c343aSmrg fi 8655fe4c343aSmrg ;; 8656fe4c343aSmrg esac 8657fe4c343aSmrg ;; 8658fe4c343aSmrg esac 8659fe4c343aSmrg } 8660fe4c343aSmrg 8661549e21daSmrg # Last step: remove runtime libs from dependency_libs 8662549e21daSmrg # (they stay in deplibs) 8663549e21daSmrg tmp_libs= 8664fe4c343aSmrg for i in $dependency_libs; do 8665549e21daSmrg case " $predeps $postdeps $compiler_lib_search_path " in 8666549e21daSmrg *" $i "*) 8667fe4c343aSmrg i= 8668549e21daSmrg ;; 8669549e21daSmrg esac 8670fe4c343aSmrg if test -n "$i"; then 86711bedbe3fSmrg func_append tmp_libs " $i" 8672549e21daSmrg fi 8673549e21daSmrg done 8674549e21daSmrg dependency_libs=$tmp_libs 8675549e21daSmrg done # for pass 8676fe4c343aSmrg if test prog = "$linkmode"; then 8677fe4c343aSmrg dlfiles=$newdlfiles 8678549e21daSmrg fi 8679fe4c343aSmrg if test prog = "$linkmode" || test lib = "$linkmode"; then 8680fe4c343aSmrg dlprefiles=$newdlprefiles 8681549e21daSmrg fi 8682549e21daSmrg 8683549e21daSmrg case $linkmode in 8684549e21daSmrg oldlib) 8685fe4c343aSmrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8686fe4c343aSmrg func_warning "'-dlopen' is ignored for archives" 8687549e21daSmrg fi 8688549e21daSmrg 8689549e21daSmrg case " $deplibs" in 8690549e21daSmrg *\ -l* | *\ -L*) 8691fe4c343aSmrg func_warning "'-l' and '-L' are ignored for archives" ;; 8692549e21daSmrg esac 8693549e21daSmrg 8694549e21daSmrg test -n "$rpath" && \ 8695fe4c343aSmrg func_warning "'-rpath' is ignored for archives" 8696549e21daSmrg 8697549e21daSmrg test -n "$xrpath" && \ 8698fe4c343aSmrg func_warning "'-R' is ignored for archives" 8699549e21daSmrg 8700549e21daSmrg test -n "$vinfo" && \ 8701fe4c343aSmrg func_warning "'-version-info/-version-number' is ignored for archives" 8702549e21daSmrg 8703549e21daSmrg test -n "$release" && \ 8704fe4c343aSmrg func_warning "'-release' is ignored for archives" 8705549e21daSmrg 8706549e21daSmrg test -n "$export_symbols$export_symbols_regex" && \ 8707fe4c343aSmrg func_warning "'-export-symbols' is ignored for archives" 8708549e21daSmrg 8709549e21daSmrg # Now set the variables for building old libraries. 8710549e21daSmrg build_libtool_libs=no 8711fe4c343aSmrg oldlibs=$output 87121bedbe3fSmrg func_append objs "$old_deplibs" 8713549e21daSmrg ;; 8714549e21daSmrg 8715549e21daSmrg lib) 8716fe4c343aSmrg # Make sure we only generate libraries of the form 'libNAME.la'. 8717549e21daSmrg case $outputname in 8718549e21daSmrg lib*) 8719549e21daSmrg func_stripname 'lib' '.la' "$outputname" 8720549e21daSmrg name=$func_stripname_result 8721549e21daSmrg eval shared_ext=\"$shrext_cmds\" 8722549e21daSmrg eval libname=\"$libname_spec\" 8723549e21daSmrg ;; 8724549e21daSmrg *) 8725fe4c343aSmrg test no = "$module" \ 8726fe4c343aSmrg && func_fatal_help "libtool library '$output' must begin with 'lib'" 8727549e21daSmrg 8728fe4c343aSmrg if test no != "$need_lib_prefix"; then 8729549e21daSmrg # Add the "lib" prefix for modules if required 8730549e21daSmrg func_stripname '' '.la' "$outputname" 8731549e21daSmrg name=$func_stripname_result 8732549e21daSmrg eval shared_ext=\"$shrext_cmds\" 8733549e21daSmrg eval libname=\"$libname_spec\" 8734549e21daSmrg else 8735549e21daSmrg func_stripname '' '.la' "$outputname" 8736549e21daSmrg libname=$func_stripname_result 8737549e21daSmrg fi 8738549e21daSmrg ;; 8739549e21daSmrg esac 8740549e21daSmrg 8741549e21daSmrg if test -n "$objs"; then 8742fe4c343aSmrg if test pass_all != "$deplibs_check_method"; then 8743fe4c343aSmrg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8744549e21daSmrg else 8745549e21daSmrg echo 8746549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8747549e21daSmrg $ECHO "*** objects $objs is not portable!" 87481bedbe3fSmrg func_append libobjs " $objs" 8749549e21daSmrg fi 8750549e21daSmrg fi 8751549e21daSmrg 8752fe4c343aSmrg test no = "$dlself" \ 8753fe4c343aSmrg || func_warning "'-dlopen self' is ignored for libtool libraries" 8754549e21daSmrg 8755549e21daSmrg set dummy $rpath 8756549e21daSmrg shift 8757fe4c343aSmrg test 1 -lt "$#" \ 8758fe4c343aSmrg && func_warning "ignoring multiple '-rpath's for a libtool library" 8759549e21daSmrg 8760fe4c343aSmrg install_libdir=$1 8761549e21daSmrg 8762549e21daSmrg oldlibs= 8763549e21daSmrg if test -z "$rpath"; then 8764fe4c343aSmrg if test yes = "$build_libtool_libs"; then 8765549e21daSmrg # Building a libtool convenience library. 8766fe4c343aSmrg # Some compilers have problems with a '.al' extension so 8767549e21daSmrg # convenience libraries should have the same extension an 8768549e21daSmrg # archive normally would. 8769549e21daSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 8770549e21daSmrg build_libtool_libs=convenience 8771549e21daSmrg build_old_libs=yes 8772549e21daSmrg fi 8773549e21daSmrg 8774549e21daSmrg test -n "$vinfo" && \ 8775fe4c343aSmrg func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8776549e21daSmrg 8777549e21daSmrg test -n "$release" && \ 8778fe4c343aSmrg func_warning "'-release' is ignored for convenience libraries" 8779549e21daSmrg else 8780549e21daSmrg 8781549e21daSmrg # Parse the version information argument. 8782fe4c343aSmrg save_ifs=$IFS; IFS=: 8783549e21daSmrg set dummy $vinfo 0 0 0 8784549e21daSmrg shift 8785fe4c343aSmrg IFS=$save_ifs 8786549e21daSmrg 8787549e21daSmrg test -n "$7" && \ 8788fe4c343aSmrg func_fatal_help "too many parameters to '-version-info'" 8789549e21daSmrg 8790549e21daSmrg # convert absolute version numbers to libtool ages 8791549e21daSmrg # this retains compatibility with .la files and attempts 8792549e21daSmrg # to make the code below a bit more comprehensible 8793549e21daSmrg 8794549e21daSmrg case $vinfo_number in 8795549e21daSmrg yes) 8796fe4c343aSmrg number_major=$1 8797fe4c343aSmrg number_minor=$2 8798fe4c343aSmrg number_revision=$3 8799549e21daSmrg # 8800549e21daSmrg # There are really only two kinds -- those that 8801549e21daSmrg # use the current revision as the major version 8802549e21daSmrg # and those that subtract age and use age as 8803549e21daSmrg # a minor version. But, then there is irix 8804fe4c343aSmrg # that has an extra 1 added just for fun 8805549e21daSmrg # 8806549e21daSmrg case $version_type in 88071bedbe3fSmrg # correct linux to gnu/linux during the next big refactor 8808fe4c343aSmrg darwin|freebsd-elf|linux|osf|windows|none) 8809549e21daSmrg func_arith $number_major + $number_minor 8810549e21daSmrg current=$func_arith_result 8811fe4c343aSmrg age=$number_minor 8812fe4c343aSmrg revision=$number_revision 8813549e21daSmrg ;; 8814fe4c343aSmrg freebsd-aout|qnx|sunos) 8815fe4c343aSmrg current=$number_major 8816fe4c343aSmrg revision=$number_minor 8817fe4c343aSmrg age=0 8818549e21daSmrg ;; 8819549e21daSmrg irix|nonstopux) 8820549e21daSmrg func_arith $number_major + $number_minor 8821549e21daSmrg current=$func_arith_result 8822fe4c343aSmrg age=$number_minor 8823fe4c343aSmrg revision=$number_minor 8824549e21daSmrg lt_irix_increment=no 8825549e21daSmrg ;; 8826549e21daSmrg esac 8827549e21daSmrg ;; 8828549e21daSmrg no) 8829fe4c343aSmrg current=$1 8830fe4c343aSmrg revision=$2 8831fe4c343aSmrg age=$3 8832549e21daSmrg ;; 8833549e21daSmrg esac 8834549e21daSmrg 8835549e21daSmrg # Check that each of the things are valid numbers. 8836549e21daSmrg case $current in 8837549e21daSmrg 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]) ;; 8838549e21daSmrg *) 8839fe4c343aSmrg func_error "CURRENT '$current' must be a nonnegative integer" 8840fe4c343aSmrg func_fatal_error "'$vinfo' is not valid version information" 8841549e21daSmrg ;; 8842549e21daSmrg esac 8843549e21daSmrg 8844549e21daSmrg case $revision in 8845549e21daSmrg 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]) ;; 8846549e21daSmrg *) 8847fe4c343aSmrg func_error "REVISION '$revision' must be a nonnegative integer" 8848fe4c343aSmrg func_fatal_error "'$vinfo' is not valid version information" 8849549e21daSmrg ;; 8850549e21daSmrg esac 8851549e21daSmrg 8852549e21daSmrg case $age in 8853549e21daSmrg 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]) ;; 8854549e21daSmrg *) 8855fe4c343aSmrg func_error "AGE '$age' must be a nonnegative integer" 8856fe4c343aSmrg func_fatal_error "'$vinfo' is not valid version information" 8857549e21daSmrg ;; 8858549e21daSmrg esac 8859549e21daSmrg 8860549e21daSmrg if test "$age" -gt "$current"; then 8861fe4c343aSmrg func_error "AGE '$age' is greater than the current interface number '$current'" 8862fe4c343aSmrg func_fatal_error "'$vinfo' is not valid version information" 8863549e21daSmrg fi 8864549e21daSmrg 8865549e21daSmrg # Calculate the version variables. 8866549e21daSmrg major= 8867549e21daSmrg versuffix= 8868549e21daSmrg verstring= 8869549e21daSmrg case $version_type in 8870549e21daSmrg none) ;; 8871549e21daSmrg 8872549e21daSmrg darwin) 8873549e21daSmrg # Like Linux, but with the current version available in 8874549e21daSmrg # verstring for coding it into the library header 8875549e21daSmrg func_arith $current - $age 8876549e21daSmrg major=.$func_arith_result 8877fe4c343aSmrg versuffix=$major.$age.$revision 8878549e21daSmrg # Darwin ld doesn't like 0 for these options... 8879549e21daSmrg func_arith $current + 1 8880549e21daSmrg minor_current=$func_arith_result 8881fe4c343aSmrg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8882549e21daSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8883fe4c343aSmrg # On Darwin other compilers 8884fe4c343aSmrg case $CC in 8885fe4c343aSmrg nagfor*) 8886fe4c343aSmrg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8887fe4c343aSmrg ;; 8888fe4c343aSmrg *) 8889fe4c343aSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8890fe4c343aSmrg ;; 8891fe4c343aSmrg esac 8892549e21daSmrg ;; 8893549e21daSmrg 8894549e21daSmrg freebsd-aout) 8895fe4c343aSmrg major=.$current 8896fe4c343aSmrg versuffix=.$current.$revision 8897549e21daSmrg ;; 8898549e21daSmrg 8899549e21daSmrg freebsd-elf) 8900fe4c343aSmrg func_arith $current - $age 8901fe4c343aSmrg major=.$func_arith_result 8902fe4c343aSmrg versuffix=$major.$age.$revision 8903549e21daSmrg ;; 8904549e21daSmrg 8905549e21daSmrg irix | nonstopux) 8906fe4c343aSmrg if test no = "$lt_irix_increment"; then 8907549e21daSmrg func_arith $current - $age 8908549e21daSmrg else 8909549e21daSmrg func_arith $current - $age + 1 8910549e21daSmrg fi 8911549e21daSmrg major=$func_arith_result 8912549e21daSmrg 8913549e21daSmrg case $version_type in 8914549e21daSmrg nonstopux) verstring_prefix=nonstopux ;; 8915549e21daSmrg *) verstring_prefix=sgi ;; 8916549e21daSmrg esac 8917fe4c343aSmrg verstring=$verstring_prefix$major.$revision 8918549e21daSmrg 8919549e21daSmrg # Add in all the interfaces that we are compatible with. 8920549e21daSmrg loop=$revision 8921fe4c343aSmrg while test 0 -ne "$loop"; do 8922549e21daSmrg func_arith $revision - $loop 8923549e21daSmrg iface=$func_arith_result 8924549e21daSmrg func_arith $loop - 1 8925549e21daSmrg loop=$func_arith_result 8926fe4c343aSmrg verstring=$verstring_prefix$major.$iface:$verstring 8927549e21daSmrg done 8928549e21daSmrg 8929fe4c343aSmrg # Before this point, $major must not contain '.'. 8930549e21daSmrg major=.$major 8931fe4c343aSmrg versuffix=$major.$revision 8932549e21daSmrg ;; 8933549e21daSmrg 89341bedbe3fSmrg linux) # correct to gnu/linux during the next big refactor 8935549e21daSmrg func_arith $current - $age 8936549e21daSmrg major=.$func_arith_result 8937fe4c343aSmrg versuffix=$major.$age.$revision 8938549e21daSmrg ;; 8939549e21daSmrg 8940549e21daSmrg osf) 8941549e21daSmrg func_arith $current - $age 8942549e21daSmrg major=.$func_arith_result 8943fe4c343aSmrg versuffix=.$current.$age.$revision 8944fe4c343aSmrg verstring=$current.$age.$revision 8945549e21daSmrg 8946549e21daSmrg # Add in all the interfaces that we are compatible with. 8947549e21daSmrg loop=$age 8948fe4c343aSmrg while test 0 -ne "$loop"; do 8949549e21daSmrg func_arith $current - $loop 8950549e21daSmrg iface=$func_arith_result 8951549e21daSmrg func_arith $loop - 1 8952549e21daSmrg loop=$func_arith_result 8953fe4c343aSmrg verstring=$verstring:$iface.0 8954549e21daSmrg done 8955549e21daSmrg 8956549e21daSmrg # Make executables depend on our current version. 8957fe4c343aSmrg func_append verstring ":$current.0" 8958549e21daSmrg ;; 8959549e21daSmrg 8960549e21daSmrg qnx) 8961fe4c343aSmrg major=.$current 8962fe4c343aSmrg versuffix=.$current 8963fe4c343aSmrg ;; 8964fe4c343aSmrg 8965fe4c343aSmrg sco) 8966fe4c343aSmrg major=.$current 8967fe4c343aSmrg versuffix=.$current 8968549e21daSmrg ;; 8969549e21daSmrg 8970549e21daSmrg sunos) 8971fe4c343aSmrg major=.$current 8972fe4c343aSmrg versuffix=.$current.$revision 8973549e21daSmrg ;; 8974549e21daSmrg 8975549e21daSmrg windows) 8976549e21daSmrg # Use '-' rather than '.', since we only want one 8977fe4c343aSmrg # extension on DOS 8.3 file systems. 8978549e21daSmrg func_arith $current - $age 8979549e21daSmrg major=$func_arith_result 8980fe4c343aSmrg versuffix=-$major 8981549e21daSmrg ;; 8982549e21daSmrg 8983549e21daSmrg *) 8984fe4c343aSmrg func_fatal_configuration "unknown library version type '$version_type'" 8985549e21daSmrg ;; 8986549e21daSmrg esac 8987549e21daSmrg 8988549e21daSmrg # Clear the version info if we defaulted, and they specified a release. 8989549e21daSmrg if test -z "$vinfo" && test -n "$release"; then 8990549e21daSmrg major= 8991549e21daSmrg case $version_type in 8992549e21daSmrg darwin) 8993549e21daSmrg # we can't check for "0.0" in archive_cmds due to quoting 8994549e21daSmrg # problems, so we reset it completely 8995549e21daSmrg verstring= 8996549e21daSmrg ;; 8997549e21daSmrg *) 8998fe4c343aSmrg verstring=0.0 8999549e21daSmrg ;; 9000549e21daSmrg esac 9001fe4c343aSmrg if test no = "$need_version"; then 9002549e21daSmrg versuffix= 9003549e21daSmrg else 9004fe4c343aSmrg versuffix=.0.0 9005549e21daSmrg fi 9006549e21daSmrg fi 9007549e21daSmrg 9008549e21daSmrg # Remove version info from name if versioning should be avoided 9009fe4c343aSmrg if test yes,no = "$avoid_version,$need_version"; then 9010549e21daSmrg major= 9011549e21daSmrg versuffix= 9012fe4c343aSmrg verstring= 9013549e21daSmrg fi 9014549e21daSmrg 9015549e21daSmrg # Check to see if the archive will have undefined symbols. 9016fe4c343aSmrg if test yes = "$allow_undefined"; then 9017fe4c343aSmrg if test unsupported = "$allow_undefined_flag"; then 9018fe4c343aSmrg if test yes = "$build_old_libs"; then 9019fe4c343aSmrg func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9020fe4c343aSmrg build_libtool_libs=no 9021fe4c343aSmrg else 9022fe4c343aSmrg func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9023fe4c343aSmrg fi 9024549e21daSmrg fi 9025549e21daSmrg else 9026549e21daSmrg # Don't allow undefined symbols. 9027fe4c343aSmrg allow_undefined_flag=$no_undefined_flag 9028549e21daSmrg fi 9029549e21daSmrg 9030549e21daSmrg fi 9031549e21daSmrg 9032fe4c343aSmrg func_generate_dlsyms "$libname" "$libname" : 90331bedbe3fSmrg func_append libobjs " $symfileobj" 9034fe4c343aSmrg test " " = "$libobjs" && libobjs= 9035549e21daSmrg 9036fe4c343aSmrg if test relink != "$opt_mode"; then 9037549e21daSmrg # Remove our outputs, but don't remove object files since they 9038549e21daSmrg # may have been created when compiling PIC objects. 9039549e21daSmrg removelist= 9040549e21daSmrg tempremovelist=`$ECHO "$output_objdir/*"` 9041549e21daSmrg for p in $tempremovelist; do 9042549e21daSmrg case $p in 9043549e21daSmrg *.$objext | *.gcno) 9044549e21daSmrg ;; 9045fe4c343aSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9046fe4c343aSmrg if test -n "$precious_files_regex"; then 9047549e21daSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9048549e21daSmrg then 9049549e21daSmrg continue 9050549e21daSmrg fi 9051549e21daSmrg fi 90521bedbe3fSmrg func_append removelist " $p" 9053549e21daSmrg ;; 9054549e21daSmrg *) ;; 9055549e21daSmrg esac 9056549e21daSmrg done 9057549e21daSmrg test -n "$removelist" && \ 9058549e21daSmrg func_show_eval "${RM}r \$removelist" 9059549e21daSmrg fi 9060549e21daSmrg 9061549e21daSmrg # Now set the variables for building old libraries. 9062fe4c343aSmrg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 90631bedbe3fSmrg func_append oldlibs " $output_objdir/$libname.$libext" 9064549e21daSmrg 9065549e21daSmrg # Transform .lo files to .o files. 9066fe4c343aSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9067549e21daSmrg fi 9068549e21daSmrg 9069549e21daSmrg # Eliminate all temporary directories. 9070549e21daSmrg #for path in $notinst_path; do 9071549e21daSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9072549e21daSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9073549e21daSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9074549e21daSmrg #done 9075549e21daSmrg 9076549e21daSmrg if test -n "$xrpath"; then 9077549e21daSmrg # If the user specified any rpath flags, then add them. 9078549e21daSmrg temp_xrpath= 9079549e21daSmrg for libdir in $xrpath; do 90801bedbe3fSmrg func_replace_sysroot "$libdir" 90811bedbe3fSmrg func_append temp_xrpath " -R$func_replace_sysroot_result" 9082549e21daSmrg case "$finalize_rpath " in 9083549e21daSmrg *" $libdir "*) ;; 90841bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 9085549e21daSmrg esac 9086549e21daSmrg done 9087fe4c343aSmrg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9088549e21daSmrg dependency_libs="$temp_xrpath $dependency_libs" 9089549e21daSmrg fi 9090549e21daSmrg fi 9091549e21daSmrg 9092549e21daSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 9093fe4c343aSmrg old_dlfiles=$dlfiles 9094549e21daSmrg dlfiles= 9095549e21daSmrg for lib in $old_dlfiles; do 9096549e21daSmrg case " $dlprefiles $dlfiles " in 9097549e21daSmrg *" $lib "*) ;; 90981bedbe3fSmrg *) func_append dlfiles " $lib" ;; 9099549e21daSmrg esac 9100549e21daSmrg done 9101549e21daSmrg 9102549e21daSmrg # Make sure dlprefiles contains only unique files 9103fe4c343aSmrg old_dlprefiles=$dlprefiles 9104549e21daSmrg dlprefiles= 9105549e21daSmrg for lib in $old_dlprefiles; do 9106549e21daSmrg case "$dlprefiles " in 9107549e21daSmrg *" $lib "*) ;; 91081bedbe3fSmrg *) func_append dlprefiles " $lib" ;; 9109549e21daSmrg esac 9110549e21daSmrg done 9111549e21daSmrg 9112fe4c343aSmrg if test yes = "$build_libtool_libs"; then 9113549e21daSmrg if test -n "$rpath"; then 9114549e21daSmrg case $host in 9115549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9116549e21daSmrg # these systems don't actually have a c library (as such)! 9117549e21daSmrg ;; 9118549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 9119549e21daSmrg # Rhapsody C library is in the System framework 91201bedbe3fSmrg func_append deplibs " System.ltframework" 9121549e21daSmrg ;; 9122549e21daSmrg *-*-netbsd*) 9123549e21daSmrg # Don't link with libc until the a.out ld.so is fixed. 9124549e21daSmrg ;; 9125549e21daSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9126549e21daSmrg # Do not include libc due to us having libc/libc_r. 9127549e21daSmrg ;; 9128549e21daSmrg *-*-sco3.2v5* | *-*-sco5v6*) 9129549e21daSmrg # Causes problems with __ctype 9130549e21daSmrg ;; 9131549e21daSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9132549e21daSmrg # Compiler inserts libc in the correct place for threads to work 9133549e21daSmrg ;; 9134549e21daSmrg *) 9135549e21daSmrg # Add libc to deplibs on all other systems if necessary. 9136fe4c343aSmrg if test yes = "$build_libtool_need_lc"; then 91371bedbe3fSmrg func_append deplibs " -lc" 9138549e21daSmrg fi 9139549e21daSmrg ;; 9140549e21daSmrg esac 9141549e21daSmrg fi 9142549e21daSmrg 9143549e21daSmrg # Transform deplibs into only deplibs that can be linked in shared. 9144549e21daSmrg name_save=$name 9145549e21daSmrg libname_save=$libname 9146549e21daSmrg release_save=$release 9147549e21daSmrg versuffix_save=$versuffix 9148549e21daSmrg major_save=$major 9149549e21daSmrg # I'm not sure if I'm treating the release correctly. I think 9150549e21daSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 9151549e21daSmrg # add it in twice. Is that correct? 9152fe4c343aSmrg release= 9153fe4c343aSmrg versuffix= 9154fe4c343aSmrg major= 9155549e21daSmrg newdeplibs= 9156549e21daSmrg droppeddeps=no 9157549e21daSmrg case $deplibs_check_method in 9158549e21daSmrg pass_all) 9159549e21daSmrg # Don't check for shared/static. Everything works. 9160549e21daSmrg # This might be a little naive. We might want to check 9161549e21daSmrg # whether the library exists or not. But this is on 9162549e21daSmrg # osf3 & osf4 and I'm not really sure... Just 9163549e21daSmrg # implementing what was already the behavior. 9164549e21daSmrg newdeplibs=$deplibs 9165549e21daSmrg ;; 9166549e21daSmrg test_compile) 9167549e21daSmrg # This code stresses the "libraries are programs" paradigm to its 9168549e21daSmrg # limits. Maybe even breaks it. We compile a program, linking it 9169549e21daSmrg # against the deplibs as a proxy for the library. Then we can check 9170549e21daSmrg # whether they linked in statically or dynamically with ldd. 9171549e21daSmrg $opt_dry_run || $RM conftest.c 9172549e21daSmrg cat > conftest.c <<EOF 9173549e21daSmrg int main() { return 0; } 9174549e21daSmrgEOF 9175549e21daSmrg $opt_dry_run || $RM conftest 9176549e21daSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9177549e21daSmrg ldd_output=`ldd conftest` 9178549e21daSmrg for i in $deplibs; do 9179549e21daSmrg case $i in 9180549e21daSmrg -l*) 9181549e21daSmrg func_stripname -l '' "$i" 9182549e21daSmrg name=$func_stripname_result 9183fe4c343aSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9184549e21daSmrg case " $predeps $postdeps " in 9185549e21daSmrg *" $i "*) 91861bedbe3fSmrg func_append newdeplibs " $i" 9187fe4c343aSmrg i= 9188549e21daSmrg ;; 9189549e21daSmrg esac 9190549e21daSmrg fi 9191fe4c343aSmrg if test -n "$i"; then 9192549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 9193549e21daSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9194549e21daSmrg set dummy $deplib_matches; shift 9195549e21daSmrg deplib_match=$1 9196fe4c343aSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 91971bedbe3fSmrg func_append newdeplibs " $i" 9198549e21daSmrg else 9199549e21daSmrg droppeddeps=yes 9200549e21daSmrg echo 9201549e21daSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9202549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 9203549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 9204549e21daSmrg echo "*** shared version of the library, which I believe you do not have" 9205549e21daSmrg echo "*** because a test_compile did reveal that the linker did not use it for" 9206549e21daSmrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 9207549e21daSmrg fi 9208549e21daSmrg fi 9209549e21daSmrg ;; 9210549e21daSmrg *) 92111bedbe3fSmrg func_append newdeplibs " $i" 9212549e21daSmrg ;; 9213549e21daSmrg esac 9214549e21daSmrg done 9215549e21daSmrg else 9216549e21daSmrg # Error occurred in the first compile. Let's try to salvage 9217549e21daSmrg # the situation: Compile a separate program for each library. 9218549e21daSmrg for i in $deplibs; do 9219549e21daSmrg case $i in 9220549e21daSmrg -l*) 9221549e21daSmrg func_stripname -l '' "$i" 9222549e21daSmrg name=$func_stripname_result 9223549e21daSmrg $opt_dry_run || $RM conftest 9224549e21daSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9225549e21daSmrg ldd_output=`ldd conftest` 9226fe4c343aSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9227549e21daSmrg case " $predeps $postdeps " in 9228549e21daSmrg *" $i "*) 92291bedbe3fSmrg func_append newdeplibs " $i" 9230fe4c343aSmrg i= 9231549e21daSmrg ;; 9232549e21daSmrg esac 9233549e21daSmrg fi 9234fe4c343aSmrg if test -n "$i"; then 9235549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 9236549e21daSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9237549e21daSmrg set dummy $deplib_matches; shift 9238549e21daSmrg deplib_match=$1 9239fe4c343aSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 92401bedbe3fSmrg func_append newdeplibs " $i" 9241549e21daSmrg else 9242549e21daSmrg droppeddeps=yes 9243549e21daSmrg echo 9244549e21daSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9245549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 9246549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 9247549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 9248549e21daSmrg echo "*** because a test_compile did reveal that the linker did not use this one" 9249549e21daSmrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9250549e21daSmrg fi 9251549e21daSmrg fi 9252549e21daSmrg else 9253549e21daSmrg droppeddeps=yes 9254549e21daSmrg echo 9255549e21daSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9256549e21daSmrg echo "*** make it link in! You will probably need to install it or some" 9257549e21daSmrg echo "*** library that it depends on before this library will be fully" 9258549e21daSmrg echo "*** functional. Installing it before continuing would be even better." 9259549e21daSmrg fi 9260549e21daSmrg ;; 9261549e21daSmrg *) 92621bedbe3fSmrg func_append newdeplibs " $i" 9263549e21daSmrg ;; 9264549e21daSmrg esac 9265549e21daSmrg done 9266549e21daSmrg fi 9267549e21daSmrg ;; 9268549e21daSmrg file_magic*) 9269549e21daSmrg set dummy $deplibs_check_method; shift 9270549e21daSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9271549e21daSmrg for a_deplib in $deplibs; do 9272549e21daSmrg case $a_deplib in 9273549e21daSmrg -l*) 9274549e21daSmrg func_stripname -l '' "$a_deplib" 9275549e21daSmrg name=$func_stripname_result 9276fe4c343aSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9277549e21daSmrg case " $predeps $postdeps " in 9278549e21daSmrg *" $a_deplib "*) 92791bedbe3fSmrg func_append newdeplibs " $a_deplib" 9280fe4c343aSmrg a_deplib= 9281549e21daSmrg ;; 9282549e21daSmrg esac 9283549e21daSmrg fi 9284fe4c343aSmrg if test -n "$a_deplib"; then 9285549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 92861bedbe3fSmrg if test -n "$file_magic_glob"; then 92871bedbe3fSmrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 92881bedbe3fSmrg else 92891bedbe3fSmrg libnameglob=$libname 92901bedbe3fSmrg fi 9291fe4c343aSmrg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9292549e21daSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9293fe4c343aSmrg if test yes = "$want_nocaseglob"; then 92941bedbe3fSmrg shopt -s nocaseglob 92951bedbe3fSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 92961bedbe3fSmrg $nocaseglob 92971bedbe3fSmrg else 92981bedbe3fSmrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 92991bedbe3fSmrg fi 9300549e21daSmrg for potent_lib in $potential_libs; do 9301549e21daSmrg # Follow soft links. 9302549e21daSmrg if ls -lLd "$potent_lib" 2>/dev/null | 9303549e21daSmrg $GREP " -> " >/dev/null; then 9304549e21daSmrg continue 9305549e21daSmrg fi 9306549e21daSmrg # The statement above tries to avoid entering an 9307549e21daSmrg # endless loop below, in case of cyclic links. 9308549e21daSmrg # We might still enter an endless loop, since a link 9309549e21daSmrg # loop can be closed while we follow links, 9310549e21daSmrg # but so what? 9311fe4c343aSmrg potlib=$potent_lib 9312549e21daSmrg while test -h "$potlib" 2>/dev/null; do 9313fe4c343aSmrg potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9314549e21daSmrg case $potliblink in 9315fe4c343aSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9316fe4c343aSmrg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9317549e21daSmrg esac 9318549e21daSmrg done 9319549e21daSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9320549e21daSmrg $SED -e 10q | 9321549e21daSmrg $EGREP "$file_magic_regex" > /dev/null; then 93221bedbe3fSmrg func_append newdeplibs " $a_deplib" 9323fe4c343aSmrg a_deplib= 9324549e21daSmrg break 2 9325549e21daSmrg fi 9326549e21daSmrg done 9327549e21daSmrg done 9328549e21daSmrg fi 9329fe4c343aSmrg if test -n "$a_deplib"; then 9330549e21daSmrg droppeddeps=yes 9331549e21daSmrg echo 9332549e21daSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9333549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 9334549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 9335549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 9336549e21daSmrg echo "*** because I did check the linker path looking for a file starting" 9337fe4c343aSmrg if test -z "$potlib"; then 9338549e21daSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9339549e21daSmrg else 9340549e21daSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9341549e21daSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 9342549e21daSmrg fi 9343549e21daSmrg fi 9344549e21daSmrg ;; 9345549e21daSmrg *) 9346549e21daSmrg # Add a -L argument. 93471bedbe3fSmrg func_append newdeplibs " $a_deplib" 9348549e21daSmrg ;; 9349549e21daSmrg esac 9350549e21daSmrg done # Gone through all deplibs. 9351549e21daSmrg ;; 9352549e21daSmrg match_pattern*) 9353549e21daSmrg set dummy $deplibs_check_method; shift 9354549e21daSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9355549e21daSmrg for a_deplib in $deplibs; do 9356549e21daSmrg case $a_deplib in 9357549e21daSmrg -l*) 9358549e21daSmrg func_stripname -l '' "$a_deplib" 9359549e21daSmrg name=$func_stripname_result 9360fe4c343aSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9361549e21daSmrg case " $predeps $postdeps " in 9362549e21daSmrg *" $a_deplib "*) 93631bedbe3fSmrg func_append newdeplibs " $a_deplib" 9364fe4c343aSmrg a_deplib= 9365549e21daSmrg ;; 9366549e21daSmrg esac 9367549e21daSmrg fi 9368fe4c343aSmrg if test -n "$a_deplib"; then 9369549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 9370549e21daSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9371549e21daSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9372549e21daSmrg for potent_lib in $potential_libs; do 9373fe4c343aSmrg potlib=$potent_lib # see symlink-check above in file_magic test 9374549e21daSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9375549e21daSmrg $EGREP "$match_pattern_regex" > /dev/null; then 93761bedbe3fSmrg func_append newdeplibs " $a_deplib" 9377fe4c343aSmrg a_deplib= 9378549e21daSmrg break 2 9379549e21daSmrg fi 9380549e21daSmrg done 9381549e21daSmrg done 9382549e21daSmrg fi 9383fe4c343aSmrg if test -n "$a_deplib"; then 9384549e21daSmrg droppeddeps=yes 9385549e21daSmrg echo 9386549e21daSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9387549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 9388549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 9389549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 9390549e21daSmrg echo "*** because I did check the linker path looking for a file starting" 9391fe4c343aSmrg if test -z "$potlib"; then 9392549e21daSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9393549e21daSmrg else 9394549e21daSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 9395549e21daSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 9396549e21daSmrg fi 9397549e21daSmrg fi 9398549e21daSmrg ;; 9399549e21daSmrg *) 9400549e21daSmrg # Add a -L argument. 94011bedbe3fSmrg func_append newdeplibs " $a_deplib" 9402549e21daSmrg ;; 9403549e21daSmrg esac 9404549e21daSmrg done # Gone through all deplibs. 9405549e21daSmrg ;; 9406549e21daSmrg none | unknown | *) 9407fe4c343aSmrg newdeplibs= 9408549e21daSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9409fe4c343aSmrg if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9410fe4c343aSmrg for i in $predeps $postdeps; do 9411549e21daSmrg # can't use Xsed below, because $i might contain '/' 9412fe4c343aSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9413549e21daSmrg done 9414549e21daSmrg fi 9415549e21daSmrg case $tmp_deplibs in 9416549e21daSmrg *[!\ \ ]*) 9417549e21daSmrg echo 9418fe4c343aSmrg if test none = "$deplibs_check_method"; then 9419549e21daSmrg echo "*** Warning: inter-library dependencies are not supported in this platform." 9420549e21daSmrg else 9421549e21daSmrg echo "*** Warning: inter-library dependencies are not known to be supported." 9422549e21daSmrg fi 9423549e21daSmrg echo "*** All declared inter-library dependencies are being dropped." 9424549e21daSmrg droppeddeps=yes 9425549e21daSmrg ;; 9426549e21daSmrg esac 9427549e21daSmrg ;; 9428549e21daSmrg esac 9429549e21daSmrg versuffix=$versuffix_save 9430549e21daSmrg major=$major_save 9431549e21daSmrg release=$release_save 9432549e21daSmrg libname=$libname_save 9433549e21daSmrg name=$name_save 9434549e21daSmrg 9435549e21daSmrg case $host in 9436549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 9437549e21daSmrg # On Rhapsody replace the C library with the System framework 9438549e21daSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9439549e21daSmrg ;; 9440549e21daSmrg esac 9441549e21daSmrg 9442fe4c343aSmrg if test yes = "$droppeddeps"; then 9443fe4c343aSmrg if test yes = "$module"; then 9444549e21daSmrg echo 9445549e21daSmrg echo "*** Warning: libtool could not satisfy all declared inter-library" 9446549e21daSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9447549e21daSmrg echo "*** a static module, that should work as long as the dlopening" 9448549e21daSmrg echo "*** application is linked with the -dlopen flag." 9449549e21daSmrg if test -z "$global_symbol_pipe"; then 9450549e21daSmrg echo 9451549e21daSmrg echo "*** However, this would only work if libtool was able to extract symbol" 9452fe4c343aSmrg echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9453549e21daSmrg echo "*** not find such a program. So, this module is probably useless." 9454fe4c343aSmrg echo "*** 'nm' from GNU binutils and a full rebuild may help." 9455549e21daSmrg fi 9456fe4c343aSmrg if test no = "$build_old_libs"; then 9457fe4c343aSmrg oldlibs=$output_objdir/$libname.$libext 9458549e21daSmrg build_libtool_libs=module 9459549e21daSmrg build_old_libs=yes 9460549e21daSmrg else 9461549e21daSmrg build_libtool_libs=no 9462549e21daSmrg fi 9463549e21daSmrg else 9464549e21daSmrg echo "*** The inter-library dependencies that have been dropped here will be" 9465549e21daSmrg echo "*** automatically added whenever a program is linked with this library" 9466549e21daSmrg echo "*** or is declared to -dlopen it." 9467549e21daSmrg 9468fe4c343aSmrg if test no = "$allow_undefined"; then 9469549e21daSmrg echo 9470549e21daSmrg echo "*** Since this library must not contain undefined symbols," 9471549e21daSmrg echo "*** because either the platform does not support them or" 9472549e21daSmrg echo "*** it was explicitly requested with -no-undefined," 9473549e21daSmrg echo "*** libtool will only create a static version of it." 9474fe4c343aSmrg if test no = "$build_old_libs"; then 9475fe4c343aSmrg oldlibs=$output_objdir/$libname.$libext 9476549e21daSmrg build_libtool_libs=module 9477549e21daSmrg build_old_libs=yes 9478549e21daSmrg else 9479549e21daSmrg build_libtool_libs=no 9480549e21daSmrg fi 9481549e21daSmrg fi 9482549e21daSmrg fi 9483549e21daSmrg fi 9484549e21daSmrg # Done checking deplibs! 9485549e21daSmrg deplibs=$newdeplibs 9486549e21daSmrg fi 9487549e21daSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9488549e21daSmrg case $host in 9489549e21daSmrg *-*-darwin*) 9490549e21daSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9491549e21daSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9492549e21daSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9493549e21daSmrg ;; 9494549e21daSmrg esac 9495549e21daSmrg 9496549e21daSmrg # move library search paths that coincide with paths to not yet 9497549e21daSmrg # installed libraries to the beginning of the library search list 9498549e21daSmrg new_libs= 9499549e21daSmrg for path in $notinst_path; do 9500549e21daSmrg case " $new_libs " in 9501549e21daSmrg *" -L$path/$objdir "*) ;; 9502549e21daSmrg *) 9503549e21daSmrg case " $deplibs " in 9504549e21daSmrg *" -L$path/$objdir "*) 95051bedbe3fSmrg func_append new_libs " -L$path/$objdir" ;; 9506549e21daSmrg esac 9507549e21daSmrg ;; 9508549e21daSmrg esac 9509549e21daSmrg done 9510549e21daSmrg for deplib in $deplibs; do 9511549e21daSmrg case $deplib in 9512549e21daSmrg -L*) 9513549e21daSmrg case " $new_libs " in 9514549e21daSmrg *" $deplib "*) ;; 95151bedbe3fSmrg *) func_append new_libs " $deplib" ;; 9516549e21daSmrg esac 9517549e21daSmrg ;; 95181bedbe3fSmrg *) func_append new_libs " $deplib" ;; 9519549e21daSmrg esac 9520549e21daSmrg done 9521fe4c343aSmrg deplibs=$new_libs 9522549e21daSmrg 9523549e21daSmrg # All the library-specific variables (install_libdir is set above). 9524549e21daSmrg library_names= 9525549e21daSmrg old_library= 9526549e21daSmrg dlname= 9527ba6a1819Smrg 9528549e21daSmrg # Test again, we may have decided not to build it any more 9529fe4c343aSmrg if test yes = "$build_libtool_libs"; then 9530fe4c343aSmrg # Remove $wl instances when linking with ld. 95311bedbe3fSmrg # FIXME: should test the right _cmds variable. 95321bedbe3fSmrg case $archive_cmds in 95331bedbe3fSmrg *\$LD\ *) wl= ;; 95341bedbe3fSmrg esac 9535fe4c343aSmrg if test yes = "$hardcode_into_libs"; then 9536549e21daSmrg # Hardcode the library paths 9537549e21daSmrg hardcode_libdirs= 9538549e21daSmrg dep_rpath= 9539fe4c343aSmrg rpath=$finalize_rpath 9540fe4c343aSmrg test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9541549e21daSmrg for libdir in $rpath; do 9542549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 9543549e21daSmrg if test -n "$hardcode_libdir_separator"; then 95441bedbe3fSmrg func_replace_sysroot "$libdir" 95451bedbe3fSmrg libdir=$func_replace_sysroot_result 9546549e21daSmrg if test -z "$hardcode_libdirs"; then 9547fe4c343aSmrg hardcode_libdirs=$libdir 9548549e21daSmrg else 9549549e21daSmrg # Just accumulate the unique libdirs. 9550549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9551549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9552549e21daSmrg ;; 9553549e21daSmrg *) 95541bedbe3fSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9555549e21daSmrg ;; 9556549e21daSmrg esac 9557549e21daSmrg fi 9558549e21daSmrg else 9559549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 95601bedbe3fSmrg func_append dep_rpath " $flag" 9561549e21daSmrg fi 9562549e21daSmrg elif test -n "$runpath_var"; then 9563549e21daSmrg case "$perm_rpath " in 9564549e21daSmrg *" $libdir "*) ;; 95651bedbe3fSmrg *) func_append perm_rpath " $libdir" ;; 9566549e21daSmrg esac 9567549e21daSmrg fi 9568549e21daSmrg done 9569549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 9570549e21daSmrg if test -n "$hardcode_libdir_separator" && 9571549e21daSmrg test -n "$hardcode_libdirs"; then 9572fe4c343aSmrg libdir=$hardcode_libdirs 95731bedbe3fSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9574549e21daSmrg fi 9575549e21daSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 9576549e21daSmrg # We should set the runpath_var. 9577549e21daSmrg rpath= 9578549e21daSmrg for dir in $perm_rpath; do 95791bedbe3fSmrg func_append rpath "$dir:" 9580549e21daSmrg done 9581549e21daSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9582549e21daSmrg fi 9583549e21daSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9584549e21daSmrg fi 9585ba6a1819Smrg 9586fe4c343aSmrg shlibpath=$finalize_shlibpath 9587fe4c343aSmrg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9588549e21daSmrg if test -n "$shlibpath"; then 9589549e21daSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9590549e21daSmrg fi 9591ba6a1819Smrg 9592549e21daSmrg # Get the real and link names of the library. 9593549e21daSmrg eval shared_ext=\"$shrext_cmds\" 9594549e21daSmrg eval library_names=\"$library_names_spec\" 9595549e21daSmrg set dummy $library_names 9596549e21daSmrg shift 9597fe4c343aSmrg realname=$1 9598549e21daSmrg shift 9599ba6a1819Smrg 9600549e21daSmrg if test -n "$soname_spec"; then 9601549e21daSmrg eval soname=\"$soname_spec\" 9602549e21daSmrg else 9603fe4c343aSmrg soname=$realname 9604549e21daSmrg fi 9605549e21daSmrg if test -z "$dlname"; then 9606549e21daSmrg dlname=$soname 9607549e21daSmrg fi 9608ba6a1819Smrg 9609fe4c343aSmrg lib=$output_objdir/$realname 9610549e21daSmrg linknames= 9611549e21daSmrg for link 9612549e21daSmrg do 96131bedbe3fSmrg func_append linknames " $link" 9614549e21daSmrg done 9615ba6a1819Smrg 9616549e21daSmrg # Use standard objects if they are pic 9617549e21daSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9618549e21daSmrg test "X$libobjs" = "X " && libobjs= 9619ba6a1819Smrg 9620549e21daSmrg delfiles= 9621549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9622549e21daSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9623fe4c343aSmrg export_symbols=$output_objdir/$libname.uexp 96241bedbe3fSmrg func_append delfiles " $export_symbols" 9625549e21daSmrg fi 9626ba6a1819Smrg 9627549e21daSmrg orig_export_symbols= 9628549e21daSmrg case $host_os in 9629549e21daSmrg cygwin* | mingw* | cegcc*) 9630549e21daSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9631549e21daSmrg # exporting using user supplied symfile 9632fe4c343aSmrg func_dll_def_p "$export_symbols" || { 9633549e21daSmrg # and it's NOT already a .def file. Must figure out 9634549e21daSmrg # which of the given symbols are data symbols and tag 9635549e21daSmrg # them as such. So, trigger use of export_symbols_cmds. 9636549e21daSmrg # export_symbols gets reassigned inside the "prepare 9637549e21daSmrg # the list of exported symbols" if statement, so the 9638549e21daSmrg # include_expsyms logic still works. 9639fe4c343aSmrg orig_export_symbols=$export_symbols 9640549e21daSmrg export_symbols= 9641549e21daSmrg always_export_symbols=yes 9642fe4c343aSmrg } 9643549e21daSmrg fi 9644549e21daSmrg ;; 9645549e21daSmrg esac 9646ba6a1819Smrg 9647549e21daSmrg # Prepare the list of exported symbols 9648549e21daSmrg if test -z "$export_symbols"; then 9649fe4c343aSmrg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9650fe4c343aSmrg func_verbose "generating symbol list for '$libname.la'" 9651fe4c343aSmrg export_symbols=$output_objdir/$libname.exp 9652549e21daSmrg $opt_dry_run || $RM $export_symbols 9653549e21daSmrg cmds=$export_symbols_cmds 9654fe4c343aSmrg save_ifs=$IFS; IFS='~' 96551bedbe3fSmrg for cmd1 in $cmds; do 9656fe4c343aSmrg IFS=$save_ifs 96571bedbe3fSmrg # Take the normal branch if the nm_file_list_spec branch 96581bedbe3fSmrg # doesn't work or if tool conversion is not needed. 96591bedbe3fSmrg case $nm_file_list_spec~$to_tool_file_cmd in 96601bedbe3fSmrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 96611bedbe3fSmrg try_normal_branch=yes 96621bedbe3fSmrg eval cmd=\"$cmd1\" 96631bedbe3fSmrg func_len " $cmd" 96641bedbe3fSmrg len=$func_len_result 96651bedbe3fSmrg ;; 96661bedbe3fSmrg *) 96671bedbe3fSmrg try_normal_branch=no 96681bedbe3fSmrg ;; 96691bedbe3fSmrg esac 9670fe4c343aSmrg if test yes = "$try_normal_branch" \ 96711bedbe3fSmrg && { test "$len" -lt "$max_cmd_len" \ 96721bedbe3fSmrg || test "$max_cmd_len" -le -1; } 96731bedbe3fSmrg then 96741bedbe3fSmrg func_show_eval "$cmd" 'exit $?' 96751bedbe3fSmrg skipped_export=false 96761bedbe3fSmrg elif test -n "$nm_file_list_spec"; then 96771bedbe3fSmrg func_basename "$output" 96781bedbe3fSmrg output_la=$func_basename_result 96791bedbe3fSmrg save_libobjs=$libobjs 96801bedbe3fSmrg save_output=$output 9681fe4c343aSmrg output=$output_objdir/$output_la.nm 96821bedbe3fSmrg func_to_tool_file "$output" 96831bedbe3fSmrg libobjs=$nm_file_list_spec$func_to_tool_file_result 96841bedbe3fSmrg func_append delfiles " $output" 96851bedbe3fSmrg func_verbose "creating $NM input file list: $output" 96861bedbe3fSmrg for obj in $save_libobjs; do 96871bedbe3fSmrg func_to_tool_file "$obj" 96881bedbe3fSmrg $ECHO "$func_to_tool_file_result" 96891bedbe3fSmrg done > "$output" 96901bedbe3fSmrg eval cmd=\"$cmd1\" 9691549e21daSmrg func_show_eval "$cmd" 'exit $?' 96921bedbe3fSmrg output=$save_output 96931bedbe3fSmrg libobjs=$save_libobjs 9694549e21daSmrg skipped_export=false 9695549e21daSmrg else 9696549e21daSmrg # The command line is too long to execute in one step. 9697549e21daSmrg func_verbose "using reloadable object file for export list..." 9698549e21daSmrg skipped_export=: 9699549e21daSmrg # Break out early, otherwise skipped_export may be 9700549e21daSmrg # set to false by a later but shorter cmd. 9701549e21daSmrg break 9702549e21daSmrg fi 9703549e21daSmrg done 9704fe4c343aSmrg IFS=$save_ifs 9705fe4c343aSmrg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9706549e21daSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9707549e21daSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9708549e21daSmrg fi 9709549e21daSmrg fi 9710549e21daSmrg fi 9711ba6a1819Smrg 9712549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9713fe4c343aSmrg tmp_export_symbols=$export_symbols 9714fe4c343aSmrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9715549e21daSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9716549e21daSmrg fi 9717ba6a1819Smrg 9718fe4c343aSmrg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9719549e21daSmrg # The given exports_symbols file has to be filtered, so filter it. 9720fe4c343aSmrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9721549e21daSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 9722fe4c343aSmrg # 's' commands, which not all seds can handle. GNU sed should be fine 9723549e21daSmrg # though. Also, the filter scales superlinearly with the number of 9724549e21daSmrg # global variables. join(1) would be nice here, but unfortunately 9725549e21daSmrg # isn't a blessed tool. 9726549e21daSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 97271bedbe3fSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9728549e21daSmrg export_symbols=$output_objdir/$libname.def 9729549e21daSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9730ba6a1819Smrg fi 9731ba6a1819Smrg 9732549e21daSmrg tmp_deplibs= 9733549e21daSmrg for test_deplib in $deplibs; do 9734549e21daSmrg case " $convenience " in 9735549e21daSmrg *" $test_deplib "*) ;; 9736549e21daSmrg *) 97371bedbe3fSmrg func_append tmp_deplibs " $test_deplib" 9738549e21daSmrg ;; 9739549e21daSmrg esac 9740549e21daSmrg done 9741fe4c343aSmrg deplibs=$tmp_deplibs 9742ba6a1819Smrg 9743549e21daSmrg if test -n "$convenience"; then 9744549e21daSmrg if test -n "$whole_archive_flag_spec" && 9745fe4c343aSmrg test yes = "$compiler_needs_object" && 9746549e21daSmrg test -z "$libobjs"; then 9747549e21daSmrg # extract the archives, so we have objects to list. 9748549e21daSmrg # TODO: could optimize this to just extract one archive. 9749549e21daSmrg whole_archive_flag_spec= 9750549e21daSmrg fi 9751549e21daSmrg if test -n "$whole_archive_flag_spec"; then 9752549e21daSmrg save_libobjs=$libobjs 9753549e21daSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9754549e21daSmrg test "X$libobjs" = "X " && libobjs= 9755549e21daSmrg else 9756fe4c343aSmrg gentop=$output_objdir/${outputname}x 97571bedbe3fSmrg func_append generated " $gentop" 9758ba6a1819Smrg 9759549e21daSmrg func_extract_archives $gentop $convenience 97601bedbe3fSmrg func_append libobjs " $func_extract_archives_result" 9761549e21daSmrg test "X$libobjs" = "X " && libobjs= 9762549e21daSmrg fi 9763549e21daSmrg fi 9764ba6a1819Smrg 9765fe4c343aSmrg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9766549e21daSmrg eval flag=\"$thread_safe_flag_spec\" 97671bedbe3fSmrg func_append linker_flags " $flag" 9768549e21daSmrg fi 9769ba6a1819Smrg 9770549e21daSmrg # Make a backup of the uninstalled library when relinking 9771fe4c343aSmrg if test relink = "$opt_mode"; then 9772549e21daSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9773ba6a1819Smrg fi 9774ba6a1819Smrg 9775549e21daSmrg # Do each of the archive commands. 9776fe4c343aSmrg if test yes = "$module" && test -n "$module_cmds"; then 9777549e21daSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9778549e21daSmrg eval test_cmds=\"$module_expsym_cmds\" 9779549e21daSmrg cmds=$module_expsym_cmds 9780549e21daSmrg else 9781549e21daSmrg eval test_cmds=\"$module_cmds\" 9782549e21daSmrg cmds=$module_cmds 9783549e21daSmrg fi 9784549e21daSmrg else 9785549e21daSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 9786549e21daSmrg eval test_cmds=\"$archive_expsym_cmds\" 9787549e21daSmrg cmds=$archive_expsym_cmds 9788549e21daSmrg else 9789549e21daSmrg eval test_cmds=\"$archive_cmds\" 9790549e21daSmrg cmds=$archive_cmds 9791549e21daSmrg fi 9792ba6a1819Smrg fi 9793ba6a1819Smrg 9794fe4c343aSmrg if test : != "$skipped_export" && 9795549e21daSmrg func_len " $test_cmds" && 9796549e21daSmrg len=$func_len_result && 9797549e21daSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9798549e21daSmrg : 9799549e21daSmrg else 9800549e21daSmrg # The command line is too long to link in one step, link piecewise 9801549e21daSmrg # or, if using GNU ld and skipped_export is not :, use a linker 9802549e21daSmrg # script. 9803ba6a1819Smrg 9804549e21daSmrg # Save the value of $output and $libobjs because we want to 9805549e21daSmrg # use them later. If we have whole_archive_flag_spec, we 9806549e21daSmrg # want to use save_libobjs as it was before 9807549e21daSmrg # whole_archive_flag_spec was expanded, because we can't 9808549e21daSmrg # assume the linker understands whole_archive_flag_spec. 9809549e21daSmrg # This may have to be revisited, in case too many 9810549e21daSmrg # convenience libraries get linked in and end up exceeding 9811549e21daSmrg # the spec. 9812549e21daSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 9813549e21daSmrg save_libobjs=$libobjs 9814549e21daSmrg fi 9815549e21daSmrg save_output=$output 9816549e21daSmrg func_basename "$output" 9817549e21daSmrg output_la=$func_basename_result 9818ba6a1819Smrg 9819549e21daSmrg # Clear the reloadable object creation command queue and 9820549e21daSmrg # initialize k to one. 9821549e21daSmrg test_cmds= 9822549e21daSmrg concat_cmds= 9823549e21daSmrg objlist= 9824549e21daSmrg last_robj= 9825549e21daSmrg k=1 9826549e21daSmrg 9827fe4c343aSmrg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 9828fe4c343aSmrg output=$output_objdir/$output_la.lnkscript 9829549e21daSmrg func_verbose "creating GNU ld script: $output" 9830549e21daSmrg echo 'INPUT (' > $output 9831549e21daSmrg for obj in $save_libobjs 9832549e21daSmrg do 98331bedbe3fSmrg func_to_tool_file "$obj" 98341bedbe3fSmrg $ECHO "$func_to_tool_file_result" >> $output 9835549e21daSmrg done 9836549e21daSmrg echo ')' >> $output 98371bedbe3fSmrg func_append delfiles " $output" 98381bedbe3fSmrg func_to_tool_file "$output" 98391bedbe3fSmrg output=$func_to_tool_file_result 9840fe4c343aSmrg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 9841fe4c343aSmrg output=$output_objdir/$output_la.lnk 9842549e21daSmrg func_verbose "creating linker input file list: $output" 9843549e21daSmrg : > $output 9844549e21daSmrg set x $save_libobjs 9845549e21daSmrg shift 9846549e21daSmrg firstobj= 9847fe4c343aSmrg if test yes = "$compiler_needs_object"; then 9848549e21daSmrg firstobj="$1 " 9849549e21daSmrg shift 9850549e21daSmrg fi 9851549e21daSmrg for obj 9852549e21daSmrg do 98531bedbe3fSmrg func_to_tool_file "$obj" 98541bedbe3fSmrg $ECHO "$func_to_tool_file_result" >> $output 9855549e21daSmrg done 98561bedbe3fSmrg func_append delfiles " $output" 98571bedbe3fSmrg func_to_tool_file "$output" 98581bedbe3fSmrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 9859549e21daSmrg else 9860549e21daSmrg if test -n "$save_libobjs"; then 9861549e21daSmrg func_verbose "creating reloadable object files..." 9862fe4c343aSmrg output=$output_objdir/$output_la-$k.$objext 9863549e21daSmrg eval test_cmds=\"$reload_cmds\" 9864549e21daSmrg func_len " $test_cmds" 9865549e21daSmrg len0=$func_len_result 9866549e21daSmrg len=$len0 9867549e21daSmrg 9868549e21daSmrg # Loop over the list of objects to be linked. 9869549e21daSmrg for obj in $save_libobjs 9870549e21daSmrg do 9871549e21daSmrg func_len " $obj" 9872549e21daSmrg func_arith $len + $func_len_result 9873549e21daSmrg len=$func_arith_result 9874fe4c343aSmrg if test -z "$objlist" || 9875549e21daSmrg test "$len" -lt "$max_cmd_len"; then 9876549e21daSmrg func_append objlist " $obj" 9877549e21daSmrg else 9878549e21daSmrg # The command $test_cmds is almost too long, add a 9879549e21daSmrg # command to the queue. 9880fe4c343aSmrg if test 1 -eq "$k"; then 9881549e21daSmrg # The first file doesn't have a previous command to add. 9882549e21daSmrg reload_objs=$objlist 9883549e21daSmrg eval concat_cmds=\"$reload_cmds\" 9884549e21daSmrg else 9885549e21daSmrg # All subsequent reloadable object files will link in 9886549e21daSmrg # the last one created. 9887549e21daSmrg reload_objs="$objlist $last_robj" 9888549e21daSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 9889549e21daSmrg fi 9890fe4c343aSmrg last_robj=$output_objdir/$output_la-$k.$objext 9891549e21daSmrg func_arith $k + 1 9892549e21daSmrg k=$func_arith_result 9893fe4c343aSmrg output=$output_objdir/$output_la-$k.$objext 9894549e21daSmrg objlist=" $obj" 9895549e21daSmrg func_len " $last_robj" 9896549e21daSmrg func_arith $len0 + $func_len_result 9897549e21daSmrg len=$func_arith_result 9898549e21daSmrg fi 9899549e21daSmrg done 9900549e21daSmrg # Handle the remaining objects by creating one last 9901549e21daSmrg # reloadable object file. All subsequent reloadable object 9902549e21daSmrg # files will link in the last one created. 9903549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9904549e21daSmrg reload_objs="$objlist $last_robj" 9905fe4c343aSmrg eval concat_cmds=\"\$concat_cmds$reload_cmds\" 9906549e21daSmrg if test -n "$last_robj"; then 9907fe4c343aSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9908549e21daSmrg fi 99091bedbe3fSmrg func_append delfiles " $output" 9910ba6a1819Smrg 9911549e21daSmrg else 9912549e21daSmrg output= 9913549e21daSmrg fi 9914ba6a1819Smrg 9915fe4c343aSmrg ${skipped_export-false} && { 9916fe4c343aSmrg func_verbose "generating symbol list for '$libname.la'" 9917fe4c343aSmrg export_symbols=$output_objdir/$libname.exp 9918549e21daSmrg $opt_dry_run || $RM $export_symbols 9919549e21daSmrg libobjs=$output 9920549e21daSmrg # Append the command to create the export file. 9921549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9922549e21daSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 9923549e21daSmrg if test -n "$last_robj"; then 9924549e21daSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9925549e21daSmrg fi 9926fe4c343aSmrg } 9927ba6a1819Smrg 9928549e21daSmrg test -n "$save_libobjs" && 9929549e21daSmrg func_verbose "creating a temporary reloadable object file: $output" 9930ba6a1819Smrg 9931549e21daSmrg # Loop through the commands generated above and execute them. 9932fe4c343aSmrg save_ifs=$IFS; IFS='~' 9933549e21daSmrg for cmd in $concat_cmds; do 9934fe4c343aSmrg IFS=$save_ifs 9935fe4c343aSmrg $opt_quiet || { 9936549e21daSmrg func_quote_for_expand "$cmd" 9937549e21daSmrg eval "func_echo $func_quote_for_expand_result" 9938549e21daSmrg } 9939549e21daSmrg $opt_dry_run || eval "$cmd" || { 9940549e21daSmrg lt_exit=$? 9941549e21daSmrg 9942549e21daSmrg # Restore the uninstalled library and exit 9943fe4c343aSmrg if test relink = "$opt_mode"; then 9944549e21daSmrg ( cd "$output_objdir" && \ 9945549e21daSmrg $RM "${realname}T" && \ 9946549e21daSmrg $MV "${realname}U" "$realname" ) 9947549e21daSmrg fi 9948ba6a1819Smrg 9949549e21daSmrg exit $lt_exit 9950549e21daSmrg } 9951549e21daSmrg done 9952fe4c343aSmrg IFS=$save_ifs 9953ba6a1819Smrg 9954549e21daSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 9955549e21daSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9956549e21daSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9957ba6a1819Smrg fi 9958ba6a1819Smrg fi 9959ba6a1819Smrg 9960fe4c343aSmrg ${skipped_export-false} && { 9961549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 9962fe4c343aSmrg tmp_export_symbols=$export_symbols 9963fe4c343aSmrg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9964549e21daSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9965549e21daSmrg fi 9966ba6a1819Smrg 9967549e21daSmrg if test -n "$orig_export_symbols"; then 9968549e21daSmrg # The given exports_symbols file has to be filtered, so filter it. 9969fe4c343aSmrg func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9970549e21daSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 9971fe4c343aSmrg # 's' commands, which not all seds can handle. GNU sed should be fine 9972549e21daSmrg # though. Also, the filter scales superlinearly with the number of 9973549e21daSmrg # global variables. join(1) would be nice here, but unfortunately 9974549e21daSmrg # isn't a blessed tool. 9975549e21daSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 99761bedbe3fSmrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9977549e21daSmrg export_symbols=$output_objdir/$libname.def 9978549e21daSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9979549e21daSmrg fi 9980fe4c343aSmrg } 9981ba6a1819Smrg 9982549e21daSmrg libobjs=$output 9983549e21daSmrg # Restore the value of output. 9984549e21daSmrg output=$save_output 9985ba6a1819Smrg 9986549e21daSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 9987549e21daSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9988549e21daSmrg test "X$libobjs" = "X " && libobjs= 9989549e21daSmrg fi 9990549e21daSmrg # Expand the library linking commands again to reset the 9991549e21daSmrg # value of $libobjs for piecewise linking. 9992549e21daSmrg 9993549e21daSmrg # Do each of the archive commands. 9994fe4c343aSmrg if test yes = "$module" && test -n "$module_cmds"; then 9995549e21daSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9996549e21daSmrg cmds=$module_expsym_cmds 9997ba6a1819Smrg else 9998549e21daSmrg cmds=$module_cmds 9999ba6a1819Smrg fi 10000ba6a1819Smrg else 10001549e21daSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10002549e21daSmrg cmds=$archive_expsym_cmds 10003549e21daSmrg else 10004549e21daSmrg cmds=$archive_cmds 10005549e21daSmrg fi 10006ba6a1819Smrg fi 10007ba6a1819Smrg fi 10008ba6a1819Smrg 10009549e21daSmrg if test -n "$delfiles"; then 10010549e21daSmrg # Append the command to remove temporary files to $cmds. 10011549e21daSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 10012549e21daSmrg fi 10013ba6a1819Smrg 10014549e21daSmrg # Add any objects from preloaded convenience libraries 10015549e21daSmrg if test -n "$dlprefiles"; then 10016fe4c343aSmrg gentop=$output_objdir/${outputname}x 100171bedbe3fSmrg func_append generated " $gentop" 10018ba6a1819Smrg 10019549e21daSmrg func_extract_archives $gentop $dlprefiles 100201bedbe3fSmrg func_append libobjs " $func_extract_archives_result" 10021549e21daSmrg test "X$libobjs" = "X " && libobjs= 10022ba6a1819Smrg fi 10023ba6a1819Smrg 10024fe4c343aSmrg save_ifs=$IFS; IFS='~' 10025549e21daSmrg for cmd in $cmds; do 10026fe4c343aSmrg IFS=$sp$nl 10027549e21daSmrg eval cmd=\"$cmd\" 10028fe4c343aSmrg IFS=$save_ifs 10029fe4c343aSmrg $opt_quiet || { 10030549e21daSmrg func_quote_for_expand "$cmd" 10031549e21daSmrg eval "func_echo $func_quote_for_expand_result" 10032549e21daSmrg } 10033549e21daSmrg $opt_dry_run || eval "$cmd" || { 10034549e21daSmrg lt_exit=$? 10035ba6a1819Smrg 10036549e21daSmrg # Restore the uninstalled library and exit 10037fe4c343aSmrg if test relink = "$opt_mode"; then 10038549e21daSmrg ( cd "$output_objdir" && \ 10039549e21daSmrg $RM "${realname}T" && \ 10040549e21daSmrg $MV "${realname}U" "$realname" ) 10041ba6a1819Smrg fi 10042ba6a1819Smrg 10043549e21daSmrg exit $lt_exit 10044549e21daSmrg } 10045549e21daSmrg done 10046fe4c343aSmrg IFS=$save_ifs 10047ba6a1819Smrg 10048549e21daSmrg # Restore the uninstalled library and exit 10049fe4c343aSmrg if test relink = "$opt_mode"; then 10050549e21daSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10051ba6a1819Smrg 10052549e21daSmrg if test -n "$convenience"; then 10053549e21daSmrg if test -z "$whole_archive_flag_spec"; then 10054549e21daSmrg func_show_eval '${RM}r "$gentop"' 10055549e21daSmrg fi 10056549e21daSmrg fi 10057ba6a1819Smrg 10058549e21daSmrg exit $EXIT_SUCCESS 10059549e21daSmrg fi 10060ba6a1819Smrg 10061549e21daSmrg # Create links to the real library. 10062549e21daSmrg for linkname in $linknames; do 10063549e21daSmrg if test "$realname" != "$linkname"; then 10064549e21daSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10065ba6a1819Smrg fi 10066ba6a1819Smrg done 10067549e21daSmrg 10068549e21daSmrg # If -module or -export-dynamic was specified, set the dlname. 10069fe4c343aSmrg if test yes = "$module" || test yes = "$export_dynamic"; then 10070549e21daSmrg # On all known operating systems, these are identical. 10071fe4c343aSmrg dlname=$soname 10072549e21daSmrg fi 10073ba6a1819Smrg fi 10074ba6a1819Smrg ;; 10075ba6a1819Smrg 10076549e21daSmrg obj) 10077fe4c343aSmrg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10078fe4c343aSmrg func_warning "'-dlopen' is ignored for objects" 10079549e21daSmrg fi 10080ba6a1819Smrg 10081549e21daSmrg case " $deplibs" in 10082549e21daSmrg *\ -l* | *\ -L*) 10083fe4c343aSmrg func_warning "'-l' and '-L' are ignored for objects" ;; 10084ba6a1819Smrg esac 10085ba6a1819Smrg 10086549e21daSmrg test -n "$rpath" && \ 10087fe4c343aSmrg func_warning "'-rpath' is ignored for objects" 10088ba6a1819Smrg 10089549e21daSmrg test -n "$xrpath" && \ 10090fe4c343aSmrg func_warning "'-R' is ignored for objects" 10091ba6a1819Smrg 10092549e21daSmrg test -n "$vinfo" && \ 10093fe4c343aSmrg func_warning "'-version-info' is ignored for objects" 10094549e21daSmrg 10095549e21daSmrg test -n "$release" && \ 10096fe4c343aSmrg func_warning "'-release' is ignored for objects" 10097549e21daSmrg 10098549e21daSmrg case $output in 10099549e21daSmrg *.lo) 10100549e21daSmrg test -n "$objs$old_deplibs" && \ 10101fe4c343aSmrg func_fatal_error "cannot build library object '$output' from non-libtool objects" 10102549e21daSmrg 10103549e21daSmrg libobj=$output 10104549e21daSmrg func_lo2o "$libobj" 10105549e21daSmrg obj=$func_lo2o_result 10106ba6a1819Smrg ;; 10107ba6a1819Smrg *) 10108549e21daSmrg libobj= 10109fe4c343aSmrg obj=$output 10110ba6a1819Smrg ;; 10111ba6a1819Smrg esac 10112ba6a1819Smrg 10113549e21daSmrg # Delete the old objects. 10114549e21daSmrg $opt_dry_run || $RM $obj $libobj 10115ba6a1819Smrg 10116549e21daSmrg # Objects from convenience libraries. This assumes 10117549e21daSmrg # single-version convenience libraries. Whenever we create 10118549e21daSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 10119549e21daSmrg # the extraction. 10120549e21daSmrg reload_conv_objs= 10121549e21daSmrg gentop= 10122fe4c343aSmrg # if reload_cmds runs $LD directly, get rid of -Wl from 10123fe4c343aSmrg # whole_archive_flag_spec and hope we can get by with turning comma 10124fe4c343aSmrg # into space. 10125fe4c343aSmrg case $reload_cmds in 10126fe4c343aSmrg *\$LD[\ \$]*) wl= ;; 10127fe4c343aSmrg esac 10128549e21daSmrg if test -n "$convenience"; then 10129549e21daSmrg if test -n "$whole_archive_flag_spec"; then 10130549e21daSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10131fe4c343aSmrg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10132fe4c343aSmrg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10133549e21daSmrg else 10134fe4c343aSmrg gentop=$output_objdir/${obj}x 101351bedbe3fSmrg func_append generated " $gentop" 10136ba6a1819Smrg 10137549e21daSmrg func_extract_archives $gentop $convenience 10138549e21daSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 10139549e21daSmrg fi 10140ba6a1819Smrg fi 10141ba6a1819Smrg 101421bedbe3fSmrg # If we're not building shared, we need to use non_pic_objs 10143fe4c343aSmrg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 101441bedbe3fSmrg 10145549e21daSmrg # Create the old-style object. 10146fe4c343aSmrg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10147ba6a1819Smrg 10148fe4c343aSmrg output=$obj 10149549e21daSmrg func_execute_cmds "$reload_cmds" 'exit $?' 10150ba6a1819Smrg 10151549e21daSmrg # Exit if we aren't doing a library object file. 10152549e21daSmrg if test -z "$libobj"; then 10153549e21daSmrg if test -n "$gentop"; then 10154549e21daSmrg func_show_eval '${RM}r "$gentop"' 10155549e21daSmrg fi 10156549e21daSmrg 10157549e21daSmrg exit $EXIT_SUCCESS 10158ba6a1819Smrg fi 10159549e21daSmrg 10160fe4c343aSmrg test yes = "$build_libtool_libs" || { 10161549e21daSmrg if test -n "$gentop"; then 10162549e21daSmrg func_show_eval '${RM}r "$gentop"' 10163549e21daSmrg fi 10164549e21daSmrg 10165549e21daSmrg # Create an invalid libtool object if no PIC, so that we don't 10166549e21daSmrg # accidentally link it into a program. 10167549e21daSmrg # $show "echo timestamp > $libobj" 10168549e21daSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10169549e21daSmrg exit $EXIT_SUCCESS 10170fe4c343aSmrg } 10171549e21daSmrg 10172fe4c343aSmrg if test -n "$pic_flag" || test default != "$pic_mode"; then 10173549e21daSmrg # Only do commands if we really have different PIC objects. 10174549e21daSmrg reload_objs="$libobjs $reload_conv_objs" 10175fe4c343aSmrg output=$libobj 10176549e21daSmrg func_execute_cmds "$reload_cmds" 'exit $?' 10177549e21daSmrg fi 10178549e21daSmrg 10179549e21daSmrg if test -n "$gentop"; then 10180549e21daSmrg func_show_eval '${RM}r "$gentop"' 10181549e21daSmrg fi 10182549e21daSmrg 10183549e21daSmrg exit $EXIT_SUCCESS 10184ba6a1819Smrg ;; 10185ba6a1819Smrg 10186549e21daSmrg prog) 10187549e21daSmrg case $host in 10188549e21daSmrg *cygwin*) func_stripname '' '.exe' "$output" 10189549e21daSmrg output=$func_stripname_result.exe;; 10190549e21daSmrg esac 10191549e21daSmrg test -n "$vinfo" && \ 10192fe4c343aSmrg func_warning "'-version-info' is ignored for programs" 10193ba6a1819Smrg 10194549e21daSmrg test -n "$release" && \ 10195fe4c343aSmrg func_warning "'-release' is ignored for programs" 10196ba6a1819Smrg 10197fe4c343aSmrg $preload \ 10198fe4c343aSmrg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10199fe4c343aSmrg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10200549e21daSmrg 10201549e21daSmrg case $host in 10202549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 10203549e21daSmrg # On Rhapsody replace the C library is the System framework 10204549e21daSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10205549e21daSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10206ba6a1819Smrg ;; 10207549e21daSmrg esac 10208ba6a1819Smrg 10209549e21daSmrg case $host in 10210549e21daSmrg *-*-darwin*) 10211549e21daSmrg # Don't allow lazy linking, it breaks C++ global constructors 10212549e21daSmrg # But is supposedly fixed on 10.4 or later (yay!). 10213fe4c343aSmrg if test CXX = "$tagname"; then 10214549e21daSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10215549e21daSmrg 10.[0123]) 10216fe4c343aSmrg func_append compile_command " $wl-bind_at_load" 10217fe4c343aSmrg func_append finalize_command " $wl-bind_at_load" 10218549e21daSmrg ;; 10219549e21daSmrg esac 10220ba6a1819Smrg fi 10221549e21daSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10222549e21daSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10223549e21daSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10224549e21daSmrg ;; 10225549e21daSmrg esac 10226ba6a1819Smrg 10227ba6a1819Smrg 10228549e21daSmrg # move library search paths that coincide with paths to not yet 10229549e21daSmrg # installed libraries to the beginning of the library search list 10230549e21daSmrg new_libs= 10231549e21daSmrg for path in $notinst_path; do 10232549e21daSmrg case " $new_libs " in 10233549e21daSmrg *" -L$path/$objdir "*) ;; 10234549e21daSmrg *) 10235549e21daSmrg case " $compile_deplibs " in 10236549e21daSmrg *" -L$path/$objdir "*) 102371bedbe3fSmrg func_append new_libs " -L$path/$objdir" ;; 10238ba6a1819Smrg esac 10239549e21daSmrg ;; 10240549e21daSmrg esac 10241549e21daSmrg done 10242549e21daSmrg for deplib in $compile_deplibs; do 10243549e21daSmrg case $deplib in 10244549e21daSmrg -L*) 10245549e21daSmrg case " $new_libs " in 10246549e21daSmrg *" $deplib "*) ;; 102471bedbe3fSmrg *) func_append new_libs " $deplib" ;; 10248ba6a1819Smrg esac 10249549e21daSmrg ;; 102501bedbe3fSmrg *) func_append new_libs " $deplib" ;; 10251549e21daSmrg esac 10252549e21daSmrg done 10253fe4c343aSmrg compile_deplibs=$new_libs 10254ba6a1819Smrg 10255ba6a1819Smrg 102561bedbe3fSmrg func_append compile_command " $compile_deplibs" 102571bedbe3fSmrg func_append finalize_command " $finalize_deplibs" 10258ba6a1819Smrg 10259549e21daSmrg if test -n "$rpath$xrpath"; then 10260549e21daSmrg # If the user specified any rpath flags, then add them. 10261549e21daSmrg for libdir in $rpath $xrpath; do 10262549e21daSmrg # This is the magic to use -rpath. 10263549e21daSmrg case "$finalize_rpath " in 10264549e21daSmrg *" $libdir "*) ;; 102651bedbe3fSmrg *) func_append finalize_rpath " $libdir" ;; 10266549e21daSmrg esac 10267549e21daSmrg done 10268549e21daSmrg fi 10269ba6a1819Smrg 10270549e21daSmrg # Now hardcode the library paths 10271549e21daSmrg rpath= 10272549e21daSmrg hardcode_libdirs= 10273549e21daSmrg for libdir in $compile_rpath $finalize_rpath; do 10274549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 10275549e21daSmrg if test -n "$hardcode_libdir_separator"; then 10276549e21daSmrg if test -z "$hardcode_libdirs"; then 10277fe4c343aSmrg hardcode_libdirs=$libdir 10278549e21daSmrg else 10279549e21daSmrg # Just accumulate the unique libdirs. 10280549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10281549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10282549e21daSmrg ;; 10283549e21daSmrg *) 102841bedbe3fSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10285549e21daSmrg ;; 10286549e21daSmrg esac 10287549e21daSmrg fi 10288ba6a1819Smrg else 10289549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 102901bedbe3fSmrg func_append rpath " $flag" 10291ba6a1819Smrg fi 10292549e21daSmrg elif test -n "$runpath_var"; then 10293549e21daSmrg case "$perm_rpath " in 10294549e21daSmrg *" $libdir "*) ;; 102951bedbe3fSmrg *) func_append perm_rpath " $libdir" ;; 10296549e21daSmrg esac 10297549e21daSmrg fi 10298549e21daSmrg case $host in 10299549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10300fe4c343aSmrg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10301549e21daSmrg case :$dllsearchpath: in 10302549e21daSmrg *":$libdir:"*) ;; 10303549e21daSmrg ::) dllsearchpath=$libdir;; 103041bedbe3fSmrg *) func_append dllsearchpath ":$libdir";; 10305549e21daSmrg esac 10306549e21daSmrg case :$dllsearchpath: in 10307549e21daSmrg *":$testbindir:"*) ;; 10308549e21daSmrg ::) dllsearchpath=$testbindir;; 103091bedbe3fSmrg *) func_append dllsearchpath ":$testbindir";; 10310549e21daSmrg esac 10311549e21daSmrg ;; 10312549e21daSmrg esac 10313549e21daSmrg done 10314549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 10315549e21daSmrg if test -n "$hardcode_libdir_separator" && 10316549e21daSmrg test -n "$hardcode_libdirs"; then 10317fe4c343aSmrg libdir=$hardcode_libdirs 10318549e21daSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 10319549e21daSmrg fi 10320fe4c343aSmrg compile_rpath=$rpath 10321ba6a1819Smrg 10322549e21daSmrg rpath= 10323549e21daSmrg hardcode_libdirs= 10324549e21daSmrg for libdir in $finalize_rpath; do 10325549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 10326549e21daSmrg if test -n "$hardcode_libdir_separator"; then 10327549e21daSmrg if test -z "$hardcode_libdirs"; then 10328fe4c343aSmrg hardcode_libdirs=$libdir 10329549e21daSmrg else 10330549e21daSmrg # Just accumulate the unique libdirs. 10331549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10332549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10333549e21daSmrg ;; 10334549e21daSmrg *) 103351bedbe3fSmrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10336549e21daSmrg ;; 10337549e21daSmrg esac 10338549e21daSmrg fi 10339ba6a1819Smrg else 10340549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 103411bedbe3fSmrg func_append rpath " $flag" 10342ba6a1819Smrg fi 10343549e21daSmrg elif test -n "$runpath_var"; then 10344549e21daSmrg case "$finalize_perm_rpath " in 10345549e21daSmrg *" $libdir "*) ;; 103461bedbe3fSmrg *) func_append finalize_perm_rpath " $libdir" ;; 10347549e21daSmrg esac 10348ba6a1819Smrg fi 10349549e21daSmrg done 10350549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 10351549e21daSmrg if test -n "$hardcode_libdir_separator" && 10352549e21daSmrg test -n "$hardcode_libdirs"; then 10353fe4c343aSmrg libdir=$hardcode_libdirs 10354549e21daSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 10355549e21daSmrg fi 10356fe4c343aSmrg finalize_rpath=$rpath 10357ba6a1819Smrg 10358fe4c343aSmrg if test -n "$libobjs" && test yes = "$build_old_libs"; then 10359549e21daSmrg # Transform all the library objects into standard objects. 10360549e21daSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10361549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10362549e21daSmrg fi 10363ba6a1819Smrg 10364fe4c343aSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" false 10365ba6a1819Smrg 10366549e21daSmrg # template prelinking step 10367549e21daSmrg if test -n "$prelink_cmds"; then 10368549e21daSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 10369549e21daSmrg fi 10370ba6a1819Smrg 10371fe4c343aSmrg wrappers_required=: 10372549e21daSmrg case $host in 10373549e21daSmrg *cegcc* | *mingw32ce*) 10374549e21daSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10375fe4c343aSmrg wrappers_required=false 10376549e21daSmrg ;; 10377549e21daSmrg *cygwin* | *mingw* ) 10378fe4c343aSmrg test yes = "$build_libtool_libs" || wrappers_required=false 10379549e21daSmrg ;; 10380549e21daSmrg *) 10381fe4c343aSmrg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10382fe4c343aSmrg wrappers_required=false 10383549e21daSmrg fi 10384549e21daSmrg ;; 10385549e21daSmrg esac 10386fe4c343aSmrg $wrappers_required || { 10387549e21daSmrg # Replace the output file specification. 10388549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10389fe4c343aSmrg link_command=$compile_command$compile_rpath 10390ba6a1819Smrg 10391549e21daSmrg # We have no uninstalled library dependencies, so finalize right now. 10392549e21daSmrg exit_status=0 10393549e21daSmrg func_show_eval "$link_command" 'exit_status=$?' 10394ba6a1819Smrg 103951bedbe3fSmrg if test -n "$postlink_cmds"; then 103961bedbe3fSmrg func_to_tool_file "$output" 103971bedbe3fSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 103981bedbe3fSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 103991bedbe3fSmrg fi 104001bedbe3fSmrg 10401549e21daSmrg # Delete the generated files. 10402fe4c343aSmrg if test -f "$output_objdir/${outputname}S.$objext"; then 10403fe4c343aSmrg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10404ba6a1819Smrg fi 10405ba6a1819Smrg 10406549e21daSmrg exit $exit_status 10407fe4c343aSmrg } 10408ba6a1819Smrg 10409549e21daSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 10410549e21daSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10411549e21daSmrg fi 10412549e21daSmrg if test -n "$finalize_shlibpath"; then 10413549e21daSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10414549e21daSmrg fi 10415ba6a1819Smrg 10416549e21daSmrg compile_var= 10417549e21daSmrg finalize_var= 10418549e21daSmrg if test -n "$runpath_var"; then 10419549e21daSmrg if test -n "$perm_rpath"; then 10420549e21daSmrg # We should set the runpath_var. 10421549e21daSmrg rpath= 10422549e21daSmrg for dir in $perm_rpath; do 104231bedbe3fSmrg func_append rpath "$dir:" 10424549e21daSmrg done 10425549e21daSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10426ba6a1819Smrg fi 10427549e21daSmrg if test -n "$finalize_perm_rpath"; then 10428549e21daSmrg # We should set the runpath_var. 10429549e21daSmrg rpath= 10430549e21daSmrg for dir in $finalize_perm_rpath; do 104311bedbe3fSmrg func_append rpath "$dir:" 10432549e21daSmrg done 10433549e21daSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10434ba6a1819Smrg fi 10435549e21daSmrg fi 10436ba6a1819Smrg 10437fe4c343aSmrg if test yes = "$no_install"; then 10438549e21daSmrg # We don't need to create a wrapper script. 10439fe4c343aSmrg link_command=$compile_var$compile_command$compile_rpath 10440549e21daSmrg # Replace the output file specification. 10441549e21daSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10442549e21daSmrg # Delete the old output file. 10443549e21daSmrg $opt_dry_run || $RM $output 10444549e21daSmrg # Link the executable and exit 10445549e21daSmrg func_show_eval "$link_command" 'exit $?' 104461bedbe3fSmrg 104471bedbe3fSmrg if test -n "$postlink_cmds"; then 104481bedbe3fSmrg func_to_tool_file "$output" 104491bedbe3fSmrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 104501bedbe3fSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 104511bedbe3fSmrg fi 104521bedbe3fSmrg 10453ba6a1819Smrg exit $EXIT_SUCCESS 10454549e21daSmrg fi 10455ba6a1819Smrg 10456fe4c343aSmrg case $hardcode_action,$fast_install in 10457fe4c343aSmrg relink,*) 10458fe4c343aSmrg # Fast installation is not supported 10459fe4c343aSmrg link_command=$compile_var$compile_command$compile_rpath 10460fe4c343aSmrg relink_command=$finalize_var$finalize_command$finalize_rpath 10461549e21daSmrg 10462fe4c343aSmrg func_warning "this platform does not like uninstalled shared libraries" 10463fe4c343aSmrg func_warning "'$output' will be relinked during installation" 10464fe4c343aSmrg ;; 10465fe4c343aSmrg *,yes) 10466fe4c343aSmrg link_command=$finalize_var$compile_command$finalize_rpath 10467fe4c343aSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10468fe4c343aSmrg ;; 10469fe4c343aSmrg *,no) 10470fe4c343aSmrg link_command=$compile_var$compile_command$compile_rpath 10471fe4c343aSmrg relink_command=$finalize_var$finalize_command$finalize_rpath 10472fe4c343aSmrg ;; 10473fe4c343aSmrg *,needless) 10474fe4c343aSmrg link_command=$finalize_var$compile_command$finalize_rpath 10475fe4c343aSmrg relink_command= 10476fe4c343aSmrg ;; 10477fe4c343aSmrg esac 10478ba6a1819Smrg 10479549e21daSmrg # Replace the output file specification. 10480549e21daSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10481ba6a1819Smrg 10482549e21daSmrg # Delete the old output files. 10483549e21daSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10484ba6a1819Smrg 10485549e21daSmrg func_show_eval "$link_command" 'exit $?' 10486ba6a1819Smrg 104871bedbe3fSmrg if test -n "$postlink_cmds"; then 104881bedbe3fSmrg func_to_tool_file "$output_objdir/$outputname" 104891bedbe3fSmrg 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'` 104901bedbe3fSmrg func_execute_cmds "$postlink_cmds" 'exit $?' 104911bedbe3fSmrg fi 104921bedbe3fSmrg 10493549e21daSmrg # Now create the wrapper script. 10494549e21daSmrg func_verbose "creating $output" 10495ba6a1819Smrg 10496549e21daSmrg # Quote the relink command for shipping. 10497549e21daSmrg if test -n "$relink_command"; then 10498549e21daSmrg # Preserve any variables that may affect compiler behavior 10499549e21daSmrg for var in $variables_saved_for_relink; do 10500549e21daSmrg if eval test -z \"\${$var+set}\"; then 10501549e21daSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10502549e21daSmrg elif eval var_value=\$$var; test -z "$var_value"; then 10503549e21daSmrg relink_command="$var=; export $var; $relink_command" 10504549e21daSmrg else 10505549e21daSmrg func_quote_for_eval "$var_value" 10506549e21daSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10507549e21daSmrg fi 10508549e21daSmrg done 10509549e21daSmrg relink_command="(cd `pwd`; $relink_command)" 10510549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10511549e21daSmrg fi 10512ba6a1819Smrg 10513549e21daSmrg # Only actually do things if not in dry run mode. 10514549e21daSmrg $opt_dry_run || { 10515549e21daSmrg # win32 will think the script is a binary if it has 10516549e21daSmrg # a .exe suffix, so we strip it off here. 10517549e21daSmrg case $output in 10518549e21daSmrg *.exe) func_stripname '' '.exe' "$output" 10519549e21daSmrg output=$func_stripname_result ;; 10520549e21daSmrg esac 10521549e21daSmrg # test for cygwin because mv fails w/o .exe extensions 10522549e21daSmrg case $host in 10523549e21daSmrg *cygwin*) 10524549e21daSmrg exeext=.exe 10525549e21daSmrg func_stripname '' '.exe' "$outputname" 10526549e21daSmrg outputname=$func_stripname_result ;; 10527549e21daSmrg *) exeext= ;; 10528549e21daSmrg esac 10529549e21daSmrg case $host in 10530549e21daSmrg *cygwin* | *mingw* ) 10531549e21daSmrg func_dirname_and_basename "$output" "" "." 10532549e21daSmrg output_name=$func_basename_result 10533549e21daSmrg output_path=$func_dirname_result 10534fe4c343aSmrg cwrappersource=$output_path/$objdir/lt-$output_name.c 10535fe4c343aSmrg cwrapper=$output_path/$output_name.exe 10536549e21daSmrg $RM $cwrappersource $cwrapper 10537549e21daSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10538549e21daSmrg 10539549e21daSmrg func_emit_cwrapperexe_src > $cwrappersource 10540549e21daSmrg 10541549e21daSmrg # The wrapper executable is built using the $host compiler, 10542549e21daSmrg # because it contains $host paths and files. If cross- 10543549e21daSmrg # compiling, it, like the target executable, must be 10544549e21daSmrg # executed on the $host or under an emulation environment. 10545549e21daSmrg $opt_dry_run || { 10546549e21daSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10547549e21daSmrg $STRIP $cwrapper 10548549e21daSmrg } 10549549e21daSmrg 10550549e21daSmrg # Now, create the wrapper script for func_source use: 10551549e21daSmrg func_ltwrapper_scriptname $cwrapper 10552549e21daSmrg $RM $func_ltwrapper_scriptname_result 10553549e21daSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10554549e21daSmrg $opt_dry_run || { 10555549e21daSmrg # note: this script will not be executed, so do not chmod. 10556fe4c343aSmrg if test "x$build" = "x$host"; then 10557549e21daSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10558ba6a1819Smrg else 10559549e21daSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 10560ba6a1819Smrg fi 10561549e21daSmrg } 10562549e21daSmrg ;; 10563549e21daSmrg * ) 10564549e21daSmrg $RM $output 10565549e21daSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10566ba6a1819Smrg 10567549e21daSmrg func_emit_wrapper no > $output 10568549e21daSmrg chmod +x $output 10569ba6a1819Smrg ;; 10570ba6a1819Smrg esac 10571549e21daSmrg } 10572549e21daSmrg exit $EXIT_SUCCESS 10573549e21daSmrg ;; 10574549e21daSmrg esac 10575ba6a1819Smrg 10576549e21daSmrg # See if we need to build an old-fashioned archive. 10577549e21daSmrg for oldlib in $oldlibs; do 10578ba6a1819Smrg 10579fe4c343aSmrg case $build_libtool_libs in 10580fe4c343aSmrg convenience) 10581fe4c343aSmrg oldobjs="$libobjs_save $symfileobj" 10582fe4c343aSmrg addlibs=$convenience 10583549e21daSmrg build_libtool_libs=no 10584fe4c343aSmrg ;; 10585fe4c343aSmrg module) 10586fe4c343aSmrg oldobjs=$libobjs_save 10587fe4c343aSmrg addlibs=$old_convenience 10588fe4c343aSmrg build_libtool_libs=no 10589fe4c343aSmrg ;; 10590fe4c343aSmrg *) 10591549e21daSmrg oldobjs="$old_deplibs $non_pic_objects" 10592fe4c343aSmrg $preload && test -f "$symfileobj" \ 10593fe4c343aSmrg && func_append oldobjs " $symfileobj" 10594fe4c343aSmrg addlibs=$old_convenience 10595fe4c343aSmrg ;; 10596fe4c343aSmrg esac 10597ba6a1819Smrg 10598549e21daSmrg if test -n "$addlibs"; then 10599fe4c343aSmrg gentop=$output_objdir/${outputname}x 106001bedbe3fSmrg func_append generated " $gentop" 10601ba6a1819Smrg 10602549e21daSmrg func_extract_archives $gentop $addlibs 106031bedbe3fSmrg func_append oldobjs " $func_extract_archives_result" 10604549e21daSmrg fi 10605ba6a1819Smrg 10606549e21daSmrg # Do each command in the archive commands. 10607fe4c343aSmrg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10608549e21daSmrg cmds=$old_archive_from_new_cmds 10609549e21daSmrg else 10610ba6a1819Smrg 10611549e21daSmrg # Add any objects from preloaded convenience libraries 10612549e21daSmrg if test -n "$dlprefiles"; then 10613fe4c343aSmrg gentop=$output_objdir/${outputname}x 106141bedbe3fSmrg func_append generated " $gentop" 10615ba6a1819Smrg 10616549e21daSmrg func_extract_archives $gentop $dlprefiles 106171bedbe3fSmrg func_append oldobjs " $func_extract_archives_result" 10618549e21daSmrg fi 10619ba6a1819Smrg 10620549e21daSmrg # POSIX demands no paths to be encoded in archives. We have 10621549e21daSmrg # to avoid creating archives with duplicate basenames if we 10622549e21daSmrg # might have to extract them afterwards, e.g., when creating a 10623549e21daSmrg # static archive out of a convenience library, or when linking 10624549e21daSmrg # the entirety of a libtool archive into another (currently 10625549e21daSmrg # not supported by libtool). 10626549e21daSmrg if (for obj in $oldobjs 10627549e21daSmrg do 10628549e21daSmrg func_basename "$obj" 10629549e21daSmrg $ECHO "$func_basename_result" 10630549e21daSmrg done | sort | sort -uc >/dev/null 2>&1); then 10631549e21daSmrg : 10632549e21daSmrg else 10633549e21daSmrg echo "copying selected object files to avoid basename conflicts..." 10634fe4c343aSmrg gentop=$output_objdir/${outputname}x 106351bedbe3fSmrg func_append generated " $gentop" 10636549e21daSmrg func_mkdir_p "$gentop" 10637549e21daSmrg save_oldobjs=$oldobjs 10638549e21daSmrg oldobjs= 10639549e21daSmrg counter=1 10640549e21daSmrg for obj in $save_oldobjs 10641549e21daSmrg do 10642549e21daSmrg func_basename "$obj" 10643fe4c343aSmrg objbase=$func_basename_result 10644549e21daSmrg case " $oldobjs " in 10645549e21daSmrg " ") oldobjs=$obj ;; 10646549e21daSmrg *[\ /]"$objbase "*) 10647549e21daSmrg while :; do 10648549e21daSmrg # Make sure we don't pick an alternate name that also 10649549e21daSmrg # overlaps. 10650549e21daSmrg newobj=lt$counter-$objbase 10651549e21daSmrg func_arith $counter + 1 10652549e21daSmrg counter=$func_arith_result 10653549e21daSmrg case " $oldobjs " in 10654549e21daSmrg *[\ /]"$newobj "*) ;; 10655549e21daSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10656549e21daSmrg esac 10657549e21daSmrg done 10658549e21daSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 106591bedbe3fSmrg func_append oldobjs " $gentop/$newobj" 10660549e21daSmrg ;; 106611bedbe3fSmrg *) func_append oldobjs " $obj" ;; 10662549e21daSmrg esac 10663ba6a1819Smrg done 10664ba6a1819Smrg fi 106651bedbe3fSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 106661bedbe3fSmrg tool_oldlib=$func_to_tool_file_result 10667549e21daSmrg eval cmds=\"$old_archive_cmds\" 10668ba6a1819Smrg 10669549e21daSmrg func_len " $cmds" 10670549e21daSmrg len=$func_len_result 10671549e21daSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10672549e21daSmrg cmds=$old_archive_cmds 106731bedbe3fSmrg elif test -n "$archiver_list_spec"; then 106741bedbe3fSmrg func_verbose "using command file archive linking..." 106751bedbe3fSmrg for obj in $oldobjs 106761bedbe3fSmrg do 106771bedbe3fSmrg func_to_tool_file "$obj" 106781bedbe3fSmrg $ECHO "$func_to_tool_file_result" 106791bedbe3fSmrg done > $output_objdir/$libname.libcmd 106801bedbe3fSmrg func_to_tool_file "$output_objdir/$libname.libcmd" 106811bedbe3fSmrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 106821bedbe3fSmrg cmds=$old_archive_cmds 10683549e21daSmrg else 10684549e21daSmrg # the command line is too long to link in one step, link in parts 10685549e21daSmrg func_verbose "using piecewise archive linking..." 10686549e21daSmrg save_RANLIB=$RANLIB 10687549e21daSmrg RANLIB=: 10688549e21daSmrg objlist= 10689549e21daSmrg concat_cmds= 10690549e21daSmrg save_oldobjs=$oldobjs 10691549e21daSmrg oldobjs= 10692549e21daSmrg # Is there a better way of finding the last object in the list? 10693549e21daSmrg for obj in $save_oldobjs 10694549e21daSmrg do 10695549e21daSmrg last_oldobj=$obj 10696549e21daSmrg done 10697549e21daSmrg eval test_cmds=\"$old_archive_cmds\" 10698549e21daSmrg func_len " $test_cmds" 10699549e21daSmrg len0=$func_len_result 10700549e21daSmrg len=$len0 10701549e21daSmrg for obj in $save_oldobjs 10702549e21daSmrg do 10703549e21daSmrg func_len " $obj" 10704549e21daSmrg func_arith $len + $func_len_result 10705549e21daSmrg len=$func_arith_result 10706549e21daSmrg func_append objlist " $obj" 10707549e21daSmrg if test "$len" -lt "$max_cmd_len"; then 10708549e21daSmrg : 10709549e21daSmrg else 10710549e21daSmrg # the above command should be used before it gets too long 10711549e21daSmrg oldobjs=$objlist 10712fe4c343aSmrg if test "$obj" = "$last_oldobj"; then 10713549e21daSmrg RANLIB=$save_RANLIB 10714549e21daSmrg fi 10715549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10716fe4c343aSmrg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10717549e21daSmrg objlist= 10718549e21daSmrg len=$len0 10719549e21daSmrg fi 10720549e21daSmrg done 10721549e21daSmrg RANLIB=$save_RANLIB 10722549e21daSmrg oldobjs=$objlist 10723fe4c343aSmrg if test -z "$oldobjs"; then 10724549e21daSmrg eval cmds=\"\$concat_cmds\" 10725549e21daSmrg else 10726549e21daSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10727549e21daSmrg fi 10728549e21daSmrg fi 10729549e21daSmrg fi 10730549e21daSmrg func_execute_cmds "$cmds" 'exit $?' 10731ba6a1819Smrg done 10732ba6a1819Smrg 10733549e21daSmrg test -n "$generated" && \ 10734549e21daSmrg func_show_eval "${RM}r$generated" 10735ba6a1819Smrg 10736549e21daSmrg # Now create the libtool archive. 10737549e21daSmrg case $output in 10738549e21daSmrg *.la) 10739549e21daSmrg old_library= 10740fe4c343aSmrg test yes = "$build_old_libs" && old_library=$libname.$libext 10741549e21daSmrg func_verbose "creating $output" 10742ba6a1819Smrg 10743549e21daSmrg # Preserve any variables that may affect compiler behavior 10744549e21daSmrg for var in $variables_saved_for_relink; do 10745549e21daSmrg if eval test -z \"\${$var+set}\"; then 10746549e21daSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10747549e21daSmrg elif eval var_value=\$$var; test -z "$var_value"; then 10748549e21daSmrg relink_command="$var=; export $var; $relink_command" 10749ba6a1819Smrg else 10750549e21daSmrg func_quote_for_eval "$var_value" 10751549e21daSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10752ba6a1819Smrg fi 10753549e21daSmrg done 10754549e21daSmrg # Quote the link command for shipping. 10755fe4c343aSmrg relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 10756549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10757fe4c343aSmrg if test yes = "$hardcode_automatic"; then 10758549e21daSmrg relink_command= 10759549e21daSmrg fi 10760ba6a1819Smrg 10761549e21daSmrg # Only create the output if not a dry run. 10762549e21daSmrg $opt_dry_run || { 10763549e21daSmrg for installed in no yes; do 10764fe4c343aSmrg if test yes = "$installed"; then 10765549e21daSmrg if test -z "$install_libdir"; then 10766549e21daSmrg break 10767549e21daSmrg fi 10768fe4c343aSmrg output=$output_objdir/${outputname}i 10769549e21daSmrg # Replace all uninstalled libtool libraries with the installed ones 10770549e21daSmrg newdependency_libs= 10771549e21daSmrg for deplib in $dependency_libs; do 10772549e21daSmrg case $deplib in 10773549e21daSmrg *.la) 10774549e21daSmrg func_basename "$deplib" 10775fe4c343aSmrg name=$func_basename_result 107761bedbe3fSmrg func_resolve_sysroot "$deplib" 10777fe4c343aSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 10778549e21daSmrg test -z "$libdir" && \ 10779fe4c343aSmrg func_fatal_error "'$deplib' is not a valid libtool archive" 107801bedbe3fSmrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 107811bedbe3fSmrg ;; 107821bedbe3fSmrg -L*) 107831bedbe3fSmrg func_stripname -L '' "$deplib" 107841bedbe3fSmrg func_replace_sysroot "$func_stripname_result" 107851bedbe3fSmrg func_append newdependency_libs " -L$func_replace_sysroot_result" 107861bedbe3fSmrg ;; 107871bedbe3fSmrg -R*) 107881bedbe3fSmrg func_stripname -R '' "$deplib" 107891bedbe3fSmrg func_replace_sysroot "$func_stripname_result" 107901bedbe3fSmrg func_append newdependency_libs " -R$func_replace_sysroot_result" 10791549e21daSmrg ;; 107921bedbe3fSmrg *) func_append newdependency_libs " $deplib" ;; 10793549e21daSmrg esac 10794549e21daSmrg done 10795fe4c343aSmrg dependency_libs=$newdependency_libs 10796549e21daSmrg newdlfiles= 10797549e21daSmrg 10798549e21daSmrg for lib in $dlfiles; do 10799549e21daSmrg case $lib in 10800549e21daSmrg *.la) 10801549e21daSmrg func_basename "$lib" 10802fe4c343aSmrg name=$func_basename_result 10803fe4c343aSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10804549e21daSmrg test -z "$libdir" && \ 10805fe4c343aSmrg func_fatal_error "'$lib' is not a valid libtool archive" 108061bedbe3fSmrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 10807549e21daSmrg ;; 108081bedbe3fSmrg *) func_append newdlfiles " $lib" ;; 10809549e21daSmrg esac 10810549e21daSmrg done 10811fe4c343aSmrg dlfiles=$newdlfiles 10812549e21daSmrg newdlprefiles= 10813549e21daSmrg for lib in $dlprefiles; do 10814549e21daSmrg case $lib in 10815549e21daSmrg *.la) 10816549e21daSmrg # Only pass preopened files to the pseudo-archive (for 10817549e21daSmrg # eventual linking with the app. that links it) if we 10818549e21daSmrg # didn't already link the preopened objects directly into 10819549e21daSmrg # the library: 10820549e21daSmrg func_basename "$lib" 10821fe4c343aSmrg name=$func_basename_result 10822fe4c343aSmrg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10823549e21daSmrg test -z "$libdir" && \ 10824fe4c343aSmrg func_fatal_error "'$lib' is not a valid libtool archive" 108251bedbe3fSmrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 10826549e21daSmrg ;; 10827549e21daSmrg esac 10828549e21daSmrg done 10829fe4c343aSmrg dlprefiles=$newdlprefiles 10830549e21daSmrg else 10831549e21daSmrg newdlfiles= 10832549e21daSmrg for lib in $dlfiles; do 10833549e21daSmrg case $lib in 10834fe4c343aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10835549e21daSmrg *) abs=`pwd`"/$lib" ;; 10836549e21daSmrg esac 108371bedbe3fSmrg func_append newdlfiles " $abs" 10838549e21daSmrg done 10839fe4c343aSmrg dlfiles=$newdlfiles 10840549e21daSmrg newdlprefiles= 10841549e21daSmrg for lib in $dlprefiles; do 10842549e21daSmrg case $lib in 10843fe4c343aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10844549e21daSmrg *) abs=`pwd`"/$lib" ;; 10845549e21daSmrg esac 108461bedbe3fSmrg func_append newdlprefiles " $abs" 10847549e21daSmrg done 10848fe4c343aSmrg dlprefiles=$newdlprefiles 10849549e21daSmrg fi 10850549e21daSmrg $RM $output 10851549e21daSmrg # place dlname in correct position for cygwin 10852549e21daSmrg # In fact, it would be nice if we could use this code for all target 10853549e21daSmrg # systems that can't hard-code library paths into their executables 10854549e21daSmrg # and that have no shared library path variable independent of PATH, 10855549e21daSmrg # but it turns out we can't easily determine that from inspecting 10856549e21daSmrg # libtool variables, so we have to hard-code the OSs to which it 10857549e21daSmrg # applies here; at the moment, that means platforms that use the PE 10858549e21daSmrg # object format with DLL files. See the long comment at the top of 10859549e21daSmrg # tests/bindir.at for full details. 10860549e21daSmrg tdlname=$dlname 10861549e21daSmrg case $host,$output,$installed,$module,$dlname in 10862549e21daSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 10863549e21daSmrg # If a -bindir argument was supplied, place the dll there. 10864fe4c343aSmrg if test -n "$bindir"; then 10865549e21daSmrg func_relative_path "$install_libdir" "$bindir" 10866fe4c343aSmrg tdlname=$func_relative_path_result/$dlname 10867549e21daSmrg else 10868549e21daSmrg # Otherwise fall back on heuristic. 10869549e21daSmrg tdlname=../bin/$dlname 10870549e21daSmrg fi 10871549e21daSmrg ;; 10872549e21daSmrg esac 10873549e21daSmrg $ECHO > $output "\ 10874549e21daSmrg# $outputname - a libtool library file 10875fe4c343aSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 10876549e21daSmrg# 10877549e21daSmrg# Please DO NOT delete this file! 10878549e21daSmrg# It is necessary for linking the library. 10879ba6a1819Smrg 10880549e21daSmrg# The name that we can dlopen(3). 10881549e21daSmrgdlname='$tdlname' 10882ba6a1819Smrg 10883549e21daSmrg# Names of this library. 10884549e21daSmrglibrary_names='$library_names' 10885ba6a1819Smrg 10886549e21daSmrg# The name of the static archive. 10887549e21daSmrgold_library='$old_library' 10888ba6a1819Smrg 10889fe4c343aSmrg# Linker flags that cannot go in dependency_libs. 10890549e21daSmrginherited_linker_flags='$new_inherited_linker_flags' 10891ba6a1819Smrg 10892549e21daSmrg# Libraries that this one depends upon. 10893549e21daSmrgdependency_libs='$dependency_libs' 10894ba6a1819Smrg 10895549e21daSmrg# Names of additional weak libraries provided by this library 10896549e21daSmrgweak_library_names='$weak_libs' 10897ba6a1819Smrg 10898549e21daSmrg# Version information for $libname. 10899549e21daSmrgcurrent=$current 10900549e21daSmrgage=$age 10901549e21daSmrgrevision=$revision 10902ba6a1819Smrg 10903549e21daSmrg# Is this an already installed library? 10904549e21daSmrginstalled=$installed 10905ba6a1819Smrg 10906549e21daSmrg# Should we warn about portability when linking against -modules? 10907549e21daSmrgshouldnotlink=$module 10908ba6a1819Smrg 10909549e21daSmrg# Files to dlopen/dlpreopen 10910549e21daSmrgdlopen='$dlfiles' 10911549e21daSmrgdlpreopen='$dlprefiles' 10912ba6a1819Smrg 10913549e21daSmrg# Directory that this library needs to be installed in: 10914549e21daSmrglibdir='$install_libdir'" 10915fe4c343aSmrg if test no,yes = "$installed,$need_relink"; then 10916549e21daSmrg $ECHO >> $output "\ 10917549e21daSmrgrelink_command=\"$relink_command\"" 10918549e21daSmrg fi 10919549e21daSmrg done 10920549e21daSmrg } 10921ba6a1819Smrg 10922549e21daSmrg # Do a symbolic link so that the libtool archive can be found in 10923549e21daSmrg # LD_LIBRARY_PATH before the program is installed. 10924549e21daSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 10925549e21daSmrg ;; 10926549e21daSmrg esac 10927549e21daSmrg exit $EXIT_SUCCESS 10928549e21daSmrg} 10929ba6a1819Smrg 10930fe4c343aSmrgif test link = "$opt_mode" || test relink = "$opt_mode"; then 10931fe4c343aSmrg func_mode_link ${1+"$@"} 10932fe4c343aSmrgfi 10933ba6a1819Smrg 10934ba6a1819Smrg 10935549e21daSmrg# func_mode_uninstall arg... 10936549e21daSmrgfunc_mode_uninstall () 10937549e21daSmrg{ 10938fe4c343aSmrg $debug_cmd 10939fe4c343aSmrg 10940fe4c343aSmrg RM=$nonopt 10941ba6a1819Smrg files= 10942fe4c343aSmrg rmforce=false 10943ba6a1819Smrg exit_status=0 10944ba6a1819Smrg 10945ba6a1819Smrg # This variable tells wrapper scripts just to set variables rather 10946ba6a1819Smrg # than running their programs. 10947fe4c343aSmrg libtool_install_magic=$magic 10948ba6a1819Smrg 10949ba6a1819Smrg for arg 10950ba6a1819Smrg do 10951ba6a1819Smrg case $arg in 10952fe4c343aSmrg -f) func_append RM " $arg"; rmforce=: ;; 109531bedbe3fSmrg -*) func_append RM " $arg" ;; 109541bedbe3fSmrg *) func_append files " $arg" ;; 10955ba6a1819Smrg esac 10956ba6a1819Smrg done 10957ba6a1819Smrg 10958549e21daSmrg test -z "$RM" && \ 10959549e21daSmrg func_fatal_help "you must specify an RM program" 10960ba6a1819Smrg 10961ba6a1819Smrg rmdirs= 10962ba6a1819Smrg 10963ba6a1819Smrg for file in $files; do 10964549e21daSmrg func_dirname "$file" "" "." 10965fe4c343aSmrg dir=$func_dirname_result 10966fe4c343aSmrg if test . = "$dir"; then 10967fe4c343aSmrg odir=$objdir 10968ba6a1819Smrg else 10969fe4c343aSmrg odir=$dir/$objdir 10970ba6a1819Smrg fi 10971549e21daSmrg func_basename "$file" 10972fe4c343aSmrg name=$func_basename_result 10973fe4c343aSmrg test uninstall = "$opt_mode" && odir=$dir 10974ba6a1819Smrg 109751bedbe3fSmrg # Remember odir for removal later, being careful to avoid duplicates 10976fe4c343aSmrg if test clean = "$opt_mode"; then 10977ba6a1819Smrg case " $rmdirs " in 109781bedbe3fSmrg *" $odir "*) ;; 109791bedbe3fSmrg *) func_append rmdirs " $odir" ;; 10980ba6a1819Smrg esac 10981ba6a1819Smrg fi 10982ba6a1819Smrg 10983ba6a1819Smrg # Don't error if the file doesn't exist and rm -f was used. 10984549e21daSmrg if { test -L "$file"; } >/dev/null 2>&1 || 10985549e21daSmrg { test -h "$file"; } >/dev/null 2>&1 || 10986549e21daSmrg test -f "$file"; then 10987ba6a1819Smrg : 10988ba6a1819Smrg elif test -d "$file"; then 10989ba6a1819Smrg exit_status=1 10990ba6a1819Smrg continue 10991fe4c343aSmrg elif $rmforce; then 10992ba6a1819Smrg continue 10993ba6a1819Smrg fi 10994ba6a1819Smrg 10995fe4c343aSmrg rmfiles=$file 10996ba6a1819Smrg 10997ba6a1819Smrg case $name in 10998ba6a1819Smrg *.la) 10999ba6a1819Smrg # Possibly a libtool archive, so verify it. 11000549e21daSmrg if func_lalib_p "$file"; then 11001549e21daSmrg func_source $dir/$name 11002ba6a1819Smrg 11003ba6a1819Smrg # Delete the libtool libraries and symlinks. 11004ba6a1819Smrg for n in $library_names; do 110051bedbe3fSmrg func_append rmfiles " $odir/$n" 11006ba6a1819Smrg done 110071bedbe3fSmrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11008ba6a1819Smrg 11009fe4c343aSmrg case $opt_mode in 11010ba6a1819Smrg clean) 110111bedbe3fSmrg case " $library_names " in 11012ba6a1819Smrg *" $dlname "*) ;; 110131bedbe3fSmrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11014ba6a1819Smrg esac 110151bedbe3fSmrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11016ba6a1819Smrg ;; 11017ba6a1819Smrg uninstall) 11018ba6a1819Smrg if test -n "$library_names"; then 11019ba6a1819Smrg # Do each command in the postuninstall commands. 11020fe4c343aSmrg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11021ba6a1819Smrg fi 11022ba6a1819Smrg 11023ba6a1819Smrg if test -n "$old_library"; then 11024ba6a1819Smrg # Do each command in the old_postuninstall commands. 11025fe4c343aSmrg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11026ba6a1819Smrg fi 11027ba6a1819Smrg # FIXME: should reinstall the best remaining shared library. 11028ba6a1819Smrg ;; 11029ba6a1819Smrg esac 11030ba6a1819Smrg fi 11031ba6a1819Smrg ;; 11032ba6a1819Smrg 11033ba6a1819Smrg *.lo) 11034ba6a1819Smrg # Possibly a libtool object, so verify it. 11035549e21daSmrg if func_lalib_p "$file"; then 11036ba6a1819Smrg 11037ba6a1819Smrg # Read the .lo file 11038549e21daSmrg func_source $dir/$name 11039ba6a1819Smrg 11040ba6a1819Smrg # Add PIC object to the list of files to remove. 11041fe4c343aSmrg if test -n "$pic_object" && test none != "$pic_object"; then 110421bedbe3fSmrg func_append rmfiles " $dir/$pic_object" 11043ba6a1819Smrg fi 11044ba6a1819Smrg 11045ba6a1819Smrg # Add non-PIC object to the list of files to remove. 11046fe4c343aSmrg if test -n "$non_pic_object" && test none != "$non_pic_object"; then 110471bedbe3fSmrg func_append rmfiles " $dir/$non_pic_object" 11048ba6a1819Smrg fi 11049ba6a1819Smrg fi 11050ba6a1819Smrg ;; 11051ba6a1819Smrg 11052ba6a1819Smrg *) 11053fe4c343aSmrg if test clean = "$opt_mode"; then 11054ba6a1819Smrg noexename=$name 11055ba6a1819Smrg case $file in 11056ba6a1819Smrg *.exe) 11057549e21daSmrg func_stripname '' '.exe' "$file" 11058549e21daSmrg file=$func_stripname_result 11059549e21daSmrg func_stripname '' '.exe' "$name" 11060549e21daSmrg noexename=$func_stripname_result 11061ba6a1819Smrg # $file with .exe has already been added to rmfiles, 11062ba6a1819Smrg # add $file without .exe 110631bedbe3fSmrg func_append rmfiles " $file" 11064ba6a1819Smrg ;; 11065ba6a1819Smrg esac 11066ba6a1819Smrg # Do a test to see if this is a libtool program. 11067549e21daSmrg if func_ltwrapper_p "$file"; then 11068549e21daSmrg if func_ltwrapper_executable_p "$file"; then 11069549e21daSmrg func_ltwrapper_scriptname "$file" 11070549e21daSmrg relink_command= 11071549e21daSmrg func_source $func_ltwrapper_scriptname_result 110721bedbe3fSmrg func_append rmfiles " $func_ltwrapper_scriptname_result" 11073549e21daSmrg else 11074549e21daSmrg relink_command= 11075549e21daSmrg func_source $dir/$noexename 11076549e21daSmrg fi 11077ba6a1819Smrg 11078ba6a1819Smrg # note $name still contains .exe if it was in $file originally 11079ba6a1819Smrg # as does the version of $file that was added into $rmfiles 11080fe4c343aSmrg func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11081fe4c343aSmrg if test yes = "$fast_install" && test -n "$relink_command"; then 110821bedbe3fSmrg func_append rmfiles " $odir/lt-$name" 11083ba6a1819Smrg fi 11084fe4c343aSmrg if test "X$noexename" != "X$name"; then 11085fe4c343aSmrg func_append rmfiles " $odir/lt-$noexename.c" 11086ba6a1819Smrg fi 11087ba6a1819Smrg fi 11088ba6a1819Smrg fi 11089ba6a1819Smrg ;; 11090ba6a1819Smrg esac 11091549e21daSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 11092ba6a1819Smrg done 11093ba6a1819Smrg 11094fe4c343aSmrg # Try to remove the $objdir's in the directories where we deleted files 11095ba6a1819Smrg for dir in $rmdirs; do 11096ba6a1819Smrg if test -d "$dir"; then 11097549e21daSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 11098ba6a1819Smrg fi 11099ba6a1819Smrg done 11100ba6a1819Smrg 11101ba6a1819Smrg exit $exit_status 11102549e21daSmrg} 11103ba6a1819Smrg 11104fe4c343aSmrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11105fe4c343aSmrg func_mode_uninstall ${1+"$@"} 11106fe4c343aSmrgfi 11107ba6a1819Smrg 111081bedbe3fSmrgtest -z "$opt_mode" && { 11109fe4c343aSmrg help=$generic_help 11110549e21daSmrg func_fatal_help "you must specify a MODE" 11111549e21daSmrg} 11112549e21daSmrg 11113549e21daSmrgtest -z "$exec_cmd" && \ 11114fe4c343aSmrg func_fatal_help "invalid operation mode '$opt_mode'" 11115ba6a1819Smrg 11116ba6a1819Smrgif test -n "$exec_cmd"; then 11117549e21daSmrg eval exec "$exec_cmd" 11118ba6a1819Smrg exit $EXIT_FAILURE 11119ba6a1819Smrgfi 11120ba6a1819Smrg 11121549e21daSmrgexit $exit_status 11122ba6a1819Smrg 11123ba6a1819Smrg 11124ba6a1819Smrg# The TAGs below are defined such that we never get into a situation 11125fe4c343aSmrg# where we disable both kinds of libraries. Given conflicting 11126ba6a1819Smrg# choices, we go for a static library, that is the most portable, 11127ba6a1819Smrg# since we can't tell whether shared libraries were disabled because 11128ba6a1819Smrg# the user asked for that or because the platform doesn't support 11129ba6a1819Smrg# them. This is particularly important on AIX, because we don't 11130ba6a1819Smrg# support having both static and shared libraries enabled at the same 11131ba6a1819Smrg# time on that platform, so we default to a shared-only configuration. 11132ba6a1819Smrg# If a disable-shared tag is given, we'll fallback to a static-only 11133ba6a1819Smrg# configuration. But we'll never go from static-only to shared-only. 11134ba6a1819Smrg 11135ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11136549e21daSmrgbuild_libtool_libs=no 11137549e21daSmrgbuild_old_libs=yes 11138ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 11139ba6a1819Smrg 11140ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11141549e21daSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11142ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-static 11143ba6a1819Smrg 11144ba6a1819Smrg# Local Variables: 11145ba6a1819Smrg# mode:shell-script 11146ba6a1819Smrg# sh-indentation:2 11147ba6a1819Smrg# End: 11148