1*b3fce824SCristian Pallarés#! /bin/sh 2*b3fce824SCristian Pallarés## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3*b3fce824SCristian Pallarés## by inline-source v2014-01-03.01 4189777a2SCristian Pallares 5*b3fce824SCristian Pallarés# libtool (GNU libtool) 2.4.6 6*b3fce824SCristian Pallarés# Provide generalized library-building support services. 7189777a2SCristian Pallares# Written by Gordon Matzigkeit <[email protected]>, 1996 8189777a2SCristian Pallares 9*b3fce824SCristian Pallarés# Copyright (C) 1996-2015 Free Software Foundation, Inc. 10189777a2SCristian Pallares# This is free software; see the source for copying conditions. There is NO 11189777a2SCristian Pallares# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12189777a2SCristian Pallares 13189777a2SCristian Pallares# GNU Libtool is free software; you can redistribute it and/or modify 14189777a2SCristian Pallares# it under the terms of the GNU General Public License as published by 15189777a2SCristian Pallares# the Free Software Foundation; either version 2 of the License, or 16189777a2SCristian Pallares# (at your option) any later version. 17189777a2SCristian Pallares# 18189777a2SCristian Pallares# As a special exception to the GNU General Public License, 19189777a2SCristian Pallares# if you distribute this file as part of a program or library that 20189777a2SCristian Pallares# is built using GNU Libtool, you may include this file under the 21189777a2SCristian Pallares# same distribution terms that you use for the rest of that program. 22189777a2SCristian Pallares# 23189777a2SCristian Pallares# GNU Libtool is distributed in the hope that it will be useful, but 24189777a2SCristian Pallares# WITHOUT ANY WARRANTY; without even the implied warranty of 25189777a2SCristian Pallares# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26189777a2SCristian Pallares# General Public License for more details. 27189777a2SCristian Pallares# 28189777a2SCristian Pallares# You should have received a copy of the GNU General Public License 29*b3fce824SCristian Pallarés# along with this program. If not, see <http://www.gnu.org/licenses/>. 30189777a2SCristian Pallares 31189777a2SCristian Pallares 32189777a2SCristian PallaresPROGRAM=libtool 33189777a2SCristian PallaresPACKAGE=libtool 34*b3fce824SCristian PallarésVERSION="2.4.6 Debian-2.4.6-1" 35*b3fce824SCristian Pallaréspackage_revision=2.4.6 36189777a2SCristian Pallares 37*b3fce824SCristian Pallarés 38*b3fce824SCristian Pallarés## ------ ## 39*b3fce824SCristian Pallarés## Usage. ## 40*b3fce824SCristian Pallarés## ------ ## 41*b3fce824SCristian Pallarés 42*b3fce824SCristian Pallarés# Run './libtool --help' for help with using this script from the 43*b3fce824SCristian Pallarés# command line. 44*b3fce824SCristian Pallarés 45*b3fce824SCristian Pallarés 46*b3fce824SCristian Pallarés## ------------------------------- ## 47*b3fce824SCristian Pallarés## User overridable command paths. ## 48*b3fce824SCristian Pallarés## ------------------------------- ## 49*b3fce824SCristian Pallarés 50*b3fce824SCristian Pallarés# After configure completes, it has a better idea of some of the 51*b3fce824SCristian Pallarés# shell tools we need than the defaults used by the functions shared 52*b3fce824SCristian Pallarés# with bootstrap, so set those here where they can still be over- 53*b3fce824SCristian Pallarés# ridden by the user, but otherwise take precedence. 54*b3fce824SCristian Pallarés 55*b3fce824SCristian Pallarés: ${AUTOCONF="autoconf"} 56*b3fce824SCristian Pallarés: ${AUTOMAKE="automake"} 57*b3fce824SCristian Pallarés 58*b3fce824SCristian Pallarés 59*b3fce824SCristian Pallarés## -------------------------- ## 60*b3fce824SCristian Pallarés## Source external libraries. ## 61*b3fce824SCristian Pallarés## -------------------------- ## 62*b3fce824SCristian Pallarés 63*b3fce824SCristian Pallarés# Much of our low-level functionality needs to be sourced from external 64*b3fce824SCristian Pallarés# libraries, which are installed to $pkgauxdir. 65*b3fce824SCristian Pallarés 66*b3fce824SCristian Pallarés# Set a version string for this script. 67*b3fce824SCristian Pallarésscriptversion=2015-01-20.17; # UTC 68*b3fce824SCristian Pallarés 69*b3fce824SCristian Pallarés# General shell script boiler plate, and helper functions. 70*b3fce824SCristian Pallarés# Written by Gary V. Vaughan, 2004 71*b3fce824SCristian Pallarés 72*b3fce824SCristian Pallarés# Copyright (C) 2004-2015 Free Software Foundation, Inc. 73*b3fce824SCristian Pallarés# This is free software; see the source for copying conditions. There is NO 74*b3fce824SCristian Pallarés# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 75*b3fce824SCristian Pallarés 76*b3fce824SCristian Pallarés# This program is free software; you can redistribute it and/or modify 77*b3fce824SCristian Pallarés# it under the terms of the GNU General Public License as published by 78*b3fce824SCristian Pallarés# the Free Software Foundation; either version 3 of the License, or 79*b3fce824SCristian Pallarés# (at your option) any later version. 80*b3fce824SCristian Pallarés 81*b3fce824SCristian Pallarés# As a special exception to the GNU General Public License, if you distribute 82*b3fce824SCristian Pallarés# this file as part of a program or library that is built using GNU Libtool, 83*b3fce824SCristian Pallarés# you may include this file under the same distribution terms that you use 84*b3fce824SCristian Pallarés# for the rest of that program. 85*b3fce824SCristian Pallarés 86*b3fce824SCristian Pallarés# This program is distributed in the hope that it will be useful, 87*b3fce824SCristian Pallarés# but WITHOUT ANY WARRANTY; without even the implied warranty of 88*b3fce824SCristian Pallarés# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 89*b3fce824SCristian Pallarés# General Public License for more details. 90*b3fce824SCristian Pallarés 91*b3fce824SCristian Pallarés# You should have received a copy of the GNU General Public License 92*b3fce824SCristian Pallarés# along with this program. If not, see <http://www.gnu.org/licenses/>. 93*b3fce824SCristian Pallarés 94*b3fce824SCristian Pallarés# Please report bugs or propose patches to [email protected]. 95*b3fce824SCristian Pallarés 96*b3fce824SCristian Pallarés 97*b3fce824SCristian Pallarés## ------ ## 98*b3fce824SCristian Pallarés## Usage. ## 99*b3fce824SCristian Pallarés## ------ ## 100*b3fce824SCristian Pallarés 101*b3fce824SCristian Pallarés# Evaluate this file near the top of your script to gain access to 102*b3fce824SCristian Pallarés# the functions and variables defined here: 103*b3fce824SCristian Pallarés# 104*b3fce824SCristian Pallarés# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 105*b3fce824SCristian Pallarés# 106*b3fce824SCristian Pallarés# If you need to override any of the default environment variable 107*b3fce824SCristian Pallarés# settings, do that before evaluating this file. 108*b3fce824SCristian Pallarés 109*b3fce824SCristian Pallarés 110*b3fce824SCristian Pallarés## -------------------- ## 111*b3fce824SCristian Pallarés## Shell normalisation. ## 112*b3fce824SCristian Pallarés## -------------------- ## 113*b3fce824SCristian Pallarés 114*b3fce824SCristian Pallarés# Some shells need a little help to be as Bourne compatible as possible. 115*b3fce824SCristian Pallarés# Before doing anything else, make sure all that help has been provided! 116*b3fce824SCristian Pallarés 117*b3fce824SCristian PallarésDUALCASE=1; export DUALCASE # for MKS sh 118*b3fce824SCristian Pallarésif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 119189777a2SCristian Pallares emulate sh 120189777a2SCristian Pallares NULLCMD=: 121*b3fce824SCristian Pallarés # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 122189777a2SCristian Pallares # is contrary to our usage. Disable this feature. 123189777a2SCristian Pallares alias -g '${1+"$@"}'='"$@"' 124189777a2SCristian Pallares setopt NO_GLOB_SUBST 125189777a2SCristian Pallareselse 126189777a2SCristian Pallares case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 127189777a2SCristian Pallaresfi 128189777a2SCristian Pallares 129*b3fce824SCristian Pallarés# NLS nuisances: We save the old values in case they are required later. 130*b3fce824SCristian Pallarés_G_user_locale= 131*b3fce824SCristian Pallarés_G_safe_locale= 132*b3fce824SCristian Pallarésfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 133189777a2SCristian Pallaresdo 134*b3fce824SCristian Pallarés eval "if test set = \"\${$_G_var+set}\"; then 135*b3fce824SCristian Pallarés save_$_G_var=\$$_G_var 136*b3fce824SCristian Pallarés $_G_var=C 137*b3fce824SCristian Pallarés export $_G_var 138*b3fce824SCristian Pallarés _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 139*b3fce824SCristian Pallarés _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 140189777a2SCristian Pallares fi" 141189777a2SCristian Pallaresdone 142189777a2SCristian Pallares 143*b3fce824SCristian Pallarés# CDPATH. 144*b3fce824SCristian Pallarés(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 145189777a2SCristian Pallares 146*b3fce824SCristian Pallarés# Make sure IFS has a sensible default 147*b3fce824SCristian Pallaréssp=' ' 148*b3fce824SCristian Pallarésnl=' 149*b3fce824SCristian Pallarés' 150*b3fce824SCristian PallarésIFS="$sp $nl" 151*b3fce824SCristian Pallarés 152*b3fce824SCristian Pallarés# There are apparently some retarded systems that use ';' as a PATH separator! 153*b3fce824SCristian Pallarésif test "${PATH_SEPARATOR+set}" != set; then 154*b3fce824SCristian Pallarés PATH_SEPARATOR=: 155*b3fce824SCristian Pallarés (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 156*b3fce824SCristian Pallarés (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 157*b3fce824SCristian Pallarés PATH_SEPARATOR=';' 158*b3fce824SCristian Pallarés } 159*b3fce824SCristian Pallarésfi 160*b3fce824SCristian Pallarés 161*b3fce824SCristian Pallarés 162*b3fce824SCristian Pallarés 163*b3fce824SCristian Pallarés## ------------------------- ## 164*b3fce824SCristian Pallarés## Locate command utilities. ## 165*b3fce824SCristian Pallarés## ------------------------- ## 166*b3fce824SCristian Pallarés 167*b3fce824SCristian Pallarés 168*b3fce824SCristian Pallarés# func_executable_p FILE 169*b3fce824SCristian Pallarés# ---------------------- 170*b3fce824SCristian Pallarés# Check that FILE is an executable regular file. 171*b3fce824SCristian Pallarésfunc_executable_p () 172*b3fce824SCristian Pallarés{ 173*b3fce824SCristian Pallarés test -f "$1" && test -x "$1" 174*b3fce824SCristian Pallarés} 175*b3fce824SCristian Pallarés 176*b3fce824SCristian Pallarés 177*b3fce824SCristian Pallarés# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 178*b3fce824SCristian Pallarés# -------------------------------------------- 179*b3fce824SCristian Pallarés# Search for either a program that responds to --version with output 180*b3fce824SCristian Pallarés# containing "GNU", or else returned by CHECK_FUNC otherwise, by 181*b3fce824SCristian Pallarés# trying all the directories in PATH with each of the elements of 182*b3fce824SCristian Pallarés# PROGS_LIST. 183*b3fce824SCristian Pallarés# 184*b3fce824SCristian Pallarés# CHECK_FUNC should accept the path to a candidate program, and 185*b3fce824SCristian Pallarés# set $func_check_prog_result if it truncates its output less than 186*b3fce824SCristian Pallarés# $_G_path_prog_max characters. 187*b3fce824SCristian Pallarésfunc_path_progs () 188*b3fce824SCristian Pallarés{ 189*b3fce824SCristian Pallarés _G_progs_list=$1 190*b3fce824SCristian Pallarés _G_check_func=$2 191*b3fce824SCristian Pallarés _G_PATH=${3-"$PATH"} 192*b3fce824SCristian Pallarés 193*b3fce824SCristian Pallarés _G_path_prog_max=0 194*b3fce824SCristian Pallarés _G_path_prog_found=false 195*b3fce824SCristian Pallarés _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 196*b3fce824SCristian Pallarés for _G_dir in $_G_PATH; do 197*b3fce824SCristian Pallarés IFS=$_G_save_IFS 198*b3fce824SCristian Pallarés test -z "$_G_dir" && _G_dir=. 199*b3fce824SCristian Pallarés for _G_prog_name in $_G_progs_list; do 200*b3fce824SCristian Pallarés for _exeext in '' .EXE; do 201*b3fce824SCristian Pallarés _G_path_prog=$_G_dir/$_G_prog_name$_exeext 202*b3fce824SCristian Pallarés func_executable_p "$_G_path_prog" || continue 203*b3fce824SCristian Pallarés case `"$_G_path_prog" --version 2>&1` in 204*b3fce824SCristian Pallarés *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 205*b3fce824SCristian Pallarés *) $_G_check_func $_G_path_prog 206*b3fce824SCristian Pallarés func_path_progs_result=$func_check_prog_result 207*b3fce824SCristian Pallarés ;; 208*b3fce824SCristian Pallarés esac 209*b3fce824SCristian Pallarés $_G_path_prog_found && break 3 210*b3fce824SCristian Pallarés done 211*b3fce824SCristian Pallarés done 212*b3fce824SCristian Pallarés done 213*b3fce824SCristian Pallarés IFS=$_G_save_IFS 214*b3fce824SCristian Pallarés test -z "$func_path_progs_result" && { 215*b3fce824SCristian Pallarés echo "no acceptable sed could be found in \$PATH" >&2 216*b3fce824SCristian Pallarés exit 1 217*b3fce824SCristian Pallarés } 218*b3fce824SCristian Pallarés} 219*b3fce824SCristian Pallarés 220*b3fce824SCristian Pallarés 221*b3fce824SCristian Pallarés# We want to be able to use the functions in this file before configure 222*b3fce824SCristian Pallarés# has figured out where the best binaries are kept, which means we have 223*b3fce824SCristian Pallarés# to search for them ourselves - except when the results are already set 224*b3fce824SCristian Pallarés# where we skip the searches. 225*b3fce824SCristian Pallarés 226*b3fce824SCristian Pallarés# Unless the user overrides by setting SED, search the path for either GNU 227*b3fce824SCristian Pallarés# sed, or the sed that truncates its output the least. 228*b3fce824SCristian Pallaréstest -z "$SED" && { 229*b3fce824SCristian Pallarés _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 230*b3fce824SCristian Pallarés for _G_i in 1 2 3 4 5 6 7; do 231*b3fce824SCristian Pallarés _G_sed_script=$_G_sed_script$nl$_G_sed_script 232*b3fce824SCristian Pallarés done 233*b3fce824SCristian Pallarés echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 234*b3fce824SCristian Pallarés _G_sed_script= 235*b3fce824SCristian Pallarés 236*b3fce824SCristian Pallarés func_check_prog_sed () 237*b3fce824SCristian Pallarés { 238*b3fce824SCristian Pallarés _G_path_prog=$1 239*b3fce824SCristian Pallarés 240*b3fce824SCristian Pallarés _G_count=0 241*b3fce824SCristian Pallarés printf 0123456789 >conftest.in 242*b3fce824SCristian Pallarés while : 243*b3fce824SCristian Pallarés do 244*b3fce824SCristian Pallarés cat conftest.in conftest.in >conftest.tmp 245*b3fce824SCristian Pallarés mv conftest.tmp conftest.in 246*b3fce824SCristian Pallarés cp conftest.in conftest.nl 247*b3fce824SCristian Pallarés echo '' >> conftest.nl 248*b3fce824SCristian Pallarés "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 249*b3fce824SCristian Pallarés diff conftest.out conftest.nl >/dev/null 2>&1 || break 250*b3fce824SCristian Pallarés _G_count=`expr $_G_count + 1` 251*b3fce824SCristian Pallarés if test "$_G_count" -gt "$_G_path_prog_max"; then 252*b3fce824SCristian Pallarés # Best one so far, save it but keep looking for a better one 253*b3fce824SCristian Pallarés func_check_prog_result=$_G_path_prog 254*b3fce824SCristian Pallarés _G_path_prog_max=$_G_count 255*b3fce824SCristian Pallarés fi 256*b3fce824SCristian Pallarés # 10*(2^10) chars as input seems more than enough 257*b3fce824SCristian Pallarés test 10 -lt "$_G_count" && break 258*b3fce824SCristian Pallarés done 259*b3fce824SCristian Pallarés rm -f conftest.in conftest.tmp conftest.nl conftest.out 260*b3fce824SCristian Pallarés } 261*b3fce824SCristian Pallarés 262*b3fce824SCristian Pallarés func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 263*b3fce824SCristian Pallarés rm -f conftest.sed 264*b3fce824SCristian Pallarés SED=$func_path_progs_result 265*b3fce824SCristian Pallarés} 266*b3fce824SCristian Pallarés 267*b3fce824SCristian Pallarés 268*b3fce824SCristian Pallarés# Unless the user overrides by setting GREP, search the path for either GNU 269*b3fce824SCristian Pallarés# grep, or the grep that truncates its output the least. 270*b3fce824SCristian Pallaréstest -z "$GREP" && { 271*b3fce824SCristian Pallarés func_check_prog_grep () 272*b3fce824SCristian Pallarés { 273*b3fce824SCristian Pallarés _G_path_prog=$1 274*b3fce824SCristian Pallarés 275*b3fce824SCristian Pallarés _G_count=0 276*b3fce824SCristian Pallarés _G_path_prog_max=0 277*b3fce824SCristian Pallarés printf 0123456789 >conftest.in 278*b3fce824SCristian Pallarés while : 279*b3fce824SCristian Pallarés do 280*b3fce824SCristian Pallarés cat conftest.in conftest.in >conftest.tmp 281*b3fce824SCristian Pallarés mv conftest.tmp conftest.in 282*b3fce824SCristian Pallarés cp conftest.in conftest.nl 283*b3fce824SCristian Pallarés echo 'GREP' >> conftest.nl 284*b3fce824SCristian Pallarés "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 285*b3fce824SCristian Pallarés diff conftest.out conftest.nl >/dev/null 2>&1 || break 286*b3fce824SCristian Pallarés _G_count=`expr $_G_count + 1` 287*b3fce824SCristian Pallarés if test "$_G_count" -gt "$_G_path_prog_max"; then 288*b3fce824SCristian Pallarés # Best one so far, save it but keep looking for a better one 289*b3fce824SCristian Pallarés func_check_prog_result=$_G_path_prog 290*b3fce824SCristian Pallarés _G_path_prog_max=$_G_count 291*b3fce824SCristian Pallarés fi 292*b3fce824SCristian Pallarés # 10*(2^10) chars as input seems more than enough 293*b3fce824SCristian Pallarés test 10 -lt "$_G_count" && break 294*b3fce824SCristian Pallarés done 295*b3fce824SCristian Pallarés rm -f conftest.in conftest.tmp conftest.nl conftest.out 296*b3fce824SCristian Pallarés } 297*b3fce824SCristian Pallarés 298*b3fce824SCristian Pallarés func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 299*b3fce824SCristian Pallarés GREP=$func_path_progs_result 300*b3fce824SCristian Pallarés} 301*b3fce824SCristian Pallarés 302*b3fce824SCristian Pallarés 303*b3fce824SCristian Pallarés## ------------------------------- ## 304*b3fce824SCristian Pallarés## User overridable command paths. ## 305*b3fce824SCristian Pallarés## ------------------------------- ## 306*b3fce824SCristian Pallarés 307*b3fce824SCristian Pallarés# All uppercase variable names are used for environment variables. These 308*b3fce824SCristian Pallarés# variables can be overridden by the user before calling a script that 309*b3fce824SCristian Pallarés# uses them if a suitable command of that name is not already available 310*b3fce824SCristian Pallarés# in the command search PATH. 311*b3fce824SCristian Pallarés 312*b3fce824SCristian Pallarés: ${CP="cp -f"} 313*b3fce824SCristian Pallarés: ${ECHO="printf %s\n"} 314*b3fce824SCristian Pallarés: ${EGREP="$GREP -E"} 315*b3fce824SCristian Pallarés: ${FGREP="$GREP -F"} 316*b3fce824SCristian Pallarés: ${LN_S="ln -s"} 317*b3fce824SCristian Pallarés: ${MAKE="make"} 318*b3fce824SCristian Pallarés: ${MKDIR="mkdir"} 319*b3fce824SCristian Pallarés: ${MV="mv -f"} 320*b3fce824SCristian Pallarés: ${RM="rm -f"} 321*b3fce824SCristian Pallarés: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 322*b3fce824SCristian Pallarés 323*b3fce824SCristian Pallarés 324*b3fce824SCristian Pallarés## -------------------- ## 325*b3fce824SCristian Pallarés## Useful sed snippets. ## 326*b3fce824SCristian Pallarés## -------------------- ## 327*b3fce824SCristian Pallarés 328*b3fce824SCristian Pallaréssed_dirname='s|/[^/]*$||' 329*b3fce824SCristian Pallaréssed_basename='s|^.*/||' 330*b3fce824SCristian Pallarés 331*b3fce824SCristian Pallarés# Sed substitution that helps us do robust quoting. It backslashifies 332*b3fce824SCristian Pallarés# metacharacters that are still active within double-quoted strings. 333*b3fce824SCristian Pallaréssed_quote_subst='s|\([`"$\\]\)|\\\1|g' 334*b3fce824SCristian Pallarés 335*b3fce824SCristian Pallarés# Same as above, but do not quote variable references. 336*b3fce824SCristian Pallaréssed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 337*b3fce824SCristian Pallarés 338*b3fce824SCristian Pallarés# Sed substitution that turns a string into a regex matching for the 339*b3fce824SCristian Pallarés# string literally. 340*b3fce824SCristian Pallaréssed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 341*b3fce824SCristian Pallarés 342*b3fce824SCristian Pallarés# Sed substitution that converts a w32 file name or path 343*b3fce824SCristian Pallarés# that contains forward slashes, into one that contains 344*b3fce824SCristian Pallarés# (escaped) backslashes. A very naive implementation. 345*b3fce824SCristian Pallaréssed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 346*b3fce824SCristian Pallarés 347*b3fce824SCristian Pallarés# Re-'\' parameter expansions in output of sed_double_quote_subst that 348*b3fce824SCristian Pallarés# were '\'-ed in input to the same. If an odd number of '\' preceded a 349*b3fce824SCristian Pallarés# '$' in input to sed_double_quote_subst, that '$' was protected from 350*b3fce824SCristian Pallarés# expansion. Since each input '\' is now two '\'s, look for any number 351*b3fce824SCristian Pallarés# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 352*b3fce824SCristian Pallarés_G_bs='\\' 353*b3fce824SCristian Pallarés_G_bs2='\\\\' 354*b3fce824SCristian Pallarés_G_bs4='\\\\\\\\' 355*b3fce824SCristian Pallarés_G_dollar='\$' 356*b3fce824SCristian Pallaréssed_double_backslash="\ 357*b3fce824SCristian Pallarés s/$_G_bs4/&\\ 358*b3fce824SCristian Pallarés/g 359*b3fce824SCristian Pallarés s/^$_G_bs2$_G_dollar/$_G_bs&/ 360*b3fce824SCristian Pallarés s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 361*b3fce824SCristian Pallarés s/\n//g" 362*b3fce824SCristian Pallarés 363*b3fce824SCristian Pallarés 364*b3fce824SCristian Pallarés## ----------------- ## 365*b3fce824SCristian Pallarés## Global variables. ## 366*b3fce824SCristian Pallarés## ----------------- ## 367*b3fce824SCristian Pallarés 368*b3fce824SCristian Pallarés# Except for the global variables explicitly listed below, the following 369*b3fce824SCristian Pallarés# functions in the '^func_' namespace, and the '^require_' namespace 370*b3fce824SCristian Pallarés# variables initialised in the 'Resource management' section, sourcing 371*b3fce824SCristian Pallarés# this file will not pollute your global namespace with anything 372*b3fce824SCristian Pallarés# else. There's no portable way to scope variables in Bourne shell 373*b3fce824SCristian Pallarés# though, so actually running these functions will sometimes place 374*b3fce824SCristian Pallarés# results into a variable named after the function, and often use 375*b3fce824SCristian Pallarés# temporary variables in the '^_G_' namespace. If you are careful to 376*b3fce824SCristian Pallarés# avoid using those namespaces casually in your sourcing script, things 377*b3fce824SCristian Pallarés# should continue to work as you expect. And, of course, you can freely 378*b3fce824SCristian Pallarés# overwrite any of the functions or variables defined here before 379*b3fce824SCristian Pallarés# calling anything to customize them. 380*b3fce824SCristian Pallarés 381*b3fce824SCristian PallarésEXIT_SUCCESS=0 382*b3fce824SCristian PallarésEXIT_FAILURE=1 383*b3fce824SCristian PallarésEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 384*b3fce824SCristian PallarésEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 385*b3fce824SCristian Pallarés 386*b3fce824SCristian Pallarés# Allow overriding, eg assuming that you follow the convention of 387*b3fce824SCristian Pallarés# putting '$debug_cmd' at the start of all your functions, you can get 388*b3fce824SCristian Pallarés# bash to show function call trace with: 389*b3fce824SCristian Pallarés# 390*b3fce824SCristian Pallarés# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 391*b3fce824SCristian Pallarésdebug_cmd=${debug_cmd-":"} 392*b3fce824SCristian Pallarésexit_cmd=: 393*b3fce824SCristian Pallarés 394*b3fce824SCristian Pallarés# By convention, finish your script with: 395*b3fce824SCristian Pallarés# 396*b3fce824SCristian Pallarés# exit $exit_status 397*b3fce824SCristian Pallarés# 398*b3fce824SCristian Pallarés# so that you can set exit_status to non-zero if you want to indicate 399*b3fce824SCristian Pallarés# something went wrong during execution without actually bailing out at 400*b3fce824SCristian Pallarés# the point of failure. 401*b3fce824SCristian Pallarésexit_status=$EXIT_SUCCESS 402189777a2SCristian Pallares 403189777a2SCristian Pallares# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 404189777a2SCristian Pallares# is ksh but when the shell is invoked as "sh" and the current value of 405189777a2SCristian Pallares# the _XPG environment variable is not equal to 1 (one), the special 406189777a2SCristian Pallares# positional parameter $0, within a function call, is the name of the 407189777a2SCristian Pallares# function. 408*b3fce824SCristian Pallarésprogpath=$0 409*b3fce824SCristian Pallarés 410*b3fce824SCristian Pallarés# The name of this program. 411*b3fce824SCristian Pallarésprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 412*b3fce824SCristian Pallarés 413*b3fce824SCristian Pallarés# Make sure we have an absolute progpath for reexecution: 414*b3fce824SCristian Pallaréscase $progpath in 415*b3fce824SCristian Pallarés [\\/]*|[A-Za-z]:\\*) ;; 416*b3fce824SCristian Pallarés *[\\/]*) 417*b3fce824SCristian Pallarés progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 418*b3fce824SCristian Pallarés progdir=`cd "$progdir" && pwd` 419*b3fce824SCristian Pallarés progpath=$progdir/$progname 420*b3fce824SCristian Pallarés ;; 421*b3fce824SCristian Pallarés *) 422*b3fce824SCristian Pallarés _G_IFS=$IFS 423*b3fce824SCristian Pallarés IFS=${PATH_SEPARATOR-:} 424*b3fce824SCristian Pallarés for progdir in $PATH; do 425*b3fce824SCristian Pallarés IFS=$_G_IFS 426*b3fce824SCristian Pallarés test -x "$progdir/$progname" && break 427*b3fce824SCristian Pallarés done 428*b3fce824SCristian Pallarés IFS=$_G_IFS 429*b3fce824SCristian Pallarés test -n "$progdir" || progdir=`pwd` 430*b3fce824SCristian Pallarés progpath=$progdir/$progname 431*b3fce824SCristian Pallarés ;; 432*b3fce824SCristian Pallarésesac 433189777a2SCristian Pallares 434189777a2SCristian Pallares 435*b3fce824SCristian Pallarés## ----------------- ## 436*b3fce824SCristian Pallarés## Standard options. ## 437*b3fce824SCristian Pallarés## ----------------- ## 438189777a2SCristian Pallares 439*b3fce824SCristian Pallarés# The following options affect the operation of the functions defined 440*b3fce824SCristian Pallarés# below, and should be set appropriately depending on run-time para- 441*b3fce824SCristian Pallarés# meters passed on the command line. 442189777a2SCristian Pallares 443*b3fce824SCristian Pallarésopt_dry_run=false 444*b3fce824SCristian Pallarésopt_quiet=false 445*b3fce824SCristian Pallarésopt_verbose=false 446189777a2SCristian Pallares 447*b3fce824SCristian Pallarés# Categories 'all' and 'none' are always available. Append any others 448*b3fce824SCristian Pallarés# you will pass as the first argument to func_warning from your own 449*b3fce824SCristian Pallarés# code. 450*b3fce824SCristian Pallaréswarning_categories= 451189777a2SCristian Pallares 452*b3fce824SCristian Pallarés# By default, display warnings according to 'opt_warning_types'. Set 453*b3fce824SCristian Pallarés# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 454*b3fce824SCristian Pallarés# treat the next displayed warning as a fatal error. 455*b3fce824SCristian Pallaréswarning_func=func_warn_and_continue 456189777a2SCristian Pallares 457*b3fce824SCristian Pallarés# Set to 'all' to display all warnings, 'none' to suppress all 458*b3fce824SCristian Pallarés# warnings, or a space delimited list of some subset of 459*b3fce824SCristian Pallarés# 'warning_categories' to display only the listed warnings. 460*b3fce824SCristian Pallarésopt_warning_types=all 461189777a2SCristian Pallares 462*b3fce824SCristian Pallarés 463*b3fce824SCristian Pallarés## -------------------- ## 464*b3fce824SCristian Pallarés## Resource management. ## 465*b3fce824SCristian Pallarés## -------------------- ## 466*b3fce824SCristian Pallarés 467*b3fce824SCristian Pallarés# This section contains definitions for functions that each ensure a 468*b3fce824SCristian Pallarés# particular resource (a file, or a non-empty configuration variable for 469*b3fce824SCristian Pallarés# example) is available, and if appropriate to extract default values 470*b3fce824SCristian Pallarés# from pertinent package files. Call them using their associated 471*b3fce824SCristian Pallarés# 'require_*' variable to ensure that they are executed, at most, once. 472*b3fce824SCristian Pallarés# 473*b3fce824SCristian Pallarés# It's entirely deliberate that calling these functions can set 474*b3fce824SCristian Pallarés# variables that don't obey the namespace limitations obeyed by the rest 475*b3fce824SCristian Pallarés# of this file, in order that that they be as useful as possible to 476*b3fce824SCristian Pallarés# callers. 477*b3fce824SCristian Pallarés 478*b3fce824SCristian Pallarés 479*b3fce824SCristian Pallarés# require_term_colors 480*b3fce824SCristian Pallarés# ------------------- 481*b3fce824SCristian Pallarés# Allow display of bold text on terminals that support it. 482*b3fce824SCristian Pallarésrequire_term_colors=func_require_term_colors 483*b3fce824SCristian Pallarésfunc_require_term_colors () 484*b3fce824SCristian Pallarés{ 485*b3fce824SCristian Pallarés $debug_cmd 486*b3fce824SCristian Pallarés 487*b3fce824SCristian Pallarés test -t 1 && { 488*b3fce824SCristian Pallarés # COLORTERM and USE_ANSI_COLORS environment variables take 489*b3fce824SCristian Pallarés # precedence, because most terminfo databases neglect to describe 490*b3fce824SCristian Pallarés # whether color sequences are supported. 491*b3fce824SCristian Pallarés test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 492*b3fce824SCristian Pallarés 493*b3fce824SCristian Pallarés if test 1 = "$USE_ANSI_COLORS"; then 494*b3fce824SCristian Pallarés # Standard ANSI escape sequences 495*b3fce824SCristian Pallarés tc_reset='[0m' 496*b3fce824SCristian Pallarés tc_bold='[1m'; tc_standout='[7m' 497*b3fce824SCristian Pallarés tc_red='[31m'; tc_green='[32m' 498*b3fce824SCristian Pallarés tc_blue='[34m'; tc_cyan='[36m' 499*b3fce824SCristian Pallarés else 500*b3fce824SCristian Pallarés # Otherwise trust the terminfo database after all. 501*b3fce824SCristian Pallarés test -n "`tput sgr0 2>/dev/null`" && { 502*b3fce824SCristian Pallarés tc_reset=`tput sgr0` 503*b3fce824SCristian Pallarés test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 504*b3fce824SCristian Pallarés tc_standout=$tc_bold 505*b3fce824SCristian Pallarés test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 506*b3fce824SCristian Pallarés test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 507*b3fce824SCristian Pallarés test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 508*b3fce824SCristian Pallarés test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 509*b3fce824SCristian Pallarés test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 510*b3fce824SCristian Pallarés } 511*b3fce824SCristian Pallarés fi 512*b3fce824SCristian Pallarés } 513*b3fce824SCristian Pallarés 514*b3fce824SCristian Pallarés require_term_colors=: 515*b3fce824SCristian Pallarés} 516*b3fce824SCristian Pallarés 517*b3fce824SCristian Pallarés 518*b3fce824SCristian Pallarés## ----------------- ## 519*b3fce824SCristian Pallarés## Function library. ## 520*b3fce824SCristian Pallarés## ----------------- ## 521*b3fce824SCristian Pallarés 522*b3fce824SCristian Pallarés# This section contains a variety of useful functions to call in your 523*b3fce824SCristian Pallarés# scripts. Take note of the portable wrappers for features provided by 524*b3fce824SCristian Pallarés# some modern shells, which will fall back to slower equivalents on 525*b3fce824SCristian Pallarés# less featureful shells. 526*b3fce824SCristian Pallarés 527*b3fce824SCristian Pallarés 528*b3fce824SCristian Pallarés# func_append VAR VALUE 529*b3fce824SCristian Pallarés# --------------------- 530*b3fce824SCristian Pallarés# Append VALUE onto the existing contents of VAR. 531*b3fce824SCristian Pallarés 532*b3fce824SCristian Pallarés # We should try to minimise forks, especially on Windows where they are 533*b3fce824SCristian Pallarés # unreasonably slow, so skip the feature probes when bash or zsh are 534*b3fce824SCristian Pallarés # being used: 535*b3fce824SCristian Pallarés if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 536*b3fce824SCristian Pallarés : ${_G_HAVE_ARITH_OP="yes"} 537*b3fce824SCristian Pallarés : ${_G_HAVE_XSI_OPS="yes"} 538*b3fce824SCristian Pallarés # The += operator was introduced in bash 3.1 539*b3fce824SCristian Pallarés case $BASH_VERSION in 540*b3fce824SCristian Pallarés [12].* | 3.0 | 3.0*) ;; 541*b3fce824SCristian Pallarés *) 542*b3fce824SCristian Pallarés : ${_G_HAVE_PLUSEQ_OP="yes"} 543*b3fce824SCristian Pallarés ;; 544*b3fce824SCristian Pallarés esac 545*b3fce824SCristian Pallarés fi 546*b3fce824SCristian Pallarés 547*b3fce824SCristian Pallarés # _G_HAVE_PLUSEQ_OP 548*b3fce824SCristian Pallarés # Can be empty, in which case the shell is probed, "yes" if += is 549*b3fce824SCristian Pallarés # useable or anything else if it does not work. 550*b3fce824SCristian Pallarés test -z "$_G_HAVE_PLUSEQ_OP" \ 551*b3fce824SCristian Pallarés && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 552*b3fce824SCristian Pallarés && _G_HAVE_PLUSEQ_OP=yes 553*b3fce824SCristian Pallarés 554*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_PLUSEQ_OP" 555*b3fce824SCristian Pallarésthen 556*b3fce824SCristian Pallarés # This is an XSI compatible shell, allowing a faster implementation... 557*b3fce824SCristian Pallarés eval 'func_append () 558*b3fce824SCristian Pallarés { 559*b3fce824SCristian Pallarés $debug_cmd 560*b3fce824SCristian Pallarés 561*b3fce824SCristian Pallarés eval "$1+=\$2" 562*b3fce824SCristian Pallarés }' 563*b3fce824SCristian Pallaréselse 564*b3fce824SCristian Pallarés # ...otherwise fall back to using expr, which is often a shell builtin. 565*b3fce824SCristian Pallarés func_append () 566*b3fce824SCristian Pallarés { 567*b3fce824SCristian Pallarés $debug_cmd 568*b3fce824SCristian Pallarés 569*b3fce824SCristian Pallarés eval "$1=\$$1\$2" 570*b3fce824SCristian Pallarés } 571*b3fce824SCristian Pallarésfi 572*b3fce824SCristian Pallarés 573*b3fce824SCristian Pallarés 574*b3fce824SCristian Pallarés# func_append_quoted VAR VALUE 575*b3fce824SCristian Pallarés# ---------------------------- 576*b3fce824SCristian Pallarés# Quote VALUE and append to the end of shell variable VAR, separated 577*b3fce824SCristian Pallarés# by a space. 578*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_PLUSEQ_OP"; then 579*b3fce824SCristian Pallarés eval 'func_append_quoted () 580*b3fce824SCristian Pallarés { 581*b3fce824SCristian Pallarés $debug_cmd 582*b3fce824SCristian Pallarés 583*b3fce824SCristian Pallarés func_quote_for_eval "$2" 584*b3fce824SCristian Pallarés eval "$1+=\\ \$func_quote_for_eval_result" 585*b3fce824SCristian Pallarés }' 586*b3fce824SCristian Pallaréselse 587*b3fce824SCristian Pallarés func_append_quoted () 588*b3fce824SCristian Pallarés { 589*b3fce824SCristian Pallarés $debug_cmd 590*b3fce824SCristian Pallarés 591*b3fce824SCristian Pallarés func_quote_for_eval "$2" 592*b3fce824SCristian Pallarés eval "$1=\$$1\\ \$func_quote_for_eval_result" 593*b3fce824SCristian Pallarés } 594*b3fce824SCristian Pallarésfi 595*b3fce824SCristian Pallarés 596*b3fce824SCristian Pallarés 597*b3fce824SCristian Pallarés# func_append_uniq VAR VALUE 598*b3fce824SCristian Pallarés# -------------------------- 599*b3fce824SCristian Pallarés# Append unique VALUE onto the existing contents of VAR, assuming 600*b3fce824SCristian Pallarés# entries are delimited by the first character of VALUE. For example: 601*b3fce824SCristian Pallarés# 602*b3fce824SCristian Pallarés# func_append_uniq options " --another-option option-argument" 603*b3fce824SCristian Pallarés# 604*b3fce824SCristian Pallarés# will only append to $options if " --another-option option-argument " 605*b3fce824SCristian Pallarés# is not already present somewhere in $options already (note spaces at 606*b3fce824SCristian Pallarés# each end implied by leading space in second argument). 607*b3fce824SCristian Pallarésfunc_append_uniq () 608*b3fce824SCristian Pallarés{ 609*b3fce824SCristian Pallarés $debug_cmd 610*b3fce824SCristian Pallarés 611*b3fce824SCristian Pallarés eval _G_current_value='`$ECHO $'$1'`' 612*b3fce824SCristian Pallarés _G_delim=`expr "$2" : '\(.\)'` 613*b3fce824SCristian Pallarés 614*b3fce824SCristian Pallarés case $_G_delim$_G_current_value$_G_delim in 615*b3fce824SCristian Pallarés *"$2$_G_delim"*) ;; 616*b3fce824SCristian Pallarés *) func_append "$@" ;; 617*b3fce824SCristian Pallarés esac 618*b3fce824SCristian Pallarés} 619*b3fce824SCristian Pallarés 620*b3fce824SCristian Pallarés 621*b3fce824SCristian Pallarés# func_arith TERM... 622*b3fce824SCristian Pallarés# ------------------ 623*b3fce824SCristian Pallarés# Set func_arith_result to the result of evaluating TERMs. 624*b3fce824SCristian Pallarés test -z "$_G_HAVE_ARITH_OP" \ 625*b3fce824SCristian Pallarés && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 626*b3fce824SCristian Pallarés && _G_HAVE_ARITH_OP=yes 627*b3fce824SCristian Pallarés 628*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_ARITH_OP"; then 629*b3fce824SCristian Pallarés eval 'func_arith () 630*b3fce824SCristian Pallarés { 631*b3fce824SCristian Pallarés $debug_cmd 632*b3fce824SCristian Pallarés 633*b3fce824SCristian Pallarés func_arith_result=$(( $* )) 634*b3fce824SCristian Pallarés }' 635*b3fce824SCristian Pallaréselse 636*b3fce824SCristian Pallarés func_arith () 637*b3fce824SCristian Pallarés { 638*b3fce824SCristian Pallarés $debug_cmd 639*b3fce824SCristian Pallarés 640*b3fce824SCristian Pallarés func_arith_result=`expr "$@"` 641*b3fce824SCristian Pallarés } 642*b3fce824SCristian Pallarésfi 643*b3fce824SCristian Pallarés 644*b3fce824SCristian Pallarés 645*b3fce824SCristian Pallarés# func_basename FILE 646*b3fce824SCristian Pallarés# ------------------ 647*b3fce824SCristian Pallarés# Set func_basename_result to FILE with everything up to and including 648*b3fce824SCristian Pallarés# the last / stripped. 649*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then 650*b3fce824SCristian Pallarés # If this shell supports suffix pattern removal, then use it to avoid 651*b3fce824SCristian Pallarés # forking. Hide the definitions single quotes in case the shell chokes 652*b3fce824SCristian Pallarés # on unsupported syntax... 653*b3fce824SCristian Pallarés _b='func_basename_result=${1##*/}' 654*b3fce824SCristian Pallarés _d='case $1 in 655*b3fce824SCristian Pallarés */*) func_dirname_result=${1%/*}$2 ;; 656*b3fce824SCristian Pallarés * ) func_dirname_result=$3 ;; 657*b3fce824SCristian Pallarés esac' 658*b3fce824SCristian Pallarés 659*b3fce824SCristian Pallaréselse 660*b3fce824SCristian Pallarés # ...otherwise fall back to using sed. 661*b3fce824SCristian Pallarés _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 662*b3fce824SCristian Pallarés _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 663*b3fce824SCristian Pallarés if test "X$func_dirname_result" = "X$1"; then 664*b3fce824SCristian Pallarés func_dirname_result=$3 665*b3fce824SCristian Pallarés else 666*b3fce824SCristian Pallarés func_append func_dirname_result "$2" 667*b3fce824SCristian Pallarés fi' 668*b3fce824SCristian Pallarésfi 669*b3fce824SCristian Pallarés 670*b3fce824SCristian Pallaréseval 'func_basename () 671*b3fce824SCristian Pallarés{ 672*b3fce824SCristian Pallarés $debug_cmd 673*b3fce824SCristian Pallarés 674*b3fce824SCristian Pallarés '"$_b"' 675*b3fce824SCristian Pallarés}' 676*b3fce824SCristian Pallarés 677*b3fce824SCristian Pallarés 678*b3fce824SCristian Pallarés# func_dirname FILE APPEND NONDIR_REPLACEMENT 679*b3fce824SCristian Pallarés# ------------------------------------------- 680189777a2SCristian Pallares# Compute the dirname of FILE. If nonempty, add APPEND to the result, 681189777a2SCristian Pallares# otherwise set result to NONDIR_REPLACEMENT. 682*b3fce824SCristian Pallaréseval 'func_dirname () 683189777a2SCristian Pallares{ 684*b3fce824SCristian Pallarés $debug_cmd 685*b3fce824SCristian Pallarés 686*b3fce824SCristian Pallarés '"$_d"' 687*b3fce824SCristian Pallarés}' 688189777a2SCristian Pallares 689189777a2SCristian Pallares 690*b3fce824SCristian Pallarés# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 691*b3fce824SCristian Pallarés# -------------------------------------------------------- 692*b3fce824SCristian Pallarés# Perform func_basename and func_dirname in a single function 693189777a2SCristian Pallares# call: 694189777a2SCristian Pallares# dirname: Compute the dirname of FILE. If nonempty, 695189777a2SCristian Pallares# add APPEND to the result, otherwise set result 696189777a2SCristian Pallares# to NONDIR_REPLACEMENT. 697189777a2SCristian Pallares# value returned in "$func_dirname_result" 698189777a2SCristian Pallares# basename: Compute filename of FILE. 699189777a2SCristian Pallares# value retuned in "$func_basename_result" 700*b3fce824SCristian Pallarés# For efficiency, we do not delegate to the functions above but instead 701*b3fce824SCristian Pallarés# duplicate the functionality here. 702*b3fce824SCristian Pallaréseval 'func_dirname_and_basename () 703189777a2SCristian Pallares{ 704*b3fce824SCristian Pallarés $debug_cmd 705*b3fce824SCristian Pallarés 706*b3fce824SCristian Pallarés '"$_b"' 707*b3fce824SCristian Pallarés '"$_d"' 708*b3fce824SCristian Pallarés}' 709*b3fce824SCristian Pallarés 710*b3fce824SCristian Pallarés 711*b3fce824SCristian Pallarés# func_echo ARG... 712*b3fce824SCristian Pallarés# ---------------- 713*b3fce824SCristian Pallarés# Echo program name prefixed message. 714*b3fce824SCristian Pallarésfunc_echo () 715*b3fce824SCristian Pallarés{ 716*b3fce824SCristian Pallarés $debug_cmd 717*b3fce824SCristian Pallarés 718*b3fce824SCristian Pallarés _G_message=$* 719*b3fce824SCristian Pallarés 720*b3fce824SCristian Pallarés func_echo_IFS=$IFS 721*b3fce824SCristian Pallarés IFS=$nl 722*b3fce824SCristian Pallarés for _G_line in $_G_message; do 723*b3fce824SCristian Pallarés IFS=$func_echo_IFS 724*b3fce824SCristian Pallarés $ECHO "$progname: $_G_line" 725*b3fce824SCristian Pallarés done 726*b3fce824SCristian Pallarés IFS=$func_echo_IFS 727*b3fce824SCristian Pallarés} 728*b3fce824SCristian Pallarés 729*b3fce824SCristian Pallarés 730*b3fce824SCristian Pallarés# func_echo_all ARG... 731*b3fce824SCristian Pallarés# -------------------- 732*b3fce824SCristian Pallarés# Invoke $ECHO with all args, space-separated. 733*b3fce824SCristian Pallarésfunc_echo_all () 734*b3fce824SCristian Pallarés{ 735*b3fce824SCristian Pallarés $ECHO "$*" 736*b3fce824SCristian Pallarés} 737*b3fce824SCristian Pallarés 738*b3fce824SCristian Pallarés 739*b3fce824SCristian Pallarés# func_echo_infix_1 INFIX ARG... 740*b3fce824SCristian Pallarés# ------------------------------ 741*b3fce824SCristian Pallarés# Echo program name, followed by INFIX on the first line, with any 742*b3fce824SCristian Pallarés# additional lines not showing INFIX. 743*b3fce824SCristian Pallarésfunc_echo_infix_1 () 744*b3fce824SCristian Pallarés{ 745*b3fce824SCristian Pallarés $debug_cmd 746*b3fce824SCristian Pallarés 747*b3fce824SCristian Pallarés $require_term_colors 748*b3fce824SCristian Pallarés 749*b3fce824SCristian Pallarés _G_infix=$1; shift 750*b3fce824SCristian Pallarés _G_indent=$_G_infix 751*b3fce824SCristian Pallarés _G_prefix="$progname: $_G_infix: " 752*b3fce824SCristian Pallarés _G_message=$* 753*b3fce824SCristian Pallarés 754*b3fce824SCristian Pallarés # Strip color escape sequences before counting printable length 755*b3fce824SCristian Pallarés for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 756*b3fce824SCristian Pallarés do 757*b3fce824SCristian Pallarés test -n "$_G_tc" && { 758*b3fce824SCristian Pallarés _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 759*b3fce824SCristian Pallarés _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 760*b3fce824SCristian Pallarés } 761*b3fce824SCristian Pallarés done 762*b3fce824SCristian Pallarés _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 763*b3fce824SCristian Pallarés 764*b3fce824SCristian Pallarés func_echo_infix_1_IFS=$IFS 765*b3fce824SCristian Pallarés IFS=$nl 766*b3fce824SCristian Pallarés for _G_line in $_G_message; do 767*b3fce824SCristian Pallarés IFS=$func_echo_infix_1_IFS 768*b3fce824SCristian Pallarés $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 769*b3fce824SCristian Pallarés _G_prefix=$_G_indent 770*b3fce824SCristian Pallarés done 771*b3fce824SCristian Pallarés IFS=$func_echo_infix_1_IFS 772*b3fce824SCristian Pallarés} 773*b3fce824SCristian Pallarés 774*b3fce824SCristian Pallarés 775*b3fce824SCristian Pallarés# func_error ARG... 776*b3fce824SCristian Pallarés# ----------------- 777*b3fce824SCristian Pallarés# Echo program name prefixed message to standard error. 778*b3fce824SCristian Pallarésfunc_error () 779*b3fce824SCristian Pallarés{ 780*b3fce824SCristian Pallarés $debug_cmd 781*b3fce824SCristian Pallarés 782*b3fce824SCristian Pallarés $require_term_colors 783*b3fce824SCristian Pallarés 784*b3fce824SCristian Pallarés func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 785*b3fce824SCristian Pallarés} 786*b3fce824SCristian Pallarés 787*b3fce824SCristian Pallarés 788*b3fce824SCristian Pallarés# func_fatal_error ARG... 789*b3fce824SCristian Pallarés# ----------------------- 790*b3fce824SCristian Pallarés# Echo program name prefixed message to standard error, and exit. 791*b3fce824SCristian Pallarésfunc_fatal_error () 792*b3fce824SCristian Pallarés{ 793*b3fce824SCristian Pallarés $debug_cmd 794*b3fce824SCristian Pallarés 795*b3fce824SCristian Pallarés func_error "$*" 796*b3fce824SCristian Pallarés exit $EXIT_FAILURE 797*b3fce824SCristian Pallarés} 798*b3fce824SCristian Pallarés 799*b3fce824SCristian Pallarés 800*b3fce824SCristian Pallarés# func_grep EXPRESSION FILENAME 801*b3fce824SCristian Pallarés# ----------------------------- 802*b3fce824SCristian Pallarés# Check whether EXPRESSION matches any line of FILENAME, without output. 803*b3fce824SCristian Pallarésfunc_grep () 804*b3fce824SCristian Pallarés{ 805*b3fce824SCristian Pallarés $debug_cmd 806*b3fce824SCristian Pallarés 807*b3fce824SCristian Pallarés $GREP "$1" "$2" >/dev/null 2>&1 808*b3fce824SCristian Pallarés} 809*b3fce824SCristian Pallarés 810*b3fce824SCristian Pallarés 811*b3fce824SCristian Pallarés# func_len STRING 812*b3fce824SCristian Pallarés# --------------- 813*b3fce824SCristian Pallarés# Set func_len_result to the length of STRING. STRING may not 814*b3fce824SCristian Pallarés# start with a hyphen. 815*b3fce824SCristian Pallarés test -z "$_G_HAVE_XSI_OPS" \ 816*b3fce824SCristian Pallarés && (eval 'x=a/b/c; 817*b3fce824SCristian Pallarés test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 818*b3fce824SCristian Pallarés && _G_HAVE_XSI_OPS=yes 819*b3fce824SCristian Pallarés 820*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then 821*b3fce824SCristian Pallarés eval 'func_len () 822*b3fce824SCristian Pallarés { 823*b3fce824SCristian Pallarés $debug_cmd 824*b3fce824SCristian Pallarés 825*b3fce824SCristian Pallarés func_len_result=${#1} 826*b3fce824SCristian Pallarés }' 827189777a2SCristian Pallareselse 828*b3fce824SCristian Pallarés func_len () 829189777a2SCristian Pallares { 830*b3fce824SCristian Pallarés $debug_cmd 831*b3fce824SCristian Pallarés 832*b3fce824SCristian Pallarés func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 833*b3fce824SCristian Pallarés } 834*b3fce824SCristian Pallarésfi 835*b3fce824SCristian Pallarés 836*b3fce824SCristian Pallarés 837*b3fce824SCristian Pallarés# func_mkdir_p DIRECTORY-PATH 838*b3fce824SCristian Pallarés# --------------------------- 839*b3fce824SCristian Pallarés# Make sure the entire path to DIRECTORY-PATH is available. 840*b3fce824SCristian Pallarésfunc_mkdir_p () 841*b3fce824SCristian Pallarés{ 842*b3fce824SCristian Pallarés $debug_cmd 843*b3fce824SCristian Pallarés 844*b3fce824SCristian Pallarés _G_directory_path=$1 845*b3fce824SCristian Pallarés _G_dir_list= 846*b3fce824SCristian Pallarés 847*b3fce824SCristian Pallarés if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 848*b3fce824SCristian Pallarés 849*b3fce824SCristian Pallarés # Protect directory names starting with '-' 850*b3fce824SCristian Pallarés case $_G_directory_path in 851*b3fce824SCristian Pallarés -*) _G_directory_path=./$_G_directory_path ;; 852189777a2SCristian Pallares esac 853*b3fce824SCristian Pallarés 854*b3fce824SCristian Pallarés # While some portion of DIR does not yet exist... 855*b3fce824SCristian Pallarés while test ! -d "$_G_directory_path"; do 856*b3fce824SCristian Pallarés # ...make a list in topmost first order. Use a colon delimited 857*b3fce824SCristian Pallarés # list incase some portion of path contains whitespace. 858*b3fce824SCristian Pallarés _G_dir_list=$_G_directory_path:$_G_dir_list 859*b3fce824SCristian Pallarés 860*b3fce824SCristian Pallarés # If the last portion added has no slash in it, the list is done 861*b3fce824SCristian Pallarés case $_G_directory_path in */*) ;; *) break ;; esac 862*b3fce824SCristian Pallarés 863*b3fce824SCristian Pallarés # ...otherwise throw away the child directory and loop 864*b3fce824SCristian Pallarés _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 865*b3fce824SCristian Pallarés done 866*b3fce824SCristian Pallarés _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 867*b3fce824SCristian Pallarés 868*b3fce824SCristian Pallarés func_mkdir_p_IFS=$IFS; IFS=: 869*b3fce824SCristian Pallarés for _G_dir in $_G_dir_list; do 870*b3fce824SCristian Pallarés IFS=$func_mkdir_p_IFS 871*b3fce824SCristian Pallarés # mkdir can fail with a 'File exist' error if two processes 872*b3fce824SCristian Pallarés # try to create one of the directories concurrently. Don't 873*b3fce824SCristian Pallarés # stop in that case! 874*b3fce824SCristian Pallarés $MKDIR "$_G_dir" 2>/dev/null || : 875*b3fce824SCristian Pallarés done 876*b3fce824SCristian Pallarés IFS=$func_mkdir_p_IFS 877*b3fce824SCristian Pallarés 878*b3fce824SCristian Pallarés # Bail out if we (or some other process) failed to create a directory. 879*b3fce824SCristian Pallarés test -d "$_G_directory_path" || \ 880*b3fce824SCristian Pallarés func_fatal_error "Failed to create '$1'" 881*b3fce824SCristian Pallarés fi 882*b3fce824SCristian Pallarés} 883189777a2SCristian Pallares 884189777a2SCristian Pallares 885*b3fce824SCristian Pallarés# func_mktempdir [BASENAME] 886*b3fce824SCristian Pallarés# ------------------------- 887*b3fce824SCristian Pallarés# Make a temporary directory that won't clash with other running 888*b3fce824SCristian Pallarés# libtool processes, and avoids race conditions if possible. If 889*b3fce824SCristian Pallarés# given, BASENAME is the basename for that directory. 890*b3fce824SCristian Pallarésfunc_mktempdir () 891*b3fce824SCristian Pallarés{ 892*b3fce824SCristian Pallarés $debug_cmd 893*b3fce824SCristian Pallarés 894*b3fce824SCristian Pallarés _G_template=${TMPDIR-/tmp}/${1-$progname} 895*b3fce824SCristian Pallarés 896*b3fce824SCristian Pallarés if test : = "$opt_dry_run"; then 897*b3fce824SCristian Pallarés # Return a directory name, but don't create it in dry-run mode 898*b3fce824SCristian Pallarés _G_tmpdir=$_G_template-$$ 899*b3fce824SCristian Pallarés else 900*b3fce824SCristian Pallarés 901*b3fce824SCristian Pallarés # If mktemp works, use that first and foremost 902*b3fce824SCristian Pallarés _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 903*b3fce824SCristian Pallarés 904*b3fce824SCristian Pallarés if test ! -d "$_G_tmpdir"; then 905*b3fce824SCristian Pallarés # Failing that, at least try and use $RANDOM to avoid a race 906*b3fce824SCristian Pallarés _G_tmpdir=$_G_template-${RANDOM-0}$$ 907*b3fce824SCristian Pallarés 908*b3fce824SCristian Pallarés func_mktempdir_umask=`umask` 909*b3fce824SCristian Pallarés umask 0077 910*b3fce824SCristian Pallarés $MKDIR "$_G_tmpdir" 911*b3fce824SCristian Pallarés umask $func_mktempdir_umask 912*b3fce824SCristian Pallarés fi 913*b3fce824SCristian Pallarés 914*b3fce824SCristian Pallarés # If we're not in dry-run mode, bomb out on failure 915*b3fce824SCristian Pallarés test -d "$_G_tmpdir" || \ 916*b3fce824SCristian Pallarés func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 917*b3fce824SCristian Pallarés fi 918*b3fce824SCristian Pallarés 919*b3fce824SCristian Pallarés $ECHO "$_G_tmpdir" 920*b3fce824SCristian Pallarés} 921*b3fce824SCristian Pallarés 922189777a2SCristian Pallares 923189777a2SCristian Pallares# func_normal_abspath PATH 924*b3fce824SCristian Pallarés# ------------------------ 925189777a2SCristian Pallares# Remove doubled-up and trailing slashes, "." path components, 926189777a2SCristian Pallares# and cancel out any ".." path components in PATH after making 927189777a2SCristian Pallares# it an absolute path. 928189777a2SCristian Pallaresfunc_normal_abspath () 929189777a2SCristian Pallares{ 930*b3fce824SCristian Pallarés $debug_cmd 931*b3fce824SCristian Pallarés 932*b3fce824SCristian Pallarés # These SED scripts presuppose an absolute path with a trailing slash. 933*b3fce824SCristian Pallarés _G_pathcar='s|^/\([^/]*\).*$|\1|' 934*b3fce824SCristian Pallarés _G_pathcdr='s|^/[^/]*||' 935*b3fce824SCristian Pallarés _G_removedotparts=':dotsl 936*b3fce824SCristian Pallarés s|/\./|/|g 937*b3fce824SCristian Pallarés t dotsl 938*b3fce824SCristian Pallarés s|/\.$|/|' 939*b3fce824SCristian Pallarés _G_collapseslashes='s|/\{1,\}|/|g' 940*b3fce824SCristian Pallarés _G_finalslash='s|/*$|/|' 941*b3fce824SCristian Pallarés 942189777a2SCristian Pallares # Start from root dir and reassemble the path. 943189777a2SCristian Pallares func_normal_abspath_result= 944189777a2SCristian Pallares func_normal_abspath_tpath=$1 945189777a2SCristian Pallares func_normal_abspath_altnamespace= 946189777a2SCristian Pallares case $func_normal_abspath_tpath in 947189777a2SCristian Pallares "") 948189777a2SCristian Pallares # Empty path, that just means $cwd. 949189777a2SCristian Pallares func_stripname '' '/' "`pwd`" 950189777a2SCristian Pallares func_normal_abspath_result=$func_stripname_result 951189777a2SCristian Pallares return 952189777a2SCristian Pallares ;; 953189777a2SCristian Pallares # The next three entries are used to spot a run of precisely 954189777a2SCristian Pallares # two leading slashes without using negated character classes; 955189777a2SCristian Pallares # we take advantage of case's first-match behaviour. 956189777a2SCristian Pallares ///*) 957189777a2SCristian Pallares # Unusual form of absolute path, do nothing. 958189777a2SCristian Pallares ;; 959189777a2SCristian Pallares //*) 960189777a2SCristian Pallares # Not necessarily an ordinary path; POSIX reserves leading '//' 961189777a2SCristian Pallares # and for example Cygwin uses it to access remote file shares 962189777a2SCristian Pallares # over CIFS/SMB, so we conserve a leading double slash if found. 963189777a2SCristian Pallares func_normal_abspath_altnamespace=/ 964189777a2SCristian Pallares ;; 965189777a2SCristian Pallares /*) 966189777a2SCristian Pallares # Absolute path, do nothing. 967189777a2SCristian Pallares ;; 968189777a2SCristian Pallares *) 969189777a2SCristian Pallares # Relative path, prepend $cwd. 970189777a2SCristian Pallares func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 971189777a2SCristian Pallares ;; 972189777a2SCristian Pallares esac 973*b3fce824SCristian Pallarés 974189777a2SCristian Pallares # Cancel out all the simple stuff to save iterations. We also want 975189777a2SCristian Pallares # the path to end with a slash for ease of parsing, so make sure 976189777a2SCristian Pallares # there is one (and only one) here. 977189777a2SCristian Pallares func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 978*b3fce824SCristian Pallarés -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 979189777a2SCristian Pallares while :; do 980189777a2SCristian Pallares # Processed it all yet? 981*b3fce824SCristian Pallarés if test / = "$func_normal_abspath_tpath"; then 982189777a2SCristian Pallares # If we ascended to the root using ".." the result may be empty now. 983189777a2SCristian Pallares if test -z "$func_normal_abspath_result"; then 984189777a2SCristian Pallares func_normal_abspath_result=/ 985189777a2SCristian Pallares fi 986189777a2SCristian Pallares break 987189777a2SCristian Pallares fi 988189777a2SCristian Pallares func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 989*b3fce824SCristian Pallarés -e "$_G_pathcar"` 990189777a2SCristian Pallares func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 991*b3fce824SCristian Pallarés -e "$_G_pathcdr"` 992189777a2SCristian Pallares # Figure out what to do with it 993189777a2SCristian Pallares case $func_normal_abspath_tcomponent in 994189777a2SCristian Pallares "") 995189777a2SCristian Pallares # Trailing empty path component, ignore it. 996189777a2SCristian Pallares ;; 997189777a2SCristian Pallares ..) 998189777a2SCristian Pallares # Parent dir; strip last assembled component from result. 999189777a2SCristian Pallares func_dirname "$func_normal_abspath_result" 1000189777a2SCristian Pallares func_normal_abspath_result=$func_dirname_result 1001189777a2SCristian Pallares ;; 1002189777a2SCristian Pallares *) 1003189777a2SCristian Pallares # Actual path component, append it. 1004*b3fce824SCristian Pallarés func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1005189777a2SCristian Pallares ;; 1006189777a2SCristian Pallares esac 1007189777a2SCristian Pallares done 1008189777a2SCristian Pallares # Restore leading double-slash if one was found on entry. 1009189777a2SCristian Pallares func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1010189777a2SCristian Pallares} 1011189777a2SCristian Pallares 1012*b3fce824SCristian Pallarés 1013*b3fce824SCristian Pallarés# func_notquiet ARG... 1014*b3fce824SCristian Pallarés# -------------------- 1015*b3fce824SCristian Pallarés# Echo program name prefixed message only when not in quiet mode. 1016*b3fce824SCristian Pallarésfunc_notquiet () 1017*b3fce824SCristian Pallarés{ 1018*b3fce824SCristian Pallarés $debug_cmd 1019*b3fce824SCristian Pallarés 1020*b3fce824SCristian Pallarés $opt_quiet || func_echo ${1+"$@"} 1021*b3fce824SCristian Pallarés 1022*b3fce824SCristian Pallarés # A bug in bash halts the script if the last line of a function 1023*b3fce824SCristian Pallarés # fails when set -e is in force, so we need another command to 1024*b3fce824SCristian Pallarés # work around that: 1025*b3fce824SCristian Pallarés : 1026*b3fce824SCristian Pallarés} 1027*b3fce824SCristian Pallarés 1028*b3fce824SCristian Pallarés 1029189777a2SCristian Pallares# func_relative_path SRCDIR DSTDIR 1030*b3fce824SCristian Pallarés# -------------------------------- 1031*b3fce824SCristian Pallarés# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1032189777a2SCristian Pallaresfunc_relative_path () 1033189777a2SCristian Pallares{ 1034*b3fce824SCristian Pallarés $debug_cmd 1035*b3fce824SCristian Pallarés 1036189777a2SCristian Pallares func_relative_path_result= 1037189777a2SCristian Pallares func_normal_abspath "$1" 1038189777a2SCristian Pallares func_relative_path_tlibdir=$func_normal_abspath_result 1039189777a2SCristian Pallares func_normal_abspath "$2" 1040189777a2SCristian Pallares func_relative_path_tbindir=$func_normal_abspath_result 1041189777a2SCristian Pallares 1042189777a2SCristian Pallares # Ascend the tree starting from libdir 1043189777a2SCristian Pallares while :; do 1044189777a2SCristian Pallares # check if we have found a prefix of bindir 1045189777a2SCristian Pallares case $func_relative_path_tbindir in 1046189777a2SCristian Pallares $func_relative_path_tlibdir) 1047189777a2SCristian Pallares # found an exact match 1048189777a2SCristian Pallares func_relative_path_tcancelled= 1049189777a2SCristian Pallares break 1050189777a2SCristian Pallares ;; 1051189777a2SCristian Pallares $func_relative_path_tlibdir*) 1052189777a2SCristian Pallares # found a matching prefix 1053189777a2SCristian Pallares func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1054189777a2SCristian Pallares func_relative_path_tcancelled=$func_stripname_result 1055189777a2SCristian Pallares if test -z "$func_relative_path_result"; then 1056189777a2SCristian Pallares func_relative_path_result=. 1057189777a2SCristian Pallares fi 1058189777a2SCristian Pallares break 1059189777a2SCristian Pallares ;; 1060189777a2SCristian Pallares *) 1061189777a2SCristian Pallares func_dirname $func_relative_path_tlibdir 1062*b3fce824SCristian Pallarés func_relative_path_tlibdir=$func_dirname_result 1063*b3fce824SCristian Pallarés if test -z "$func_relative_path_tlibdir"; then 1064189777a2SCristian Pallares # Have to descend all the way to the root! 1065189777a2SCristian Pallares func_relative_path_result=../$func_relative_path_result 1066189777a2SCristian Pallares func_relative_path_tcancelled=$func_relative_path_tbindir 1067189777a2SCristian Pallares break 1068189777a2SCristian Pallares fi 1069189777a2SCristian Pallares func_relative_path_result=../$func_relative_path_result 1070189777a2SCristian Pallares ;; 1071189777a2SCristian Pallares esac 1072189777a2SCristian Pallares done 1073189777a2SCristian Pallares 1074189777a2SCristian Pallares # Now calculate path; take care to avoid doubling-up slashes. 1075189777a2SCristian Pallares func_stripname '' '/' "$func_relative_path_result" 1076189777a2SCristian Pallares func_relative_path_result=$func_stripname_result 1077189777a2SCristian Pallares func_stripname '/' '/' "$func_relative_path_tcancelled" 1078*b3fce824SCristian Pallarés if test -n "$func_stripname_result"; then 1079*b3fce824SCristian Pallarés func_append func_relative_path_result "/$func_stripname_result" 1080189777a2SCristian Pallares fi 1081189777a2SCristian Pallares 1082*b3fce824SCristian Pallarés # Normalisation. If bindir is libdir, return '.' else relative path. 1083*b3fce824SCristian Pallarés if test -n "$func_relative_path_result"; then 1084*b3fce824SCristian Pallarés func_stripname './' '' "$func_relative_path_result" 1085189777a2SCristian Pallares func_relative_path_result=$func_stripname_result 1086189777a2SCristian Pallares fi 1087189777a2SCristian Pallares 1088*b3fce824SCristian Pallarés test -n "$func_relative_path_result" || func_relative_path_result=. 1089189777a2SCristian Pallares 1090189777a2SCristian Pallares : 1091189777a2SCristian Pallares} 1092189777a2SCristian Pallares 1093189777a2SCristian Pallares 1094*b3fce824SCristian Pallarés# func_quote_for_eval ARG... 1095*b3fce824SCristian Pallarés# -------------------------- 1096*b3fce824SCristian Pallarés# Aesthetically quote ARGs to be evaled later. 1097*b3fce824SCristian Pallarés# This function returns two values: 1098*b3fce824SCristian Pallarés# i) func_quote_for_eval_result 1099*b3fce824SCristian Pallarés# double-quoted, suitable for a subsequent eval 1100*b3fce824SCristian Pallarés# ii) func_quote_for_eval_unquoted_result 1101*b3fce824SCristian Pallarés# has all characters that are still active within double 1102*b3fce824SCristian Pallarés# quotes backslashified. 1103189777a2SCristian Pallaresfunc_quote_for_eval () 1104189777a2SCristian Pallares{ 1105*b3fce824SCristian Pallarés $debug_cmd 1106*b3fce824SCristian Pallarés 1107*b3fce824SCristian Pallarés func_quote_for_eval_unquoted_result= 1108*b3fce824SCristian Pallarés func_quote_for_eval_result= 1109*b3fce824SCristian Pallarés while test 0 -lt $#; do 1110189777a2SCristian Pallares case $1 in 1111189777a2SCristian Pallares *[\\\`\"\$]*) 1112*b3fce824SCristian Pallarés _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; 1113189777a2SCristian Pallares *) 1114*b3fce824SCristian Pallarés _G_unquoted_arg=$1 ;; 1115189777a2SCristian Pallares esac 1116*b3fce824SCristian Pallarés if test -n "$func_quote_for_eval_unquoted_result"; then 1117*b3fce824SCristian Pallarés func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 1118*b3fce824SCristian Pallarés else 1119*b3fce824SCristian Pallarés func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 1120*b3fce824SCristian Pallarés fi 1121189777a2SCristian Pallares 1122*b3fce824SCristian Pallarés case $_G_unquoted_arg in 1123189777a2SCristian Pallares # Double-quote args containing shell metacharacters to delay 1124*b3fce824SCristian Pallarés # word splitting, command substitution and variable expansion 1125*b3fce824SCristian Pallarés # for a subsequent eval. 1126189777a2SCristian Pallares # Many Bourne shells cannot handle close brackets correctly 1127189777a2SCristian Pallares # in scan sets, so we specify it separately. 1128189777a2SCristian Pallares *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1129*b3fce824SCristian Pallarés _G_quoted_arg=\"$_G_unquoted_arg\" 1130189777a2SCristian Pallares ;; 1131189777a2SCristian Pallares *) 1132*b3fce824SCristian Pallarés _G_quoted_arg=$_G_unquoted_arg 1133*b3fce824SCristian Pallarés ;; 1134189777a2SCristian Pallares esac 1135*b3fce824SCristian Pallarés 1136*b3fce824SCristian Pallarés if test -n "$func_quote_for_eval_result"; then 1137*b3fce824SCristian Pallarés func_append func_quote_for_eval_result " $_G_quoted_arg" 1138*b3fce824SCristian Pallarés else 1139*b3fce824SCristian Pallarés func_append func_quote_for_eval_result "$_G_quoted_arg" 1140*b3fce824SCristian Pallarés fi 1141*b3fce824SCristian Pallarés shift 1142*b3fce824SCristian Pallarés done 1143189777a2SCristian Pallares} 1144189777a2SCristian Pallares 1145189777a2SCristian Pallares 1146*b3fce824SCristian Pallarés# func_quote_for_expand ARG 1147*b3fce824SCristian Pallarés# ------------------------- 1148189777a2SCristian Pallares# Aesthetically quote ARG to be evaled later; same as above, 1149189777a2SCristian Pallares# but do not quote variable references. 1150189777a2SCristian Pallaresfunc_quote_for_expand () 1151189777a2SCristian Pallares{ 1152*b3fce824SCristian Pallarés $debug_cmd 1153*b3fce824SCristian Pallarés 1154189777a2SCristian Pallares case $1 in 1155189777a2SCristian Pallares *[\\\`\"]*) 1156*b3fce824SCristian Pallarés _G_arg=`$ECHO "$1" | $SED \ 1157*b3fce824SCristian Pallarés -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 1158189777a2SCristian Pallares *) 1159*b3fce824SCristian Pallarés _G_arg=$1 ;; 1160189777a2SCristian Pallares esac 1161189777a2SCristian Pallares 1162*b3fce824SCristian Pallarés case $_G_arg in 1163189777a2SCristian Pallares # Double-quote args containing shell metacharacters to delay 1164189777a2SCristian Pallares # word splitting and command substitution for a subsequent eval. 1165189777a2SCristian Pallares # Many Bourne shells cannot handle close brackets correctly 1166189777a2SCristian Pallares # in scan sets, so we specify it separately. 1167189777a2SCristian Pallares *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1168*b3fce824SCristian Pallarés _G_arg=\"$_G_arg\" 1169189777a2SCristian Pallares ;; 1170189777a2SCristian Pallares esac 1171189777a2SCristian Pallares 1172*b3fce824SCristian Pallarés func_quote_for_expand_result=$_G_arg 1173189777a2SCristian Pallares} 1174189777a2SCristian Pallares 1175189777a2SCristian Pallares 1176*b3fce824SCristian Pallarés# func_stripname PREFIX SUFFIX NAME 1177*b3fce824SCristian Pallarés# --------------------------------- 1178*b3fce824SCristian Pallarés# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1179*b3fce824SCristian Pallarés# PREFIX and SUFFIX must not contain globbing or regex special 1180*b3fce824SCristian Pallarés# characters, hashes, percent signs, but SUFFIX may contain a leading 1181*b3fce824SCristian Pallarés# dot (in which case that matches only a dot). 1182*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then 1183*b3fce824SCristian Pallarés eval 'func_stripname () 1184*b3fce824SCristian Pallarés { 1185*b3fce824SCristian Pallarés $debug_cmd 1186*b3fce824SCristian Pallarés 1187*b3fce824SCristian Pallarés # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1188*b3fce824SCristian Pallarés # positional parameters, so assign one to ordinary variable first. 1189*b3fce824SCristian Pallarés func_stripname_result=$3 1190*b3fce824SCristian Pallarés func_stripname_result=${func_stripname_result#"$1"} 1191*b3fce824SCristian Pallarés func_stripname_result=${func_stripname_result%"$2"} 1192*b3fce824SCristian Pallarés }' 1193*b3fce824SCristian Pallaréselse 1194*b3fce824SCristian Pallarés func_stripname () 1195*b3fce824SCristian Pallarés { 1196*b3fce824SCristian Pallarés $debug_cmd 1197*b3fce824SCristian Pallarés 1198*b3fce824SCristian Pallarés case $2 in 1199*b3fce824SCristian Pallarés .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1200*b3fce824SCristian Pallarés *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1201*b3fce824SCristian Pallarés esac 1202*b3fce824SCristian Pallarés } 1203*b3fce824SCristian Pallarésfi 1204*b3fce824SCristian Pallarés 1205*b3fce824SCristian Pallarés 1206*b3fce824SCristian Pallarés# func_show_eval CMD [FAIL_EXP] 1207*b3fce824SCristian Pallarés# ----------------------------- 1208*b3fce824SCristian Pallarés# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1209189777a2SCristian Pallares# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1210189777a2SCristian Pallares# is given, then evaluate it. 1211189777a2SCristian Pallaresfunc_show_eval () 1212189777a2SCristian Pallares{ 1213*b3fce824SCristian Pallarés $debug_cmd 1214189777a2SCristian Pallares 1215*b3fce824SCristian Pallarés _G_cmd=$1 1216*b3fce824SCristian Pallarés _G_fail_exp=${2-':'} 1217*b3fce824SCristian Pallarés 1218*b3fce824SCristian Pallarés func_quote_for_expand "$_G_cmd" 1219*b3fce824SCristian Pallarés eval "func_notquiet $func_quote_for_expand_result" 1220*b3fce824SCristian Pallarés 1221*b3fce824SCristian Pallarés $opt_dry_run || { 1222*b3fce824SCristian Pallarés eval "$_G_cmd" 1223*b3fce824SCristian Pallarés _G_status=$? 1224*b3fce824SCristian Pallarés if test 0 -ne "$_G_status"; then 1225*b3fce824SCristian Pallarés eval "(exit $_G_status); $_G_fail_exp" 1226*b3fce824SCristian Pallarés fi 1227189777a2SCristian Pallares } 1228189777a2SCristian Pallares} 1229189777a2SCristian Pallares 1230189777a2SCristian Pallares 1231*b3fce824SCristian Pallarés# func_show_eval_locale CMD [FAIL_EXP] 1232*b3fce824SCristian Pallarés# ------------------------------------ 1233*b3fce824SCristian Pallarés# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1234189777a2SCristian Pallares# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1235189777a2SCristian Pallares# is given, then evaluate it. Use the saved locale for evaluation. 1236189777a2SCristian Pallaresfunc_show_eval_locale () 1237189777a2SCristian Pallares{ 1238*b3fce824SCristian Pallarés $debug_cmd 1239189777a2SCristian Pallares 1240*b3fce824SCristian Pallarés _G_cmd=$1 1241*b3fce824SCristian Pallarés _G_fail_exp=${2-':'} 1242*b3fce824SCristian Pallarés 1243*b3fce824SCristian Pallarés $opt_quiet || { 1244*b3fce824SCristian Pallarés func_quote_for_expand "$_G_cmd" 1245189777a2SCristian Pallares eval "func_echo $func_quote_for_expand_result" 1246189777a2SCristian Pallares } 1247189777a2SCristian Pallares 1248*b3fce824SCristian Pallarés $opt_dry_run || { 1249*b3fce824SCristian Pallarés eval "$_G_user_locale 1250*b3fce824SCristian Pallarés $_G_cmd" 1251*b3fce824SCristian Pallarés _G_status=$? 1252*b3fce824SCristian Pallarés eval "$_G_safe_locale" 1253*b3fce824SCristian Pallarés if test 0 -ne "$_G_status"; then 1254*b3fce824SCristian Pallarés eval "(exit $_G_status); $_G_fail_exp" 1255189777a2SCristian Pallares fi 1256189777a2SCristian Pallares } 1257*b3fce824SCristian Pallarés} 1258*b3fce824SCristian Pallarés 1259189777a2SCristian Pallares 1260189777a2SCristian Pallares# func_tr_sh 1261*b3fce824SCristian Pallarés# ---------- 1262189777a2SCristian Pallares# Turn $1 into a string suitable for a shell variable name. 1263189777a2SCristian Pallares# Result is stored in $func_tr_sh_result. All characters 1264189777a2SCristian Pallares# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1265189777a2SCristian Pallares# if $1 begins with a digit, a '_' is prepended as well. 1266189777a2SCristian Pallaresfunc_tr_sh () 1267189777a2SCristian Pallares{ 1268*b3fce824SCristian Pallarés $debug_cmd 1269*b3fce824SCristian Pallarés 1270189777a2SCristian Pallares case $1 in 1271189777a2SCristian Pallares [0-9]* | *[!a-zA-Z0-9_]*) 1272*b3fce824SCristian Pallarés func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1273189777a2SCristian Pallares ;; 1274189777a2SCristian Pallares * ) 1275189777a2SCristian Pallares func_tr_sh_result=$1 1276189777a2SCristian Pallares ;; 1277189777a2SCristian Pallares esac 1278189777a2SCristian Pallares} 1279189777a2SCristian Pallares 1280189777a2SCristian Pallares 1281*b3fce824SCristian Pallarés# func_verbose ARG... 1282*b3fce824SCristian Pallarés# ------------------- 1283*b3fce824SCristian Pallarés# Echo program name prefixed message in verbose mode only. 1284*b3fce824SCristian Pallarésfunc_verbose () 1285189777a2SCristian Pallares{ 1286*b3fce824SCristian Pallarés $debug_cmd 1287189777a2SCristian Pallares 1288*b3fce824SCristian Pallarés $opt_verbose && func_echo "$*" 1289*b3fce824SCristian Pallarés 1290*b3fce824SCristian Pallarés : 1291189777a2SCristian Pallares} 1292189777a2SCristian Pallares 1293*b3fce824SCristian Pallarés 1294*b3fce824SCristian Pallarés# func_warn_and_continue ARG... 1295*b3fce824SCristian Pallarés# ----------------------------- 1296*b3fce824SCristian Pallarés# Echo program name prefixed warning message to standard error. 1297*b3fce824SCristian Pallarésfunc_warn_and_continue () 1298189777a2SCristian Pallares{ 1299*b3fce824SCristian Pallarés $debug_cmd 1300189777a2SCristian Pallares 1301*b3fce824SCristian Pallarés $require_term_colors 1302*b3fce824SCristian Pallarés 1303*b3fce824SCristian Pallarés func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1304189777a2SCristian Pallares} 1305189777a2SCristian Pallares 1306*b3fce824SCristian Pallarés 1307*b3fce824SCristian Pallarés# func_warning CATEGORY ARG... 1308*b3fce824SCristian Pallarés# ---------------------------- 1309*b3fce824SCristian Pallarés# Echo program name prefixed warning message to standard error. Warning 1310*b3fce824SCristian Pallarés# messages can be filtered according to CATEGORY, where this function 1311*b3fce824SCristian Pallarés# elides messages where CATEGORY is not listed in the global variable 1312*b3fce824SCristian Pallarés# 'opt_warning_types'. 1313*b3fce824SCristian Pallarésfunc_warning () 1314*b3fce824SCristian Pallarés{ 1315*b3fce824SCristian Pallarés $debug_cmd 1316*b3fce824SCristian Pallarés 1317*b3fce824SCristian Pallarés # CATEGORY must be in the warning_categories list! 1318*b3fce824SCristian Pallarés case " $warning_categories " in 1319*b3fce824SCristian Pallarés *" $1 "*) ;; 1320*b3fce824SCristian Pallarés *) func_internal_error "invalid warning category '$1'" ;; 1321*b3fce824SCristian Pallarés esac 1322*b3fce824SCristian Pallarés 1323*b3fce824SCristian Pallarés _G_category=$1 1324*b3fce824SCristian Pallarés shift 1325*b3fce824SCristian Pallarés 1326*b3fce824SCristian Pallarés case " $opt_warning_types " in 1327*b3fce824SCristian Pallarés *" $_G_category "*) $warning_func ${1+"$@"} ;; 1328*b3fce824SCristian Pallarés esac 1329*b3fce824SCristian Pallarés} 1330*b3fce824SCristian Pallarés 1331*b3fce824SCristian Pallarés 1332*b3fce824SCristian Pallarés# func_sort_ver VER1 VER2 1333*b3fce824SCristian Pallarés# ----------------------- 1334*b3fce824SCristian Pallarés# 'sort -V' is not generally available. 1335*b3fce824SCristian Pallarés# Note this deviates from the version comparison in automake 1336*b3fce824SCristian Pallarés# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1337*b3fce824SCristian Pallarés# but this should suffice as we won't be specifying old 1338*b3fce824SCristian Pallarés# version formats or redundant trailing .0 in bootstrap.conf. 1339*b3fce824SCristian Pallarés# If we did want full compatibility then we should probably 1340*b3fce824SCristian Pallarés# use m4_version_compare from autoconf. 1341*b3fce824SCristian Pallarésfunc_sort_ver () 1342*b3fce824SCristian Pallarés{ 1343*b3fce824SCristian Pallarés $debug_cmd 1344*b3fce824SCristian Pallarés 1345*b3fce824SCristian Pallarés printf '%s\n%s\n' "$1" "$2" \ 1346*b3fce824SCristian Pallarés | 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 1347*b3fce824SCristian Pallarés} 1348*b3fce824SCristian Pallarés 1349*b3fce824SCristian Pallarés# func_lt_ver PREV CURR 1350*b3fce824SCristian Pallarés# --------------------- 1351*b3fce824SCristian Pallarés# Return true if PREV and CURR are in the correct order according to 1352*b3fce824SCristian Pallarés# func_sort_ver, otherwise false. Use it like this: 1353*b3fce824SCristian Pallarés# 1354*b3fce824SCristian Pallarés# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1355*b3fce824SCristian Pallarésfunc_lt_ver () 1356*b3fce824SCristian Pallarés{ 1357*b3fce824SCristian Pallarés $debug_cmd 1358*b3fce824SCristian Pallarés 1359*b3fce824SCristian Pallarés test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1360*b3fce824SCristian Pallarés} 1361*b3fce824SCristian Pallarés 1362*b3fce824SCristian Pallarés 1363*b3fce824SCristian Pallarés# Local variables: 1364*b3fce824SCristian Pallarés# mode: shell-script 1365*b3fce824SCristian Pallarés# sh-indentation: 2 1366*b3fce824SCristian Pallarés# eval: (add-hook 'before-save-hook 'time-stamp) 1367*b3fce824SCristian Pallarés# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1368*b3fce824SCristian Pallarés# time-stamp-time-zone: "UTC" 1369*b3fce824SCristian Pallarés# End: 1370*b3fce824SCristian Pallarés#! /bin/sh 1371*b3fce824SCristian Pallarés 1372*b3fce824SCristian Pallarés# Set a version string for this script. 1373*b3fce824SCristian Pallarésscriptversion=2014-01-07.03; # UTC 1374*b3fce824SCristian Pallarés 1375*b3fce824SCristian Pallarés# A portable, pluggable option parser for Bourne shell. 1376*b3fce824SCristian Pallarés# Written by Gary V. Vaughan, 2010 1377*b3fce824SCristian Pallarés 1378*b3fce824SCristian Pallarés# Copyright (C) 2010-2015 Free Software Foundation, Inc. 1379*b3fce824SCristian Pallarés# This is free software; see the source for copying conditions. There is NO 1380*b3fce824SCristian Pallarés# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1381*b3fce824SCristian Pallarés 1382*b3fce824SCristian Pallarés# This program is free software: you can redistribute it and/or modify 1383*b3fce824SCristian Pallarés# it under the terms of the GNU General Public License as published by 1384*b3fce824SCristian Pallarés# the Free Software Foundation, either version 3 of the License, or 1385*b3fce824SCristian Pallarés# (at your option) any later version. 1386*b3fce824SCristian Pallarés 1387*b3fce824SCristian Pallarés# This program is distributed in the hope that it will be useful, 1388*b3fce824SCristian Pallarés# but WITHOUT ANY WARRANTY; without even the implied warranty of 1389*b3fce824SCristian Pallarés# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1390*b3fce824SCristian Pallarés# GNU General Public License for more details. 1391*b3fce824SCristian Pallarés 1392*b3fce824SCristian Pallarés# You should have received a copy of the GNU General Public License 1393*b3fce824SCristian Pallarés# along with this program. If not, see <http://www.gnu.org/licenses/>. 1394*b3fce824SCristian Pallarés 1395*b3fce824SCristian Pallarés# Please report bugs or propose patches to [email protected]. 1396*b3fce824SCristian Pallarés 1397*b3fce824SCristian Pallarés 1398*b3fce824SCristian Pallarés## ------ ## 1399*b3fce824SCristian Pallarés## Usage. ## 1400*b3fce824SCristian Pallarés## ------ ## 1401*b3fce824SCristian Pallarés 1402*b3fce824SCristian Pallarés# This file is a library for parsing options in your shell scripts along 1403*b3fce824SCristian Pallarés# with assorted other useful supporting features that you can make use 1404*b3fce824SCristian Pallarés# of too. 1405*b3fce824SCristian Pallarés# 1406*b3fce824SCristian Pallarés# For the simplest scripts you might need only: 1407*b3fce824SCristian Pallarés# 1408*b3fce824SCristian Pallarés# #!/bin/sh 1409*b3fce824SCristian Pallarés# . relative/path/to/funclib.sh 1410*b3fce824SCristian Pallarés# . relative/path/to/options-parser 1411*b3fce824SCristian Pallarés# scriptversion=1.0 1412*b3fce824SCristian Pallarés# func_options ${1+"$@"} 1413*b3fce824SCristian Pallarés# eval set dummy "$func_options_result"; shift 1414*b3fce824SCristian Pallarés# ...rest of your script... 1415*b3fce824SCristian Pallarés# 1416*b3fce824SCristian Pallarés# In order for the '--version' option to work, you will need to have a 1417*b3fce824SCristian Pallarés# suitably formatted comment like the one at the top of this file 1418*b3fce824SCristian Pallarés# starting with '# Written by ' and ending with '# warranty; '. 1419*b3fce824SCristian Pallarés# 1420*b3fce824SCristian Pallarés# For '-h' and '--help' to work, you will also need a one line 1421*b3fce824SCristian Pallarés# description of your script's purpose in a comment directly above the 1422*b3fce824SCristian Pallarés# '# Written by ' line, like the one at the top of this file. 1423*b3fce824SCristian Pallarés# 1424*b3fce824SCristian Pallarés# The default options also support '--debug', which will turn on shell 1425*b3fce824SCristian Pallarés# execution tracing (see the comment above debug_cmd below for another 1426*b3fce824SCristian Pallarés# use), and '--verbose' and the func_verbose function to allow your script 1427*b3fce824SCristian Pallarés# to display verbose messages only when your user has specified 1428*b3fce824SCristian Pallarés# '--verbose'. 1429*b3fce824SCristian Pallarés# 1430*b3fce824SCristian Pallarés# After sourcing this file, you can plug processing for additional 1431*b3fce824SCristian Pallarés# options by amending the variables from the 'Configuration' section 1432*b3fce824SCristian Pallarés# below, and following the instructions in the 'Option parsing' 1433*b3fce824SCristian Pallarés# section further down. 1434*b3fce824SCristian Pallarés 1435*b3fce824SCristian Pallarés## -------------- ## 1436*b3fce824SCristian Pallarés## Configuration. ## 1437*b3fce824SCristian Pallarés## -------------- ## 1438*b3fce824SCristian Pallarés 1439*b3fce824SCristian Pallarés# You should override these variables in your script after sourcing this 1440*b3fce824SCristian Pallarés# file so that they reflect the customisations you have added to the 1441*b3fce824SCristian Pallarés# option parser. 1442*b3fce824SCristian Pallarés 1443*b3fce824SCristian Pallarés# The usage line for option parsing errors and the start of '-h' and 1444*b3fce824SCristian Pallarés# '--help' output messages. You can embed shell variables for delayed 1445*b3fce824SCristian Pallarés# expansion at the time the message is displayed, but you will need to 1446*b3fce824SCristian Pallarés# quote other shell meta-characters carefully to prevent them being 1447*b3fce824SCristian Pallarés# expanded when the contents are evaled. 1448*b3fce824SCristian Pallarésusage='$progpath [OPTION]...' 1449*b3fce824SCristian Pallarés 1450*b3fce824SCristian Pallarés# Short help message in response to '-h' and '--help'. Add to this or 1451*b3fce824SCristian Pallarés# override it after sourcing this library to reflect the full set of 1452*b3fce824SCristian Pallarés# options your script accepts. 1453*b3fce824SCristian Pallarésusage_message="\ 1454*b3fce824SCristian Pallarés --debug enable verbose shell tracing 1455*b3fce824SCristian Pallarés -W, --warnings=CATEGORY 1456*b3fce824SCristian Pallarés report the warnings falling in CATEGORY [all] 1457*b3fce824SCristian Pallarés -v, --verbose verbosely report processing 1458*b3fce824SCristian Pallarés --version print version information and exit 1459*b3fce824SCristian Pallarés -h, --help print short or long help message and exit 1460*b3fce824SCristian Pallarés" 1461*b3fce824SCristian Pallarés 1462*b3fce824SCristian Pallarés# Additional text appended to 'usage_message' in response to '--help'. 1463*b3fce824SCristian Pallaréslong_help_message=" 1464*b3fce824SCristian PallarésWarning categories include: 1465*b3fce824SCristian Pallarés 'all' show all warnings 1466*b3fce824SCristian Pallarés 'none' turn off all the warnings 1467*b3fce824SCristian Pallarés 'error' warnings are treated as fatal errors" 1468*b3fce824SCristian Pallarés 1469*b3fce824SCristian Pallarés# Help message printed before fatal option parsing errors. 1470*b3fce824SCristian Pallarésfatal_help="Try '\$progname --help' for more information." 1471*b3fce824SCristian Pallarés 1472*b3fce824SCristian Pallarés 1473*b3fce824SCristian Pallarés 1474*b3fce824SCristian Pallarés## ------------------------- ## 1475*b3fce824SCristian Pallarés## Hook function management. ## 1476*b3fce824SCristian Pallarés## ------------------------- ## 1477*b3fce824SCristian Pallarés 1478*b3fce824SCristian Pallarés# This section contains functions for adding, removing, and running hooks 1479*b3fce824SCristian Pallarés# to the main code. A hook is just a named list of of function, that can 1480*b3fce824SCristian Pallarés# be run in order later on. 1481*b3fce824SCristian Pallarés 1482*b3fce824SCristian Pallarés# func_hookable FUNC_NAME 1483*b3fce824SCristian Pallarés# ----------------------- 1484*b3fce824SCristian Pallarés# Declare that FUNC_NAME will run hooks added with 1485*b3fce824SCristian Pallarés# 'func_add_hook FUNC_NAME ...'. 1486*b3fce824SCristian Pallarésfunc_hookable () 1487*b3fce824SCristian Pallarés{ 1488*b3fce824SCristian Pallarés $debug_cmd 1489*b3fce824SCristian Pallarés 1490*b3fce824SCristian Pallarés func_append hookable_fns " $1" 1491*b3fce824SCristian Pallarés} 1492*b3fce824SCristian Pallarés 1493*b3fce824SCristian Pallarés 1494*b3fce824SCristian Pallarés# func_add_hook FUNC_NAME HOOK_FUNC 1495*b3fce824SCristian Pallarés# --------------------------------- 1496*b3fce824SCristian Pallarés# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1497*b3fce824SCristian Pallarés# first have been declared "hookable" by a call to 'func_hookable'. 1498*b3fce824SCristian Pallarésfunc_add_hook () 1499*b3fce824SCristian Pallarés{ 1500*b3fce824SCristian Pallarés $debug_cmd 1501*b3fce824SCristian Pallarés 1502*b3fce824SCristian Pallarés case " $hookable_fns " in 1503*b3fce824SCristian Pallarés *" $1 "*) ;; 1504*b3fce824SCristian Pallarés *) func_fatal_error "'$1' does not accept hook functions." ;; 1505*b3fce824SCristian Pallarés esac 1506*b3fce824SCristian Pallarés 1507*b3fce824SCristian Pallarés eval func_append ${1}_hooks '" $2"' 1508*b3fce824SCristian Pallarés} 1509*b3fce824SCristian Pallarés 1510*b3fce824SCristian Pallarés 1511*b3fce824SCristian Pallarés# func_remove_hook FUNC_NAME HOOK_FUNC 1512*b3fce824SCristian Pallarés# ------------------------------------ 1513*b3fce824SCristian Pallarés# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 1514*b3fce824SCristian Pallarésfunc_remove_hook () 1515*b3fce824SCristian Pallarés{ 1516*b3fce824SCristian Pallarés $debug_cmd 1517*b3fce824SCristian Pallarés 1518*b3fce824SCristian Pallarés eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1519*b3fce824SCristian Pallarés} 1520*b3fce824SCristian Pallarés 1521*b3fce824SCristian Pallarés 1522*b3fce824SCristian Pallarés# func_run_hooks FUNC_NAME [ARG]... 1523*b3fce824SCristian Pallarés# --------------------------------- 1524*b3fce824SCristian Pallarés# Run all hook functions registered to FUNC_NAME. 1525*b3fce824SCristian Pallarés# It is assumed that the list of hook functions contains nothing more 1526*b3fce824SCristian Pallarés# than a whitespace-delimited list of legal shell function names, and 1527*b3fce824SCristian Pallarés# no effort is wasted trying to catch shell meta-characters or preserve 1528*b3fce824SCristian Pallarés# whitespace. 1529*b3fce824SCristian Pallarésfunc_run_hooks () 1530*b3fce824SCristian Pallarés{ 1531*b3fce824SCristian Pallarés $debug_cmd 1532*b3fce824SCristian Pallarés 1533*b3fce824SCristian Pallarés case " $hookable_fns " in 1534*b3fce824SCristian Pallarés *" $1 "*) ;; 1535*b3fce824SCristian Pallarés *) func_fatal_error "'$1' does not support hook funcions.n" ;; 1536*b3fce824SCristian Pallarés esac 1537*b3fce824SCristian Pallarés 1538*b3fce824SCristian Pallarés eval _G_hook_fns=\$$1_hooks; shift 1539*b3fce824SCristian Pallarés 1540*b3fce824SCristian Pallarés for _G_hook in $_G_hook_fns; do 1541*b3fce824SCristian Pallarés eval $_G_hook '"$@"' 1542*b3fce824SCristian Pallarés 1543*b3fce824SCristian Pallarés # store returned options list back into positional 1544*b3fce824SCristian Pallarés # parameters for next 'cmd' execution. 1545*b3fce824SCristian Pallarés eval _G_hook_result=\$${_G_hook}_result 1546*b3fce824SCristian Pallarés eval set dummy "$_G_hook_result"; shift 1547*b3fce824SCristian Pallarés done 1548*b3fce824SCristian Pallarés 1549*b3fce824SCristian Pallarés func_quote_for_eval ${1+"$@"} 1550*b3fce824SCristian Pallarés func_run_hooks_result=$func_quote_for_eval_result 1551*b3fce824SCristian Pallarés} 1552*b3fce824SCristian Pallarés 1553*b3fce824SCristian Pallarés 1554*b3fce824SCristian Pallarés 1555*b3fce824SCristian Pallarés## --------------- ## 1556*b3fce824SCristian Pallarés## Option parsing. ## 1557*b3fce824SCristian Pallarés## --------------- ## 1558*b3fce824SCristian Pallarés 1559*b3fce824SCristian Pallarés# In order to add your own option parsing hooks, you must accept the 1560*b3fce824SCristian Pallarés# full positional parameter list in your hook function, remove any 1561*b3fce824SCristian Pallarés# options that you action, and then pass back the remaining unprocessed 1562*b3fce824SCristian Pallarés# options in '<hooked_function_name>_result', escaped suitably for 1563*b3fce824SCristian Pallarés# 'eval'. Like this: 1564*b3fce824SCristian Pallarés# 1565*b3fce824SCristian Pallarés# my_options_prep () 1566*b3fce824SCristian Pallarés# { 1567*b3fce824SCristian Pallarés# $debug_cmd 1568*b3fce824SCristian Pallarés# 1569*b3fce824SCristian Pallarés# # Extend the existing usage message. 1570*b3fce824SCristian Pallarés# usage_message=$usage_message' 1571*b3fce824SCristian Pallarés# -s, --silent don'\''t print informational messages 1572*b3fce824SCristian Pallarés# ' 1573*b3fce824SCristian Pallarés# 1574*b3fce824SCristian Pallarés# func_quote_for_eval ${1+"$@"} 1575*b3fce824SCristian Pallarés# my_options_prep_result=$func_quote_for_eval_result 1576*b3fce824SCristian Pallarés# } 1577*b3fce824SCristian Pallarés# func_add_hook func_options_prep my_options_prep 1578*b3fce824SCristian Pallarés# 1579*b3fce824SCristian Pallarés# 1580*b3fce824SCristian Pallarés# my_silent_option () 1581*b3fce824SCristian Pallarés# { 1582*b3fce824SCristian Pallarés# $debug_cmd 1583*b3fce824SCristian Pallarés# 1584*b3fce824SCristian Pallarés# # Note that for efficiency, we parse as many options as we can 1585*b3fce824SCristian Pallarés# # recognise in a loop before passing the remainder back to the 1586*b3fce824SCristian Pallarés# # caller on the first unrecognised argument we encounter. 1587*b3fce824SCristian Pallarés# while test $# -gt 0; do 1588*b3fce824SCristian Pallarés# opt=$1; shift 1589*b3fce824SCristian Pallarés# case $opt in 1590*b3fce824SCristian Pallarés# --silent|-s) opt_silent=: ;; 1591*b3fce824SCristian Pallarés# # Separate non-argument short options: 1592*b3fce824SCristian Pallarés# -s*) func_split_short_opt "$_G_opt" 1593*b3fce824SCristian Pallarés# set dummy "$func_split_short_opt_name" \ 1594*b3fce824SCristian Pallarés# "-$func_split_short_opt_arg" ${1+"$@"} 1595*b3fce824SCristian Pallarés# shift 1596*b3fce824SCristian Pallarés# ;; 1597*b3fce824SCristian Pallarés# *) set dummy "$_G_opt" "$*"; shift; break ;; 1598*b3fce824SCristian Pallarés# esac 1599*b3fce824SCristian Pallarés# done 1600*b3fce824SCristian Pallarés# 1601*b3fce824SCristian Pallarés# func_quote_for_eval ${1+"$@"} 1602*b3fce824SCristian Pallarés# my_silent_option_result=$func_quote_for_eval_result 1603*b3fce824SCristian Pallarés# } 1604*b3fce824SCristian Pallarés# func_add_hook func_parse_options my_silent_option 1605*b3fce824SCristian Pallarés# 1606*b3fce824SCristian Pallarés# 1607*b3fce824SCristian Pallarés# my_option_validation () 1608*b3fce824SCristian Pallarés# { 1609*b3fce824SCristian Pallarés# $debug_cmd 1610*b3fce824SCristian Pallarés# 1611*b3fce824SCristian Pallarés# $opt_silent && $opt_verbose && func_fatal_help "\ 1612*b3fce824SCristian Pallarés# '--silent' and '--verbose' options are mutually exclusive." 1613*b3fce824SCristian Pallarés# 1614*b3fce824SCristian Pallarés# func_quote_for_eval ${1+"$@"} 1615*b3fce824SCristian Pallarés# my_option_validation_result=$func_quote_for_eval_result 1616*b3fce824SCristian Pallarés# } 1617*b3fce824SCristian Pallarés# func_add_hook func_validate_options my_option_validation 1618*b3fce824SCristian Pallarés# 1619*b3fce824SCristian Pallarés# You'll alse need to manually amend $usage_message to reflect the extra 1620*b3fce824SCristian Pallarés# options you parse. It's preferable to append if you can, so that 1621*b3fce824SCristian Pallarés# multiple option parsing hooks can be added safely. 1622*b3fce824SCristian Pallarés 1623*b3fce824SCristian Pallarés 1624*b3fce824SCristian Pallarés# func_options [ARG]... 1625*b3fce824SCristian Pallarés# --------------------- 1626*b3fce824SCristian Pallarés# All the functions called inside func_options are hookable. See the 1627*b3fce824SCristian Pallarés# individual implementations for details. 1628*b3fce824SCristian Pallarésfunc_hookable func_options 1629*b3fce824SCristian Pallarésfunc_options () 1630*b3fce824SCristian Pallarés{ 1631*b3fce824SCristian Pallarés $debug_cmd 1632*b3fce824SCristian Pallarés 1633*b3fce824SCristian Pallarés func_options_prep ${1+"$@"} 1634*b3fce824SCristian Pallarés eval func_parse_options \ 1635*b3fce824SCristian Pallarés ${func_options_prep_result+"$func_options_prep_result"} 1636*b3fce824SCristian Pallarés eval func_validate_options \ 1637*b3fce824SCristian Pallarés ${func_parse_options_result+"$func_parse_options_result"} 1638*b3fce824SCristian Pallarés 1639*b3fce824SCristian Pallarés eval func_run_hooks func_options \ 1640*b3fce824SCristian Pallarés ${func_validate_options_result+"$func_validate_options_result"} 1641*b3fce824SCristian Pallarés 1642*b3fce824SCristian Pallarés # save modified positional parameters for caller 1643*b3fce824SCristian Pallarés func_options_result=$func_run_hooks_result 1644*b3fce824SCristian Pallarés} 1645*b3fce824SCristian Pallarés 1646*b3fce824SCristian Pallarés 1647*b3fce824SCristian Pallarés# func_options_prep [ARG]... 1648*b3fce824SCristian Pallarés# -------------------------- 1649*b3fce824SCristian Pallarés# All initialisations required before starting the option parse loop. 1650*b3fce824SCristian Pallarés# Note that when calling hook functions, we pass through the list of 1651*b3fce824SCristian Pallarés# positional parameters. If a hook function modifies that list, and 1652*b3fce824SCristian Pallarés# needs to propogate that back to rest of this script, then the complete 1653*b3fce824SCristian Pallarés# modified list must be put in 'func_run_hooks_result' before 1654*b3fce824SCristian Pallarés# returning. 1655*b3fce824SCristian Pallarésfunc_hookable func_options_prep 1656*b3fce824SCristian Pallarésfunc_options_prep () 1657*b3fce824SCristian Pallarés{ 1658*b3fce824SCristian Pallarés $debug_cmd 1659*b3fce824SCristian Pallarés 1660*b3fce824SCristian Pallarés # Option defaults: 1661*b3fce824SCristian Pallarés opt_verbose=false 1662*b3fce824SCristian Pallarés opt_warning_types= 1663*b3fce824SCristian Pallarés 1664*b3fce824SCristian Pallarés func_run_hooks func_options_prep ${1+"$@"} 1665*b3fce824SCristian Pallarés 1666*b3fce824SCristian Pallarés # save modified positional parameters for caller 1667*b3fce824SCristian Pallarés func_options_prep_result=$func_run_hooks_result 1668*b3fce824SCristian Pallarés} 1669*b3fce824SCristian Pallarés 1670*b3fce824SCristian Pallarés 1671*b3fce824SCristian Pallarés# func_parse_options [ARG]... 1672*b3fce824SCristian Pallarés# --------------------------- 1673*b3fce824SCristian Pallarés# The main option parsing loop. 1674*b3fce824SCristian Pallarésfunc_hookable func_parse_options 1675*b3fce824SCristian Pallarésfunc_parse_options () 1676*b3fce824SCristian Pallarés{ 1677*b3fce824SCristian Pallarés $debug_cmd 1678*b3fce824SCristian Pallarés 1679*b3fce824SCristian Pallarés func_parse_options_result= 1680*b3fce824SCristian Pallarés 1681*b3fce824SCristian Pallarés # this just eases exit handling 1682*b3fce824SCristian Pallarés while test $# -gt 0; do 1683*b3fce824SCristian Pallarés # Defer to hook functions for initial option parsing, so they 1684*b3fce824SCristian Pallarés # get priority in the event of reusing an option name. 1685*b3fce824SCristian Pallarés func_run_hooks func_parse_options ${1+"$@"} 1686*b3fce824SCristian Pallarés 1687*b3fce824SCristian Pallarés # Adjust func_parse_options positional parameters to match 1688*b3fce824SCristian Pallarés eval set dummy "$func_run_hooks_result"; shift 1689*b3fce824SCristian Pallarés 1690*b3fce824SCristian Pallarés # Break out of the loop if we already parsed every option. 1691*b3fce824SCristian Pallarés test $# -gt 0 || break 1692*b3fce824SCristian Pallarés 1693*b3fce824SCristian Pallarés _G_opt=$1 1694*b3fce824SCristian Pallarés shift 1695*b3fce824SCristian Pallarés case $_G_opt in 1696*b3fce824SCristian Pallarés --debug|-x) debug_cmd='set -x' 1697*b3fce824SCristian Pallarés func_echo "enabling shell trace mode" 1698*b3fce824SCristian Pallarés $debug_cmd 1699*b3fce824SCristian Pallarés ;; 1700*b3fce824SCristian Pallarés 1701*b3fce824SCristian Pallarés --no-warnings|--no-warning|--no-warn) 1702*b3fce824SCristian Pallarés set dummy --warnings none ${1+"$@"} 1703*b3fce824SCristian Pallarés shift 1704*b3fce824SCristian Pallarés ;; 1705*b3fce824SCristian Pallarés 1706*b3fce824SCristian Pallarés --warnings|--warning|-W) 1707*b3fce824SCristian Pallarés test $# = 0 && func_missing_arg $_G_opt && break 1708*b3fce824SCristian Pallarés case " $warning_categories $1" in 1709*b3fce824SCristian Pallarés *" $1 "*) 1710*b3fce824SCristian Pallarés # trailing space prevents matching last $1 above 1711*b3fce824SCristian Pallarés func_append_uniq opt_warning_types " $1" 1712*b3fce824SCristian Pallarés ;; 1713*b3fce824SCristian Pallarés *all) 1714*b3fce824SCristian Pallarés opt_warning_types=$warning_categories 1715*b3fce824SCristian Pallarés ;; 1716*b3fce824SCristian Pallarés *none) 1717*b3fce824SCristian Pallarés opt_warning_types=none 1718*b3fce824SCristian Pallarés warning_func=: 1719*b3fce824SCristian Pallarés ;; 1720*b3fce824SCristian Pallarés *error) 1721*b3fce824SCristian Pallarés opt_warning_types=$warning_categories 1722*b3fce824SCristian Pallarés warning_func=func_fatal_error 1723*b3fce824SCristian Pallarés ;; 1724*b3fce824SCristian Pallarés *) 1725*b3fce824SCristian Pallarés func_fatal_error \ 1726*b3fce824SCristian Pallarés "unsupported warning category: '$1'" 1727*b3fce824SCristian Pallarés ;; 1728*b3fce824SCristian Pallarés esac 1729*b3fce824SCristian Pallarés shift 1730*b3fce824SCristian Pallarés ;; 1731*b3fce824SCristian Pallarés 1732*b3fce824SCristian Pallarés --verbose|-v) opt_verbose=: ;; 1733*b3fce824SCristian Pallarés --version) func_version ;; 1734*b3fce824SCristian Pallarés -\?|-h) func_usage ;; 1735*b3fce824SCristian Pallarés --help) func_help ;; 1736*b3fce824SCristian Pallarés 1737*b3fce824SCristian Pallarés # Separate optargs to long options (plugins may need this): 1738*b3fce824SCristian Pallarés --*=*) func_split_equals "$_G_opt" 1739*b3fce824SCristian Pallarés set dummy "$func_split_equals_lhs" \ 1740*b3fce824SCristian Pallarés "$func_split_equals_rhs" ${1+"$@"} 1741*b3fce824SCristian Pallarés shift 1742*b3fce824SCristian Pallarés ;; 1743*b3fce824SCristian Pallarés 1744*b3fce824SCristian Pallarés # Separate optargs to short options: 1745*b3fce824SCristian Pallarés -W*) 1746*b3fce824SCristian Pallarés func_split_short_opt "$_G_opt" 1747*b3fce824SCristian Pallarés set dummy "$func_split_short_opt_name" \ 1748*b3fce824SCristian Pallarés "$func_split_short_opt_arg" ${1+"$@"} 1749*b3fce824SCristian Pallarés shift 1750*b3fce824SCristian Pallarés ;; 1751*b3fce824SCristian Pallarés 1752*b3fce824SCristian Pallarés # Separate non-argument short options: 1753*b3fce824SCristian Pallarés -\?*|-h*|-v*|-x*) 1754*b3fce824SCristian Pallarés func_split_short_opt "$_G_opt" 1755*b3fce824SCristian Pallarés set dummy "$func_split_short_opt_name" \ 1756*b3fce824SCristian Pallarés "-$func_split_short_opt_arg" ${1+"$@"} 1757*b3fce824SCristian Pallarés shift 1758*b3fce824SCristian Pallarés ;; 1759*b3fce824SCristian Pallarés 1760*b3fce824SCristian Pallarés --) break ;; 1761*b3fce824SCristian Pallarés -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 1762*b3fce824SCristian Pallarés *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1763*b3fce824SCristian Pallarés esac 1764*b3fce824SCristian Pallarés done 1765*b3fce824SCristian Pallarés 1766*b3fce824SCristian Pallarés # save modified positional parameters for caller 1767*b3fce824SCristian Pallarés func_quote_for_eval ${1+"$@"} 1768*b3fce824SCristian Pallarés func_parse_options_result=$func_quote_for_eval_result 1769*b3fce824SCristian Pallarés} 1770*b3fce824SCristian Pallarés 1771*b3fce824SCristian Pallarés 1772*b3fce824SCristian Pallarés# func_validate_options [ARG]... 1773*b3fce824SCristian Pallarés# ------------------------------ 1774*b3fce824SCristian Pallarés# Perform any sanity checks on option settings and/or unconsumed 1775*b3fce824SCristian Pallarés# arguments. 1776*b3fce824SCristian Pallarésfunc_hookable func_validate_options 1777*b3fce824SCristian Pallarésfunc_validate_options () 1778*b3fce824SCristian Pallarés{ 1779*b3fce824SCristian Pallarés $debug_cmd 1780*b3fce824SCristian Pallarés 1781*b3fce824SCristian Pallarés # Display all warnings if -W was not given. 1782*b3fce824SCristian Pallarés test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 1783*b3fce824SCristian Pallarés 1784*b3fce824SCristian Pallarés func_run_hooks func_validate_options ${1+"$@"} 1785*b3fce824SCristian Pallarés 1786*b3fce824SCristian Pallarés # Bail if the options were screwed! 1787*b3fce824SCristian Pallarés $exit_cmd $EXIT_FAILURE 1788*b3fce824SCristian Pallarés 1789*b3fce824SCristian Pallarés # save modified positional parameters for caller 1790*b3fce824SCristian Pallarés func_validate_options_result=$func_run_hooks_result 1791*b3fce824SCristian Pallarés} 1792*b3fce824SCristian Pallarés 1793*b3fce824SCristian Pallarés 1794*b3fce824SCristian Pallarés 1795*b3fce824SCristian Pallarés## ----------------- ## 1796*b3fce824SCristian Pallarés## Helper functions. ## 1797*b3fce824SCristian Pallarés## ----------------- ## 1798*b3fce824SCristian Pallarés 1799*b3fce824SCristian Pallarés# This section contains the helper functions used by the rest of the 1800*b3fce824SCristian Pallarés# hookable option parser framework in ascii-betical order. 1801*b3fce824SCristian Pallarés 1802*b3fce824SCristian Pallarés 1803*b3fce824SCristian Pallarés# func_fatal_help ARG... 1804*b3fce824SCristian Pallarés# ---------------------- 1805*b3fce824SCristian Pallarés# Echo program name prefixed message to standard error, followed by 1806*b3fce824SCristian Pallarés# a help hint, and exit. 1807*b3fce824SCristian Pallarésfunc_fatal_help () 1808*b3fce824SCristian Pallarés{ 1809*b3fce824SCristian Pallarés $debug_cmd 1810*b3fce824SCristian Pallarés 1811*b3fce824SCristian Pallarés eval \$ECHO \""Usage: $usage"\" 1812*b3fce824SCristian Pallarés eval \$ECHO \""$fatal_help"\" 1813*b3fce824SCristian Pallarés func_error ${1+"$@"} 1814*b3fce824SCristian Pallarés exit $EXIT_FAILURE 1815*b3fce824SCristian Pallarés} 1816*b3fce824SCristian Pallarés 1817*b3fce824SCristian Pallarés 1818*b3fce824SCristian Pallarés# func_help 1819*b3fce824SCristian Pallarés# --------- 1820*b3fce824SCristian Pallarés# Echo long help message to standard output and exit. 1821189777a2SCristian Pallaresfunc_help () 1822189777a2SCristian Pallares{ 1823*b3fce824SCristian Pallarés $debug_cmd 1824189777a2SCristian Pallares 1825*b3fce824SCristian Pallarés func_usage_message 1826*b3fce824SCristian Pallarés $ECHO "$long_help_message" 1827*b3fce824SCristian Pallarés exit 0 1828189777a2SCristian Pallares} 1829189777a2SCristian Pallares 1830*b3fce824SCristian Pallarés 1831*b3fce824SCristian Pallarés# func_missing_arg ARGNAME 1832*b3fce824SCristian Pallarés# ------------------------ 1833189777a2SCristian Pallares# Echo program name prefixed message to standard error and set global 1834189777a2SCristian Pallares# exit_cmd. 1835189777a2SCristian Pallaresfunc_missing_arg () 1836189777a2SCristian Pallares{ 1837*b3fce824SCristian Pallarés $debug_cmd 1838189777a2SCristian Pallares 1839*b3fce824SCristian Pallarés func_error "Missing argument for '$1'." 1840189777a2SCristian Pallares exit_cmd=exit 1841189777a2SCristian Pallares} 1842189777a2SCristian Pallares 1843189777a2SCristian Pallares 1844*b3fce824SCristian Pallarés# func_split_equals STRING 1845*b3fce824SCristian Pallarés# ------------------------ 1846*b3fce824SCristian Pallarés# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 1847*b3fce824SCristian Pallarés# splitting STRING at the '=' sign. 1848*b3fce824SCristian Pallaréstest -z "$_G_HAVE_XSI_OPS" \ 1849*b3fce824SCristian Pallarés && (eval 'x=a/b/c; 1850*b3fce824SCristian Pallarés test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 1851*b3fce824SCristian Pallarés && _G_HAVE_XSI_OPS=yes 1852*b3fce824SCristian Pallarés 1853*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS" 1854*b3fce824SCristian Pallarésthen 1855*b3fce824SCristian Pallarés # This is an XSI compatible shell, allowing a faster implementation... 1856*b3fce824SCristian Pallarés eval 'func_split_equals () 1857*b3fce824SCristian Pallarés { 1858*b3fce824SCristian Pallarés $debug_cmd 1859*b3fce824SCristian Pallarés 1860*b3fce824SCristian Pallarés func_split_equals_lhs=${1%%=*} 1861*b3fce824SCristian Pallarés func_split_equals_rhs=${1#*=} 1862*b3fce824SCristian Pallarés test "x$func_split_equals_lhs" = "x$1" \ 1863*b3fce824SCristian Pallarés && func_split_equals_rhs= 1864*b3fce824SCristian Pallarés }' 1865*b3fce824SCristian Pallaréselse 1866*b3fce824SCristian Pallarés # ...otherwise fall back to using expr, which is often a shell builtin. 1867*b3fce824SCristian Pallarés func_split_equals () 1868*b3fce824SCristian Pallarés { 1869*b3fce824SCristian Pallarés $debug_cmd 1870*b3fce824SCristian Pallarés 1871*b3fce824SCristian Pallarés func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 1872*b3fce824SCristian Pallarés func_split_equals_rhs= 1873*b3fce824SCristian Pallarés test "x$func_split_equals_lhs" = "x$1" \ 1874*b3fce824SCristian Pallarés || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 1875*b3fce824SCristian Pallarés } 1876*b3fce824SCristian Pallarésfi #func_split_equals 1877*b3fce824SCristian Pallarés 1878*b3fce824SCristian Pallarés 1879*b3fce824SCristian Pallarés# func_split_short_opt SHORTOPT 1880*b3fce824SCristian Pallarés# ----------------------------- 1881189777a2SCristian Pallares# Set func_split_short_opt_name and func_split_short_opt_arg shell 1882189777a2SCristian Pallares# variables after splitting SHORTOPT after the 2nd character. 1883*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS" 1884*b3fce824SCristian Pallarésthen 1885*b3fce824SCristian Pallarés # This is an XSI compatible shell, allowing a faster implementation... 1886*b3fce824SCristian Pallarés eval 'func_split_short_opt () 1887*b3fce824SCristian Pallarés { 1888*b3fce824SCristian Pallarés $debug_cmd 1889*b3fce824SCristian Pallarés 1890*b3fce824SCristian Pallarés func_split_short_opt_arg=${1#??} 1891*b3fce824SCristian Pallarés func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 1892*b3fce824SCristian Pallarés }' 1893*b3fce824SCristian Pallaréselse 1894*b3fce824SCristian Pallarés # ...otherwise fall back to using expr, which is often a shell builtin. 1895189777a2SCristian Pallares func_split_short_opt () 1896189777a2SCristian Pallares { 1897*b3fce824SCristian Pallarés $debug_cmd 1898189777a2SCristian Pallares 1899*b3fce824SCristian Pallarés func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 1900*b3fce824SCristian Pallarés func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 1901*b3fce824SCristian Pallarés } 1902*b3fce824SCristian Pallarésfi #func_split_short_opt 1903189777a2SCristian Pallares 1904189777a2SCristian Pallares 1905*b3fce824SCristian Pallarés# func_usage 1906*b3fce824SCristian Pallarés# ---------- 1907*b3fce824SCristian Pallarés# Echo short help message to standard output and exit. 1908*b3fce824SCristian Pallarésfunc_usage () 1909189777a2SCristian Pallares{ 1910*b3fce824SCristian Pallarés $debug_cmd 1911189777a2SCristian Pallares 1912*b3fce824SCristian Pallarés func_usage_message 1913*b3fce824SCristian Pallarés $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 1914*b3fce824SCristian Pallarés exit 0 1915*b3fce824SCristian Pallarés} 1916189777a2SCristian Pallares 1917189777a2SCristian Pallares 1918*b3fce824SCristian Pallarés# func_usage_message 1919*b3fce824SCristian Pallarés# ------------------ 1920*b3fce824SCristian Pallarés# Echo short help message to standard output. 1921*b3fce824SCristian Pallarésfunc_usage_message () 1922189777a2SCristian Pallares{ 1923*b3fce824SCristian Pallarés $debug_cmd 1924189777a2SCristian Pallares 1925*b3fce824SCristian Pallarés eval \$ECHO \""Usage: $usage"\" 1926*b3fce824SCristian Pallarés echo 1927*b3fce824SCristian Pallarés $SED -n 's|^# || 1928*b3fce824SCristian Pallarés /^Written by/{ 1929*b3fce824SCristian Pallarés x;p;x 1930*b3fce824SCristian Pallarés } 1931*b3fce824SCristian Pallarés h 1932*b3fce824SCristian Pallarés /^Written by/q' < "$progpath" 1933*b3fce824SCristian Pallarés echo 1934*b3fce824SCristian Pallarés eval \$ECHO \""$usage_message"\" 1935*b3fce824SCristian Pallarés} 1936*b3fce824SCristian Pallarés 1937*b3fce824SCristian Pallarés 1938*b3fce824SCristian Pallarés# func_version 1939*b3fce824SCristian Pallarés# ------------ 1940*b3fce824SCristian Pallarés# Echo version message to standard output and exit. 1941*b3fce824SCristian Pallarésfunc_version () 1942189777a2SCristian Pallares{ 1943*b3fce824SCristian Pallarés $debug_cmd 1944*b3fce824SCristian Pallarés 1945*b3fce824SCristian Pallarés printf '%s\n' "$progname $scriptversion" 1946*b3fce824SCristian Pallarés $SED -n ' 1947*b3fce824SCristian Pallarés /(C)/!b go 1948*b3fce824SCristian Pallarés :more 1949*b3fce824SCristian Pallarés /\./!{ 1950*b3fce824SCristian Pallarés N 1951*b3fce824SCristian Pallarés s|\n# | | 1952*b3fce824SCristian Pallarés b more 1953*b3fce824SCristian Pallarés } 1954*b3fce824SCristian Pallarés :go 1955*b3fce824SCristian Pallarés /^# Written by /,/# warranty; / { 1956*b3fce824SCristian Pallarés s|^# || 1957*b3fce824SCristian Pallarés s|^# *$|| 1958*b3fce824SCristian Pallarés s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 1959*b3fce824SCristian Pallarés p 1960*b3fce824SCristian Pallarés } 1961*b3fce824SCristian Pallarés /^# Written by / { 1962*b3fce824SCristian Pallarés s|^# || 1963*b3fce824SCristian Pallarés p 1964*b3fce824SCristian Pallarés } 1965*b3fce824SCristian Pallarés /^warranty; /q' < "$progpath" 1966*b3fce824SCristian Pallarés 1967*b3fce824SCristian Pallarés exit $? 1968*b3fce824SCristian Pallarés} 1969189777a2SCristian Pallares 1970189777a2SCristian Pallares 1971*b3fce824SCristian Pallarés# Local variables: 1972*b3fce824SCristian Pallarés# mode: shell-script 1973*b3fce824SCristian Pallarés# sh-indentation: 2 1974*b3fce824SCristian Pallarés# eval: (add-hook 'before-save-hook 'time-stamp) 1975*b3fce824SCristian Pallarés# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1976*b3fce824SCristian Pallarés# time-stamp-time-zone: "UTC" 1977*b3fce824SCristian Pallarés# End: 1978*b3fce824SCristian Pallarés 1979*b3fce824SCristian Pallarés# Set a version string. 1980*b3fce824SCristian Pallarésscriptversion='(GNU libtool) 2.4.6 Debian-2.4.6-1' 1981*b3fce824SCristian Pallarés 1982*b3fce824SCristian Pallarés 1983*b3fce824SCristian Pallarés# func_echo ARG... 1984*b3fce824SCristian Pallarés# ---------------- 1985*b3fce824SCristian Pallarés# Libtool also displays the current mode in messages, so override 1986*b3fce824SCristian Pallarés# funclib.sh func_echo with this custom definition. 1987*b3fce824SCristian Pallarésfunc_echo () 1988189777a2SCristian Pallares{ 1989*b3fce824SCristian Pallarés $debug_cmd 1990*b3fce824SCristian Pallarés 1991*b3fce824SCristian Pallarés _G_message=$* 1992*b3fce824SCristian Pallarés 1993*b3fce824SCristian Pallarés func_echo_IFS=$IFS 1994*b3fce824SCristian Pallarés IFS=$nl 1995*b3fce824SCristian Pallarés for _G_line in $_G_message; do 1996*b3fce824SCristian Pallarés IFS=$func_echo_IFS 1997*b3fce824SCristian Pallarés $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 1998*b3fce824SCristian Pallarés done 1999*b3fce824SCristian Pallarés IFS=$func_echo_IFS 2000*b3fce824SCristian Pallarés} 2001189777a2SCristian Pallares 2002189777a2SCristian Pallares 2003*b3fce824SCristian Pallarés# func_warning ARG... 2004*b3fce824SCristian Pallarés# ------------------- 2005*b3fce824SCristian Pallarés# Libtool warnings are not categorized, so override funclib.sh 2006*b3fce824SCristian Pallarés# func_warning with this simpler definition. 2007*b3fce824SCristian Pallarésfunc_warning () 2008189777a2SCristian Pallares{ 2009*b3fce824SCristian Pallarés $debug_cmd 2010*b3fce824SCristian Pallarés 2011*b3fce824SCristian Pallarés $warning_func ${1+"$@"} 2012*b3fce824SCristian Pallarés} 2013189777a2SCristian Pallares 2014189777a2SCristian Pallares 2015*b3fce824SCristian Pallarés## ---------------- ## 2016*b3fce824SCristian Pallarés## Options parsing. ## 2017*b3fce824SCristian Pallarés## ---------------- ## 2018*b3fce824SCristian Pallarés 2019*b3fce824SCristian Pallarés# Hook in the functions to make sure our own options are parsed during 2020*b3fce824SCristian Pallarés# the option parsing loop. 2021*b3fce824SCristian Pallarés 2022*b3fce824SCristian Pallarésusage='$progpath [OPTION]... [MODE-ARG]...' 2023*b3fce824SCristian Pallarés 2024*b3fce824SCristian Pallarés# Short help message in response to '-h'. 2025*b3fce824SCristian Pallarésusage_message="Options: 2026*b3fce824SCristian Pallarés --config show all configuration variables 2027*b3fce824SCristian Pallarés --debug enable verbose shell tracing 2028*b3fce824SCristian Pallarés -n, --dry-run display commands without modifying any files 2029*b3fce824SCristian Pallarés --features display basic configuration information and exit 2030*b3fce824SCristian Pallarés --mode=MODE use operation mode MODE 2031*b3fce824SCristian Pallarés --no-warnings equivalent to '-Wnone' 2032*b3fce824SCristian Pallarés --preserve-dup-deps don't remove duplicate dependency libraries 2033*b3fce824SCristian Pallarés --quiet, --silent don't print informational messages 2034*b3fce824SCristian Pallarés --tag=TAG use configuration variables from tag TAG 2035*b3fce824SCristian Pallarés -v, --verbose print more informational messages than default 2036*b3fce824SCristian Pallarés --version print version information 2037*b3fce824SCristian Pallarés -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2038*b3fce824SCristian Pallarés -h, --help, --help-all print short, long, or detailed help message 2039*b3fce824SCristian Pallarés" 2040*b3fce824SCristian Pallarés 2041*b3fce824SCristian Pallarés# Additional text appended to 'usage_message' in response to '--help'. 2042*b3fce824SCristian Pallarésfunc_help () 2043*b3fce824SCristian Pallarés{ 2044*b3fce824SCristian Pallarés $debug_cmd 2045*b3fce824SCristian Pallarés 2046*b3fce824SCristian Pallarés func_usage_message 2047*b3fce824SCristian Pallarés $ECHO "$long_help_message 2048*b3fce824SCristian Pallarés 2049*b3fce824SCristian PallarésMODE must be one of the following: 2050*b3fce824SCristian Pallarés 2051*b3fce824SCristian Pallarés clean remove files from the build directory 2052*b3fce824SCristian Pallarés compile compile a source file into a libtool object 2053*b3fce824SCristian Pallarés execute automatically set library path, then run a program 2054*b3fce824SCristian Pallarés finish complete the installation of libtool libraries 2055*b3fce824SCristian Pallarés install install libraries or executables 2056*b3fce824SCristian Pallarés link create a library or an executable 2057*b3fce824SCristian Pallarés uninstall remove libraries from an installed directory 2058*b3fce824SCristian Pallarés 2059*b3fce824SCristian PallarésMODE-ARGS vary depending on the MODE. When passed as first option, 2060*b3fce824SCristian Pallarés'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2061*b3fce824SCristian PallarésTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2062*b3fce824SCristian Pallarés 2063*b3fce824SCristian PallarésWhen reporting a bug, please describe a test case to reproduce it and 2064*b3fce824SCristian Pallarésinclude the following information: 2065*b3fce824SCristian Pallarés 2066*b3fce824SCristian Pallarés host-triplet: $host 2067*b3fce824SCristian Pallarés shell: $SHELL 2068*b3fce824SCristian Pallarés compiler: $LTCC 2069*b3fce824SCristian Pallarés compiler flags: $LTCFLAGS 2070*b3fce824SCristian Pallarés linker: $LD (gnu? $with_gnu_ld) 2071*b3fce824SCristian Pallarés version: $progname $scriptversion 2072*b3fce824SCristian Pallarés automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2073*b3fce824SCristian Pallarés autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2074*b3fce824SCristian Pallarés 2075*b3fce824SCristian PallarésReport bugs to <[email protected]>. 2076*b3fce824SCristian PallarésGNU libtool home page: <http://www.gnu.org/s/libtool/>. 2077*b3fce824SCristian PallarésGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2078*b3fce824SCristian Pallarés exit 0 2079*b3fce824SCristian Pallarés} 2080*b3fce824SCristian Pallarés 2081*b3fce824SCristian Pallarés 2082*b3fce824SCristian Pallarés# func_lo2o OBJECT-NAME 2083*b3fce824SCristian Pallarés# --------------------- 2084*b3fce824SCristian Pallarés# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2085*b3fce824SCristian Pallarés# object suffix. 2086*b3fce824SCristian Pallarés 2087*b3fce824SCristian Pallaréslo2o=s/\\.lo\$/.$objext/ 2088*b3fce824SCristian Pallaréso2lo=s/\\.$objext\$/.lo/ 2089*b3fce824SCristian Pallarés 2090*b3fce824SCristian Pallarésif test yes = "$_G_HAVE_XSI_OPS"; then 2091*b3fce824SCristian Pallarés eval 'func_lo2o () 2092*b3fce824SCristian Pallarés { 2093*b3fce824SCristian Pallarés case $1 in 2094*b3fce824SCristian Pallarés *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2095*b3fce824SCristian Pallarés * ) func_lo2o_result=$1 ;; 2096*b3fce824SCristian Pallarés esac 2097*b3fce824SCristian Pallarés }' 2098*b3fce824SCristian Pallarés 2099*b3fce824SCristian Pallarés # func_xform LIBOBJ-OR-SOURCE 2100*b3fce824SCristian Pallarés # --------------------------- 2101*b3fce824SCristian Pallarés # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2102*b3fce824SCristian Pallarés # suffix to a '.lo' libtool-object suffix. 2103*b3fce824SCristian Pallarés eval 'func_xform () 2104*b3fce824SCristian Pallarés { 2105*b3fce824SCristian Pallarés func_xform_result=${1%.*}.lo 2106*b3fce824SCristian Pallarés }' 2107*b3fce824SCristian Pallaréselse 2108*b3fce824SCristian Pallarés # ...otherwise fall back to using sed. 2109189777a2SCristian Pallares func_lo2o () 2110189777a2SCristian Pallares { 2111*b3fce824SCristian Pallarés func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2112*b3fce824SCristian Pallarés } 2113189777a2SCristian Pallares 2114189777a2SCristian Pallares func_xform () 2115189777a2SCristian Pallares { 2116*b3fce824SCristian Pallarés func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2117*b3fce824SCristian Pallarés } 2118*b3fce824SCristian Pallarésfi 2119189777a2SCristian Pallares 2120189777a2SCristian Pallares 2121*b3fce824SCristian Pallarés# func_fatal_configuration ARG... 2122*b3fce824SCristian Pallarés# ------------------------------- 2123189777a2SCristian Pallares# Echo program name prefixed message to standard error, followed by 2124189777a2SCristian Pallares# a configuration failure hint, and exit. 2125189777a2SCristian Pallaresfunc_fatal_configuration () 2126189777a2SCristian Pallares{ 2127*b3fce824SCristian Pallarés func__fatal_error ${1+"$@"} \ 2128*b3fce824SCristian Pallarés "See the $PACKAGE documentation for more information." \ 2129*b3fce824SCristian Pallarés "Fatal configuration error." 2130189777a2SCristian Pallares} 2131189777a2SCristian Pallares 2132189777a2SCristian Pallares 2133189777a2SCristian Pallares# func_config 2134*b3fce824SCristian Pallarés# ----------- 2135189777a2SCristian Pallares# Display the configuration for all the tags in this script. 2136189777a2SCristian Pallaresfunc_config () 2137189777a2SCristian Pallares{ 2138189777a2SCristian Pallares re_begincf='^# ### BEGIN LIBTOOL' 2139189777a2SCristian Pallares re_endcf='^# ### END LIBTOOL' 2140189777a2SCristian Pallares 2141189777a2SCristian Pallares # Default configuration. 2142189777a2SCristian Pallares $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2143189777a2SCristian Pallares 2144189777a2SCristian Pallares # Now print the configurations for the tags. 2145189777a2SCristian Pallares for tagname in $taglist; do 2146189777a2SCristian Pallares $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2147189777a2SCristian Pallares done 2148189777a2SCristian Pallares 2149189777a2SCristian Pallares exit $? 2150189777a2SCristian Pallares} 2151189777a2SCristian Pallares 2152*b3fce824SCristian Pallarés 2153189777a2SCristian Pallares# func_features 2154*b3fce824SCristian Pallarés# ------------- 2155189777a2SCristian Pallares# Display the features supported by this script. 2156189777a2SCristian Pallaresfunc_features () 2157189777a2SCristian Pallares{ 2158189777a2SCristian Pallares echo "host: $host" 2159*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs"; then 2160189777a2SCristian Pallares echo "enable shared libraries" 2161189777a2SCristian Pallares else 2162189777a2SCristian Pallares echo "disable shared libraries" 2163189777a2SCristian Pallares fi 2164*b3fce824SCristian Pallarés if test yes = "$build_old_libs"; then 2165189777a2SCristian Pallares echo "enable static libraries" 2166189777a2SCristian Pallares else 2167189777a2SCristian Pallares echo "disable static libraries" 2168189777a2SCristian Pallares fi 2169189777a2SCristian Pallares 2170189777a2SCristian Pallares exit $? 2171189777a2SCristian Pallares} 2172189777a2SCristian Pallares 2173*b3fce824SCristian Pallarés 2174*b3fce824SCristian Pallarés# func_enable_tag TAGNAME 2175*b3fce824SCristian Pallarés# ----------------------- 2176189777a2SCristian Pallares# Verify that TAGNAME is valid, and either flag an error and exit, or 2177189777a2SCristian Pallares# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2178189777a2SCristian Pallares# variable here. 2179189777a2SCristian Pallaresfunc_enable_tag () 2180189777a2SCristian Pallares{ 2181189777a2SCristian Pallares # Global variable: 2182*b3fce824SCristian Pallarés tagname=$1 2183189777a2SCristian Pallares 2184189777a2SCristian Pallares re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2185189777a2SCristian Pallares re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2186*b3fce824SCristian Pallarés sed_extractcf=/$re_begincf/,/$re_endcf/p 2187189777a2SCristian Pallares 2188189777a2SCristian Pallares # Validate tagname. 2189189777a2SCristian Pallares case $tagname in 2190189777a2SCristian Pallares *[!-_A-Za-z0-9,/]*) 2191189777a2SCristian Pallares func_fatal_error "invalid tag name: $tagname" 2192189777a2SCristian Pallares ;; 2193189777a2SCristian Pallares esac 2194189777a2SCristian Pallares 2195189777a2SCristian Pallares # Don't test for the "default" C tag, as we know it's 2196189777a2SCristian Pallares # there but not specially marked. 2197189777a2SCristian Pallares case $tagname in 2198189777a2SCristian Pallares CC) ;; 2199189777a2SCristian Pallares *) 2200189777a2SCristian Pallares if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2201189777a2SCristian Pallares taglist="$taglist $tagname" 2202189777a2SCristian Pallares 2203189777a2SCristian Pallares # Evaluate the configuration. Be careful to quote the path 2204189777a2SCristian Pallares # and the sed script, to avoid splitting on whitespace, but 2205189777a2SCristian Pallares # also don't use non-portable quotes within backquotes within 2206189777a2SCristian Pallares # quotes we have to do it in 2 steps: 2207189777a2SCristian Pallares extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2208189777a2SCristian Pallares eval "$extractedcf" 2209189777a2SCristian Pallares else 2210189777a2SCristian Pallares func_error "ignoring unknown tag $tagname" 2211189777a2SCristian Pallares fi 2212189777a2SCristian Pallares ;; 2213189777a2SCristian Pallares esac 2214189777a2SCristian Pallares} 2215189777a2SCristian Pallares 2216*b3fce824SCristian Pallarés 2217189777a2SCristian Pallares# func_check_version_match 2218*b3fce824SCristian Pallarés# ------------------------ 2219189777a2SCristian Pallares# Ensure that we are using m4 macros, and libtool script from the same 2220189777a2SCristian Pallares# release of libtool. 2221189777a2SCristian Pallaresfunc_check_version_match () 2222189777a2SCristian Pallares{ 2223189777a2SCristian Pallares if test "$package_revision" != "$macro_revision"; then 2224189777a2SCristian Pallares if test "$VERSION" != "$macro_version"; then 2225189777a2SCristian Pallares if test -z "$macro_version"; then 2226189777a2SCristian Pallares cat >&2 <<_LT_EOF 2227189777a2SCristian Pallares$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2228189777a2SCristian Pallares$progname: definition of this LT_INIT comes from an older release. 2229189777a2SCristian Pallares$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2230189777a2SCristian Pallares$progname: and run autoconf again. 2231189777a2SCristian Pallares_LT_EOF 2232189777a2SCristian Pallares else 2233189777a2SCristian Pallares cat >&2 <<_LT_EOF 2234189777a2SCristian Pallares$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2235189777a2SCristian Pallares$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2236189777a2SCristian Pallares$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2237189777a2SCristian Pallares$progname: and run autoconf again. 2238189777a2SCristian Pallares_LT_EOF 2239189777a2SCristian Pallares fi 2240189777a2SCristian Pallares else 2241189777a2SCristian Pallares cat >&2 <<_LT_EOF 2242189777a2SCristian Pallares$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2243189777a2SCristian Pallares$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2244189777a2SCristian Pallares$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2245189777a2SCristian Pallares$progname: of $PACKAGE $VERSION and run autoconf again. 2246189777a2SCristian Pallares_LT_EOF 2247189777a2SCristian Pallares fi 2248189777a2SCristian Pallares 2249189777a2SCristian Pallares exit $EXIT_MISMATCH 2250189777a2SCristian Pallares fi 2251189777a2SCristian Pallares} 2252189777a2SCristian Pallares 2253189777a2SCristian Pallares 2254*b3fce824SCristian Pallarés# libtool_options_prep [ARG]... 2255*b3fce824SCristian Pallarés# ----------------------------- 2256*b3fce824SCristian Pallarés# Preparation for options parsed by libtool. 2257*b3fce824SCristian Pallaréslibtool_options_prep () 2258*b3fce824SCristian Pallarés{ 2259*b3fce824SCristian Pallarés $debug_mode 2260*b3fce824SCristian Pallarés 2261*b3fce824SCristian Pallarés # Option defaults: 2262*b3fce824SCristian Pallarés opt_config=false 2263*b3fce824SCristian Pallarés opt_dlopen= 2264*b3fce824SCristian Pallarés opt_dry_run=false 2265*b3fce824SCristian Pallarés opt_help=false 2266*b3fce824SCristian Pallarés opt_mode= 2267*b3fce824SCristian Pallarés opt_preserve_dup_deps=false 2268*b3fce824SCristian Pallarés opt_quiet=false 2269*b3fce824SCristian Pallarés 2270*b3fce824SCristian Pallarés nonopt= 2271*b3fce824SCristian Pallarés preserve_args= 2272*b3fce824SCristian Pallarés 2273189777a2SCristian Pallares # Shorthand for --mode=foo, only valid as the first argument 2274189777a2SCristian Pallares case $1 in 2275189777a2SCristian Pallares clean|clea|cle|cl) 2276189777a2SCristian Pallares shift; set dummy --mode clean ${1+"$@"}; shift 2277189777a2SCristian Pallares ;; 2278189777a2SCristian Pallares compile|compil|compi|comp|com|co|c) 2279189777a2SCristian Pallares shift; set dummy --mode compile ${1+"$@"}; shift 2280189777a2SCristian Pallares ;; 2281189777a2SCristian Pallares execute|execut|execu|exec|exe|ex|e) 2282189777a2SCristian Pallares shift; set dummy --mode execute ${1+"$@"}; shift 2283189777a2SCristian Pallares ;; 2284189777a2SCristian Pallares finish|finis|fini|fin|fi|f) 2285189777a2SCristian Pallares shift; set dummy --mode finish ${1+"$@"}; shift 2286189777a2SCristian Pallares ;; 2287189777a2SCristian Pallares install|instal|insta|inst|ins|in|i) 2288189777a2SCristian Pallares shift; set dummy --mode install ${1+"$@"}; shift 2289189777a2SCristian Pallares ;; 2290189777a2SCristian Pallares link|lin|li|l) 2291189777a2SCristian Pallares shift; set dummy --mode link ${1+"$@"}; shift 2292189777a2SCristian Pallares ;; 2293189777a2SCristian Pallares uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2294189777a2SCristian Pallares shift; set dummy --mode uninstall ${1+"$@"}; shift 2295189777a2SCristian Pallares ;; 2296189777a2SCristian Pallares esac 2297189777a2SCristian Pallares 2298*b3fce824SCristian Pallarés # Pass back the list of options. 2299*b3fce824SCristian Pallarés func_quote_for_eval ${1+"$@"} 2300*b3fce824SCristian Pallarés libtool_options_prep_result=$func_quote_for_eval_result 2301*b3fce824SCristian Pallarés} 2302*b3fce824SCristian Pallarésfunc_add_hook func_options_prep libtool_options_prep 2303189777a2SCristian Pallares 2304189777a2SCristian Pallares 2305*b3fce824SCristian Pallarés# libtool_parse_options [ARG]... 2306*b3fce824SCristian Pallarés# --------------------------------- 2307*b3fce824SCristian Pallarés# Provide handling for libtool specific options. 2308*b3fce824SCristian Pallaréslibtool_parse_options () 2309189777a2SCristian Pallares{ 2310*b3fce824SCristian Pallarés $debug_cmd 2311*b3fce824SCristian Pallarés 2312*b3fce824SCristian Pallarés # Perform our own loop to consume as many options as possible in 2313*b3fce824SCristian Pallarés # each iteration. 2314189777a2SCristian Pallares while test $# -gt 0; do 2315*b3fce824SCristian Pallarés _G_opt=$1 2316189777a2SCristian Pallares shift 2317*b3fce824SCristian Pallarés case $_G_opt in 2318189777a2SCristian Pallares --dry-run|--dryrun|-n) 2319189777a2SCristian Pallares opt_dry_run=: 2320189777a2SCristian Pallares ;; 2321*b3fce824SCristian Pallarés 2322*b3fce824SCristian Pallarés --config) func_config ;; 2323*b3fce824SCristian Pallarés 2324189777a2SCristian Pallares --dlopen|-dlopen) 2325189777a2SCristian Pallares opt_dlopen="${opt_dlopen+$opt_dlopen 2326*b3fce824SCristian Pallarés}$1" 2327189777a2SCristian Pallares shift 2328189777a2SCristian Pallares ;; 2329*b3fce824SCristian Pallarés 2330189777a2SCristian Pallares --preserve-dup-deps) 2331*b3fce824SCristian Pallarés opt_preserve_dup_deps=: ;; 2332*b3fce824SCristian Pallarés 2333*b3fce824SCristian Pallarés --features) func_features ;; 2334*b3fce824SCristian Pallarés 2335*b3fce824SCristian Pallarés --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2336*b3fce824SCristian Pallarés 2337*b3fce824SCristian Pallarés --help) opt_help=: ;; 2338*b3fce824SCristian Pallarés 2339*b3fce824SCristian Pallarés --help-all) opt_help=': help-all' ;; 2340*b3fce824SCristian Pallarés 2341*b3fce824SCristian Pallarés --mode) test $# = 0 && func_missing_arg $_G_opt && break 2342*b3fce824SCristian Pallarés opt_mode=$1 2343*b3fce824SCristian Pallarés case $1 in 2344189777a2SCristian Pallares # Valid mode arguments: 2345189777a2SCristian Pallares clean|compile|execute|finish|install|link|relink|uninstall) ;; 2346189777a2SCristian Pallares 2347189777a2SCristian Pallares # Catch anything else as an error 2348*b3fce824SCristian Pallarés *) func_error "invalid argument for $_G_opt" 2349189777a2SCristian Pallares exit_cmd=exit 2350189777a2SCristian Pallares break 2351189777a2SCristian Pallares ;; 2352189777a2SCristian Pallares esac 2353189777a2SCristian Pallares shift 2354189777a2SCristian Pallares ;; 2355*b3fce824SCristian Pallarés 2356189777a2SCristian Pallares --no-silent|--no-quiet) 2357*b3fce824SCristian Pallarés opt_quiet=false 2358*b3fce824SCristian Pallarés func_append preserve_args " $_G_opt" 2359189777a2SCristian Pallares ;; 2360*b3fce824SCristian Pallarés 2361*b3fce824SCristian Pallarés --no-warnings|--no-warning|--no-warn) 2362189777a2SCristian Pallares opt_warning=false 2363*b3fce824SCristian Pallarés func_append preserve_args " $_G_opt" 2364189777a2SCristian Pallares ;; 2365*b3fce824SCristian Pallarés 2366189777a2SCristian Pallares --no-verbose) 2367189777a2SCristian Pallares opt_verbose=false 2368*b3fce824SCristian Pallarés func_append preserve_args " $_G_opt" 2369189777a2SCristian Pallares ;; 2370*b3fce824SCristian Pallarés 2371189777a2SCristian Pallares --silent|--quiet) 2372*b3fce824SCristian Pallarés opt_quiet=: 2373189777a2SCristian Pallares opt_verbose=false 2374*b3fce824SCristian Pallarés func_append preserve_args " $_G_opt" 2375189777a2SCristian Pallares ;; 2376*b3fce824SCristian Pallarés 2377*b3fce824SCristian Pallarés --tag) test $# = 0 && func_missing_arg $_G_opt && break 2378*b3fce824SCristian Pallarés opt_tag=$1 2379*b3fce824SCristian Pallarés func_append preserve_args " $_G_opt $1" 2380*b3fce824SCristian Pallarés func_enable_tag "$1" 2381*b3fce824SCristian Pallarés shift 2382*b3fce824SCristian Pallarés ;; 2383*b3fce824SCristian Pallarés 2384*b3fce824SCristian Pallarés --verbose|-v) opt_quiet=false 2385189777a2SCristian Pallares opt_verbose=: 2386*b3fce824SCristian Pallarés func_append preserve_args " $_G_opt" 2387189777a2SCristian Pallares ;; 2388189777a2SCristian Pallares 2389*b3fce824SCristian Pallarés # An option not handled by this hook function: 2390*b3fce824SCristian Pallarés *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 2391189777a2SCristian Pallares esac 2392189777a2SCristian Pallares done 2393189777a2SCristian Pallares 2394189777a2SCristian Pallares 2395*b3fce824SCristian Pallarés # save modified positional parameters for caller 2396*b3fce824SCristian Pallarés func_quote_for_eval ${1+"$@"} 2397*b3fce824SCristian Pallarés libtool_parse_options_result=$func_quote_for_eval_result 2398*b3fce824SCristian Pallarés} 2399*b3fce824SCristian Pallarésfunc_add_hook func_parse_options libtool_parse_options 2400*b3fce824SCristian Pallarés 2401*b3fce824SCristian Pallarés 2402*b3fce824SCristian Pallarés 2403*b3fce824SCristian Pallarés# libtool_validate_options [ARG]... 2404*b3fce824SCristian Pallarés# --------------------------------- 2405*b3fce824SCristian Pallarés# Perform any sanity checks on option settings and/or unconsumed 2406*b3fce824SCristian Pallarés# arguments. 2407*b3fce824SCristian Pallaréslibtool_validate_options () 2408*b3fce824SCristian Pallarés{ 2409189777a2SCristian Pallares # save first non-option argument 2410*b3fce824SCristian Pallarés if test 0 -lt $#; then 2411*b3fce824SCristian Pallarés nonopt=$1 2412189777a2SCristian Pallares shift 2413189777a2SCristian Pallares fi 2414189777a2SCristian Pallares 2415189777a2SCristian Pallares # preserve --debug 2416*b3fce824SCristian Pallarés test : = "$debug_cmd" || func_append preserve_args " --debug" 2417189777a2SCristian Pallares 2418189777a2SCristian Pallares case $host in 2419*b3fce824SCristian Pallarés # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2420*b3fce824SCristian Pallarés # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2421*b3fce824SCristian Pallarés *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2422189777a2SCristian Pallares # don't eliminate duplications in $postdeps and $predeps 2423189777a2SCristian Pallares opt_duplicate_compiler_generated_deps=: 2424189777a2SCristian Pallares ;; 2425189777a2SCristian Pallares *) 2426189777a2SCristian Pallares opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2427189777a2SCristian Pallares ;; 2428189777a2SCristian Pallares esac 2429189777a2SCristian Pallares 2430189777a2SCristian Pallares $opt_help || { 2431189777a2SCristian Pallares # Sanity checks first: 2432189777a2SCristian Pallares func_check_version_match 2433189777a2SCristian Pallares 2434*b3fce824SCristian Pallarés test yes != "$build_libtool_libs" \ 2435*b3fce824SCristian Pallarés && test yes != "$build_old_libs" \ 2436*b3fce824SCristian Pallarés && func_fatal_configuration "not configured to build any kind of library" 2437189777a2SCristian Pallares 2438189777a2SCristian Pallares # Darwin sucks 2439189777a2SCristian Pallares eval std_shrext=\"$shrext_cmds\" 2440189777a2SCristian Pallares 2441189777a2SCristian Pallares # Only execute mode is allowed to have -dlopen flags. 2442*b3fce824SCristian Pallarés if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2443*b3fce824SCristian Pallarés func_error "unrecognized option '-dlopen'" 2444189777a2SCristian Pallares $ECHO "$help" 1>&2 2445189777a2SCristian Pallares exit $EXIT_FAILURE 2446189777a2SCristian Pallares fi 2447189777a2SCristian Pallares 2448189777a2SCristian Pallares # Change the help message to a mode-specific one. 2449*b3fce824SCristian Pallarés generic_help=$help 2450*b3fce824SCristian Pallarés help="Try '$progname --help --mode=$opt_mode' for more information." 2451189777a2SCristian Pallares } 2452189777a2SCristian Pallares 2453*b3fce824SCristian Pallarés # Pass back the unparsed argument list 2454*b3fce824SCristian Pallarés func_quote_for_eval ${1+"$@"} 2455*b3fce824SCristian Pallarés libtool_validate_options_result=$func_quote_for_eval_result 2456189777a2SCristian Pallares} 2457*b3fce824SCristian Pallarésfunc_add_hook func_validate_options libtool_validate_options 2458189777a2SCristian Pallares 2459189777a2SCristian Pallares 2460*b3fce824SCristian Pallarés# Process options as early as possible so that --help and --version 2461*b3fce824SCristian Pallarés# can return quickly. 2462*b3fce824SCristian Pallarésfunc_options ${1+"$@"} 2463*b3fce824SCristian Pallaréseval set dummy "$func_options_result"; shift 2464*b3fce824SCristian Pallarés 2465189777a2SCristian Pallares 2466189777a2SCristian Pallares 2467189777a2SCristian Pallares## ----------- ## 2468189777a2SCristian Pallares## Main. ## 2469189777a2SCristian Pallares## ----------- ## 2470189777a2SCristian Pallares 2471*b3fce824SCristian Pallarésmagic='%%%MAGIC variable%%%' 2472*b3fce824SCristian Pallarésmagic_exe='%%%MAGIC EXE variable%%%' 2473*b3fce824SCristian Pallarés 2474*b3fce824SCristian Pallarés# Global variables. 2475*b3fce824SCristian Pallarésextracted_archives= 2476*b3fce824SCristian Pallarésextracted_serial=0 2477*b3fce824SCristian Pallarés 2478*b3fce824SCristian Pallarés# If this variable is set in any of the actions, the command in it 2479*b3fce824SCristian Pallarés# will be execed at the end. This prevents here-documents from being 2480*b3fce824SCristian Pallarés# left over by shells. 2481*b3fce824SCristian Pallarésexec_cmd= 2482*b3fce824SCristian Pallarés 2483*b3fce824SCristian Pallarés 2484*b3fce824SCristian Pallarés# A function that is used when there is no print builtin or printf. 2485*b3fce824SCristian Pallarésfunc_fallback_echo () 2486*b3fce824SCristian Pallarés{ 2487*b3fce824SCristian Pallarés eval 'cat <<_LTECHO_EOF 2488*b3fce824SCristian Pallarés$1 2489*b3fce824SCristian Pallarés_LTECHO_EOF' 2490*b3fce824SCristian Pallarés} 2491*b3fce824SCristian Pallarés 2492*b3fce824SCristian Pallarés# func_generated_by_libtool 2493*b3fce824SCristian Pallarés# True iff stdin has been generated by Libtool. This function is only 2494*b3fce824SCristian Pallarés# a basic sanity check; it will hardly flush out determined imposters. 2495*b3fce824SCristian Pallarésfunc_generated_by_libtool_p () 2496*b3fce824SCristian Pallarés{ 2497*b3fce824SCristian Pallarés $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2498*b3fce824SCristian Pallarés} 2499*b3fce824SCristian Pallarés 2500189777a2SCristian Pallares# func_lalib_p file 2501*b3fce824SCristian Pallarés# True iff FILE is a libtool '.la' library or '.lo' object file. 2502189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out 2503189777a2SCristian Pallares# determined imposters. 2504189777a2SCristian Pallaresfunc_lalib_p () 2505189777a2SCristian Pallares{ 2506189777a2SCristian Pallares test -f "$1" && 2507*b3fce824SCristian Pallarés $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2508189777a2SCristian Pallares} 2509189777a2SCristian Pallares 2510189777a2SCristian Pallares# func_lalib_unsafe_p file 2511*b3fce824SCristian Pallarés# True iff FILE is a libtool '.la' library or '.lo' object file. 2512189777a2SCristian Pallares# This function implements the same check as func_lalib_p without 2513189777a2SCristian Pallares# resorting to external programs. To this end, it redirects stdin and 2514189777a2SCristian Pallares# closes it afterwards, without saving the original file descriptor. 2515189777a2SCristian Pallares# As a safety measure, use it only where a negative result would be 2516*b3fce824SCristian Pallarés# fatal anyway. Works if 'file' does not exist. 2517189777a2SCristian Pallaresfunc_lalib_unsafe_p () 2518189777a2SCristian Pallares{ 2519189777a2SCristian Pallares lalib_p=no 2520189777a2SCristian Pallares if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2521189777a2SCristian Pallares for lalib_p_l in 1 2 3 4 2522189777a2SCristian Pallares do 2523189777a2SCristian Pallares read lalib_p_line 2524*b3fce824SCristian Pallarés case $lalib_p_line in 2525189777a2SCristian Pallares \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2526189777a2SCristian Pallares esac 2527189777a2SCristian Pallares done 2528189777a2SCristian Pallares exec 0<&5 5<&- 2529189777a2SCristian Pallares fi 2530*b3fce824SCristian Pallarés test yes = "$lalib_p" 2531189777a2SCristian Pallares} 2532189777a2SCristian Pallares 2533189777a2SCristian Pallares# func_ltwrapper_script_p file 2534189777a2SCristian Pallares# True iff FILE is a libtool wrapper script 2535189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out 2536189777a2SCristian Pallares# determined imposters. 2537189777a2SCristian Pallaresfunc_ltwrapper_script_p () 2538189777a2SCristian Pallares{ 2539*b3fce824SCristian Pallarés test -f "$1" && 2540*b3fce824SCristian Pallarés $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2541189777a2SCristian Pallares} 2542189777a2SCristian Pallares 2543189777a2SCristian Pallares# func_ltwrapper_executable_p file 2544189777a2SCristian Pallares# True iff FILE is a libtool wrapper executable 2545189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out 2546189777a2SCristian Pallares# determined imposters. 2547189777a2SCristian Pallaresfunc_ltwrapper_executable_p () 2548189777a2SCristian Pallares{ 2549189777a2SCristian Pallares func_ltwrapper_exec_suffix= 2550189777a2SCristian Pallares case $1 in 2551189777a2SCristian Pallares *.exe) ;; 2552189777a2SCristian Pallares *) func_ltwrapper_exec_suffix=.exe ;; 2553189777a2SCristian Pallares esac 2554189777a2SCristian Pallares $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2555189777a2SCristian Pallares} 2556189777a2SCristian Pallares 2557189777a2SCristian Pallares# func_ltwrapper_scriptname file 2558189777a2SCristian Pallares# Assumes file is an ltwrapper_executable 2559189777a2SCristian Pallares# uses $file to determine the appropriate filename for a 2560189777a2SCristian Pallares# temporary ltwrapper_script. 2561189777a2SCristian Pallaresfunc_ltwrapper_scriptname () 2562189777a2SCristian Pallares{ 2563189777a2SCristian Pallares func_dirname_and_basename "$1" "" "." 2564189777a2SCristian Pallares func_stripname '' '.exe' "$func_basename_result" 2565*b3fce824SCristian Pallarés func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2566189777a2SCristian Pallares} 2567189777a2SCristian Pallares 2568189777a2SCristian Pallares# func_ltwrapper_p file 2569189777a2SCristian Pallares# True iff FILE is a libtool wrapper script or wrapper executable 2570189777a2SCristian Pallares# This function is only a basic sanity check; it will hardly flush out 2571189777a2SCristian Pallares# determined imposters. 2572189777a2SCristian Pallaresfunc_ltwrapper_p () 2573189777a2SCristian Pallares{ 2574189777a2SCristian Pallares func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2575189777a2SCristian Pallares} 2576189777a2SCristian Pallares 2577189777a2SCristian Pallares 2578189777a2SCristian Pallares# func_execute_cmds commands fail_cmd 2579189777a2SCristian Pallares# Execute tilde-delimited COMMANDS. 2580189777a2SCristian Pallares# If FAIL_CMD is given, eval that upon failure. 2581189777a2SCristian Pallares# FAIL_CMD may read-access the current command in variable CMD! 2582189777a2SCristian Pallaresfunc_execute_cmds () 2583189777a2SCristian Pallares{ 2584*b3fce824SCristian Pallarés $debug_cmd 2585*b3fce824SCristian Pallarés 2586189777a2SCristian Pallares save_ifs=$IFS; IFS='~' 2587189777a2SCristian Pallares for cmd in $1; do 2588*b3fce824SCristian Pallarés IFS=$sp$nl 2589189777a2SCristian Pallares eval cmd=\"$cmd\" 2590*b3fce824SCristian Pallarés IFS=$save_ifs 2591189777a2SCristian Pallares func_show_eval "$cmd" "${2-:}" 2592189777a2SCristian Pallares done 2593189777a2SCristian Pallares IFS=$save_ifs 2594189777a2SCristian Pallares} 2595189777a2SCristian Pallares 2596189777a2SCristian Pallares 2597189777a2SCristian Pallares# func_source file 2598189777a2SCristian Pallares# Source FILE, adding directory component if necessary. 2599189777a2SCristian Pallares# Note that it is not necessary on cygwin/mingw to append a dot to 2600189777a2SCristian Pallares# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2601189777a2SCristian Pallares# behavior happens only for exec(3), not for open(2)! Also, sourcing 2602*b3fce824SCristian Pallarés# 'FILE.' does not work on cygwin managed mounts. 2603189777a2SCristian Pallaresfunc_source () 2604189777a2SCristian Pallares{ 2605*b3fce824SCristian Pallarés $debug_cmd 2606*b3fce824SCristian Pallarés 2607189777a2SCristian Pallares case $1 in 2608189777a2SCristian Pallares */* | *\\*) . "$1" ;; 2609189777a2SCristian Pallares *) . "./$1" ;; 2610189777a2SCristian Pallares esac 2611189777a2SCristian Pallares} 2612189777a2SCristian Pallares 2613189777a2SCristian Pallares 2614189777a2SCristian Pallares# func_resolve_sysroot PATH 2615189777a2SCristian Pallares# Replace a leading = in PATH with a sysroot. Store the result into 2616189777a2SCristian Pallares# func_resolve_sysroot_result 2617189777a2SCristian Pallaresfunc_resolve_sysroot () 2618189777a2SCristian Pallares{ 2619189777a2SCristian Pallares func_resolve_sysroot_result=$1 2620189777a2SCristian Pallares case $func_resolve_sysroot_result in 2621189777a2SCristian Pallares =*) 2622189777a2SCristian Pallares func_stripname '=' '' "$func_resolve_sysroot_result" 2623189777a2SCristian Pallares func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2624189777a2SCristian Pallares ;; 2625189777a2SCristian Pallares esac 2626189777a2SCristian Pallares} 2627189777a2SCristian Pallares 2628189777a2SCristian Pallares# func_replace_sysroot PATH 2629189777a2SCristian Pallares# If PATH begins with the sysroot, replace it with = and 2630189777a2SCristian Pallares# store the result into func_replace_sysroot_result. 2631189777a2SCristian Pallaresfunc_replace_sysroot () 2632189777a2SCristian Pallares{ 2633*b3fce824SCristian Pallarés case $lt_sysroot:$1 in 2634189777a2SCristian Pallares ?*:"$lt_sysroot"*) 2635189777a2SCristian Pallares func_stripname "$lt_sysroot" '' "$1" 2636*b3fce824SCristian Pallarés func_replace_sysroot_result='='$func_stripname_result 2637189777a2SCristian Pallares ;; 2638189777a2SCristian Pallares *) 2639189777a2SCristian Pallares # Including no sysroot. 2640189777a2SCristian Pallares func_replace_sysroot_result=$1 2641189777a2SCristian Pallares ;; 2642189777a2SCristian Pallares esac 2643189777a2SCristian Pallares} 2644189777a2SCristian Pallares 2645189777a2SCristian Pallares# func_infer_tag arg 2646189777a2SCristian Pallares# Infer tagged configuration to use if any are available and 2647189777a2SCristian Pallares# if one wasn't chosen via the "--tag" command line option. 2648189777a2SCristian Pallares# Only attempt this if the compiler in the base compile 2649189777a2SCristian Pallares# command doesn't match the default compiler. 2650189777a2SCristian Pallares# arg is usually of the form 'gcc ...' 2651189777a2SCristian Pallaresfunc_infer_tag () 2652189777a2SCristian Pallares{ 2653*b3fce824SCristian Pallarés $debug_cmd 2654*b3fce824SCristian Pallarés 2655189777a2SCristian Pallares if test -n "$available_tags" && test -z "$tagname"; then 2656189777a2SCristian Pallares CC_quoted= 2657189777a2SCristian Pallares for arg in $CC; do 2658189777a2SCristian Pallares func_append_quoted CC_quoted "$arg" 2659189777a2SCristian Pallares done 2660189777a2SCristian Pallares CC_expanded=`func_echo_all $CC` 2661189777a2SCristian Pallares CC_quoted_expanded=`func_echo_all $CC_quoted` 2662189777a2SCristian Pallares case $@ in 2663189777a2SCristian Pallares # Blanks in the command may have been stripped by the calling shell, 2664189777a2SCristian Pallares # but not from the CC environment variable when configure was run. 2665189777a2SCristian Pallares " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2666189777a2SCristian Pallares " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2667189777a2SCristian Pallares # Blanks at the start of $base_compile will cause this to fail 2668189777a2SCristian Pallares # if we don't check for them as well. 2669189777a2SCristian Pallares *) 2670189777a2SCristian Pallares for z in $available_tags; do 2671189777a2SCristian Pallares if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2672189777a2SCristian Pallares # Evaluate the configuration. 2673*b3fce824SCristian Pallarés eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2674189777a2SCristian Pallares CC_quoted= 2675189777a2SCristian Pallares for arg in $CC; do 2676189777a2SCristian Pallares # Double-quote args containing other shell metacharacters. 2677189777a2SCristian Pallares func_append_quoted CC_quoted "$arg" 2678189777a2SCristian Pallares done 2679189777a2SCristian Pallares CC_expanded=`func_echo_all $CC` 2680189777a2SCristian Pallares CC_quoted_expanded=`func_echo_all $CC_quoted` 2681189777a2SCristian Pallares case "$@ " in 2682189777a2SCristian Pallares " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2683189777a2SCristian Pallares " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2684189777a2SCristian Pallares # The compiler in the base compile command matches 2685189777a2SCristian Pallares # the one in the tagged configuration. 2686189777a2SCristian Pallares # Assume this is the tagged configuration we want. 2687189777a2SCristian Pallares tagname=$z 2688189777a2SCristian Pallares break 2689189777a2SCristian Pallares ;; 2690189777a2SCristian Pallares esac 2691189777a2SCristian Pallares fi 2692189777a2SCristian Pallares done 2693189777a2SCristian Pallares # If $tagname still isn't set, then no tagged configuration 2694189777a2SCristian Pallares # was found and let the user know that the "--tag" command 2695189777a2SCristian Pallares # line option must be used. 2696189777a2SCristian Pallares if test -z "$tagname"; then 2697189777a2SCristian Pallares func_echo "unable to infer tagged configuration" 2698*b3fce824SCristian Pallarés func_fatal_error "specify a tag with '--tag'" 2699189777a2SCristian Pallares# else 2700189777a2SCristian Pallares# func_verbose "using $tagname tagged configuration" 2701189777a2SCristian Pallares fi 2702189777a2SCristian Pallares ;; 2703189777a2SCristian Pallares esac 2704189777a2SCristian Pallares fi 2705189777a2SCristian Pallares} 2706189777a2SCristian Pallares 2707189777a2SCristian Pallares 2708189777a2SCristian Pallares 2709189777a2SCristian Pallares# func_write_libtool_object output_name pic_name nonpic_name 2710189777a2SCristian Pallares# Create a libtool object file (analogous to a ".la" file), 2711189777a2SCristian Pallares# but don't create it if we're doing a dry run. 2712189777a2SCristian Pallaresfunc_write_libtool_object () 2713189777a2SCristian Pallares{ 2714*b3fce824SCristian Pallarés write_libobj=$1 2715*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs"; then 2716*b3fce824SCristian Pallarés write_lobj=\'$2\' 2717189777a2SCristian Pallares else 2718189777a2SCristian Pallares write_lobj=none 2719189777a2SCristian Pallares fi 2720189777a2SCristian Pallares 2721*b3fce824SCristian Pallarés if test yes = "$build_old_libs"; then 2722*b3fce824SCristian Pallarés write_oldobj=\'$3\' 2723189777a2SCristian Pallares else 2724189777a2SCristian Pallares write_oldobj=none 2725189777a2SCristian Pallares fi 2726189777a2SCristian Pallares 2727189777a2SCristian Pallares $opt_dry_run || { 2728189777a2SCristian Pallares cat >${write_libobj}T <<EOF 2729189777a2SCristian Pallares# $write_libobj - a libtool object file 2730*b3fce824SCristian Pallarés# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2731189777a2SCristian Pallares# 2732189777a2SCristian Pallares# Please DO NOT delete this file! 2733189777a2SCristian Pallares# It is necessary for linking the library. 2734189777a2SCristian Pallares 2735189777a2SCristian Pallares# Name of the PIC object. 2736189777a2SCristian Pallarespic_object=$write_lobj 2737189777a2SCristian Pallares 2738189777a2SCristian Pallares# Name of the non-PIC object 2739189777a2SCristian Pallaresnon_pic_object=$write_oldobj 2740189777a2SCristian Pallares 2741189777a2SCristian PallaresEOF 2742*b3fce824SCristian Pallarés $MV "${write_libobj}T" "$write_libobj" 2743189777a2SCristian Pallares } 2744189777a2SCristian Pallares} 2745189777a2SCristian Pallares 2746189777a2SCristian Pallares 2747189777a2SCristian Pallares################################################## 2748189777a2SCristian Pallares# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 2749189777a2SCristian Pallares################################################## 2750189777a2SCristian Pallares 2751189777a2SCristian Pallares# func_convert_core_file_wine_to_w32 ARG 2752189777a2SCristian Pallares# Helper function used by file name conversion functions when $build is *nix, 2753189777a2SCristian Pallares# and $host is mingw, cygwin, or some other w32 environment. Relies on a 2754189777a2SCristian Pallares# correctly configured wine environment available, with the winepath program 2755189777a2SCristian Pallares# in $build's $PATH. 2756189777a2SCristian Pallares# 2757189777a2SCristian Pallares# ARG is the $build file name to be converted to w32 format. 2758189777a2SCristian Pallares# Result is available in $func_convert_core_file_wine_to_w32_result, and will 2759189777a2SCristian Pallares# be empty on error (or when ARG is empty) 2760189777a2SCristian Pallaresfunc_convert_core_file_wine_to_w32 () 2761189777a2SCristian Pallares{ 2762*b3fce824SCristian Pallarés $debug_cmd 2763*b3fce824SCristian Pallarés 2764*b3fce824SCristian Pallarés func_convert_core_file_wine_to_w32_result=$1 2765189777a2SCristian Pallares if test -n "$1"; then 2766189777a2SCristian Pallares # Unfortunately, winepath does not exit with a non-zero error code, so we 2767189777a2SCristian Pallares # are forced to check the contents of stdout. On the other hand, if the 2768189777a2SCristian Pallares # command is not found, the shell will set an exit code of 127 and print 2769189777a2SCristian Pallares # *an error message* to stdout. So we must check for both error code of 2770189777a2SCristian Pallares # zero AND non-empty stdout, which explains the odd construction: 2771189777a2SCristian Pallares func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 2772*b3fce824SCristian Pallarés if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 2773189777a2SCristian Pallares func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 2774*b3fce824SCristian Pallarés $SED -e "$sed_naive_backslashify"` 2775189777a2SCristian Pallares else 2776189777a2SCristian Pallares func_convert_core_file_wine_to_w32_result= 2777189777a2SCristian Pallares fi 2778189777a2SCristian Pallares fi 2779189777a2SCristian Pallares} 2780189777a2SCristian Pallares# end: func_convert_core_file_wine_to_w32 2781189777a2SCristian Pallares 2782189777a2SCristian Pallares 2783189777a2SCristian Pallares# func_convert_core_path_wine_to_w32 ARG 2784189777a2SCristian Pallares# Helper function used by path conversion functions when $build is *nix, and 2785189777a2SCristian Pallares# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 2786189777a2SCristian Pallares# configured wine environment available, with the winepath program in $build's 2787189777a2SCristian Pallares# $PATH. Assumes ARG has no leading or trailing path separator characters. 2788189777a2SCristian Pallares# 2789189777a2SCristian Pallares# ARG is path to be converted from $build format to win32. 2790189777a2SCristian Pallares# Result is available in $func_convert_core_path_wine_to_w32_result. 2791189777a2SCristian Pallares# Unconvertible file (directory) names in ARG are skipped; if no directory names 2792189777a2SCristian Pallares# are convertible, then the result may be empty. 2793189777a2SCristian Pallaresfunc_convert_core_path_wine_to_w32 () 2794189777a2SCristian Pallares{ 2795*b3fce824SCristian Pallarés $debug_cmd 2796*b3fce824SCristian Pallarés 2797189777a2SCristian Pallares # unfortunately, winepath doesn't convert paths, only file names 2798*b3fce824SCristian Pallarés func_convert_core_path_wine_to_w32_result= 2799189777a2SCristian Pallares if test -n "$1"; then 2800189777a2SCristian Pallares oldIFS=$IFS 2801189777a2SCristian Pallares IFS=: 2802189777a2SCristian Pallares for func_convert_core_path_wine_to_w32_f in $1; do 2803189777a2SCristian Pallares IFS=$oldIFS 2804189777a2SCristian Pallares func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 2805189777a2SCristian Pallares if test -n "$func_convert_core_file_wine_to_w32_result"; then 2806189777a2SCristian Pallares if test -z "$func_convert_core_path_wine_to_w32_result"; then 2807*b3fce824SCristian Pallarés func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 2808189777a2SCristian Pallares else 2809189777a2SCristian Pallares func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 2810189777a2SCristian Pallares fi 2811189777a2SCristian Pallares fi 2812189777a2SCristian Pallares done 2813189777a2SCristian Pallares IFS=$oldIFS 2814189777a2SCristian Pallares fi 2815189777a2SCristian Pallares} 2816189777a2SCristian Pallares# end: func_convert_core_path_wine_to_w32 2817189777a2SCristian Pallares 2818189777a2SCristian Pallares 2819189777a2SCristian Pallares# func_cygpath ARGS... 2820189777a2SCristian Pallares# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 2821189777a2SCristian Pallares# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 2822189777a2SCristian Pallares# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 2823189777a2SCristian Pallares# (2), returns the Cygwin file name or path in func_cygpath_result (input 2824189777a2SCristian Pallares# file name or path is assumed to be in w32 format, as previously converted 2825189777a2SCristian Pallares# from $build's *nix or MSYS format). In case (3), returns the w32 file name 2826189777a2SCristian Pallares# or path in func_cygpath_result (input file name or path is assumed to be in 2827189777a2SCristian Pallares# Cygwin format). Returns an empty string on error. 2828189777a2SCristian Pallares# 2829189777a2SCristian Pallares# ARGS are passed to cygpath, with the last one being the file name or path to 2830189777a2SCristian Pallares# be converted. 2831189777a2SCristian Pallares# 2832189777a2SCristian Pallares# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 2833189777a2SCristian Pallares# environment variable; do not put it in $PATH. 2834189777a2SCristian Pallaresfunc_cygpath () 2835189777a2SCristian Pallares{ 2836*b3fce824SCristian Pallarés $debug_cmd 2837*b3fce824SCristian Pallarés 2838189777a2SCristian Pallares if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 2839189777a2SCristian Pallares func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 2840189777a2SCristian Pallares if test "$?" -ne 0; then 2841189777a2SCristian Pallares # on failure, ensure result is empty 2842189777a2SCristian Pallares func_cygpath_result= 2843189777a2SCristian Pallares fi 2844189777a2SCristian Pallares else 2845189777a2SCristian Pallares func_cygpath_result= 2846*b3fce824SCristian Pallarés func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 2847189777a2SCristian Pallares fi 2848189777a2SCristian Pallares} 2849189777a2SCristian Pallares#end: func_cygpath 2850189777a2SCristian Pallares 2851189777a2SCristian Pallares 2852189777a2SCristian Pallares# func_convert_core_msys_to_w32 ARG 2853189777a2SCristian Pallares# Convert file name or path ARG from MSYS format to w32 format. Return 2854189777a2SCristian Pallares# result in func_convert_core_msys_to_w32_result. 2855189777a2SCristian Pallaresfunc_convert_core_msys_to_w32 () 2856189777a2SCristian Pallares{ 2857*b3fce824SCristian Pallarés $debug_cmd 2858*b3fce824SCristian Pallarés 2859189777a2SCristian Pallares # awkward: cmd appends spaces to result 2860189777a2SCristian Pallares func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 2861*b3fce824SCristian Pallarés $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 2862189777a2SCristian Pallares} 2863189777a2SCristian Pallares#end: func_convert_core_msys_to_w32 2864189777a2SCristian Pallares 2865189777a2SCristian Pallares 2866189777a2SCristian Pallares# func_convert_file_check ARG1 ARG2 2867189777a2SCristian Pallares# Verify that ARG1 (a file name in $build format) was converted to $host 2868189777a2SCristian Pallares# format in ARG2. Otherwise, emit an error message, but continue (resetting 2869189777a2SCristian Pallares# func_to_host_file_result to ARG1). 2870189777a2SCristian Pallaresfunc_convert_file_check () 2871189777a2SCristian Pallares{ 2872*b3fce824SCristian Pallarés $debug_cmd 2873*b3fce824SCristian Pallarés 2874189777a2SCristian Pallares if test -z "$2" && test -n "$1"; then 2875189777a2SCristian Pallares func_error "Could not determine host file name corresponding to" 2876*b3fce824SCristian Pallarés func_error " '$1'" 2877189777a2SCristian Pallares func_error "Continuing, but uninstalled executables may not work." 2878189777a2SCristian Pallares # Fallback: 2879*b3fce824SCristian Pallarés func_to_host_file_result=$1 2880189777a2SCristian Pallares fi 2881189777a2SCristian Pallares} 2882189777a2SCristian Pallares# end func_convert_file_check 2883189777a2SCristian Pallares 2884189777a2SCristian Pallares 2885189777a2SCristian Pallares# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 2886189777a2SCristian Pallares# Verify that FROM_PATH (a path in $build format) was converted to $host 2887189777a2SCristian Pallares# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 2888189777a2SCristian Pallares# func_to_host_file_result to a simplistic fallback value (see below). 2889189777a2SCristian Pallaresfunc_convert_path_check () 2890189777a2SCristian Pallares{ 2891*b3fce824SCristian Pallarés $debug_cmd 2892*b3fce824SCristian Pallarés 2893189777a2SCristian Pallares if test -z "$4" && test -n "$3"; then 2894189777a2SCristian Pallares func_error "Could not determine the host path corresponding to" 2895*b3fce824SCristian Pallarés func_error " '$3'" 2896189777a2SCristian Pallares func_error "Continuing, but uninstalled executables may not work." 2897189777a2SCristian Pallares # Fallback. This is a deliberately simplistic "conversion" and 2898189777a2SCristian Pallares # should not be "improved". See libtool.info. 2899189777a2SCristian Pallares if test "x$1" != "x$2"; then 2900189777a2SCristian Pallares lt_replace_pathsep_chars="s|$1|$2|g" 2901189777a2SCristian Pallares func_to_host_path_result=`echo "$3" | 2902189777a2SCristian Pallares $SED -e "$lt_replace_pathsep_chars"` 2903189777a2SCristian Pallares else 2904*b3fce824SCristian Pallarés func_to_host_path_result=$3 2905189777a2SCristian Pallares fi 2906189777a2SCristian Pallares fi 2907189777a2SCristian Pallares} 2908189777a2SCristian Pallares# end func_convert_path_check 2909189777a2SCristian Pallares 2910189777a2SCristian Pallares 2911189777a2SCristian Pallares# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 2912189777a2SCristian Pallares# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 2913189777a2SCristian Pallares# and appending REPL if ORIG matches BACKPAT. 2914189777a2SCristian Pallaresfunc_convert_path_front_back_pathsep () 2915189777a2SCristian Pallares{ 2916*b3fce824SCristian Pallarés $debug_cmd 2917*b3fce824SCristian Pallarés 2918189777a2SCristian Pallares case $4 in 2919*b3fce824SCristian Pallarés $1 ) func_to_host_path_result=$3$func_to_host_path_result 2920189777a2SCristian Pallares ;; 2921189777a2SCristian Pallares esac 2922189777a2SCristian Pallares case $4 in 2923189777a2SCristian Pallares $2 ) func_append func_to_host_path_result "$3" 2924189777a2SCristian Pallares ;; 2925189777a2SCristian Pallares esac 2926189777a2SCristian Pallares} 2927189777a2SCristian Pallares# end func_convert_path_front_back_pathsep 2928189777a2SCristian Pallares 2929189777a2SCristian Pallares 2930189777a2SCristian Pallares################################################## 2931189777a2SCristian Pallares# $build to $host FILE NAME CONVERSION FUNCTIONS # 2932189777a2SCristian Pallares################################################## 2933*b3fce824SCristian Pallarés# invoked via '$to_host_file_cmd ARG' 2934189777a2SCristian Pallares# 2935189777a2SCristian Pallares# In each case, ARG is the path to be converted from $build to $host format. 2936189777a2SCristian Pallares# Result will be available in $func_to_host_file_result. 2937189777a2SCristian Pallares 2938189777a2SCristian Pallares 2939189777a2SCristian Pallares# func_to_host_file ARG 2940189777a2SCristian Pallares# Converts the file name ARG from $build format to $host format. Return result 2941189777a2SCristian Pallares# in func_to_host_file_result. 2942189777a2SCristian Pallaresfunc_to_host_file () 2943189777a2SCristian Pallares{ 2944*b3fce824SCristian Pallarés $debug_cmd 2945*b3fce824SCristian Pallarés 2946189777a2SCristian Pallares $to_host_file_cmd "$1" 2947189777a2SCristian Pallares} 2948189777a2SCristian Pallares# end func_to_host_file 2949189777a2SCristian Pallares 2950189777a2SCristian Pallares 2951189777a2SCristian Pallares# func_to_tool_file ARG LAZY 2952189777a2SCristian Pallares# converts the file name ARG from $build format to toolchain format. Return 2953189777a2SCristian Pallares# result in func_to_tool_file_result. If the conversion in use is listed 2954189777a2SCristian Pallares# in (the comma separated) LAZY, no conversion takes place. 2955189777a2SCristian Pallaresfunc_to_tool_file () 2956189777a2SCristian Pallares{ 2957*b3fce824SCristian Pallarés $debug_cmd 2958*b3fce824SCristian Pallarés 2959189777a2SCristian Pallares case ,$2, in 2960189777a2SCristian Pallares *,"$to_tool_file_cmd",*) 2961189777a2SCristian Pallares func_to_tool_file_result=$1 2962189777a2SCristian Pallares ;; 2963189777a2SCristian Pallares *) 2964189777a2SCristian Pallares $to_tool_file_cmd "$1" 2965189777a2SCristian Pallares func_to_tool_file_result=$func_to_host_file_result 2966189777a2SCristian Pallares ;; 2967189777a2SCristian Pallares esac 2968189777a2SCristian Pallares} 2969189777a2SCristian Pallares# end func_to_tool_file 2970189777a2SCristian Pallares 2971189777a2SCristian Pallares 2972189777a2SCristian Pallares# func_convert_file_noop ARG 2973189777a2SCristian Pallares# Copy ARG to func_to_host_file_result. 2974189777a2SCristian Pallaresfunc_convert_file_noop () 2975189777a2SCristian Pallares{ 2976*b3fce824SCristian Pallarés func_to_host_file_result=$1 2977189777a2SCristian Pallares} 2978189777a2SCristian Pallares# end func_convert_file_noop 2979189777a2SCristian Pallares 2980189777a2SCristian Pallares 2981189777a2SCristian Pallares# func_convert_file_msys_to_w32 ARG 2982189777a2SCristian Pallares# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 2983189777a2SCristian Pallares# conversion to w32 is not available inside the cwrapper. Returns result in 2984189777a2SCristian Pallares# func_to_host_file_result. 2985189777a2SCristian Pallaresfunc_convert_file_msys_to_w32 () 2986189777a2SCristian Pallares{ 2987*b3fce824SCristian Pallarés $debug_cmd 2988*b3fce824SCristian Pallarés 2989*b3fce824SCristian Pallarés func_to_host_file_result=$1 2990189777a2SCristian Pallares if test -n "$1"; then 2991189777a2SCristian Pallares func_convert_core_msys_to_w32 "$1" 2992*b3fce824SCristian Pallarés func_to_host_file_result=$func_convert_core_msys_to_w32_result 2993189777a2SCristian Pallares fi 2994189777a2SCristian Pallares func_convert_file_check "$1" "$func_to_host_file_result" 2995189777a2SCristian Pallares} 2996189777a2SCristian Pallares# end func_convert_file_msys_to_w32 2997189777a2SCristian Pallares 2998189777a2SCristian Pallares 2999189777a2SCristian Pallares# func_convert_file_cygwin_to_w32 ARG 3000189777a2SCristian Pallares# Convert file name ARG from Cygwin to w32 format. Returns result in 3001189777a2SCristian Pallares# func_to_host_file_result. 3002189777a2SCristian Pallaresfunc_convert_file_cygwin_to_w32 () 3003189777a2SCristian Pallares{ 3004*b3fce824SCristian Pallarés $debug_cmd 3005*b3fce824SCristian Pallarés 3006*b3fce824SCristian Pallarés func_to_host_file_result=$1 3007189777a2SCristian Pallares if test -n "$1"; then 3008189777a2SCristian Pallares # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3009189777a2SCristian Pallares # LT_CYGPATH in this case. 3010189777a2SCristian Pallares func_to_host_file_result=`cygpath -m "$1"` 3011189777a2SCristian Pallares fi 3012189777a2SCristian Pallares func_convert_file_check "$1" "$func_to_host_file_result" 3013189777a2SCristian Pallares} 3014189777a2SCristian Pallares# end func_convert_file_cygwin_to_w32 3015189777a2SCristian Pallares 3016189777a2SCristian Pallares 3017189777a2SCristian Pallares# func_convert_file_nix_to_w32 ARG 3018189777a2SCristian Pallares# Convert file name ARG from *nix to w32 format. Requires a wine environment 3019189777a2SCristian Pallares# and a working winepath. Returns result in func_to_host_file_result. 3020189777a2SCristian Pallaresfunc_convert_file_nix_to_w32 () 3021189777a2SCristian Pallares{ 3022*b3fce824SCristian Pallarés $debug_cmd 3023*b3fce824SCristian Pallarés 3024*b3fce824SCristian Pallarés func_to_host_file_result=$1 3025189777a2SCristian Pallares if test -n "$1"; then 3026189777a2SCristian Pallares func_convert_core_file_wine_to_w32 "$1" 3027*b3fce824SCristian Pallarés func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3028189777a2SCristian Pallares fi 3029189777a2SCristian Pallares func_convert_file_check "$1" "$func_to_host_file_result" 3030189777a2SCristian Pallares} 3031189777a2SCristian Pallares# end func_convert_file_nix_to_w32 3032189777a2SCristian Pallares 3033189777a2SCristian Pallares 3034189777a2SCristian Pallares# func_convert_file_msys_to_cygwin ARG 3035189777a2SCristian Pallares# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3036189777a2SCristian Pallares# Returns result in func_to_host_file_result. 3037189777a2SCristian Pallaresfunc_convert_file_msys_to_cygwin () 3038189777a2SCristian Pallares{ 3039*b3fce824SCristian Pallarés $debug_cmd 3040*b3fce824SCristian Pallarés 3041*b3fce824SCristian Pallarés func_to_host_file_result=$1 3042189777a2SCristian Pallares if test -n "$1"; then 3043189777a2SCristian Pallares func_convert_core_msys_to_w32 "$1" 3044189777a2SCristian Pallares func_cygpath -u "$func_convert_core_msys_to_w32_result" 3045*b3fce824SCristian Pallarés func_to_host_file_result=$func_cygpath_result 3046189777a2SCristian Pallares fi 3047189777a2SCristian Pallares func_convert_file_check "$1" "$func_to_host_file_result" 3048189777a2SCristian Pallares} 3049189777a2SCristian Pallares# end func_convert_file_msys_to_cygwin 3050189777a2SCristian Pallares 3051189777a2SCristian Pallares 3052189777a2SCristian Pallares# func_convert_file_nix_to_cygwin ARG 3053189777a2SCristian Pallares# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3054189777a2SCristian Pallares# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3055189777a2SCristian Pallares# in func_to_host_file_result. 3056189777a2SCristian Pallaresfunc_convert_file_nix_to_cygwin () 3057189777a2SCristian Pallares{ 3058*b3fce824SCristian Pallarés $debug_cmd 3059*b3fce824SCristian Pallarés 3060*b3fce824SCristian Pallarés func_to_host_file_result=$1 3061189777a2SCristian Pallares if test -n "$1"; then 3062189777a2SCristian Pallares # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3063189777a2SCristian Pallares func_convert_core_file_wine_to_w32 "$1" 3064189777a2SCristian Pallares func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3065*b3fce824SCristian Pallarés func_to_host_file_result=$func_cygpath_result 3066189777a2SCristian Pallares fi 3067189777a2SCristian Pallares func_convert_file_check "$1" "$func_to_host_file_result" 3068189777a2SCristian Pallares} 3069189777a2SCristian Pallares# end func_convert_file_nix_to_cygwin 3070189777a2SCristian Pallares 3071189777a2SCristian Pallares 3072189777a2SCristian Pallares############################################# 3073189777a2SCristian Pallares# $build to $host PATH CONVERSION FUNCTIONS # 3074189777a2SCristian Pallares############################################# 3075*b3fce824SCristian Pallarés# invoked via '$to_host_path_cmd ARG' 3076189777a2SCristian Pallares# 3077189777a2SCristian Pallares# In each case, ARG is the path to be converted from $build to $host format. 3078189777a2SCristian Pallares# The result will be available in $func_to_host_path_result. 3079189777a2SCristian Pallares# 3080189777a2SCristian Pallares# Path separators are also converted from $build format to $host format. If 3081189777a2SCristian Pallares# ARG begins or ends with a path separator character, it is preserved (but 3082189777a2SCristian Pallares# converted to $host format) on output. 3083189777a2SCristian Pallares# 3084189777a2SCristian Pallares# All path conversion functions are named using the following convention: 3085189777a2SCristian Pallares# file name conversion function : func_convert_file_X_to_Y () 3086189777a2SCristian Pallares# path conversion function : func_convert_path_X_to_Y () 3087189777a2SCristian Pallares# where, for any given $build/$host combination the 'X_to_Y' value is the 3088189777a2SCristian Pallares# same. If conversion functions are added for new $build/$host combinations, 3089189777a2SCristian Pallares# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3090189777a2SCristian Pallares# will break. 3091189777a2SCristian Pallares 3092189777a2SCristian Pallares 3093189777a2SCristian Pallares# func_init_to_host_path_cmd 3094189777a2SCristian Pallares# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3095189777a2SCristian Pallares# appropriate value, based on the value of $to_host_file_cmd. 3096189777a2SCristian Pallaresto_host_path_cmd= 3097189777a2SCristian Pallaresfunc_init_to_host_path_cmd () 3098189777a2SCristian Pallares{ 3099*b3fce824SCristian Pallarés $debug_cmd 3100*b3fce824SCristian Pallarés 3101189777a2SCristian Pallares if test -z "$to_host_path_cmd"; then 3102189777a2SCristian Pallares func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3103*b3fce824SCristian Pallarés to_host_path_cmd=func_convert_path_$func_stripname_result 3104189777a2SCristian Pallares fi 3105189777a2SCristian Pallares} 3106189777a2SCristian Pallares 3107189777a2SCristian Pallares 3108189777a2SCristian Pallares# func_to_host_path ARG 3109189777a2SCristian Pallares# Converts the path ARG from $build format to $host format. Return result 3110189777a2SCristian Pallares# in func_to_host_path_result. 3111189777a2SCristian Pallaresfunc_to_host_path () 3112189777a2SCristian Pallares{ 3113*b3fce824SCristian Pallarés $debug_cmd 3114*b3fce824SCristian Pallarés 3115189777a2SCristian Pallares func_init_to_host_path_cmd 3116189777a2SCristian Pallares $to_host_path_cmd "$1" 3117189777a2SCristian Pallares} 3118189777a2SCristian Pallares# end func_to_host_path 3119189777a2SCristian Pallares 3120189777a2SCristian Pallares 3121189777a2SCristian Pallares# func_convert_path_noop ARG 3122189777a2SCristian Pallares# Copy ARG to func_to_host_path_result. 3123189777a2SCristian Pallaresfunc_convert_path_noop () 3124189777a2SCristian Pallares{ 3125*b3fce824SCristian Pallarés func_to_host_path_result=$1 3126189777a2SCristian Pallares} 3127189777a2SCristian Pallares# end func_convert_path_noop 3128189777a2SCristian Pallares 3129189777a2SCristian Pallares 3130189777a2SCristian Pallares# func_convert_path_msys_to_w32 ARG 3131189777a2SCristian Pallares# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3132189777a2SCristian Pallares# conversion to w32 is not available inside the cwrapper. Returns result in 3133189777a2SCristian Pallares# func_to_host_path_result. 3134189777a2SCristian Pallaresfunc_convert_path_msys_to_w32 () 3135189777a2SCristian Pallares{ 3136*b3fce824SCristian Pallarés $debug_cmd 3137*b3fce824SCristian Pallarés 3138*b3fce824SCristian Pallarés func_to_host_path_result=$1 3139189777a2SCristian Pallares if test -n "$1"; then 3140189777a2SCristian Pallares # Remove leading and trailing path separator characters from ARG. MSYS 3141189777a2SCristian Pallares # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3142189777a2SCristian Pallares # and winepath ignores them completely. 3143189777a2SCristian Pallares func_stripname : : "$1" 3144189777a2SCristian Pallares func_to_host_path_tmp1=$func_stripname_result 3145189777a2SCristian Pallares func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3146*b3fce824SCristian Pallarés func_to_host_path_result=$func_convert_core_msys_to_w32_result 3147189777a2SCristian Pallares func_convert_path_check : ";" \ 3148189777a2SCristian Pallares "$func_to_host_path_tmp1" "$func_to_host_path_result" 3149189777a2SCristian Pallares func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3150189777a2SCristian Pallares fi 3151189777a2SCristian Pallares} 3152189777a2SCristian Pallares# end func_convert_path_msys_to_w32 3153189777a2SCristian Pallares 3154189777a2SCristian Pallares 3155189777a2SCristian Pallares# func_convert_path_cygwin_to_w32 ARG 3156189777a2SCristian Pallares# Convert path ARG from Cygwin to w32 format. Returns result in 3157189777a2SCristian Pallares# func_to_host_file_result. 3158189777a2SCristian Pallaresfunc_convert_path_cygwin_to_w32 () 3159189777a2SCristian Pallares{ 3160*b3fce824SCristian Pallarés $debug_cmd 3161*b3fce824SCristian Pallarés 3162*b3fce824SCristian Pallarés func_to_host_path_result=$1 3163189777a2SCristian Pallares if test -n "$1"; then 3164189777a2SCristian Pallares # See func_convert_path_msys_to_w32: 3165189777a2SCristian Pallares func_stripname : : "$1" 3166189777a2SCristian Pallares func_to_host_path_tmp1=$func_stripname_result 3167189777a2SCristian Pallares func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3168189777a2SCristian Pallares func_convert_path_check : ";" \ 3169189777a2SCristian Pallares "$func_to_host_path_tmp1" "$func_to_host_path_result" 3170189777a2SCristian Pallares func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3171189777a2SCristian Pallares fi 3172189777a2SCristian Pallares} 3173189777a2SCristian Pallares# end func_convert_path_cygwin_to_w32 3174189777a2SCristian Pallares 3175189777a2SCristian Pallares 3176189777a2SCristian Pallares# func_convert_path_nix_to_w32 ARG 3177189777a2SCristian Pallares# Convert path ARG from *nix to w32 format. Requires a wine environment and 3178189777a2SCristian Pallares# a working winepath. Returns result in func_to_host_file_result. 3179189777a2SCristian Pallaresfunc_convert_path_nix_to_w32 () 3180189777a2SCristian Pallares{ 3181*b3fce824SCristian Pallarés $debug_cmd 3182*b3fce824SCristian Pallarés 3183*b3fce824SCristian Pallarés func_to_host_path_result=$1 3184189777a2SCristian Pallares if test -n "$1"; then 3185189777a2SCristian Pallares # See func_convert_path_msys_to_w32: 3186189777a2SCristian Pallares func_stripname : : "$1" 3187189777a2SCristian Pallares func_to_host_path_tmp1=$func_stripname_result 3188189777a2SCristian Pallares func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3189*b3fce824SCristian Pallarés func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3190189777a2SCristian Pallares func_convert_path_check : ";" \ 3191189777a2SCristian Pallares "$func_to_host_path_tmp1" "$func_to_host_path_result" 3192189777a2SCristian Pallares func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3193189777a2SCristian Pallares fi 3194189777a2SCristian Pallares} 3195189777a2SCristian Pallares# end func_convert_path_nix_to_w32 3196189777a2SCristian Pallares 3197189777a2SCristian Pallares 3198189777a2SCristian Pallares# func_convert_path_msys_to_cygwin ARG 3199189777a2SCristian Pallares# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3200189777a2SCristian Pallares# Returns result in func_to_host_file_result. 3201189777a2SCristian Pallaresfunc_convert_path_msys_to_cygwin () 3202189777a2SCristian Pallares{ 3203*b3fce824SCristian Pallarés $debug_cmd 3204*b3fce824SCristian Pallarés 3205*b3fce824SCristian Pallarés func_to_host_path_result=$1 3206189777a2SCristian Pallares if test -n "$1"; then 3207189777a2SCristian Pallares # See func_convert_path_msys_to_w32: 3208189777a2SCristian Pallares func_stripname : : "$1" 3209189777a2SCristian Pallares func_to_host_path_tmp1=$func_stripname_result 3210189777a2SCristian Pallares func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3211189777a2SCristian Pallares func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3212*b3fce824SCristian Pallarés func_to_host_path_result=$func_cygpath_result 3213189777a2SCristian Pallares func_convert_path_check : : \ 3214189777a2SCristian Pallares "$func_to_host_path_tmp1" "$func_to_host_path_result" 3215189777a2SCristian Pallares func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3216189777a2SCristian Pallares fi 3217189777a2SCristian Pallares} 3218189777a2SCristian Pallares# end func_convert_path_msys_to_cygwin 3219189777a2SCristian Pallares 3220189777a2SCristian Pallares 3221189777a2SCristian Pallares# func_convert_path_nix_to_cygwin ARG 3222189777a2SCristian Pallares# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3223189777a2SCristian Pallares# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3224189777a2SCristian Pallares# func_to_host_file_result. 3225189777a2SCristian Pallaresfunc_convert_path_nix_to_cygwin () 3226189777a2SCristian Pallares{ 3227*b3fce824SCristian Pallarés $debug_cmd 3228*b3fce824SCristian Pallarés 3229*b3fce824SCristian Pallarés func_to_host_path_result=$1 3230189777a2SCristian Pallares if test -n "$1"; then 3231189777a2SCristian Pallares # Remove leading and trailing path separator characters from 3232189777a2SCristian Pallares # ARG. msys behavior is inconsistent here, cygpath turns them 3233189777a2SCristian Pallares # into '.;' and ';.', and winepath ignores them completely. 3234189777a2SCristian Pallares func_stripname : : "$1" 3235189777a2SCristian Pallares func_to_host_path_tmp1=$func_stripname_result 3236189777a2SCristian Pallares func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3237189777a2SCristian Pallares func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3238*b3fce824SCristian Pallarés func_to_host_path_result=$func_cygpath_result 3239189777a2SCristian Pallares func_convert_path_check : : \ 3240189777a2SCristian Pallares "$func_to_host_path_tmp1" "$func_to_host_path_result" 3241189777a2SCristian Pallares func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3242189777a2SCristian Pallares fi 3243189777a2SCristian Pallares} 3244189777a2SCristian Pallares# end func_convert_path_nix_to_cygwin 3245189777a2SCristian Pallares 3246189777a2SCristian Pallares 3247*b3fce824SCristian Pallarés# func_dll_def_p FILE 3248*b3fce824SCristian Pallarés# True iff FILE is a Windows DLL '.def' file. 3249*b3fce824SCristian Pallarés# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3250*b3fce824SCristian Pallarésfunc_dll_def_p () 3251*b3fce824SCristian Pallarés{ 3252*b3fce824SCristian Pallarés $debug_cmd 3253*b3fce824SCristian Pallarés 3254*b3fce824SCristian Pallarés func_dll_def_p_tmp=`$SED -n \ 3255*b3fce824SCristian Pallarés -e 's/^[ ]*//' \ 3256*b3fce824SCristian Pallarés -e '/^\(;.*\)*$/d' \ 3257*b3fce824SCristian Pallarés -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3258*b3fce824SCristian Pallarés -e q \ 3259*b3fce824SCristian Pallarés "$1"` 3260*b3fce824SCristian Pallarés test DEF = "$func_dll_def_p_tmp" 3261*b3fce824SCristian Pallarés} 3262*b3fce824SCristian Pallarés 3263*b3fce824SCristian Pallarés 3264189777a2SCristian Pallares# func_mode_compile arg... 3265189777a2SCristian Pallaresfunc_mode_compile () 3266189777a2SCristian Pallares{ 3267*b3fce824SCristian Pallarés $debug_cmd 3268*b3fce824SCristian Pallarés 3269189777a2SCristian Pallares # Get the compilation command and the source file. 3270189777a2SCristian Pallares base_compile= 3271*b3fce824SCristian Pallarés srcfile=$nonopt # always keep a non-empty value in "srcfile" 3272189777a2SCristian Pallares suppress_opt=yes 3273189777a2SCristian Pallares suppress_output= 3274189777a2SCristian Pallares arg_mode=normal 3275189777a2SCristian Pallares libobj= 3276189777a2SCristian Pallares later= 3277189777a2SCristian Pallares pie_flag= 3278189777a2SCristian Pallares 3279189777a2SCristian Pallares for arg 3280189777a2SCristian Pallares do 3281189777a2SCristian Pallares case $arg_mode in 3282189777a2SCristian Pallares arg ) 3283189777a2SCristian Pallares # do not "continue". Instead, add this to base_compile 3284*b3fce824SCristian Pallarés lastarg=$arg 3285189777a2SCristian Pallares arg_mode=normal 3286189777a2SCristian Pallares ;; 3287189777a2SCristian Pallares 3288189777a2SCristian Pallares target ) 3289*b3fce824SCristian Pallarés libobj=$arg 3290189777a2SCristian Pallares arg_mode=normal 3291189777a2SCristian Pallares continue 3292189777a2SCristian Pallares ;; 3293189777a2SCristian Pallares 3294189777a2SCristian Pallares normal ) 3295189777a2SCristian Pallares # Accept any command-line options. 3296189777a2SCristian Pallares case $arg in 3297189777a2SCristian Pallares -o) 3298189777a2SCristian Pallares test -n "$libobj" && \ 3299*b3fce824SCristian Pallarés func_fatal_error "you cannot specify '-o' more than once" 3300189777a2SCristian Pallares arg_mode=target 3301189777a2SCristian Pallares continue 3302189777a2SCristian Pallares ;; 3303189777a2SCristian Pallares 3304189777a2SCristian Pallares -pie | -fpie | -fPIE) 3305189777a2SCristian Pallares func_append pie_flag " $arg" 3306189777a2SCristian Pallares continue 3307189777a2SCristian Pallares ;; 3308189777a2SCristian Pallares 3309189777a2SCristian Pallares -shared | -static | -prefer-pic | -prefer-non-pic) 3310189777a2SCristian Pallares func_append later " $arg" 3311189777a2SCristian Pallares continue 3312189777a2SCristian Pallares ;; 3313189777a2SCristian Pallares 3314189777a2SCristian Pallares -no-suppress) 3315189777a2SCristian Pallares suppress_opt=no 3316189777a2SCristian Pallares continue 3317189777a2SCristian Pallares ;; 3318189777a2SCristian Pallares 3319189777a2SCristian Pallares -Xcompiler) 3320189777a2SCristian Pallares arg_mode=arg # the next one goes into the "base_compile" arg list 3321189777a2SCristian Pallares continue # The current "srcfile" will either be retained or 3322189777a2SCristian Pallares ;; # replaced later. I would guess that would be a bug. 3323189777a2SCristian Pallares 3324189777a2SCristian Pallares -Wc,*) 3325189777a2SCristian Pallares func_stripname '-Wc,' '' "$arg" 3326189777a2SCristian Pallares args=$func_stripname_result 3327189777a2SCristian Pallares lastarg= 3328*b3fce824SCristian Pallarés save_ifs=$IFS; IFS=, 3329189777a2SCristian Pallares for arg in $args; do 3330*b3fce824SCristian Pallarés IFS=$save_ifs 3331189777a2SCristian Pallares func_append_quoted lastarg "$arg" 3332189777a2SCristian Pallares done 3333*b3fce824SCristian Pallarés IFS=$save_ifs 3334189777a2SCristian Pallares func_stripname ' ' '' "$lastarg" 3335189777a2SCristian Pallares lastarg=$func_stripname_result 3336189777a2SCristian Pallares 3337189777a2SCristian Pallares # Add the arguments to base_compile. 3338189777a2SCristian Pallares func_append base_compile " $lastarg" 3339189777a2SCristian Pallares continue 3340189777a2SCristian Pallares ;; 3341189777a2SCristian Pallares 3342189777a2SCristian Pallares *) 3343189777a2SCristian Pallares # Accept the current argument as the source file. 3344189777a2SCristian Pallares # The previous "srcfile" becomes the current argument. 3345189777a2SCristian Pallares # 3346*b3fce824SCristian Pallarés lastarg=$srcfile 3347*b3fce824SCristian Pallarés srcfile=$arg 3348189777a2SCristian Pallares ;; 3349189777a2SCristian Pallares esac # case $arg 3350189777a2SCristian Pallares ;; 3351189777a2SCristian Pallares esac # case $arg_mode 3352189777a2SCristian Pallares 3353189777a2SCristian Pallares # Aesthetically quote the previous argument. 3354189777a2SCristian Pallares func_append_quoted base_compile "$lastarg" 3355189777a2SCristian Pallares done # for arg 3356189777a2SCristian Pallares 3357189777a2SCristian Pallares case $arg_mode in 3358189777a2SCristian Pallares arg) 3359189777a2SCristian Pallares func_fatal_error "you must specify an argument for -Xcompile" 3360189777a2SCristian Pallares ;; 3361189777a2SCristian Pallares target) 3362*b3fce824SCristian Pallarés func_fatal_error "you must specify a target with '-o'" 3363189777a2SCristian Pallares ;; 3364189777a2SCristian Pallares *) 3365189777a2SCristian Pallares # Get the name of the library object. 3366189777a2SCristian Pallares test -z "$libobj" && { 3367189777a2SCristian Pallares func_basename "$srcfile" 3368*b3fce824SCristian Pallarés libobj=$func_basename_result 3369189777a2SCristian Pallares } 3370189777a2SCristian Pallares ;; 3371189777a2SCristian Pallares esac 3372189777a2SCristian Pallares 3373189777a2SCristian Pallares # Recognize several different file suffixes. 3374189777a2SCristian Pallares # If the user specifies -o file.o, it is replaced with file.lo 3375189777a2SCristian Pallares case $libobj in 3376189777a2SCristian Pallares *.[cCFSifmso] | \ 3377189777a2SCristian Pallares *.ada | *.adb | *.ads | *.asm | \ 3378189777a2SCristian Pallares *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 3379189777a2SCristian Pallares *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3380189777a2SCristian Pallares func_xform "$libobj" 3381189777a2SCristian Pallares libobj=$func_xform_result 3382189777a2SCristian Pallares ;; 3383189777a2SCristian Pallares esac 3384189777a2SCristian Pallares 3385189777a2SCristian Pallares case $libobj in 3386189777a2SCristian Pallares *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3387189777a2SCristian Pallares *) 3388*b3fce824SCristian Pallarés func_fatal_error "cannot determine name of library object from '$libobj'" 3389189777a2SCristian Pallares ;; 3390189777a2SCristian Pallares esac 3391189777a2SCristian Pallares 3392189777a2SCristian Pallares func_infer_tag $base_compile 3393189777a2SCristian Pallares 3394189777a2SCristian Pallares for arg in $later; do 3395189777a2SCristian Pallares case $arg in 3396189777a2SCristian Pallares -shared) 3397*b3fce824SCristian Pallarés test yes = "$build_libtool_libs" \ 3398*b3fce824SCristian Pallarés || func_fatal_configuration "cannot build a shared library" 3399189777a2SCristian Pallares build_old_libs=no 3400189777a2SCristian Pallares continue 3401189777a2SCristian Pallares ;; 3402189777a2SCristian Pallares 3403189777a2SCristian Pallares -static) 3404189777a2SCristian Pallares build_libtool_libs=no 3405189777a2SCristian Pallares build_old_libs=yes 3406189777a2SCristian Pallares continue 3407189777a2SCristian Pallares ;; 3408189777a2SCristian Pallares 3409189777a2SCristian Pallares -prefer-pic) 3410189777a2SCristian Pallares pic_mode=yes 3411189777a2SCristian Pallares continue 3412189777a2SCristian Pallares ;; 3413189777a2SCristian Pallares 3414189777a2SCristian Pallares -prefer-non-pic) 3415189777a2SCristian Pallares pic_mode=no 3416189777a2SCristian Pallares continue 3417189777a2SCristian Pallares ;; 3418189777a2SCristian Pallares esac 3419189777a2SCristian Pallares done 3420189777a2SCristian Pallares 3421189777a2SCristian Pallares func_quote_for_eval "$libobj" 3422189777a2SCristian Pallares test "X$libobj" != "X$func_quote_for_eval_result" \ 3423189777a2SCristian Pallares && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3424*b3fce824SCristian Pallarés && func_warning "libobj name '$libobj' may not contain shell special characters." 3425189777a2SCristian Pallares func_dirname_and_basename "$obj" "/" "" 3426*b3fce824SCristian Pallarés objname=$func_basename_result 3427*b3fce824SCristian Pallarés xdir=$func_dirname_result 3428*b3fce824SCristian Pallarés lobj=$xdir$objdir/$objname 3429189777a2SCristian Pallares 3430189777a2SCristian Pallares test -z "$base_compile" && \ 3431189777a2SCristian Pallares func_fatal_help "you must specify a compilation command" 3432189777a2SCristian Pallares 3433189777a2SCristian Pallares # Delete any leftover library objects. 3434*b3fce824SCristian Pallarés if test yes = "$build_old_libs"; then 3435189777a2SCristian Pallares removelist="$obj $lobj $libobj ${libobj}T" 3436189777a2SCristian Pallares else 3437189777a2SCristian Pallares removelist="$lobj $libobj ${libobj}T" 3438189777a2SCristian Pallares fi 3439189777a2SCristian Pallares 3440189777a2SCristian Pallares # On Cygwin there's no "real" PIC flag so we must build both object types 3441189777a2SCristian Pallares case $host_os in 3442189777a2SCristian Pallares cygwin* | mingw* | pw32* | os2* | cegcc*) 3443189777a2SCristian Pallares pic_mode=default 3444189777a2SCristian Pallares ;; 3445189777a2SCristian Pallares esac 3446*b3fce824SCristian Pallarés if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3447189777a2SCristian Pallares # non-PIC code in shared libraries is not supported 3448189777a2SCristian Pallares pic_mode=default 3449189777a2SCristian Pallares fi 3450189777a2SCristian Pallares 3451189777a2SCristian Pallares # Calculate the filename of the output object if compiler does 3452189777a2SCristian Pallares # not support -o with -c 3453*b3fce824SCristian Pallarés if test no = "$compiler_c_o"; then 3454*b3fce824SCristian Pallarés output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3455*b3fce824SCristian Pallarés lockfile=$output_obj.lock 3456189777a2SCristian Pallares else 3457189777a2SCristian Pallares output_obj= 3458189777a2SCristian Pallares need_locks=no 3459189777a2SCristian Pallares lockfile= 3460189777a2SCristian Pallares fi 3461189777a2SCristian Pallares 3462189777a2SCristian Pallares # Lock this critical section if it is needed 3463189777a2SCristian Pallares # We use this script file to make the link, it avoids creating a new file 3464*b3fce824SCristian Pallarés if test yes = "$need_locks"; then 3465189777a2SCristian Pallares until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3466189777a2SCristian Pallares func_echo "Waiting for $lockfile to be removed" 3467189777a2SCristian Pallares sleep 2 3468189777a2SCristian Pallares done 3469*b3fce824SCristian Pallarés elif test warn = "$need_locks"; then 3470189777a2SCristian Pallares if test -f "$lockfile"; then 3471189777a2SCristian Pallares $ECHO "\ 3472189777a2SCristian Pallares*** ERROR, $lockfile exists and contains: 3473189777a2SCristian Pallares`cat $lockfile 2>/dev/null` 3474189777a2SCristian Pallares 3475189777a2SCristian PallaresThis indicates that another process is trying to use the same 3476189777a2SCristian Pallarestemporary object file, and libtool could not work around it because 3477*b3fce824SCristian Pallarésyour compiler does not support '-c' and '-o' together. If you 3478189777a2SCristian Pallaresrepeat this compilation, it may succeed, by chance, but you had better 3479189777a2SCristian Pallaresavoid parallel builds (make -j) in this platform, or get a better 3480189777a2SCristian Pallarescompiler." 3481189777a2SCristian Pallares 3482189777a2SCristian Pallares $opt_dry_run || $RM $removelist 3483189777a2SCristian Pallares exit $EXIT_FAILURE 3484189777a2SCristian Pallares fi 3485189777a2SCristian Pallares func_append removelist " $output_obj" 3486189777a2SCristian Pallares $ECHO "$srcfile" > "$lockfile" 3487189777a2SCristian Pallares fi 3488189777a2SCristian Pallares 3489189777a2SCristian Pallares $opt_dry_run || $RM $removelist 3490189777a2SCristian Pallares func_append removelist " $lockfile" 3491189777a2SCristian Pallares trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3492189777a2SCristian Pallares 3493189777a2SCristian Pallares func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3494189777a2SCristian Pallares srcfile=$func_to_tool_file_result 3495189777a2SCristian Pallares func_quote_for_eval "$srcfile" 3496189777a2SCristian Pallares qsrcfile=$func_quote_for_eval_result 3497189777a2SCristian Pallares 3498189777a2SCristian Pallares # Only build a PIC object if we are building libtool libraries. 3499*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs"; then 3500189777a2SCristian Pallares # Without this assignment, base_compile gets emptied. 3501189777a2SCristian Pallares fbsd_hideous_sh_bug=$base_compile 3502189777a2SCristian Pallares 3503*b3fce824SCristian Pallarés if test no != "$pic_mode"; then 3504189777a2SCristian Pallares command="$base_compile $qsrcfile $pic_flag" 3505189777a2SCristian Pallares else 3506189777a2SCristian Pallares # Don't build PIC code 3507189777a2SCristian Pallares command="$base_compile $qsrcfile" 3508189777a2SCristian Pallares fi 3509189777a2SCristian Pallares 3510189777a2SCristian Pallares func_mkdir_p "$xdir$objdir" 3511189777a2SCristian Pallares 3512189777a2SCristian Pallares if test -z "$output_obj"; then 3513189777a2SCristian Pallares # Place PIC objects in $objdir 3514189777a2SCristian Pallares func_append command " -o $lobj" 3515189777a2SCristian Pallares fi 3516189777a2SCristian Pallares 3517189777a2SCristian Pallares func_show_eval_locale "$command" \ 3518189777a2SCristian Pallares 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3519189777a2SCristian Pallares 3520*b3fce824SCristian Pallarés if test warn = "$need_locks" && 3521189777a2SCristian Pallares test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3522189777a2SCristian Pallares $ECHO "\ 3523189777a2SCristian Pallares*** ERROR, $lockfile contains: 3524189777a2SCristian Pallares`cat $lockfile 2>/dev/null` 3525189777a2SCristian Pallares 3526189777a2SCristian Pallaresbut it should contain: 3527189777a2SCristian Pallares$srcfile 3528189777a2SCristian Pallares 3529189777a2SCristian PallaresThis indicates that another process is trying to use the same 3530189777a2SCristian Pallarestemporary object file, and libtool could not work around it because 3531*b3fce824SCristian Pallarésyour compiler does not support '-c' and '-o' together. If you 3532189777a2SCristian Pallaresrepeat this compilation, it may succeed, by chance, but you had better 3533189777a2SCristian Pallaresavoid parallel builds (make -j) in this platform, or get a better 3534189777a2SCristian Pallarescompiler." 3535189777a2SCristian Pallares 3536189777a2SCristian Pallares $opt_dry_run || $RM $removelist 3537189777a2SCristian Pallares exit $EXIT_FAILURE 3538189777a2SCristian Pallares fi 3539189777a2SCristian Pallares 3540189777a2SCristian Pallares # Just move the object if needed, then go on to compile the next one 3541189777a2SCristian Pallares if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3542189777a2SCristian Pallares func_show_eval '$MV "$output_obj" "$lobj"' \ 3543189777a2SCristian Pallares 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3544189777a2SCristian Pallares fi 3545189777a2SCristian Pallares 3546189777a2SCristian Pallares # Allow error messages only from the first compilation. 3547*b3fce824SCristian Pallarés if test yes = "$suppress_opt"; then 3548189777a2SCristian Pallares suppress_output=' >/dev/null 2>&1' 3549189777a2SCristian Pallares fi 3550189777a2SCristian Pallares fi 3551189777a2SCristian Pallares 3552189777a2SCristian Pallares # Only build a position-dependent object if we build old libraries. 3553*b3fce824SCristian Pallarés if test yes = "$build_old_libs"; then 3554*b3fce824SCristian Pallarés if test yes != "$pic_mode"; then 3555189777a2SCristian Pallares # Don't build PIC code 3556189777a2SCristian Pallares command="$base_compile $qsrcfile$pie_flag" 3557189777a2SCristian Pallares else 3558189777a2SCristian Pallares command="$base_compile $qsrcfile $pic_flag" 3559189777a2SCristian Pallares fi 3560*b3fce824SCristian Pallarés if test yes = "$compiler_c_o"; then 3561189777a2SCristian Pallares func_append command " -o $obj" 3562189777a2SCristian Pallares fi 3563189777a2SCristian Pallares 3564189777a2SCristian Pallares # Suppress compiler output if we already did a PIC compilation. 3565189777a2SCristian Pallares func_append command "$suppress_output" 3566189777a2SCristian Pallares func_show_eval_locale "$command" \ 3567189777a2SCristian Pallares '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3568189777a2SCristian Pallares 3569*b3fce824SCristian Pallarés if test warn = "$need_locks" && 3570189777a2SCristian Pallares test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3571189777a2SCristian Pallares $ECHO "\ 3572189777a2SCristian Pallares*** ERROR, $lockfile contains: 3573189777a2SCristian Pallares`cat $lockfile 2>/dev/null` 3574189777a2SCristian Pallares 3575189777a2SCristian Pallaresbut it should contain: 3576189777a2SCristian Pallares$srcfile 3577189777a2SCristian Pallares 3578189777a2SCristian PallaresThis indicates that another process is trying to use the same 3579189777a2SCristian Pallarestemporary object file, and libtool could not work around it because 3580*b3fce824SCristian Pallarésyour compiler does not support '-c' and '-o' together. If you 3581189777a2SCristian Pallaresrepeat this compilation, it may succeed, by chance, but you had better 3582189777a2SCristian Pallaresavoid parallel builds (make -j) in this platform, or get a better 3583189777a2SCristian Pallarescompiler." 3584189777a2SCristian Pallares 3585189777a2SCristian Pallares $opt_dry_run || $RM $removelist 3586189777a2SCristian Pallares exit $EXIT_FAILURE 3587189777a2SCristian Pallares fi 3588189777a2SCristian Pallares 3589189777a2SCristian Pallares # Just move the object if needed 3590189777a2SCristian Pallares if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3591189777a2SCristian Pallares func_show_eval '$MV "$output_obj" "$obj"' \ 3592189777a2SCristian Pallares 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3593189777a2SCristian Pallares fi 3594189777a2SCristian Pallares fi 3595189777a2SCristian Pallares 3596189777a2SCristian Pallares $opt_dry_run || { 3597189777a2SCristian Pallares func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3598189777a2SCristian Pallares 3599189777a2SCristian Pallares # Unlock the critical section if it was locked 3600*b3fce824SCristian Pallarés if test no != "$need_locks"; then 3601189777a2SCristian Pallares removelist=$lockfile 3602189777a2SCristian Pallares $RM "$lockfile" 3603189777a2SCristian Pallares fi 3604189777a2SCristian Pallares } 3605189777a2SCristian Pallares 3606189777a2SCristian Pallares exit $EXIT_SUCCESS 3607189777a2SCristian Pallares} 3608189777a2SCristian Pallares 3609189777a2SCristian Pallares$opt_help || { 3610*b3fce824SCristian Pallarés test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3611189777a2SCristian Pallares} 3612189777a2SCristian Pallares 3613189777a2SCristian Pallaresfunc_mode_help () 3614189777a2SCristian Pallares{ 3615189777a2SCristian Pallares # We need to display help for each of the modes. 3616189777a2SCristian Pallares case $opt_mode in 3617189777a2SCristian Pallares "") 3618189777a2SCristian Pallares # Generic help is extracted from the usage comments 3619189777a2SCristian Pallares # at the start of this file. 3620189777a2SCristian Pallares func_help 3621189777a2SCristian Pallares ;; 3622189777a2SCristian Pallares 3623189777a2SCristian Pallares clean) 3624189777a2SCristian Pallares $ECHO \ 3625189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3626189777a2SCristian Pallares 3627189777a2SCristian PallaresRemove files from the build directory. 3628189777a2SCristian Pallares 3629189777a2SCristian PallaresRM is the name of the program to use to delete files associated with each FILE 3630*b3fce824SCristian Pallarés(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3631189777a2SCristian Pallaresto RM. 3632189777a2SCristian Pallares 3633189777a2SCristian PallaresIf FILE is a libtool library, object or program, all the files associated 3634189777a2SCristian Pallareswith it are deleted. Otherwise, only FILE itself is deleted using RM." 3635189777a2SCristian Pallares ;; 3636189777a2SCristian Pallares 3637189777a2SCristian Pallares compile) 3638189777a2SCristian Pallares $ECHO \ 3639189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3640189777a2SCristian Pallares 3641189777a2SCristian PallaresCompile a source file into a libtool library object. 3642189777a2SCristian Pallares 3643189777a2SCristian PallaresThis mode accepts the following additional options: 3644189777a2SCristian Pallares 3645189777a2SCristian Pallares -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3646189777a2SCristian Pallares -no-suppress do not suppress compiler output for multiple passes 3647189777a2SCristian Pallares -prefer-pic try to build PIC objects only 3648189777a2SCristian Pallares -prefer-non-pic try to build non-PIC objects only 3649*b3fce824SCristian Pallarés -shared do not build a '.o' file suitable for static linking 3650*b3fce824SCristian Pallarés -static only build a '.o' file suitable for static linking 3651189777a2SCristian Pallares -Wc,FLAG pass FLAG directly to the compiler 3652189777a2SCristian Pallares 3653*b3fce824SCristian PallarésCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3654189777a2SCristian Pallaresfrom the given SOURCEFILE. 3655189777a2SCristian Pallares 3656189777a2SCristian PallaresThe output file name is determined by removing the directory component from 3657*b3fce824SCristian PallarésSOURCEFILE, then substituting the C source code suffix '.c' with the 3658*b3fce824SCristian Pallaréslibrary object suffix, '.lo'." 3659189777a2SCristian Pallares ;; 3660189777a2SCristian Pallares 3661189777a2SCristian Pallares execute) 3662189777a2SCristian Pallares $ECHO \ 3663189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3664189777a2SCristian Pallares 3665189777a2SCristian PallaresAutomatically set library path, then run a program. 3666189777a2SCristian Pallares 3667189777a2SCristian PallaresThis mode accepts the following additional options: 3668189777a2SCristian Pallares 3669189777a2SCristian Pallares -dlopen FILE add the directory containing FILE to the library path 3670189777a2SCristian Pallares 3671*b3fce824SCristian PallarésThis mode sets the library path environment variable according to '-dlopen' 3672189777a2SCristian Pallaresflags. 3673189777a2SCristian Pallares 3674189777a2SCristian PallaresIf any of the ARGS are libtool executable wrappers, then they are translated 3675189777a2SCristian Pallaresinto their corresponding uninstalled binary, and any of their required library 3676189777a2SCristian Pallaresdirectories are added to the library path. 3677189777a2SCristian Pallares 3678189777a2SCristian PallaresThen, COMMAND is executed, with ARGS as arguments." 3679189777a2SCristian Pallares ;; 3680189777a2SCristian Pallares 3681189777a2SCristian Pallares finish) 3682189777a2SCristian Pallares $ECHO \ 3683189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3684189777a2SCristian Pallares 3685189777a2SCristian PallaresComplete the installation of libtool libraries. 3686189777a2SCristian Pallares 3687189777a2SCristian PallaresEach LIBDIR is a directory that contains libtool libraries. 3688189777a2SCristian Pallares 3689189777a2SCristian PallaresThe commands that this mode executes may require superuser privileges. Use 3690*b3fce824SCristian Pallarésthe '--dry-run' option if you just want to see what would be executed." 3691189777a2SCristian Pallares ;; 3692189777a2SCristian Pallares 3693189777a2SCristian Pallares install) 3694189777a2SCristian Pallares $ECHO \ 3695189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3696189777a2SCristian Pallares 3697189777a2SCristian PallaresInstall executables or libraries. 3698189777a2SCristian Pallares 3699189777a2SCristian PallaresINSTALL-COMMAND is the installation command. The first component should be 3700*b3fce824SCristian Pallaréseither the 'install' or 'cp' program. 3701189777a2SCristian Pallares 3702189777a2SCristian PallaresThe following components of INSTALL-COMMAND are treated specially: 3703189777a2SCristian Pallares 3704189777a2SCristian Pallares -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3705189777a2SCristian Pallares 3706189777a2SCristian PallaresThe rest of the components are interpreted as arguments to that command (only 3707189777a2SCristian PallaresBSD-compatible install options are recognized)." 3708189777a2SCristian Pallares ;; 3709189777a2SCristian Pallares 3710189777a2SCristian Pallares link) 3711189777a2SCristian Pallares $ECHO \ 3712189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3713189777a2SCristian Pallares 3714189777a2SCristian PallaresLink object files or libraries together to form another library, or to 3715189777a2SCristian Pallarescreate an executable program. 3716189777a2SCristian Pallares 3717189777a2SCristian PallaresLINK-COMMAND is a command using the C compiler that you would use to create 3718189777a2SCristian Pallaresa program from several object files. 3719189777a2SCristian Pallares 3720189777a2SCristian PallaresThe following components of LINK-COMMAND are treated specially: 3721189777a2SCristian Pallares 3722189777a2SCristian Pallares -all-static do not do any dynamic linking at all 3723189777a2SCristian Pallares -avoid-version do not add a version suffix if possible 3724189777a2SCristian Pallares -bindir BINDIR specify path to binaries directory (for systems where 3725189777a2SCristian Pallares libraries must be found in the PATH setting at runtime) 3726*b3fce824SCristian Pallarés -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3727189777a2SCristian Pallares -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3728189777a2SCristian Pallares -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3729189777a2SCristian Pallares -export-symbols SYMFILE 3730189777a2SCristian Pallares try to export only the symbols listed in SYMFILE 3731189777a2SCristian Pallares -export-symbols-regex REGEX 3732189777a2SCristian Pallares try to export only the symbols matching REGEX 3733189777a2SCristian Pallares -LLIBDIR search LIBDIR for required installed libraries 3734189777a2SCristian Pallares -lNAME OUTPUT-FILE requires the installed library libNAME 3735189777a2SCristian Pallares -module build a library that can dlopened 3736189777a2SCristian Pallares -no-fast-install disable the fast-install mode 3737189777a2SCristian Pallares -no-install link a not-installable executable 3738189777a2SCristian Pallares -no-undefined declare that a library does not refer to external symbols 3739189777a2SCristian Pallares -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3740*b3fce824SCristian Pallarés -objectlist FILE use a list of object files found in FILE to specify objects 3741*b3fce824SCristian Pallarés -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3742189777a2SCristian Pallares -precious-files-regex REGEX 3743189777a2SCristian Pallares don't remove output files matching REGEX 3744189777a2SCristian Pallares -release RELEASE specify package release information 3745189777a2SCristian Pallares -rpath LIBDIR the created library will eventually be installed in LIBDIR 3746189777a2SCristian Pallares -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 3747189777a2SCristian Pallares -shared only do dynamic linking of libtool libraries 3748189777a2SCristian Pallares -shrext SUFFIX override the standard shared library file extension 3749189777a2SCristian Pallares -static do not do any dynamic linking of uninstalled libtool libraries 3750189777a2SCristian Pallares -static-libtool-libs 3751189777a2SCristian Pallares do not do any dynamic linking of libtool libraries 3752189777a2SCristian Pallares -version-info CURRENT[:REVISION[:AGE]] 3753189777a2SCristian Pallares specify library version info [each variable defaults to 0] 3754189777a2SCristian Pallares -weak LIBNAME declare that the target provides the LIBNAME interface 3755189777a2SCristian Pallares -Wc,FLAG 3756189777a2SCristian Pallares -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 3757189777a2SCristian Pallares -Wl,FLAG 3758189777a2SCristian Pallares -Xlinker FLAG pass linker-specific FLAG directly to the linker 3759189777a2SCristian Pallares -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 3760189777a2SCristian Pallares 3761*b3fce824SCristian PallarésAll other options (arguments beginning with '-') are ignored. 3762189777a2SCristian Pallares 3763*b3fce824SCristian PallarésEvery other argument is treated as a filename. Files ending in '.la' are 3764189777a2SCristian Pallarestreated as uninstalled libtool libraries, other files are standard or library 3765189777a2SCristian Pallaresobject files. 3766189777a2SCristian Pallares 3767*b3fce824SCristian PallarésIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 3768*b3fce824SCristian Pallarésonly library objects ('.lo' files) may be specified, and '-rpath' is 3769189777a2SCristian Pallaresrequired, except when creating a convenience library. 3770189777a2SCristian Pallares 3771*b3fce824SCristian PallarésIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 3772*b3fce824SCristian Pallarésusing 'ar' and 'ranlib', or on Windows using 'lib'. 3773189777a2SCristian Pallares 3774*b3fce824SCristian PallarésIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 3775189777a2SCristian Pallaresis created, otherwise an executable program is created." 3776189777a2SCristian Pallares ;; 3777189777a2SCristian Pallares 3778189777a2SCristian Pallares uninstall) 3779189777a2SCristian Pallares $ECHO \ 3780189777a2SCristian Pallares"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 3781189777a2SCristian Pallares 3782189777a2SCristian PallaresRemove libraries from an installation directory. 3783189777a2SCristian Pallares 3784189777a2SCristian PallaresRM is the name of the program to use to delete files associated with each FILE 3785*b3fce824SCristian Pallarés(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3786189777a2SCristian Pallaresto RM. 3787189777a2SCristian Pallares 3788189777a2SCristian PallaresIf FILE is a libtool library, all the files associated with it are deleted. 3789189777a2SCristian PallaresOtherwise, only FILE itself is deleted using RM." 3790189777a2SCristian Pallares ;; 3791189777a2SCristian Pallares 3792189777a2SCristian Pallares *) 3793*b3fce824SCristian Pallarés func_fatal_help "invalid operation mode '$opt_mode'" 3794189777a2SCristian Pallares ;; 3795189777a2SCristian Pallares esac 3796189777a2SCristian Pallares 3797189777a2SCristian Pallares echo 3798*b3fce824SCristian Pallarés $ECHO "Try '$progname --help' for more information about other modes." 3799189777a2SCristian Pallares} 3800189777a2SCristian Pallares 3801189777a2SCristian Pallares# Now that we've collected a possible --mode arg, show help if necessary 3802189777a2SCristian Pallaresif $opt_help; then 3803*b3fce824SCristian Pallarés if test : = "$opt_help"; then 3804189777a2SCristian Pallares func_mode_help 3805189777a2SCristian Pallares else 3806189777a2SCristian Pallares { 3807189777a2SCristian Pallares func_help noexit 3808189777a2SCristian Pallares for opt_mode in compile link execute install finish uninstall clean; do 3809189777a2SCristian Pallares func_mode_help 3810189777a2SCristian Pallares done 3811*b3fce824SCristian Pallarés } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 3812189777a2SCristian Pallares { 3813189777a2SCristian Pallares func_help noexit 3814189777a2SCristian Pallares for opt_mode in compile link execute install finish uninstall clean; do 3815189777a2SCristian Pallares echo 3816189777a2SCristian Pallares func_mode_help 3817189777a2SCristian Pallares done 3818189777a2SCristian Pallares } | 3819*b3fce824SCristian Pallarés $SED '1d 3820189777a2SCristian Pallares /^When reporting/,/^Report/{ 3821189777a2SCristian Pallares H 3822189777a2SCristian Pallares d 3823189777a2SCristian Pallares } 3824189777a2SCristian Pallares $x 3825189777a2SCristian Pallares /information about other modes/d 3826189777a2SCristian Pallares /more detailed .*MODE/d 3827189777a2SCristian Pallares s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 3828189777a2SCristian Pallares fi 3829189777a2SCristian Pallares exit $? 3830189777a2SCristian Pallaresfi 3831189777a2SCristian Pallares 3832189777a2SCristian Pallares 3833189777a2SCristian Pallares# func_mode_execute arg... 3834189777a2SCristian Pallaresfunc_mode_execute () 3835189777a2SCristian Pallares{ 3836*b3fce824SCristian Pallarés $debug_cmd 3837*b3fce824SCristian Pallarés 3838189777a2SCristian Pallares # The first argument is the command name. 3839*b3fce824SCristian Pallarés cmd=$nonopt 3840189777a2SCristian Pallares test -z "$cmd" && \ 3841189777a2SCristian Pallares func_fatal_help "you must specify a COMMAND" 3842189777a2SCristian Pallares 3843189777a2SCristian Pallares # Handle -dlopen flags immediately. 3844189777a2SCristian Pallares for file in $opt_dlopen; do 3845189777a2SCristian Pallares test -f "$file" \ 3846*b3fce824SCristian Pallarés || func_fatal_help "'$file' is not a file" 3847189777a2SCristian Pallares 3848189777a2SCristian Pallares dir= 3849189777a2SCristian Pallares case $file in 3850189777a2SCristian Pallares *.la) 3851189777a2SCristian Pallares func_resolve_sysroot "$file" 3852189777a2SCristian Pallares file=$func_resolve_sysroot_result 3853189777a2SCristian Pallares 3854189777a2SCristian Pallares # Check to see that this really is a libtool archive. 3855189777a2SCristian Pallares func_lalib_unsafe_p "$file" \ 3856*b3fce824SCristian Pallarés || func_fatal_help "'$lib' is not a valid libtool archive" 3857189777a2SCristian Pallares 3858189777a2SCristian Pallares # Read the libtool library. 3859189777a2SCristian Pallares dlname= 3860189777a2SCristian Pallares library_names= 3861189777a2SCristian Pallares func_source "$file" 3862189777a2SCristian Pallares 3863189777a2SCristian Pallares # Skip this library if it cannot be dlopened. 3864189777a2SCristian Pallares if test -z "$dlname"; then 3865189777a2SCristian Pallares # Warn if it was a shared library. 3866189777a2SCristian Pallares test -n "$library_names" && \ 3867*b3fce824SCristian Pallarés func_warning "'$file' was not linked with '-export-dynamic'" 3868189777a2SCristian Pallares continue 3869189777a2SCristian Pallares fi 3870189777a2SCristian Pallares 3871189777a2SCristian Pallares func_dirname "$file" "" "." 3872*b3fce824SCristian Pallarés dir=$func_dirname_result 3873189777a2SCristian Pallares 3874189777a2SCristian Pallares if test -f "$dir/$objdir/$dlname"; then 3875189777a2SCristian Pallares func_append dir "/$objdir" 3876189777a2SCristian Pallares else 3877189777a2SCristian Pallares if test ! -f "$dir/$dlname"; then 3878*b3fce824SCristian Pallarés func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 3879189777a2SCristian Pallares fi 3880189777a2SCristian Pallares fi 3881189777a2SCristian Pallares ;; 3882189777a2SCristian Pallares 3883189777a2SCristian Pallares *.lo) 3884189777a2SCristian Pallares # Just add the directory containing the .lo file. 3885189777a2SCristian Pallares func_dirname "$file" "" "." 3886*b3fce824SCristian Pallarés dir=$func_dirname_result 3887189777a2SCristian Pallares ;; 3888189777a2SCristian Pallares 3889189777a2SCristian Pallares *) 3890*b3fce824SCristian Pallarés func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 3891189777a2SCristian Pallares continue 3892189777a2SCristian Pallares ;; 3893189777a2SCristian Pallares esac 3894189777a2SCristian Pallares 3895189777a2SCristian Pallares # Get the absolute pathname. 3896189777a2SCristian Pallares absdir=`cd "$dir" && pwd` 3897*b3fce824SCristian Pallarés test -n "$absdir" && dir=$absdir 3898189777a2SCristian Pallares 3899189777a2SCristian Pallares # Now add the directory to shlibpath_var. 3900189777a2SCristian Pallares if eval "test -z \"\$$shlibpath_var\""; then 3901189777a2SCristian Pallares eval "$shlibpath_var=\"\$dir\"" 3902189777a2SCristian Pallares else 3903189777a2SCristian Pallares eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 3904189777a2SCristian Pallares fi 3905189777a2SCristian Pallares done 3906189777a2SCristian Pallares 3907189777a2SCristian Pallares # This variable tells wrapper scripts just to set shlibpath_var 3908189777a2SCristian Pallares # rather than running their programs. 3909*b3fce824SCristian Pallarés libtool_execute_magic=$magic 3910189777a2SCristian Pallares 3911189777a2SCristian Pallares # Check if any of the arguments is a wrapper script. 3912189777a2SCristian Pallares args= 3913189777a2SCristian Pallares for file 3914189777a2SCristian Pallares do 3915189777a2SCristian Pallares case $file in 3916189777a2SCristian Pallares -* | *.la | *.lo ) ;; 3917189777a2SCristian Pallares *) 3918189777a2SCristian Pallares # Do a test to see if this is really a libtool program. 3919189777a2SCristian Pallares if func_ltwrapper_script_p "$file"; then 3920189777a2SCristian Pallares func_source "$file" 3921189777a2SCristian Pallares # Transform arg to wrapped name. 3922*b3fce824SCristian Pallarés file=$progdir/$program 3923189777a2SCristian Pallares elif func_ltwrapper_executable_p "$file"; then 3924189777a2SCristian Pallares func_ltwrapper_scriptname "$file" 3925189777a2SCristian Pallares func_source "$func_ltwrapper_scriptname_result" 3926189777a2SCristian Pallares # Transform arg to wrapped name. 3927*b3fce824SCristian Pallarés file=$progdir/$program 3928189777a2SCristian Pallares fi 3929189777a2SCristian Pallares ;; 3930189777a2SCristian Pallares esac 3931189777a2SCristian Pallares # Quote arguments (to preserve shell metacharacters). 3932189777a2SCristian Pallares func_append_quoted args "$file" 3933189777a2SCristian Pallares done 3934189777a2SCristian Pallares 3935*b3fce824SCristian Pallarés if $opt_dry_run; then 3936*b3fce824SCristian Pallarés # Display what would be done. 3937*b3fce824SCristian Pallarés if test -n "$shlibpath_var"; then 3938*b3fce824SCristian Pallarés eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 3939*b3fce824SCristian Pallarés echo "export $shlibpath_var" 3940*b3fce824SCristian Pallarés fi 3941*b3fce824SCristian Pallarés $ECHO "$cmd$args" 3942*b3fce824SCristian Pallarés exit $EXIT_SUCCESS 3943*b3fce824SCristian Pallarés else 3944189777a2SCristian Pallares if test -n "$shlibpath_var"; then 3945189777a2SCristian Pallares # Export the shlibpath_var. 3946189777a2SCristian Pallares eval "export $shlibpath_var" 3947189777a2SCristian Pallares fi 3948189777a2SCristian Pallares 3949189777a2SCristian Pallares # Restore saved environment variables 3950189777a2SCristian Pallares for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 3951189777a2SCristian Pallares do 3952189777a2SCristian Pallares eval "if test \"\${save_$lt_var+set}\" = set; then 3953189777a2SCristian Pallares $lt_var=\$save_$lt_var; export $lt_var 3954189777a2SCristian Pallares else 3955189777a2SCristian Pallares $lt_unset $lt_var 3956189777a2SCristian Pallares fi" 3957189777a2SCristian Pallares done 3958189777a2SCristian Pallares 3959189777a2SCristian Pallares # Now prepare to actually exec the command. 3960*b3fce824SCristian Pallarés exec_cmd=\$cmd$args 3961189777a2SCristian Pallares fi 3962189777a2SCristian Pallares} 3963189777a2SCristian Pallares 3964*b3fce824SCristian Pallaréstest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 3965189777a2SCristian Pallares 3966189777a2SCristian Pallares 3967189777a2SCristian Pallares# func_mode_finish arg... 3968189777a2SCristian Pallaresfunc_mode_finish () 3969189777a2SCristian Pallares{ 3970*b3fce824SCristian Pallarés $debug_cmd 3971*b3fce824SCristian Pallarés 3972189777a2SCristian Pallares libs= 3973189777a2SCristian Pallares libdirs= 3974189777a2SCristian Pallares admincmds= 3975189777a2SCristian Pallares 3976189777a2SCristian Pallares for opt in "$nonopt" ${1+"$@"} 3977189777a2SCristian Pallares do 3978189777a2SCristian Pallares if test -d "$opt"; then 3979189777a2SCristian Pallares func_append libdirs " $opt" 3980189777a2SCristian Pallares 3981189777a2SCristian Pallares elif test -f "$opt"; then 3982189777a2SCristian Pallares if func_lalib_unsafe_p "$opt"; then 3983189777a2SCristian Pallares func_append libs " $opt" 3984189777a2SCristian Pallares else 3985*b3fce824SCristian Pallarés func_warning "'$opt' is not a valid libtool archive" 3986189777a2SCristian Pallares fi 3987189777a2SCristian Pallares 3988189777a2SCristian Pallares else 3989*b3fce824SCristian Pallarés func_fatal_error "invalid argument '$opt'" 3990189777a2SCristian Pallares fi 3991189777a2SCristian Pallares done 3992189777a2SCristian Pallares 3993189777a2SCristian Pallares if test -n "$libs"; then 3994189777a2SCristian Pallares if test -n "$lt_sysroot"; then 3995189777a2SCristian Pallares sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 3996189777a2SCristian Pallares sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 3997189777a2SCristian Pallares else 3998189777a2SCristian Pallares sysroot_cmd= 3999189777a2SCristian Pallares fi 4000189777a2SCristian Pallares 4001189777a2SCristian Pallares # Remove sysroot references 4002189777a2SCristian Pallares if $opt_dry_run; then 4003189777a2SCristian Pallares for lib in $libs; do 4004*b3fce824SCristian Pallarés echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4005189777a2SCristian Pallares done 4006189777a2SCristian Pallares else 4007189777a2SCristian Pallares tmpdir=`func_mktempdir` 4008189777a2SCristian Pallares for lib in $libs; do 4009*b3fce824SCristian Pallarés $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4010189777a2SCristian Pallares > $tmpdir/tmp-la 4011189777a2SCristian Pallares mv -f $tmpdir/tmp-la $lib 4012189777a2SCristian Pallares done 4013189777a2SCristian Pallares ${RM}r "$tmpdir" 4014189777a2SCristian Pallares fi 4015189777a2SCristian Pallares fi 4016189777a2SCristian Pallares 4017189777a2SCristian Pallares if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4018189777a2SCristian Pallares for libdir in $libdirs; do 4019189777a2SCristian Pallares if test -n "$finish_cmds"; then 4020189777a2SCristian Pallares # Do each command in the finish commands. 4021189777a2SCristian Pallares func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4022189777a2SCristian Pallares'"$cmd"'"' 4023189777a2SCristian Pallares fi 4024189777a2SCristian Pallares if test -n "$finish_eval"; then 4025189777a2SCristian Pallares # Do the single finish_eval. 4026189777a2SCristian Pallares eval cmds=\"$finish_eval\" 4027189777a2SCristian Pallares $opt_dry_run || eval "$cmds" || func_append admincmds " 4028189777a2SCristian Pallares $cmds" 4029189777a2SCristian Pallares fi 4030189777a2SCristian Pallares done 4031189777a2SCristian Pallares fi 4032189777a2SCristian Pallares 4033189777a2SCristian Pallares # Exit here if they wanted silent mode. 4034*b3fce824SCristian Pallarés $opt_quiet && exit $EXIT_SUCCESS 4035189777a2SCristian Pallares 4036189777a2SCristian Pallares if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4037189777a2SCristian Pallares echo "----------------------------------------------------------------------" 4038189777a2SCristian Pallares echo "Libraries have been installed in:" 4039189777a2SCristian Pallares for libdir in $libdirs; do 4040189777a2SCristian Pallares $ECHO " $libdir" 4041189777a2SCristian Pallares done 4042189777a2SCristian Pallares echo 4043189777a2SCristian Pallares echo "If you ever happen to want to link against installed libraries" 4044189777a2SCristian Pallares echo "in a given directory, LIBDIR, you must either use libtool, and" 4045*b3fce824SCristian Pallarés echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4046189777a2SCristian Pallares echo "flag during linking and do at least one of the following:" 4047189777a2SCristian Pallares if test -n "$shlibpath_var"; then 4048*b3fce824SCristian Pallarés echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4049189777a2SCristian Pallares echo " during execution" 4050189777a2SCristian Pallares fi 4051189777a2SCristian Pallares if test -n "$runpath_var"; then 4052*b3fce824SCristian Pallarés echo " - add LIBDIR to the '$runpath_var' environment variable" 4053189777a2SCristian Pallares echo " during linking" 4054189777a2SCristian Pallares fi 4055189777a2SCristian Pallares if test -n "$hardcode_libdir_flag_spec"; then 4056189777a2SCristian Pallares libdir=LIBDIR 4057189777a2SCristian Pallares eval flag=\"$hardcode_libdir_flag_spec\" 4058189777a2SCristian Pallares 4059*b3fce824SCristian Pallarés $ECHO " - use the '$flag' linker flag" 4060189777a2SCristian Pallares fi 4061189777a2SCristian Pallares if test -n "$admincmds"; then 4062189777a2SCristian Pallares $ECHO " - have your system administrator run these commands:$admincmds" 4063189777a2SCristian Pallares fi 4064189777a2SCristian Pallares if test -f /etc/ld.so.conf; then 4065*b3fce824SCristian Pallarés echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4066189777a2SCristian Pallares fi 4067189777a2SCristian Pallares echo 4068189777a2SCristian Pallares 4069189777a2SCristian Pallares echo "See any operating system documentation about shared libraries for" 4070189777a2SCristian Pallares case $host in 4071189777a2SCristian Pallares solaris2.[6789]|solaris2.1[0-9]) 4072189777a2SCristian Pallares echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4073189777a2SCristian Pallares echo "pages." 4074189777a2SCristian Pallares ;; 4075189777a2SCristian Pallares *) 4076189777a2SCristian Pallares echo "more information, such as the ld(1) and ld.so(8) manual pages." 4077189777a2SCristian Pallares ;; 4078189777a2SCristian Pallares esac 4079189777a2SCristian Pallares echo "----------------------------------------------------------------------" 4080189777a2SCristian Pallares fi 4081189777a2SCristian Pallares exit $EXIT_SUCCESS 4082189777a2SCristian Pallares} 4083189777a2SCristian Pallares 4084*b3fce824SCristian Pallaréstest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4085189777a2SCristian Pallares 4086189777a2SCristian Pallares 4087189777a2SCristian Pallares# func_mode_install arg... 4088189777a2SCristian Pallaresfunc_mode_install () 4089189777a2SCristian Pallares{ 4090*b3fce824SCristian Pallarés $debug_cmd 4091*b3fce824SCristian Pallarés 4092189777a2SCristian Pallares # There may be an optional sh(1) argument at the beginning of 4093189777a2SCristian Pallares # install_prog (especially on Windows NT). 4094*b3fce824SCristian Pallarés if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4095189777a2SCristian Pallares # Allow the use of GNU shtool's install command. 4096*b3fce824SCristian Pallarés case $nonopt in *shtool*) :;; *) false;; esac 4097*b3fce824SCristian Pallarés then 4098189777a2SCristian Pallares # Aesthetically quote it. 4099189777a2SCristian Pallares func_quote_for_eval "$nonopt" 4100189777a2SCristian Pallares install_prog="$func_quote_for_eval_result " 4101189777a2SCristian Pallares arg=$1 4102189777a2SCristian Pallares shift 4103189777a2SCristian Pallares else 4104189777a2SCristian Pallares install_prog= 4105189777a2SCristian Pallares arg=$nonopt 4106189777a2SCristian Pallares fi 4107189777a2SCristian Pallares 4108189777a2SCristian Pallares # The real first argument should be the name of the installation program. 4109189777a2SCristian Pallares # Aesthetically quote it. 4110189777a2SCristian Pallares func_quote_for_eval "$arg" 4111189777a2SCristian Pallares func_append install_prog "$func_quote_for_eval_result" 4112189777a2SCristian Pallares install_shared_prog=$install_prog 4113189777a2SCristian Pallares case " $install_prog " in 4114189777a2SCristian Pallares *[\\\ /]cp\ *) install_cp=: ;; 4115189777a2SCristian Pallares *) install_cp=false ;; 4116189777a2SCristian Pallares esac 4117189777a2SCristian Pallares 4118189777a2SCristian Pallares # We need to accept at least all the BSD install flags. 4119189777a2SCristian Pallares dest= 4120189777a2SCristian Pallares files= 4121189777a2SCristian Pallares opts= 4122189777a2SCristian Pallares prev= 4123189777a2SCristian Pallares install_type= 4124*b3fce824SCristian Pallarés isdir=false 4125189777a2SCristian Pallares stripme= 4126189777a2SCristian Pallares no_mode=: 4127189777a2SCristian Pallares for arg 4128189777a2SCristian Pallares do 4129189777a2SCristian Pallares arg2= 4130189777a2SCristian Pallares if test -n "$dest"; then 4131189777a2SCristian Pallares func_append files " $dest" 4132189777a2SCristian Pallares dest=$arg 4133189777a2SCristian Pallares continue 4134189777a2SCristian Pallares fi 4135189777a2SCristian Pallares 4136189777a2SCristian Pallares case $arg in 4137*b3fce824SCristian Pallarés -d) isdir=: ;; 4138189777a2SCristian Pallares -f) 4139189777a2SCristian Pallares if $install_cp; then :; else 4140189777a2SCristian Pallares prev=$arg 4141189777a2SCristian Pallares fi 4142189777a2SCristian Pallares ;; 4143189777a2SCristian Pallares -g | -m | -o) 4144189777a2SCristian Pallares prev=$arg 4145189777a2SCristian Pallares ;; 4146189777a2SCristian Pallares -s) 4147189777a2SCristian Pallares stripme=" -s" 4148189777a2SCristian Pallares continue 4149189777a2SCristian Pallares ;; 4150189777a2SCristian Pallares -*) 4151189777a2SCristian Pallares ;; 4152189777a2SCristian Pallares *) 4153189777a2SCristian Pallares # If the previous option needed an argument, then skip it. 4154189777a2SCristian Pallares if test -n "$prev"; then 4155*b3fce824SCristian Pallarés if test X-m = "X$prev" && test -n "$install_override_mode"; then 4156189777a2SCristian Pallares arg2=$install_override_mode 4157189777a2SCristian Pallares no_mode=false 4158189777a2SCristian Pallares fi 4159189777a2SCristian Pallares prev= 4160189777a2SCristian Pallares else 4161189777a2SCristian Pallares dest=$arg 4162189777a2SCristian Pallares continue 4163189777a2SCristian Pallares fi 4164189777a2SCristian Pallares ;; 4165189777a2SCristian Pallares esac 4166189777a2SCristian Pallares 4167189777a2SCristian Pallares # Aesthetically quote the argument. 4168189777a2SCristian Pallares func_quote_for_eval "$arg" 4169189777a2SCristian Pallares func_append install_prog " $func_quote_for_eval_result" 4170189777a2SCristian Pallares if test -n "$arg2"; then 4171189777a2SCristian Pallares func_quote_for_eval "$arg2" 4172189777a2SCristian Pallares fi 4173189777a2SCristian Pallares func_append install_shared_prog " $func_quote_for_eval_result" 4174189777a2SCristian Pallares done 4175189777a2SCristian Pallares 4176189777a2SCristian Pallares test -z "$install_prog" && \ 4177189777a2SCristian Pallares func_fatal_help "you must specify an install program" 4178189777a2SCristian Pallares 4179189777a2SCristian Pallares test -n "$prev" && \ 4180*b3fce824SCristian Pallarés func_fatal_help "the '$prev' option requires an argument" 4181189777a2SCristian Pallares 4182189777a2SCristian Pallares if test -n "$install_override_mode" && $no_mode; then 4183189777a2SCristian Pallares if $install_cp; then :; else 4184189777a2SCristian Pallares func_quote_for_eval "$install_override_mode" 4185189777a2SCristian Pallares func_append install_shared_prog " -m $func_quote_for_eval_result" 4186189777a2SCristian Pallares fi 4187189777a2SCristian Pallares fi 4188189777a2SCristian Pallares 4189189777a2SCristian Pallares if test -z "$files"; then 4190189777a2SCristian Pallares if test -z "$dest"; then 4191189777a2SCristian Pallares func_fatal_help "no file or destination specified" 4192189777a2SCristian Pallares else 4193189777a2SCristian Pallares func_fatal_help "you must specify a destination" 4194189777a2SCristian Pallares fi 4195189777a2SCristian Pallares fi 4196189777a2SCristian Pallares 4197189777a2SCristian Pallares # Strip any trailing slash from the destination. 4198189777a2SCristian Pallares func_stripname '' '/' "$dest" 4199189777a2SCristian Pallares dest=$func_stripname_result 4200189777a2SCristian Pallares 4201189777a2SCristian Pallares # Check to see that the destination is a directory. 4202*b3fce824SCristian Pallarés test -d "$dest" && isdir=: 4203*b3fce824SCristian Pallarés if $isdir; then 4204*b3fce824SCristian Pallarés destdir=$dest 4205189777a2SCristian Pallares destname= 4206189777a2SCristian Pallares else 4207189777a2SCristian Pallares func_dirname_and_basename "$dest" "" "." 4208*b3fce824SCristian Pallarés destdir=$func_dirname_result 4209*b3fce824SCristian Pallarés destname=$func_basename_result 4210189777a2SCristian Pallares 4211189777a2SCristian Pallares # Not a directory, so check to see that there is only one file specified. 4212189777a2SCristian Pallares set dummy $files; shift 4213189777a2SCristian Pallares test "$#" -gt 1 && \ 4214*b3fce824SCristian Pallarés func_fatal_help "'$dest' is not a directory" 4215189777a2SCristian Pallares fi 4216189777a2SCristian Pallares case $destdir in 4217189777a2SCristian Pallares [\\/]* | [A-Za-z]:[\\/]*) ;; 4218189777a2SCristian Pallares *) 4219189777a2SCristian Pallares for file in $files; do 4220189777a2SCristian Pallares case $file in 4221189777a2SCristian Pallares *.lo) ;; 4222189777a2SCristian Pallares *) 4223*b3fce824SCristian Pallarés func_fatal_help "'$destdir' must be an absolute directory name" 4224189777a2SCristian Pallares ;; 4225189777a2SCristian Pallares esac 4226189777a2SCristian Pallares done 4227189777a2SCristian Pallares ;; 4228189777a2SCristian Pallares esac 4229189777a2SCristian Pallares 4230189777a2SCristian Pallares # This variable tells wrapper scripts just to set variables rather 4231189777a2SCristian Pallares # than running their programs. 4232*b3fce824SCristian Pallarés libtool_install_magic=$magic 4233189777a2SCristian Pallares 4234189777a2SCristian Pallares staticlibs= 4235189777a2SCristian Pallares future_libdirs= 4236189777a2SCristian Pallares current_libdirs= 4237189777a2SCristian Pallares for file in $files; do 4238189777a2SCristian Pallares 4239189777a2SCristian Pallares # Do each installation. 4240189777a2SCristian Pallares case $file in 4241189777a2SCristian Pallares *.$libext) 4242189777a2SCristian Pallares # Do the static libraries later. 4243189777a2SCristian Pallares func_append staticlibs " $file" 4244189777a2SCristian Pallares ;; 4245189777a2SCristian Pallares 4246189777a2SCristian Pallares *.la) 4247189777a2SCristian Pallares func_resolve_sysroot "$file" 4248189777a2SCristian Pallares file=$func_resolve_sysroot_result 4249189777a2SCristian Pallares 4250189777a2SCristian Pallares # Check to see that this really is a libtool archive. 4251189777a2SCristian Pallares func_lalib_unsafe_p "$file" \ 4252*b3fce824SCristian Pallarés || func_fatal_help "'$file' is not a valid libtool archive" 4253189777a2SCristian Pallares 4254189777a2SCristian Pallares library_names= 4255189777a2SCristian Pallares old_library= 4256189777a2SCristian Pallares relink_command= 4257189777a2SCristian Pallares func_source "$file" 4258189777a2SCristian Pallares 4259189777a2SCristian Pallares # Add the libdir to current_libdirs if it is the destination. 4260189777a2SCristian Pallares if test "X$destdir" = "X$libdir"; then 4261189777a2SCristian Pallares case "$current_libdirs " in 4262189777a2SCristian Pallares *" $libdir "*) ;; 4263189777a2SCristian Pallares *) func_append current_libdirs " $libdir" ;; 4264189777a2SCristian Pallares esac 4265189777a2SCristian Pallares else 4266189777a2SCristian Pallares # Note the libdir as a future libdir. 4267189777a2SCristian Pallares case "$future_libdirs " in 4268189777a2SCristian Pallares *" $libdir "*) ;; 4269189777a2SCristian Pallares *) func_append future_libdirs " $libdir" ;; 4270189777a2SCristian Pallares esac 4271189777a2SCristian Pallares fi 4272189777a2SCristian Pallares 4273189777a2SCristian Pallares func_dirname "$file" "/" "" 4274*b3fce824SCristian Pallarés dir=$func_dirname_result 4275189777a2SCristian Pallares func_append dir "$objdir" 4276189777a2SCristian Pallares 4277189777a2SCristian Pallares if test -n "$relink_command"; then 4278189777a2SCristian Pallares # Determine the prefix the user has applied to our future dir. 4279189777a2SCristian Pallares inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4280189777a2SCristian Pallares 4281189777a2SCristian Pallares # Don't allow the user to place us outside of our expected 4282189777a2SCristian Pallares # location b/c this prevents finding dependent libraries that 4283189777a2SCristian Pallares # are installed to the same prefix. 4284189777a2SCristian Pallares # At present, this check doesn't affect windows .dll's that 4285189777a2SCristian Pallares # are installed into $libdir/../bin (currently, that works fine) 4286189777a2SCristian Pallares # but it's something to keep an eye on. 4287189777a2SCristian Pallares test "$inst_prefix_dir" = "$destdir" && \ 4288*b3fce824SCristian Pallarés func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4289189777a2SCristian Pallares 4290189777a2SCristian Pallares if test -n "$inst_prefix_dir"; then 4291189777a2SCristian Pallares # Stick the inst_prefix_dir data into the link command. 4292189777a2SCristian Pallares relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4293189777a2SCristian Pallares else 4294189777a2SCristian Pallares relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4295189777a2SCristian Pallares fi 4296189777a2SCristian Pallares 4297*b3fce824SCristian Pallarés func_warning "relinking '$file'" 4298189777a2SCristian Pallares func_show_eval "$relink_command" \ 4299*b3fce824SCristian Pallarés 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4300189777a2SCristian Pallares fi 4301189777a2SCristian Pallares 4302189777a2SCristian Pallares # See the names of the shared library. 4303189777a2SCristian Pallares set dummy $library_names; shift 4304189777a2SCristian Pallares if test -n "$1"; then 4305*b3fce824SCristian Pallarés realname=$1 4306189777a2SCristian Pallares shift 4307189777a2SCristian Pallares 4308*b3fce824SCristian Pallarés srcname=$realname 4309*b3fce824SCristian Pallarés test -n "$relink_command" && srcname=${realname}T 4310189777a2SCristian Pallares 4311189777a2SCristian Pallares # Install the shared library and build the symlinks. 4312189777a2SCristian Pallares func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4313189777a2SCristian Pallares 'exit $?' 4314*b3fce824SCristian Pallarés tstripme=$stripme 4315189777a2SCristian Pallares case $host_os in 4316189777a2SCristian Pallares cygwin* | mingw* | pw32* | cegcc*) 4317189777a2SCristian Pallares case $realname in 4318189777a2SCristian Pallares *.dll.a) 4319*b3fce824SCristian Pallarés tstripme= 4320*b3fce824SCristian Pallarés ;; 4321*b3fce824SCristian Pallarés esac 4322*b3fce824SCristian Pallarés ;; 4323*b3fce824SCristian Pallarés os2*) 4324*b3fce824SCristian Pallarés case $realname in 4325*b3fce824SCristian Pallarés *_dll.a) 4326*b3fce824SCristian Pallarés tstripme= 4327189777a2SCristian Pallares ;; 4328189777a2SCristian Pallares esac 4329189777a2SCristian Pallares ;; 4330189777a2SCristian Pallares esac 4331189777a2SCristian Pallares if test -n "$tstripme" && test -n "$striplib"; then 4332189777a2SCristian Pallares func_show_eval "$striplib $destdir/$realname" 'exit $?' 4333189777a2SCristian Pallares fi 4334189777a2SCristian Pallares 4335189777a2SCristian Pallares if test "$#" -gt 0; then 4336189777a2SCristian Pallares # Delete the old symlinks, and create new ones. 4337*b3fce824SCristian Pallarés # Try 'ln -sf' first, because the 'ln' binary might depend on 4338189777a2SCristian Pallares # the symlink we replace! Solaris /bin/ln does not understand -f, 4339189777a2SCristian Pallares # so we also need to try rm && ln -s. 4340189777a2SCristian Pallares for linkname 4341189777a2SCristian Pallares do 4342189777a2SCristian Pallares test "$linkname" != "$realname" \ 4343189777a2SCristian Pallares && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4344189777a2SCristian Pallares done 4345189777a2SCristian Pallares fi 4346189777a2SCristian Pallares 4347189777a2SCristian Pallares # Do each command in the postinstall commands. 4348*b3fce824SCristian Pallarés lib=$destdir/$realname 4349189777a2SCristian Pallares func_execute_cmds "$postinstall_cmds" 'exit $?' 4350189777a2SCristian Pallares fi 4351189777a2SCristian Pallares 4352189777a2SCristian Pallares # Install the pseudo-library for information purposes. 4353189777a2SCristian Pallares func_basename "$file" 4354*b3fce824SCristian Pallarés name=$func_basename_result 4355*b3fce824SCristian Pallarés instname=$dir/${name}i 4356189777a2SCristian Pallares func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4357189777a2SCristian Pallares 4358189777a2SCristian Pallares # Maybe install the static library, too. 4359189777a2SCristian Pallares test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4360189777a2SCristian Pallares ;; 4361189777a2SCristian Pallares 4362189777a2SCristian Pallares *.lo) 4363189777a2SCristian Pallares # Install (i.e. copy) a libtool object. 4364189777a2SCristian Pallares 4365189777a2SCristian Pallares # Figure out destination file name, if it wasn't already specified. 4366189777a2SCristian Pallares if test -n "$destname"; then 4367*b3fce824SCristian Pallarés destfile=$destdir/$destname 4368189777a2SCristian Pallares else 4369189777a2SCristian Pallares func_basename "$file" 4370*b3fce824SCristian Pallarés destfile=$func_basename_result 4371*b3fce824SCristian Pallarés destfile=$destdir/$destfile 4372189777a2SCristian Pallares fi 4373189777a2SCristian Pallares 4374189777a2SCristian Pallares # Deduce the name of the destination old-style object file. 4375189777a2SCristian Pallares case $destfile in 4376189777a2SCristian Pallares *.lo) 4377189777a2SCristian Pallares func_lo2o "$destfile" 4378189777a2SCristian Pallares staticdest=$func_lo2o_result 4379189777a2SCristian Pallares ;; 4380189777a2SCristian Pallares *.$objext) 4381*b3fce824SCristian Pallarés staticdest=$destfile 4382189777a2SCristian Pallares destfile= 4383189777a2SCristian Pallares ;; 4384189777a2SCristian Pallares *) 4385*b3fce824SCristian Pallarés func_fatal_help "cannot copy a libtool object to '$destfile'" 4386189777a2SCristian Pallares ;; 4387189777a2SCristian Pallares esac 4388189777a2SCristian Pallares 4389189777a2SCristian Pallares # Install the libtool object if requested. 4390189777a2SCristian Pallares test -n "$destfile" && \ 4391189777a2SCristian Pallares func_show_eval "$install_prog $file $destfile" 'exit $?' 4392189777a2SCristian Pallares 4393189777a2SCristian Pallares # Install the old object if enabled. 4394*b3fce824SCristian Pallarés if test yes = "$build_old_libs"; then 4395189777a2SCristian Pallares # Deduce the name of the old-style object file. 4396189777a2SCristian Pallares func_lo2o "$file" 4397189777a2SCristian Pallares staticobj=$func_lo2o_result 4398189777a2SCristian Pallares func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4399189777a2SCristian Pallares fi 4400189777a2SCristian Pallares exit $EXIT_SUCCESS 4401189777a2SCristian Pallares ;; 4402189777a2SCristian Pallares 4403189777a2SCristian Pallares *) 4404189777a2SCristian Pallares # Figure out destination file name, if it wasn't already specified. 4405189777a2SCristian Pallares if test -n "$destname"; then 4406*b3fce824SCristian Pallarés destfile=$destdir/$destname 4407189777a2SCristian Pallares else 4408189777a2SCristian Pallares func_basename "$file" 4409*b3fce824SCristian Pallarés destfile=$func_basename_result 4410*b3fce824SCristian Pallarés destfile=$destdir/$destfile 4411189777a2SCristian Pallares fi 4412189777a2SCristian Pallares 4413189777a2SCristian Pallares # If the file is missing, and there is a .exe on the end, strip it 4414189777a2SCristian Pallares # because it is most likely a libtool script we actually want to 4415189777a2SCristian Pallares # install 4416*b3fce824SCristian Pallarés stripped_ext= 4417189777a2SCristian Pallares case $file in 4418189777a2SCristian Pallares *.exe) 4419189777a2SCristian Pallares if test ! -f "$file"; then 4420189777a2SCristian Pallares func_stripname '' '.exe' "$file" 4421189777a2SCristian Pallares file=$func_stripname_result 4422*b3fce824SCristian Pallarés stripped_ext=.exe 4423189777a2SCristian Pallares fi 4424189777a2SCristian Pallares ;; 4425189777a2SCristian Pallares esac 4426189777a2SCristian Pallares 4427189777a2SCristian Pallares # Do a test to see if this is really a libtool program. 4428189777a2SCristian Pallares case $host in 4429189777a2SCristian Pallares *cygwin* | *mingw*) 4430189777a2SCristian Pallares if func_ltwrapper_executable_p "$file"; then 4431189777a2SCristian Pallares func_ltwrapper_scriptname "$file" 4432189777a2SCristian Pallares wrapper=$func_ltwrapper_scriptname_result 4433189777a2SCristian Pallares else 4434189777a2SCristian Pallares func_stripname '' '.exe' "$file" 4435189777a2SCristian Pallares wrapper=$func_stripname_result 4436189777a2SCristian Pallares fi 4437189777a2SCristian Pallares ;; 4438189777a2SCristian Pallares *) 4439189777a2SCristian Pallares wrapper=$file 4440189777a2SCristian Pallares ;; 4441189777a2SCristian Pallares esac 4442189777a2SCristian Pallares if func_ltwrapper_script_p "$wrapper"; then 4443189777a2SCristian Pallares notinst_deplibs= 4444189777a2SCristian Pallares relink_command= 4445189777a2SCristian Pallares 4446189777a2SCristian Pallares func_source "$wrapper" 4447189777a2SCristian Pallares 4448189777a2SCristian Pallares # Check the variables that should have been set. 4449189777a2SCristian Pallares test -z "$generated_by_libtool_version" && \ 4450*b3fce824SCristian Pallarés func_fatal_error "invalid libtool wrapper script '$wrapper'" 4451189777a2SCristian Pallares 4452*b3fce824SCristian Pallarés finalize=: 4453189777a2SCristian Pallares for lib in $notinst_deplibs; do 4454189777a2SCristian Pallares # Check to see that each library is installed. 4455189777a2SCristian Pallares libdir= 4456189777a2SCristian Pallares if test -f "$lib"; then 4457189777a2SCristian Pallares func_source "$lib" 4458189777a2SCristian Pallares fi 4459*b3fce824SCristian Pallarés libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4460189777a2SCristian Pallares if test -n "$libdir" && test ! -f "$libfile"; then 4461*b3fce824SCristian Pallarés func_warning "'$lib' has not been installed in '$libdir'" 4462*b3fce824SCristian Pallarés finalize=false 4463189777a2SCristian Pallares fi 4464189777a2SCristian Pallares done 4465189777a2SCristian Pallares 4466189777a2SCristian Pallares relink_command= 4467189777a2SCristian Pallares func_source "$wrapper" 4468189777a2SCristian Pallares 4469189777a2SCristian Pallares outputname= 4470*b3fce824SCristian Pallarés if test no = "$fast_install" && test -n "$relink_command"; then 4471189777a2SCristian Pallares $opt_dry_run || { 4472*b3fce824SCristian Pallarés if $finalize; then 4473189777a2SCristian Pallares tmpdir=`func_mktempdir` 4474189777a2SCristian Pallares func_basename "$file$stripped_ext" 4475*b3fce824SCristian Pallarés file=$func_basename_result 4476*b3fce824SCristian Pallarés outputname=$tmpdir/$file 4477189777a2SCristian Pallares # Replace the output file specification. 4478189777a2SCristian Pallares relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4479189777a2SCristian Pallares 4480*b3fce824SCristian Pallarés $opt_quiet || { 4481189777a2SCristian Pallares func_quote_for_expand "$relink_command" 4482189777a2SCristian Pallares eval "func_echo $func_quote_for_expand_result" 4483189777a2SCristian Pallares } 4484189777a2SCristian Pallares if eval "$relink_command"; then : 4485189777a2SCristian Pallares else 4486*b3fce824SCristian Pallarés func_error "error: relink '$file' with the above command before installing it" 4487189777a2SCristian Pallares $opt_dry_run || ${RM}r "$tmpdir" 4488189777a2SCristian Pallares continue 4489189777a2SCristian Pallares fi 4490*b3fce824SCristian Pallarés file=$outputname 4491189777a2SCristian Pallares else 4492*b3fce824SCristian Pallarés func_warning "cannot relink '$file'" 4493189777a2SCristian Pallares fi 4494189777a2SCristian Pallares } 4495189777a2SCristian Pallares else 4496189777a2SCristian Pallares # Install the binary that we compiled earlier. 4497189777a2SCristian Pallares file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4498189777a2SCristian Pallares fi 4499189777a2SCristian Pallares fi 4500189777a2SCristian Pallares 4501189777a2SCristian Pallares # remove .exe since cygwin /usr/bin/install will append another 4502189777a2SCristian Pallares # one anyway 4503189777a2SCristian Pallares case $install_prog,$host in 4504189777a2SCristian Pallares */usr/bin/install*,*cygwin*) 4505189777a2SCristian Pallares case $file:$destfile in 4506189777a2SCristian Pallares *.exe:*.exe) 4507189777a2SCristian Pallares # this is ok 4508189777a2SCristian Pallares ;; 4509189777a2SCristian Pallares *.exe:*) 4510189777a2SCristian Pallares destfile=$destfile.exe 4511189777a2SCristian Pallares ;; 4512189777a2SCristian Pallares *:*.exe) 4513189777a2SCristian Pallares func_stripname '' '.exe' "$destfile" 4514189777a2SCristian Pallares destfile=$func_stripname_result 4515189777a2SCristian Pallares ;; 4516189777a2SCristian Pallares esac 4517189777a2SCristian Pallares ;; 4518189777a2SCristian Pallares esac 4519189777a2SCristian Pallares func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4520189777a2SCristian Pallares $opt_dry_run || if test -n "$outputname"; then 4521189777a2SCristian Pallares ${RM}r "$tmpdir" 4522189777a2SCristian Pallares fi 4523189777a2SCristian Pallares ;; 4524189777a2SCristian Pallares esac 4525189777a2SCristian Pallares done 4526189777a2SCristian Pallares 4527189777a2SCristian Pallares for file in $staticlibs; do 4528189777a2SCristian Pallares func_basename "$file" 4529*b3fce824SCristian Pallarés name=$func_basename_result 4530189777a2SCristian Pallares 4531189777a2SCristian Pallares # Set up the ranlib parameters. 4532*b3fce824SCristian Pallarés oldlib=$destdir/$name 4533189777a2SCristian Pallares func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 4534189777a2SCristian Pallares tool_oldlib=$func_to_tool_file_result 4535189777a2SCristian Pallares 4536189777a2SCristian Pallares func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4537189777a2SCristian Pallares 4538189777a2SCristian Pallares if test -n "$stripme" && test -n "$old_striplib"; then 4539189777a2SCristian Pallares func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4540189777a2SCristian Pallares fi 4541189777a2SCristian Pallares 4542189777a2SCristian Pallares # Do each command in the postinstall commands. 4543189777a2SCristian Pallares func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4544189777a2SCristian Pallares done 4545189777a2SCristian Pallares 4546189777a2SCristian Pallares test -n "$future_libdirs" && \ 4547*b3fce824SCristian Pallarés func_warning "remember to run '$progname --finish$future_libdirs'" 4548189777a2SCristian Pallares 4549189777a2SCristian Pallares if test -n "$current_libdirs"; then 4550189777a2SCristian Pallares # Maybe just do a dry run. 4551189777a2SCristian Pallares $opt_dry_run && current_libdirs=" -n$current_libdirs" 4552*b3fce824SCristian Pallarés exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4553189777a2SCristian Pallares else 4554189777a2SCristian Pallares exit $EXIT_SUCCESS 4555189777a2SCristian Pallares fi 4556189777a2SCristian Pallares} 4557189777a2SCristian Pallares 4558*b3fce824SCristian Pallaréstest install = "$opt_mode" && func_mode_install ${1+"$@"} 4559189777a2SCristian Pallares 4560189777a2SCristian Pallares 4561189777a2SCristian Pallares# func_generate_dlsyms outputname originator pic_p 4562189777a2SCristian Pallares# Extract symbols from dlprefiles and create ${outputname}S.o with 4563189777a2SCristian Pallares# a dlpreopen symbol table. 4564189777a2SCristian Pallaresfunc_generate_dlsyms () 4565189777a2SCristian Pallares{ 4566*b3fce824SCristian Pallarés $debug_cmd 4567*b3fce824SCristian Pallarés 4568*b3fce824SCristian Pallarés my_outputname=$1 4569*b3fce824SCristian Pallarés my_originator=$2 4570*b3fce824SCristian Pallarés my_pic_p=${3-false} 4571*b3fce824SCristian Pallarés my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4572189777a2SCristian Pallares my_dlsyms= 4573189777a2SCristian Pallares 4574*b3fce824SCristian Pallarés if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4575189777a2SCristian Pallares if test -n "$NM" && test -n "$global_symbol_pipe"; then 4576*b3fce824SCristian Pallarés my_dlsyms=${my_outputname}S.c 4577189777a2SCristian Pallares else 4578189777a2SCristian Pallares func_error "not configured to extract global symbols from dlpreopened files" 4579189777a2SCristian Pallares fi 4580189777a2SCristian Pallares fi 4581189777a2SCristian Pallares 4582189777a2SCristian Pallares if test -n "$my_dlsyms"; then 4583189777a2SCristian Pallares case $my_dlsyms in 4584189777a2SCristian Pallares "") ;; 4585189777a2SCristian Pallares *.c) 4586189777a2SCristian Pallares # Discover the nlist of each of the dlfiles. 4587*b3fce824SCristian Pallarés nlist=$output_objdir/$my_outputname.nm 4588189777a2SCristian Pallares 4589189777a2SCristian Pallares func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4590189777a2SCristian Pallares 4591189777a2SCristian Pallares # Parse the name list into a source file. 4592189777a2SCristian Pallares func_verbose "creating $output_objdir/$my_dlsyms" 4593189777a2SCristian Pallares 4594189777a2SCristian Pallares $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4595*b3fce824SCristian Pallarés/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4596*b3fce824SCristian Pallarés/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4597189777a2SCristian Pallares 4598189777a2SCristian Pallares#ifdef __cplusplus 4599189777a2SCristian Pallaresextern \"C\" { 4600189777a2SCristian Pallares#endif 4601189777a2SCristian Pallares 4602*b3fce824SCristian Pallarés#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4603189777a2SCristian Pallares#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4604189777a2SCristian Pallares#endif 4605189777a2SCristian Pallares 4606189777a2SCristian Pallares/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4607*b3fce824SCristian Pallarés#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4608*b3fce824SCristian Pallarés/* DATA imports from DLLs on WIN32 can't be const, because runtime 4609189777a2SCristian Pallares relocations are performed -- see ld's documentation on pseudo-relocs. */ 4610189777a2SCristian Pallares# define LT_DLSYM_CONST 4611*b3fce824SCristian Pallarés#elif defined __osf__ 4612189777a2SCristian Pallares/* This system does not cope well with relocations in const data. */ 4613189777a2SCristian Pallares# define LT_DLSYM_CONST 4614189777a2SCristian Pallares#else 4615189777a2SCristian Pallares# define LT_DLSYM_CONST const 4616189777a2SCristian Pallares#endif 4617189777a2SCristian Pallares 4618*b3fce824SCristian Pallarés#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4619*b3fce824SCristian Pallarés 4620189777a2SCristian Pallares/* External symbol declarations for the compiler. */\ 4621189777a2SCristian Pallares" 4622189777a2SCristian Pallares 4623*b3fce824SCristian Pallarés if test yes = "$dlself"; then 4624*b3fce824SCristian Pallarés func_verbose "generating symbol list for '$output'" 4625189777a2SCristian Pallares 4626189777a2SCristian Pallares $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4627189777a2SCristian Pallares 4628189777a2SCristian Pallares # Add our own program objects to the symbol list. 4629189777a2SCristian Pallares progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4630189777a2SCristian Pallares for progfile in $progfiles; do 4631189777a2SCristian Pallares func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4632*b3fce824SCristian Pallarés func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4633189777a2SCristian Pallares $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4634189777a2SCristian Pallares done 4635189777a2SCristian Pallares 4636189777a2SCristian Pallares if test -n "$exclude_expsyms"; then 4637189777a2SCristian Pallares $opt_dry_run || { 4638189777a2SCristian Pallares eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4639189777a2SCristian Pallares eval '$MV "$nlist"T "$nlist"' 4640189777a2SCristian Pallares } 4641189777a2SCristian Pallares fi 4642189777a2SCristian Pallares 4643189777a2SCristian Pallares if test -n "$export_symbols_regex"; then 4644189777a2SCristian Pallares $opt_dry_run || { 4645189777a2SCristian Pallares eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4646189777a2SCristian Pallares eval '$MV "$nlist"T "$nlist"' 4647189777a2SCristian Pallares } 4648189777a2SCristian Pallares fi 4649189777a2SCristian Pallares 4650189777a2SCristian Pallares # Prepare the list of exported symbols 4651189777a2SCristian Pallares if test -z "$export_symbols"; then 4652*b3fce824SCristian Pallarés export_symbols=$output_objdir/$outputname.exp 4653189777a2SCristian Pallares $opt_dry_run || { 4654189777a2SCristian Pallares $RM $export_symbols 4655*b3fce824SCristian Pallarés eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4656189777a2SCristian Pallares case $host in 4657189777a2SCristian Pallares *cygwin* | *mingw* | *cegcc* ) 4658189777a2SCristian Pallares eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4659189777a2SCristian Pallares eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4660189777a2SCristian Pallares ;; 4661189777a2SCristian Pallares esac 4662189777a2SCristian Pallares } 4663189777a2SCristian Pallares else 4664189777a2SCristian Pallares $opt_dry_run || { 4665*b3fce824SCristian Pallarés eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4666189777a2SCristian Pallares eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4667189777a2SCristian Pallares eval '$MV "$nlist"T "$nlist"' 4668189777a2SCristian Pallares case $host in 4669189777a2SCristian Pallares *cygwin* | *mingw* | *cegcc* ) 4670189777a2SCristian Pallares eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4671189777a2SCristian Pallares eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4672189777a2SCristian Pallares ;; 4673189777a2SCristian Pallares esac 4674189777a2SCristian Pallares } 4675189777a2SCristian Pallares fi 4676189777a2SCristian Pallares fi 4677189777a2SCristian Pallares 4678189777a2SCristian Pallares for dlprefile in $dlprefiles; do 4679*b3fce824SCristian Pallarés func_verbose "extracting global C symbols from '$dlprefile'" 4680189777a2SCristian Pallares func_basename "$dlprefile" 4681*b3fce824SCristian Pallarés name=$func_basename_result 4682189777a2SCristian Pallares case $host in 4683189777a2SCristian Pallares *cygwin* | *mingw* | *cegcc* ) 4684189777a2SCristian Pallares # if an import library, we need to obtain dlname 4685189777a2SCristian Pallares if func_win32_import_lib_p "$dlprefile"; then 4686189777a2SCristian Pallares func_tr_sh "$dlprefile" 4687189777a2SCristian Pallares eval "curr_lafile=\$libfile_$func_tr_sh_result" 4688*b3fce824SCristian Pallarés dlprefile_dlbasename= 4689189777a2SCristian Pallares if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4690189777a2SCristian Pallares # Use subshell, to avoid clobbering current variable values 4691189777a2SCristian Pallares dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4692189777a2SCristian Pallares if test -n "$dlprefile_dlname"; then 4693189777a2SCristian Pallares func_basename "$dlprefile_dlname" 4694*b3fce824SCristian Pallarés dlprefile_dlbasename=$func_basename_result 4695189777a2SCristian Pallares else 4696189777a2SCristian Pallares # no lafile. user explicitly requested -dlpreopen <import library>. 4697189777a2SCristian Pallares $sharedlib_from_linklib_cmd "$dlprefile" 4698189777a2SCristian Pallares dlprefile_dlbasename=$sharedlib_from_linklib_result 4699189777a2SCristian Pallares fi 4700189777a2SCristian Pallares fi 4701189777a2SCristian Pallares $opt_dry_run || { 4702189777a2SCristian Pallares if test -n "$dlprefile_dlbasename"; then 4703189777a2SCristian Pallares eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4704189777a2SCristian Pallares else 4705189777a2SCristian Pallares func_warning "Could not compute DLL name from $name" 4706189777a2SCristian Pallares eval '$ECHO ": $name " >> "$nlist"' 4707189777a2SCristian Pallares fi 4708189777a2SCristian Pallares func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4709189777a2SCristian Pallares eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4710189777a2SCristian Pallares $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4711189777a2SCristian Pallares } 4712189777a2SCristian Pallares else # not an import lib 4713189777a2SCristian Pallares $opt_dry_run || { 4714189777a2SCristian Pallares eval '$ECHO ": $name " >> "$nlist"' 4715189777a2SCristian Pallares func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4716189777a2SCristian Pallares eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4717189777a2SCristian Pallares } 4718189777a2SCristian Pallares fi 4719189777a2SCristian Pallares ;; 4720189777a2SCristian Pallares *) 4721189777a2SCristian Pallares $opt_dry_run || { 4722189777a2SCristian Pallares eval '$ECHO ": $name " >> "$nlist"' 4723189777a2SCristian Pallares func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4724189777a2SCristian Pallares eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4725189777a2SCristian Pallares } 4726189777a2SCristian Pallares ;; 4727189777a2SCristian Pallares esac 4728189777a2SCristian Pallares done 4729189777a2SCristian Pallares 4730189777a2SCristian Pallares $opt_dry_run || { 4731189777a2SCristian Pallares # Make sure we have at least an empty file. 4732189777a2SCristian Pallares test -f "$nlist" || : > "$nlist" 4733189777a2SCristian Pallares 4734189777a2SCristian Pallares if test -n "$exclude_expsyms"; then 4735189777a2SCristian Pallares $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4736189777a2SCristian Pallares $MV "$nlist"T "$nlist" 4737189777a2SCristian Pallares fi 4738189777a2SCristian Pallares 4739189777a2SCristian Pallares # Try sorting and uniquifying the output. 4740189777a2SCristian Pallares if $GREP -v "^: " < "$nlist" | 4741189777a2SCristian Pallares if sort -k 3 </dev/null >/dev/null 2>&1; then 4742189777a2SCristian Pallares sort -k 3 4743189777a2SCristian Pallares else 4744189777a2SCristian Pallares sort +2 4745189777a2SCristian Pallares fi | 4746189777a2SCristian Pallares uniq > "$nlist"S; then 4747189777a2SCristian Pallares : 4748189777a2SCristian Pallares else 4749189777a2SCristian Pallares $GREP -v "^: " < "$nlist" > "$nlist"S 4750189777a2SCristian Pallares fi 4751189777a2SCristian Pallares 4752189777a2SCristian Pallares if test -f "$nlist"S; then 4753189777a2SCristian Pallares eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 4754189777a2SCristian Pallares else 4755189777a2SCristian Pallares echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 4756189777a2SCristian Pallares fi 4757189777a2SCristian Pallares 4758*b3fce824SCristian Pallarés func_show_eval '$RM "${nlist}I"' 4759*b3fce824SCristian Pallarés if test -n "$global_symbol_to_import"; then 4760*b3fce824SCristian Pallarés eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 4761*b3fce824SCristian Pallarés fi 4762*b3fce824SCristian Pallarés 4763189777a2SCristian Pallares echo >> "$output_objdir/$my_dlsyms" "\ 4764189777a2SCristian Pallares 4765189777a2SCristian Pallares/* The mapping between symbol names and symbols. */ 4766189777a2SCristian Pallarestypedef struct { 4767189777a2SCristian Pallares const char *name; 4768189777a2SCristian Pallares void *address; 4769189777a2SCristian Pallares} lt_dlsymlist; 4770189777a2SCristian Pallaresextern LT_DLSYM_CONST lt_dlsymlist 4771*b3fce824SCristian Pallaréslt_${my_prefix}_LTX_preloaded_symbols[];\ 4772*b3fce824SCristian Pallarés" 4773*b3fce824SCristian Pallarés 4774*b3fce824SCristian Pallarés if test -s "$nlist"I; then 4775*b3fce824SCristian Pallarés echo >> "$output_objdir/$my_dlsyms" "\ 4776*b3fce824SCristian Pallarésstatic void lt_syminit(void) 4777*b3fce824SCristian Pallarés{ 4778*b3fce824SCristian Pallarés LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 4779*b3fce824SCristian Pallarés for (; symbol->name; ++symbol) 4780*b3fce824SCristian Pallarés {" 4781*b3fce824SCristian Pallarés $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 4782*b3fce824SCristian Pallarés echo >> "$output_objdir/$my_dlsyms" "\ 4783*b3fce824SCristian Pallarés } 4784*b3fce824SCristian Pallarés}" 4785*b3fce824SCristian Pallarés fi 4786*b3fce824SCristian Pallarés echo >> "$output_objdir/$my_dlsyms" "\ 4787189777a2SCristian PallaresLT_DLSYM_CONST lt_dlsymlist 4788189777a2SCristian Pallareslt_${my_prefix}_LTX_preloaded_symbols[] = 4789*b3fce824SCristian Pallarés{ {\"$my_originator\", (void *) 0}," 4790*b3fce824SCristian Pallarés 4791*b3fce824SCristian Pallarés if test -s "$nlist"I; then 4792*b3fce824SCristian Pallarés echo >> "$output_objdir/$my_dlsyms" "\ 4793*b3fce824SCristian Pallarés {\"@INIT@\", (void *) <_syminit}," 4794*b3fce824SCristian Pallarés fi 4795189777a2SCristian Pallares 4796189777a2SCristian Pallares case $need_lib_prefix in 4797189777a2SCristian Pallares no) 4798189777a2SCristian Pallares eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 4799189777a2SCristian Pallares ;; 4800189777a2SCristian Pallares *) 4801189777a2SCristian Pallares eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 4802189777a2SCristian Pallares ;; 4803189777a2SCristian Pallares esac 4804189777a2SCristian Pallares echo >> "$output_objdir/$my_dlsyms" "\ 4805189777a2SCristian Pallares {0, (void *) 0} 4806189777a2SCristian Pallares}; 4807189777a2SCristian Pallares 4808189777a2SCristian Pallares/* This works around a problem in FreeBSD linker */ 4809189777a2SCristian Pallares#ifdef FREEBSD_WORKAROUND 4810189777a2SCristian Pallaresstatic const void *lt_preloaded_setup() { 4811189777a2SCristian Pallares return lt_${my_prefix}_LTX_preloaded_symbols; 4812189777a2SCristian Pallares} 4813189777a2SCristian Pallares#endif 4814189777a2SCristian Pallares 4815189777a2SCristian Pallares#ifdef __cplusplus 4816189777a2SCristian Pallares} 4817189777a2SCristian Pallares#endif\ 4818189777a2SCristian Pallares" 4819189777a2SCristian Pallares } # !$opt_dry_run 4820189777a2SCristian Pallares 4821189777a2SCristian Pallares pic_flag_for_symtable= 4822189777a2SCristian Pallares case "$compile_command " in 4823189777a2SCristian Pallares *" -static "*) ;; 4824189777a2SCristian Pallares *) 4825189777a2SCristian Pallares case $host in 4826189777a2SCristian Pallares # compiling the symbol table file with pic_flag works around 4827189777a2SCristian Pallares # a FreeBSD bug that causes programs to crash when -lm is 4828189777a2SCristian Pallares # linked before any other PIC object. But we must not use 4829189777a2SCristian Pallares # pic_flag when linking with -static. The problem exists in 4830189777a2SCristian Pallares # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 4831189777a2SCristian Pallares *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 4832189777a2SCristian Pallares pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 4833189777a2SCristian Pallares *-*-hpux*) 4834189777a2SCristian Pallares pic_flag_for_symtable=" $pic_flag" ;; 4835189777a2SCristian Pallares *) 4836*b3fce824SCristian Pallarés $my_pic_p && pic_flag_for_symtable=" $pic_flag" 4837189777a2SCristian Pallares ;; 4838189777a2SCristian Pallares esac 4839189777a2SCristian Pallares ;; 4840189777a2SCristian Pallares esac 4841189777a2SCristian Pallares symtab_cflags= 4842189777a2SCristian Pallares for arg in $LTCFLAGS; do 4843189777a2SCristian Pallares case $arg in 4844189777a2SCristian Pallares -pie | -fpie | -fPIE) ;; 4845189777a2SCristian Pallares *) func_append symtab_cflags " $arg" ;; 4846189777a2SCristian Pallares esac 4847189777a2SCristian Pallares done 4848189777a2SCristian Pallares 4849189777a2SCristian Pallares # Now compile the dynamic symbol file. 4850189777a2SCristian Pallares func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 4851189777a2SCristian Pallares 4852189777a2SCristian Pallares # Clean up the generated files. 4853*b3fce824SCristian Pallarés func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 4854189777a2SCristian Pallares 4855189777a2SCristian Pallares # Transform the symbol file into the correct name. 4856*b3fce824SCristian Pallarés symfileobj=$output_objdir/${my_outputname}S.$objext 4857189777a2SCristian Pallares case $host in 4858189777a2SCristian Pallares *cygwin* | *mingw* | *cegcc* ) 4859189777a2SCristian Pallares if test -f "$output_objdir/$my_outputname.def"; then 4860189777a2SCristian Pallares compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4861189777a2SCristian Pallares finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4862189777a2SCristian Pallares else 4863189777a2SCristian Pallares compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4864189777a2SCristian Pallares finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4865189777a2SCristian Pallares fi 4866189777a2SCristian Pallares ;; 4867189777a2SCristian Pallares *) 4868189777a2SCristian Pallares compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4869189777a2SCristian Pallares finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4870189777a2SCristian Pallares ;; 4871189777a2SCristian Pallares esac 4872189777a2SCristian Pallares ;; 4873189777a2SCristian Pallares *) 4874*b3fce824SCristian Pallarés func_fatal_error "unknown suffix for '$my_dlsyms'" 4875189777a2SCristian Pallares ;; 4876189777a2SCristian Pallares esac 4877189777a2SCristian Pallares else 4878189777a2SCristian Pallares # We keep going just in case the user didn't refer to 4879189777a2SCristian Pallares # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 4880189777a2SCristian Pallares # really was required. 4881189777a2SCristian Pallares 4882189777a2SCristian Pallares # Nullify the symbol file. 4883189777a2SCristian Pallares compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 4884189777a2SCristian Pallares finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 4885189777a2SCristian Pallares fi 4886189777a2SCristian Pallares} 4887189777a2SCristian Pallares 4888*b3fce824SCristian Pallarés# func_cygming_gnu_implib_p ARG 4889*b3fce824SCristian Pallarés# This predicate returns with zero status (TRUE) if 4890*b3fce824SCristian Pallarés# ARG is a GNU/binutils-style import library. Returns 4891*b3fce824SCristian Pallarés# with nonzero status (FALSE) otherwise. 4892*b3fce824SCristian Pallarésfunc_cygming_gnu_implib_p () 4893*b3fce824SCristian Pallarés{ 4894*b3fce824SCristian Pallarés $debug_cmd 4895*b3fce824SCristian Pallarés 4896*b3fce824SCristian Pallarés func_to_tool_file "$1" func_convert_file_msys_to_w32 4897*b3fce824SCristian Pallarés 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)$'` 4898*b3fce824SCristian Pallarés test -n "$func_cygming_gnu_implib_tmp" 4899*b3fce824SCristian Pallarés} 4900*b3fce824SCristian Pallarés 4901*b3fce824SCristian Pallarés# func_cygming_ms_implib_p ARG 4902*b3fce824SCristian Pallarés# This predicate returns with zero status (TRUE) if 4903*b3fce824SCristian Pallarés# ARG is an MS-style import library. Returns 4904*b3fce824SCristian Pallarés# with nonzero status (FALSE) otherwise. 4905*b3fce824SCristian Pallarésfunc_cygming_ms_implib_p () 4906*b3fce824SCristian Pallarés{ 4907*b3fce824SCristian Pallarés $debug_cmd 4908*b3fce824SCristian Pallarés 4909*b3fce824SCristian Pallarés func_to_tool_file "$1" func_convert_file_msys_to_w32 4910*b3fce824SCristian Pallarés func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 4911*b3fce824SCristian Pallarés test -n "$func_cygming_ms_implib_tmp" 4912*b3fce824SCristian Pallarés} 4913*b3fce824SCristian Pallarés 4914189777a2SCristian Pallares# func_win32_libid arg 4915189777a2SCristian Pallares# return the library type of file 'arg' 4916189777a2SCristian Pallares# 4917189777a2SCristian Pallares# Need a lot of goo to handle *both* DLLs and import libs 4918189777a2SCristian Pallares# Has to be a shell function in order to 'eat' the argument 4919189777a2SCristian Pallares# that is supplied when $file_magic_command is called. 4920189777a2SCristian Pallares# Despite the name, also deal with 64 bit binaries. 4921189777a2SCristian Pallaresfunc_win32_libid () 4922189777a2SCristian Pallares{ 4923*b3fce824SCristian Pallarés $debug_cmd 4924*b3fce824SCristian Pallarés 4925*b3fce824SCristian Pallarés win32_libid_type=unknown 4926189777a2SCristian Pallares win32_fileres=`file -L $1 2>/dev/null` 4927189777a2SCristian Pallares case $win32_fileres in 4928189777a2SCristian Pallares *ar\ archive\ import\ library*) # definitely import 4929189777a2SCristian Pallares win32_libid_type="x86 archive import" 4930189777a2SCristian Pallares ;; 4931189777a2SCristian Pallares *ar\ archive*) # could be an import, or static 4932189777a2SCristian Pallares # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 4933189777a2SCristian Pallares if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 4934189777a2SCristian Pallares $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 4935*b3fce824SCristian Pallarés case $nm_interface in 4936*b3fce824SCristian Pallarés "MS dumpbin") 4937*b3fce824SCristian Pallarés if func_cygming_ms_implib_p "$1" || 4938*b3fce824SCristian Pallarés func_cygming_gnu_implib_p "$1" 4939*b3fce824SCristian Pallarés then 4940*b3fce824SCristian Pallarés win32_nmres=import 4941*b3fce824SCristian Pallarés else 4942*b3fce824SCristian Pallarés win32_nmres= 4943*b3fce824SCristian Pallarés fi 4944*b3fce824SCristian Pallarés ;; 4945*b3fce824SCristian Pallarés *) 4946189777a2SCristian Pallares func_to_tool_file "$1" func_convert_file_msys_to_w32 4947189777a2SCristian Pallares win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 4948189777a2SCristian Pallares $SED -n -e ' 4949189777a2SCristian Pallares 1,100{ 4950189777a2SCristian Pallares / I /{ 4951*b3fce824SCristian Pallarés s|.*|import| 4952189777a2SCristian Pallares p 4953189777a2SCristian Pallares q 4954189777a2SCristian Pallares } 4955189777a2SCristian Pallares }'` 4956*b3fce824SCristian Pallarés ;; 4957*b3fce824SCristian Pallarés esac 4958189777a2SCristian Pallares case $win32_nmres in 4959189777a2SCristian Pallares import*) win32_libid_type="x86 archive import";; 4960189777a2SCristian Pallares *) win32_libid_type="x86 archive static";; 4961189777a2SCristian Pallares esac 4962189777a2SCristian Pallares fi 4963189777a2SCristian Pallares ;; 4964189777a2SCristian Pallares *DLL*) 4965189777a2SCristian Pallares win32_libid_type="x86 DLL" 4966189777a2SCristian Pallares ;; 4967189777a2SCristian Pallares *executable*) # but shell scripts are "executable" too... 4968189777a2SCristian Pallares case $win32_fileres in 4969189777a2SCristian Pallares *MS\ Windows\ PE\ Intel*) 4970189777a2SCristian Pallares win32_libid_type="x86 DLL" 4971189777a2SCristian Pallares ;; 4972189777a2SCristian Pallares esac 4973189777a2SCristian Pallares ;; 4974189777a2SCristian Pallares esac 4975189777a2SCristian Pallares $ECHO "$win32_libid_type" 4976189777a2SCristian Pallares} 4977189777a2SCristian Pallares 4978189777a2SCristian Pallares# func_cygming_dll_for_implib ARG 4979189777a2SCristian Pallares# 4980189777a2SCristian Pallares# Platform-specific function to extract the 4981189777a2SCristian Pallares# name of the DLL associated with the specified 4982189777a2SCristian Pallares# import library ARG. 4983189777a2SCristian Pallares# Invoked by eval'ing the libtool variable 4984189777a2SCristian Pallares# $sharedlib_from_linklib_cmd 4985189777a2SCristian Pallares# Result is available in the variable 4986189777a2SCristian Pallares# $sharedlib_from_linklib_result 4987189777a2SCristian Pallaresfunc_cygming_dll_for_implib () 4988189777a2SCristian Pallares{ 4989*b3fce824SCristian Pallarés $debug_cmd 4990*b3fce824SCristian Pallarés 4991189777a2SCristian Pallares sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 4992189777a2SCristian Pallares} 4993189777a2SCristian Pallares 4994189777a2SCristian Pallares# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 4995189777a2SCristian Pallares# 4996189777a2SCristian Pallares# The is the core of a fallback implementation of a 4997189777a2SCristian Pallares# platform-specific function to extract the name of the 4998189777a2SCristian Pallares# DLL associated with the specified import library LIBNAME. 4999189777a2SCristian Pallares# 5000189777a2SCristian Pallares# SECTION_NAME is either .idata$6 or .idata$7, depending 5001189777a2SCristian Pallares# on the platform and compiler that created the implib. 5002189777a2SCristian Pallares# 5003189777a2SCristian Pallares# Echos the name of the DLL associated with the 5004189777a2SCristian Pallares# specified import library. 5005189777a2SCristian Pallaresfunc_cygming_dll_for_implib_fallback_core () 5006189777a2SCristian Pallares{ 5007*b3fce824SCristian Pallarés $debug_cmd 5008*b3fce824SCristian Pallarés 5009189777a2SCristian Pallares match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5010189777a2SCristian Pallares $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5011189777a2SCristian Pallares $SED '/^Contents of section '"$match_literal"':/{ 5012189777a2SCristian Pallares # Place marker at beginning of archive member dllname section 5013189777a2SCristian Pallares s/.*/====MARK====/ 5014189777a2SCristian Pallares p 5015189777a2SCristian Pallares d 5016189777a2SCristian Pallares } 5017189777a2SCristian Pallares # These lines can sometimes be longer than 43 characters, but 5018189777a2SCristian Pallares # are always uninteresting 5019189777a2SCristian Pallares /:[ ]*file format pe[i]\{,1\}-/d 5020189777a2SCristian Pallares /^In archive [^:]*:/d 5021189777a2SCristian Pallares # Ensure marker is printed 5022189777a2SCristian Pallares /^====MARK====/p 5023189777a2SCristian Pallares # Remove all lines with less than 43 characters 5024189777a2SCristian Pallares /^.\{43\}/!d 5025189777a2SCristian Pallares # From remaining lines, remove first 43 characters 5026189777a2SCristian Pallares s/^.\{43\}//' | 5027189777a2SCristian Pallares $SED -n ' 5028189777a2SCristian Pallares # Join marker and all lines until next marker into a single line 5029189777a2SCristian Pallares /^====MARK====/ b para 5030189777a2SCristian Pallares H 5031189777a2SCristian Pallares $ b para 5032189777a2SCristian Pallares b 5033189777a2SCristian Pallares :para 5034189777a2SCristian Pallares x 5035189777a2SCristian Pallares s/\n//g 5036189777a2SCristian Pallares # Remove the marker 5037189777a2SCristian Pallares s/^====MARK====// 5038189777a2SCristian Pallares # Remove trailing dots and whitespace 5039189777a2SCristian Pallares s/[\. \t]*$// 5040189777a2SCristian Pallares # Print 5041189777a2SCristian Pallares /./p' | 5042189777a2SCristian Pallares # we now have a list, one entry per line, of the stringified 5043189777a2SCristian Pallares # contents of the appropriate section of all members of the 5044*b3fce824SCristian Pallarés # archive that possess that section. Heuristic: eliminate 5045*b3fce824SCristian Pallarés # all those that have a first or second character that is 5046189777a2SCristian Pallares # a '.' (that is, objdump's representation of an unprintable 5047189777a2SCristian Pallares # character.) This should work for all archives with less than 5048189777a2SCristian Pallares # 0x302f exports -- but will fail for DLLs whose name actually 5049189777a2SCristian Pallares # begins with a literal '.' or a single character followed by 5050189777a2SCristian Pallares # a '.'. 5051189777a2SCristian Pallares # 5052189777a2SCristian Pallares # Of those that remain, print the first one. 5053189777a2SCristian Pallares $SED -e '/^\./d;/^.\./d;q' 5054189777a2SCristian Pallares} 5055189777a2SCristian Pallares 5056189777a2SCristian Pallares# func_cygming_dll_for_implib_fallback ARG 5057189777a2SCristian Pallares# Platform-specific function to extract the 5058189777a2SCristian Pallares# name of the DLL associated with the specified 5059189777a2SCristian Pallares# import library ARG. 5060189777a2SCristian Pallares# 5061189777a2SCristian Pallares# This fallback implementation is for use when $DLLTOOL 5062189777a2SCristian Pallares# does not support the --identify-strict option. 5063189777a2SCristian Pallares# Invoked by eval'ing the libtool variable 5064189777a2SCristian Pallares# $sharedlib_from_linklib_cmd 5065189777a2SCristian Pallares# Result is available in the variable 5066189777a2SCristian Pallares# $sharedlib_from_linklib_result 5067189777a2SCristian Pallaresfunc_cygming_dll_for_implib_fallback () 5068189777a2SCristian Pallares{ 5069*b3fce824SCristian Pallarés $debug_cmd 5070*b3fce824SCristian Pallarés 5071189777a2SCristian Pallares if func_cygming_gnu_implib_p "$1"; then 5072189777a2SCristian Pallares # binutils import library 5073189777a2SCristian Pallares sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5074189777a2SCristian Pallares elif func_cygming_ms_implib_p "$1"; then 5075189777a2SCristian Pallares # ms-generated import library 5076189777a2SCristian Pallares sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5077189777a2SCristian Pallares else 5078189777a2SCristian Pallares # unknown 5079*b3fce824SCristian Pallarés sharedlib_from_linklib_result= 5080189777a2SCristian Pallares fi 5081189777a2SCristian Pallares} 5082189777a2SCristian Pallares 5083189777a2SCristian Pallares 5084189777a2SCristian Pallares# func_extract_an_archive dir oldlib 5085189777a2SCristian Pallaresfunc_extract_an_archive () 5086189777a2SCristian Pallares{ 5087*b3fce824SCristian Pallarés $debug_cmd 5088*b3fce824SCristian Pallarés 5089*b3fce824SCristian Pallarés f_ex_an_ar_dir=$1; shift 5090*b3fce824SCristian Pallarés f_ex_an_ar_oldlib=$1 5091*b3fce824SCristian Pallarés if test yes = "$lock_old_archive_extraction"; then 5092189777a2SCristian Pallares lockfile=$f_ex_an_ar_oldlib.lock 5093189777a2SCristian Pallares until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5094189777a2SCristian Pallares func_echo "Waiting for $lockfile to be removed" 5095189777a2SCristian Pallares sleep 2 5096189777a2SCristian Pallares done 5097189777a2SCristian Pallares fi 5098189777a2SCristian Pallares func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5099189777a2SCristian Pallares 'stat=$?; rm -f "$lockfile"; exit $stat' 5100*b3fce824SCristian Pallarés if test yes = "$lock_old_archive_extraction"; then 5101189777a2SCristian Pallares $opt_dry_run || rm -f "$lockfile" 5102189777a2SCristian Pallares fi 5103189777a2SCristian Pallares if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5104189777a2SCristian Pallares : 5105189777a2SCristian Pallares else 5106189777a2SCristian Pallares func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5107189777a2SCristian Pallares fi 5108189777a2SCristian Pallares} 5109189777a2SCristian Pallares 5110189777a2SCristian Pallares 5111189777a2SCristian Pallares# func_extract_archives gentop oldlib ... 5112189777a2SCristian Pallaresfunc_extract_archives () 5113189777a2SCristian Pallares{ 5114*b3fce824SCristian Pallarés $debug_cmd 5115*b3fce824SCristian Pallarés 5116*b3fce824SCristian Pallarés my_gentop=$1; shift 5117189777a2SCristian Pallares my_oldlibs=${1+"$@"} 5118*b3fce824SCristian Pallarés my_oldobjs= 5119*b3fce824SCristian Pallarés my_xlib= 5120*b3fce824SCristian Pallarés my_xabs= 5121*b3fce824SCristian Pallarés my_xdir= 5122189777a2SCristian Pallares 5123189777a2SCristian Pallares for my_xlib in $my_oldlibs; do 5124189777a2SCristian Pallares # Extract the objects. 5125189777a2SCristian Pallares case $my_xlib in 5126*b3fce824SCristian Pallarés [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5127189777a2SCristian Pallares *) my_xabs=`pwd`"/$my_xlib" ;; 5128189777a2SCristian Pallares esac 5129189777a2SCristian Pallares func_basename "$my_xlib" 5130*b3fce824SCristian Pallarés my_xlib=$func_basename_result 5131189777a2SCristian Pallares my_xlib_u=$my_xlib 5132189777a2SCristian Pallares while :; do 5133189777a2SCristian Pallares case " $extracted_archives " in 5134189777a2SCristian Pallares *" $my_xlib_u "*) 5135189777a2SCristian Pallares func_arith $extracted_serial + 1 5136189777a2SCristian Pallares extracted_serial=$func_arith_result 5137189777a2SCristian Pallares my_xlib_u=lt$extracted_serial-$my_xlib ;; 5138189777a2SCristian Pallares *) break ;; 5139189777a2SCristian Pallares esac 5140189777a2SCristian Pallares done 5141189777a2SCristian Pallares extracted_archives="$extracted_archives $my_xlib_u" 5142*b3fce824SCristian Pallarés my_xdir=$my_gentop/$my_xlib_u 5143189777a2SCristian Pallares 5144189777a2SCristian Pallares func_mkdir_p "$my_xdir" 5145189777a2SCristian Pallares 5146189777a2SCristian Pallares case $host in 5147189777a2SCristian Pallares *-darwin*) 5148189777a2SCristian Pallares func_verbose "Extracting $my_xabs" 5149189777a2SCristian Pallares # Do not bother doing anything if just a dry run 5150189777a2SCristian Pallares $opt_dry_run || { 5151189777a2SCristian Pallares darwin_orig_dir=`pwd` 5152189777a2SCristian Pallares cd $my_xdir || exit $? 5153189777a2SCristian Pallares darwin_archive=$my_xabs 5154189777a2SCristian Pallares darwin_curdir=`pwd` 5155*b3fce824SCristian Pallarés func_basename "$darwin_archive" 5156*b3fce824SCristian Pallarés darwin_base_archive=$func_basename_result 5157189777a2SCristian Pallares darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5158189777a2SCristian Pallares if test -n "$darwin_arches"; then 5159189777a2SCristian Pallares darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5160189777a2SCristian Pallares darwin_arch= 5161189777a2SCristian Pallares func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5162189777a2SCristian Pallares for darwin_arch in $darwin_arches; do 5163*b3fce824SCristian Pallarés func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5164*b3fce824SCristian Pallarés $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5165*b3fce824SCristian Pallarés cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5166*b3fce824SCristian Pallarés func_extract_an_archive "`pwd`" "$darwin_base_archive" 5167189777a2SCristian Pallares cd "$darwin_curdir" 5168*b3fce824SCristian Pallarés $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5169189777a2SCristian Pallares done # $darwin_arches 5170189777a2SCristian Pallares ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5171*b3fce824SCristian Pallarés darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5172189777a2SCristian Pallares darwin_file= 5173189777a2SCristian Pallares darwin_files= 5174189777a2SCristian Pallares for darwin_file in $darwin_filelist; do 5175189777a2SCristian Pallares darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5176189777a2SCristian Pallares $LIPO -create -output "$darwin_file" $darwin_files 5177189777a2SCristian Pallares done # $darwin_filelist 5178189777a2SCristian Pallares $RM -rf unfat-$$ 5179189777a2SCristian Pallares cd "$darwin_orig_dir" 5180189777a2SCristian Pallares else 5181189777a2SCristian Pallares cd $darwin_orig_dir 5182189777a2SCristian Pallares func_extract_an_archive "$my_xdir" "$my_xabs" 5183189777a2SCristian Pallares fi # $darwin_arches 5184189777a2SCristian Pallares } # !$opt_dry_run 5185189777a2SCristian Pallares ;; 5186189777a2SCristian Pallares *) 5187189777a2SCristian Pallares func_extract_an_archive "$my_xdir" "$my_xabs" 5188189777a2SCristian Pallares ;; 5189189777a2SCristian Pallares esac 5190189777a2SCristian Pallares my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5191189777a2SCristian Pallares done 5192189777a2SCristian Pallares 5193*b3fce824SCristian Pallarés func_extract_archives_result=$my_oldobjs 5194189777a2SCristian Pallares} 5195189777a2SCristian Pallares 5196189777a2SCristian Pallares 5197189777a2SCristian Pallares# func_emit_wrapper [arg=no] 5198189777a2SCristian Pallares# 5199189777a2SCristian Pallares# Emit a libtool wrapper script on stdout. 5200189777a2SCristian Pallares# Don't directly open a file because we may want to 5201189777a2SCristian Pallares# incorporate the script contents within a cygwin/mingw 5202189777a2SCristian Pallares# wrapper executable. Must ONLY be called from within 5203189777a2SCristian Pallares# func_mode_link because it depends on a number of variables 5204189777a2SCristian Pallares# set therein. 5205189777a2SCristian Pallares# 5206189777a2SCristian Pallares# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5207189777a2SCristian Pallares# variable will take. If 'yes', then the emitted script 5208*b3fce824SCristian Pallarés# will assume that the directory where it is stored is 5209189777a2SCristian Pallares# the $objdir directory. This is a cygwin/mingw-specific 5210189777a2SCristian Pallares# behavior. 5211189777a2SCristian Pallaresfunc_emit_wrapper () 5212189777a2SCristian Pallares{ 5213189777a2SCristian Pallares func_emit_wrapper_arg1=${1-no} 5214189777a2SCristian Pallares 5215189777a2SCristian Pallares $ECHO "\ 5216189777a2SCristian Pallares#! $SHELL 5217189777a2SCristian Pallares 5218189777a2SCristian Pallares# $output - temporary wrapper script for $objdir/$outputname 5219*b3fce824SCristian Pallarés# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5220189777a2SCristian Pallares# 5221189777a2SCristian Pallares# The $output program cannot be directly executed until all the libtool 5222189777a2SCristian Pallares# libraries that it depends on are installed. 5223189777a2SCristian Pallares# 5224189777a2SCristian Pallares# This wrapper script should never be moved out of the build directory. 5225189777a2SCristian Pallares# If it is, it will not operate correctly. 5226189777a2SCristian Pallares 5227189777a2SCristian Pallares# Sed substitution that helps us do robust quoting. It backslashifies 5228189777a2SCristian Pallares# metacharacters that are still active within double-quoted strings. 5229189777a2SCristian Pallaressed_quote_subst='$sed_quote_subst' 5230189777a2SCristian Pallares 5231189777a2SCristian Pallares# Be Bourne compatible 5232189777a2SCristian Pallaresif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5233189777a2SCristian Pallares emulate sh 5234189777a2SCristian Pallares NULLCMD=: 5235189777a2SCristian Pallares # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5236189777a2SCristian Pallares # is contrary to our usage. Disable this feature. 5237189777a2SCristian Pallares alias -g '\${1+\"\$@\"}'='\"\$@\"' 5238189777a2SCristian Pallares setopt NO_GLOB_SUBST 5239189777a2SCristian Pallareselse 5240189777a2SCristian Pallares case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5241189777a2SCristian Pallaresfi 5242189777a2SCristian PallaresBIN_SH=xpg4; export BIN_SH # for Tru64 5243189777a2SCristian PallaresDUALCASE=1; export DUALCASE # for MKS sh 5244189777a2SCristian Pallares 5245189777a2SCristian Pallares# The HP-UX ksh and POSIX shell print the target directory to stdout 5246189777a2SCristian Pallares# if CDPATH is set. 5247189777a2SCristian Pallares(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5248189777a2SCristian Pallares 5249189777a2SCristian Pallaresrelink_command=\"$relink_command\" 5250189777a2SCristian Pallares 5251189777a2SCristian Pallares# This environment variable determines our operation mode. 5252189777a2SCristian Pallaresif test \"\$libtool_install_magic\" = \"$magic\"; then 5253189777a2SCristian Pallares # install mode needs the following variables: 5254189777a2SCristian Pallares generated_by_libtool_version='$macro_version' 5255189777a2SCristian Pallares notinst_deplibs='$notinst_deplibs' 5256189777a2SCristian Pallareselse 5257189777a2SCristian Pallares # When we are sourced in execute mode, \$file and \$ECHO are already set. 5258189777a2SCristian Pallares if test \"\$libtool_execute_magic\" != \"$magic\"; then 5259189777a2SCristian Pallares file=\"\$0\"" 5260189777a2SCristian Pallares 5261189777a2SCristian Pallares qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 5262189777a2SCristian Pallares $ECHO "\ 5263189777a2SCristian Pallares 5264189777a2SCristian Pallares# A function that is used when there is no print builtin or printf. 5265189777a2SCristian Pallaresfunc_fallback_echo () 5266189777a2SCristian Pallares{ 5267189777a2SCristian Pallares eval 'cat <<_LTECHO_EOF 5268189777a2SCristian Pallares\$1 5269189777a2SCristian Pallares_LTECHO_EOF' 5270189777a2SCristian Pallares} 5271189777a2SCristian Pallares ECHO=\"$qECHO\" 5272189777a2SCristian Pallares fi 5273189777a2SCristian Pallares 5274189777a2SCristian Pallares# Very basic option parsing. These options are (a) specific to 5275189777a2SCristian Pallares# the libtool wrapper, (b) are identical between the wrapper 5276*b3fce824SCristian Pallarés# /script/ and the wrapper /executable/ that is used only on 5277189777a2SCristian Pallares# windows platforms, and (c) all begin with the string "--lt-" 5278*b3fce824SCristian Pallarés# (application programs are unlikely to have options that match 5279189777a2SCristian Pallares# this pattern). 5280189777a2SCristian Pallares# 5281189777a2SCristian Pallares# There are only two supported options: --lt-debug and 5282189777a2SCristian Pallares# --lt-dump-script. There is, deliberately, no --lt-help. 5283189777a2SCristian Pallares# 5284189777a2SCristian Pallares# The first argument to this parsing function should be the 5285189777a2SCristian Pallares# script's $0 value, followed by "$@". 5286189777a2SCristian Pallareslt_option_debug= 5287189777a2SCristian Pallaresfunc_parse_lt_options () 5288189777a2SCristian Pallares{ 5289189777a2SCristian Pallares lt_script_arg0=\$0 5290189777a2SCristian Pallares shift 5291189777a2SCristian Pallares for lt_opt 5292189777a2SCristian Pallares do 5293189777a2SCristian Pallares case \"\$lt_opt\" in 5294189777a2SCristian Pallares --lt-debug) lt_option_debug=1 ;; 5295189777a2SCristian Pallares --lt-dump-script) 5296189777a2SCristian Pallares lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5297189777a2SCristian Pallares test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5298189777a2SCristian Pallares lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5299189777a2SCristian Pallares cat \"\$lt_dump_D/\$lt_dump_F\" 5300189777a2SCristian Pallares exit 0 5301189777a2SCristian Pallares ;; 5302189777a2SCristian Pallares --lt-*) 5303189777a2SCristian Pallares \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5304189777a2SCristian Pallares exit 1 5305189777a2SCristian Pallares ;; 5306189777a2SCristian Pallares esac 5307189777a2SCristian Pallares done 5308189777a2SCristian Pallares 5309189777a2SCristian Pallares # Print the debug banner immediately: 5310189777a2SCristian Pallares if test -n \"\$lt_option_debug\"; then 5311*b3fce824SCristian Pallarés echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5312189777a2SCristian Pallares fi 5313189777a2SCristian Pallares} 5314189777a2SCristian Pallares 5315189777a2SCristian Pallares# Used when --lt-debug. Prints its arguments to stdout 5316189777a2SCristian Pallares# (redirection is the responsibility of the caller) 5317189777a2SCristian Pallaresfunc_lt_dump_args () 5318189777a2SCristian Pallares{ 5319189777a2SCristian Pallares lt_dump_args_N=1; 5320189777a2SCristian Pallares for lt_arg 5321189777a2SCristian Pallares do 5322*b3fce824SCristian Pallarés \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5323189777a2SCristian Pallares lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5324189777a2SCristian Pallares done 5325189777a2SCristian Pallares} 5326189777a2SCristian Pallares 5327189777a2SCristian Pallares# Core function for launching the target application 5328189777a2SCristian Pallaresfunc_exec_program_core () 5329189777a2SCristian Pallares{ 5330189777a2SCristian Pallares" 5331189777a2SCristian Pallares case $host in 5332189777a2SCristian Pallares # Backslashes separate directories on plain windows 5333189777a2SCristian Pallares *-*-mingw | *-*-os2* | *-cegcc*) 5334189777a2SCristian Pallares $ECHO "\ 5335189777a2SCristian Pallares if test -n \"\$lt_option_debug\"; then 5336*b3fce824SCristian Pallarés \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5337189777a2SCristian Pallares func_lt_dump_args \${1+\"\$@\"} 1>&2 5338189777a2SCristian Pallares fi 5339189777a2SCristian Pallares exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5340189777a2SCristian Pallares" 5341189777a2SCristian Pallares ;; 5342189777a2SCristian Pallares 5343189777a2SCristian Pallares *) 5344189777a2SCristian Pallares $ECHO "\ 5345189777a2SCristian Pallares if test -n \"\$lt_option_debug\"; then 5346*b3fce824SCristian Pallarés \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5347189777a2SCristian Pallares func_lt_dump_args \${1+\"\$@\"} 1>&2 5348189777a2SCristian Pallares fi 5349189777a2SCristian Pallares exec \"\$progdir/\$program\" \${1+\"\$@\"} 5350189777a2SCristian Pallares" 5351189777a2SCristian Pallares ;; 5352189777a2SCristian Pallares esac 5353189777a2SCristian Pallares $ECHO "\ 5354189777a2SCristian Pallares \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5355189777a2SCristian Pallares exit 1 5356189777a2SCristian Pallares} 5357189777a2SCristian Pallares 5358189777a2SCristian Pallares# A function to encapsulate launching the target application 5359189777a2SCristian Pallares# Strips options in the --lt-* namespace from \$@ and 5360189777a2SCristian Pallares# launches target application with the remaining arguments. 5361189777a2SCristian Pallaresfunc_exec_program () 5362189777a2SCristian Pallares{ 5363189777a2SCristian Pallares case \" \$* \" in 5364189777a2SCristian Pallares *\\ --lt-*) 5365189777a2SCristian Pallares for lt_wr_arg 5366189777a2SCristian Pallares do 5367189777a2SCristian Pallares case \$lt_wr_arg in 5368189777a2SCristian Pallares --lt-*) ;; 5369189777a2SCristian Pallares *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5370189777a2SCristian Pallares esac 5371189777a2SCristian Pallares shift 5372189777a2SCristian Pallares done ;; 5373189777a2SCristian Pallares esac 5374189777a2SCristian Pallares func_exec_program_core \${1+\"\$@\"} 5375189777a2SCristian Pallares} 5376189777a2SCristian Pallares 5377189777a2SCristian Pallares # Parse options 5378189777a2SCristian Pallares func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5379189777a2SCristian Pallares 5380189777a2SCristian Pallares # Find the directory that this script lives in. 5381189777a2SCristian Pallares thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5382189777a2SCristian Pallares test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5383189777a2SCristian Pallares 5384189777a2SCristian Pallares # Follow symbolic links until we get to the real thisdir. 5385189777a2SCristian Pallares file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5386189777a2SCristian Pallares while test -n \"\$file\"; do 5387189777a2SCristian Pallares destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5388189777a2SCristian Pallares 5389189777a2SCristian Pallares # If there was a directory component, then change thisdir. 5390189777a2SCristian Pallares if test \"x\$destdir\" != \"x\$file\"; then 5391189777a2SCristian Pallares case \"\$destdir\" in 5392189777a2SCristian Pallares [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5393189777a2SCristian Pallares *) thisdir=\"\$thisdir/\$destdir\" ;; 5394189777a2SCristian Pallares esac 5395189777a2SCristian Pallares fi 5396189777a2SCristian Pallares 5397189777a2SCristian Pallares file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5398189777a2SCristian Pallares file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5399189777a2SCristian Pallares done 5400189777a2SCristian Pallares 5401189777a2SCristian Pallares # Usually 'no', except on cygwin/mingw when embedded into 5402189777a2SCristian Pallares # the cwrapper. 5403189777a2SCristian Pallares WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5404189777a2SCristian Pallares if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5405189777a2SCristian Pallares # special case for '.' 5406189777a2SCristian Pallares if test \"\$thisdir\" = \".\"; then 5407189777a2SCristian Pallares thisdir=\`pwd\` 5408189777a2SCristian Pallares fi 5409189777a2SCristian Pallares # remove .libs from thisdir 5410189777a2SCristian Pallares case \"\$thisdir\" in 5411189777a2SCristian Pallares *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5412189777a2SCristian Pallares $objdir ) thisdir=. ;; 5413189777a2SCristian Pallares esac 5414189777a2SCristian Pallares fi 5415189777a2SCristian Pallares 5416189777a2SCristian Pallares # Try to get the absolute directory name. 5417189777a2SCristian Pallares absdir=\`cd \"\$thisdir\" && pwd\` 5418189777a2SCristian Pallares test -n \"\$absdir\" && thisdir=\"\$absdir\" 5419189777a2SCristian Pallares" 5420189777a2SCristian Pallares 5421*b3fce824SCristian Pallarés if test yes = "$fast_install"; then 5422189777a2SCristian Pallares $ECHO "\ 5423189777a2SCristian Pallares program=lt-'$outputname'$exeext 5424189777a2SCristian Pallares progdir=\"\$thisdir/$objdir\" 5425189777a2SCristian Pallares 5426189777a2SCristian Pallares if test ! -f \"\$progdir/\$program\" || 5427*b3fce824SCristian Pallarés { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5428189777a2SCristian Pallares test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5429189777a2SCristian Pallares 5430189777a2SCristian Pallares file=\"\$\$-\$program\" 5431189777a2SCristian Pallares 5432189777a2SCristian Pallares if test ! -d \"\$progdir\"; then 5433189777a2SCristian Pallares $MKDIR \"\$progdir\" 5434189777a2SCristian Pallares else 5435189777a2SCristian Pallares $RM \"\$progdir/\$file\" 5436189777a2SCristian Pallares fi" 5437189777a2SCristian Pallares 5438189777a2SCristian Pallares $ECHO "\ 5439189777a2SCristian Pallares 5440189777a2SCristian Pallares # relink executable if necessary 5441189777a2SCristian Pallares if test -n \"\$relink_command\"; then 5442189777a2SCristian Pallares if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5443189777a2SCristian Pallares else 5444*b3fce824SCristian Pallarés \$ECHO \"\$relink_command_output\" >&2 5445189777a2SCristian Pallares $RM \"\$progdir/\$file\" 5446189777a2SCristian Pallares exit 1 5447189777a2SCristian Pallares fi 5448189777a2SCristian Pallares fi 5449189777a2SCristian Pallares 5450189777a2SCristian Pallares $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5451189777a2SCristian Pallares { $RM \"\$progdir/\$program\"; 5452189777a2SCristian Pallares $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5453189777a2SCristian Pallares $RM \"\$progdir/\$file\" 5454189777a2SCristian Pallares fi" 5455189777a2SCristian Pallares else 5456189777a2SCristian Pallares $ECHO "\ 5457189777a2SCristian Pallares program='$outputname' 5458189777a2SCristian Pallares progdir=\"\$thisdir/$objdir\" 5459189777a2SCristian Pallares" 5460189777a2SCristian Pallares fi 5461189777a2SCristian Pallares 5462189777a2SCristian Pallares $ECHO "\ 5463189777a2SCristian Pallares 5464189777a2SCristian Pallares if test -f \"\$progdir/\$program\"; then" 5465189777a2SCristian Pallares 5466189777a2SCristian Pallares # fixup the dll searchpath if we need to. 5467189777a2SCristian Pallares # 5468189777a2SCristian Pallares # Fix the DLL searchpath if we need to. Do this before prepending 5469189777a2SCristian Pallares # to shlibpath, because on Windows, both are PATH and uninstalled 5470189777a2SCristian Pallares # libraries must come first. 5471189777a2SCristian Pallares if test -n "$dllsearchpath"; then 5472189777a2SCristian Pallares $ECHO "\ 5473189777a2SCristian Pallares # Add the dll search path components to the executable PATH 5474189777a2SCristian Pallares PATH=$dllsearchpath:\$PATH 5475189777a2SCristian Pallares" 5476189777a2SCristian Pallares fi 5477189777a2SCristian Pallares 5478189777a2SCristian Pallares # Export our shlibpath_var if we have one. 5479*b3fce824SCristian Pallarés if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5480189777a2SCristian Pallares $ECHO "\ 5481189777a2SCristian Pallares # Add our own library path to $shlibpath_var 5482189777a2SCristian Pallares $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5483189777a2SCristian Pallares 5484189777a2SCristian Pallares # Some systems cannot cope with colon-terminated $shlibpath_var 5485189777a2SCristian Pallares # The second colon is a workaround for a bug in BeOS R4 sed 5486189777a2SCristian Pallares $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5487189777a2SCristian Pallares 5488189777a2SCristian Pallares export $shlibpath_var 5489189777a2SCristian Pallares" 5490189777a2SCristian Pallares fi 5491189777a2SCristian Pallares 5492189777a2SCristian Pallares $ECHO "\ 5493189777a2SCristian Pallares if test \"\$libtool_execute_magic\" != \"$magic\"; then 5494189777a2SCristian Pallares # Run the actual program with our arguments. 5495189777a2SCristian Pallares func_exec_program \${1+\"\$@\"} 5496189777a2SCristian Pallares fi 5497189777a2SCristian Pallares else 5498189777a2SCristian Pallares # The program doesn't exist. 5499*b3fce824SCristian Pallarés \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5500189777a2SCristian Pallares \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5501189777a2SCristian Pallares \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5502189777a2SCristian Pallares exit 1 5503189777a2SCristian Pallares fi 5504189777a2SCristian Pallaresfi\ 5505189777a2SCristian Pallares" 5506189777a2SCristian Pallares} 5507189777a2SCristian Pallares 5508189777a2SCristian Pallares 5509189777a2SCristian Pallares# func_emit_cwrapperexe_src 5510189777a2SCristian Pallares# emit the source code for a wrapper executable on stdout 5511189777a2SCristian Pallares# Must ONLY be called from within func_mode_link because 5512189777a2SCristian Pallares# it depends on a number of variable set therein. 5513189777a2SCristian Pallaresfunc_emit_cwrapperexe_src () 5514189777a2SCristian Pallares{ 5515189777a2SCristian Pallares cat <<EOF 5516189777a2SCristian Pallares 5517189777a2SCristian Pallares/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5518*b3fce824SCristian Pallarés Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5519189777a2SCristian Pallares 5520189777a2SCristian Pallares The $output program cannot be directly executed until all the libtool 5521189777a2SCristian Pallares libraries that it depends on are installed. 5522189777a2SCristian Pallares 5523189777a2SCristian Pallares This wrapper executable should never be moved out of the build directory. 5524189777a2SCristian Pallares If it is, it will not operate correctly. 5525189777a2SCristian Pallares*/ 5526189777a2SCristian PallaresEOF 5527189777a2SCristian Pallares cat <<"EOF" 5528189777a2SCristian Pallares#ifdef _MSC_VER 5529189777a2SCristian Pallares# define _CRT_SECURE_NO_DEPRECATE 1 5530189777a2SCristian Pallares#endif 5531189777a2SCristian Pallares#include <stdio.h> 5532189777a2SCristian Pallares#include <stdlib.h> 5533189777a2SCristian Pallares#ifdef _MSC_VER 5534189777a2SCristian Pallares# include <direct.h> 5535189777a2SCristian Pallares# include <process.h> 5536189777a2SCristian Pallares# include <io.h> 5537189777a2SCristian Pallares#else 5538189777a2SCristian Pallares# include <unistd.h> 5539189777a2SCristian Pallares# include <stdint.h> 5540189777a2SCristian Pallares# ifdef __CYGWIN__ 5541189777a2SCristian Pallares# include <io.h> 5542189777a2SCristian Pallares# endif 5543189777a2SCristian Pallares#endif 5544189777a2SCristian Pallares#include <malloc.h> 5545189777a2SCristian Pallares#include <stdarg.h> 5546189777a2SCristian Pallares#include <assert.h> 5547189777a2SCristian Pallares#include <string.h> 5548189777a2SCristian Pallares#include <ctype.h> 5549189777a2SCristian Pallares#include <errno.h> 5550189777a2SCristian Pallares#include <fcntl.h> 5551189777a2SCristian Pallares#include <sys/stat.h> 5552189777a2SCristian Pallares 5553*b3fce824SCristian Pallarés#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5554*b3fce824SCristian Pallarés 5555189777a2SCristian Pallares/* declarations of non-ANSI functions */ 5556*b3fce824SCristian Pallarés#if defined __MINGW32__ 5557189777a2SCristian Pallares# ifdef __STRICT_ANSI__ 5558189777a2SCristian Pallaresint _putenv (const char *); 5559189777a2SCristian Pallares# endif 5560*b3fce824SCristian Pallarés#elif defined __CYGWIN__ 5561189777a2SCristian Pallares# ifdef __STRICT_ANSI__ 5562189777a2SCristian Pallareschar *realpath (const char *, char *); 5563189777a2SCristian Pallaresint putenv (char *); 5564189777a2SCristian Pallaresint setenv (const char *, const char *, int); 5565189777a2SCristian Pallares# endif 5566*b3fce824SCristian Pallarés/* #elif defined other_platform || defined ... */ 5567189777a2SCristian Pallares#endif 5568189777a2SCristian Pallares 5569189777a2SCristian Pallares/* portability defines, excluding path handling macros */ 5570*b3fce824SCristian Pallarés#if defined _MSC_VER 5571189777a2SCristian Pallares# define setmode _setmode 5572189777a2SCristian Pallares# define stat _stat 5573189777a2SCristian Pallares# define chmod _chmod 5574189777a2SCristian Pallares# define getcwd _getcwd 5575189777a2SCristian Pallares# define putenv _putenv 5576189777a2SCristian Pallares# define S_IXUSR _S_IEXEC 5577*b3fce824SCristian Pallarés#elif defined __MINGW32__ 5578189777a2SCristian Pallares# define setmode _setmode 5579189777a2SCristian Pallares# define stat _stat 5580189777a2SCristian Pallares# define chmod _chmod 5581189777a2SCristian Pallares# define getcwd _getcwd 5582189777a2SCristian Pallares# define putenv _putenv 5583*b3fce824SCristian Pallarés#elif defined __CYGWIN__ 5584189777a2SCristian Pallares# define HAVE_SETENV 5585189777a2SCristian Pallares# define FOPEN_WB "wb" 5586*b3fce824SCristian Pallarés/* #elif defined other platforms ... */ 5587189777a2SCristian Pallares#endif 5588189777a2SCristian Pallares 5589*b3fce824SCristian Pallarés#if defined PATH_MAX 5590189777a2SCristian Pallares# define LT_PATHMAX PATH_MAX 5591*b3fce824SCristian Pallarés#elif defined MAXPATHLEN 5592189777a2SCristian Pallares# define LT_PATHMAX MAXPATHLEN 5593189777a2SCristian Pallares#else 5594189777a2SCristian Pallares# define LT_PATHMAX 1024 5595189777a2SCristian Pallares#endif 5596189777a2SCristian Pallares 5597189777a2SCristian Pallares#ifndef S_IXOTH 5598189777a2SCristian Pallares# define S_IXOTH 0 5599189777a2SCristian Pallares#endif 5600189777a2SCristian Pallares#ifndef S_IXGRP 5601189777a2SCristian Pallares# define S_IXGRP 0 5602189777a2SCristian Pallares#endif 5603189777a2SCristian Pallares 5604189777a2SCristian Pallares/* path handling portability macros */ 5605189777a2SCristian Pallares#ifndef DIR_SEPARATOR 5606189777a2SCristian Pallares# define DIR_SEPARATOR '/' 5607189777a2SCristian Pallares# define PATH_SEPARATOR ':' 5608189777a2SCristian Pallares#endif 5609189777a2SCristian Pallares 5610*b3fce824SCristian Pallarés#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5611*b3fce824SCristian Pallarés defined __OS2__ 5612189777a2SCristian Pallares# define HAVE_DOS_BASED_FILE_SYSTEM 5613189777a2SCristian Pallares# define FOPEN_WB "wb" 5614189777a2SCristian Pallares# ifndef DIR_SEPARATOR_2 5615189777a2SCristian Pallares# define DIR_SEPARATOR_2 '\\' 5616189777a2SCristian Pallares# endif 5617189777a2SCristian Pallares# ifndef PATH_SEPARATOR_2 5618189777a2SCristian Pallares# define PATH_SEPARATOR_2 ';' 5619189777a2SCristian Pallares# endif 5620189777a2SCristian Pallares#endif 5621189777a2SCristian Pallares 5622189777a2SCristian Pallares#ifndef DIR_SEPARATOR_2 5623189777a2SCristian Pallares# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5624189777a2SCristian Pallares#else /* DIR_SEPARATOR_2 */ 5625189777a2SCristian Pallares# define IS_DIR_SEPARATOR(ch) \ 5626189777a2SCristian Pallares (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5627189777a2SCristian Pallares#endif /* DIR_SEPARATOR_2 */ 5628189777a2SCristian Pallares 5629189777a2SCristian Pallares#ifndef PATH_SEPARATOR_2 5630189777a2SCristian Pallares# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5631189777a2SCristian Pallares#else /* PATH_SEPARATOR_2 */ 5632189777a2SCristian Pallares# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5633189777a2SCristian Pallares#endif /* PATH_SEPARATOR_2 */ 5634189777a2SCristian Pallares 5635189777a2SCristian Pallares#ifndef FOPEN_WB 5636189777a2SCristian Pallares# define FOPEN_WB "w" 5637189777a2SCristian Pallares#endif 5638189777a2SCristian Pallares#ifndef _O_BINARY 5639189777a2SCristian Pallares# define _O_BINARY 0 5640189777a2SCristian Pallares#endif 5641189777a2SCristian Pallares 5642189777a2SCristian Pallares#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5643189777a2SCristian Pallares#define XFREE(stale) do { \ 5644*b3fce824SCristian Pallarés if (stale) { free (stale); stale = 0; } \ 5645189777a2SCristian Pallares} while (0) 5646189777a2SCristian Pallares 5647*b3fce824SCristian Pallarés#if defined LT_DEBUGWRAPPER 5648189777a2SCristian Pallaresstatic int lt_debug = 1; 5649189777a2SCristian Pallares#else 5650189777a2SCristian Pallaresstatic int lt_debug = 0; 5651189777a2SCristian Pallares#endif 5652189777a2SCristian Pallares 5653189777a2SCristian Pallaresconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5654189777a2SCristian Pallares 5655189777a2SCristian Pallaresvoid *xmalloc (size_t num); 5656189777a2SCristian Pallareschar *xstrdup (const char *string); 5657189777a2SCristian Pallaresconst char *base_name (const char *name); 5658189777a2SCristian Pallareschar *find_executable (const char *wrapper); 5659189777a2SCristian Pallareschar *chase_symlinks (const char *pathspec); 5660189777a2SCristian Pallaresint make_executable (const char *path); 5661189777a2SCristian Pallaresint check_executable (const char *path); 5662189777a2SCristian Pallareschar *strendzap (char *str, const char *pat); 5663189777a2SCristian Pallaresvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5664189777a2SCristian Pallaresvoid lt_fatal (const char *file, int line, const char *message, ...); 5665189777a2SCristian Pallaresstatic const char *nonnull (const char *s); 5666189777a2SCristian Pallaresstatic const char *nonempty (const char *s); 5667189777a2SCristian Pallaresvoid lt_setenv (const char *name, const char *value); 5668189777a2SCristian Pallareschar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5669189777a2SCristian Pallaresvoid lt_update_exe_path (const char *name, const char *value); 5670189777a2SCristian Pallaresvoid lt_update_lib_path (const char *name, const char *value); 5671189777a2SCristian Pallareschar **prepare_spawn (char **argv); 5672189777a2SCristian Pallaresvoid lt_dump_script (FILE *f); 5673189777a2SCristian PallaresEOF 5674189777a2SCristian Pallares 5675189777a2SCristian Pallares cat <<EOF 5676*b3fce824SCristian Pallarés#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5677*b3fce824SCristian Pallarés# define externally_visible volatile 5678*b3fce824SCristian Pallarés#else 5679*b3fce824SCristian Pallarés# define externally_visible __attribute__((externally_visible)) volatile 5680*b3fce824SCristian Pallarés#endif 5681*b3fce824SCristian Pallarésexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5682189777a2SCristian Pallaresconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5683189777a2SCristian PallaresEOF 5684189777a2SCristian Pallares 5685*b3fce824SCristian Pallarés if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5686189777a2SCristian Pallares func_to_host_path "$temp_rpath" 5687189777a2SCristian Pallares cat <<EOF 5688189777a2SCristian Pallaresconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5689189777a2SCristian PallaresEOF 5690189777a2SCristian Pallares else 5691189777a2SCristian Pallares cat <<"EOF" 5692189777a2SCristian Pallaresconst char * LIB_PATH_VALUE = ""; 5693189777a2SCristian PallaresEOF 5694189777a2SCristian Pallares fi 5695189777a2SCristian Pallares 5696189777a2SCristian Pallares if test -n "$dllsearchpath"; then 5697189777a2SCristian Pallares func_to_host_path "$dllsearchpath:" 5698189777a2SCristian Pallares cat <<EOF 5699189777a2SCristian Pallaresconst char * EXE_PATH_VARNAME = "PATH"; 5700189777a2SCristian Pallaresconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5701189777a2SCristian PallaresEOF 5702189777a2SCristian Pallares else 5703189777a2SCristian Pallares cat <<"EOF" 5704189777a2SCristian Pallaresconst char * EXE_PATH_VARNAME = ""; 5705189777a2SCristian Pallaresconst char * EXE_PATH_VALUE = ""; 5706189777a2SCristian PallaresEOF 5707189777a2SCristian Pallares fi 5708189777a2SCristian Pallares 5709*b3fce824SCristian Pallarés if test yes = "$fast_install"; then 5710189777a2SCristian Pallares cat <<EOF 5711189777a2SCristian Pallaresconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5712189777a2SCristian PallaresEOF 5713189777a2SCristian Pallares else 5714189777a2SCristian Pallares cat <<EOF 5715189777a2SCristian Pallaresconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5716189777a2SCristian PallaresEOF 5717189777a2SCristian Pallares fi 5718189777a2SCristian Pallares 5719189777a2SCristian Pallares 5720189777a2SCristian Pallares cat <<"EOF" 5721189777a2SCristian Pallares 5722189777a2SCristian Pallares#define LTWRAPPER_OPTION_PREFIX "--lt-" 5723189777a2SCristian Pallares 5724189777a2SCristian Pallaresstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5725189777a2SCristian Pallaresstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5726189777a2SCristian Pallaresstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5727189777a2SCristian Pallares 5728189777a2SCristian Pallaresint 5729189777a2SCristian Pallaresmain (int argc, char *argv[]) 5730189777a2SCristian Pallares{ 5731189777a2SCristian Pallares char **newargz; 5732189777a2SCristian Pallares int newargc; 5733189777a2SCristian Pallares char *tmp_pathspec; 5734189777a2SCristian Pallares char *actual_cwrapper_path; 5735189777a2SCristian Pallares char *actual_cwrapper_name; 5736189777a2SCristian Pallares char *target_name; 5737189777a2SCristian Pallares char *lt_argv_zero; 5738*b3fce824SCristian Pallarés int rval = 127; 5739189777a2SCristian Pallares 5740189777a2SCristian Pallares int i; 5741189777a2SCristian Pallares 5742189777a2SCristian Pallares program_name = (char *) xstrdup (base_name (argv[0])); 5743*b3fce824SCristian Pallarés newargz = XMALLOC (char *, (size_t) argc + 1); 5744189777a2SCristian Pallares 5745189777a2SCristian Pallares /* very simple arg parsing; don't want to rely on getopt 5746189777a2SCristian Pallares * also, copy all non cwrapper options to newargz, except 5747189777a2SCristian Pallares * argz[0], which is handled differently 5748189777a2SCristian Pallares */ 5749189777a2SCristian Pallares newargc=0; 5750189777a2SCristian Pallares for (i = 1; i < argc; i++) 5751189777a2SCristian Pallares { 5752*b3fce824SCristian Pallarés if (STREQ (argv[i], dumpscript_opt)) 5753189777a2SCristian Pallares { 5754189777a2SCristian PallaresEOF 5755*b3fce824SCristian Pallarés case $host in 5756189777a2SCristian Pallares *mingw* | *cygwin* ) 5757189777a2SCristian Pallares # make stdout use "unix" line endings 5758189777a2SCristian Pallares echo " setmode(1,_O_BINARY);" 5759189777a2SCristian Pallares ;; 5760189777a2SCristian Pallares esac 5761189777a2SCristian Pallares 5762189777a2SCristian Pallares cat <<"EOF" 5763189777a2SCristian Pallares lt_dump_script (stdout); 5764189777a2SCristian Pallares return 0; 5765189777a2SCristian Pallares } 5766*b3fce824SCristian Pallarés if (STREQ (argv[i], debug_opt)) 5767189777a2SCristian Pallares { 5768189777a2SCristian Pallares lt_debug = 1; 5769189777a2SCristian Pallares continue; 5770189777a2SCristian Pallares } 5771*b3fce824SCristian Pallarés if (STREQ (argv[i], ltwrapper_option_prefix)) 5772189777a2SCristian Pallares { 5773189777a2SCristian Pallares /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 5774189777a2SCristian Pallares namespace, but it is not one of the ones we know about and 5775189777a2SCristian Pallares have already dealt with, above (inluding dump-script), then 5776189777a2SCristian Pallares report an error. Otherwise, targets might begin to believe 5777189777a2SCristian Pallares they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 5778189777a2SCristian Pallares namespace. The first time any user complains about this, we'll 5779189777a2SCristian Pallares need to make LTWRAPPER_OPTION_PREFIX a configure-time option 5780189777a2SCristian Pallares or a configure.ac-settable value. 5781189777a2SCristian Pallares */ 5782189777a2SCristian Pallares lt_fatal (__FILE__, __LINE__, 5783189777a2SCristian Pallares "unrecognized %s option: '%s'", 5784189777a2SCristian Pallares ltwrapper_option_prefix, argv[i]); 5785189777a2SCristian Pallares } 5786189777a2SCristian Pallares /* otherwise ... */ 5787189777a2SCristian Pallares newargz[++newargc] = xstrdup (argv[i]); 5788189777a2SCristian Pallares } 5789189777a2SCristian Pallares newargz[++newargc] = NULL; 5790189777a2SCristian Pallares 5791189777a2SCristian PallaresEOF 5792189777a2SCristian Pallares cat <<EOF 5793189777a2SCristian Pallares /* The GNU banner must be the first non-error debug message */ 5794*b3fce824SCristian Pallarés lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 5795189777a2SCristian PallaresEOF 5796189777a2SCristian Pallares cat <<"EOF" 5797189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 5798189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 5799189777a2SCristian Pallares 5800189777a2SCristian Pallares tmp_pathspec = find_executable (argv[0]); 5801189777a2SCristian Pallares if (tmp_pathspec == NULL) 5802189777a2SCristian Pallares lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 5803189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 5804189777a2SCristian Pallares "(main) found exe (before symlink chase) at: %s\n", 5805189777a2SCristian Pallares tmp_pathspec); 5806189777a2SCristian Pallares 5807189777a2SCristian Pallares actual_cwrapper_path = chase_symlinks (tmp_pathspec); 5808189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 5809189777a2SCristian Pallares "(main) found exe (after symlink chase) at: %s\n", 5810189777a2SCristian Pallares actual_cwrapper_path); 5811189777a2SCristian Pallares XFREE (tmp_pathspec); 5812189777a2SCristian Pallares 5813189777a2SCristian Pallares actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 5814189777a2SCristian Pallares strendzap (actual_cwrapper_path, actual_cwrapper_name); 5815189777a2SCristian Pallares 5816189777a2SCristian Pallares /* wrapper name transforms */ 5817189777a2SCristian Pallares strendzap (actual_cwrapper_name, ".exe"); 5818189777a2SCristian Pallares tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 5819189777a2SCristian Pallares XFREE (actual_cwrapper_name); 5820189777a2SCristian Pallares actual_cwrapper_name = tmp_pathspec; 5821189777a2SCristian Pallares tmp_pathspec = 0; 5822189777a2SCristian Pallares 5823189777a2SCristian Pallares /* target_name transforms -- use actual target program name; might have lt- prefix */ 5824189777a2SCristian Pallares target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 5825189777a2SCristian Pallares strendzap (target_name, ".exe"); 5826189777a2SCristian Pallares tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 5827189777a2SCristian Pallares XFREE (target_name); 5828189777a2SCristian Pallares target_name = tmp_pathspec; 5829189777a2SCristian Pallares tmp_pathspec = 0; 5830189777a2SCristian Pallares 5831189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 5832189777a2SCristian Pallares "(main) libtool target name: %s\n", 5833189777a2SCristian Pallares target_name); 5834189777a2SCristian PallaresEOF 5835189777a2SCristian Pallares 5836189777a2SCristian Pallares cat <<EOF 5837189777a2SCristian Pallares newargz[0] = 5838189777a2SCristian Pallares XMALLOC (char, (strlen (actual_cwrapper_path) + 5839189777a2SCristian Pallares strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 5840189777a2SCristian Pallares strcpy (newargz[0], actual_cwrapper_path); 5841189777a2SCristian Pallares strcat (newargz[0], "$objdir"); 5842189777a2SCristian Pallares strcat (newargz[0], "/"); 5843189777a2SCristian PallaresEOF 5844189777a2SCristian Pallares 5845189777a2SCristian Pallares cat <<"EOF" 5846189777a2SCristian Pallares /* stop here, and copy so we don't have to do this twice */ 5847189777a2SCristian Pallares tmp_pathspec = xstrdup (newargz[0]); 5848189777a2SCristian Pallares 5849189777a2SCristian Pallares /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 5850189777a2SCristian Pallares strcat (newargz[0], actual_cwrapper_name); 5851189777a2SCristian Pallares 5852189777a2SCristian Pallares /* DO want the lt- prefix here if it exists, so use target_name */ 5853189777a2SCristian Pallares lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 5854189777a2SCristian Pallares XFREE (tmp_pathspec); 5855189777a2SCristian Pallares tmp_pathspec = NULL; 5856189777a2SCristian PallaresEOF 5857189777a2SCristian Pallares 5858189777a2SCristian Pallares case $host_os in 5859189777a2SCristian Pallares mingw*) 5860189777a2SCristian Pallares cat <<"EOF" 5861189777a2SCristian Pallares { 5862189777a2SCristian Pallares char* p; 5863189777a2SCristian Pallares while ((p = strchr (newargz[0], '\\')) != NULL) 5864189777a2SCristian Pallares { 5865189777a2SCristian Pallares *p = '/'; 5866189777a2SCristian Pallares } 5867189777a2SCristian Pallares while ((p = strchr (lt_argv_zero, '\\')) != NULL) 5868189777a2SCristian Pallares { 5869189777a2SCristian Pallares *p = '/'; 5870189777a2SCristian Pallares } 5871189777a2SCristian Pallares } 5872189777a2SCristian PallaresEOF 5873189777a2SCristian Pallares ;; 5874189777a2SCristian Pallares esac 5875189777a2SCristian Pallares 5876189777a2SCristian Pallares cat <<"EOF" 5877189777a2SCristian Pallares XFREE (target_name); 5878189777a2SCristian Pallares XFREE (actual_cwrapper_path); 5879189777a2SCristian Pallares XFREE (actual_cwrapper_name); 5880189777a2SCristian Pallares 5881189777a2SCristian Pallares lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 5882189777a2SCristian Pallares lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 5883189777a2SCristian Pallares /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 5884189777a2SCristian Pallares be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 5885189777a2SCristian Pallares because on Windows, both *_VARNAMEs are PATH but uninstalled 5886189777a2SCristian Pallares libraries must come first. */ 5887189777a2SCristian Pallares lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 5888189777a2SCristian Pallares lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 5889189777a2SCristian Pallares 5890189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 5891189777a2SCristian Pallares nonnull (lt_argv_zero)); 5892189777a2SCristian Pallares for (i = 0; i < newargc; i++) 5893189777a2SCristian Pallares { 5894189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 5895189777a2SCristian Pallares i, nonnull (newargz[i])); 5896189777a2SCristian Pallares } 5897189777a2SCristian Pallares 5898189777a2SCristian PallaresEOF 5899189777a2SCristian Pallares 5900189777a2SCristian Pallares case $host_os in 5901189777a2SCristian Pallares mingw*) 5902189777a2SCristian Pallares cat <<"EOF" 5903189777a2SCristian Pallares /* execv doesn't actually work on mingw as expected on unix */ 5904189777a2SCristian Pallares newargz = prepare_spawn (newargz); 5905*b3fce824SCristian Pallarés rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 5906189777a2SCristian Pallares if (rval == -1) 5907189777a2SCristian Pallares { 5908189777a2SCristian Pallares /* failed to start process */ 5909189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 5910189777a2SCristian Pallares "(main) failed to launch target \"%s\": %s\n", 5911189777a2SCristian Pallares lt_argv_zero, nonnull (strerror (errno))); 5912189777a2SCristian Pallares return 127; 5913189777a2SCristian Pallares } 5914189777a2SCristian Pallares return rval; 5915189777a2SCristian PallaresEOF 5916189777a2SCristian Pallares ;; 5917189777a2SCristian Pallares *) 5918189777a2SCristian Pallares cat <<"EOF" 5919189777a2SCristian Pallares execv (lt_argv_zero, newargz); 5920189777a2SCristian Pallares return rval; /* =127, but avoids unused variable warning */ 5921189777a2SCristian PallaresEOF 5922189777a2SCristian Pallares ;; 5923189777a2SCristian Pallares esac 5924189777a2SCristian Pallares 5925189777a2SCristian Pallares cat <<"EOF" 5926189777a2SCristian Pallares} 5927189777a2SCristian Pallares 5928189777a2SCristian Pallaresvoid * 5929189777a2SCristian Pallaresxmalloc (size_t num) 5930189777a2SCristian Pallares{ 5931189777a2SCristian Pallares void *p = (void *) malloc (num); 5932189777a2SCristian Pallares if (!p) 5933189777a2SCristian Pallares lt_fatal (__FILE__, __LINE__, "memory exhausted"); 5934189777a2SCristian Pallares 5935189777a2SCristian Pallares return p; 5936189777a2SCristian Pallares} 5937189777a2SCristian Pallares 5938189777a2SCristian Pallareschar * 5939189777a2SCristian Pallaresxstrdup (const char *string) 5940189777a2SCristian Pallares{ 5941189777a2SCristian Pallares return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 5942189777a2SCristian Pallares string) : NULL; 5943189777a2SCristian Pallares} 5944189777a2SCristian Pallares 5945189777a2SCristian Pallaresconst char * 5946189777a2SCristian Pallaresbase_name (const char *name) 5947189777a2SCristian Pallares{ 5948189777a2SCristian Pallares const char *base; 5949189777a2SCristian Pallares 5950*b3fce824SCristian Pallarés#if defined HAVE_DOS_BASED_FILE_SYSTEM 5951189777a2SCristian Pallares /* Skip over the disk name in MSDOS pathnames. */ 5952189777a2SCristian Pallares if (isalpha ((unsigned char) name[0]) && name[1] == ':') 5953189777a2SCristian Pallares name += 2; 5954189777a2SCristian Pallares#endif 5955189777a2SCristian Pallares 5956189777a2SCristian Pallares for (base = name; *name; name++) 5957189777a2SCristian Pallares if (IS_DIR_SEPARATOR (*name)) 5958189777a2SCristian Pallares base = name + 1; 5959189777a2SCristian Pallares return base; 5960189777a2SCristian Pallares} 5961189777a2SCristian Pallares 5962189777a2SCristian Pallaresint 5963189777a2SCristian Pallarescheck_executable (const char *path) 5964189777a2SCristian Pallares{ 5965189777a2SCristian Pallares struct stat st; 5966189777a2SCristian Pallares 5967189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 5968189777a2SCristian Pallares nonempty (path)); 5969189777a2SCristian Pallares if ((!path) || (!*path)) 5970189777a2SCristian Pallares return 0; 5971189777a2SCristian Pallares 5972189777a2SCristian Pallares if ((stat (path, &st) >= 0) 5973189777a2SCristian Pallares && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 5974189777a2SCristian Pallares return 1; 5975189777a2SCristian Pallares else 5976189777a2SCristian Pallares return 0; 5977189777a2SCristian Pallares} 5978189777a2SCristian Pallares 5979189777a2SCristian Pallaresint 5980189777a2SCristian Pallaresmake_executable (const char *path) 5981189777a2SCristian Pallares{ 5982189777a2SCristian Pallares int rval = 0; 5983189777a2SCristian Pallares struct stat st; 5984189777a2SCristian Pallares 5985189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 5986189777a2SCristian Pallares nonempty (path)); 5987189777a2SCristian Pallares if ((!path) || (!*path)) 5988189777a2SCristian Pallares return 0; 5989189777a2SCristian Pallares 5990189777a2SCristian Pallares if (stat (path, &st) >= 0) 5991189777a2SCristian Pallares { 5992189777a2SCristian Pallares rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 5993189777a2SCristian Pallares } 5994189777a2SCristian Pallares return rval; 5995189777a2SCristian Pallares} 5996189777a2SCristian Pallares 5997189777a2SCristian Pallares/* Searches for the full path of the wrapper. Returns 5998189777a2SCristian Pallares newly allocated full path name if found, NULL otherwise 5999189777a2SCristian Pallares Does not chase symlinks, even on platforms that support them. 6000189777a2SCristian Pallares*/ 6001189777a2SCristian Pallareschar * 6002189777a2SCristian Pallaresfind_executable (const char *wrapper) 6003189777a2SCristian Pallares{ 6004189777a2SCristian Pallares int has_slash = 0; 6005189777a2SCristian Pallares const char *p; 6006189777a2SCristian Pallares const char *p_next; 6007189777a2SCristian Pallares /* static buffer for getcwd */ 6008189777a2SCristian Pallares char tmp[LT_PATHMAX + 1]; 6009*b3fce824SCristian Pallarés size_t tmp_len; 6010189777a2SCristian Pallares char *concat_name; 6011189777a2SCristian Pallares 6012189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6013189777a2SCristian Pallares nonempty (wrapper)); 6014189777a2SCristian Pallares 6015189777a2SCristian Pallares if ((wrapper == NULL) || (*wrapper == '\0')) 6016189777a2SCristian Pallares return NULL; 6017189777a2SCristian Pallares 6018189777a2SCristian Pallares /* Absolute path? */ 6019*b3fce824SCristian Pallarés#if defined HAVE_DOS_BASED_FILE_SYSTEM 6020189777a2SCristian Pallares if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6021189777a2SCristian Pallares { 6022189777a2SCristian Pallares concat_name = xstrdup (wrapper); 6023189777a2SCristian Pallares if (check_executable (concat_name)) 6024189777a2SCristian Pallares return concat_name; 6025189777a2SCristian Pallares XFREE (concat_name); 6026189777a2SCristian Pallares } 6027189777a2SCristian Pallares else 6028189777a2SCristian Pallares { 6029189777a2SCristian Pallares#endif 6030189777a2SCristian Pallares if (IS_DIR_SEPARATOR (wrapper[0])) 6031189777a2SCristian Pallares { 6032189777a2SCristian Pallares concat_name = xstrdup (wrapper); 6033189777a2SCristian Pallares if (check_executable (concat_name)) 6034189777a2SCristian Pallares return concat_name; 6035189777a2SCristian Pallares XFREE (concat_name); 6036189777a2SCristian Pallares } 6037*b3fce824SCristian Pallarés#if defined HAVE_DOS_BASED_FILE_SYSTEM 6038189777a2SCristian Pallares } 6039189777a2SCristian Pallares#endif 6040189777a2SCristian Pallares 6041189777a2SCristian Pallares for (p = wrapper; *p; p++) 6042189777a2SCristian Pallares if (*p == '/') 6043189777a2SCristian Pallares { 6044189777a2SCristian Pallares has_slash = 1; 6045189777a2SCristian Pallares break; 6046189777a2SCristian Pallares } 6047189777a2SCristian Pallares if (!has_slash) 6048189777a2SCristian Pallares { 6049189777a2SCristian Pallares /* no slashes; search PATH */ 6050189777a2SCristian Pallares const char *path = getenv ("PATH"); 6051189777a2SCristian Pallares if (path != NULL) 6052189777a2SCristian Pallares { 6053189777a2SCristian Pallares for (p = path; *p; p = p_next) 6054189777a2SCristian Pallares { 6055189777a2SCristian Pallares const char *q; 6056189777a2SCristian Pallares size_t p_len; 6057189777a2SCristian Pallares for (q = p; *q; q++) 6058189777a2SCristian Pallares if (IS_PATH_SEPARATOR (*q)) 6059189777a2SCristian Pallares break; 6060*b3fce824SCristian Pallarés p_len = (size_t) (q - p); 6061189777a2SCristian Pallares p_next = (*q == '\0' ? q : q + 1); 6062189777a2SCristian Pallares if (p_len == 0) 6063189777a2SCristian Pallares { 6064189777a2SCristian Pallares /* empty path: current directory */ 6065189777a2SCristian Pallares if (getcwd (tmp, LT_PATHMAX) == NULL) 6066189777a2SCristian Pallares lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6067189777a2SCristian Pallares nonnull (strerror (errno))); 6068189777a2SCristian Pallares tmp_len = strlen (tmp); 6069189777a2SCristian Pallares concat_name = 6070189777a2SCristian Pallares XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6071189777a2SCristian Pallares memcpy (concat_name, tmp, tmp_len); 6072189777a2SCristian Pallares concat_name[tmp_len] = '/'; 6073189777a2SCristian Pallares strcpy (concat_name + tmp_len + 1, wrapper); 6074189777a2SCristian Pallares } 6075189777a2SCristian Pallares else 6076189777a2SCristian Pallares { 6077189777a2SCristian Pallares concat_name = 6078189777a2SCristian Pallares XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6079189777a2SCristian Pallares memcpy (concat_name, p, p_len); 6080189777a2SCristian Pallares concat_name[p_len] = '/'; 6081189777a2SCristian Pallares strcpy (concat_name + p_len + 1, wrapper); 6082189777a2SCristian Pallares } 6083189777a2SCristian Pallares if (check_executable (concat_name)) 6084189777a2SCristian Pallares return concat_name; 6085189777a2SCristian Pallares XFREE (concat_name); 6086189777a2SCristian Pallares } 6087189777a2SCristian Pallares } 6088189777a2SCristian Pallares /* not found in PATH; assume curdir */ 6089189777a2SCristian Pallares } 6090189777a2SCristian Pallares /* Relative path | not found in path: prepend cwd */ 6091189777a2SCristian Pallares if (getcwd (tmp, LT_PATHMAX) == NULL) 6092189777a2SCristian Pallares lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6093189777a2SCristian Pallares nonnull (strerror (errno))); 6094189777a2SCristian Pallares tmp_len = strlen (tmp); 6095189777a2SCristian Pallares concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6096189777a2SCristian Pallares memcpy (concat_name, tmp, tmp_len); 6097189777a2SCristian Pallares concat_name[tmp_len] = '/'; 6098189777a2SCristian Pallares strcpy (concat_name + tmp_len + 1, wrapper); 6099189777a2SCristian Pallares 6100189777a2SCristian Pallares if (check_executable (concat_name)) 6101189777a2SCristian Pallares return concat_name; 6102189777a2SCristian Pallares XFREE (concat_name); 6103189777a2SCristian Pallares return NULL; 6104189777a2SCristian Pallares} 6105189777a2SCristian Pallares 6106189777a2SCristian Pallareschar * 6107189777a2SCristian Pallareschase_symlinks (const char *pathspec) 6108189777a2SCristian Pallares{ 6109189777a2SCristian Pallares#ifndef S_ISLNK 6110189777a2SCristian Pallares return xstrdup (pathspec); 6111189777a2SCristian Pallares#else 6112189777a2SCristian Pallares char buf[LT_PATHMAX]; 6113189777a2SCristian Pallares struct stat s; 6114189777a2SCristian Pallares char *tmp_pathspec = xstrdup (pathspec); 6115189777a2SCristian Pallares char *p; 6116189777a2SCristian Pallares int has_symlinks = 0; 6117189777a2SCristian Pallares while (strlen (tmp_pathspec) && !has_symlinks) 6118189777a2SCristian Pallares { 6119189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 6120189777a2SCristian Pallares "checking path component for symlinks: %s\n", 6121189777a2SCristian Pallares tmp_pathspec); 6122189777a2SCristian Pallares if (lstat (tmp_pathspec, &s) == 0) 6123189777a2SCristian Pallares { 6124189777a2SCristian Pallares if (S_ISLNK (s.st_mode) != 0) 6125189777a2SCristian Pallares { 6126189777a2SCristian Pallares has_symlinks = 1; 6127189777a2SCristian Pallares break; 6128189777a2SCristian Pallares } 6129189777a2SCristian Pallares 6130189777a2SCristian Pallares /* search backwards for last DIR_SEPARATOR */ 6131189777a2SCristian Pallares p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6132189777a2SCristian Pallares while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6133189777a2SCristian Pallares p--; 6134189777a2SCristian Pallares if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6135189777a2SCristian Pallares { 6136189777a2SCristian Pallares /* no more DIR_SEPARATORS left */ 6137189777a2SCristian Pallares break; 6138189777a2SCristian Pallares } 6139189777a2SCristian Pallares *p = '\0'; 6140189777a2SCristian Pallares } 6141189777a2SCristian Pallares else 6142189777a2SCristian Pallares { 6143189777a2SCristian Pallares lt_fatal (__FILE__, __LINE__, 6144189777a2SCristian Pallares "error accessing file \"%s\": %s", 6145189777a2SCristian Pallares tmp_pathspec, nonnull (strerror (errno))); 6146189777a2SCristian Pallares } 6147189777a2SCristian Pallares } 6148189777a2SCristian Pallares XFREE (tmp_pathspec); 6149189777a2SCristian Pallares 6150189777a2SCristian Pallares if (!has_symlinks) 6151189777a2SCristian Pallares { 6152189777a2SCristian Pallares return xstrdup (pathspec); 6153189777a2SCristian Pallares } 6154189777a2SCristian Pallares 6155189777a2SCristian Pallares tmp_pathspec = realpath (pathspec, buf); 6156189777a2SCristian Pallares if (tmp_pathspec == 0) 6157189777a2SCristian Pallares { 6158189777a2SCristian Pallares lt_fatal (__FILE__, __LINE__, 6159189777a2SCristian Pallares "could not follow symlinks for %s", pathspec); 6160189777a2SCristian Pallares } 6161189777a2SCristian Pallares return xstrdup (tmp_pathspec); 6162189777a2SCristian Pallares#endif 6163189777a2SCristian Pallares} 6164189777a2SCristian Pallares 6165189777a2SCristian Pallareschar * 6166189777a2SCristian Pallaresstrendzap (char *str, const char *pat) 6167189777a2SCristian Pallares{ 6168189777a2SCristian Pallares size_t len, patlen; 6169189777a2SCristian Pallares 6170189777a2SCristian Pallares assert (str != NULL); 6171189777a2SCristian Pallares assert (pat != NULL); 6172189777a2SCristian Pallares 6173189777a2SCristian Pallares len = strlen (str); 6174189777a2SCristian Pallares patlen = strlen (pat); 6175189777a2SCristian Pallares 6176189777a2SCristian Pallares if (patlen <= len) 6177189777a2SCristian Pallares { 6178189777a2SCristian Pallares str += len - patlen; 6179*b3fce824SCristian Pallarés if (STREQ (str, pat)) 6180189777a2SCristian Pallares *str = '\0'; 6181189777a2SCristian Pallares } 6182189777a2SCristian Pallares return str; 6183189777a2SCristian Pallares} 6184189777a2SCristian Pallares 6185189777a2SCristian Pallaresvoid 6186189777a2SCristian Pallareslt_debugprintf (const char *file, int line, const char *fmt, ...) 6187189777a2SCristian Pallares{ 6188189777a2SCristian Pallares va_list args; 6189189777a2SCristian Pallares if (lt_debug) 6190189777a2SCristian Pallares { 6191189777a2SCristian Pallares (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6192189777a2SCristian Pallares va_start (args, fmt); 6193189777a2SCristian Pallares (void) vfprintf (stderr, fmt, args); 6194189777a2SCristian Pallares va_end (args); 6195189777a2SCristian Pallares } 6196189777a2SCristian Pallares} 6197189777a2SCristian Pallares 6198189777a2SCristian Pallaresstatic void 6199189777a2SCristian Pallareslt_error_core (int exit_status, const char *file, 6200189777a2SCristian Pallares int line, const char *mode, 6201189777a2SCristian Pallares const char *message, va_list ap) 6202189777a2SCristian Pallares{ 6203189777a2SCristian Pallares fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6204189777a2SCristian Pallares vfprintf (stderr, message, ap); 6205189777a2SCristian Pallares fprintf (stderr, ".\n"); 6206189777a2SCristian Pallares 6207189777a2SCristian Pallares if (exit_status >= 0) 6208189777a2SCristian Pallares exit (exit_status); 6209189777a2SCristian Pallares} 6210189777a2SCristian Pallares 6211189777a2SCristian Pallaresvoid 6212189777a2SCristian Pallareslt_fatal (const char *file, int line, const char *message, ...) 6213189777a2SCristian Pallares{ 6214189777a2SCristian Pallares va_list ap; 6215189777a2SCristian Pallares va_start (ap, message); 6216189777a2SCristian Pallares lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6217189777a2SCristian Pallares va_end (ap); 6218189777a2SCristian Pallares} 6219189777a2SCristian Pallares 6220189777a2SCristian Pallaresstatic const char * 6221189777a2SCristian Pallaresnonnull (const char *s) 6222189777a2SCristian Pallares{ 6223189777a2SCristian Pallares return s ? s : "(null)"; 6224189777a2SCristian Pallares} 6225189777a2SCristian Pallares 6226189777a2SCristian Pallaresstatic const char * 6227189777a2SCristian Pallaresnonempty (const char *s) 6228189777a2SCristian Pallares{ 6229189777a2SCristian Pallares return (s && !*s) ? "(empty)" : nonnull (s); 6230189777a2SCristian Pallares} 6231189777a2SCristian Pallares 6232189777a2SCristian Pallaresvoid 6233189777a2SCristian Pallareslt_setenv (const char *name, const char *value) 6234189777a2SCristian Pallares{ 6235189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 6236189777a2SCristian Pallares "(lt_setenv) setting '%s' to '%s'\n", 6237189777a2SCristian Pallares nonnull (name), nonnull (value)); 6238189777a2SCristian Pallares { 6239189777a2SCristian Pallares#ifdef HAVE_SETENV 6240189777a2SCristian Pallares /* always make a copy, for consistency with !HAVE_SETENV */ 6241189777a2SCristian Pallares char *str = xstrdup (value); 6242189777a2SCristian Pallares setenv (name, str, 1); 6243189777a2SCristian Pallares#else 6244*b3fce824SCristian Pallarés size_t len = strlen (name) + 1 + strlen (value) + 1; 6245189777a2SCristian Pallares char *str = XMALLOC (char, len); 6246189777a2SCristian Pallares sprintf (str, "%s=%s", name, value); 6247189777a2SCristian Pallares if (putenv (str) != EXIT_SUCCESS) 6248189777a2SCristian Pallares { 6249189777a2SCristian Pallares XFREE (str); 6250189777a2SCristian Pallares } 6251189777a2SCristian Pallares#endif 6252189777a2SCristian Pallares } 6253189777a2SCristian Pallares} 6254189777a2SCristian Pallares 6255189777a2SCristian Pallareschar * 6256189777a2SCristian Pallareslt_extend_str (const char *orig_value, const char *add, int to_end) 6257189777a2SCristian Pallares{ 6258189777a2SCristian Pallares char *new_value; 6259189777a2SCristian Pallares if (orig_value && *orig_value) 6260189777a2SCristian Pallares { 6261*b3fce824SCristian Pallarés size_t orig_value_len = strlen (orig_value); 6262*b3fce824SCristian Pallarés size_t add_len = strlen (add); 6263189777a2SCristian Pallares new_value = XMALLOC (char, add_len + orig_value_len + 1); 6264189777a2SCristian Pallares if (to_end) 6265189777a2SCristian Pallares { 6266189777a2SCristian Pallares strcpy (new_value, orig_value); 6267189777a2SCristian Pallares strcpy (new_value + orig_value_len, add); 6268189777a2SCristian Pallares } 6269189777a2SCristian Pallares else 6270189777a2SCristian Pallares { 6271189777a2SCristian Pallares strcpy (new_value, add); 6272189777a2SCristian Pallares strcpy (new_value + add_len, orig_value); 6273189777a2SCristian Pallares } 6274189777a2SCristian Pallares } 6275189777a2SCristian Pallares else 6276189777a2SCristian Pallares { 6277189777a2SCristian Pallares new_value = xstrdup (add); 6278189777a2SCristian Pallares } 6279189777a2SCristian Pallares return new_value; 6280189777a2SCristian Pallares} 6281189777a2SCristian Pallares 6282189777a2SCristian Pallaresvoid 6283189777a2SCristian Pallareslt_update_exe_path (const char *name, const char *value) 6284189777a2SCristian Pallares{ 6285189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 6286189777a2SCristian Pallares "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6287189777a2SCristian Pallares nonnull (name), nonnull (value)); 6288189777a2SCristian Pallares 6289189777a2SCristian Pallares if (name && *name && value && *value) 6290189777a2SCristian Pallares { 6291189777a2SCristian Pallares char *new_value = lt_extend_str (getenv (name), value, 0); 6292189777a2SCristian Pallares /* some systems can't cope with a ':'-terminated path #' */ 6293*b3fce824SCristian Pallarés size_t len = strlen (new_value); 6294*b3fce824SCristian Pallarés while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6295189777a2SCristian Pallares { 6296*b3fce824SCristian Pallarés new_value[--len] = '\0'; 6297189777a2SCristian Pallares } 6298189777a2SCristian Pallares lt_setenv (name, new_value); 6299189777a2SCristian Pallares XFREE (new_value); 6300189777a2SCristian Pallares } 6301189777a2SCristian Pallares} 6302189777a2SCristian Pallares 6303189777a2SCristian Pallaresvoid 6304189777a2SCristian Pallareslt_update_lib_path (const char *name, const char *value) 6305189777a2SCristian Pallares{ 6306189777a2SCristian Pallares lt_debugprintf (__FILE__, __LINE__, 6307189777a2SCristian Pallares "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6308189777a2SCristian Pallares nonnull (name), nonnull (value)); 6309189777a2SCristian Pallares 6310189777a2SCristian Pallares if (name && *name && value && *value) 6311189777a2SCristian Pallares { 6312189777a2SCristian Pallares char *new_value = lt_extend_str (getenv (name), value, 0); 6313189777a2SCristian Pallares lt_setenv (name, new_value); 6314189777a2SCristian Pallares XFREE (new_value); 6315189777a2SCristian Pallares } 6316189777a2SCristian Pallares} 6317189777a2SCristian Pallares 6318189777a2SCristian PallaresEOF 6319189777a2SCristian Pallares case $host_os in 6320189777a2SCristian Pallares mingw*) 6321189777a2SCristian Pallares cat <<"EOF" 6322189777a2SCristian Pallares 6323189777a2SCristian Pallares/* Prepares an argument vector before calling spawn(). 6324189777a2SCristian Pallares Note that spawn() does not by itself call the command interpreter 6325189777a2SCristian Pallares (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6326189777a2SCristian Pallares ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6327189777a2SCristian Pallares GetVersionEx(&v); 6328189777a2SCristian Pallares v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6329189777a2SCristian Pallares }) ? "cmd.exe" : "command.com"). 6330189777a2SCristian Pallares Instead it simply concatenates the arguments, separated by ' ', and calls 6331189777a2SCristian Pallares CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6332189777a2SCristian Pallares interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6333189777a2SCristian Pallares special way: 6334189777a2SCristian Pallares - Space and tab are interpreted as delimiters. They are not treated as 6335189777a2SCristian Pallares delimiters if they are surrounded by double quotes: "...". 6336189777a2SCristian Pallares - Unescaped double quotes are removed from the input. Their only effect is 6337189777a2SCristian Pallares that within double quotes, space and tab are treated like normal 6338189777a2SCristian Pallares characters. 6339189777a2SCristian Pallares - Backslashes not followed by double quotes are not special. 6340189777a2SCristian Pallares - But 2*n+1 backslashes followed by a double quote become 6341189777a2SCristian Pallares n backslashes followed by a double quote (n >= 0): 6342189777a2SCristian Pallares \" -> " 6343189777a2SCristian Pallares \\\" -> \" 6344189777a2SCristian Pallares \\\\\" -> \\" 6345189777a2SCristian Pallares */ 6346189777a2SCristian Pallares#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" 6347189777a2SCristian Pallares#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" 6348189777a2SCristian Pallareschar ** 6349189777a2SCristian Pallaresprepare_spawn (char **argv) 6350189777a2SCristian Pallares{ 6351189777a2SCristian Pallares size_t argc; 6352189777a2SCristian Pallares char **new_argv; 6353189777a2SCristian Pallares size_t i; 6354189777a2SCristian Pallares 6355189777a2SCristian Pallares /* Count number of arguments. */ 6356189777a2SCristian Pallares for (argc = 0; argv[argc] != NULL; argc++) 6357189777a2SCristian Pallares ; 6358189777a2SCristian Pallares 6359189777a2SCristian Pallares /* Allocate new argument vector. */ 6360189777a2SCristian Pallares new_argv = XMALLOC (char *, argc + 1); 6361189777a2SCristian Pallares 6362189777a2SCristian Pallares /* Put quoted arguments into the new argument vector. */ 6363189777a2SCristian Pallares for (i = 0; i < argc; i++) 6364189777a2SCristian Pallares { 6365189777a2SCristian Pallares const char *string = argv[i]; 6366189777a2SCristian Pallares 6367189777a2SCristian Pallares if (string[0] == '\0') 6368189777a2SCristian Pallares new_argv[i] = xstrdup ("\"\""); 6369189777a2SCristian Pallares else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6370189777a2SCristian Pallares { 6371189777a2SCristian Pallares int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6372189777a2SCristian Pallares size_t length; 6373189777a2SCristian Pallares unsigned int backslashes; 6374189777a2SCristian Pallares const char *s; 6375189777a2SCristian Pallares char *quoted_string; 6376189777a2SCristian Pallares char *p; 6377189777a2SCristian Pallares 6378189777a2SCristian Pallares length = 0; 6379189777a2SCristian Pallares backslashes = 0; 6380189777a2SCristian Pallares if (quote_around) 6381189777a2SCristian Pallares length++; 6382189777a2SCristian Pallares for (s = string; *s != '\0'; s++) 6383189777a2SCristian Pallares { 6384189777a2SCristian Pallares char c = *s; 6385189777a2SCristian Pallares if (c == '"') 6386189777a2SCristian Pallares length += backslashes + 1; 6387189777a2SCristian Pallares length++; 6388189777a2SCristian Pallares if (c == '\\') 6389189777a2SCristian Pallares backslashes++; 6390189777a2SCristian Pallares else 6391189777a2SCristian Pallares backslashes = 0; 6392189777a2SCristian Pallares } 6393189777a2SCristian Pallares if (quote_around) 6394189777a2SCristian Pallares length += backslashes + 1; 6395189777a2SCristian Pallares 6396189777a2SCristian Pallares quoted_string = XMALLOC (char, length + 1); 6397189777a2SCristian Pallares 6398189777a2SCristian Pallares p = quoted_string; 6399189777a2SCristian Pallares backslashes = 0; 6400189777a2SCristian Pallares if (quote_around) 6401189777a2SCristian Pallares *p++ = '"'; 6402189777a2SCristian Pallares for (s = string; *s != '\0'; s++) 6403189777a2SCristian Pallares { 6404189777a2SCristian Pallares char c = *s; 6405189777a2SCristian Pallares if (c == '"') 6406189777a2SCristian Pallares { 6407189777a2SCristian Pallares unsigned int j; 6408189777a2SCristian Pallares for (j = backslashes + 1; j > 0; j--) 6409189777a2SCristian Pallares *p++ = '\\'; 6410189777a2SCristian Pallares } 6411189777a2SCristian Pallares *p++ = c; 6412189777a2SCristian Pallares if (c == '\\') 6413189777a2SCristian Pallares backslashes++; 6414189777a2SCristian Pallares else 6415189777a2SCristian Pallares backslashes = 0; 6416189777a2SCristian Pallares } 6417189777a2SCristian Pallares if (quote_around) 6418189777a2SCristian Pallares { 6419189777a2SCristian Pallares unsigned int j; 6420189777a2SCristian Pallares for (j = backslashes; j > 0; j--) 6421189777a2SCristian Pallares *p++ = '\\'; 6422189777a2SCristian Pallares *p++ = '"'; 6423189777a2SCristian Pallares } 6424189777a2SCristian Pallares *p = '\0'; 6425189777a2SCristian Pallares 6426189777a2SCristian Pallares new_argv[i] = quoted_string; 6427189777a2SCristian Pallares } 6428189777a2SCristian Pallares else 6429189777a2SCristian Pallares new_argv[i] = (char *) string; 6430189777a2SCristian Pallares } 6431189777a2SCristian Pallares new_argv[argc] = NULL; 6432189777a2SCristian Pallares 6433189777a2SCristian Pallares return new_argv; 6434189777a2SCristian Pallares} 6435189777a2SCristian PallaresEOF 6436189777a2SCristian Pallares ;; 6437189777a2SCristian Pallares esac 6438189777a2SCristian Pallares 6439189777a2SCristian Pallares cat <<"EOF" 6440189777a2SCristian Pallaresvoid lt_dump_script (FILE* f) 6441189777a2SCristian Pallares{ 6442189777a2SCristian PallaresEOF 6443189777a2SCristian Pallares func_emit_wrapper yes | 6444189777a2SCristian Pallares $SED -n -e ' 6445189777a2SCristian Pallaress/^\(.\{79\}\)\(..*\)/\1\ 6446189777a2SCristian Pallares\2/ 6447189777a2SCristian Pallaresh 6448189777a2SCristian Pallaress/\([\\"]\)/\\\1/g 6449189777a2SCristian Pallaress/$/\\n/ 6450189777a2SCristian Pallaress/\([^\n]*\).*/ fputs ("\1", f);/p 6451189777a2SCristian Pallaresg 6452189777a2SCristian PallaresD' 6453189777a2SCristian Pallares cat <<"EOF" 6454189777a2SCristian Pallares} 6455189777a2SCristian PallaresEOF 6456189777a2SCristian Pallares} 6457189777a2SCristian Pallares# end: func_emit_cwrapperexe_src 6458189777a2SCristian Pallares 6459189777a2SCristian Pallares# func_win32_import_lib_p ARG 6460189777a2SCristian Pallares# True if ARG is an import lib, as indicated by $file_magic_cmd 6461189777a2SCristian Pallaresfunc_win32_import_lib_p () 6462189777a2SCristian Pallares{ 6463*b3fce824SCristian Pallarés $debug_cmd 6464*b3fce824SCristian Pallarés 6465189777a2SCristian Pallares case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6466189777a2SCristian Pallares *import*) : ;; 6467189777a2SCristian Pallares *) false ;; 6468189777a2SCristian Pallares esac 6469189777a2SCristian Pallares} 6470189777a2SCristian Pallares 6471*b3fce824SCristian Pallarés# func_suncc_cstd_abi 6472*b3fce824SCristian Pallarés# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6473*b3fce824SCristian Pallarés# Several compiler flags select an ABI that is incompatible with the 6474*b3fce824SCristian Pallarés# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6475*b3fce824SCristian Pallarésfunc_suncc_cstd_abi () 6476*b3fce824SCristian Pallarés{ 6477*b3fce824SCristian Pallarés $debug_cmd 6478*b3fce824SCristian Pallarés 6479*b3fce824SCristian Pallarés case " $compile_command " in 6480*b3fce824SCristian Pallarés *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6481*b3fce824SCristian Pallarés suncc_use_cstd_abi=no 6482*b3fce824SCristian Pallarés ;; 6483*b3fce824SCristian Pallarés *) 6484*b3fce824SCristian Pallarés suncc_use_cstd_abi=yes 6485*b3fce824SCristian Pallarés ;; 6486*b3fce824SCristian Pallarés esac 6487*b3fce824SCristian Pallarés} 6488*b3fce824SCristian Pallarés 6489189777a2SCristian Pallares# func_mode_link arg... 6490189777a2SCristian Pallaresfunc_mode_link () 6491189777a2SCristian Pallares{ 6492*b3fce824SCristian Pallarés $debug_cmd 6493*b3fce824SCristian Pallarés 6494189777a2SCristian Pallares case $host in 6495189777a2SCristian Pallares *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6496189777a2SCristian Pallares # It is impossible to link a dll without this setting, and 6497189777a2SCristian Pallares # we shouldn't force the makefile maintainer to figure out 6498*b3fce824SCristian Pallarés # what system we are compiling for in order to pass an extra 6499189777a2SCristian Pallares # flag for every libtool invocation. 6500189777a2SCristian Pallares # allow_undefined=no 6501189777a2SCristian Pallares 6502189777a2SCristian Pallares # FIXME: Unfortunately, there are problems with the above when trying 6503*b3fce824SCristian Pallarés # to make a dll that has undefined symbols, in which case not 6504189777a2SCristian Pallares # even a static library is built. For now, we need to specify 6505189777a2SCristian Pallares # -no-undefined on the libtool link line when we can be certain 6506189777a2SCristian Pallares # that all symbols are satisfied, otherwise we get a static library. 6507189777a2SCristian Pallares allow_undefined=yes 6508189777a2SCristian Pallares ;; 6509189777a2SCristian Pallares *) 6510189777a2SCristian Pallares allow_undefined=yes 6511189777a2SCristian Pallares ;; 6512189777a2SCristian Pallares esac 6513189777a2SCristian Pallares libtool_args=$nonopt 6514189777a2SCristian Pallares base_compile="$nonopt $@" 6515189777a2SCristian Pallares compile_command=$nonopt 6516189777a2SCristian Pallares finalize_command=$nonopt 6517189777a2SCristian Pallares 6518189777a2SCristian Pallares compile_rpath= 6519189777a2SCristian Pallares finalize_rpath= 6520189777a2SCristian Pallares compile_shlibpath= 6521189777a2SCristian Pallares finalize_shlibpath= 6522189777a2SCristian Pallares convenience= 6523189777a2SCristian Pallares old_convenience= 6524189777a2SCristian Pallares deplibs= 6525189777a2SCristian Pallares old_deplibs= 6526189777a2SCristian Pallares compiler_flags= 6527189777a2SCristian Pallares linker_flags= 6528189777a2SCristian Pallares dllsearchpath= 6529189777a2SCristian Pallares lib_search_path=`pwd` 6530189777a2SCristian Pallares inst_prefix_dir= 6531189777a2SCristian Pallares new_inherited_linker_flags= 6532189777a2SCristian Pallares 6533189777a2SCristian Pallares avoid_version=no 6534189777a2SCristian Pallares bindir= 6535189777a2SCristian Pallares dlfiles= 6536189777a2SCristian Pallares dlprefiles= 6537189777a2SCristian Pallares dlself=no 6538189777a2SCristian Pallares export_dynamic=no 6539189777a2SCristian Pallares export_symbols= 6540189777a2SCristian Pallares export_symbols_regex= 6541189777a2SCristian Pallares generated= 6542189777a2SCristian Pallares libobjs= 6543189777a2SCristian Pallares ltlibs= 6544189777a2SCristian Pallares module=no 6545189777a2SCristian Pallares no_install=no 6546189777a2SCristian Pallares objs= 6547*b3fce824SCristian Pallarés os2dllname= 6548189777a2SCristian Pallares non_pic_objects= 6549189777a2SCristian Pallares precious_files_regex= 6550189777a2SCristian Pallares prefer_static_libs=no 6551*b3fce824SCristian Pallarés preload=false 6552189777a2SCristian Pallares prev= 6553189777a2SCristian Pallares prevarg= 6554189777a2SCristian Pallares release= 6555189777a2SCristian Pallares rpath= 6556189777a2SCristian Pallares xrpath= 6557189777a2SCristian Pallares perm_rpath= 6558189777a2SCristian Pallares temp_rpath= 6559189777a2SCristian Pallares thread_safe=no 6560189777a2SCristian Pallares vinfo= 6561189777a2SCristian Pallares vinfo_number=no 6562189777a2SCristian Pallares weak_libs= 6563*b3fce824SCristian Pallarés single_module=$wl-single_module 6564189777a2SCristian Pallares func_infer_tag $base_compile 6565189777a2SCristian Pallares 6566189777a2SCristian Pallares # We need to know -static, to get the right output filenames. 6567189777a2SCristian Pallares for arg 6568189777a2SCristian Pallares do 6569189777a2SCristian Pallares case $arg in 6570189777a2SCristian Pallares -shared) 6571*b3fce824SCristian Pallarés test yes != "$build_libtool_libs" \ 6572*b3fce824SCristian Pallarés && func_fatal_configuration "cannot build a shared library" 6573189777a2SCristian Pallares build_old_libs=no 6574189777a2SCristian Pallares break 6575189777a2SCristian Pallares ;; 6576189777a2SCristian Pallares -all-static | -static | -static-libtool-libs) 6577189777a2SCristian Pallares case $arg in 6578189777a2SCristian Pallares -all-static) 6579*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6580189777a2SCristian Pallares func_warning "complete static linking is impossible in this configuration" 6581189777a2SCristian Pallares fi 6582189777a2SCristian Pallares if test -n "$link_static_flag"; then 6583189777a2SCristian Pallares dlopen_self=$dlopen_self_static 6584189777a2SCristian Pallares fi 6585189777a2SCristian Pallares prefer_static_libs=yes 6586189777a2SCristian Pallares ;; 6587189777a2SCristian Pallares -static) 6588189777a2SCristian Pallares if test -z "$pic_flag" && test -n "$link_static_flag"; then 6589189777a2SCristian Pallares dlopen_self=$dlopen_self_static 6590189777a2SCristian Pallares fi 6591189777a2SCristian Pallares prefer_static_libs=built 6592189777a2SCristian Pallares ;; 6593189777a2SCristian Pallares -static-libtool-libs) 6594189777a2SCristian Pallares if test -z "$pic_flag" && test -n "$link_static_flag"; then 6595189777a2SCristian Pallares dlopen_self=$dlopen_self_static 6596189777a2SCristian Pallares fi 6597189777a2SCristian Pallares prefer_static_libs=yes 6598189777a2SCristian Pallares ;; 6599189777a2SCristian Pallares esac 6600189777a2SCristian Pallares build_libtool_libs=no 6601189777a2SCristian Pallares build_old_libs=yes 6602189777a2SCristian Pallares break 6603189777a2SCristian Pallares ;; 6604189777a2SCristian Pallares esac 6605189777a2SCristian Pallares done 6606189777a2SCristian Pallares 6607189777a2SCristian Pallares # See if our shared archives depend on static archives. 6608189777a2SCristian Pallares test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6609189777a2SCristian Pallares 6610189777a2SCristian Pallares # Go through the arguments, transforming them on the way. 6611189777a2SCristian Pallares while test "$#" -gt 0; do 6612*b3fce824SCristian Pallarés arg=$1 6613189777a2SCristian Pallares shift 6614189777a2SCristian Pallares func_quote_for_eval "$arg" 6615189777a2SCristian Pallares qarg=$func_quote_for_eval_unquoted_result 6616189777a2SCristian Pallares func_append libtool_args " $func_quote_for_eval_result" 6617189777a2SCristian Pallares 6618189777a2SCristian Pallares # If the previous option needs an argument, assign it. 6619189777a2SCristian Pallares if test -n "$prev"; then 6620189777a2SCristian Pallares case $prev in 6621189777a2SCristian Pallares output) 6622189777a2SCristian Pallares func_append compile_command " @OUTPUT@" 6623189777a2SCristian Pallares func_append finalize_command " @OUTPUT@" 6624189777a2SCristian Pallares ;; 6625189777a2SCristian Pallares esac 6626189777a2SCristian Pallares 6627189777a2SCristian Pallares case $prev in 6628189777a2SCristian Pallares bindir) 6629*b3fce824SCristian Pallarés bindir=$arg 6630189777a2SCristian Pallares prev= 6631189777a2SCristian Pallares continue 6632189777a2SCristian Pallares ;; 6633189777a2SCristian Pallares dlfiles|dlprefiles) 6634*b3fce824SCristian Pallarés $preload || { 6635189777a2SCristian Pallares # Add the symbol object into the linking commands. 6636189777a2SCristian Pallares func_append compile_command " @SYMFILE@" 6637189777a2SCristian Pallares func_append finalize_command " @SYMFILE@" 6638*b3fce824SCristian Pallarés preload=: 6639*b3fce824SCristian Pallarés } 6640189777a2SCristian Pallares case $arg in 6641189777a2SCristian Pallares *.la | *.lo) ;; # We handle these cases below. 6642189777a2SCristian Pallares force) 6643*b3fce824SCristian Pallarés if test no = "$dlself"; then 6644189777a2SCristian Pallares dlself=needless 6645189777a2SCristian Pallares export_dynamic=yes 6646189777a2SCristian Pallares fi 6647189777a2SCristian Pallares prev= 6648189777a2SCristian Pallares continue 6649189777a2SCristian Pallares ;; 6650189777a2SCristian Pallares self) 6651*b3fce824SCristian Pallarés if test dlprefiles = "$prev"; then 6652189777a2SCristian Pallares dlself=yes 6653*b3fce824SCristian Pallarés elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6654189777a2SCristian Pallares dlself=yes 6655189777a2SCristian Pallares else 6656189777a2SCristian Pallares dlself=needless 6657189777a2SCristian Pallares export_dynamic=yes 6658189777a2SCristian Pallares fi 6659189777a2SCristian Pallares prev= 6660189777a2SCristian Pallares continue 6661189777a2SCristian Pallares ;; 6662189777a2SCristian Pallares *) 6663*b3fce824SCristian Pallarés if test dlfiles = "$prev"; then 6664189777a2SCristian Pallares func_append dlfiles " $arg" 6665189777a2SCristian Pallares else 6666189777a2SCristian Pallares func_append dlprefiles " $arg" 6667189777a2SCristian Pallares fi 6668189777a2SCristian Pallares prev= 6669189777a2SCristian Pallares continue 6670189777a2SCristian Pallares ;; 6671189777a2SCristian Pallares esac 6672189777a2SCristian Pallares ;; 6673189777a2SCristian Pallares expsyms) 6674*b3fce824SCristian Pallarés export_symbols=$arg 6675189777a2SCristian Pallares test -f "$arg" \ 6676*b3fce824SCristian Pallarés || func_fatal_error "symbol file '$arg' does not exist" 6677189777a2SCristian Pallares prev= 6678189777a2SCristian Pallares continue 6679189777a2SCristian Pallares ;; 6680189777a2SCristian Pallares expsyms_regex) 6681*b3fce824SCristian Pallarés export_symbols_regex=$arg 6682189777a2SCristian Pallares prev= 6683189777a2SCristian Pallares continue 6684189777a2SCristian Pallares ;; 6685189777a2SCristian Pallares framework) 6686189777a2SCristian Pallares case $host in 6687189777a2SCristian Pallares *-*-darwin*) 6688189777a2SCristian Pallares case "$deplibs " in 6689189777a2SCristian Pallares *" $qarg.ltframework "*) ;; 6690189777a2SCristian Pallares *) func_append deplibs " $qarg.ltframework" # this is fixed later 6691189777a2SCristian Pallares ;; 6692189777a2SCristian Pallares esac 6693189777a2SCristian Pallares ;; 6694189777a2SCristian Pallares esac 6695189777a2SCristian Pallares prev= 6696189777a2SCristian Pallares continue 6697189777a2SCristian Pallares ;; 6698189777a2SCristian Pallares inst_prefix) 6699*b3fce824SCristian Pallarés inst_prefix_dir=$arg 6700*b3fce824SCristian Pallarés prev= 6701*b3fce824SCristian Pallarés continue 6702*b3fce824SCristian Pallarés ;; 6703*b3fce824SCristian Pallarés mllvm) 6704*b3fce824SCristian Pallarés # Clang does not use LLVM to link, so we can simply discard any 6705*b3fce824SCristian Pallarés # '-mllvm $arg' options when doing the link step. 6706189777a2SCristian Pallares prev= 6707189777a2SCristian Pallares continue 6708189777a2SCristian Pallares ;; 6709189777a2SCristian Pallares objectlist) 6710189777a2SCristian Pallares if test -f "$arg"; then 6711189777a2SCristian Pallares save_arg=$arg 6712189777a2SCristian Pallares moreargs= 6713189777a2SCristian Pallares for fil in `cat "$save_arg"` 6714189777a2SCristian Pallares do 6715189777a2SCristian Pallares# func_append moreargs " $fil" 6716189777a2SCristian Pallares arg=$fil 6717189777a2SCristian Pallares # A libtool-controlled object. 6718189777a2SCristian Pallares 6719189777a2SCristian Pallares # Check to see that this really is a libtool object. 6720189777a2SCristian Pallares if func_lalib_unsafe_p "$arg"; then 6721189777a2SCristian Pallares pic_object= 6722189777a2SCristian Pallares non_pic_object= 6723189777a2SCristian Pallares 6724189777a2SCristian Pallares # Read the .lo file 6725189777a2SCristian Pallares func_source "$arg" 6726189777a2SCristian Pallares 6727189777a2SCristian Pallares if test -z "$pic_object" || 6728189777a2SCristian Pallares test -z "$non_pic_object" || 6729*b3fce824SCristian Pallarés test none = "$pic_object" && 6730*b3fce824SCristian Pallarés test none = "$non_pic_object"; then 6731*b3fce824SCristian Pallarés func_fatal_error "cannot find name of object for '$arg'" 6732189777a2SCristian Pallares fi 6733189777a2SCristian Pallares 6734189777a2SCristian Pallares # Extract subdirectory from the argument. 6735189777a2SCristian Pallares func_dirname "$arg" "/" "" 6736*b3fce824SCristian Pallarés xdir=$func_dirname_result 6737189777a2SCristian Pallares 6738*b3fce824SCristian Pallarés if test none != "$pic_object"; then 6739189777a2SCristian Pallares # Prepend the subdirectory the object is found in. 6740*b3fce824SCristian Pallarés pic_object=$xdir$pic_object 6741189777a2SCristian Pallares 6742*b3fce824SCristian Pallarés if test dlfiles = "$prev"; then 6743*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 6744189777a2SCristian Pallares func_append dlfiles " $pic_object" 6745189777a2SCristian Pallares prev= 6746189777a2SCristian Pallares continue 6747189777a2SCristian Pallares else 6748189777a2SCristian Pallares # If libtool objects are unsupported, then we need to preload. 6749189777a2SCristian Pallares prev=dlprefiles 6750189777a2SCristian Pallares fi 6751189777a2SCristian Pallares fi 6752189777a2SCristian Pallares 6753189777a2SCristian Pallares # CHECK ME: I think I busted this. -Ossama 6754*b3fce824SCristian Pallarés if test dlprefiles = "$prev"; then 6755189777a2SCristian Pallares # Preload the old-style object. 6756189777a2SCristian Pallares func_append dlprefiles " $pic_object" 6757189777a2SCristian Pallares prev= 6758189777a2SCristian Pallares fi 6759189777a2SCristian Pallares 6760189777a2SCristian Pallares # A PIC object. 6761189777a2SCristian Pallares func_append libobjs " $pic_object" 6762*b3fce824SCristian Pallarés arg=$pic_object 6763189777a2SCristian Pallares fi 6764189777a2SCristian Pallares 6765189777a2SCristian Pallares # Non-PIC object. 6766*b3fce824SCristian Pallarés if test none != "$non_pic_object"; then 6767189777a2SCristian Pallares # Prepend the subdirectory the object is found in. 6768*b3fce824SCristian Pallarés non_pic_object=$xdir$non_pic_object 6769189777a2SCristian Pallares 6770189777a2SCristian Pallares # A standard non-PIC object 6771189777a2SCristian Pallares func_append non_pic_objects " $non_pic_object" 6772*b3fce824SCristian Pallarés if test -z "$pic_object" || test none = "$pic_object"; then 6773*b3fce824SCristian Pallarés arg=$non_pic_object 6774189777a2SCristian Pallares fi 6775189777a2SCristian Pallares else 6776189777a2SCristian Pallares # If the PIC object exists, use it instead. 6777189777a2SCristian Pallares # $xdir was prepended to $pic_object above. 6778*b3fce824SCristian Pallarés non_pic_object=$pic_object 6779189777a2SCristian Pallares func_append non_pic_objects " $non_pic_object" 6780189777a2SCristian Pallares fi 6781189777a2SCristian Pallares else 6782189777a2SCristian Pallares # Only an error if not doing a dry-run. 6783189777a2SCristian Pallares if $opt_dry_run; then 6784189777a2SCristian Pallares # Extract subdirectory from the argument. 6785189777a2SCristian Pallares func_dirname "$arg" "/" "" 6786*b3fce824SCristian Pallarés xdir=$func_dirname_result 6787189777a2SCristian Pallares 6788189777a2SCristian Pallares func_lo2o "$arg" 6789189777a2SCristian Pallares pic_object=$xdir$objdir/$func_lo2o_result 6790189777a2SCristian Pallares non_pic_object=$xdir$func_lo2o_result 6791189777a2SCristian Pallares func_append libobjs " $pic_object" 6792189777a2SCristian Pallares func_append non_pic_objects " $non_pic_object" 6793189777a2SCristian Pallares else 6794*b3fce824SCristian Pallarés func_fatal_error "'$arg' is not a valid libtool object" 6795189777a2SCristian Pallares fi 6796189777a2SCristian Pallares fi 6797189777a2SCristian Pallares done 6798189777a2SCristian Pallares else 6799*b3fce824SCristian Pallarés func_fatal_error "link input file '$arg' does not exist" 6800189777a2SCristian Pallares fi 6801189777a2SCristian Pallares arg=$save_arg 6802189777a2SCristian Pallares prev= 6803189777a2SCristian Pallares continue 6804189777a2SCristian Pallares ;; 6805*b3fce824SCristian Pallarés os2dllname) 6806*b3fce824SCristian Pallarés os2dllname=$arg 6807*b3fce824SCristian Pallarés prev= 6808*b3fce824SCristian Pallarés continue 6809*b3fce824SCristian Pallarés ;; 6810189777a2SCristian Pallares precious_regex) 6811*b3fce824SCristian Pallarés precious_files_regex=$arg 6812189777a2SCristian Pallares prev= 6813189777a2SCristian Pallares continue 6814189777a2SCristian Pallares ;; 6815189777a2SCristian Pallares release) 6816*b3fce824SCristian Pallarés release=-$arg 6817189777a2SCristian Pallares prev= 6818189777a2SCristian Pallares continue 6819189777a2SCristian Pallares ;; 6820189777a2SCristian Pallares rpath | xrpath) 6821189777a2SCristian Pallares # We need an absolute path. 6822189777a2SCristian Pallares case $arg in 6823189777a2SCristian Pallares [\\/]* | [A-Za-z]:[\\/]*) ;; 6824189777a2SCristian Pallares *) 6825189777a2SCristian Pallares func_fatal_error "only absolute run-paths are allowed" 6826189777a2SCristian Pallares ;; 6827189777a2SCristian Pallares esac 6828*b3fce824SCristian Pallarés if test rpath = "$prev"; then 6829189777a2SCristian Pallares case "$rpath " in 6830189777a2SCristian Pallares *" $arg "*) ;; 6831189777a2SCristian Pallares *) func_append rpath " $arg" ;; 6832189777a2SCristian Pallares esac 6833189777a2SCristian Pallares else 6834189777a2SCristian Pallares case "$xrpath " in 6835189777a2SCristian Pallares *" $arg "*) ;; 6836189777a2SCristian Pallares *) func_append xrpath " $arg" ;; 6837189777a2SCristian Pallares esac 6838189777a2SCristian Pallares fi 6839189777a2SCristian Pallares prev= 6840189777a2SCristian Pallares continue 6841189777a2SCristian Pallares ;; 6842189777a2SCristian Pallares shrext) 6843*b3fce824SCristian Pallarés shrext_cmds=$arg 6844189777a2SCristian Pallares prev= 6845189777a2SCristian Pallares continue 6846189777a2SCristian Pallares ;; 6847189777a2SCristian Pallares weak) 6848189777a2SCristian Pallares func_append weak_libs " $arg" 6849189777a2SCristian Pallares prev= 6850189777a2SCristian Pallares continue 6851189777a2SCristian Pallares ;; 6852189777a2SCristian Pallares xcclinker) 6853189777a2SCristian Pallares func_append linker_flags " $qarg" 6854189777a2SCristian Pallares func_append compiler_flags " $qarg" 6855189777a2SCristian Pallares prev= 6856189777a2SCristian Pallares func_append compile_command " $qarg" 6857189777a2SCristian Pallares func_append finalize_command " $qarg" 6858189777a2SCristian Pallares continue 6859189777a2SCristian Pallares ;; 6860189777a2SCristian Pallares xcompiler) 6861189777a2SCristian Pallares func_append compiler_flags " $qarg" 6862189777a2SCristian Pallares prev= 6863189777a2SCristian Pallares func_append compile_command " $qarg" 6864189777a2SCristian Pallares func_append finalize_command " $qarg" 6865189777a2SCristian Pallares continue 6866189777a2SCristian Pallares ;; 6867189777a2SCristian Pallares xlinker) 6868189777a2SCristian Pallares func_append linker_flags " $qarg" 6869189777a2SCristian Pallares func_append compiler_flags " $wl$qarg" 6870189777a2SCristian Pallares prev= 6871189777a2SCristian Pallares func_append compile_command " $wl$qarg" 6872189777a2SCristian Pallares func_append finalize_command " $wl$qarg" 6873189777a2SCristian Pallares continue 6874189777a2SCristian Pallares ;; 6875189777a2SCristian Pallares *) 6876189777a2SCristian Pallares eval "$prev=\"\$arg\"" 6877189777a2SCristian Pallares prev= 6878189777a2SCristian Pallares continue 6879189777a2SCristian Pallares ;; 6880189777a2SCristian Pallares esac 6881189777a2SCristian Pallares fi # test -n "$prev" 6882189777a2SCristian Pallares 6883*b3fce824SCristian Pallarés prevarg=$arg 6884189777a2SCristian Pallares 6885189777a2SCristian Pallares case $arg in 6886189777a2SCristian Pallares -all-static) 6887189777a2SCristian Pallares if test -n "$link_static_flag"; then 6888189777a2SCristian Pallares # See comment for -static flag below, for more details. 6889189777a2SCristian Pallares func_append compile_command " $link_static_flag" 6890189777a2SCristian Pallares func_append finalize_command " $link_static_flag" 6891189777a2SCristian Pallares fi 6892189777a2SCristian Pallares continue 6893189777a2SCristian Pallares ;; 6894189777a2SCristian Pallares 6895189777a2SCristian Pallares -allow-undefined) 6896189777a2SCristian Pallares # FIXME: remove this flag sometime in the future. 6897*b3fce824SCristian Pallarés func_fatal_error "'-allow-undefined' must not be used because it is the default" 6898189777a2SCristian Pallares ;; 6899189777a2SCristian Pallares 6900189777a2SCristian Pallares -avoid-version) 6901189777a2SCristian Pallares avoid_version=yes 6902189777a2SCristian Pallares continue 6903189777a2SCristian Pallares ;; 6904189777a2SCristian Pallares 6905189777a2SCristian Pallares -bindir) 6906189777a2SCristian Pallares prev=bindir 6907189777a2SCristian Pallares continue 6908189777a2SCristian Pallares ;; 6909189777a2SCristian Pallares 6910189777a2SCristian Pallares -dlopen) 6911189777a2SCristian Pallares prev=dlfiles 6912189777a2SCristian Pallares continue 6913189777a2SCristian Pallares ;; 6914189777a2SCristian Pallares 6915189777a2SCristian Pallares -dlpreopen) 6916189777a2SCristian Pallares prev=dlprefiles 6917189777a2SCristian Pallares continue 6918189777a2SCristian Pallares ;; 6919189777a2SCristian Pallares 6920189777a2SCristian Pallares -export-dynamic) 6921189777a2SCristian Pallares export_dynamic=yes 6922189777a2SCristian Pallares continue 6923189777a2SCristian Pallares ;; 6924189777a2SCristian Pallares 6925189777a2SCristian Pallares -export-symbols | -export-symbols-regex) 6926189777a2SCristian Pallares if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 6927189777a2SCristian Pallares func_fatal_error "more than one -exported-symbols argument is not allowed" 6928189777a2SCristian Pallares fi 6929*b3fce824SCristian Pallarés if test X-export-symbols = "X$arg"; then 6930189777a2SCristian Pallares prev=expsyms 6931189777a2SCristian Pallares else 6932189777a2SCristian Pallares prev=expsyms_regex 6933189777a2SCristian Pallares fi 6934189777a2SCristian Pallares continue 6935189777a2SCristian Pallares ;; 6936189777a2SCristian Pallares 6937189777a2SCristian Pallares -framework) 6938189777a2SCristian Pallares prev=framework 6939189777a2SCristian Pallares continue 6940189777a2SCristian Pallares ;; 6941189777a2SCristian Pallares 6942189777a2SCristian Pallares -inst-prefix-dir) 6943189777a2SCristian Pallares prev=inst_prefix 6944189777a2SCristian Pallares continue 6945189777a2SCristian Pallares ;; 6946189777a2SCristian Pallares 6947189777a2SCristian Pallares # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 6948189777a2SCristian Pallares # so, if we see these flags be careful not to treat them like -L 6949189777a2SCristian Pallares -L[A-Z][A-Z]*:*) 6950189777a2SCristian Pallares case $with_gcc/$host in 6951189777a2SCristian Pallares no/*-*-irix* | /*-*-irix*) 6952189777a2SCristian Pallares func_append compile_command " $arg" 6953189777a2SCristian Pallares func_append finalize_command " $arg" 6954189777a2SCristian Pallares ;; 6955189777a2SCristian Pallares esac 6956189777a2SCristian Pallares continue 6957189777a2SCristian Pallares ;; 6958189777a2SCristian Pallares 6959189777a2SCristian Pallares -L*) 6960189777a2SCristian Pallares func_stripname "-L" '' "$arg" 6961189777a2SCristian Pallares if test -z "$func_stripname_result"; then 6962189777a2SCristian Pallares if test "$#" -gt 0; then 6963*b3fce824SCristian Pallarés func_fatal_error "require no space between '-L' and '$1'" 6964189777a2SCristian Pallares else 6965*b3fce824SCristian Pallarés func_fatal_error "need path for '-L' option" 6966189777a2SCristian Pallares fi 6967189777a2SCristian Pallares fi 6968189777a2SCristian Pallares func_resolve_sysroot "$func_stripname_result" 6969189777a2SCristian Pallares dir=$func_resolve_sysroot_result 6970189777a2SCristian Pallares # We need an absolute path. 6971189777a2SCristian Pallares case $dir in 6972189777a2SCristian Pallares [\\/]* | [A-Za-z]:[\\/]*) ;; 6973189777a2SCristian Pallares *) 6974189777a2SCristian Pallares absdir=`cd "$dir" && pwd` 6975189777a2SCristian Pallares test -z "$absdir" && \ 6976*b3fce824SCristian Pallarés func_fatal_error "cannot determine absolute directory name of '$dir'" 6977*b3fce824SCristian Pallarés dir=$absdir 6978189777a2SCristian Pallares ;; 6979189777a2SCristian Pallares esac 6980189777a2SCristian Pallares case "$deplibs " in 6981189777a2SCristian Pallares *" -L$dir "* | *" $arg "*) 6982189777a2SCristian Pallares # Will only happen for absolute or sysroot arguments 6983189777a2SCristian Pallares ;; 6984189777a2SCristian Pallares *) 6985189777a2SCristian Pallares # Preserve sysroot, but never include relative directories 6986189777a2SCristian Pallares case $dir in 6987189777a2SCristian Pallares [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 6988189777a2SCristian Pallares *) func_append deplibs " -L$dir" ;; 6989189777a2SCristian Pallares esac 6990189777a2SCristian Pallares func_append lib_search_path " $dir" 6991189777a2SCristian Pallares ;; 6992189777a2SCristian Pallares esac 6993189777a2SCristian Pallares case $host in 6994189777a2SCristian Pallares *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6995189777a2SCristian Pallares testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 6996189777a2SCristian Pallares case :$dllsearchpath: in 6997189777a2SCristian Pallares *":$dir:"*) ;; 6998189777a2SCristian Pallares ::) dllsearchpath=$dir;; 6999189777a2SCristian Pallares *) func_append dllsearchpath ":$dir";; 7000189777a2SCristian Pallares esac 7001189777a2SCristian Pallares case :$dllsearchpath: in 7002189777a2SCristian Pallares *":$testbindir:"*) ;; 7003189777a2SCristian Pallares ::) dllsearchpath=$testbindir;; 7004189777a2SCristian Pallares *) func_append dllsearchpath ":$testbindir";; 7005189777a2SCristian Pallares esac 7006189777a2SCristian Pallares ;; 7007189777a2SCristian Pallares esac 7008189777a2SCristian Pallares continue 7009189777a2SCristian Pallares ;; 7010189777a2SCristian Pallares 7011189777a2SCristian Pallares -l*) 7012*b3fce824SCristian Pallarés if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7013189777a2SCristian Pallares case $host in 7014189777a2SCristian Pallares *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7015189777a2SCristian Pallares # These systems don't actually have a C or math library (as such) 7016189777a2SCristian Pallares continue 7017189777a2SCristian Pallares ;; 7018189777a2SCristian Pallares *-*-os2*) 7019189777a2SCristian Pallares # These systems don't actually have a C library (as such) 7020*b3fce824SCristian Pallarés test X-lc = "X$arg" && continue 7021189777a2SCristian Pallares ;; 7022*b3fce824SCristian Pallarés *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7023189777a2SCristian Pallares # Do not include libc due to us having libc/libc_r. 7024*b3fce824SCristian Pallarés test X-lc = "X$arg" && continue 7025189777a2SCristian Pallares ;; 7026189777a2SCristian Pallares *-*-rhapsody* | *-*-darwin1.[012]) 7027189777a2SCristian Pallares # Rhapsody C and math libraries are in the System framework 7028189777a2SCristian Pallares func_append deplibs " System.ltframework" 7029189777a2SCristian Pallares continue 7030189777a2SCristian Pallares ;; 7031189777a2SCristian Pallares *-*-sco3.2v5* | *-*-sco5v6*) 7032189777a2SCristian Pallares # Causes problems with __ctype 7033*b3fce824SCristian Pallarés test X-lc = "X$arg" && continue 7034189777a2SCristian Pallares ;; 7035189777a2SCristian Pallares *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7036189777a2SCristian Pallares # Compiler inserts libc in the correct place for threads to work 7037*b3fce824SCristian Pallarés test X-lc = "X$arg" && continue 7038189777a2SCristian Pallares ;; 7039189777a2SCristian Pallares esac 7040*b3fce824SCristian Pallarés elif test X-lc_r = "X$arg"; then 7041189777a2SCristian Pallares case $host in 7042*b3fce824SCristian Pallarés *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7043189777a2SCristian Pallares # Do not include libc_r directly, use -pthread flag. 7044189777a2SCristian Pallares continue 7045189777a2SCristian Pallares ;; 7046189777a2SCristian Pallares esac 7047189777a2SCristian Pallares fi 7048189777a2SCristian Pallares func_append deplibs " $arg" 7049189777a2SCristian Pallares continue 7050189777a2SCristian Pallares ;; 7051189777a2SCristian Pallares 7052*b3fce824SCristian Pallarés -mllvm) 7053*b3fce824SCristian Pallarés prev=mllvm 7054*b3fce824SCristian Pallarés continue 7055*b3fce824SCristian Pallarés ;; 7056*b3fce824SCristian Pallarés 7057189777a2SCristian Pallares -module) 7058189777a2SCristian Pallares module=yes 7059189777a2SCristian Pallares continue 7060189777a2SCristian Pallares ;; 7061189777a2SCristian Pallares 7062189777a2SCristian Pallares # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7063189777a2SCristian Pallares # classes, name mangling, and exception handling. 7064189777a2SCristian Pallares # Darwin uses the -arch flag to determine output architecture. 7065189777a2SCristian Pallares -model|-arch|-isysroot|--sysroot) 7066189777a2SCristian Pallares func_append compiler_flags " $arg" 7067189777a2SCristian Pallares func_append compile_command " $arg" 7068189777a2SCristian Pallares func_append finalize_command " $arg" 7069189777a2SCristian Pallares prev=xcompiler 7070189777a2SCristian Pallares continue 7071189777a2SCristian Pallares ;; 7072189777a2SCristian Pallares 7073189777a2SCristian Pallares -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7074189777a2SCristian Pallares |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7075189777a2SCristian Pallares func_append compiler_flags " $arg" 7076189777a2SCristian Pallares func_append compile_command " $arg" 7077189777a2SCristian Pallares func_append finalize_command " $arg" 7078189777a2SCristian Pallares case "$new_inherited_linker_flags " in 7079189777a2SCristian Pallares *" $arg "*) ;; 7080189777a2SCristian Pallares * ) func_append new_inherited_linker_flags " $arg" ;; 7081189777a2SCristian Pallares esac 7082189777a2SCristian Pallares continue 7083189777a2SCristian Pallares ;; 7084189777a2SCristian Pallares 7085189777a2SCristian Pallares -multi_module) 7086*b3fce824SCristian Pallarés single_module=$wl-multi_module 7087189777a2SCristian Pallares continue 7088189777a2SCristian Pallares ;; 7089189777a2SCristian Pallares 7090189777a2SCristian Pallares -no-fast-install) 7091189777a2SCristian Pallares fast_install=no 7092189777a2SCristian Pallares continue 7093189777a2SCristian Pallares ;; 7094189777a2SCristian Pallares 7095189777a2SCristian Pallares -no-install) 7096189777a2SCristian Pallares case $host in 7097189777a2SCristian Pallares *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7098189777a2SCristian Pallares # The PATH hackery in wrapper scripts is required on Windows 7099189777a2SCristian Pallares # and Darwin in order for the loader to find any dlls it needs. 7100*b3fce824SCristian Pallarés func_warning "'-no-install' is ignored for $host" 7101*b3fce824SCristian Pallarés func_warning "assuming '-no-fast-install' instead" 7102189777a2SCristian Pallares fast_install=no 7103189777a2SCristian Pallares ;; 7104189777a2SCristian Pallares *) no_install=yes ;; 7105189777a2SCristian Pallares esac 7106189777a2SCristian Pallares continue 7107189777a2SCristian Pallares ;; 7108189777a2SCristian Pallares 7109189777a2SCristian Pallares -no-undefined) 7110189777a2SCristian Pallares allow_undefined=no 7111189777a2SCristian Pallares continue 7112189777a2SCristian Pallares ;; 7113189777a2SCristian Pallares 7114189777a2SCristian Pallares -objectlist) 7115189777a2SCristian Pallares prev=objectlist 7116189777a2SCristian Pallares continue 7117189777a2SCristian Pallares ;; 7118189777a2SCristian Pallares 7119*b3fce824SCristian Pallarés -os2dllname) 7120*b3fce824SCristian Pallarés prev=os2dllname 7121*b3fce824SCristian Pallarés continue 7122*b3fce824SCristian Pallarés ;; 7123*b3fce824SCristian Pallarés 7124189777a2SCristian Pallares -o) prev=output ;; 7125189777a2SCristian Pallares 7126189777a2SCristian Pallares -precious-files-regex) 7127189777a2SCristian Pallares prev=precious_regex 7128189777a2SCristian Pallares continue 7129189777a2SCristian Pallares ;; 7130189777a2SCristian Pallares 7131189777a2SCristian Pallares -release) 7132189777a2SCristian Pallares prev=release 7133189777a2SCristian Pallares continue 7134189777a2SCristian Pallares ;; 7135189777a2SCristian Pallares 7136189777a2SCristian Pallares -rpath) 7137189777a2SCristian Pallares prev=rpath 7138189777a2SCristian Pallares continue 7139189777a2SCristian Pallares ;; 7140189777a2SCristian Pallares 7141189777a2SCristian Pallares -R) 7142189777a2SCristian Pallares prev=xrpath 7143189777a2SCristian Pallares continue 7144189777a2SCristian Pallares ;; 7145189777a2SCristian Pallares 7146189777a2SCristian Pallares -R*) 7147189777a2SCristian Pallares func_stripname '-R' '' "$arg" 7148189777a2SCristian Pallares dir=$func_stripname_result 7149189777a2SCristian Pallares # We need an absolute path. 7150189777a2SCristian Pallares case $dir in 7151189777a2SCristian Pallares [\\/]* | [A-Za-z]:[\\/]*) ;; 7152189777a2SCristian Pallares =*) 7153189777a2SCristian Pallares func_stripname '=' '' "$dir" 7154189777a2SCristian Pallares dir=$lt_sysroot$func_stripname_result 7155189777a2SCristian Pallares ;; 7156189777a2SCristian Pallares *) 7157189777a2SCristian Pallares func_fatal_error "only absolute run-paths are allowed" 7158189777a2SCristian Pallares ;; 7159189777a2SCristian Pallares esac 7160189777a2SCristian Pallares case "$xrpath " in 7161189777a2SCristian Pallares *" $dir "*) ;; 7162189777a2SCristian Pallares *) func_append xrpath " $dir" ;; 7163189777a2SCristian Pallares esac 7164189777a2SCristian Pallares continue 7165189777a2SCristian Pallares ;; 7166189777a2SCristian Pallares 7167189777a2SCristian Pallares -shared) 7168189777a2SCristian Pallares # The effects of -shared are defined in a previous loop. 7169189777a2SCristian Pallares continue 7170189777a2SCristian Pallares ;; 7171189777a2SCristian Pallares 7172189777a2SCristian Pallares -shrext) 7173189777a2SCristian Pallares prev=shrext 7174189777a2SCristian Pallares continue 7175189777a2SCristian Pallares ;; 7176189777a2SCristian Pallares 7177189777a2SCristian Pallares -static | -static-libtool-libs) 7178189777a2SCristian Pallares # The effects of -static are defined in a previous loop. 7179189777a2SCristian Pallares # We used to do the same as -all-static on platforms that 7180189777a2SCristian Pallares # didn't have a PIC flag, but the assumption that the effects 7181189777a2SCristian Pallares # would be equivalent was wrong. It would break on at least 7182189777a2SCristian Pallares # Digital Unix and AIX. 7183189777a2SCristian Pallares continue 7184189777a2SCristian Pallares ;; 7185189777a2SCristian Pallares 7186189777a2SCristian Pallares -thread-safe) 7187189777a2SCristian Pallares thread_safe=yes 7188189777a2SCristian Pallares continue 7189189777a2SCristian Pallares ;; 7190189777a2SCristian Pallares 7191189777a2SCristian Pallares -version-info) 7192189777a2SCristian Pallares prev=vinfo 7193189777a2SCristian Pallares continue 7194189777a2SCristian Pallares ;; 7195189777a2SCristian Pallares 7196189777a2SCristian Pallares -version-number) 7197189777a2SCristian Pallares prev=vinfo 7198189777a2SCristian Pallares vinfo_number=yes 7199189777a2SCristian Pallares continue 7200189777a2SCristian Pallares ;; 7201189777a2SCristian Pallares 7202189777a2SCristian Pallares -weak) 7203189777a2SCristian Pallares prev=weak 7204189777a2SCristian Pallares continue 7205189777a2SCristian Pallares ;; 7206189777a2SCristian Pallares 7207189777a2SCristian Pallares -Wc,*) 7208189777a2SCristian Pallares func_stripname '-Wc,' '' "$arg" 7209189777a2SCristian Pallares args=$func_stripname_result 7210189777a2SCristian Pallares arg= 7211*b3fce824SCristian Pallarés save_ifs=$IFS; IFS=, 7212189777a2SCristian Pallares for flag in $args; do 7213*b3fce824SCristian Pallarés IFS=$save_ifs 7214189777a2SCristian Pallares func_quote_for_eval "$flag" 7215189777a2SCristian Pallares func_append arg " $func_quote_for_eval_result" 7216189777a2SCristian Pallares func_append compiler_flags " $func_quote_for_eval_result" 7217189777a2SCristian Pallares done 7218*b3fce824SCristian Pallarés IFS=$save_ifs 7219189777a2SCristian Pallares func_stripname ' ' '' "$arg" 7220189777a2SCristian Pallares arg=$func_stripname_result 7221189777a2SCristian Pallares ;; 7222189777a2SCristian Pallares 7223189777a2SCristian Pallares -Wl,*) 7224189777a2SCristian Pallares func_stripname '-Wl,' '' "$arg" 7225189777a2SCristian Pallares args=$func_stripname_result 7226189777a2SCristian Pallares arg= 7227*b3fce824SCristian Pallarés save_ifs=$IFS; IFS=, 7228189777a2SCristian Pallares for flag in $args; do 7229*b3fce824SCristian Pallarés IFS=$save_ifs 7230189777a2SCristian Pallares func_quote_for_eval "$flag" 7231189777a2SCristian Pallares func_append arg " $wl$func_quote_for_eval_result" 7232189777a2SCristian Pallares func_append compiler_flags " $wl$func_quote_for_eval_result" 7233189777a2SCristian Pallares func_append linker_flags " $func_quote_for_eval_result" 7234189777a2SCristian Pallares done 7235*b3fce824SCristian Pallarés IFS=$save_ifs 7236189777a2SCristian Pallares func_stripname ' ' '' "$arg" 7237189777a2SCristian Pallares arg=$func_stripname_result 7238189777a2SCristian Pallares ;; 7239189777a2SCristian Pallares 7240189777a2SCristian Pallares -Xcompiler) 7241189777a2SCristian Pallares prev=xcompiler 7242189777a2SCristian Pallares continue 7243189777a2SCristian Pallares ;; 7244189777a2SCristian Pallares 7245189777a2SCristian Pallares -Xlinker) 7246189777a2SCristian Pallares prev=xlinker 7247189777a2SCristian Pallares continue 7248189777a2SCristian Pallares ;; 7249189777a2SCristian Pallares 7250189777a2SCristian Pallares -XCClinker) 7251189777a2SCristian Pallares prev=xcclinker 7252189777a2SCristian Pallares continue 7253189777a2SCristian Pallares ;; 7254189777a2SCristian Pallares 7255189777a2SCristian Pallares # -msg_* for osf cc 7256189777a2SCristian Pallares -msg_*) 7257189777a2SCristian Pallares func_quote_for_eval "$arg" 7258*b3fce824SCristian Pallarés arg=$func_quote_for_eval_result 7259189777a2SCristian Pallares ;; 7260189777a2SCristian Pallares 7261189777a2SCristian Pallares # Flags to be passed through unchanged, with rationale: 7262189777a2SCristian Pallares # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7263189777a2SCristian Pallares # -r[0-9][0-9]* specify processor for the SGI compiler 7264189777a2SCristian Pallares # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7265189777a2SCristian Pallares # +DA*, +DD* enable 64-bit mode for the HP compiler 7266189777a2SCristian Pallares # -q* compiler args for the IBM compiler 7267189777a2SCristian Pallares # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7268189777a2SCristian Pallares # -F/path path to uninstalled frameworks, gcc on darwin 7269189777a2SCristian Pallares # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7270*b3fce824SCristian Pallarés # -fstack-protector* stack protector flags for GCC 7271189777a2SCristian Pallares # @file GCC response files 7272189777a2SCristian Pallares # -tp=* Portland pgcc target processor selection 7273189777a2SCristian Pallares # --sysroot=* for sysroot support 7274*b3fce824SCristian Pallarés # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7275*b3fce824SCristian Pallarés # -specs=* GCC specs files 7276*b3fce824SCristian Pallarés # -stdlib=* select c++ std lib with clang 7277*b3fce824SCristian Pallarés # -fsanitize=* Clang/GCC memory and address sanitizer 7278189777a2SCristian Pallares -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7279189777a2SCristian Pallares -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7280*b3fce824SCristian Pallarés -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 7281*b3fce824SCristian Pallarés -specs=*|-fsanitize=*) 7282189777a2SCristian Pallares func_quote_for_eval "$arg" 7283*b3fce824SCristian Pallarés arg=$func_quote_for_eval_result 7284189777a2SCristian Pallares func_append compile_command " $arg" 7285189777a2SCristian Pallares func_append finalize_command " $arg" 7286189777a2SCristian Pallares func_append compiler_flags " $arg" 7287189777a2SCristian Pallares continue 7288189777a2SCristian Pallares ;; 7289189777a2SCristian Pallares 7290*b3fce824SCristian Pallarés -Z*) 7291*b3fce824SCristian Pallarés if test os2 = "`expr $host : '.*\(os2\)'`"; then 7292*b3fce824SCristian Pallarés # OS/2 uses -Zxxx to specify OS/2-specific options 7293*b3fce824SCristian Pallarés compiler_flags="$compiler_flags $arg" 7294*b3fce824SCristian Pallarés func_append compile_command " $arg" 7295*b3fce824SCristian Pallarés func_append finalize_command " $arg" 7296*b3fce824SCristian Pallarés case $arg in 7297*b3fce824SCristian Pallarés -Zlinker | -Zstack) 7298*b3fce824SCristian Pallarés prev=xcompiler 7299*b3fce824SCristian Pallarés ;; 7300*b3fce824SCristian Pallarés esac 7301*b3fce824SCristian Pallarés continue 7302*b3fce824SCristian Pallarés else 7303*b3fce824SCristian Pallarés # Otherwise treat like 'Some other compiler flag' below 7304*b3fce824SCristian Pallarés func_quote_for_eval "$arg" 7305*b3fce824SCristian Pallarés arg=$func_quote_for_eval_result 7306*b3fce824SCristian Pallarés fi 7307*b3fce824SCristian Pallarés ;; 7308*b3fce824SCristian Pallarés 7309189777a2SCristian Pallares # Some other compiler flag. 7310189777a2SCristian Pallares -* | +*) 7311189777a2SCristian Pallares func_quote_for_eval "$arg" 7312*b3fce824SCristian Pallarés arg=$func_quote_for_eval_result 7313189777a2SCristian Pallares ;; 7314189777a2SCristian Pallares 7315189777a2SCristian Pallares *.$objext) 7316189777a2SCristian Pallares # A standard object. 7317189777a2SCristian Pallares func_append objs " $arg" 7318189777a2SCristian Pallares ;; 7319189777a2SCristian Pallares 7320189777a2SCristian Pallares *.lo) 7321189777a2SCristian Pallares # A libtool-controlled object. 7322189777a2SCristian Pallares 7323189777a2SCristian Pallares # Check to see that this really is a libtool object. 7324189777a2SCristian Pallares if func_lalib_unsafe_p "$arg"; then 7325189777a2SCristian Pallares pic_object= 7326189777a2SCristian Pallares non_pic_object= 7327189777a2SCristian Pallares 7328189777a2SCristian Pallares # Read the .lo file 7329189777a2SCristian Pallares func_source "$arg" 7330189777a2SCristian Pallares 7331189777a2SCristian Pallares if test -z "$pic_object" || 7332189777a2SCristian Pallares test -z "$non_pic_object" || 7333*b3fce824SCristian Pallarés test none = "$pic_object" && 7334*b3fce824SCristian Pallarés test none = "$non_pic_object"; then 7335*b3fce824SCristian Pallarés func_fatal_error "cannot find name of object for '$arg'" 7336189777a2SCristian Pallares fi 7337189777a2SCristian Pallares 7338189777a2SCristian Pallares # Extract subdirectory from the argument. 7339189777a2SCristian Pallares func_dirname "$arg" "/" "" 7340*b3fce824SCristian Pallarés xdir=$func_dirname_result 7341189777a2SCristian Pallares 7342*b3fce824SCristian Pallarés test none = "$pic_object" || { 7343189777a2SCristian Pallares # Prepend the subdirectory the object is found in. 7344*b3fce824SCristian Pallarés pic_object=$xdir$pic_object 7345189777a2SCristian Pallares 7346*b3fce824SCristian Pallarés if test dlfiles = "$prev"; then 7347*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7348189777a2SCristian Pallares func_append dlfiles " $pic_object" 7349189777a2SCristian Pallares prev= 7350189777a2SCristian Pallares continue 7351189777a2SCristian Pallares else 7352189777a2SCristian Pallares # If libtool objects are unsupported, then we need to preload. 7353189777a2SCristian Pallares prev=dlprefiles 7354189777a2SCristian Pallares fi 7355189777a2SCristian Pallares fi 7356189777a2SCristian Pallares 7357189777a2SCristian Pallares # CHECK ME: I think I busted this. -Ossama 7358*b3fce824SCristian Pallarés if test dlprefiles = "$prev"; then 7359189777a2SCristian Pallares # Preload the old-style object. 7360189777a2SCristian Pallares func_append dlprefiles " $pic_object" 7361189777a2SCristian Pallares prev= 7362189777a2SCristian Pallares fi 7363189777a2SCristian Pallares 7364189777a2SCristian Pallares # A PIC object. 7365189777a2SCristian Pallares func_append libobjs " $pic_object" 7366*b3fce824SCristian Pallarés arg=$pic_object 7367*b3fce824SCristian Pallarés } 7368189777a2SCristian Pallares 7369189777a2SCristian Pallares # Non-PIC object. 7370*b3fce824SCristian Pallarés if test none != "$non_pic_object"; then 7371189777a2SCristian Pallares # Prepend the subdirectory the object is found in. 7372*b3fce824SCristian Pallarés non_pic_object=$xdir$non_pic_object 7373189777a2SCristian Pallares 7374189777a2SCristian Pallares # A standard non-PIC object 7375189777a2SCristian Pallares func_append non_pic_objects " $non_pic_object" 7376*b3fce824SCristian Pallarés if test -z "$pic_object" || test none = "$pic_object"; then 7377*b3fce824SCristian Pallarés arg=$non_pic_object 7378189777a2SCristian Pallares fi 7379189777a2SCristian Pallares else 7380189777a2SCristian Pallares # If the PIC object exists, use it instead. 7381189777a2SCristian Pallares # $xdir was prepended to $pic_object above. 7382*b3fce824SCristian Pallarés non_pic_object=$pic_object 7383189777a2SCristian Pallares func_append non_pic_objects " $non_pic_object" 7384189777a2SCristian Pallares fi 7385189777a2SCristian Pallares else 7386189777a2SCristian Pallares # Only an error if not doing a dry-run. 7387189777a2SCristian Pallares if $opt_dry_run; then 7388189777a2SCristian Pallares # Extract subdirectory from the argument. 7389189777a2SCristian Pallares func_dirname "$arg" "/" "" 7390*b3fce824SCristian Pallarés xdir=$func_dirname_result 7391189777a2SCristian Pallares 7392189777a2SCristian Pallares func_lo2o "$arg" 7393189777a2SCristian Pallares pic_object=$xdir$objdir/$func_lo2o_result 7394189777a2SCristian Pallares non_pic_object=$xdir$func_lo2o_result 7395189777a2SCristian Pallares func_append libobjs " $pic_object" 7396189777a2SCristian Pallares func_append non_pic_objects " $non_pic_object" 7397189777a2SCristian Pallares else 7398*b3fce824SCristian Pallarés func_fatal_error "'$arg' is not a valid libtool object" 7399189777a2SCristian Pallares fi 7400189777a2SCristian Pallares fi 7401189777a2SCristian Pallares ;; 7402189777a2SCristian Pallares 7403189777a2SCristian Pallares *.$libext) 7404189777a2SCristian Pallares # An archive. 7405189777a2SCristian Pallares func_append deplibs " $arg" 7406189777a2SCristian Pallares func_append old_deplibs " $arg" 7407189777a2SCristian Pallares continue 7408189777a2SCristian Pallares ;; 7409189777a2SCristian Pallares 7410189777a2SCristian Pallares *.la) 7411189777a2SCristian Pallares # A libtool-controlled library. 7412189777a2SCristian Pallares 7413189777a2SCristian Pallares func_resolve_sysroot "$arg" 7414*b3fce824SCristian Pallarés if test dlfiles = "$prev"; then 7415189777a2SCristian Pallares # This library was specified with -dlopen. 7416189777a2SCristian Pallares func_append dlfiles " $func_resolve_sysroot_result" 7417189777a2SCristian Pallares prev= 7418*b3fce824SCristian Pallarés elif test dlprefiles = "$prev"; then 7419189777a2SCristian Pallares # The library was specified with -dlpreopen. 7420189777a2SCristian Pallares func_append dlprefiles " $func_resolve_sysroot_result" 7421189777a2SCristian Pallares prev= 7422189777a2SCristian Pallares else 7423189777a2SCristian Pallares func_append deplibs " $func_resolve_sysroot_result" 7424189777a2SCristian Pallares fi 7425189777a2SCristian Pallares continue 7426189777a2SCristian Pallares ;; 7427189777a2SCristian Pallares 7428189777a2SCristian Pallares # Some other compiler argument. 7429189777a2SCristian Pallares *) 7430189777a2SCristian Pallares # Unknown arguments in both finalize_command and compile_command need 7431189777a2SCristian Pallares # to be aesthetically quoted because they are evaled later. 7432189777a2SCristian Pallares func_quote_for_eval "$arg" 7433*b3fce824SCristian Pallarés arg=$func_quote_for_eval_result 7434189777a2SCristian Pallares ;; 7435189777a2SCristian Pallares esac # arg 7436189777a2SCristian Pallares 7437189777a2SCristian Pallares # Now actually substitute the argument into the commands. 7438189777a2SCristian Pallares if test -n "$arg"; then 7439189777a2SCristian Pallares func_append compile_command " $arg" 7440189777a2SCristian Pallares func_append finalize_command " $arg" 7441189777a2SCristian Pallares fi 7442189777a2SCristian Pallares done # argument parsing loop 7443189777a2SCristian Pallares 7444189777a2SCristian Pallares test -n "$prev" && \ 7445*b3fce824SCristian Pallarés func_fatal_help "the '$prevarg' option requires an argument" 7446189777a2SCristian Pallares 7447*b3fce824SCristian Pallarés if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7448189777a2SCristian Pallares eval arg=\"$export_dynamic_flag_spec\" 7449189777a2SCristian Pallares func_append compile_command " $arg" 7450189777a2SCristian Pallares func_append finalize_command " $arg" 7451189777a2SCristian Pallares fi 7452189777a2SCristian Pallares 7453189777a2SCristian Pallares oldlibs= 7454189777a2SCristian Pallares # calculate the name of the file, without its directory 7455189777a2SCristian Pallares func_basename "$output" 7456*b3fce824SCristian Pallarés outputname=$func_basename_result 7457*b3fce824SCristian Pallarés libobjs_save=$libobjs 7458189777a2SCristian Pallares 7459189777a2SCristian Pallares if test -n "$shlibpath_var"; then 7460189777a2SCristian Pallares # get the directories listed in $shlibpath_var 7461*b3fce824SCristian Pallarés eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7462189777a2SCristian Pallares else 7463189777a2SCristian Pallares shlib_search_path= 7464189777a2SCristian Pallares fi 7465189777a2SCristian Pallares eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7466189777a2SCristian Pallares eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7467189777a2SCristian Pallares 7468*b3fce824SCristian Pallarés # Definition is injected by LT_CONFIG during libtool generation. 7469*b3fce824SCristian Pallarés func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7470*b3fce824SCristian Pallarés 7471189777a2SCristian Pallares func_dirname "$output" "/" "" 7472*b3fce824SCristian Pallarés output_objdir=$func_dirname_result$objdir 7473189777a2SCristian Pallares func_to_tool_file "$output_objdir/" 7474189777a2SCristian Pallares tool_output_objdir=$func_to_tool_file_result 7475189777a2SCristian Pallares # Create the object directory. 7476189777a2SCristian Pallares func_mkdir_p "$output_objdir" 7477189777a2SCristian Pallares 7478189777a2SCristian Pallares # Determine the type of output 7479189777a2SCristian Pallares case $output in 7480189777a2SCristian Pallares "") 7481189777a2SCristian Pallares func_fatal_help "you must specify an output file" 7482189777a2SCristian Pallares ;; 7483189777a2SCristian Pallares *.$libext) linkmode=oldlib ;; 7484189777a2SCristian Pallares *.lo | *.$objext) linkmode=obj ;; 7485189777a2SCristian Pallares *.la) linkmode=lib ;; 7486189777a2SCristian Pallares *) linkmode=prog ;; # Anything else should be a program. 7487189777a2SCristian Pallares esac 7488189777a2SCristian Pallares 7489189777a2SCristian Pallares specialdeplibs= 7490189777a2SCristian Pallares 7491189777a2SCristian Pallares libs= 7492189777a2SCristian Pallares # Find all interdependent deplibs by searching for libraries 7493189777a2SCristian Pallares # that are linked more than once (e.g. -la -lb -la) 7494189777a2SCristian Pallares for deplib in $deplibs; do 7495189777a2SCristian Pallares if $opt_preserve_dup_deps; then 7496189777a2SCristian Pallares case "$libs " in 7497189777a2SCristian Pallares *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7498189777a2SCristian Pallares esac 7499189777a2SCristian Pallares fi 7500189777a2SCristian Pallares func_append libs " $deplib" 7501189777a2SCristian Pallares done 7502189777a2SCristian Pallares 7503*b3fce824SCristian Pallarés if test lib = "$linkmode"; then 7504189777a2SCristian Pallares libs="$predeps $libs $compiler_lib_search_path $postdeps" 7505189777a2SCristian Pallares 7506189777a2SCristian Pallares # Compute libraries that are listed more than once in $predeps 7507189777a2SCristian Pallares # $postdeps and mark them as special (i.e., whose duplicates are 7508189777a2SCristian Pallares # not to be eliminated). 7509189777a2SCristian Pallares pre_post_deps= 7510189777a2SCristian Pallares if $opt_duplicate_compiler_generated_deps; then 7511189777a2SCristian Pallares for pre_post_dep in $predeps $postdeps; do 7512189777a2SCristian Pallares case "$pre_post_deps " in 7513189777a2SCristian Pallares *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7514189777a2SCristian Pallares esac 7515189777a2SCristian Pallares func_append pre_post_deps " $pre_post_dep" 7516189777a2SCristian Pallares done 7517189777a2SCristian Pallares fi 7518189777a2SCristian Pallares pre_post_deps= 7519189777a2SCristian Pallares fi 7520189777a2SCristian Pallares 7521189777a2SCristian Pallares deplibs= 7522189777a2SCristian Pallares newdependency_libs= 7523189777a2SCristian Pallares newlib_search_path= 7524189777a2SCristian Pallares need_relink=no # whether we're linking any uninstalled libtool libraries 7525189777a2SCristian Pallares notinst_deplibs= # not-installed libtool libraries 7526189777a2SCristian Pallares notinst_path= # paths that contain not-installed libtool libraries 7527189777a2SCristian Pallares 7528189777a2SCristian Pallares case $linkmode in 7529189777a2SCristian Pallares lib) 7530189777a2SCristian Pallares passes="conv dlpreopen link" 7531189777a2SCristian Pallares for file in $dlfiles $dlprefiles; do 7532189777a2SCristian Pallares case $file in 7533189777a2SCristian Pallares *.la) ;; 7534189777a2SCristian Pallares *) 7535*b3fce824SCristian Pallarés func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7536189777a2SCristian Pallares ;; 7537189777a2SCristian Pallares esac 7538189777a2SCristian Pallares done 7539189777a2SCristian Pallares ;; 7540189777a2SCristian Pallares prog) 7541189777a2SCristian Pallares compile_deplibs= 7542189777a2SCristian Pallares finalize_deplibs= 7543*b3fce824SCristian Pallarés alldeplibs=false 7544189777a2SCristian Pallares newdlfiles= 7545189777a2SCristian Pallares newdlprefiles= 7546189777a2SCristian Pallares passes="conv scan dlopen dlpreopen link" 7547189777a2SCristian Pallares ;; 7548189777a2SCristian Pallares *) passes="conv" 7549189777a2SCristian Pallares ;; 7550189777a2SCristian Pallares esac 7551189777a2SCristian Pallares 7552189777a2SCristian Pallares for pass in $passes; do 7553189777a2SCristian Pallares # The preopen pass in lib mode reverses $deplibs; put it back here 7554189777a2SCristian Pallares # so that -L comes before libs that need it for instance... 7555*b3fce824SCristian Pallarés if test lib,link = "$linkmode,$pass"; then 7556189777a2SCristian Pallares ## FIXME: Find the place where the list is rebuilt in the wrong 7557189777a2SCristian Pallares ## order, and fix it there properly 7558189777a2SCristian Pallares tmp_deplibs= 7559189777a2SCristian Pallares for deplib in $deplibs; do 7560189777a2SCristian Pallares tmp_deplibs="$deplib $tmp_deplibs" 7561189777a2SCristian Pallares done 7562*b3fce824SCristian Pallarés deplibs=$tmp_deplibs 7563189777a2SCristian Pallares fi 7564189777a2SCristian Pallares 7565*b3fce824SCristian Pallarés if test lib,link = "$linkmode,$pass" || 7566*b3fce824SCristian Pallarés test prog,scan = "$linkmode,$pass"; then 7567*b3fce824SCristian Pallarés libs=$deplibs 7568189777a2SCristian Pallares deplibs= 7569189777a2SCristian Pallares fi 7570*b3fce824SCristian Pallarés if test prog = "$linkmode"; then 7571189777a2SCristian Pallares case $pass in 7572*b3fce824SCristian Pallarés dlopen) libs=$dlfiles ;; 7573*b3fce824SCristian Pallarés dlpreopen) libs=$dlprefiles ;; 7574189777a2SCristian Pallares link) 7575189777a2SCristian Pallares libs="$deplibs %DEPLIBS%" 7576189777a2SCristian Pallares test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" 7577189777a2SCristian Pallares ;; 7578189777a2SCristian Pallares esac 7579189777a2SCristian Pallares fi 7580*b3fce824SCristian Pallarés if test lib,dlpreopen = "$linkmode,$pass"; then 7581189777a2SCristian Pallares # Collect and forward deplibs of preopened libtool libs 7582189777a2SCristian Pallares for lib in $dlprefiles; do 7583189777a2SCristian Pallares # Ignore non-libtool-libs 7584189777a2SCristian Pallares dependency_libs= 7585189777a2SCristian Pallares func_resolve_sysroot "$lib" 7586189777a2SCristian Pallares case $lib in 7587189777a2SCristian Pallares *.la) func_source "$func_resolve_sysroot_result" ;; 7588189777a2SCristian Pallares esac 7589189777a2SCristian Pallares 7590189777a2SCristian Pallares # Collect preopened libtool deplibs, except any this library 7591189777a2SCristian Pallares # has declared as weak libs 7592189777a2SCristian Pallares for deplib in $dependency_libs; do 7593189777a2SCristian Pallares func_basename "$deplib" 7594189777a2SCristian Pallares deplib_base=$func_basename_result 7595189777a2SCristian Pallares case " $weak_libs " in 7596189777a2SCristian Pallares *" $deplib_base "*) ;; 7597189777a2SCristian Pallares *) func_append deplibs " $deplib" ;; 7598189777a2SCristian Pallares esac 7599189777a2SCristian Pallares done 7600189777a2SCristian Pallares done 7601*b3fce824SCristian Pallarés libs=$dlprefiles 7602189777a2SCristian Pallares fi 7603*b3fce824SCristian Pallarés if test dlopen = "$pass"; then 7604189777a2SCristian Pallares # Collect dlpreopened libraries 7605*b3fce824SCristian Pallarés save_deplibs=$deplibs 7606189777a2SCristian Pallares deplibs= 7607189777a2SCristian Pallares fi 7608189777a2SCristian Pallares 7609189777a2SCristian Pallares for deplib in $libs; do 7610189777a2SCristian Pallares lib= 7611*b3fce824SCristian Pallarés found=false 7612189777a2SCristian Pallares case $deplib in 7613189777a2SCristian Pallares -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 7614189777a2SCristian Pallares |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7615*b3fce824SCristian Pallarés if test prog,link = "$linkmode,$pass"; then 7616189777a2SCristian Pallares compile_deplibs="$deplib $compile_deplibs" 7617189777a2SCristian Pallares finalize_deplibs="$deplib $finalize_deplibs" 7618189777a2SCristian Pallares else 7619189777a2SCristian Pallares func_append compiler_flags " $deplib" 7620*b3fce824SCristian Pallarés if test lib = "$linkmode"; then 7621189777a2SCristian Pallares case "$new_inherited_linker_flags " in 7622189777a2SCristian Pallares *" $deplib "*) ;; 7623189777a2SCristian Pallares * ) func_append new_inherited_linker_flags " $deplib" ;; 7624189777a2SCristian Pallares esac 7625189777a2SCristian Pallares fi 7626189777a2SCristian Pallares fi 7627189777a2SCristian Pallares continue 7628189777a2SCristian Pallares ;; 7629189777a2SCristian Pallares -l*) 7630*b3fce824SCristian Pallarés if test lib != "$linkmode" && test prog != "$linkmode"; then 7631*b3fce824SCristian Pallarés func_warning "'-l' is ignored for archives/objects" 7632189777a2SCristian Pallares continue 7633189777a2SCristian Pallares fi 7634189777a2SCristian Pallares func_stripname '-l' '' "$deplib" 7635189777a2SCristian Pallares name=$func_stripname_result 7636*b3fce824SCristian Pallarés if test lib = "$linkmode"; then 7637189777a2SCristian Pallares searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7638189777a2SCristian Pallares else 7639189777a2SCristian Pallares searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7640189777a2SCristian Pallares fi 7641189777a2SCristian Pallares for searchdir in $searchdirs; do 7642189777a2SCristian Pallares for search_ext in .la $std_shrext .so .a; do 7643189777a2SCristian Pallares # Search the libtool library 7644*b3fce824SCristian Pallarés lib=$searchdir/lib$name$search_ext 7645189777a2SCristian Pallares if test -f "$lib"; then 7646*b3fce824SCristian Pallarés if test .la = "$search_ext"; then 7647*b3fce824SCristian Pallarés found=: 7648189777a2SCristian Pallares else 7649*b3fce824SCristian Pallarés found=false 7650189777a2SCristian Pallares fi 7651189777a2SCristian Pallares break 2 7652189777a2SCristian Pallares fi 7653189777a2SCristian Pallares done 7654189777a2SCristian Pallares done 7655*b3fce824SCristian Pallarés if $found; then 7656*b3fce824SCristian Pallarés # deplib is a libtool library 7657189777a2SCristian Pallares # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7658189777a2SCristian Pallares # We need to do some special things here, and not later. 7659*b3fce824SCristian Pallarés if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7660189777a2SCristian Pallares case " $predeps $postdeps " in 7661189777a2SCristian Pallares *" $deplib "*) 7662189777a2SCristian Pallares if func_lalib_p "$lib"; then 7663189777a2SCristian Pallares library_names= 7664189777a2SCristian Pallares old_library= 7665189777a2SCristian Pallares func_source "$lib" 7666189777a2SCristian Pallares for l in $old_library $library_names; do 7667*b3fce824SCristian Pallarés ll=$l 7668189777a2SCristian Pallares done 7669189777a2SCristian Pallares if test "X$ll" = "X$old_library"; then # only static version available 7670*b3fce824SCristian Pallarés found=false 7671189777a2SCristian Pallares func_dirname "$lib" "" "." 7672*b3fce824SCristian Pallarés ladir=$func_dirname_result 7673189777a2SCristian Pallares lib=$ladir/$old_library 7674*b3fce824SCristian Pallarés if test prog,link = "$linkmode,$pass"; then 7675189777a2SCristian Pallares compile_deplibs="$deplib $compile_deplibs" 7676189777a2SCristian Pallares finalize_deplibs="$deplib $finalize_deplibs" 7677189777a2SCristian Pallares else 7678189777a2SCristian Pallares deplibs="$deplib $deplibs" 7679*b3fce824SCristian Pallarés test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7680189777a2SCristian Pallares fi 7681189777a2SCristian Pallares continue 7682189777a2SCristian Pallares fi 7683189777a2SCristian Pallares fi 7684189777a2SCristian Pallares ;; 7685189777a2SCristian Pallares *) ;; 7686189777a2SCristian Pallares esac 7687189777a2SCristian Pallares fi 7688*b3fce824SCristian Pallarés else 7689*b3fce824SCristian Pallarés # deplib doesn't seem to be a libtool library 7690*b3fce824SCristian Pallarés if test prog,link = "$linkmode,$pass"; then 7691189777a2SCristian Pallares compile_deplibs="$deplib $compile_deplibs" 7692189777a2SCristian Pallares finalize_deplibs="$deplib $finalize_deplibs" 7693189777a2SCristian Pallares else 7694189777a2SCristian Pallares deplibs="$deplib $deplibs" 7695*b3fce824SCristian Pallarés test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7696*b3fce824SCristian Pallarés fi 7697*b3fce824SCristian Pallarés continue 7698*b3fce824SCristian Pallarés fi 7699*b3fce824SCristian Pallarés ;; # -l 7700*b3fce824SCristian Pallarés *.ltframework) 7701*b3fce824SCristian Pallarés if test prog,link = "$linkmode,$pass"; then 7702*b3fce824SCristian Pallarés compile_deplibs="$deplib $compile_deplibs" 7703*b3fce824SCristian Pallarés finalize_deplibs="$deplib $finalize_deplibs" 7704*b3fce824SCristian Pallarés else 7705*b3fce824SCristian Pallarés deplibs="$deplib $deplibs" 7706*b3fce824SCristian Pallarés if test lib = "$linkmode"; then 7707189777a2SCristian Pallares case "$new_inherited_linker_flags " in 7708189777a2SCristian Pallares *" $deplib "*) ;; 7709189777a2SCristian Pallares * ) func_append new_inherited_linker_flags " $deplib" ;; 7710189777a2SCristian Pallares esac 7711189777a2SCristian Pallares fi 7712189777a2SCristian Pallares fi 7713189777a2SCristian Pallares continue 7714189777a2SCristian Pallares ;; 7715189777a2SCristian Pallares -L*) 7716189777a2SCristian Pallares case $linkmode in 7717189777a2SCristian Pallares lib) 7718189777a2SCristian Pallares deplibs="$deplib $deplibs" 7719*b3fce824SCristian Pallarés test conv = "$pass" && continue 7720189777a2SCristian Pallares newdependency_libs="$deplib $newdependency_libs" 7721189777a2SCristian Pallares func_stripname '-L' '' "$deplib" 7722189777a2SCristian Pallares func_resolve_sysroot "$func_stripname_result" 7723189777a2SCristian Pallares func_append newlib_search_path " $func_resolve_sysroot_result" 7724189777a2SCristian Pallares ;; 7725189777a2SCristian Pallares prog) 7726*b3fce824SCristian Pallarés if test conv = "$pass"; then 7727189777a2SCristian Pallares deplibs="$deplib $deplibs" 7728189777a2SCristian Pallares continue 7729189777a2SCristian Pallares fi 7730*b3fce824SCristian Pallarés if test scan = "$pass"; then 7731189777a2SCristian Pallares deplibs="$deplib $deplibs" 7732189777a2SCristian Pallares else 7733189777a2SCristian Pallares compile_deplibs="$deplib $compile_deplibs" 7734189777a2SCristian Pallares finalize_deplibs="$deplib $finalize_deplibs" 7735189777a2SCristian Pallares fi 7736189777a2SCristian Pallares func_stripname '-L' '' "$deplib" 7737189777a2SCristian Pallares func_resolve_sysroot "$func_stripname_result" 7738189777a2SCristian Pallares func_append newlib_search_path " $func_resolve_sysroot_result" 7739189777a2SCristian Pallares ;; 7740189777a2SCristian Pallares *) 7741*b3fce824SCristian Pallarés func_warning "'-L' is ignored for archives/objects" 7742189777a2SCristian Pallares ;; 7743189777a2SCristian Pallares esac # linkmode 7744189777a2SCristian Pallares continue 7745189777a2SCristian Pallares ;; # -L 7746189777a2SCristian Pallares -R*) 7747*b3fce824SCristian Pallarés if test link = "$pass"; then 7748189777a2SCristian Pallares func_stripname '-R' '' "$deplib" 7749189777a2SCristian Pallares func_resolve_sysroot "$func_stripname_result" 7750189777a2SCristian Pallares dir=$func_resolve_sysroot_result 7751189777a2SCristian Pallares # Make sure the xrpath contains only unique directories. 7752189777a2SCristian Pallares case "$xrpath " in 7753189777a2SCristian Pallares *" $dir "*) ;; 7754189777a2SCristian Pallares *) func_append xrpath " $dir" ;; 7755189777a2SCristian Pallares esac 7756189777a2SCristian Pallares fi 7757189777a2SCristian Pallares deplibs="$deplib $deplibs" 7758189777a2SCristian Pallares continue 7759189777a2SCristian Pallares ;; 7760189777a2SCristian Pallares *.la) 7761189777a2SCristian Pallares func_resolve_sysroot "$deplib" 7762189777a2SCristian Pallares lib=$func_resolve_sysroot_result 7763189777a2SCristian Pallares ;; 7764189777a2SCristian Pallares *.$libext) 7765*b3fce824SCristian Pallarés if test conv = "$pass"; then 7766189777a2SCristian Pallares deplibs="$deplib $deplibs" 7767189777a2SCristian Pallares continue 7768189777a2SCristian Pallares fi 7769189777a2SCristian Pallares case $linkmode in 7770189777a2SCristian Pallares lib) 7771189777a2SCristian Pallares # Linking convenience modules into shared libraries is allowed, 7772189777a2SCristian Pallares # but linking other static libraries is non-portable. 7773189777a2SCristian Pallares case " $dlpreconveniencelibs " in 7774189777a2SCristian Pallares *" $deplib "*) ;; 7775189777a2SCristian Pallares *) 7776*b3fce824SCristian Pallarés valid_a_lib=false 7777189777a2SCristian Pallares case $deplibs_check_method in 7778189777a2SCristian Pallares match_pattern*) 7779189777a2SCristian Pallares set dummy $deplibs_check_method; shift 7780189777a2SCristian Pallares match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7781189777a2SCristian Pallares if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7782189777a2SCristian Pallares | $EGREP "$match_pattern_regex" > /dev/null; then 7783*b3fce824SCristian Pallarés valid_a_lib=: 7784189777a2SCristian Pallares fi 7785189777a2SCristian Pallares ;; 7786189777a2SCristian Pallares pass_all) 7787*b3fce824SCristian Pallarés valid_a_lib=: 7788189777a2SCristian Pallares ;; 7789189777a2SCristian Pallares esac 7790*b3fce824SCristian Pallarés if $valid_a_lib; then 7791*b3fce824SCristian Pallarés echo 7792*b3fce824SCristian Pallarés $ECHO "*** Warning: Linking the shared library $output against the" 7793*b3fce824SCristian Pallarés $ECHO "*** static library $deplib is not portable!" 7794*b3fce824SCristian Pallarés deplibs="$deplib $deplibs" 7795*b3fce824SCristian Pallarés else 7796189777a2SCristian Pallares echo 7797189777a2SCristian Pallares $ECHO "*** Warning: Trying to link with static lib archive $deplib." 7798189777a2SCristian Pallares echo "*** I have the capability to make that library automatically link in when" 7799189777a2SCristian Pallares echo "*** you link to this library. But I can only do this if you have a" 7800189777a2SCristian Pallares echo "*** shared version of the library, which you do not appear to have" 7801189777a2SCristian Pallares echo "*** because the file extensions .$libext of this argument makes me believe" 7802189777a2SCristian Pallares echo "*** that it is just a static archive that I should not use here." 7803189777a2SCristian Pallares fi 7804189777a2SCristian Pallares ;; 7805189777a2SCristian Pallares esac 7806189777a2SCristian Pallares continue 7807189777a2SCristian Pallares ;; 7808189777a2SCristian Pallares prog) 7809*b3fce824SCristian Pallarés if test link != "$pass"; then 7810189777a2SCristian Pallares deplibs="$deplib $deplibs" 7811189777a2SCristian Pallares else 7812189777a2SCristian Pallares compile_deplibs="$deplib $compile_deplibs" 7813189777a2SCristian Pallares finalize_deplibs="$deplib $finalize_deplibs" 7814189777a2SCristian Pallares fi 7815189777a2SCristian Pallares continue 7816189777a2SCristian Pallares ;; 7817189777a2SCristian Pallares esac # linkmode 7818189777a2SCristian Pallares ;; # *.$libext 7819189777a2SCristian Pallares *.lo | *.$objext) 7820*b3fce824SCristian Pallarés if test conv = "$pass"; then 7821189777a2SCristian Pallares deplibs="$deplib $deplibs" 7822*b3fce824SCristian Pallarés elif test prog = "$linkmode"; then 7823*b3fce824SCristian Pallarés if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 7824189777a2SCristian Pallares # If there is no dlopen support or we're linking statically, 7825189777a2SCristian Pallares # we need to preload. 7826189777a2SCristian Pallares func_append newdlprefiles " $deplib" 7827189777a2SCristian Pallares compile_deplibs="$deplib $compile_deplibs" 7828189777a2SCristian Pallares finalize_deplibs="$deplib $finalize_deplibs" 7829189777a2SCristian Pallares else 7830189777a2SCristian Pallares func_append newdlfiles " $deplib" 7831189777a2SCristian Pallares fi 7832189777a2SCristian Pallares fi 7833189777a2SCristian Pallares continue 7834189777a2SCristian Pallares ;; 7835189777a2SCristian Pallares %DEPLIBS%) 7836*b3fce824SCristian Pallarés alldeplibs=: 7837189777a2SCristian Pallares continue 7838189777a2SCristian Pallares ;; 7839189777a2SCristian Pallares esac # case $deplib 7840189777a2SCristian Pallares 7841*b3fce824SCristian Pallarés $found || test -f "$lib" \ 7842*b3fce824SCristian Pallarés || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 7843189777a2SCristian Pallares 7844189777a2SCristian Pallares # Check to see that this really is a libtool archive. 7845189777a2SCristian Pallares func_lalib_unsafe_p "$lib" \ 7846*b3fce824SCristian Pallarés || func_fatal_error "'$lib' is not a valid libtool archive" 7847189777a2SCristian Pallares 7848189777a2SCristian Pallares func_dirname "$lib" "" "." 7849*b3fce824SCristian Pallarés ladir=$func_dirname_result 7850189777a2SCristian Pallares 7851189777a2SCristian Pallares dlname= 7852189777a2SCristian Pallares dlopen= 7853189777a2SCristian Pallares dlpreopen= 7854189777a2SCristian Pallares libdir= 7855189777a2SCristian Pallares library_names= 7856189777a2SCristian Pallares old_library= 7857189777a2SCristian Pallares inherited_linker_flags= 7858189777a2SCristian Pallares # If the library was installed with an old release of libtool, 7859189777a2SCristian Pallares # it will not redefine variables installed, or shouldnotlink 7860189777a2SCristian Pallares installed=yes 7861189777a2SCristian Pallares shouldnotlink=no 7862189777a2SCristian Pallares avoidtemprpath= 7863189777a2SCristian Pallares 7864189777a2SCristian Pallares 7865189777a2SCristian Pallares # Read the .la file 7866189777a2SCristian Pallares func_source "$lib" 7867189777a2SCristian Pallares 7868189777a2SCristian Pallares # Convert "-framework foo" to "foo.ltframework" 7869189777a2SCristian Pallares if test -n "$inherited_linker_flags"; then 7870189777a2SCristian Pallares tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 7871189777a2SCristian Pallares for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 7872189777a2SCristian Pallares case " $new_inherited_linker_flags " in 7873189777a2SCristian Pallares *" $tmp_inherited_linker_flag "*) ;; 7874189777a2SCristian Pallares *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 7875189777a2SCristian Pallares esac 7876189777a2SCristian Pallares done 7877189777a2SCristian Pallares fi 7878189777a2SCristian Pallares dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7879*b3fce824SCristian Pallarés if test lib,link = "$linkmode,$pass" || 7880*b3fce824SCristian Pallarés test prog,scan = "$linkmode,$pass" || 7881*b3fce824SCristian Pallarés { test prog != "$linkmode" && test lib != "$linkmode"; }; then 7882189777a2SCristian Pallares test -n "$dlopen" && func_append dlfiles " $dlopen" 7883189777a2SCristian Pallares test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 7884189777a2SCristian Pallares fi 7885189777a2SCristian Pallares 7886*b3fce824SCristian Pallarés if test conv = "$pass"; then 7887189777a2SCristian Pallares # Only check for convenience libraries 7888189777a2SCristian Pallares deplibs="$lib $deplibs" 7889189777a2SCristian Pallares if test -z "$libdir"; then 7890189777a2SCristian Pallares if test -z "$old_library"; then 7891*b3fce824SCristian Pallarés func_fatal_error "cannot find name of link library for '$lib'" 7892189777a2SCristian Pallares fi 7893189777a2SCristian Pallares # It is a libtool convenience library, so add in its objects. 7894189777a2SCristian Pallares func_append convenience " $ladir/$objdir/$old_library" 7895189777a2SCristian Pallares func_append old_convenience " $ladir/$objdir/$old_library" 7896189777a2SCristian Pallares tmp_libs= 7897189777a2SCristian Pallares for deplib in $dependency_libs; do 7898189777a2SCristian Pallares deplibs="$deplib $deplibs" 7899189777a2SCristian Pallares if $opt_preserve_dup_deps; then 7900189777a2SCristian Pallares case "$tmp_libs " in 7901189777a2SCristian Pallares *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7902189777a2SCristian Pallares esac 7903189777a2SCristian Pallares fi 7904189777a2SCristian Pallares func_append tmp_libs " $deplib" 7905189777a2SCristian Pallares done 7906*b3fce824SCristian Pallarés elif test prog != "$linkmode" && test lib != "$linkmode"; then 7907*b3fce824SCristian Pallarés func_fatal_error "'$lib' is not a convenience library" 7908189777a2SCristian Pallares fi 7909189777a2SCristian Pallares continue 7910189777a2SCristian Pallares fi # $pass = conv 7911189777a2SCristian Pallares 7912189777a2SCristian Pallares 7913189777a2SCristian Pallares # Get the name of the library we link against. 7914189777a2SCristian Pallares linklib= 7915189777a2SCristian Pallares if test -n "$old_library" && 7916*b3fce824SCristian Pallarés { test yes = "$prefer_static_libs" || 7917*b3fce824SCristian Pallarés test built,no = "$prefer_static_libs,$installed"; }; then 7918189777a2SCristian Pallares linklib=$old_library 7919189777a2SCristian Pallares else 7920189777a2SCristian Pallares for l in $old_library $library_names; do 7921*b3fce824SCristian Pallarés linklib=$l 7922189777a2SCristian Pallares done 7923189777a2SCristian Pallares fi 7924189777a2SCristian Pallares if test -z "$linklib"; then 7925*b3fce824SCristian Pallarés func_fatal_error "cannot find name of link library for '$lib'" 7926189777a2SCristian Pallares fi 7927189777a2SCristian Pallares 7928189777a2SCristian Pallares # This library was specified with -dlopen. 7929*b3fce824SCristian Pallarés if test dlopen = "$pass"; then 7930*b3fce824SCristian Pallarés test -z "$libdir" \ 7931*b3fce824SCristian Pallarés && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 7932189777a2SCristian Pallares if test -z "$dlname" || 7933*b3fce824SCristian Pallarés test yes != "$dlopen_support" || 7934*b3fce824SCristian Pallarés test no = "$build_libtool_libs" 7935*b3fce824SCristian Pallarés then 7936189777a2SCristian Pallares # If there is no dlname, no dlopen support or we're linking 7937189777a2SCristian Pallares # statically, we need to preload. We also need to preload any 7938189777a2SCristian Pallares # dependent libraries so libltdl's deplib preloader doesn't 7939189777a2SCristian Pallares # bomb out in the load deplibs phase. 7940189777a2SCristian Pallares func_append dlprefiles " $lib $dependency_libs" 7941189777a2SCristian Pallares else 7942189777a2SCristian Pallares func_append newdlfiles " $lib" 7943189777a2SCristian Pallares fi 7944189777a2SCristian Pallares continue 7945189777a2SCristian Pallares fi # $pass = dlopen 7946189777a2SCristian Pallares 7947189777a2SCristian Pallares # We need an absolute path. 7948189777a2SCristian Pallares case $ladir in 7949*b3fce824SCristian Pallarés [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 7950189777a2SCristian Pallares *) 7951189777a2SCristian Pallares abs_ladir=`cd "$ladir" && pwd` 7952189777a2SCristian Pallares if test -z "$abs_ladir"; then 7953*b3fce824SCristian Pallarés func_warning "cannot determine absolute directory name of '$ladir'" 7954189777a2SCristian Pallares func_warning "passing it literally to the linker, although it might fail" 7955*b3fce824SCristian Pallarés abs_ladir=$ladir 7956189777a2SCristian Pallares fi 7957189777a2SCristian Pallares ;; 7958189777a2SCristian Pallares esac 7959189777a2SCristian Pallares func_basename "$lib" 7960*b3fce824SCristian Pallarés laname=$func_basename_result 7961189777a2SCristian Pallares 7962189777a2SCristian Pallares # Find the relevant object directory and library name. 7963*b3fce824SCristian Pallarés if test yes = "$installed"; then 7964189777a2SCristian Pallares if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7965*b3fce824SCristian Pallarés func_warning "library '$lib' was moved." 7966*b3fce824SCristian Pallarés dir=$ladir 7967*b3fce824SCristian Pallarés absdir=$abs_ladir 7968*b3fce824SCristian Pallarés libdir=$abs_ladir 7969189777a2SCristian Pallares else 7970*b3fce824SCristian Pallarés dir=$lt_sysroot$libdir 7971*b3fce824SCristian Pallarés absdir=$lt_sysroot$libdir 7972189777a2SCristian Pallares fi 7973*b3fce824SCristian Pallarés test yes = "$hardcode_automatic" && avoidtemprpath=yes 7974189777a2SCristian Pallares else 7975189777a2SCristian Pallares if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7976*b3fce824SCristian Pallarés dir=$ladir 7977*b3fce824SCristian Pallarés absdir=$abs_ladir 7978189777a2SCristian Pallares # Remove this search path later 7979189777a2SCristian Pallares func_append notinst_path " $abs_ladir" 7980189777a2SCristian Pallares else 7981*b3fce824SCristian Pallarés dir=$ladir/$objdir 7982*b3fce824SCristian Pallarés absdir=$abs_ladir/$objdir 7983189777a2SCristian Pallares # Remove this search path later 7984189777a2SCristian Pallares func_append notinst_path " $abs_ladir" 7985189777a2SCristian Pallares fi 7986189777a2SCristian Pallares fi # $installed = yes 7987189777a2SCristian Pallares func_stripname 'lib' '.la' "$laname" 7988189777a2SCristian Pallares name=$func_stripname_result 7989189777a2SCristian Pallares 7990189777a2SCristian Pallares # This library was specified with -dlpreopen. 7991*b3fce824SCristian Pallarés if test dlpreopen = "$pass"; then 7992*b3fce824SCristian Pallarés if test -z "$libdir" && test prog = "$linkmode"; then 7993*b3fce824SCristian Pallarés func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 7994189777a2SCristian Pallares fi 7995*b3fce824SCristian Pallarés case $host in 7996189777a2SCristian Pallares # special handling for platforms with PE-DLLs. 7997189777a2SCristian Pallares *cygwin* | *mingw* | *cegcc* ) 7998189777a2SCristian Pallares # Linker will automatically link against shared library if both 7999189777a2SCristian Pallares # static and shared are present. Therefore, ensure we extract 8000189777a2SCristian Pallares # symbols from the import library if a shared library is present 8001189777a2SCristian Pallares # (otherwise, the dlopen module name will be incorrect). We do 8002189777a2SCristian Pallares # this by putting the import library name into $newdlprefiles. 8003189777a2SCristian Pallares # We recover the dlopen module name by 'saving' the la file 8004189777a2SCristian Pallares # name in a special purpose variable, and (later) extracting the 8005189777a2SCristian Pallares # dlname from the la file. 8006189777a2SCristian Pallares if test -n "$dlname"; then 8007189777a2SCristian Pallares func_tr_sh "$dir/$linklib" 8008189777a2SCristian Pallares eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8009189777a2SCristian Pallares func_append newdlprefiles " $dir/$linklib" 8010189777a2SCristian Pallares else 8011189777a2SCristian Pallares func_append newdlprefiles " $dir/$old_library" 8012189777a2SCristian Pallares # Keep a list of preopened convenience libraries to check 8013189777a2SCristian Pallares # that they are being used correctly in the link pass. 8014189777a2SCristian Pallares test -z "$libdir" && \ 8015189777a2SCristian Pallares func_append dlpreconveniencelibs " $dir/$old_library" 8016189777a2SCristian Pallares fi 8017189777a2SCristian Pallares ;; 8018189777a2SCristian Pallares * ) 8019189777a2SCristian Pallares # Prefer using a static library (so that no silly _DYNAMIC symbols 8020189777a2SCristian Pallares # are required to link). 8021189777a2SCristian Pallares if test -n "$old_library"; then 8022189777a2SCristian Pallares func_append newdlprefiles " $dir/$old_library" 8023189777a2SCristian Pallares # Keep a list of preopened convenience libraries to check 8024189777a2SCristian Pallares # that they are being used correctly in the link pass. 8025189777a2SCristian Pallares test -z "$libdir" && \ 8026189777a2SCristian Pallares func_append dlpreconveniencelibs " $dir/$old_library" 8027189777a2SCristian Pallares # Otherwise, use the dlname, so that lt_dlopen finds it. 8028189777a2SCristian Pallares elif test -n "$dlname"; then 8029189777a2SCristian Pallares func_append newdlprefiles " $dir/$dlname" 8030189777a2SCristian Pallares else 8031189777a2SCristian Pallares func_append newdlprefiles " $dir/$linklib" 8032189777a2SCristian Pallares fi 8033189777a2SCristian Pallares ;; 8034189777a2SCristian Pallares esac 8035189777a2SCristian Pallares fi # $pass = dlpreopen 8036189777a2SCristian Pallares 8037189777a2SCristian Pallares if test -z "$libdir"; then 8038189777a2SCristian Pallares # Link the convenience library 8039*b3fce824SCristian Pallarés if test lib = "$linkmode"; then 8040189777a2SCristian Pallares deplibs="$dir/$old_library $deplibs" 8041*b3fce824SCristian Pallarés elif test prog,link = "$linkmode,$pass"; then 8042189777a2SCristian Pallares compile_deplibs="$dir/$old_library $compile_deplibs" 8043189777a2SCristian Pallares finalize_deplibs="$dir/$old_library $finalize_deplibs" 8044189777a2SCristian Pallares else 8045189777a2SCristian Pallares deplibs="$lib $deplibs" # used for prog,scan pass 8046189777a2SCristian Pallares fi 8047189777a2SCristian Pallares continue 8048189777a2SCristian Pallares fi 8049189777a2SCristian Pallares 8050189777a2SCristian Pallares 8051*b3fce824SCristian Pallarés if test prog = "$linkmode" && test link != "$pass"; then 8052189777a2SCristian Pallares func_append newlib_search_path " $ladir" 8053189777a2SCristian Pallares deplibs="$lib $deplibs" 8054189777a2SCristian Pallares 8055*b3fce824SCristian Pallarés linkalldeplibs=false 8056*b3fce824SCristian Pallarés if test no != "$link_all_deplibs" || test -z "$library_names" || 8057*b3fce824SCristian Pallarés test no = "$build_libtool_libs"; then 8058*b3fce824SCristian Pallarés linkalldeplibs=: 8059189777a2SCristian Pallares fi 8060189777a2SCristian Pallares 8061189777a2SCristian Pallares tmp_libs= 8062189777a2SCristian Pallares for deplib in $dependency_libs; do 8063189777a2SCristian Pallares case $deplib in 8064189777a2SCristian Pallares -L*) func_stripname '-L' '' "$deplib" 8065189777a2SCristian Pallares func_resolve_sysroot "$func_stripname_result" 8066189777a2SCristian Pallares func_append newlib_search_path " $func_resolve_sysroot_result" 8067189777a2SCristian Pallares ;; 8068189777a2SCristian Pallares esac 8069189777a2SCristian Pallares # Need to link against all dependency_libs? 8070*b3fce824SCristian Pallarés if $linkalldeplibs; then 8071189777a2SCristian Pallares deplibs="$deplib $deplibs" 8072189777a2SCristian Pallares else 8073189777a2SCristian Pallares # Need to hardcode shared library paths 8074189777a2SCristian Pallares # or/and link against static libraries 8075189777a2SCristian Pallares newdependency_libs="$deplib $newdependency_libs" 8076189777a2SCristian Pallares fi 8077189777a2SCristian Pallares if $opt_preserve_dup_deps; then 8078189777a2SCristian Pallares case "$tmp_libs " in 8079189777a2SCristian Pallares *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8080189777a2SCristian Pallares esac 8081189777a2SCristian Pallares fi 8082189777a2SCristian Pallares func_append tmp_libs " $deplib" 8083189777a2SCristian Pallares done # for deplib 8084189777a2SCristian Pallares continue 8085189777a2SCristian Pallares fi # $linkmode = prog... 8086189777a2SCristian Pallares 8087*b3fce824SCristian Pallarés if test prog,link = "$linkmode,$pass"; then 8088189777a2SCristian Pallares if test -n "$library_names" && 8089*b3fce824SCristian Pallarés { { test no = "$prefer_static_libs" || 8090*b3fce824SCristian Pallarés test built,yes = "$prefer_static_libs,$installed"; } || 8091189777a2SCristian Pallares test -z "$old_library"; }; then 8092189777a2SCristian Pallares # We need to hardcode the library path 8093189777a2SCristian Pallares if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8094189777a2SCristian Pallares # Make sure the rpath contains only unique directories. 8095*b3fce824SCristian Pallarés case $temp_rpath: in 8096189777a2SCristian Pallares *"$absdir:"*) ;; 8097189777a2SCristian Pallares *) func_append temp_rpath "$absdir:" ;; 8098189777a2SCristian Pallares esac 8099189777a2SCristian Pallares fi 8100189777a2SCristian Pallares 8101189777a2SCristian Pallares # Hardcode the library path. 8102189777a2SCristian Pallares # Skip directories that are in the system default run-time 8103189777a2SCristian Pallares # search path. 8104189777a2SCristian Pallares case " $sys_lib_dlsearch_path " in 8105189777a2SCristian Pallares *" $absdir "*) ;; 8106189777a2SCristian Pallares *) 8107189777a2SCristian Pallares case "$compile_rpath " in 8108189777a2SCristian Pallares *" $absdir "*) ;; 8109189777a2SCristian Pallares *) func_append compile_rpath " $absdir" ;; 8110189777a2SCristian Pallares esac 8111189777a2SCristian Pallares ;; 8112189777a2SCristian Pallares esac 8113189777a2SCristian Pallares case " $sys_lib_dlsearch_path " in 8114189777a2SCristian Pallares *" $libdir "*) ;; 8115189777a2SCristian Pallares *) 8116189777a2SCristian Pallares case "$finalize_rpath " in 8117189777a2SCristian Pallares *" $libdir "*) ;; 8118189777a2SCristian Pallares *) func_append finalize_rpath " $libdir" ;; 8119189777a2SCristian Pallares esac 8120189777a2SCristian Pallares ;; 8121189777a2SCristian Pallares esac 8122189777a2SCristian Pallares fi # $linkmode,$pass = prog,link... 8123189777a2SCristian Pallares 8124*b3fce824SCristian Pallarés if $alldeplibs && 8125*b3fce824SCristian Pallarés { test pass_all = "$deplibs_check_method" || 8126*b3fce824SCristian Pallarés { test yes = "$build_libtool_libs" && 8127189777a2SCristian Pallares test -n "$library_names"; }; }; then 8128189777a2SCristian Pallares # We only need to search for static libraries 8129189777a2SCristian Pallares continue 8130189777a2SCristian Pallares fi 8131189777a2SCristian Pallares fi 8132189777a2SCristian Pallares 8133189777a2SCristian Pallares link_static=no # Whether the deplib will be linked statically 8134189777a2SCristian Pallares use_static_libs=$prefer_static_libs 8135*b3fce824SCristian Pallarés if test built = "$use_static_libs" && test yes = "$installed"; then 8136189777a2SCristian Pallares use_static_libs=no 8137189777a2SCristian Pallares fi 8138189777a2SCristian Pallares if test -n "$library_names" && 8139*b3fce824SCristian Pallarés { test no = "$use_static_libs" || test -z "$old_library"; }; then 8140189777a2SCristian Pallares case $host in 8141*b3fce824SCristian Pallarés *cygwin* | *mingw* | *cegcc* | *os2*) 8142189777a2SCristian Pallares # No point in relinking DLLs because paths are not encoded 8143189777a2SCristian Pallares func_append notinst_deplibs " $lib" 8144189777a2SCristian Pallares need_relink=no 8145189777a2SCristian Pallares ;; 8146189777a2SCristian Pallares *) 8147*b3fce824SCristian Pallarés if test no = "$installed"; then 8148189777a2SCristian Pallares func_append notinst_deplibs " $lib" 8149189777a2SCristian Pallares need_relink=yes 8150189777a2SCristian Pallares fi 8151189777a2SCristian Pallares ;; 8152189777a2SCristian Pallares esac 8153189777a2SCristian Pallares # This is a shared library 8154189777a2SCristian Pallares 8155189777a2SCristian Pallares # Warn about portability, can't link against -module's on some 8156189777a2SCristian Pallares # systems (darwin). Don't bleat about dlopened modules though! 8157*b3fce824SCristian Pallarés dlopenmodule= 8158189777a2SCristian Pallares for dlpremoduletest in $dlprefiles; do 8159189777a2SCristian Pallares if test "X$dlpremoduletest" = "X$lib"; then 8160*b3fce824SCristian Pallarés dlopenmodule=$dlpremoduletest 8161189777a2SCristian Pallares break 8162189777a2SCristian Pallares fi 8163189777a2SCristian Pallares done 8164*b3fce824SCristian Pallarés if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8165189777a2SCristian Pallares echo 8166*b3fce824SCristian Pallarés if test prog = "$linkmode"; then 8167189777a2SCristian Pallares $ECHO "*** Warning: Linking the executable $output against the loadable module" 8168189777a2SCristian Pallares else 8169189777a2SCristian Pallares $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8170189777a2SCristian Pallares fi 8171189777a2SCristian Pallares $ECHO "*** $linklib is not portable!" 8172189777a2SCristian Pallares fi 8173*b3fce824SCristian Pallarés if test lib = "$linkmode" && 8174*b3fce824SCristian Pallarés test yes = "$hardcode_into_libs"; then 8175189777a2SCristian Pallares # Hardcode the library path. 8176189777a2SCristian Pallares # Skip directories that are in the system default run-time 8177189777a2SCristian Pallares # search path. 8178189777a2SCristian Pallares case " $sys_lib_dlsearch_path " in 8179189777a2SCristian Pallares *" $absdir "*) ;; 8180189777a2SCristian Pallares *) 8181189777a2SCristian Pallares case "$compile_rpath " in 8182189777a2SCristian Pallares *" $absdir "*) ;; 8183189777a2SCristian Pallares *) func_append compile_rpath " $absdir" ;; 8184189777a2SCristian Pallares esac 8185189777a2SCristian Pallares ;; 8186189777a2SCristian Pallares esac 8187189777a2SCristian Pallares case " $sys_lib_dlsearch_path " in 8188189777a2SCristian Pallares *" $libdir "*) ;; 8189189777a2SCristian Pallares *) 8190189777a2SCristian Pallares case "$finalize_rpath " in 8191189777a2SCristian Pallares *" $libdir "*) ;; 8192189777a2SCristian Pallares *) func_append finalize_rpath " $libdir" ;; 8193189777a2SCristian Pallares esac 8194189777a2SCristian Pallares ;; 8195189777a2SCristian Pallares esac 8196189777a2SCristian Pallares fi 8197189777a2SCristian Pallares 8198189777a2SCristian Pallares if test -n "$old_archive_from_expsyms_cmds"; then 8199189777a2SCristian Pallares # figure out the soname 8200189777a2SCristian Pallares set dummy $library_names 8201189777a2SCristian Pallares shift 8202*b3fce824SCristian Pallarés realname=$1 8203189777a2SCristian Pallares shift 8204189777a2SCristian Pallares libname=`eval "\\$ECHO \"$libname_spec\""` 8205189777a2SCristian Pallares # use dlname if we got it. it's perfectly good, no? 8206189777a2SCristian Pallares if test -n "$dlname"; then 8207*b3fce824SCristian Pallarés soname=$dlname 8208189777a2SCristian Pallares elif test -n "$soname_spec"; then 8209189777a2SCristian Pallares # bleh windows 8210189777a2SCristian Pallares case $host in 8211*b3fce824SCristian Pallarés *cygwin* | mingw* | *cegcc* | *os2*) 8212189777a2SCristian Pallares func_arith $current - $age 8213189777a2SCristian Pallares major=$func_arith_result 8214*b3fce824SCristian Pallarés versuffix=-$major 8215189777a2SCristian Pallares ;; 8216189777a2SCristian Pallares esac 8217189777a2SCristian Pallares eval soname=\"$soname_spec\" 8218189777a2SCristian Pallares else 8219*b3fce824SCristian Pallarés soname=$realname 8220189777a2SCristian Pallares fi 8221189777a2SCristian Pallares 8222189777a2SCristian Pallares # Make a new name for the extract_expsyms_cmds to use 8223*b3fce824SCristian Pallarés soroot=$soname 8224189777a2SCristian Pallares func_basename "$soroot" 8225*b3fce824SCristian Pallarés soname=$func_basename_result 8226189777a2SCristian Pallares func_stripname 'lib' '.dll' "$soname" 8227189777a2SCristian Pallares newlib=libimp-$func_stripname_result.a 8228189777a2SCristian Pallares 8229189777a2SCristian Pallares # If the library has no export list, then create one now 8230189777a2SCristian Pallares if test -f "$output_objdir/$soname-def"; then : 8231189777a2SCristian Pallares else 8232*b3fce824SCristian Pallarés func_verbose "extracting exported symbol list from '$soname'" 8233189777a2SCristian Pallares func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8234189777a2SCristian Pallares fi 8235189777a2SCristian Pallares 8236189777a2SCristian Pallares # Create $newlib 8237189777a2SCristian Pallares if test -f "$output_objdir/$newlib"; then :; else 8238*b3fce824SCristian Pallarés func_verbose "generating import library for '$soname'" 8239189777a2SCristian Pallares func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8240189777a2SCristian Pallares fi 8241189777a2SCristian Pallares # make sure the library variables are pointing to the new library 8242189777a2SCristian Pallares dir=$output_objdir 8243189777a2SCristian Pallares linklib=$newlib 8244189777a2SCristian Pallares fi # test -n "$old_archive_from_expsyms_cmds" 8245189777a2SCristian Pallares 8246*b3fce824SCristian Pallarés if test prog = "$linkmode" || test relink != "$opt_mode"; then 8247189777a2SCristian Pallares add_shlibpath= 8248189777a2SCristian Pallares add_dir= 8249189777a2SCristian Pallares add= 8250189777a2SCristian Pallares lib_linked=yes 8251189777a2SCristian Pallares case $hardcode_action in 8252189777a2SCristian Pallares immediate | unsupported) 8253*b3fce824SCristian Pallarés if test no = "$hardcode_direct"; then 8254*b3fce824SCristian Pallarés add=$dir/$linklib 8255189777a2SCristian Pallares case $host in 8256*b3fce824SCristian Pallarés *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8257*b3fce824SCristian Pallarés *-*-sysv4*uw2*) add_dir=-L$dir ;; 8258189777a2SCristian Pallares *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8259*b3fce824SCristian Pallarés *-*-unixware7*) add_dir=-L$dir ;; 8260189777a2SCristian Pallares *-*-darwin* ) 8261189777a2SCristian Pallares # if the lib is a (non-dlopened) module then we cannot 8262189777a2SCristian Pallares # link against it, someone is ignoring the earlier warnings 8263189777a2SCristian Pallares if /usr/bin/file -L $add 2> /dev/null | 8264189777a2SCristian Pallares $GREP ": [^:]* bundle" >/dev/null; then 8265189777a2SCristian Pallares if test "X$dlopenmodule" != "X$lib"; then 8266189777a2SCristian Pallares $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8267189777a2SCristian Pallares if test -z "$old_library"; then 8268189777a2SCristian Pallares echo 8269189777a2SCristian Pallares echo "*** And there doesn't seem to be a static archive available" 8270189777a2SCristian Pallares echo "*** The link will probably fail, sorry" 8271189777a2SCristian Pallares else 8272*b3fce824SCristian Pallarés add=$dir/$old_library 8273189777a2SCristian Pallares fi 8274189777a2SCristian Pallares elif test -n "$old_library"; then 8275*b3fce824SCristian Pallarés add=$dir/$old_library 8276189777a2SCristian Pallares fi 8277189777a2SCristian Pallares fi 8278189777a2SCristian Pallares esac 8279*b3fce824SCristian Pallarés elif test no = "$hardcode_minus_L"; then 8280189777a2SCristian Pallares case $host in 8281*b3fce824SCristian Pallarés *-*-sunos*) add_shlibpath=$dir ;; 8282189777a2SCristian Pallares esac 8283*b3fce824SCristian Pallarés add_dir=-L$dir 8284*b3fce824SCristian Pallarés add=-l$name 8285*b3fce824SCristian Pallarés elif test no = "$hardcode_shlibpath_var"; then 8286*b3fce824SCristian Pallarés add_shlibpath=$dir 8287*b3fce824SCristian Pallarés add=-l$name 8288189777a2SCristian Pallares else 8289189777a2SCristian Pallares lib_linked=no 8290189777a2SCristian Pallares fi 8291189777a2SCristian Pallares ;; 8292189777a2SCristian Pallares relink) 8293*b3fce824SCristian Pallarés if test yes = "$hardcode_direct" && 8294*b3fce824SCristian Pallarés test no = "$hardcode_direct_absolute"; then 8295*b3fce824SCristian Pallarés add=$dir/$linklib 8296*b3fce824SCristian Pallarés elif test yes = "$hardcode_minus_L"; then 8297*b3fce824SCristian Pallarés add_dir=-L$absdir 8298189777a2SCristian Pallares # Try looking first in the location we're being installed to. 8299189777a2SCristian Pallares if test -n "$inst_prefix_dir"; then 8300189777a2SCristian Pallares case $libdir in 8301189777a2SCristian Pallares [\\/]*) 8302189777a2SCristian Pallares func_append add_dir " -L$inst_prefix_dir$libdir" 8303189777a2SCristian Pallares ;; 8304189777a2SCristian Pallares esac 8305189777a2SCristian Pallares fi 8306*b3fce824SCristian Pallarés add=-l$name 8307*b3fce824SCristian Pallarés elif test yes = "$hardcode_shlibpath_var"; then 8308*b3fce824SCristian Pallarés add_shlibpath=$dir 8309*b3fce824SCristian Pallarés add=-l$name 8310189777a2SCristian Pallares else 8311189777a2SCristian Pallares lib_linked=no 8312189777a2SCristian Pallares fi 8313189777a2SCristian Pallares ;; 8314189777a2SCristian Pallares *) lib_linked=no ;; 8315189777a2SCristian Pallares esac 8316189777a2SCristian Pallares 8317*b3fce824SCristian Pallarés if test yes != "$lib_linked"; then 8318189777a2SCristian Pallares func_fatal_configuration "unsupported hardcode properties" 8319189777a2SCristian Pallares fi 8320189777a2SCristian Pallares 8321189777a2SCristian Pallares if test -n "$add_shlibpath"; then 8322189777a2SCristian Pallares case :$compile_shlibpath: in 8323189777a2SCristian Pallares *":$add_shlibpath:"*) ;; 8324189777a2SCristian Pallares *) func_append compile_shlibpath "$add_shlibpath:" ;; 8325189777a2SCristian Pallares esac 8326189777a2SCristian Pallares fi 8327*b3fce824SCristian Pallarés if test prog = "$linkmode"; then 8328189777a2SCristian Pallares test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8329189777a2SCristian Pallares test -n "$add" && compile_deplibs="$add $compile_deplibs" 8330189777a2SCristian Pallares else 8331189777a2SCristian Pallares test -n "$add_dir" && deplibs="$add_dir $deplibs" 8332189777a2SCristian Pallares test -n "$add" && deplibs="$add $deplibs" 8333*b3fce824SCristian Pallarés if test yes != "$hardcode_direct" && 8334*b3fce824SCristian Pallarés test yes != "$hardcode_minus_L" && 8335*b3fce824SCristian Pallarés test yes = "$hardcode_shlibpath_var"; then 8336189777a2SCristian Pallares case :$finalize_shlibpath: in 8337189777a2SCristian Pallares *":$libdir:"*) ;; 8338189777a2SCristian Pallares *) func_append finalize_shlibpath "$libdir:" ;; 8339189777a2SCristian Pallares esac 8340189777a2SCristian Pallares fi 8341189777a2SCristian Pallares fi 8342189777a2SCristian Pallares fi 8343189777a2SCristian Pallares 8344*b3fce824SCristian Pallarés if test prog = "$linkmode" || test relink = "$opt_mode"; then 8345189777a2SCristian Pallares add_shlibpath= 8346189777a2SCristian Pallares add_dir= 8347189777a2SCristian Pallares add= 8348189777a2SCristian Pallares # Finalize command for both is simple: just hardcode it. 8349*b3fce824SCristian Pallarés if test yes = "$hardcode_direct" && 8350*b3fce824SCristian Pallarés test no = "$hardcode_direct_absolute"; then 8351*b3fce824SCristian Pallarés add=$libdir/$linklib 8352*b3fce824SCristian Pallarés elif test yes = "$hardcode_minus_L"; then 8353*b3fce824SCristian Pallarés add_dir=-L$libdir 8354*b3fce824SCristian Pallarés add=-l$name 8355*b3fce824SCristian Pallarés elif test yes = "$hardcode_shlibpath_var"; then 8356189777a2SCristian Pallares case :$finalize_shlibpath: in 8357189777a2SCristian Pallares *":$libdir:"*) ;; 8358189777a2SCristian Pallares *) func_append finalize_shlibpath "$libdir:" ;; 8359189777a2SCristian Pallares esac 8360*b3fce824SCristian Pallarés add=-l$name 8361*b3fce824SCristian Pallarés elif test yes = "$hardcode_automatic"; then 8362189777a2SCristian Pallares if test -n "$inst_prefix_dir" && 8363189777a2SCristian Pallares test -f "$inst_prefix_dir$libdir/$linklib"; then 8364*b3fce824SCristian Pallarés add=$inst_prefix_dir$libdir/$linklib 8365189777a2SCristian Pallares else 8366*b3fce824SCristian Pallarés add=$libdir/$linklib 8367189777a2SCristian Pallares fi 8368189777a2SCristian Pallares else 8369189777a2SCristian Pallares # We cannot seem to hardcode it, guess we'll fake it. 8370*b3fce824SCristian Pallarés add_dir=-L$libdir 8371189777a2SCristian Pallares # Try looking first in the location we're being installed to. 8372189777a2SCristian Pallares if test -n "$inst_prefix_dir"; then 8373189777a2SCristian Pallares case $libdir in 8374189777a2SCristian Pallares [\\/]*) 8375189777a2SCristian Pallares func_append add_dir " -L$inst_prefix_dir$libdir" 8376189777a2SCristian Pallares ;; 8377189777a2SCristian Pallares esac 8378189777a2SCristian Pallares fi 8379*b3fce824SCristian Pallarés add=-l$name 8380189777a2SCristian Pallares fi 8381189777a2SCristian Pallares 8382*b3fce824SCristian Pallarés if test prog = "$linkmode"; then 8383189777a2SCristian Pallares test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8384189777a2SCristian Pallares test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8385189777a2SCristian Pallares else 8386189777a2SCristian Pallares test -n "$add_dir" && deplibs="$add_dir $deplibs" 8387189777a2SCristian Pallares test -n "$add" && deplibs="$add $deplibs" 8388189777a2SCristian Pallares fi 8389189777a2SCristian Pallares fi 8390*b3fce824SCristian Pallarés elif test prog = "$linkmode"; then 8391189777a2SCristian Pallares # Here we assume that one of hardcode_direct or hardcode_minus_L 8392189777a2SCristian Pallares # is not unsupported. This is valid on all known static and 8393189777a2SCristian Pallares # shared platforms. 8394*b3fce824SCristian Pallarés if test unsupported != "$hardcode_direct"; then 8395*b3fce824SCristian Pallarés test -n "$old_library" && linklib=$old_library 8396189777a2SCristian Pallares compile_deplibs="$dir/$linklib $compile_deplibs" 8397189777a2SCristian Pallares finalize_deplibs="$dir/$linklib $finalize_deplibs" 8398189777a2SCristian Pallares else 8399189777a2SCristian Pallares compile_deplibs="-l$name -L$dir $compile_deplibs" 8400189777a2SCristian Pallares finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8401189777a2SCristian Pallares fi 8402*b3fce824SCristian Pallarés elif test yes = "$build_libtool_libs"; then 8403189777a2SCristian Pallares # Not a shared library 8404*b3fce824SCristian Pallarés if test pass_all != "$deplibs_check_method"; then 8405189777a2SCristian Pallares # We're trying link a shared library against a static one 8406189777a2SCristian Pallares # but the system doesn't support it. 8407189777a2SCristian Pallares 8408189777a2SCristian Pallares # Just print a warning and add the library to dependency_libs so 8409189777a2SCristian Pallares # that the program can be linked against the static library. 8410189777a2SCristian Pallares echo 8411189777a2SCristian Pallares $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8412189777a2SCristian Pallares echo "*** I have the capability to make that library automatically link in when" 8413189777a2SCristian Pallares echo "*** you link to this library. But I can only do this if you have a" 8414189777a2SCristian Pallares echo "*** shared version of the library, which you do not appear to have." 8415*b3fce824SCristian Pallarés if test yes = "$module"; then 8416189777a2SCristian Pallares echo "*** But as you try to build a module library, libtool will still create " 8417189777a2SCristian Pallares echo "*** a static module, that should work as long as the dlopening application" 8418189777a2SCristian Pallares echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8419189777a2SCristian Pallares if test -z "$global_symbol_pipe"; then 8420189777a2SCristian Pallares echo 8421189777a2SCristian Pallares echo "*** However, this would only work if libtool was able to extract symbol" 8422*b3fce824SCristian Pallarés echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8423189777a2SCristian Pallares echo "*** not find such a program. So, this module is probably useless." 8424*b3fce824SCristian Pallarés echo "*** 'nm' from GNU binutils and a full rebuild may help." 8425189777a2SCristian Pallares fi 8426*b3fce824SCristian Pallarés if test no = "$build_old_libs"; then 8427189777a2SCristian Pallares build_libtool_libs=module 8428189777a2SCristian Pallares build_old_libs=yes 8429189777a2SCristian Pallares else 8430189777a2SCristian Pallares build_libtool_libs=no 8431189777a2SCristian Pallares fi 8432189777a2SCristian Pallares fi 8433189777a2SCristian Pallares else 8434189777a2SCristian Pallares deplibs="$dir/$old_library $deplibs" 8435189777a2SCristian Pallares link_static=yes 8436189777a2SCristian Pallares fi 8437189777a2SCristian Pallares fi # link shared/static library? 8438189777a2SCristian Pallares 8439*b3fce824SCristian Pallarés if test lib = "$linkmode"; then 8440189777a2SCristian Pallares if test -n "$dependency_libs" && 8441*b3fce824SCristian Pallarés { test yes != "$hardcode_into_libs" || 8442*b3fce824SCristian Pallarés test yes = "$build_old_libs" || 8443*b3fce824SCristian Pallarés test yes = "$link_static"; }; then 8444189777a2SCristian Pallares # Extract -R from dependency_libs 8445189777a2SCristian Pallares temp_deplibs= 8446189777a2SCristian Pallares for libdir in $dependency_libs; do 8447189777a2SCristian Pallares case $libdir in 8448189777a2SCristian Pallares -R*) func_stripname '-R' '' "$libdir" 8449189777a2SCristian Pallares temp_xrpath=$func_stripname_result 8450189777a2SCristian Pallares case " $xrpath " in 8451189777a2SCristian Pallares *" $temp_xrpath "*) ;; 8452189777a2SCristian Pallares *) func_append xrpath " $temp_xrpath";; 8453189777a2SCristian Pallares esac;; 8454189777a2SCristian Pallares *) func_append temp_deplibs " $libdir";; 8455189777a2SCristian Pallares esac 8456189777a2SCristian Pallares done 8457*b3fce824SCristian Pallarés dependency_libs=$temp_deplibs 8458189777a2SCristian Pallares fi 8459189777a2SCristian Pallares 8460189777a2SCristian Pallares func_append newlib_search_path " $absdir" 8461189777a2SCristian Pallares # Link against this library 8462*b3fce824SCristian Pallarés test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8463189777a2SCristian Pallares # ... and its dependency_libs 8464189777a2SCristian Pallares tmp_libs= 8465189777a2SCristian Pallares for deplib in $dependency_libs; do 8466189777a2SCristian Pallares newdependency_libs="$deplib $newdependency_libs" 8467189777a2SCristian Pallares case $deplib in 8468189777a2SCristian Pallares -L*) func_stripname '-L' '' "$deplib" 8469189777a2SCristian Pallares func_resolve_sysroot "$func_stripname_result";; 8470189777a2SCristian Pallares *) func_resolve_sysroot "$deplib" ;; 8471189777a2SCristian Pallares esac 8472189777a2SCristian Pallares if $opt_preserve_dup_deps; then 8473189777a2SCristian Pallares case "$tmp_libs " in 8474189777a2SCristian Pallares *" $func_resolve_sysroot_result "*) 8475189777a2SCristian Pallares func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8476189777a2SCristian Pallares esac 8477189777a2SCristian Pallares fi 8478189777a2SCristian Pallares func_append tmp_libs " $func_resolve_sysroot_result" 8479189777a2SCristian Pallares done 8480189777a2SCristian Pallares 8481*b3fce824SCristian Pallarés if test no != "$link_all_deplibs"; then 8482189777a2SCristian Pallares # Add the search paths of all dependency libraries 8483189777a2SCristian Pallares for deplib in $dependency_libs; do 8484189777a2SCristian Pallares path= 8485189777a2SCristian Pallares case $deplib in 8486*b3fce824SCristian Pallarés -L*) path=$deplib ;; 8487189777a2SCristian Pallares *.la) 8488189777a2SCristian Pallares func_resolve_sysroot "$deplib" 8489189777a2SCristian Pallares deplib=$func_resolve_sysroot_result 8490189777a2SCristian Pallares func_dirname "$deplib" "" "." 8491189777a2SCristian Pallares dir=$func_dirname_result 8492189777a2SCristian Pallares # We need an absolute path. 8493189777a2SCristian Pallares case $dir in 8494*b3fce824SCristian Pallarés [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8495189777a2SCristian Pallares *) 8496189777a2SCristian Pallares absdir=`cd "$dir" && pwd` 8497189777a2SCristian Pallares if test -z "$absdir"; then 8498*b3fce824SCristian Pallarés func_warning "cannot determine absolute directory name of '$dir'" 8499*b3fce824SCristian Pallarés absdir=$dir 8500189777a2SCristian Pallares fi 8501189777a2SCristian Pallares ;; 8502189777a2SCristian Pallares esac 8503189777a2SCristian Pallares if $GREP "^installed=no" $deplib > /dev/null; then 8504189777a2SCristian Pallares case $host in 8505189777a2SCristian Pallares *-*-darwin*) 8506189777a2SCristian Pallares depdepl= 8507*b3fce824SCristian Pallarés eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8508189777a2SCristian Pallares if test -n "$deplibrary_names"; then 8509189777a2SCristian Pallares for tmp in $deplibrary_names; do 8510189777a2SCristian Pallares depdepl=$tmp 8511189777a2SCristian Pallares done 8512189777a2SCristian Pallares if test -f "$absdir/$objdir/$depdepl"; then 8513*b3fce824SCristian Pallarés depdepl=$absdir/$objdir/$depdepl 8514*b3fce824SCristian Pallarés darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8515189777a2SCristian Pallares if test -z "$darwin_install_name"; then 8516*b3fce824SCristian Pallarés darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8517189777a2SCristian Pallares fi 8518*b3fce824SCristian Pallarés func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8519*b3fce824SCristian Pallarés func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8520189777a2SCristian Pallares path= 8521189777a2SCristian Pallares fi 8522189777a2SCristian Pallares fi 8523189777a2SCristian Pallares ;; 8524189777a2SCristian Pallares *) 8525*b3fce824SCristian Pallarés path=-L$absdir/$objdir 8526189777a2SCristian Pallares ;; 8527189777a2SCristian Pallares esac 8528189777a2SCristian Pallares else 8529*b3fce824SCristian Pallarés eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8530189777a2SCristian Pallares test -z "$libdir" && \ 8531*b3fce824SCristian Pallarés func_fatal_error "'$deplib' is not a valid libtool archive" 8532189777a2SCristian Pallares test "$absdir" != "$libdir" && \ 8533*b3fce824SCristian Pallarés func_warning "'$deplib' seems to be moved" 8534189777a2SCristian Pallares 8535*b3fce824SCristian Pallarés path=-L$absdir 8536189777a2SCristian Pallares fi 8537189777a2SCristian Pallares ;; 8538189777a2SCristian Pallares esac 8539189777a2SCristian Pallares case " $deplibs " in 8540189777a2SCristian Pallares *" $path "*) ;; 8541189777a2SCristian Pallares *) deplibs="$path $deplibs" ;; 8542189777a2SCristian Pallares esac 8543189777a2SCristian Pallares done 8544189777a2SCristian Pallares fi # link_all_deplibs != no 8545189777a2SCristian Pallares fi # linkmode = lib 8546189777a2SCristian Pallares done # for deplib in $libs 8547*b3fce824SCristian Pallarés if test link = "$pass"; then 8548*b3fce824SCristian Pallarés if test prog = "$linkmode"; then 8549189777a2SCristian Pallares compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8550189777a2SCristian Pallares finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8551189777a2SCristian Pallares else 8552189777a2SCristian Pallares compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8553189777a2SCristian Pallares fi 8554189777a2SCristian Pallares fi 8555*b3fce824SCristian Pallarés dependency_libs=$newdependency_libs 8556*b3fce824SCristian Pallarés if test dlpreopen = "$pass"; then 8557189777a2SCristian Pallares # Link the dlpreopened libraries before other libraries 8558189777a2SCristian Pallares for deplib in $save_deplibs; do 8559189777a2SCristian Pallares deplibs="$deplib $deplibs" 8560189777a2SCristian Pallares done 8561189777a2SCristian Pallares fi 8562*b3fce824SCristian Pallarés if test dlopen != "$pass"; then 8563*b3fce824SCristian Pallarés test conv = "$pass" || { 8564189777a2SCristian Pallares # Make sure lib_search_path contains only unique directories. 8565189777a2SCristian Pallares lib_search_path= 8566189777a2SCristian Pallares for dir in $newlib_search_path; do 8567189777a2SCristian Pallares case "$lib_search_path " in 8568189777a2SCristian Pallares *" $dir "*) ;; 8569189777a2SCristian Pallares *) func_append lib_search_path " $dir" ;; 8570189777a2SCristian Pallares esac 8571189777a2SCristian Pallares done 8572189777a2SCristian Pallares newlib_search_path= 8573*b3fce824SCristian Pallarés } 8574189777a2SCristian Pallares 8575*b3fce824SCristian Pallarés if test prog,link = "$linkmode,$pass"; then 8576189777a2SCristian Pallares vars="compile_deplibs finalize_deplibs" 8577*b3fce824SCristian Pallarés else 8578*b3fce824SCristian Pallarés vars=deplibs 8579189777a2SCristian Pallares fi 8580189777a2SCristian Pallares for var in $vars dependency_libs; do 8581189777a2SCristian Pallares # Add libraries to $var in reverse order 8582189777a2SCristian Pallares eval tmp_libs=\"\$$var\" 8583189777a2SCristian Pallares new_libs= 8584189777a2SCristian Pallares for deplib in $tmp_libs; do 8585189777a2SCristian Pallares # FIXME: Pedantically, this is the right thing to do, so 8586189777a2SCristian Pallares # that some nasty dependency loop isn't accidentally 8587189777a2SCristian Pallares # broken: 8588189777a2SCristian Pallares #new_libs="$deplib $new_libs" 8589189777a2SCristian Pallares # Pragmatically, this seems to cause very few problems in 8590189777a2SCristian Pallares # practice: 8591189777a2SCristian Pallares case $deplib in 8592189777a2SCristian Pallares -L*) new_libs="$deplib $new_libs" ;; 8593189777a2SCristian Pallares -R*) ;; 8594189777a2SCristian Pallares *) 8595189777a2SCristian Pallares # And here is the reason: when a library appears more 8596189777a2SCristian Pallares # than once as an explicit dependence of a library, or 8597189777a2SCristian Pallares # is implicitly linked in more than once by the 8598189777a2SCristian Pallares # compiler, it is considered special, and multiple 8599189777a2SCristian Pallares # occurrences thereof are not removed. Compare this 8600189777a2SCristian Pallares # with having the same library being listed as a 8601189777a2SCristian Pallares # dependency of multiple other libraries: in this case, 8602189777a2SCristian Pallares # we know (pedantically, we assume) the library does not 8603189777a2SCristian Pallares # need to be listed more than once, so we keep only the 8604189777a2SCristian Pallares # last copy. This is not always right, but it is rare 8605189777a2SCristian Pallares # enough that we require users that really mean to play 8606189777a2SCristian Pallares # such unportable linking tricks to link the library 8607189777a2SCristian Pallares # using -Wl,-lname, so that libtool does not consider it 8608189777a2SCristian Pallares # for duplicate removal. 8609189777a2SCristian Pallares case " $specialdeplibs " in 8610189777a2SCristian Pallares *" $deplib "*) new_libs="$deplib $new_libs" ;; 8611189777a2SCristian Pallares *) 8612189777a2SCristian Pallares case " $new_libs " in 8613189777a2SCristian Pallares *" $deplib "*) ;; 8614189777a2SCristian Pallares *) new_libs="$deplib $new_libs" ;; 8615189777a2SCristian Pallares esac 8616189777a2SCristian Pallares ;; 8617189777a2SCristian Pallares esac 8618189777a2SCristian Pallares ;; 8619189777a2SCristian Pallares esac 8620189777a2SCristian Pallares done 8621189777a2SCristian Pallares tmp_libs= 8622189777a2SCristian Pallares for deplib in $new_libs; do 8623189777a2SCristian Pallares case $deplib in 8624189777a2SCristian Pallares -L*) 8625189777a2SCristian Pallares case " $tmp_libs " in 8626189777a2SCristian Pallares *" $deplib "*) ;; 8627189777a2SCristian Pallares *) func_append tmp_libs " $deplib" ;; 8628189777a2SCristian Pallares esac 8629189777a2SCristian Pallares ;; 8630189777a2SCristian Pallares *) func_append tmp_libs " $deplib" ;; 8631189777a2SCristian Pallares esac 8632189777a2SCristian Pallares done 8633189777a2SCristian Pallares eval $var=\"$tmp_libs\" 8634189777a2SCristian Pallares done # for var 8635189777a2SCristian Pallares fi 8636*b3fce824SCristian Pallarés 8637*b3fce824SCristian Pallarés # Add Sun CC postdeps if required: 8638*b3fce824SCristian Pallarés test CXX = "$tagname" && { 8639*b3fce824SCristian Pallarés case $host_os in 8640*b3fce824SCristian Pallarés linux*) 8641*b3fce824SCristian Pallarés case `$CC -V 2>&1 | sed 5q` in 8642*b3fce824SCristian Pallarés *Sun\ C*) # Sun C++ 5.9 8643*b3fce824SCristian Pallarés func_suncc_cstd_abi 8644*b3fce824SCristian Pallarés 8645*b3fce824SCristian Pallarés if test no != "$suncc_use_cstd_abi"; then 8646*b3fce824SCristian Pallarés func_append postdeps ' -library=Cstd -library=Crun' 8647*b3fce824SCristian Pallarés fi 8648*b3fce824SCristian Pallarés ;; 8649*b3fce824SCristian Pallarés esac 8650*b3fce824SCristian Pallarés ;; 8651*b3fce824SCristian Pallarés 8652*b3fce824SCristian Pallarés solaris*) 8653*b3fce824SCristian Pallarés func_cc_basename "$CC" 8654*b3fce824SCristian Pallarés case $func_cc_basename_result in 8655*b3fce824SCristian Pallarés CC* | sunCC*) 8656*b3fce824SCristian Pallarés func_suncc_cstd_abi 8657*b3fce824SCristian Pallarés 8658*b3fce824SCristian Pallarés if test no != "$suncc_use_cstd_abi"; then 8659*b3fce824SCristian Pallarés func_append postdeps ' -library=Cstd -library=Crun' 8660*b3fce824SCristian Pallarés fi 8661*b3fce824SCristian Pallarés ;; 8662*b3fce824SCristian Pallarés esac 8663*b3fce824SCristian Pallarés ;; 8664*b3fce824SCristian Pallarés esac 8665*b3fce824SCristian Pallarés } 8666*b3fce824SCristian Pallarés 8667189777a2SCristian Pallares # Last step: remove runtime libs from dependency_libs 8668189777a2SCristian Pallares # (they stay in deplibs) 8669189777a2SCristian Pallares tmp_libs= 8670189777a2SCristian Pallares for i in $dependency_libs; do 8671189777a2SCristian Pallares case " $predeps $postdeps $compiler_lib_search_path " in 8672189777a2SCristian Pallares *" $i "*) 8673*b3fce824SCristian Pallarés i= 8674189777a2SCristian Pallares ;; 8675189777a2SCristian Pallares esac 8676189777a2SCristian Pallares if test -n "$i"; then 8677189777a2SCristian Pallares func_append tmp_libs " $i" 8678189777a2SCristian Pallares fi 8679189777a2SCristian Pallares done 8680189777a2SCristian Pallares dependency_libs=$tmp_libs 8681189777a2SCristian Pallares done # for pass 8682*b3fce824SCristian Pallarés if test prog = "$linkmode"; then 8683*b3fce824SCristian Pallarés dlfiles=$newdlfiles 8684189777a2SCristian Pallares fi 8685*b3fce824SCristian Pallarés if test prog = "$linkmode" || test lib = "$linkmode"; then 8686*b3fce824SCristian Pallarés dlprefiles=$newdlprefiles 8687189777a2SCristian Pallares fi 8688189777a2SCristian Pallares 8689189777a2SCristian Pallares case $linkmode in 8690189777a2SCristian Pallares oldlib) 8691*b3fce824SCristian Pallarés if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8692*b3fce824SCristian Pallarés func_warning "'-dlopen' is ignored for archives" 8693189777a2SCristian Pallares fi 8694189777a2SCristian Pallares 8695189777a2SCristian Pallares case " $deplibs" in 8696189777a2SCristian Pallares *\ -l* | *\ -L*) 8697*b3fce824SCristian Pallarés func_warning "'-l' and '-L' are ignored for archives" ;; 8698189777a2SCristian Pallares esac 8699189777a2SCristian Pallares 8700189777a2SCristian Pallares test -n "$rpath" && \ 8701*b3fce824SCristian Pallarés func_warning "'-rpath' is ignored for archives" 8702189777a2SCristian Pallares 8703189777a2SCristian Pallares test -n "$xrpath" && \ 8704*b3fce824SCristian Pallarés func_warning "'-R' is ignored for archives" 8705189777a2SCristian Pallares 8706189777a2SCristian Pallares test -n "$vinfo" && \ 8707*b3fce824SCristian Pallarés func_warning "'-version-info/-version-number' is ignored for archives" 8708189777a2SCristian Pallares 8709189777a2SCristian Pallares test -n "$release" && \ 8710*b3fce824SCristian Pallarés func_warning "'-release' is ignored for archives" 8711189777a2SCristian Pallares 8712189777a2SCristian Pallares test -n "$export_symbols$export_symbols_regex" && \ 8713*b3fce824SCristian Pallarés func_warning "'-export-symbols' is ignored for archives" 8714189777a2SCristian Pallares 8715189777a2SCristian Pallares # Now set the variables for building old libraries. 8716189777a2SCristian Pallares build_libtool_libs=no 8717*b3fce824SCristian Pallarés oldlibs=$output 8718189777a2SCristian Pallares func_append objs "$old_deplibs" 8719189777a2SCristian Pallares ;; 8720189777a2SCristian Pallares 8721189777a2SCristian Pallares lib) 8722*b3fce824SCristian Pallarés # Make sure we only generate libraries of the form 'libNAME.la'. 8723189777a2SCristian Pallares case $outputname in 8724189777a2SCristian Pallares lib*) 8725189777a2SCristian Pallares func_stripname 'lib' '.la' "$outputname" 8726189777a2SCristian Pallares name=$func_stripname_result 8727189777a2SCristian Pallares eval shared_ext=\"$shrext_cmds\" 8728189777a2SCristian Pallares eval libname=\"$libname_spec\" 8729189777a2SCristian Pallares ;; 8730189777a2SCristian Pallares *) 8731*b3fce824SCristian Pallarés test no = "$module" \ 8732*b3fce824SCristian Pallarés && func_fatal_help "libtool library '$output' must begin with 'lib'" 8733189777a2SCristian Pallares 8734*b3fce824SCristian Pallarés if test no != "$need_lib_prefix"; then 8735189777a2SCristian Pallares # Add the "lib" prefix for modules if required 8736189777a2SCristian Pallares func_stripname '' '.la' "$outputname" 8737189777a2SCristian Pallares name=$func_stripname_result 8738189777a2SCristian Pallares eval shared_ext=\"$shrext_cmds\" 8739189777a2SCristian Pallares eval libname=\"$libname_spec\" 8740189777a2SCristian Pallares else 8741189777a2SCristian Pallares func_stripname '' '.la' "$outputname" 8742189777a2SCristian Pallares libname=$func_stripname_result 8743189777a2SCristian Pallares fi 8744189777a2SCristian Pallares ;; 8745189777a2SCristian Pallares esac 8746189777a2SCristian Pallares 8747189777a2SCristian Pallares if test -n "$objs"; then 8748*b3fce824SCristian Pallarés if test pass_all != "$deplibs_check_method"; then 8749*b3fce824SCristian Pallarés func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8750189777a2SCristian Pallares else 8751189777a2SCristian Pallares echo 8752189777a2SCristian Pallares $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8753189777a2SCristian Pallares $ECHO "*** objects $objs is not portable!" 8754189777a2SCristian Pallares func_append libobjs " $objs" 8755189777a2SCristian Pallares fi 8756189777a2SCristian Pallares fi 8757189777a2SCristian Pallares 8758*b3fce824SCristian Pallarés test no = "$dlself" \ 8759*b3fce824SCristian Pallarés || func_warning "'-dlopen self' is ignored for libtool libraries" 8760189777a2SCristian Pallares 8761189777a2SCristian Pallares set dummy $rpath 8762189777a2SCristian Pallares shift 8763*b3fce824SCristian Pallarés test 1 -lt "$#" \ 8764*b3fce824SCristian Pallarés && func_warning "ignoring multiple '-rpath's for a libtool library" 8765189777a2SCristian Pallares 8766*b3fce824SCristian Pallarés install_libdir=$1 8767189777a2SCristian Pallares 8768189777a2SCristian Pallares oldlibs= 8769189777a2SCristian Pallares if test -z "$rpath"; then 8770*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs"; then 8771189777a2SCristian Pallares # Building a libtool convenience library. 8772*b3fce824SCristian Pallarés # Some compilers have problems with a '.al' extension so 8773189777a2SCristian Pallares # convenience libraries should have the same extension an 8774189777a2SCristian Pallares # archive normally would. 8775189777a2SCristian Pallares oldlibs="$output_objdir/$libname.$libext $oldlibs" 8776189777a2SCristian Pallares build_libtool_libs=convenience 8777189777a2SCristian Pallares build_old_libs=yes 8778189777a2SCristian Pallares fi 8779189777a2SCristian Pallares 8780189777a2SCristian Pallares test -n "$vinfo" && \ 8781*b3fce824SCristian Pallarés func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8782189777a2SCristian Pallares 8783189777a2SCristian Pallares test -n "$release" && \ 8784*b3fce824SCristian Pallarés func_warning "'-release' is ignored for convenience libraries" 8785189777a2SCristian Pallares else 8786189777a2SCristian Pallares 8787189777a2SCristian Pallares # Parse the version information argument. 8788*b3fce824SCristian Pallarés save_ifs=$IFS; IFS=: 8789189777a2SCristian Pallares set dummy $vinfo 0 0 0 8790189777a2SCristian Pallares shift 8791*b3fce824SCristian Pallarés IFS=$save_ifs 8792189777a2SCristian Pallares 8793189777a2SCristian Pallares test -n "$7" && \ 8794*b3fce824SCristian Pallarés func_fatal_help "too many parameters to '-version-info'" 8795189777a2SCristian Pallares 8796189777a2SCristian Pallares # convert absolute version numbers to libtool ages 8797189777a2SCristian Pallares # this retains compatibility with .la files and attempts 8798189777a2SCristian Pallares # to make the code below a bit more comprehensible 8799189777a2SCristian Pallares 8800189777a2SCristian Pallares case $vinfo_number in 8801189777a2SCristian Pallares yes) 8802*b3fce824SCristian Pallarés number_major=$1 8803*b3fce824SCristian Pallarés number_minor=$2 8804*b3fce824SCristian Pallarés number_revision=$3 8805189777a2SCristian Pallares # 8806189777a2SCristian Pallares # There are really only two kinds -- those that 8807189777a2SCristian Pallares # use the current revision as the major version 8808189777a2SCristian Pallares # and those that subtract age and use age as 8809189777a2SCristian Pallares # a minor version. But, then there is irix 8810*b3fce824SCristian Pallarés # that has an extra 1 added just for fun 8811189777a2SCristian Pallares # 8812189777a2SCristian Pallares case $version_type in 8813189777a2SCristian Pallares # correct linux to gnu/linux during the next big refactor 8814*b3fce824SCristian Pallarés darwin|freebsd-elf|linux|osf|windows|none) 8815189777a2SCristian Pallares func_arith $number_major + $number_minor 8816189777a2SCristian Pallares current=$func_arith_result 8817*b3fce824SCristian Pallarés age=$number_minor 8818*b3fce824SCristian Pallarés revision=$number_revision 8819189777a2SCristian Pallares ;; 8820*b3fce824SCristian Pallarés freebsd-aout|qnx|sunos) 8821*b3fce824SCristian Pallarés current=$number_major 8822*b3fce824SCristian Pallarés revision=$number_minor 8823*b3fce824SCristian Pallarés age=0 8824189777a2SCristian Pallares ;; 8825189777a2SCristian Pallares irix|nonstopux) 8826189777a2SCristian Pallares func_arith $number_major + $number_minor 8827189777a2SCristian Pallares current=$func_arith_result 8828*b3fce824SCristian Pallarés age=$number_minor 8829*b3fce824SCristian Pallarés revision=$number_minor 8830189777a2SCristian Pallares lt_irix_increment=no 8831189777a2SCristian Pallares ;; 8832189777a2SCristian Pallares *) 8833*b3fce824SCristian Pallarés func_fatal_configuration "$modename: unknown library version type '$version_type'" 8834189777a2SCristian Pallares ;; 8835189777a2SCristian Pallares esac 8836189777a2SCristian Pallares ;; 8837189777a2SCristian Pallares no) 8838*b3fce824SCristian Pallarés current=$1 8839*b3fce824SCristian Pallarés revision=$2 8840*b3fce824SCristian Pallarés age=$3 8841189777a2SCristian Pallares ;; 8842189777a2SCristian Pallares esac 8843189777a2SCristian Pallares 8844189777a2SCristian Pallares # Check that each of the things are valid numbers. 8845189777a2SCristian Pallares case $current in 8846189777a2SCristian Pallares 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]) ;; 8847189777a2SCristian Pallares *) 8848*b3fce824SCristian Pallarés func_error "CURRENT '$current' must be a nonnegative integer" 8849*b3fce824SCristian Pallarés func_fatal_error "'$vinfo' is not valid version information" 8850189777a2SCristian Pallares ;; 8851189777a2SCristian Pallares esac 8852189777a2SCristian Pallares 8853189777a2SCristian Pallares case $revision in 8854189777a2SCristian Pallares 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]) ;; 8855189777a2SCristian Pallares *) 8856*b3fce824SCristian Pallarés func_error "REVISION '$revision' must be a nonnegative integer" 8857*b3fce824SCristian Pallarés func_fatal_error "'$vinfo' is not valid version information" 8858189777a2SCristian Pallares ;; 8859189777a2SCristian Pallares esac 8860189777a2SCristian Pallares 8861189777a2SCristian Pallares case $age in 8862189777a2SCristian Pallares 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]) ;; 8863189777a2SCristian Pallares *) 8864*b3fce824SCristian Pallarés func_error "AGE '$age' must be a nonnegative integer" 8865*b3fce824SCristian Pallarés func_fatal_error "'$vinfo' is not valid version information" 8866189777a2SCristian Pallares ;; 8867189777a2SCristian Pallares esac 8868189777a2SCristian Pallares 8869189777a2SCristian Pallares if test "$age" -gt "$current"; then 8870*b3fce824SCristian Pallarés func_error "AGE '$age' is greater than the current interface number '$current'" 8871*b3fce824SCristian Pallarés func_fatal_error "'$vinfo' is not valid version information" 8872189777a2SCristian Pallares fi 8873189777a2SCristian Pallares 8874189777a2SCristian Pallares # Calculate the version variables. 8875189777a2SCristian Pallares major= 8876189777a2SCristian Pallares versuffix= 8877189777a2SCristian Pallares verstring= 8878189777a2SCristian Pallares case $version_type in 8879189777a2SCristian Pallares none) ;; 8880189777a2SCristian Pallares 8881189777a2SCristian Pallares darwin) 8882189777a2SCristian Pallares # Like Linux, but with the current version available in 8883189777a2SCristian Pallares # verstring for coding it into the library header 8884189777a2SCristian Pallares func_arith $current - $age 8885189777a2SCristian Pallares major=.$func_arith_result 8886*b3fce824SCristian Pallarés versuffix=$major.$age.$revision 8887189777a2SCristian Pallares # Darwin ld doesn't like 0 for these options... 8888189777a2SCristian Pallares func_arith $current + 1 8889189777a2SCristian Pallares minor_current=$func_arith_result 8890*b3fce824SCristian Pallarés xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8891189777a2SCristian Pallares verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8892*b3fce824SCristian Pallarés # On Darwin other compilers 8893*b3fce824SCristian Pallarés case $CC in 8894*b3fce824SCristian Pallarés nagfor*) 8895*b3fce824SCristian Pallarés verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8896*b3fce824SCristian Pallarés ;; 8897*b3fce824SCristian Pallarés *) 8898*b3fce824SCristian Pallarés verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8899*b3fce824SCristian Pallarés ;; 8900*b3fce824SCristian Pallarés esac 8901189777a2SCristian Pallares ;; 8902189777a2SCristian Pallares 8903189777a2SCristian Pallares freebsd-aout) 8904*b3fce824SCristian Pallarés major=.$current 8905*b3fce824SCristian Pallarés versuffix=.$current.$revision 8906189777a2SCristian Pallares ;; 8907189777a2SCristian Pallares 8908189777a2SCristian Pallares freebsd-elf) 8909*b3fce824SCristian Pallarés func_arith $current - $age 8910*b3fce824SCristian Pallarés major=.$func_arith_result 8911*b3fce824SCristian Pallarés versuffix=$major.$age.$revision 8912189777a2SCristian Pallares ;; 8913189777a2SCristian Pallares 8914189777a2SCristian Pallares irix | nonstopux) 8915*b3fce824SCristian Pallarés if test no = "$lt_irix_increment"; then 8916189777a2SCristian Pallares func_arith $current - $age 8917189777a2SCristian Pallares else 8918189777a2SCristian Pallares func_arith $current - $age + 1 8919189777a2SCristian Pallares fi 8920189777a2SCristian Pallares major=$func_arith_result 8921189777a2SCristian Pallares 8922189777a2SCristian Pallares case $version_type in 8923189777a2SCristian Pallares nonstopux) verstring_prefix=nonstopux ;; 8924189777a2SCristian Pallares *) verstring_prefix=sgi ;; 8925189777a2SCristian Pallares esac 8926*b3fce824SCristian Pallarés verstring=$verstring_prefix$major.$revision 8927189777a2SCristian Pallares 8928189777a2SCristian Pallares # Add in all the interfaces that we are compatible with. 8929189777a2SCristian Pallares loop=$revision 8930*b3fce824SCristian Pallarés while test 0 -ne "$loop"; do 8931189777a2SCristian Pallares func_arith $revision - $loop 8932189777a2SCristian Pallares iface=$func_arith_result 8933189777a2SCristian Pallares func_arith $loop - 1 8934189777a2SCristian Pallares loop=$func_arith_result 8935*b3fce824SCristian Pallarés verstring=$verstring_prefix$major.$iface:$verstring 8936189777a2SCristian Pallares done 8937189777a2SCristian Pallares 8938*b3fce824SCristian Pallarés # Before this point, $major must not contain '.'. 8939189777a2SCristian Pallares major=.$major 8940*b3fce824SCristian Pallarés versuffix=$major.$revision 8941189777a2SCristian Pallares ;; 8942189777a2SCristian Pallares 8943189777a2SCristian Pallares linux) # correct to gnu/linux during the next big refactor 8944189777a2SCristian Pallares func_arith $current - $age 8945189777a2SCristian Pallares major=.$func_arith_result 8946*b3fce824SCristian Pallarés versuffix=$major.$age.$revision 8947189777a2SCristian Pallares ;; 8948189777a2SCristian Pallares 8949189777a2SCristian Pallares osf) 8950189777a2SCristian Pallares func_arith $current - $age 8951189777a2SCristian Pallares major=.$func_arith_result 8952*b3fce824SCristian Pallarés versuffix=.$current.$age.$revision 8953*b3fce824SCristian Pallarés verstring=$current.$age.$revision 8954189777a2SCristian Pallares 8955189777a2SCristian Pallares # Add in all the interfaces that we are compatible with. 8956189777a2SCristian Pallares loop=$age 8957*b3fce824SCristian Pallarés while test 0 -ne "$loop"; do 8958189777a2SCristian Pallares func_arith $current - $loop 8959189777a2SCristian Pallares iface=$func_arith_result 8960189777a2SCristian Pallares func_arith $loop - 1 8961189777a2SCristian Pallares loop=$func_arith_result 8962*b3fce824SCristian Pallarés verstring=$verstring:$iface.0 8963189777a2SCristian Pallares done 8964189777a2SCristian Pallares 8965189777a2SCristian Pallares # Make executables depend on our current version. 8966*b3fce824SCristian Pallarés func_append verstring ":$current.0" 8967189777a2SCristian Pallares ;; 8968189777a2SCristian Pallares 8969189777a2SCristian Pallares qnx) 8970*b3fce824SCristian Pallarés major=.$current 8971*b3fce824SCristian Pallarés versuffix=.$current 8972*b3fce824SCristian Pallarés ;; 8973*b3fce824SCristian Pallarés 8974*b3fce824SCristian Pallarés sco) 8975*b3fce824SCristian Pallarés major=.$current 8976*b3fce824SCristian Pallarés versuffix=.$current 8977189777a2SCristian Pallares ;; 8978189777a2SCristian Pallares 8979189777a2SCristian Pallares sunos) 8980*b3fce824SCristian Pallarés major=.$current 8981*b3fce824SCristian Pallarés versuffix=.$current.$revision 8982189777a2SCristian Pallares ;; 8983189777a2SCristian Pallares 8984189777a2SCristian Pallares windows) 8985189777a2SCristian Pallares # Use '-' rather than '.', since we only want one 8986189777a2SCristian Pallares # extension on DOS 8.3 file systems. 8987189777a2SCristian Pallares func_arith $current - $age 8988189777a2SCristian Pallares major=$func_arith_result 8989*b3fce824SCristian Pallarés versuffix=-$major 8990189777a2SCristian Pallares ;; 8991189777a2SCristian Pallares 8992189777a2SCristian Pallares *) 8993*b3fce824SCristian Pallarés func_fatal_configuration "unknown library version type '$version_type'" 8994189777a2SCristian Pallares ;; 8995189777a2SCristian Pallares esac 8996189777a2SCristian Pallares 8997189777a2SCristian Pallares # Clear the version info if we defaulted, and they specified a release. 8998189777a2SCristian Pallares if test -z "$vinfo" && test -n "$release"; then 8999189777a2SCristian Pallares major= 9000189777a2SCristian Pallares case $version_type in 9001189777a2SCristian Pallares darwin) 9002189777a2SCristian Pallares # we can't check for "0.0" in archive_cmds due to quoting 9003189777a2SCristian Pallares # problems, so we reset it completely 9004189777a2SCristian Pallares verstring= 9005189777a2SCristian Pallares ;; 9006189777a2SCristian Pallares *) 9007*b3fce824SCristian Pallarés verstring=0.0 9008189777a2SCristian Pallares ;; 9009189777a2SCristian Pallares esac 9010*b3fce824SCristian Pallarés if test no = "$need_version"; then 9011189777a2SCristian Pallares versuffix= 9012189777a2SCristian Pallares else 9013*b3fce824SCristian Pallarés versuffix=.0.0 9014189777a2SCristian Pallares fi 9015189777a2SCristian Pallares fi 9016189777a2SCristian Pallares 9017189777a2SCristian Pallares # Remove version info from name if versioning should be avoided 9018*b3fce824SCristian Pallarés if test yes,no = "$avoid_version,$need_version"; then 9019189777a2SCristian Pallares major= 9020189777a2SCristian Pallares versuffix= 9021*b3fce824SCristian Pallarés verstring= 9022189777a2SCristian Pallares fi 9023189777a2SCristian Pallares 9024189777a2SCristian Pallares # Check to see if the archive will have undefined symbols. 9025*b3fce824SCristian Pallarés if test yes = "$allow_undefined"; then 9026*b3fce824SCristian Pallarés if test unsupported = "$allow_undefined_flag"; then 9027*b3fce824SCristian Pallarés if test yes = "$build_old_libs"; then 9028*b3fce824SCristian Pallarés func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9029189777a2SCristian Pallares build_libtool_libs=no 9030*b3fce824SCristian Pallarés else 9031*b3fce824SCristian Pallarés func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9032*b3fce824SCristian Pallarés fi 9033189777a2SCristian Pallares fi 9034189777a2SCristian Pallares else 9035189777a2SCristian Pallares # Don't allow undefined symbols. 9036*b3fce824SCristian Pallarés allow_undefined_flag=$no_undefined_flag 9037189777a2SCristian Pallares fi 9038189777a2SCristian Pallares 9039189777a2SCristian Pallares fi 9040189777a2SCristian Pallares 9041*b3fce824SCristian Pallarés func_generate_dlsyms "$libname" "$libname" : 9042189777a2SCristian Pallares func_append libobjs " $symfileobj" 9043*b3fce824SCristian Pallarés test " " = "$libobjs" && libobjs= 9044189777a2SCristian Pallares 9045*b3fce824SCristian Pallarés if test relink != "$opt_mode"; then 9046189777a2SCristian Pallares # Remove our outputs, but don't remove object files since they 9047189777a2SCristian Pallares # may have been created when compiling PIC objects. 9048189777a2SCristian Pallares removelist= 9049189777a2SCristian Pallares tempremovelist=`$ECHO "$output_objdir/*"` 9050189777a2SCristian Pallares for p in $tempremovelist; do 9051189777a2SCristian Pallares case $p in 9052189777a2SCristian Pallares *.$objext | *.gcno) 9053189777a2SCristian Pallares ;; 9054*b3fce824SCristian Pallarés $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9055*b3fce824SCristian Pallarés if test -n "$precious_files_regex"; then 9056189777a2SCristian Pallares if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9057189777a2SCristian Pallares then 9058189777a2SCristian Pallares continue 9059189777a2SCristian Pallares fi 9060189777a2SCristian Pallares fi 9061189777a2SCristian Pallares func_append removelist " $p" 9062189777a2SCristian Pallares ;; 9063189777a2SCristian Pallares *) ;; 9064189777a2SCristian Pallares esac 9065189777a2SCristian Pallares done 9066189777a2SCristian Pallares test -n "$removelist" && \ 9067189777a2SCristian Pallares func_show_eval "${RM}r \$removelist" 9068189777a2SCristian Pallares fi 9069189777a2SCristian Pallares 9070189777a2SCristian Pallares # Now set the variables for building old libraries. 9071*b3fce824SCristian Pallarés if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9072189777a2SCristian Pallares func_append oldlibs " $output_objdir/$libname.$libext" 9073189777a2SCristian Pallares 9074189777a2SCristian Pallares # Transform .lo files to .o files. 9075*b3fce824SCristian Pallarés oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9076189777a2SCristian Pallares fi 9077189777a2SCristian Pallares 9078189777a2SCristian Pallares # Eliminate all temporary directories. 9079189777a2SCristian Pallares #for path in $notinst_path; do 9080189777a2SCristian Pallares # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9081189777a2SCristian Pallares # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9082189777a2SCristian Pallares # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9083189777a2SCristian Pallares #done 9084189777a2SCristian Pallares 9085189777a2SCristian Pallares if test -n "$xrpath"; then 9086189777a2SCristian Pallares # If the user specified any rpath flags, then add them. 9087189777a2SCristian Pallares temp_xrpath= 9088189777a2SCristian Pallares for libdir in $xrpath; do 9089189777a2SCristian Pallares func_replace_sysroot "$libdir" 9090189777a2SCristian Pallares func_append temp_xrpath " -R$func_replace_sysroot_result" 9091189777a2SCristian Pallares case "$finalize_rpath " in 9092189777a2SCristian Pallares *" $libdir "*) ;; 9093189777a2SCristian Pallares *) func_append finalize_rpath " $libdir" ;; 9094189777a2SCristian Pallares esac 9095189777a2SCristian Pallares done 9096*b3fce824SCristian Pallarés if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9097189777a2SCristian Pallares dependency_libs="$temp_xrpath $dependency_libs" 9098189777a2SCristian Pallares fi 9099189777a2SCristian Pallares fi 9100189777a2SCristian Pallares 9101189777a2SCristian Pallares # Make sure dlfiles contains only unique files that won't be dlpreopened 9102*b3fce824SCristian Pallarés old_dlfiles=$dlfiles 9103189777a2SCristian Pallares dlfiles= 9104189777a2SCristian Pallares for lib in $old_dlfiles; do 9105189777a2SCristian Pallares case " $dlprefiles $dlfiles " in 9106189777a2SCristian Pallares *" $lib "*) ;; 9107189777a2SCristian Pallares *) func_append dlfiles " $lib" ;; 9108189777a2SCristian Pallares esac 9109189777a2SCristian Pallares done 9110189777a2SCristian Pallares 9111189777a2SCristian Pallares # Make sure dlprefiles contains only unique files 9112*b3fce824SCristian Pallarés old_dlprefiles=$dlprefiles 9113189777a2SCristian Pallares dlprefiles= 9114189777a2SCristian Pallares for lib in $old_dlprefiles; do 9115189777a2SCristian Pallares case "$dlprefiles " in 9116189777a2SCristian Pallares *" $lib "*) ;; 9117189777a2SCristian Pallares *) func_append dlprefiles " $lib" ;; 9118189777a2SCristian Pallares esac 9119189777a2SCristian Pallares done 9120189777a2SCristian Pallares 9121*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs"; then 9122189777a2SCristian Pallares if test -n "$rpath"; then 9123189777a2SCristian Pallares case $host in 9124189777a2SCristian Pallares *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9125189777a2SCristian Pallares # these systems don't actually have a c library (as such)! 9126189777a2SCristian Pallares ;; 9127189777a2SCristian Pallares *-*-rhapsody* | *-*-darwin1.[012]) 9128189777a2SCristian Pallares # Rhapsody C library is in the System framework 9129189777a2SCristian Pallares func_append deplibs " System.ltframework" 9130189777a2SCristian Pallares ;; 9131189777a2SCristian Pallares *-*-netbsd*) 9132189777a2SCristian Pallares # Don't link with libc until the a.out ld.so is fixed. 9133189777a2SCristian Pallares ;; 9134189777a2SCristian Pallares *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9135189777a2SCristian Pallares # Do not include libc due to us having libc/libc_r. 9136189777a2SCristian Pallares ;; 9137189777a2SCristian Pallares *-*-sco3.2v5* | *-*-sco5v6*) 9138189777a2SCristian Pallares # Causes problems with __ctype 9139189777a2SCristian Pallares ;; 9140189777a2SCristian Pallares *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9141189777a2SCristian Pallares # Compiler inserts libc in the correct place for threads to work 9142189777a2SCristian Pallares ;; 9143189777a2SCristian Pallares *) 9144189777a2SCristian Pallares # Add libc to deplibs on all other systems if necessary. 9145*b3fce824SCristian Pallarés if test yes = "$build_libtool_need_lc"; then 9146189777a2SCristian Pallares func_append deplibs " -lc" 9147189777a2SCristian Pallares fi 9148189777a2SCristian Pallares ;; 9149189777a2SCristian Pallares esac 9150189777a2SCristian Pallares fi 9151189777a2SCristian Pallares 9152189777a2SCristian Pallares # Transform deplibs into only deplibs that can be linked in shared. 9153189777a2SCristian Pallares name_save=$name 9154189777a2SCristian Pallares libname_save=$libname 9155189777a2SCristian Pallares release_save=$release 9156189777a2SCristian Pallares versuffix_save=$versuffix 9157189777a2SCristian Pallares major_save=$major 9158189777a2SCristian Pallares # I'm not sure if I'm treating the release correctly. I think 9159189777a2SCristian Pallares # release should show up in the -l (ie -lgmp5) so we don't want to 9160189777a2SCristian Pallares # add it in twice. Is that correct? 9161*b3fce824SCristian Pallarés release= 9162*b3fce824SCristian Pallarés versuffix= 9163*b3fce824SCristian Pallarés major= 9164189777a2SCristian Pallares newdeplibs= 9165189777a2SCristian Pallares droppeddeps=no 9166189777a2SCristian Pallares case $deplibs_check_method in 9167189777a2SCristian Pallares pass_all) 9168189777a2SCristian Pallares # Don't check for shared/static. Everything works. 9169189777a2SCristian Pallares # This might be a little naive. We might want to check 9170189777a2SCristian Pallares # whether the library exists or not. But this is on 9171189777a2SCristian Pallares # osf3 & osf4 and I'm not really sure... Just 9172189777a2SCristian Pallares # implementing what was already the behavior. 9173189777a2SCristian Pallares newdeplibs=$deplibs 9174189777a2SCristian Pallares ;; 9175189777a2SCristian Pallares test_compile) 9176189777a2SCristian Pallares # This code stresses the "libraries are programs" paradigm to its 9177189777a2SCristian Pallares # limits. Maybe even breaks it. We compile a program, linking it 9178189777a2SCristian Pallares # against the deplibs as a proxy for the library. Then we can check 9179189777a2SCristian Pallares # whether they linked in statically or dynamically with ldd. 9180189777a2SCristian Pallares $opt_dry_run || $RM conftest.c 9181189777a2SCristian Pallares cat > conftest.c <<EOF 9182189777a2SCristian Pallares int main() { return 0; } 9183189777a2SCristian PallaresEOF 9184189777a2SCristian Pallares $opt_dry_run || $RM conftest 9185189777a2SCristian Pallares if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9186189777a2SCristian Pallares ldd_output=`ldd conftest` 9187189777a2SCristian Pallares for i in $deplibs; do 9188189777a2SCristian Pallares case $i in 9189189777a2SCristian Pallares -l*) 9190189777a2SCristian Pallares func_stripname -l '' "$i" 9191189777a2SCristian Pallares name=$func_stripname_result 9192*b3fce824SCristian Pallarés if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9193189777a2SCristian Pallares case " $predeps $postdeps " in 9194189777a2SCristian Pallares *" $i "*) 9195189777a2SCristian Pallares func_append newdeplibs " $i" 9196*b3fce824SCristian Pallarés i= 9197189777a2SCristian Pallares ;; 9198189777a2SCristian Pallares esac 9199189777a2SCristian Pallares fi 9200189777a2SCristian Pallares if test -n "$i"; then 9201189777a2SCristian Pallares libname=`eval "\\$ECHO \"$libname_spec\""` 9202189777a2SCristian Pallares deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9203189777a2SCristian Pallares set dummy $deplib_matches; shift 9204189777a2SCristian Pallares deplib_match=$1 9205189777a2SCristian Pallares if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9206189777a2SCristian Pallares func_append newdeplibs " $i" 9207189777a2SCristian Pallares else 9208189777a2SCristian Pallares droppeddeps=yes 9209189777a2SCristian Pallares echo 9210189777a2SCristian Pallares $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9211189777a2SCristian Pallares echo "*** I have the capability to make that library automatically link in when" 9212189777a2SCristian Pallares echo "*** you link to this library. But I can only do this if you have a" 9213189777a2SCristian Pallares echo "*** shared version of the library, which I believe you do not have" 9214189777a2SCristian Pallares echo "*** because a test_compile did reveal that the linker did not use it for" 9215189777a2SCristian Pallares echo "*** its dynamic dependency list that programs get resolved with at runtime." 9216189777a2SCristian Pallares fi 9217189777a2SCristian Pallares fi 9218189777a2SCristian Pallares ;; 9219189777a2SCristian Pallares *) 9220189777a2SCristian Pallares func_append newdeplibs " $i" 9221189777a2SCristian Pallares ;; 9222189777a2SCristian Pallares esac 9223189777a2SCristian Pallares done 9224189777a2SCristian Pallares else 9225189777a2SCristian Pallares # Error occurred in the first compile. Let's try to salvage 9226189777a2SCristian Pallares # the situation: Compile a separate program for each library. 9227189777a2SCristian Pallares for i in $deplibs; do 9228189777a2SCristian Pallares case $i in 9229189777a2SCristian Pallares -l*) 9230189777a2SCristian Pallares func_stripname -l '' "$i" 9231189777a2SCristian Pallares name=$func_stripname_result 9232189777a2SCristian Pallares $opt_dry_run || $RM conftest 9233189777a2SCristian Pallares if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9234189777a2SCristian Pallares ldd_output=`ldd conftest` 9235*b3fce824SCristian Pallarés if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9236189777a2SCristian Pallares case " $predeps $postdeps " in 9237189777a2SCristian Pallares *" $i "*) 9238189777a2SCristian Pallares func_append newdeplibs " $i" 9239*b3fce824SCristian Pallarés i= 9240189777a2SCristian Pallares ;; 9241189777a2SCristian Pallares esac 9242189777a2SCristian Pallares fi 9243189777a2SCristian Pallares if test -n "$i"; then 9244189777a2SCristian Pallares libname=`eval "\\$ECHO \"$libname_spec\""` 9245189777a2SCristian Pallares deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9246189777a2SCristian Pallares set dummy $deplib_matches; shift 9247189777a2SCristian Pallares deplib_match=$1 9248189777a2SCristian Pallares if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9249189777a2SCristian Pallares func_append newdeplibs " $i" 9250189777a2SCristian Pallares else 9251189777a2SCristian Pallares droppeddeps=yes 9252189777a2SCristian Pallares echo 9253189777a2SCristian Pallares $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9254189777a2SCristian Pallares echo "*** I have the capability to make that library automatically link in when" 9255189777a2SCristian Pallares echo "*** you link to this library. But I can only do this if you have a" 9256189777a2SCristian Pallares echo "*** shared version of the library, which you do not appear to have" 9257189777a2SCristian Pallares echo "*** because a test_compile did reveal that the linker did not use this one" 9258189777a2SCristian Pallares echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9259189777a2SCristian Pallares fi 9260189777a2SCristian Pallares fi 9261189777a2SCristian Pallares else 9262189777a2SCristian Pallares droppeddeps=yes 9263189777a2SCristian Pallares echo 9264189777a2SCristian Pallares $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9265189777a2SCristian Pallares echo "*** make it link in! You will probably need to install it or some" 9266189777a2SCristian Pallares echo "*** library that it depends on before this library will be fully" 9267189777a2SCristian Pallares echo "*** functional. Installing it before continuing would be even better." 9268189777a2SCristian Pallares fi 9269189777a2SCristian Pallares ;; 9270189777a2SCristian Pallares *) 9271189777a2SCristian Pallares func_append newdeplibs " $i" 9272189777a2SCristian Pallares ;; 9273189777a2SCristian Pallares esac 9274189777a2SCristian Pallares done 9275189777a2SCristian Pallares fi 9276189777a2SCristian Pallares ;; 9277189777a2SCristian Pallares file_magic*) 9278189777a2SCristian Pallares set dummy $deplibs_check_method; shift 9279189777a2SCristian Pallares file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9280189777a2SCristian Pallares for a_deplib in $deplibs; do 9281189777a2SCristian Pallares case $a_deplib in 9282189777a2SCristian Pallares -l*) 9283189777a2SCristian Pallares func_stripname -l '' "$a_deplib" 9284189777a2SCristian Pallares name=$func_stripname_result 9285*b3fce824SCristian Pallarés if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9286189777a2SCristian Pallares case " $predeps $postdeps " in 9287189777a2SCristian Pallares *" $a_deplib "*) 9288189777a2SCristian Pallares func_append newdeplibs " $a_deplib" 9289*b3fce824SCristian Pallarés a_deplib= 9290189777a2SCristian Pallares ;; 9291189777a2SCristian Pallares esac 9292189777a2SCristian Pallares fi 9293189777a2SCristian Pallares if test -n "$a_deplib"; then 9294189777a2SCristian Pallares libname=`eval "\\$ECHO \"$libname_spec\""` 9295189777a2SCristian Pallares if test -n "$file_magic_glob"; then 9296189777a2SCristian Pallares libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9297189777a2SCristian Pallares else 9298189777a2SCristian Pallares libnameglob=$libname 9299189777a2SCristian Pallares fi 9300*b3fce824SCristian Pallarés test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9301189777a2SCristian Pallares for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9302*b3fce824SCristian Pallarés if test yes = "$want_nocaseglob"; then 9303189777a2SCristian Pallares shopt -s nocaseglob 9304189777a2SCristian Pallares potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9305189777a2SCristian Pallares $nocaseglob 9306189777a2SCristian Pallares else 9307189777a2SCristian Pallares potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9308189777a2SCristian Pallares fi 9309189777a2SCristian Pallares for potent_lib in $potential_libs; do 9310189777a2SCristian Pallares # Follow soft links. 9311189777a2SCristian Pallares if ls -lLd "$potent_lib" 2>/dev/null | 9312189777a2SCristian Pallares $GREP " -> " >/dev/null; then 9313189777a2SCristian Pallares continue 9314189777a2SCristian Pallares fi 9315189777a2SCristian Pallares # The statement above tries to avoid entering an 9316189777a2SCristian Pallares # endless loop below, in case of cyclic links. 9317189777a2SCristian Pallares # We might still enter an endless loop, since a link 9318189777a2SCristian Pallares # loop can be closed while we follow links, 9319189777a2SCristian Pallares # but so what? 9320*b3fce824SCristian Pallarés potlib=$potent_lib 9321189777a2SCristian Pallares while test -h "$potlib" 2>/dev/null; do 9322*b3fce824SCristian Pallarés potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9323189777a2SCristian Pallares case $potliblink in 9324*b3fce824SCristian Pallarés [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9325*b3fce824SCristian Pallarés *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9326189777a2SCristian Pallares esac 9327189777a2SCristian Pallares done 9328189777a2SCristian Pallares if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9329189777a2SCristian Pallares $SED -e 10q | 9330189777a2SCristian Pallares $EGREP "$file_magic_regex" > /dev/null; then 9331189777a2SCristian Pallares func_append newdeplibs " $a_deplib" 9332*b3fce824SCristian Pallarés a_deplib= 9333189777a2SCristian Pallares break 2 9334189777a2SCristian Pallares fi 9335189777a2SCristian Pallares done 9336189777a2SCristian Pallares done 9337189777a2SCristian Pallares fi 9338189777a2SCristian Pallares if test -n "$a_deplib"; then 9339189777a2SCristian Pallares droppeddeps=yes 9340189777a2SCristian Pallares echo 9341189777a2SCristian Pallares $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9342189777a2SCristian Pallares echo "*** I have the capability to make that library automatically link in when" 9343189777a2SCristian Pallares echo "*** you link to this library. But I can only do this if you have a" 9344189777a2SCristian Pallares echo "*** shared version of the library, which you do not appear to have" 9345189777a2SCristian Pallares echo "*** because I did check the linker path looking for a file starting" 9346189777a2SCristian Pallares if test -z "$potlib"; then 9347189777a2SCristian Pallares $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9348189777a2SCristian Pallares else 9349189777a2SCristian Pallares $ECHO "*** with $libname and none of the candidates passed a file format test" 9350189777a2SCristian Pallares $ECHO "*** using a file magic. Last file checked: $potlib" 9351189777a2SCristian Pallares fi 9352189777a2SCristian Pallares fi 9353189777a2SCristian Pallares ;; 9354189777a2SCristian Pallares *) 9355189777a2SCristian Pallares # Add a -L argument. 9356189777a2SCristian Pallares func_append newdeplibs " $a_deplib" 9357189777a2SCristian Pallares ;; 9358189777a2SCristian Pallares esac 9359189777a2SCristian Pallares done # Gone through all deplibs. 9360189777a2SCristian Pallares ;; 9361189777a2SCristian Pallares match_pattern*) 9362189777a2SCristian Pallares set dummy $deplibs_check_method; shift 9363189777a2SCristian Pallares match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9364189777a2SCristian Pallares for a_deplib in $deplibs; do 9365189777a2SCristian Pallares case $a_deplib in 9366189777a2SCristian Pallares -l*) 9367189777a2SCristian Pallares func_stripname -l '' "$a_deplib" 9368189777a2SCristian Pallares name=$func_stripname_result 9369*b3fce824SCristian Pallarés if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9370189777a2SCristian Pallares case " $predeps $postdeps " in 9371189777a2SCristian Pallares *" $a_deplib "*) 9372189777a2SCristian Pallares func_append newdeplibs " $a_deplib" 9373*b3fce824SCristian Pallarés a_deplib= 9374189777a2SCristian Pallares ;; 9375189777a2SCristian Pallares esac 9376189777a2SCristian Pallares fi 9377189777a2SCristian Pallares if test -n "$a_deplib"; then 9378189777a2SCristian Pallares libname=`eval "\\$ECHO \"$libname_spec\""` 9379189777a2SCristian Pallares for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9380189777a2SCristian Pallares potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9381189777a2SCristian Pallares for potent_lib in $potential_libs; do 9382*b3fce824SCristian Pallarés potlib=$potent_lib # see symlink-check above in file_magic test 9383189777a2SCristian Pallares if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9384189777a2SCristian Pallares $EGREP "$match_pattern_regex" > /dev/null; then 9385189777a2SCristian Pallares func_append newdeplibs " $a_deplib" 9386*b3fce824SCristian Pallarés a_deplib= 9387189777a2SCristian Pallares break 2 9388189777a2SCristian Pallares fi 9389189777a2SCristian Pallares done 9390189777a2SCristian Pallares done 9391189777a2SCristian Pallares fi 9392189777a2SCristian Pallares if test -n "$a_deplib"; then 9393189777a2SCristian Pallares droppeddeps=yes 9394189777a2SCristian Pallares echo 9395189777a2SCristian Pallares $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9396189777a2SCristian Pallares echo "*** I have the capability to make that library automatically link in when" 9397189777a2SCristian Pallares echo "*** you link to this library. But I can only do this if you have a" 9398189777a2SCristian Pallares echo "*** shared version of the library, which you do not appear to have" 9399189777a2SCristian Pallares echo "*** because I did check the linker path looking for a file starting" 9400189777a2SCristian Pallares if test -z "$potlib"; then 9401189777a2SCristian Pallares $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9402189777a2SCristian Pallares else 9403189777a2SCristian Pallares $ECHO "*** with $libname and none of the candidates passed a file format test" 9404189777a2SCristian Pallares $ECHO "*** using a regex pattern. Last file checked: $potlib" 9405189777a2SCristian Pallares fi 9406189777a2SCristian Pallares fi 9407189777a2SCristian Pallares ;; 9408189777a2SCristian Pallares *) 9409189777a2SCristian Pallares # Add a -L argument. 9410189777a2SCristian Pallares func_append newdeplibs " $a_deplib" 9411189777a2SCristian Pallares ;; 9412189777a2SCristian Pallares esac 9413189777a2SCristian Pallares done # Gone through all deplibs. 9414189777a2SCristian Pallares ;; 9415189777a2SCristian Pallares none | unknown | *) 9416*b3fce824SCristian Pallarés newdeplibs= 9417189777a2SCristian Pallares tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9418*b3fce824SCristian Pallarés if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9419189777a2SCristian Pallares for i in $predeps $postdeps; do 9420189777a2SCristian Pallares # can't use Xsed below, because $i might contain '/' 9421*b3fce824SCristian Pallarés tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9422189777a2SCristian Pallares done 9423189777a2SCristian Pallares fi 9424189777a2SCristian Pallares case $tmp_deplibs in 9425189777a2SCristian Pallares *[!\ \ ]*) 9426189777a2SCristian Pallares echo 9427*b3fce824SCristian Pallarés if test none = "$deplibs_check_method"; then 9428189777a2SCristian Pallares echo "*** Warning: inter-library dependencies are not supported in this platform." 9429189777a2SCristian Pallares else 9430189777a2SCristian Pallares echo "*** Warning: inter-library dependencies are not known to be supported." 9431189777a2SCristian Pallares fi 9432189777a2SCristian Pallares echo "*** All declared inter-library dependencies are being dropped." 9433189777a2SCristian Pallares droppeddeps=yes 9434189777a2SCristian Pallares ;; 9435189777a2SCristian Pallares esac 9436189777a2SCristian Pallares ;; 9437189777a2SCristian Pallares esac 9438189777a2SCristian Pallares versuffix=$versuffix_save 9439189777a2SCristian Pallares major=$major_save 9440189777a2SCristian Pallares release=$release_save 9441189777a2SCristian Pallares libname=$libname_save 9442189777a2SCristian Pallares name=$name_save 9443189777a2SCristian Pallares 9444189777a2SCristian Pallares case $host in 9445189777a2SCristian Pallares *-*-rhapsody* | *-*-darwin1.[012]) 9446189777a2SCristian Pallares # On Rhapsody replace the C library with the System framework 9447189777a2SCristian Pallares newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9448189777a2SCristian Pallares ;; 9449189777a2SCristian Pallares esac 9450189777a2SCristian Pallares 9451*b3fce824SCristian Pallarés if test yes = "$droppeddeps"; then 9452*b3fce824SCristian Pallarés if test yes = "$module"; then 9453189777a2SCristian Pallares echo 9454189777a2SCristian Pallares echo "*** Warning: libtool could not satisfy all declared inter-library" 9455189777a2SCristian Pallares $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9456189777a2SCristian Pallares echo "*** a static module, that should work as long as the dlopening" 9457189777a2SCristian Pallares echo "*** application is linked with the -dlopen flag." 9458189777a2SCristian Pallares if test -z "$global_symbol_pipe"; then 9459189777a2SCristian Pallares echo 9460189777a2SCristian Pallares echo "*** However, this would only work if libtool was able to extract symbol" 9461*b3fce824SCristian Pallarés echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9462189777a2SCristian Pallares echo "*** not find such a program. So, this module is probably useless." 9463*b3fce824SCristian Pallarés echo "*** 'nm' from GNU binutils and a full rebuild may help." 9464189777a2SCristian Pallares fi 9465*b3fce824SCristian Pallarés if test no = "$build_old_libs"; then 9466*b3fce824SCristian Pallarés oldlibs=$output_objdir/$libname.$libext 9467189777a2SCristian Pallares build_libtool_libs=module 9468189777a2SCristian Pallares build_old_libs=yes 9469189777a2SCristian Pallares else 9470189777a2SCristian Pallares build_libtool_libs=no 9471189777a2SCristian Pallares fi 9472189777a2SCristian Pallares else 9473189777a2SCristian Pallares echo "*** The inter-library dependencies that have been dropped here will be" 9474189777a2SCristian Pallares echo "*** automatically added whenever a program is linked with this library" 9475189777a2SCristian Pallares echo "*** or is declared to -dlopen it." 9476189777a2SCristian Pallares 9477*b3fce824SCristian Pallarés if test no = "$allow_undefined"; then 9478189777a2SCristian Pallares echo 9479189777a2SCristian Pallares echo "*** Since this library must not contain undefined symbols," 9480189777a2SCristian Pallares echo "*** because either the platform does not support them or" 9481189777a2SCristian Pallares echo "*** it was explicitly requested with -no-undefined," 9482189777a2SCristian Pallares echo "*** libtool will only create a static version of it." 9483*b3fce824SCristian Pallarés if test no = "$build_old_libs"; then 9484*b3fce824SCristian Pallarés oldlibs=$output_objdir/$libname.$libext 9485189777a2SCristian Pallares build_libtool_libs=module 9486189777a2SCristian Pallares build_old_libs=yes 9487189777a2SCristian Pallares else 9488189777a2SCristian Pallares build_libtool_libs=no 9489189777a2SCristian Pallares fi 9490189777a2SCristian Pallares fi 9491189777a2SCristian Pallares fi 9492189777a2SCristian Pallares fi 9493189777a2SCristian Pallares # Done checking deplibs! 9494189777a2SCristian Pallares deplibs=$newdeplibs 9495189777a2SCristian Pallares fi 9496189777a2SCristian Pallares # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9497189777a2SCristian Pallares case $host in 9498189777a2SCristian Pallares *-*-darwin*) 9499189777a2SCristian Pallares newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9500189777a2SCristian Pallares new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9501189777a2SCristian Pallares deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9502189777a2SCristian Pallares ;; 9503189777a2SCristian Pallares esac 9504189777a2SCristian Pallares 9505189777a2SCristian Pallares # move library search paths that coincide with paths to not yet 9506189777a2SCristian Pallares # installed libraries to the beginning of the library search list 9507189777a2SCristian Pallares new_libs= 9508189777a2SCristian Pallares for path in $notinst_path; do 9509189777a2SCristian Pallares case " $new_libs " in 9510189777a2SCristian Pallares *" -L$path/$objdir "*) ;; 9511189777a2SCristian Pallares *) 9512189777a2SCristian Pallares case " $deplibs " in 9513189777a2SCristian Pallares *" -L$path/$objdir "*) 9514189777a2SCristian Pallares func_append new_libs " -L$path/$objdir" ;; 9515189777a2SCristian Pallares esac 9516189777a2SCristian Pallares ;; 9517189777a2SCristian Pallares esac 9518189777a2SCristian Pallares done 9519189777a2SCristian Pallares for deplib in $deplibs; do 9520189777a2SCristian Pallares case $deplib in 9521189777a2SCristian Pallares -L*) 9522189777a2SCristian Pallares case " $new_libs " in 9523189777a2SCristian Pallares *" $deplib "*) ;; 9524189777a2SCristian Pallares *) func_append new_libs " $deplib" ;; 9525189777a2SCristian Pallares esac 9526189777a2SCristian Pallares ;; 9527189777a2SCristian Pallares *) func_append new_libs " $deplib" ;; 9528189777a2SCristian Pallares esac 9529189777a2SCristian Pallares done 9530*b3fce824SCristian Pallarés deplibs=$new_libs 9531189777a2SCristian Pallares 9532189777a2SCristian Pallares # All the library-specific variables (install_libdir is set above). 9533189777a2SCristian Pallares library_names= 9534189777a2SCristian Pallares old_library= 9535189777a2SCristian Pallares dlname= 9536189777a2SCristian Pallares 9537189777a2SCristian Pallares # Test again, we may have decided not to build it any more 9538*b3fce824SCristian Pallarés if test yes = "$build_libtool_libs"; then 9539*b3fce824SCristian Pallarés # Remove $wl instances when linking with ld. 9540189777a2SCristian Pallares # FIXME: should test the right _cmds variable. 9541189777a2SCristian Pallares case $archive_cmds in 9542189777a2SCristian Pallares *\$LD\ *) wl= ;; 9543189777a2SCristian Pallares esac 9544*b3fce824SCristian Pallarés if test yes = "$hardcode_into_libs"; then 9545189777a2SCristian Pallares # Hardcode the library paths 9546189777a2SCristian Pallares hardcode_libdirs= 9547189777a2SCristian Pallares dep_rpath= 9548*b3fce824SCristian Pallarés rpath=$finalize_rpath 9549*b3fce824SCristian Pallarés test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9550189777a2SCristian Pallares for libdir in $rpath; do 9551189777a2SCristian Pallares if test -n "$hardcode_libdir_flag_spec"; then 9552189777a2SCristian Pallares if test -n "$hardcode_libdir_separator"; then 9553189777a2SCristian Pallares func_replace_sysroot "$libdir" 9554189777a2SCristian Pallares libdir=$func_replace_sysroot_result 9555189777a2SCristian Pallares if test -z "$hardcode_libdirs"; then 9556*b3fce824SCristian Pallarés hardcode_libdirs=$libdir 9557189777a2SCristian Pallares else 9558189777a2SCristian Pallares # Just accumulate the unique libdirs. 9559189777a2SCristian Pallares case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9560189777a2SCristian Pallares *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9561189777a2SCristian Pallares ;; 9562189777a2SCristian Pallares *) 9563189777a2SCristian Pallares func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9564189777a2SCristian Pallares ;; 9565189777a2SCristian Pallares esac 9566189777a2SCristian Pallares fi 9567189777a2SCristian Pallares else 9568189777a2SCristian Pallares eval flag=\"$hardcode_libdir_flag_spec\" 9569189777a2SCristian Pallares func_append dep_rpath " $flag" 9570189777a2SCristian Pallares fi 9571189777a2SCristian Pallares elif test -n "$runpath_var"; then 9572189777a2SCristian Pallares case "$perm_rpath " in 9573189777a2SCristian Pallares *" $libdir "*) ;; 9574189777a2SCristian Pallares *) func_append perm_rpath " $libdir" ;; 9575189777a2SCristian Pallares esac 9576189777a2SCristian Pallares fi 9577189777a2SCristian Pallares done 9578189777a2SCristian Pallares # Substitute the hardcoded libdirs into the rpath. 9579189777a2SCristian Pallares if test -n "$hardcode_libdir_separator" && 9580189777a2SCristian Pallares test -n "$hardcode_libdirs"; then 9581*b3fce824SCristian Pallarés libdir=$hardcode_libdirs 9582189777a2SCristian Pallares eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9583189777a2SCristian Pallares fi 9584189777a2SCristian Pallares if test -n "$runpath_var" && test -n "$perm_rpath"; then 9585189777a2SCristian Pallares # We should set the runpath_var. 9586189777a2SCristian Pallares rpath= 9587189777a2SCristian Pallares for dir in $perm_rpath; do 9588189777a2SCristian Pallares func_append rpath "$dir:" 9589189777a2SCristian Pallares done 9590189777a2SCristian Pallares eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9591189777a2SCristian Pallares fi 9592189777a2SCristian Pallares test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9593189777a2SCristian Pallares fi 9594189777a2SCristian Pallares 9595*b3fce824SCristian Pallarés shlibpath=$finalize_shlibpath 9596*b3fce824SCristian Pallarés test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9597189777a2SCristian Pallares if test -n "$shlibpath"; then 9598189777a2SCristian Pallares eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9599189777a2SCristian Pallares fi 9600189777a2SCristian Pallares 9601189777a2SCristian Pallares # Get the real and link names of the library. 9602189777a2SCristian Pallares eval shared_ext=\"$shrext_cmds\" 9603189777a2SCristian Pallares eval library_names=\"$library_names_spec\" 9604189777a2SCristian Pallares set dummy $library_names 9605189777a2SCristian Pallares shift 9606*b3fce824SCristian Pallarés realname=$1 9607189777a2SCristian Pallares shift 9608189777a2SCristian Pallares 9609189777a2SCristian Pallares if test -n "$soname_spec"; then 9610189777a2SCristian Pallares eval soname=\"$soname_spec\" 9611189777a2SCristian Pallares else 9612*b3fce824SCristian Pallarés soname=$realname 9613189777a2SCristian Pallares fi 9614189777a2SCristian Pallares if test -z "$dlname"; then 9615189777a2SCristian Pallares dlname=$soname 9616189777a2SCristian Pallares fi 9617189777a2SCristian Pallares 9618*b3fce824SCristian Pallarés lib=$output_objdir/$realname 9619189777a2SCristian Pallares linknames= 9620189777a2SCristian Pallares for link 9621189777a2SCristian Pallares do 9622189777a2SCristian Pallares func_append linknames " $link" 9623189777a2SCristian Pallares done 9624189777a2SCristian Pallares 9625189777a2SCristian Pallares # Use standard objects if they are pic 9626189777a2SCristian Pallares test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9627189777a2SCristian Pallares test "X$libobjs" = "X " && libobjs= 9628189777a2SCristian Pallares 9629189777a2SCristian Pallares delfiles= 9630189777a2SCristian Pallares if test -n "$export_symbols" && test -n "$include_expsyms"; then 9631189777a2SCristian Pallares $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9632*b3fce824SCristian Pallarés export_symbols=$output_objdir/$libname.uexp 9633189777a2SCristian Pallares func_append delfiles " $export_symbols" 9634189777a2SCristian Pallares fi 9635189777a2SCristian Pallares 9636189777a2SCristian Pallares orig_export_symbols= 9637189777a2SCristian Pallares case $host_os in 9638189777a2SCristian Pallares cygwin* | mingw* | cegcc*) 9639189777a2SCristian Pallares if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9640189777a2SCristian Pallares # exporting using user supplied symfile 9641*b3fce824SCristian Pallarés func_dll_def_p "$export_symbols" || { 9642189777a2SCristian Pallares # and it's NOT already a .def file. Must figure out 9643189777a2SCristian Pallares # which of the given symbols are data symbols and tag 9644189777a2SCristian Pallares # them as such. So, trigger use of export_symbols_cmds. 9645189777a2SCristian Pallares # export_symbols gets reassigned inside the "prepare 9646189777a2SCristian Pallares # the list of exported symbols" if statement, so the 9647189777a2SCristian Pallares # include_expsyms logic still works. 9648*b3fce824SCristian Pallarés orig_export_symbols=$export_symbols 9649189777a2SCristian Pallares export_symbols= 9650189777a2SCristian Pallares always_export_symbols=yes 9651*b3fce824SCristian Pallarés } 9652189777a2SCristian Pallares fi 9653189777a2SCristian Pallares ;; 9654189777a2SCristian Pallares esac 9655189777a2SCristian Pallares 9656189777a2SCristian Pallares # Prepare the list of exported symbols 9657189777a2SCristian Pallares if test -z "$export_symbols"; then 9658*b3fce824SCristian Pallarés if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9659*b3fce824SCristian Pallarés func_verbose "generating symbol list for '$libname.la'" 9660*b3fce824SCristian Pallarés export_symbols=$output_objdir/$libname.exp 9661189777a2SCristian Pallares $opt_dry_run || $RM $export_symbols 9662189777a2SCristian Pallares cmds=$export_symbols_cmds 9663*b3fce824SCristian Pallarés save_ifs=$IFS; IFS='~' 9664189777a2SCristian Pallares for cmd1 in $cmds; do 9665*b3fce824SCristian Pallarés IFS=$save_ifs 9666189777a2SCristian Pallares # Take the normal branch if the nm_file_list_spec branch 9667189777a2SCristian Pallares # doesn't work or if tool conversion is not needed. 9668189777a2SCristian Pallares case $nm_file_list_spec~$to_tool_file_cmd in 9669189777a2SCristian Pallares *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9670189777a2SCristian Pallares try_normal_branch=yes 9671189777a2SCristian Pallares eval cmd=\"$cmd1\" 9672189777a2SCristian Pallares func_len " $cmd" 9673189777a2SCristian Pallares len=$func_len_result 9674189777a2SCristian Pallares ;; 9675189777a2SCristian Pallares *) 9676189777a2SCristian Pallares try_normal_branch=no 9677189777a2SCristian Pallares ;; 9678189777a2SCristian Pallares esac 9679*b3fce824SCristian Pallarés if test yes = "$try_normal_branch" \ 9680189777a2SCristian Pallares && { test "$len" -lt "$max_cmd_len" \ 9681189777a2SCristian Pallares || test "$max_cmd_len" -le -1; } 9682189777a2SCristian Pallares then 9683189777a2SCristian Pallares func_show_eval "$cmd" 'exit $?' 9684189777a2SCristian Pallares skipped_export=false 9685189777a2SCristian Pallares elif test -n "$nm_file_list_spec"; then 9686189777a2SCristian Pallares func_basename "$output" 9687189777a2SCristian Pallares output_la=$func_basename_result 9688189777a2SCristian Pallares save_libobjs=$libobjs 9689189777a2SCristian Pallares save_output=$output 9690*b3fce824SCristian Pallarés output=$output_objdir/$output_la.nm 9691189777a2SCristian Pallares func_to_tool_file "$output" 9692189777a2SCristian Pallares libobjs=$nm_file_list_spec$func_to_tool_file_result 9693189777a2SCristian Pallares func_append delfiles " $output" 9694189777a2SCristian Pallares func_verbose "creating $NM input file list: $output" 9695189777a2SCristian Pallares for obj in $save_libobjs; do 9696189777a2SCristian Pallares func_to_tool_file "$obj" 9697189777a2SCristian Pallares $ECHO "$func_to_tool_file_result" 9698189777a2SCristian Pallares done > "$output" 9699189777a2SCristian Pallares eval cmd=\"$cmd1\" 9700189777a2SCristian Pallares func_show_eval "$cmd" 'exit $?' 9701189777a2SCristian Pallares output=$save_output 9702189777a2SCristian Pallares libobjs=$save_libobjs 9703189777a2SCristian Pallares skipped_export=false 9704189777a2SCristian Pallares else 9705189777a2SCristian Pallares # The command line is too long to execute in one step. 9706189777a2SCristian Pallares func_verbose "using reloadable object file for export list..." 9707189777a2SCristian Pallares skipped_export=: 9708189777a2SCristian Pallares # Break out early, otherwise skipped_export may be 9709189777a2SCristian Pallares # set to false by a later but shorter cmd. 9710189777a2SCristian Pallares break 9711189777a2SCristian Pallares fi 9712189777a2SCristian Pallares done 9713*b3fce824SCristian Pallarés IFS=$save_ifs 9714*b3fce824SCristian Pallarés if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9715189777a2SCristian Pallares func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9716189777a2SCristian Pallares func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9717189777a2SCristian Pallares fi 9718189777a2SCristian Pallares fi 9719189777a2SCristian Pallares fi 9720189777a2SCristian Pallares 9721189777a2SCristian Pallares if test -n "$export_symbols" && test -n "$include_expsyms"; then 9722*b3fce824SCristian Pallarés tmp_export_symbols=$export_symbols 9723*b3fce824SCristian Pallarés test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9724189777a2SCristian Pallares $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9725189777a2SCristian Pallares fi 9726189777a2SCristian Pallares 9727*b3fce824SCristian Pallarés if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9728189777a2SCristian Pallares # The given exports_symbols file has to be filtered, so filter it. 9729*b3fce824SCristian Pallarés func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9730189777a2SCristian Pallares # FIXME: $output_objdir/$libname.filter potentially contains lots of 9731*b3fce824SCristian Pallarés # 's' commands, which not all seds can handle. GNU sed should be fine 9732189777a2SCristian Pallares # though. Also, the filter scales superlinearly with the number of 9733189777a2SCristian Pallares # global variables. join(1) would be nice here, but unfortunately 9734189777a2SCristian Pallares # isn't a blessed tool. 9735189777a2SCristian Pallares $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9736189777a2SCristian Pallares func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9737189777a2SCristian Pallares export_symbols=$output_objdir/$libname.def 9738189777a2SCristian Pallares $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9739189777a2SCristian Pallares fi 9740189777a2SCristian Pallares 9741189777a2SCristian Pallares tmp_deplibs= 9742189777a2SCristian Pallares for test_deplib in $deplibs; do 9743189777a2SCristian Pallares case " $convenience " in 9744189777a2SCristian Pallares *" $test_deplib "*) ;; 9745189777a2SCristian Pallares *) 9746189777a2SCristian Pallares func_append tmp_deplibs " $test_deplib" 9747189777a2SCristian Pallares ;; 9748189777a2SCristian Pallares esac 9749189777a2SCristian Pallares done 9750*b3fce824SCristian Pallarés deplibs=$tmp_deplibs 9751189777a2SCristian Pallares 9752189777a2SCristian Pallares if test -n "$convenience"; then 9753189777a2SCristian Pallares if test -n "$whole_archive_flag_spec" && 9754*b3fce824SCristian Pallarés test yes = "$compiler_needs_object" && 9755189777a2SCristian Pallares test -z "$libobjs"; then 9756189777a2SCristian Pallares # extract the archives, so we have objects to list. 9757189777a2SCristian Pallares # TODO: could optimize this to just extract one archive. 9758189777a2SCristian Pallares whole_archive_flag_spec= 9759189777a2SCristian Pallares fi 9760189777a2SCristian Pallares if test -n "$whole_archive_flag_spec"; then 9761189777a2SCristian Pallares save_libobjs=$libobjs 9762189777a2SCristian Pallares eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9763189777a2SCristian Pallares test "X$libobjs" = "X " && libobjs= 9764189777a2SCristian Pallares else 9765*b3fce824SCristian Pallarés gentop=$output_objdir/${outputname}x 9766189777a2SCristian Pallares func_append generated " $gentop" 9767189777a2SCristian Pallares 9768189777a2SCristian Pallares func_extract_archives $gentop $convenience 9769189777a2SCristian Pallares func_append libobjs " $func_extract_archives_result" 9770189777a2SCristian Pallares test "X$libobjs" = "X " && libobjs= 9771189777a2SCristian Pallares fi 9772189777a2SCristian Pallares fi 9773189777a2SCristian Pallares 9774*b3fce824SCristian Pallarés if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9775189777a2SCristian Pallares eval flag=\"$thread_safe_flag_spec\" 9776189777a2SCristian Pallares func_append linker_flags " $flag" 9777189777a2SCristian Pallares fi 9778189777a2SCristian Pallares 9779189777a2SCristian Pallares # Make a backup of the uninstalled library when relinking 9780*b3fce824SCristian Pallarés if test relink = "$opt_mode"; then 9781189777a2SCristian Pallares $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9782189777a2SCristian Pallares fi 9783189777a2SCristian Pallares 9784189777a2SCristian Pallares # Do each of the archive commands. 9785*b3fce824SCristian Pallarés if test yes = "$module" && test -n "$module_cmds"; then 9786189777a2SCristian Pallares if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9787189777a2SCristian Pallares eval test_cmds=\"$module_expsym_cmds\" 9788189777a2SCristian Pallares cmds=$module_expsym_cmds 9789189777a2SCristian Pallares else 9790189777a2SCristian Pallares eval test_cmds=\"$module_cmds\" 9791189777a2SCristian Pallares cmds=$module_cmds 9792189777a2SCristian Pallares fi 9793189777a2SCristian Pallares else 9794189777a2SCristian Pallares if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 9795189777a2SCristian Pallares eval test_cmds=\"$archive_expsym_cmds\" 9796189777a2SCristian Pallares cmds=$archive_expsym_cmds 9797189777a2SCristian Pallares else 9798189777a2SCristian Pallares eval test_cmds=\"$archive_cmds\" 9799189777a2SCristian Pallares cmds=$archive_cmds 9800189777a2SCristian Pallares fi 9801189777a2SCristian Pallares fi 9802189777a2SCristian Pallares 9803*b3fce824SCristian Pallarés if test : != "$skipped_export" && 9804189777a2SCristian Pallares func_len " $test_cmds" && 9805189777a2SCristian Pallares len=$func_len_result && 9806189777a2SCristian Pallares test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9807189777a2SCristian Pallares : 9808189777a2SCristian Pallares else 9809189777a2SCristian Pallares # The command line is too long to link in one step, link piecewise 9810189777a2SCristian Pallares # or, if using GNU ld and skipped_export is not :, use a linker 9811189777a2SCristian Pallares # script. 9812189777a2SCristian Pallares 9813189777a2SCristian Pallares # Save the value of $output and $libobjs because we want to 9814189777a2SCristian Pallares # use them later. If we have whole_archive_flag_spec, we 9815189777a2SCristian Pallares # want to use save_libobjs as it was before 9816189777a2SCristian Pallares # whole_archive_flag_spec was expanded, because we can't 9817189777a2SCristian Pallares # assume the linker understands whole_archive_flag_spec. 9818189777a2SCristian Pallares # This may have to be revisited, in case too many 9819189777a2SCristian Pallares # convenience libraries get linked in and end up exceeding 9820189777a2SCristian Pallares # the spec. 9821189777a2SCristian Pallares if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 9822189777a2SCristian Pallares save_libobjs=$libobjs 9823189777a2SCristian Pallares fi 9824189777a2SCristian Pallares save_output=$output 9825189777a2SCristian Pallares func_basename "$output" 9826189777a2SCristian Pallares output_la=$func_basename_result 9827189777a2SCristian Pallares 9828189777a2SCristian Pallares # Clear the reloadable object creation command queue and 9829189777a2SCristian Pallares # initialize k to one. 9830189777a2SCristian Pallares test_cmds= 9831189777a2SCristian Pallares concat_cmds= 9832189777a2SCristian Pallares objlist= 9833189777a2SCristian Pallares last_robj= 9834189777a2SCristian Pallares k=1 9835189777a2SCristian Pallares 9836*b3fce824SCristian Pallarés if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 9837*b3fce824SCristian Pallarés output=$output_objdir/$output_la.lnkscript 9838189777a2SCristian Pallares func_verbose "creating GNU ld script: $output" 9839189777a2SCristian Pallares echo 'INPUT (' > $output 9840189777a2SCristian Pallares for obj in $save_libobjs 9841189777a2SCristian Pallares do 9842189777a2SCristian Pallares func_to_tool_file "$obj" 9843189777a2SCristian Pallares $ECHO "$func_to_tool_file_result" >> $output 9844189777a2SCristian Pallares done 9845189777a2SCristian Pallares echo ')' >> $output 9846189777a2SCristian Pallares func_append delfiles " $output" 9847189777a2SCristian Pallares func_to_tool_file "$output" 9848189777a2SCristian Pallares output=$func_to_tool_file_result 9849*b3fce824SCristian Pallarés elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 9850*b3fce824SCristian Pallarés output=$output_objdir/$output_la.lnk 9851189777a2SCristian Pallares func_verbose "creating linker input file list: $output" 9852189777a2SCristian Pallares : > $output 9853189777a2SCristian Pallares set x $save_libobjs 9854189777a2SCristian Pallares shift 9855189777a2SCristian Pallares firstobj= 9856*b3fce824SCristian Pallarés if test yes = "$compiler_needs_object"; then 9857189777a2SCristian Pallares firstobj="$1 " 9858189777a2SCristian Pallares shift 9859189777a2SCristian Pallares fi 9860189777a2SCristian Pallares for obj 9861189777a2SCristian Pallares do 9862189777a2SCristian Pallares func_to_tool_file "$obj" 9863189777a2SCristian Pallares $ECHO "$func_to_tool_file_result" >> $output 9864189777a2SCristian Pallares done 9865189777a2SCristian Pallares func_append delfiles " $output" 9866189777a2SCristian Pallares func_to_tool_file "$output" 9867189777a2SCristian Pallares output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 9868189777a2SCristian Pallares else 9869189777a2SCristian Pallares if test -n "$save_libobjs"; then 9870189777a2SCristian Pallares func_verbose "creating reloadable object files..." 9871*b3fce824SCristian Pallarés output=$output_objdir/$output_la-$k.$objext 9872189777a2SCristian Pallares eval test_cmds=\"$reload_cmds\" 9873189777a2SCristian Pallares func_len " $test_cmds" 9874189777a2SCristian Pallares len0=$func_len_result 9875189777a2SCristian Pallares len=$len0 9876189777a2SCristian Pallares 9877189777a2SCristian Pallares # Loop over the list of objects to be linked. 9878189777a2SCristian Pallares for obj in $save_libobjs 9879189777a2SCristian Pallares do 9880189777a2SCristian Pallares func_len " $obj" 9881189777a2SCristian Pallares func_arith $len + $func_len_result 9882189777a2SCristian Pallares len=$func_arith_result 9883*b3fce824SCristian Pallarés if test -z "$objlist" || 9884189777a2SCristian Pallares test "$len" -lt "$max_cmd_len"; then 9885189777a2SCristian Pallares func_append objlist " $obj" 9886189777a2SCristian Pallares else 9887189777a2SCristian Pallares # The command $test_cmds is almost too long, add a 9888189777a2SCristian Pallares # command to the queue. 9889*b3fce824SCristian Pallarés if test 1 -eq "$k"; then 9890189777a2SCristian Pallares # The first file doesn't have a previous command to add. 9891189777a2SCristian Pallares reload_objs=$objlist 9892189777a2SCristian Pallares eval concat_cmds=\"$reload_cmds\" 9893189777a2SCristian Pallares else 9894189777a2SCristian Pallares # All subsequent reloadable object files will link in 9895189777a2SCristian Pallares # the last one created. 9896189777a2SCristian Pallares reload_objs="$objlist $last_robj" 9897189777a2SCristian Pallares eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 9898189777a2SCristian Pallares fi 9899*b3fce824SCristian Pallarés last_robj=$output_objdir/$output_la-$k.$objext 9900189777a2SCristian Pallares func_arith $k + 1 9901189777a2SCristian Pallares k=$func_arith_result 9902*b3fce824SCristian Pallarés output=$output_objdir/$output_la-$k.$objext 9903189777a2SCristian Pallares objlist=" $obj" 9904189777a2SCristian Pallares func_len " $last_robj" 9905189777a2SCristian Pallares func_arith $len0 + $func_len_result 9906189777a2SCristian Pallares len=$func_arith_result 9907189777a2SCristian Pallares fi 9908189777a2SCristian Pallares done 9909189777a2SCristian Pallares # Handle the remaining objects by creating one last 9910189777a2SCristian Pallares # reloadable object file. All subsequent reloadable object 9911189777a2SCristian Pallares # files will link in the last one created. 9912189777a2SCristian Pallares test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9913189777a2SCristian Pallares reload_objs="$objlist $last_robj" 9914*b3fce824SCristian Pallarés eval concat_cmds=\"\$concat_cmds$reload_cmds\" 9915189777a2SCristian Pallares if test -n "$last_robj"; then 9916*b3fce824SCristian Pallarés eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9917189777a2SCristian Pallares fi 9918189777a2SCristian Pallares func_append delfiles " $output" 9919189777a2SCristian Pallares 9920189777a2SCristian Pallares else 9921189777a2SCristian Pallares output= 9922189777a2SCristian Pallares fi 9923189777a2SCristian Pallares 9924*b3fce824SCristian Pallarés ${skipped_export-false} && { 9925*b3fce824SCristian Pallarés func_verbose "generating symbol list for '$libname.la'" 9926*b3fce824SCristian Pallarés export_symbols=$output_objdir/$libname.exp 9927189777a2SCristian Pallares $opt_dry_run || $RM $export_symbols 9928189777a2SCristian Pallares libobjs=$output 9929189777a2SCristian Pallares # Append the command to create the export file. 9930189777a2SCristian Pallares test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9931189777a2SCristian Pallares eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 9932189777a2SCristian Pallares if test -n "$last_robj"; then 9933189777a2SCristian Pallares eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9934189777a2SCristian Pallares fi 9935*b3fce824SCristian Pallarés } 9936189777a2SCristian Pallares 9937189777a2SCristian Pallares test -n "$save_libobjs" && 9938189777a2SCristian Pallares func_verbose "creating a temporary reloadable object file: $output" 9939189777a2SCristian Pallares 9940189777a2SCristian Pallares # Loop through the commands generated above and execute them. 9941*b3fce824SCristian Pallarés save_ifs=$IFS; IFS='~' 9942189777a2SCristian Pallares for cmd in $concat_cmds; do 9943*b3fce824SCristian Pallarés IFS=$save_ifs 9944*b3fce824SCristian Pallarés $opt_quiet || { 9945189777a2SCristian Pallares func_quote_for_expand "$cmd" 9946189777a2SCristian Pallares eval "func_echo $func_quote_for_expand_result" 9947189777a2SCristian Pallares } 9948189777a2SCristian Pallares $opt_dry_run || eval "$cmd" || { 9949189777a2SCristian Pallares lt_exit=$? 9950189777a2SCristian Pallares 9951189777a2SCristian Pallares # Restore the uninstalled library and exit 9952*b3fce824SCristian Pallarés if test relink = "$opt_mode"; then 9953189777a2SCristian Pallares ( cd "$output_objdir" && \ 9954189777a2SCristian Pallares $RM "${realname}T" && \ 9955189777a2SCristian Pallares $MV "${realname}U" "$realname" ) 9956189777a2SCristian Pallares fi 9957189777a2SCristian Pallares 9958189777a2SCristian Pallares exit $lt_exit 9959189777a2SCristian Pallares } 9960189777a2SCristian Pallares done 9961*b3fce824SCristian Pallarés IFS=$save_ifs 9962189777a2SCristian Pallares 9963189777a2SCristian Pallares if test -n "$export_symbols_regex" && ${skipped_export-false}; then 9964189777a2SCristian Pallares func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9965189777a2SCristian Pallares func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9966189777a2SCristian Pallares fi 9967189777a2SCristian Pallares fi 9968189777a2SCristian Pallares 9969*b3fce824SCristian Pallarés ${skipped_export-false} && { 9970189777a2SCristian Pallares if test -n "$export_symbols" && test -n "$include_expsyms"; then 9971*b3fce824SCristian Pallarés tmp_export_symbols=$export_symbols 9972*b3fce824SCristian Pallarés test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9973189777a2SCristian Pallares $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9974189777a2SCristian Pallares fi 9975189777a2SCristian Pallares 9976189777a2SCristian Pallares if test -n "$orig_export_symbols"; then 9977189777a2SCristian Pallares # The given exports_symbols file has to be filtered, so filter it. 9978*b3fce824SCristian Pallarés func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9979189777a2SCristian Pallares # FIXME: $output_objdir/$libname.filter potentially contains lots of 9980*b3fce824SCristian Pallarés # 's' commands, which not all seds can handle. GNU sed should be fine 9981189777a2SCristian Pallares # though. Also, the filter scales superlinearly with the number of 9982189777a2SCristian Pallares # global variables. join(1) would be nice here, but unfortunately 9983189777a2SCristian Pallares # isn't a blessed tool. 9984189777a2SCristian Pallares $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9985189777a2SCristian Pallares func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9986189777a2SCristian Pallares export_symbols=$output_objdir/$libname.def 9987189777a2SCristian Pallares $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9988189777a2SCristian Pallares fi 9989*b3fce824SCristian Pallarés } 9990189777a2SCristian Pallares 9991189777a2SCristian Pallares libobjs=$output 9992189777a2SCristian Pallares # Restore the value of output. 9993189777a2SCristian Pallares output=$save_output 9994189777a2SCristian Pallares 9995189777a2SCristian Pallares if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 9996189777a2SCristian Pallares eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9997189777a2SCristian Pallares test "X$libobjs" = "X " && libobjs= 9998189777a2SCristian Pallares fi 9999189777a2SCristian Pallares # Expand the library linking commands again to reset the 10000189777a2SCristian Pallares # value of $libobjs for piecewise linking. 10001189777a2SCristian Pallares 10002189777a2SCristian Pallares # Do each of the archive commands. 10003*b3fce824SCristian Pallarés if test yes = "$module" && test -n "$module_cmds"; then 10004189777a2SCristian Pallares if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 10005189777a2SCristian Pallares cmds=$module_expsym_cmds 10006189777a2SCristian Pallares else 10007189777a2SCristian Pallares cmds=$module_cmds 10008189777a2SCristian Pallares fi 10009189777a2SCristian Pallares else 10010189777a2SCristian Pallares if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10011189777a2SCristian Pallares cmds=$archive_expsym_cmds 10012189777a2SCristian Pallares else 10013189777a2SCristian Pallares cmds=$archive_cmds 10014189777a2SCristian Pallares fi 10015189777a2SCristian Pallares fi 10016189777a2SCristian Pallares fi 10017189777a2SCristian Pallares 10018189777a2SCristian Pallares if test -n "$delfiles"; then 10019189777a2SCristian Pallares # Append the command to remove temporary files to $cmds. 10020189777a2SCristian Pallares eval cmds=\"\$cmds~\$RM $delfiles\" 10021189777a2SCristian Pallares fi 10022189777a2SCristian Pallares 10023189777a2SCristian Pallares # Add any objects from preloaded convenience libraries 10024189777a2SCristian Pallares if test -n "$dlprefiles"; then 10025*b3fce824SCristian Pallarés gentop=$output_objdir/${outputname}x 10026189777a2SCristian Pallares func_append generated " $gentop" 10027189777a2SCristian Pallares 10028189777a2SCristian Pallares func_extract_archives $gentop $dlprefiles 10029189777a2SCristian Pallares func_append libobjs " $func_extract_archives_result" 10030189777a2SCristian Pallares test "X$libobjs" = "X " && libobjs= 10031189777a2SCristian Pallares fi 10032189777a2SCristian Pallares 10033*b3fce824SCristian Pallarés save_ifs=$IFS; IFS='~' 10034189777a2SCristian Pallares for cmd in $cmds; do 10035*b3fce824SCristian Pallarés IFS=$sp$nl 10036189777a2SCristian Pallares eval cmd=\"$cmd\" 10037*b3fce824SCristian Pallarés IFS=$save_ifs 10038*b3fce824SCristian Pallarés $opt_quiet || { 10039189777a2SCristian Pallares func_quote_for_expand "$cmd" 10040189777a2SCristian Pallares eval "func_echo $func_quote_for_expand_result" 10041189777a2SCristian Pallares } 10042189777a2SCristian Pallares $opt_dry_run || eval "$cmd" || { 10043189777a2SCristian Pallares lt_exit=$? 10044189777a2SCristian Pallares 10045189777a2SCristian Pallares # Restore the uninstalled library and exit 10046*b3fce824SCristian Pallarés if test relink = "$opt_mode"; then 10047189777a2SCristian Pallares ( cd "$output_objdir" && \ 10048189777a2SCristian Pallares $RM "${realname}T" && \ 10049189777a2SCristian Pallares $MV "${realname}U" "$realname" ) 10050189777a2SCristian Pallares fi 10051189777a2SCristian Pallares 10052189777a2SCristian Pallares exit $lt_exit 10053189777a2SCristian Pallares } 10054189777a2SCristian Pallares done 10055*b3fce824SCristian Pallarés IFS=$save_ifs 10056189777a2SCristian Pallares 10057189777a2SCristian Pallares # Restore the uninstalled library and exit 10058*b3fce824SCristian Pallarés if test relink = "$opt_mode"; then 10059189777a2SCristian Pallares $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10060189777a2SCristian Pallares 10061189777a2SCristian Pallares if test -n "$convenience"; then 10062189777a2SCristian Pallares if test -z "$whole_archive_flag_spec"; then 10063189777a2SCristian Pallares func_show_eval '${RM}r "$gentop"' 10064189777a2SCristian Pallares fi 10065189777a2SCristian Pallares fi 10066189777a2SCristian Pallares 10067189777a2SCristian Pallares exit $EXIT_SUCCESS 10068189777a2SCristian Pallares fi 10069189777a2SCristian Pallares 10070189777a2SCristian Pallares # Create links to the real library. 10071189777a2SCristian Pallares for linkname in $linknames; do 10072189777a2SCristian Pallares if test "$realname" != "$linkname"; then 10073189777a2SCristian Pallares func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10074189777a2SCristian Pallares fi 10075189777a2SCristian Pallares done 10076189777a2SCristian Pallares 10077189777a2SCristian Pallares # If -module or -export-dynamic was specified, set the dlname. 10078*b3fce824SCristian Pallarés if test yes = "$module" || test yes = "$export_dynamic"; then 10079189777a2SCristian Pallares # On all known operating systems, these are identical. 10080*b3fce824SCristian Pallarés dlname=$soname 10081189777a2SCristian Pallares fi 10082189777a2SCristian Pallares fi 10083189777a2SCristian Pallares ;; 10084189777a2SCristian Pallares 10085189777a2SCristian Pallares obj) 10086*b3fce824SCristian Pallarés if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10087*b3fce824SCristian Pallarés func_warning "'-dlopen' is ignored for objects" 10088189777a2SCristian Pallares fi 10089189777a2SCristian Pallares 10090189777a2SCristian Pallares case " $deplibs" in 10091189777a2SCristian Pallares *\ -l* | *\ -L*) 10092*b3fce824SCristian Pallarés func_warning "'-l' and '-L' are ignored for objects" ;; 10093189777a2SCristian Pallares esac 10094189777a2SCristian Pallares 10095189777a2SCristian Pallares test -n "$rpath" && \ 10096*b3fce824SCristian Pallarés func_warning "'-rpath' is ignored for objects" 10097189777a2SCristian Pallares 10098189777a2SCristian Pallares test -n "$xrpath" && \ 10099*b3fce824SCristian Pallarés func_warning "'-R' is ignored for objects" 10100189777a2SCristian Pallares 10101189777a2SCristian Pallares test -n "$vinfo" && \ 10102*b3fce824SCristian Pallarés func_warning "'-version-info' is ignored for objects" 10103189777a2SCristian Pallares 10104189777a2SCristian Pallares test -n "$release" && \ 10105*b3fce824SCristian Pallarés func_warning "'-release' is ignored for objects" 10106189777a2SCristian Pallares 10107189777a2SCristian Pallares case $output in 10108189777a2SCristian Pallares *.lo) 10109189777a2SCristian Pallares test -n "$objs$old_deplibs" && \ 10110*b3fce824SCristian Pallarés func_fatal_error "cannot build library object '$output' from non-libtool objects" 10111189777a2SCristian Pallares 10112189777a2SCristian Pallares libobj=$output 10113189777a2SCristian Pallares func_lo2o "$libobj" 10114189777a2SCristian Pallares obj=$func_lo2o_result 10115189777a2SCristian Pallares ;; 10116189777a2SCristian Pallares *) 10117189777a2SCristian Pallares libobj= 10118*b3fce824SCristian Pallarés obj=$output 10119189777a2SCristian Pallares ;; 10120189777a2SCristian Pallares esac 10121189777a2SCristian Pallares 10122189777a2SCristian Pallares # Delete the old objects. 10123189777a2SCristian Pallares $opt_dry_run || $RM $obj $libobj 10124189777a2SCristian Pallares 10125189777a2SCristian Pallares # Objects from convenience libraries. This assumes 10126189777a2SCristian Pallares # single-version convenience libraries. Whenever we create 10127189777a2SCristian Pallares # different ones for PIC/non-PIC, this we'll have to duplicate 10128189777a2SCristian Pallares # the extraction. 10129189777a2SCristian Pallares reload_conv_objs= 10130189777a2SCristian Pallares gentop= 10131*b3fce824SCristian Pallarés # if reload_cmds runs $LD directly, get rid of -Wl from 10132*b3fce824SCristian Pallarés # whole_archive_flag_spec and hope we can get by with turning comma 10133*b3fce824SCristian Pallarés # into space. 10134*b3fce824SCristian Pallarés case $reload_cmds in 10135*b3fce824SCristian Pallarés *\$LD[\ \$]*) wl= ;; 10136*b3fce824SCristian Pallarés esac 10137189777a2SCristian Pallares if test -n "$convenience"; then 10138189777a2SCristian Pallares if test -n "$whole_archive_flag_spec"; then 10139189777a2SCristian Pallares eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10140*b3fce824SCristian Pallarés test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10141*b3fce824SCristian Pallarés reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10142189777a2SCristian Pallares else 10143*b3fce824SCristian Pallarés gentop=$output_objdir/${obj}x 10144189777a2SCristian Pallares func_append generated " $gentop" 10145189777a2SCristian Pallares 10146189777a2SCristian Pallares func_extract_archives $gentop $convenience 10147189777a2SCristian Pallares reload_conv_objs="$reload_objs $func_extract_archives_result" 10148189777a2SCristian Pallares fi 10149189777a2SCristian Pallares fi 10150189777a2SCristian Pallares 10151189777a2SCristian Pallares # If we're not building shared, we need to use non_pic_objs 10152*b3fce824SCristian Pallarés test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10153189777a2SCristian Pallares 10154189777a2SCristian Pallares # Create the old-style object. 10155*b3fce824SCristian Pallarés reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10156189777a2SCristian Pallares 10157*b3fce824SCristian Pallarés output=$obj 10158189777a2SCristian Pallares func_execute_cmds "$reload_cmds" 'exit $?' 10159189777a2SCristian Pallares 10160189777a2SCristian Pallares # Exit if we aren't doing a library object file. 10161189777a2SCristian Pallares if test -z "$libobj"; then 10162189777a2SCristian Pallares if test -n "$gentop"; then 10163189777a2SCristian Pallares func_show_eval '${RM}r "$gentop"' 10164189777a2SCristian Pallares fi 10165189777a2SCristian Pallares 10166189777a2SCristian Pallares exit $EXIT_SUCCESS 10167189777a2SCristian Pallares fi 10168189777a2SCristian Pallares 10169*b3fce824SCristian Pallarés test yes = "$build_libtool_libs" || { 10170189777a2SCristian Pallares if test -n "$gentop"; then 10171189777a2SCristian Pallares func_show_eval '${RM}r "$gentop"' 10172189777a2SCristian Pallares fi 10173189777a2SCristian Pallares 10174189777a2SCristian Pallares # Create an invalid libtool object if no PIC, so that we don't 10175189777a2SCristian Pallares # accidentally link it into a program. 10176189777a2SCristian Pallares # $show "echo timestamp > $libobj" 10177189777a2SCristian Pallares # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10178189777a2SCristian Pallares exit $EXIT_SUCCESS 10179*b3fce824SCristian Pallarés } 10180189777a2SCristian Pallares 10181*b3fce824SCristian Pallarés if test -n "$pic_flag" || test default != "$pic_mode"; then 10182189777a2SCristian Pallares # Only do commands if we really have different PIC objects. 10183189777a2SCristian Pallares reload_objs="$libobjs $reload_conv_objs" 10184*b3fce824SCristian Pallarés output=$libobj 10185189777a2SCristian Pallares func_execute_cmds "$reload_cmds" 'exit $?' 10186189777a2SCristian Pallares fi 10187189777a2SCristian Pallares 10188189777a2SCristian Pallares if test -n "$gentop"; then 10189189777a2SCristian Pallares func_show_eval '${RM}r "$gentop"' 10190189777a2SCristian Pallares fi 10191189777a2SCristian Pallares 10192189777a2SCristian Pallares exit $EXIT_SUCCESS 10193189777a2SCristian Pallares ;; 10194189777a2SCristian Pallares 10195189777a2SCristian Pallares prog) 10196189777a2SCristian Pallares case $host in 10197189777a2SCristian Pallares *cygwin*) func_stripname '' '.exe' "$output" 10198189777a2SCristian Pallares output=$func_stripname_result.exe;; 10199189777a2SCristian Pallares esac 10200189777a2SCristian Pallares test -n "$vinfo" && \ 10201*b3fce824SCristian Pallarés func_warning "'-version-info' is ignored for programs" 10202189777a2SCristian Pallares 10203189777a2SCristian Pallares test -n "$release" && \ 10204*b3fce824SCristian Pallarés func_warning "'-release' is ignored for programs" 10205189777a2SCristian Pallares 10206*b3fce824SCristian Pallarés $preload \ 10207*b3fce824SCristian Pallarés && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10208*b3fce824SCristian Pallarés && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10209189777a2SCristian Pallares 10210189777a2SCristian Pallares case $host in 10211189777a2SCristian Pallares *-*-rhapsody* | *-*-darwin1.[012]) 10212189777a2SCristian Pallares # On Rhapsody replace the C library is the System framework 10213189777a2SCristian Pallares compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10214189777a2SCristian Pallares finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10215189777a2SCristian Pallares ;; 10216189777a2SCristian Pallares esac 10217189777a2SCristian Pallares 10218189777a2SCristian Pallares case $host in 10219189777a2SCristian Pallares *-*-darwin*) 10220189777a2SCristian Pallares # Don't allow lazy linking, it breaks C++ global constructors 10221189777a2SCristian Pallares # But is supposedly fixed on 10.4 or later (yay!). 10222*b3fce824SCristian Pallarés if test CXX = "$tagname"; then 10223189777a2SCristian Pallares case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10224189777a2SCristian Pallares 10.[0123]) 10225*b3fce824SCristian Pallarés func_append compile_command " $wl-bind_at_load" 10226*b3fce824SCristian Pallarés func_append finalize_command " $wl-bind_at_load" 10227189777a2SCristian Pallares ;; 10228189777a2SCristian Pallares esac 10229189777a2SCristian Pallares fi 10230189777a2SCristian Pallares # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10231189777a2SCristian Pallares compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10232189777a2SCristian Pallares finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10233189777a2SCristian Pallares ;; 10234189777a2SCristian Pallares esac 10235189777a2SCristian Pallares 10236189777a2SCristian Pallares 10237189777a2SCristian Pallares # move library search paths that coincide with paths to not yet 10238189777a2SCristian Pallares # installed libraries to the beginning of the library search list 10239189777a2SCristian Pallares new_libs= 10240189777a2SCristian Pallares for path in $notinst_path; do 10241189777a2SCristian Pallares case " $new_libs " in 10242189777a2SCristian Pallares *" -L$path/$objdir "*) ;; 10243189777a2SCristian Pallares *) 10244189777a2SCristian Pallares case " $compile_deplibs " in 10245189777a2SCristian Pallares *" -L$path/$objdir "*) 10246189777a2SCristian Pallares func_append new_libs " -L$path/$objdir" ;; 10247189777a2SCristian Pallares esac 10248189777a2SCristian Pallares ;; 10249189777a2SCristian Pallares esac 10250189777a2SCristian Pallares done 10251189777a2SCristian Pallares for deplib in $compile_deplibs; do 10252189777a2SCristian Pallares case $deplib in 10253189777a2SCristian Pallares -L*) 10254189777a2SCristian Pallares case " $new_libs " in 10255189777a2SCristian Pallares *" $deplib "*) ;; 10256189777a2SCristian Pallares *) func_append new_libs " $deplib" ;; 10257189777a2SCristian Pallares esac 10258189777a2SCristian Pallares ;; 10259189777a2SCristian Pallares *) func_append new_libs " $deplib" ;; 10260189777a2SCristian Pallares esac 10261189777a2SCristian Pallares done 10262*b3fce824SCristian Pallarés compile_deplibs=$new_libs 10263189777a2SCristian Pallares 10264189777a2SCristian Pallares 10265189777a2SCristian Pallares func_append compile_command " $compile_deplibs" 10266189777a2SCristian Pallares func_append finalize_command " $finalize_deplibs" 10267189777a2SCristian Pallares 10268189777a2SCristian Pallares if test -n "$rpath$xrpath"; then 10269189777a2SCristian Pallares # If the user specified any rpath flags, then add them. 10270189777a2SCristian Pallares for libdir in $rpath $xrpath; do 10271189777a2SCristian Pallares # This is the magic to use -rpath. 10272189777a2SCristian Pallares case "$finalize_rpath " in 10273189777a2SCristian Pallares *" $libdir "*) ;; 10274189777a2SCristian Pallares *) func_append finalize_rpath " $libdir" ;; 10275189777a2SCristian Pallares esac 10276189777a2SCristian Pallares done 10277189777a2SCristian Pallares fi 10278189777a2SCristian Pallares 10279189777a2SCristian Pallares # Now hardcode the library paths 10280189777a2SCristian Pallares rpath= 10281189777a2SCristian Pallares hardcode_libdirs= 10282189777a2SCristian Pallares for libdir in $compile_rpath $finalize_rpath; do 10283189777a2SCristian Pallares if test -n "$hardcode_libdir_flag_spec"; then 10284189777a2SCristian Pallares if test -n "$hardcode_libdir_separator"; then 10285189777a2SCristian Pallares if test -z "$hardcode_libdirs"; then 10286*b3fce824SCristian Pallarés hardcode_libdirs=$libdir 10287189777a2SCristian Pallares else 10288189777a2SCristian Pallares # Just accumulate the unique libdirs. 10289189777a2SCristian Pallares case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10290189777a2SCristian Pallares *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10291189777a2SCristian Pallares ;; 10292189777a2SCristian Pallares *) 10293189777a2SCristian Pallares func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10294189777a2SCristian Pallares ;; 10295189777a2SCristian Pallares esac 10296189777a2SCristian Pallares fi 10297189777a2SCristian Pallares else 10298189777a2SCristian Pallares eval flag=\"$hardcode_libdir_flag_spec\" 10299189777a2SCristian Pallares func_append rpath " $flag" 10300189777a2SCristian Pallares fi 10301189777a2SCristian Pallares elif test -n "$runpath_var"; then 10302189777a2SCristian Pallares case "$perm_rpath " in 10303189777a2SCristian Pallares *" $libdir "*) ;; 10304189777a2SCristian Pallares *) func_append perm_rpath " $libdir" ;; 10305189777a2SCristian Pallares esac 10306189777a2SCristian Pallares fi 10307189777a2SCristian Pallares case $host in 10308189777a2SCristian Pallares *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10309*b3fce824SCristian Pallarés testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10310189777a2SCristian Pallares case :$dllsearchpath: in 10311189777a2SCristian Pallares *":$libdir:"*) ;; 10312189777a2SCristian Pallares ::) dllsearchpath=$libdir;; 10313189777a2SCristian Pallares *) func_append dllsearchpath ":$libdir";; 10314189777a2SCristian Pallares esac 10315189777a2SCristian Pallares case :$dllsearchpath: in 10316189777a2SCristian Pallares *":$testbindir:"*) ;; 10317189777a2SCristian Pallares ::) dllsearchpath=$testbindir;; 10318189777a2SCristian Pallares *) func_append dllsearchpath ":$testbindir";; 10319189777a2SCristian Pallares esac 10320189777a2SCristian Pallares ;; 10321189777a2SCristian Pallares esac 10322189777a2SCristian Pallares done 10323189777a2SCristian Pallares # Substitute the hardcoded libdirs into the rpath. 10324189777a2SCristian Pallares if test -n "$hardcode_libdir_separator" && 10325189777a2SCristian Pallares test -n "$hardcode_libdirs"; then 10326*b3fce824SCristian Pallarés libdir=$hardcode_libdirs 10327189777a2SCristian Pallares eval rpath=\" $hardcode_libdir_flag_spec\" 10328189777a2SCristian Pallares fi 10329*b3fce824SCristian Pallarés compile_rpath=$rpath 10330189777a2SCristian Pallares 10331189777a2SCristian Pallares rpath= 10332189777a2SCristian Pallares hardcode_libdirs= 10333189777a2SCristian Pallares for libdir in $finalize_rpath; do 10334189777a2SCristian Pallares if test -n "$hardcode_libdir_flag_spec"; then 10335189777a2SCristian Pallares if test -n "$hardcode_libdir_separator"; then 10336189777a2SCristian Pallares if test -z "$hardcode_libdirs"; then 10337*b3fce824SCristian Pallarés hardcode_libdirs=$libdir 10338189777a2SCristian Pallares else 10339189777a2SCristian Pallares # Just accumulate the unique libdirs. 10340189777a2SCristian Pallares case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10341189777a2SCristian Pallares *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10342189777a2SCristian Pallares ;; 10343189777a2SCristian Pallares *) 10344189777a2SCristian Pallares func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10345189777a2SCristian Pallares ;; 10346189777a2SCristian Pallares esac 10347189777a2SCristian Pallares fi 10348189777a2SCristian Pallares else 10349189777a2SCristian Pallares eval flag=\"$hardcode_libdir_flag_spec\" 10350189777a2SCristian Pallares func_append rpath " $flag" 10351189777a2SCristian Pallares fi 10352189777a2SCristian Pallares elif test -n "$runpath_var"; then 10353189777a2SCristian Pallares case "$finalize_perm_rpath " in 10354189777a2SCristian Pallares *" $libdir "*) ;; 10355189777a2SCristian Pallares *) func_append finalize_perm_rpath " $libdir" ;; 10356189777a2SCristian Pallares esac 10357189777a2SCristian Pallares fi 10358189777a2SCristian Pallares done 10359189777a2SCristian Pallares # Substitute the hardcoded libdirs into the rpath. 10360189777a2SCristian Pallares if test -n "$hardcode_libdir_separator" && 10361189777a2SCristian Pallares test -n "$hardcode_libdirs"; then 10362*b3fce824SCristian Pallarés libdir=$hardcode_libdirs 10363189777a2SCristian Pallares eval rpath=\" $hardcode_libdir_flag_spec\" 10364189777a2SCristian Pallares fi 10365*b3fce824SCristian Pallarés finalize_rpath=$rpath 10366189777a2SCristian Pallares 10367*b3fce824SCristian Pallarés if test -n "$libobjs" && test yes = "$build_old_libs"; then 10368189777a2SCristian Pallares # Transform all the library objects into standard objects. 10369189777a2SCristian Pallares compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10370189777a2SCristian Pallares finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10371189777a2SCristian Pallares fi 10372189777a2SCristian Pallares 10373*b3fce824SCristian Pallarés func_generate_dlsyms "$outputname" "@PROGRAM@" false 10374189777a2SCristian Pallares 10375189777a2SCristian Pallares # template prelinking step 10376189777a2SCristian Pallares if test -n "$prelink_cmds"; then 10377189777a2SCristian Pallares func_execute_cmds "$prelink_cmds" 'exit $?' 10378189777a2SCristian Pallares fi 10379189777a2SCristian Pallares 10380*b3fce824SCristian Pallarés wrappers_required=: 10381189777a2SCristian Pallares case $host in 10382189777a2SCristian Pallares *cegcc* | *mingw32ce*) 10383189777a2SCristian Pallares # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10384*b3fce824SCristian Pallarés wrappers_required=false 10385189777a2SCristian Pallares ;; 10386189777a2SCristian Pallares *cygwin* | *mingw* ) 10387*b3fce824SCristian Pallarés test yes = "$build_libtool_libs" || wrappers_required=false 10388189777a2SCristian Pallares ;; 10389189777a2SCristian Pallares *) 10390*b3fce824SCristian Pallarés if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10391*b3fce824SCristian Pallarés wrappers_required=false 10392189777a2SCristian Pallares fi 10393189777a2SCristian Pallares ;; 10394189777a2SCristian Pallares esac 10395*b3fce824SCristian Pallarés $wrappers_required || { 10396189777a2SCristian Pallares # Replace the output file specification. 10397189777a2SCristian Pallares compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10398*b3fce824SCristian Pallarés link_command=$compile_command$compile_rpath 10399189777a2SCristian Pallares 10400189777a2SCristian Pallares # We have no uninstalled library dependencies, so finalize right now. 10401189777a2SCristian Pallares exit_status=0 10402189777a2SCristian Pallares func_show_eval "$link_command" 'exit_status=$?' 10403189777a2SCristian Pallares 10404189777a2SCristian Pallares if test -n "$postlink_cmds"; then 10405189777a2SCristian Pallares func_to_tool_file "$output" 10406189777a2SCristian Pallares postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10407189777a2SCristian Pallares func_execute_cmds "$postlink_cmds" 'exit $?' 10408189777a2SCristian Pallares fi 10409189777a2SCristian Pallares 10410189777a2SCristian Pallares # Delete the generated files. 10411*b3fce824SCristian Pallarés if test -f "$output_objdir/${outputname}S.$objext"; then 10412*b3fce824SCristian Pallarés func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10413189777a2SCristian Pallares fi 10414189777a2SCristian Pallares 10415189777a2SCristian Pallares exit $exit_status 10416*b3fce824SCristian Pallarés } 10417189777a2SCristian Pallares 10418189777a2SCristian Pallares if test -n "$compile_shlibpath$finalize_shlibpath"; then 10419189777a2SCristian Pallares compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10420189777a2SCristian Pallares fi 10421189777a2SCristian Pallares if test -n "$finalize_shlibpath"; then 10422189777a2SCristian Pallares finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10423189777a2SCristian Pallares fi 10424189777a2SCristian Pallares 10425189777a2SCristian Pallares compile_var= 10426189777a2SCristian Pallares finalize_var= 10427189777a2SCristian Pallares if test -n "$runpath_var"; then 10428189777a2SCristian Pallares if test -n "$perm_rpath"; then 10429189777a2SCristian Pallares # We should set the runpath_var. 10430189777a2SCristian Pallares rpath= 10431189777a2SCristian Pallares for dir in $perm_rpath; do 10432189777a2SCristian Pallares func_append rpath "$dir:" 10433189777a2SCristian Pallares done 10434189777a2SCristian Pallares compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10435189777a2SCristian Pallares fi 10436189777a2SCristian Pallares if test -n "$finalize_perm_rpath"; then 10437189777a2SCristian Pallares # We should set the runpath_var. 10438189777a2SCristian Pallares rpath= 10439189777a2SCristian Pallares for dir in $finalize_perm_rpath; do 10440189777a2SCristian Pallares func_append rpath "$dir:" 10441189777a2SCristian Pallares done 10442189777a2SCristian Pallares finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10443189777a2SCristian Pallares fi 10444189777a2SCristian Pallares fi 10445189777a2SCristian Pallares 10446*b3fce824SCristian Pallarés if test yes = "$no_install"; then 10447189777a2SCristian Pallares # We don't need to create a wrapper script. 10448*b3fce824SCristian Pallarés link_command=$compile_var$compile_command$compile_rpath 10449189777a2SCristian Pallares # Replace the output file specification. 10450189777a2SCristian Pallares link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10451189777a2SCristian Pallares # Delete the old output file. 10452189777a2SCristian Pallares $opt_dry_run || $RM $output 10453189777a2SCristian Pallares # Link the executable and exit 10454189777a2SCristian Pallares func_show_eval "$link_command" 'exit $?' 10455189777a2SCristian Pallares 10456189777a2SCristian Pallares if test -n "$postlink_cmds"; then 10457189777a2SCristian Pallares func_to_tool_file "$output" 10458189777a2SCristian Pallares postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10459189777a2SCristian Pallares func_execute_cmds "$postlink_cmds" 'exit $?' 10460189777a2SCristian Pallares fi 10461189777a2SCristian Pallares 10462189777a2SCristian Pallares exit $EXIT_SUCCESS 10463189777a2SCristian Pallares fi 10464189777a2SCristian Pallares 10465*b3fce824SCristian Pallarés case $hardcode_action,$fast_install in 10466*b3fce824SCristian Pallarés relink,*) 10467189777a2SCristian Pallares # Fast installation is not supported 10468*b3fce824SCristian Pallarés link_command=$compile_var$compile_command$compile_rpath 10469*b3fce824SCristian Pallarés relink_command=$finalize_var$finalize_command$finalize_rpath 10470189777a2SCristian Pallares 10471189777a2SCristian Pallares func_warning "this platform does not like uninstalled shared libraries" 10472*b3fce824SCristian Pallarés func_warning "'$output' will be relinked during installation" 10473*b3fce824SCristian Pallarés ;; 10474*b3fce824SCristian Pallarés *,yes) 10475*b3fce824SCristian Pallarés link_command=$finalize_var$compile_command$finalize_rpath 10476189777a2SCristian Pallares relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10477*b3fce824SCristian Pallarés ;; 10478*b3fce824SCristian Pallarés *,no) 10479*b3fce824SCristian Pallarés link_command=$compile_var$compile_command$compile_rpath 10480*b3fce824SCristian Pallarés relink_command=$finalize_var$finalize_command$finalize_rpath 10481*b3fce824SCristian Pallarés ;; 10482*b3fce824SCristian Pallarés *,needless) 10483*b3fce824SCristian Pallarés link_command=$finalize_var$compile_command$finalize_rpath 10484189777a2SCristian Pallares relink_command= 10485*b3fce824SCristian Pallarés ;; 10486*b3fce824SCristian Pallarés esac 10487189777a2SCristian Pallares 10488189777a2SCristian Pallares # Replace the output file specification. 10489189777a2SCristian Pallares link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10490189777a2SCristian Pallares 10491189777a2SCristian Pallares # Delete the old output files. 10492189777a2SCristian Pallares $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10493189777a2SCristian Pallares 10494189777a2SCristian Pallares func_show_eval "$link_command" 'exit $?' 10495189777a2SCristian Pallares 10496189777a2SCristian Pallares if test -n "$postlink_cmds"; then 10497189777a2SCristian Pallares func_to_tool_file "$output_objdir/$outputname" 10498189777a2SCristian Pallares 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'` 10499189777a2SCristian Pallares func_execute_cmds "$postlink_cmds" 'exit $?' 10500189777a2SCristian Pallares fi 10501189777a2SCristian Pallares 10502189777a2SCristian Pallares # Now create the wrapper script. 10503189777a2SCristian Pallares func_verbose "creating $output" 10504189777a2SCristian Pallares 10505189777a2SCristian Pallares # Quote the relink command for shipping. 10506189777a2SCristian Pallares if test -n "$relink_command"; then 10507189777a2SCristian Pallares # Preserve any variables that may affect compiler behavior 10508189777a2SCristian Pallares for var in $variables_saved_for_relink; do 10509189777a2SCristian Pallares if eval test -z \"\${$var+set}\"; then 10510189777a2SCristian Pallares relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10511189777a2SCristian Pallares elif eval var_value=\$$var; test -z "$var_value"; then 10512189777a2SCristian Pallares relink_command="$var=; export $var; $relink_command" 10513189777a2SCristian Pallares else 10514189777a2SCristian Pallares func_quote_for_eval "$var_value" 10515189777a2SCristian Pallares relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10516189777a2SCristian Pallares fi 10517189777a2SCristian Pallares done 10518189777a2SCristian Pallares relink_command="(cd `pwd`; $relink_command)" 10519189777a2SCristian Pallares relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10520189777a2SCristian Pallares fi 10521189777a2SCristian Pallares 10522189777a2SCristian Pallares # Only actually do things if not in dry run mode. 10523189777a2SCristian Pallares $opt_dry_run || { 10524189777a2SCristian Pallares # win32 will think the script is a binary if it has 10525189777a2SCristian Pallares # a .exe suffix, so we strip it off here. 10526189777a2SCristian Pallares case $output in 10527189777a2SCristian Pallares *.exe) func_stripname '' '.exe' "$output" 10528189777a2SCristian Pallares output=$func_stripname_result ;; 10529189777a2SCristian Pallares esac 10530189777a2SCristian Pallares # test for cygwin because mv fails w/o .exe extensions 10531189777a2SCristian Pallares case $host in 10532189777a2SCristian Pallares *cygwin*) 10533189777a2SCristian Pallares exeext=.exe 10534189777a2SCristian Pallares func_stripname '' '.exe' "$outputname" 10535189777a2SCristian Pallares outputname=$func_stripname_result ;; 10536189777a2SCristian Pallares *) exeext= ;; 10537189777a2SCristian Pallares esac 10538189777a2SCristian Pallares case $host in 10539189777a2SCristian Pallares *cygwin* | *mingw* ) 10540189777a2SCristian Pallares func_dirname_and_basename "$output" "" "." 10541189777a2SCristian Pallares output_name=$func_basename_result 10542189777a2SCristian Pallares output_path=$func_dirname_result 10543*b3fce824SCristian Pallarés cwrappersource=$output_path/$objdir/lt-$output_name.c 10544*b3fce824SCristian Pallarés cwrapper=$output_path/$output_name.exe 10545189777a2SCristian Pallares $RM $cwrappersource $cwrapper 10546189777a2SCristian Pallares trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10547189777a2SCristian Pallares 10548189777a2SCristian Pallares func_emit_cwrapperexe_src > $cwrappersource 10549189777a2SCristian Pallares 10550189777a2SCristian Pallares # The wrapper executable is built using the $host compiler, 10551189777a2SCristian Pallares # because it contains $host paths and files. If cross- 10552189777a2SCristian Pallares # compiling, it, like the target executable, must be 10553189777a2SCristian Pallares # executed on the $host or under an emulation environment. 10554189777a2SCristian Pallares $opt_dry_run || { 10555189777a2SCristian Pallares $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10556189777a2SCristian Pallares $STRIP $cwrapper 10557189777a2SCristian Pallares } 10558189777a2SCristian Pallares 10559189777a2SCristian Pallares # Now, create the wrapper script for func_source use: 10560189777a2SCristian Pallares func_ltwrapper_scriptname $cwrapper 10561189777a2SCristian Pallares $RM $func_ltwrapper_scriptname_result 10562189777a2SCristian Pallares trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10563189777a2SCristian Pallares $opt_dry_run || { 10564189777a2SCristian Pallares # note: this script will not be executed, so do not chmod. 10565189777a2SCristian Pallares if test "x$build" = "x$host"; then 10566189777a2SCristian Pallares $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10567189777a2SCristian Pallares else 10568189777a2SCristian Pallares func_emit_wrapper no > $func_ltwrapper_scriptname_result 10569189777a2SCristian Pallares fi 10570189777a2SCristian Pallares } 10571189777a2SCristian Pallares ;; 10572189777a2SCristian Pallares * ) 10573189777a2SCristian Pallares $RM $output 10574189777a2SCristian Pallares trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10575189777a2SCristian Pallares 10576189777a2SCristian Pallares func_emit_wrapper no > $output 10577189777a2SCristian Pallares chmod +x $output 10578189777a2SCristian Pallares ;; 10579189777a2SCristian Pallares esac 10580189777a2SCristian Pallares } 10581189777a2SCristian Pallares exit $EXIT_SUCCESS 10582189777a2SCristian Pallares ;; 10583189777a2SCristian Pallares esac 10584189777a2SCristian Pallares 10585189777a2SCristian Pallares # See if we need to build an old-fashioned archive. 10586189777a2SCristian Pallares for oldlib in $oldlibs; do 10587189777a2SCristian Pallares 10588*b3fce824SCristian Pallarés case $build_libtool_libs in 10589*b3fce824SCristian Pallarés convenience) 10590189777a2SCristian Pallares oldobjs="$libobjs_save $symfileobj" 10591*b3fce824SCristian Pallarés addlibs=$convenience 10592189777a2SCristian Pallares build_libtool_libs=no 10593*b3fce824SCristian Pallarés ;; 10594*b3fce824SCristian Pallarés module) 10595*b3fce824SCristian Pallarés oldobjs=$libobjs_save 10596*b3fce824SCristian Pallarés addlibs=$old_convenience 10597189777a2SCristian Pallares build_libtool_libs=no 10598*b3fce824SCristian Pallarés ;; 10599*b3fce824SCristian Pallarés *) 10600189777a2SCristian Pallares oldobjs="$old_deplibs $non_pic_objects" 10601*b3fce824SCristian Pallarés $preload && test -f "$symfileobj" \ 10602*b3fce824SCristian Pallarés && func_append oldobjs " $symfileobj" 10603*b3fce824SCristian Pallarés addlibs=$old_convenience 10604*b3fce824SCristian Pallarés ;; 10605*b3fce824SCristian Pallarés esac 10606189777a2SCristian Pallares 10607189777a2SCristian Pallares if test -n "$addlibs"; then 10608*b3fce824SCristian Pallarés gentop=$output_objdir/${outputname}x 10609189777a2SCristian Pallares func_append generated " $gentop" 10610189777a2SCristian Pallares 10611189777a2SCristian Pallares func_extract_archives $gentop $addlibs 10612189777a2SCristian Pallares func_append oldobjs " $func_extract_archives_result" 10613189777a2SCristian Pallares fi 10614189777a2SCristian Pallares 10615189777a2SCristian Pallares # Do each command in the archive commands. 10616*b3fce824SCristian Pallarés if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10617189777a2SCristian Pallares cmds=$old_archive_from_new_cmds 10618189777a2SCristian Pallares else 10619189777a2SCristian Pallares 10620189777a2SCristian Pallares # Add any objects from preloaded convenience libraries 10621189777a2SCristian Pallares if test -n "$dlprefiles"; then 10622*b3fce824SCristian Pallarés gentop=$output_objdir/${outputname}x 10623189777a2SCristian Pallares func_append generated " $gentop" 10624189777a2SCristian Pallares 10625189777a2SCristian Pallares func_extract_archives $gentop $dlprefiles 10626189777a2SCristian Pallares func_append oldobjs " $func_extract_archives_result" 10627189777a2SCristian Pallares fi 10628189777a2SCristian Pallares 10629189777a2SCristian Pallares # POSIX demands no paths to be encoded in archives. We have 10630189777a2SCristian Pallares # to avoid creating archives with duplicate basenames if we 10631189777a2SCristian Pallares # might have to extract them afterwards, e.g., when creating a 10632189777a2SCristian Pallares # static archive out of a convenience library, or when linking 10633189777a2SCristian Pallares # the entirety of a libtool archive into another (currently 10634189777a2SCristian Pallares # not supported by libtool). 10635189777a2SCristian Pallares if (for obj in $oldobjs 10636189777a2SCristian Pallares do 10637189777a2SCristian Pallares func_basename "$obj" 10638189777a2SCristian Pallares $ECHO "$func_basename_result" 10639189777a2SCristian Pallares done | sort | sort -uc >/dev/null 2>&1); then 10640189777a2SCristian Pallares : 10641189777a2SCristian Pallares else 10642189777a2SCristian Pallares echo "copying selected object files to avoid basename conflicts..." 10643*b3fce824SCristian Pallarés gentop=$output_objdir/${outputname}x 10644189777a2SCristian Pallares func_append generated " $gentop" 10645189777a2SCristian Pallares func_mkdir_p "$gentop" 10646189777a2SCristian Pallares save_oldobjs=$oldobjs 10647189777a2SCristian Pallares oldobjs= 10648189777a2SCristian Pallares counter=1 10649189777a2SCristian Pallares for obj in $save_oldobjs 10650189777a2SCristian Pallares do 10651189777a2SCristian Pallares func_basename "$obj" 10652*b3fce824SCristian Pallarés objbase=$func_basename_result 10653189777a2SCristian Pallares case " $oldobjs " in 10654189777a2SCristian Pallares " ") oldobjs=$obj ;; 10655189777a2SCristian Pallares *[\ /]"$objbase "*) 10656189777a2SCristian Pallares while :; do 10657189777a2SCristian Pallares # Make sure we don't pick an alternate name that also 10658189777a2SCristian Pallares # overlaps. 10659189777a2SCristian Pallares newobj=lt$counter-$objbase 10660189777a2SCristian Pallares func_arith $counter + 1 10661189777a2SCristian Pallares counter=$func_arith_result 10662189777a2SCristian Pallares case " $oldobjs " in 10663189777a2SCristian Pallares *[\ /]"$newobj "*) ;; 10664189777a2SCristian Pallares *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10665189777a2SCristian Pallares esac 10666189777a2SCristian Pallares done 10667189777a2SCristian Pallares func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10668189777a2SCristian Pallares func_append oldobjs " $gentop/$newobj" 10669189777a2SCristian Pallares ;; 10670189777a2SCristian Pallares *) func_append oldobjs " $obj" ;; 10671189777a2SCristian Pallares esac 10672189777a2SCristian Pallares done 10673189777a2SCristian Pallares fi 10674189777a2SCristian Pallares func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 10675189777a2SCristian Pallares tool_oldlib=$func_to_tool_file_result 10676189777a2SCristian Pallares eval cmds=\"$old_archive_cmds\" 10677189777a2SCristian Pallares 10678189777a2SCristian Pallares func_len " $cmds" 10679189777a2SCristian Pallares len=$func_len_result 10680189777a2SCristian Pallares if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10681189777a2SCristian Pallares cmds=$old_archive_cmds 10682189777a2SCristian Pallares elif test -n "$archiver_list_spec"; then 10683189777a2SCristian Pallares func_verbose "using command file archive linking..." 10684189777a2SCristian Pallares for obj in $oldobjs 10685189777a2SCristian Pallares do 10686189777a2SCristian Pallares func_to_tool_file "$obj" 10687189777a2SCristian Pallares $ECHO "$func_to_tool_file_result" 10688189777a2SCristian Pallares done > $output_objdir/$libname.libcmd 10689189777a2SCristian Pallares func_to_tool_file "$output_objdir/$libname.libcmd" 10690189777a2SCristian Pallares oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10691189777a2SCristian Pallares cmds=$old_archive_cmds 10692189777a2SCristian Pallares else 10693189777a2SCristian Pallares # the command line is too long to link in one step, link in parts 10694189777a2SCristian Pallares func_verbose "using piecewise archive linking..." 10695189777a2SCristian Pallares save_RANLIB=$RANLIB 10696189777a2SCristian Pallares RANLIB=: 10697189777a2SCristian Pallares objlist= 10698189777a2SCristian Pallares concat_cmds= 10699189777a2SCristian Pallares save_oldobjs=$oldobjs 10700189777a2SCristian Pallares oldobjs= 10701189777a2SCristian Pallares # Is there a better way of finding the last object in the list? 10702189777a2SCristian Pallares for obj in $save_oldobjs 10703189777a2SCristian Pallares do 10704189777a2SCristian Pallares last_oldobj=$obj 10705189777a2SCristian Pallares done 10706189777a2SCristian Pallares eval test_cmds=\"$old_archive_cmds\" 10707189777a2SCristian Pallares func_len " $test_cmds" 10708189777a2SCristian Pallares len0=$func_len_result 10709189777a2SCristian Pallares len=$len0 10710189777a2SCristian Pallares for obj in $save_oldobjs 10711189777a2SCristian Pallares do 10712189777a2SCristian Pallares func_len " $obj" 10713189777a2SCristian Pallares func_arith $len + $func_len_result 10714189777a2SCristian Pallares len=$func_arith_result 10715189777a2SCristian Pallares func_append objlist " $obj" 10716189777a2SCristian Pallares if test "$len" -lt "$max_cmd_len"; then 10717189777a2SCristian Pallares : 10718189777a2SCristian Pallares else 10719189777a2SCristian Pallares # the above command should be used before it gets too long 10720189777a2SCristian Pallares oldobjs=$objlist 10721189777a2SCristian Pallares if test "$obj" = "$last_oldobj"; then 10722189777a2SCristian Pallares RANLIB=$save_RANLIB 10723189777a2SCristian Pallares fi 10724189777a2SCristian Pallares test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10725*b3fce824SCristian Pallarés eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10726189777a2SCristian Pallares objlist= 10727189777a2SCristian Pallares len=$len0 10728189777a2SCristian Pallares fi 10729189777a2SCristian Pallares done 10730189777a2SCristian Pallares RANLIB=$save_RANLIB 10731189777a2SCristian Pallares oldobjs=$objlist 10732*b3fce824SCristian Pallarés if test -z "$oldobjs"; then 10733189777a2SCristian Pallares eval cmds=\"\$concat_cmds\" 10734189777a2SCristian Pallares else 10735189777a2SCristian Pallares eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10736189777a2SCristian Pallares fi 10737189777a2SCristian Pallares fi 10738189777a2SCristian Pallares fi 10739189777a2SCristian Pallares func_execute_cmds "$cmds" 'exit $?' 10740189777a2SCristian Pallares done 10741189777a2SCristian Pallares 10742189777a2SCristian Pallares test -n "$generated" && \ 10743189777a2SCristian Pallares func_show_eval "${RM}r$generated" 10744189777a2SCristian Pallares 10745189777a2SCristian Pallares # Now create the libtool archive. 10746189777a2SCristian Pallares case $output in 10747189777a2SCristian Pallares *.la) 10748189777a2SCristian Pallares old_library= 10749*b3fce824SCristian Pallarés test yes = "$build_old_libs" && old_library=$libname.$libext 10750189777a2SCristian Pallares func_verbose "creating $output" 10751189777a2SCristian Pallares 10752189777a2SCristian Pallares # Preserve any variables that may affect compiler behavior 10753189777a2SCristian Pallares for var in $variables_saved_for_relink; do 10754189777a2SCristian Pallares if eval test -z \"\${$var+set}\"; then 10755189777a2SCristian Pallares relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10756189777a2SCristian Pallares elif eval var_value=\$$var; test -z "$var_value"; then 10757189777a2SCristian Pallares relink_command="$var=; export $var; $relink_command" 10758189777a2SCristian Pallares else 10759189777a2SCristian Pallares func_quote_for_eval "$var_value" 10760189777a2SCristian Pallares relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10761189777a2SCristian Pallares fi 10762189777a2SCristian Pallares done 10763189777a2SCristian Pallares # Quote the link command for shipping. 10764*b3fce824SCristian Pallarés relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 10765189777a2SCristian Pallares relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10766*b3fce824SCristian Pallarés if test yes = "$hardcode_automatic"; then 10767189777a2SCristian Pallares relink_command= 10768189777a2SCristian Pallares fi 10769189777a2SCristian Pallares 10770189777a2SCristian Pallares # Only create the output if not a dry run. 10771189777a2SCristian Pallares $opt_dry_run || { 10772189777a2SCristian Pallares for installed in no yes; do 10773*b3fce824SCristian Pallarés if test yes = "$installed"; then 10774189777a2SCristian Pallares if test -z "$install_libdir"; then 10775189777a2SCristian Pallares break 10776189777a2SCristian Pallares fi 10777*b3fce824SCristian Pallarés output=$output_objdir/${outputname}i 10778189777a2SCristian Pallares # Replace all uninstalled libtool libraries with the installed ones 10779189777a2SCristian Pallares newdependency_libs= 10780189777a2SCristian Pallares for deplib in $dependency_libs; do 10781189777a2SCristian Pallares case $deplib in 10782189777a2SCristian Pallares *.la) 10783189777a2SCristian Pallares func_basename "$deplib" 10784*b3fce824SCristian Pallarés name=$func_basename_result 10785189777a2SCristian Pallares func_resolve_sysroot "$deplib" 10786*b3fce824SCristian Pallarés eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 10787189777a2SCristian Pallares test -z "$libdir" && \ 10788*b3fce824SCristian Pallarés func_fatal_error "'$deplib' is not a valid libtool archive" 10789189777a2SCristian Pallares func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 10790189777a2SCristian Pallares ;; 10791189777a2SCristian Pallares -L*) 10792189777a2SCristian Pallares func_stripname -L '' "$deplib" 10793189777a2SCristian Pallares func_replace_sysroot "$func_stripname_result" 10794189777a2SCristian Pallares func_append newdependency_libs " -L$func_replace_sysroot_result" 10795189777a2SCristian Pallares ;; 10796189777a2SCristian Pallares -R*) 10797189777a2SCristian Pallares func_stripname -R '' "$deplib" 10798189777a2SCristian Pallares func_replace_sysroot "$func_stripname_result" 10799189777a2SCristian Pallares func_append newdependency_libs " -R$func_replace_sysroot_result" 10800189777a2SCristian Pallares ;; 10801189777a2SCristian Pallares *) func_append newdependency_libs " $deplib" ;; 10802189777a2SCristian Pallares esac 10803189777a2SCristian Pallares done 10804*b3fce824SCristian Pallarés dependency_libs=$newdependency_libs 10805189777a2SCristian Pallares newdlfiles= 10806189777a2SCristian Pallares 10807189777a2SCristian Pallares for lib in $dlfiles; do 10808189777a2SCristian Pallares case $lib in 10809189777a2SCristian Pallares *.la) 10810189777a2SCristian Pallares func_basename "$lib" 10811*b3fce824SCristian Pallarés name=$func_basename_result 10812*b3fce824SCristian Pallarés eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10813189777a2SCristian Pallares test -z "$libdir" && \ 10814*b3fce824SCristian Pallarés func_fatal_error "'$lib' is not a valid libtool archive" 10815189777a2SCristian Pallares func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 10816189777a2SCristian Pallares ;; 10817189777a2SCristian Pallares *) func_append newdlfiles " $lib" ;; 10818189777a2SCristian Pallares esac 10819189777a2SCristian Pallares done 10820*b3fce824SCristian Pallarés dlfiles=$newdlfiles 10821189777a2SCristian Pallares newdlprefiles= 10822189777a2SCristian Pallares for lib in $dlprefiles; do 10823189777a2SCristian Pallares case $lib in 10824189777a2SCristian Pallares *.la) 10825189777a2SCristian Pallares # Only pass preopened files to the pseudo-archive (for 10826189777a2SCristian Pallares # eventual linking with the app. that links it) if we 10827189777a2SCristian Pallares # didn't already link the preopened objects directly into 10828189777a2SCristian Pallares # the library: 10829189777a2SCristian Pallares func_basename "$lib" 10830*b3fce824SCristian Pallarés name=$func_basename_result 10831*b3fce824SCristian Pallarés eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10832189777a2SCristian Pallares test -z "$libdir" && \ 10833*b3fce824SCristian Pallarés func_fatal_error "'$lib' is not a valid libtool archive" 10834189777a2SCristian Pallares func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 10835189777a2SCristian Pallares ;; 10836189777a2SCristian Pallares esac 10837189777a2SCristian Pallares done 10838*b3fce824SCristian Pallarés dlprefiles=$newdlprefiles 10839189777a2SCristian Pallares else 10840189777a2SCristian Pallares newdlfiles= 10841189777a2SCristian Pallares for lib in $dlfiles; do 10842189777a2SCristian Pallares case $lib in 10843*b3fce824SCristian Pallarés [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10844189777a2SCristian Pallares *) abs=`pwd`"/$lib" ;; 10845189777a2SCristian Pallares esac 10846189777a2SCristian Pallares func_append newdlfiles " $abs" 10847189777a2SCristian Pallares done 10848*b3fce824SCristian Pallarés dlfiles=$newdlfiles 10849189777a2SCristian Pallares newdlprefiles= 10850189777a2SCristian Pallares for lib in $dlprefiles; do 10851189777a2SCristian Pallares case $lib in 10852*b3fce824SCristian Pallarés [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10853189777a2SCristian Pallares *) abs=`pwd`"/$lib" ;; 10854189777a2SCristian Pallares esac 10855189777a2SCristian Pallares func_append newdlprefiles " $abs" 10856189777a2SCristian Pallares done 10857*b3fce824SCristian Pallarés dlprefiles=$newdlprefiles 10858189777a2SCristian Pallares fi 10859189777a2SCristian Pallares $RM $output 10860189777a2SCristian Pallares # place dlname in correct position for cygwin 10861189777a2SCristian Pallares # In fact, it would be nice if we could use this code for all target 10862189777a2SCristian Pallares # systems that can't hard-code library paths into their executables 10863189777a2SCristian Pallares # and that have no shared library path variable independent of PATH, 10864189777a2SCristian Pallares # but it turns out we can't easily determine that from inspecting 10865189777a2SCristian Pallares # libtool variables, so we have to hard-code the OSs to which it 10866189777a2SCristian Pallares # applies here; at the moment, that means platforms that use the PE 10867189777a2SCristian Pallares # object format with DLL files. See the long comment at the top of 10868189777a2SCristian Pallares # tests/bindir.at for full details. 10869189777a2SCristian Pallares tdlname=$dlname 10870189777a2SCristian Pallares case $host,$output,$installed,$module,$dlname in 10871189777a2SCristian Pallares *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 10872189777a2SCristian Pallares # If a -bindir argument was supplied, place the dll there. 10873*b3fce824SCristian Pallarés if test -n "$bindir"; then 10874189777a2SCristian Pallares func_relative_path "$install_libdir" "$bindir" 10875*b3fce824SCristian Pallarés tdlname=$func_relative_path_result/$dlname 10876189777a2SCristian Pallares else 10877189777a2SCristian Pallares # Otherwise fall back on heuristic. 10878189777a2SCristian Pallares tdlname=../bin/$dlname 10879189777a2SCristian Pallares fi 10880189777a2SCristian Pallares ;; 10881189777a2SCristian Pallares esac 10882189777a2SCristian Pallares $ECHO > $output "\ 10883189777a2SCristian Pallares# $outputname - a libtool library file 10884*b3fce824SCristian Pallarés# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 10885189777a2SCristian Pallares# 10886189777a2SCristian Pallares# Please DO NOT delete this file! 10887189777a2SCristian Pallares# It is necessary for linking the library. 10888189777a2SCristian Pallares 10889189777a2SCristian Pallares# The name that we can dlopen(3). 10890189777a2SCristian Pallaresdlname='$tdlname' 10891189777a2SCristian Pallares 10892189777a2SCristian Pallares# Names of this library. 10893189777a2SCristian Pallareslibrary_names='$library_names' 10894189777a2SCristian Pallares 10895189777a2SCristian Pallares# The name of the static archive. 10896189777a2SCristian Pallaresold_library='$old_library' 10897189777a2SCristian Pallares 10898189777a2SCristian Pallares# Linker flags that cannot go in dependency_libs. 10899189777a2SCristian Pallaresinherited_linker_flags='$new_inherited_linker_flags' 10900189777a2SCristian Pallares 10901189777a2SCristian Pallares# Libraries that this one depends upon. 10902189777a2SCristian Pallaresdependency_libs='$dependency_libs' 10903189777a2SCristian Pallares 10904189777a2SCristian Pallares# Names of additional weak libraries provided by this library 10905189777a2SCristian Pallaresweak_library_names='$weak_libs' 10906189777a2SCristian Pallares 10907189777a2SCristian Pallares# Version information for $libname. 10908189777a2SCristian Pallarescurrent=$current 10909189777a2SCristian Pallaresage=$age 10910189777a2SCristian Pallaresrevision=$revision 10911189777a2SCristian Pallares 10912189777a2SCristian Pallares# Is this an already installed library? 10913189777a2SCristian Pallaresinstalled=$installed 10914189777a2SCristian Pallares 10915189777a2SCristian Pallares# Should we warn about portability when linking against -modules? 10916189777a2SCristian Pallaresshouldnotlink=$module 10917189777a2SCristian Pallares 10918189777a2SCristian Pallares# Files to dlopen/dlpreopen 10919189777a2SCristian Pallaresdlopen='$dlfiles' 10920189777a2SCristian Pallaresdlpreopen='$dlprefiles' 10921189777a2SCristian Pallares 10922189777a2SCristian Pallares# Directory that this library needs to be installed in: 10923189777a2SCristian Pallareslibdir='$install_libdir'" 10924*b3fce824SCristian Pallarés if test no,yes = "$installed,$need_relink"; then 10925189777a2SCristian Pallares $ECHO >> $output "\ 10926189777a2SCristian Pallaresrelink_command=\"$relink_command\"" 10927189777a2SCristian Pallares fi 10928189777a2SCristian Pallares done 10929189777a2SCristian Pallares } 10930189777a2SCristian Pallares 10931189777a2SCristian Pallares # Do a symbolic link so that the libtool archive can be found in 10932189777a2SCristian Pallares # LD_LIBRARY_PATH before the program is installed. 10933189777a2SCristian Pallares func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 10934189777a2SCristian Pallares ;; 10935189777a2SCristian Pallares esac 10936189777a2SCristian Pallares exit $EXIT_SUCCESS 10937189777a2SCristian Pallares} 10938189777a2SCristian Pallares 10939*b3fce824SCristian Pallarésif test link = "$opt_mode" || test relink = "$opt_mode"; then 10940189777a2SCristian Pallares func_mode_link ${1+"$@"} 10941*b3fce824SCristian Pallarésfi 10942189777a2SCristian Pallares 10943189777a2SCristian Pallares 10944189777a2SCristian Pallares# func_mode_uninstall arg... 10945189777a2SCristian Pallaresfunc_mode_uninstall () 10946189777a2SCristian Pallares{ 10947*b3fce824SCristian Pallarés $debug_cmd 10948*b3fce824SCristian Pallarés 10949*b3fce824SCristian Pallarés RM=$nonopt 10950189777a2SCristian Pallares files= 10951*b3fce824SCristian Pallarés rmforce=false 10952189777a2SCristian Pallares exit_status=0 10953189777a2SCristian Pallares 10954189777a2SCristian Pallares # This variable tells wrapper scripts just to set variables rather 10955189777a2SCristian Pallares # than running their programs. 10956*b3fce824SCristian Pallarés libtool_install_magic=$magic 10957189777a2SCristian Pallares 10958189777a2SCristian Pallares for arg 10959189777a2SCristian Pallares do 10960189777a2SCristian Pallares case $arg in 10961*b3fce824SCristian Pallarés -f) func_append RM " $arg"; rmforce=: ;; 10962189777a2SCristian Pallares -*) func_append RM " $arg" ;; 10963189777a2SCristian Pallares *) func_append files " $arg" ;; 10964189777a2SCristian Pallares esac 10965189777a2SCristian Pallares done 10966189777a2SCristian Pallares 10967189777a2SCristian Pallares test -z "$RM" && \ 10968189777a2SCristian Pallares func_fatal_help "you must specify an RM program" 10969189777a2SCristian Pallares 10970189777a2SCristian Pallares rmdirs= 10971189777a2SCristian Pallares 10972189777a2SCristian Pallares for file in $files; do 10973189777a2SCristian Pallares func_dirname "$file" "" "." 10974*b3fce824SCristian Pallarés dir=$func_dirname_result 10975*b3fce824SCristian Pallarés if test . = "$dir"; then 10976*b3fce824SCristian Pallarés odir=$objdir 10977189777a2SCristian Pallares else 10978*b3fce824SCristian Pallarés odir=$dir/$objdir 10979189777a2SCristian Pallares fi 10980189777a2SCristian Pallares func_basename "$file" 10981*b3fce824SCristian Pallarés name=$func_basename_result 10982*b3fce824SCristian Pallarés test uninstall = "$opt_mode" && odir=$dir 10983189777a2SCristian Pallares 10984189777a2SCristian Pallares # Remember odir for removal later, being careful to avoid duplicates 10985*b3fce824SCristian Pallarés if test clean = "$opt_mode"; then 10986189777a2SCristian Pallares case " $rmdirs " in 10987189777a2SCristian Pallares *" $odir "*) ;; 10988189777a2SCristian Pallares *) func_append rmdirs " $odir" ;; 10989189777a2SCristian Pallares esac 10990189777a2SCristian Pallares fi 10991189777a2SCristian Pallares 10992189777a2SCristian Pallares # Don't error if the file doesn't exist and rm -f was used. 10993189777a2SCristian Pallares if { test -L "$file"; } >/dev/null 2>&1 || 10994189777a2SCristian Pallares { test -h "$file"; } >/dev/null 2>&1 || 10995189777a2SCristian Pallares test -f "$file"; then 10996189777a2SCristian Pallares : 10997189777a2SCristian Pallares elif test -d "$file"; then 10998189777a2SCristian Pallares exit_status=1 10999189777a2SCristian Pallares continue 11000*b3fce824SCristian Pallarés elif $rmforce; then 11001189777a2SCristian Pallares continue 11002189777a2SCristian Pallares fi 11003189777a2SCristian Pallares 11004*b3fce824SCristian Pallarés rmfiles=$file 11005189777a2SCristian Pallares 11006189777a2SCristian Pallares case $name in 11007189777a2SCristian Pallares *.la) 11008189777a2SCristian Pallares # Possibly a libtool archive, so verify it. 11009189777a2SCristian Pallares if func_lalib_p "$file"; then 11010189777a2SCristian Pallares func_source $dir/$name 11011189777a2SCristian Pallares 11012189777a2SCristian Pallares # Delete the libtool libraries and symlinks. 11013189777a2SCristian Pallares for n in $library_names; do 11014189777a2SCristian Pallares func_append rmfiles " $odir/$n" 11015189777a2SCristian Pallares done 11016189777a2SCristian Pallares test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11017189777a2SCristian Pallares 11018*b3fce824SCristian Pallarés case $opt_mode in 11019189777a2SCristian Pallares clean) 11020189777a2SCristian Pallares case " $library_names " in 11021189777a2SCristian Pallares *" $dlname "*) ;; 11022189777a2SCristian Pallares *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11023189777a2SCristian Pallares esac 11024189777a2SCristian Pallares test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11025189777a2SCristian Pallares ;; 11026189777a2SCristian Pallares uninstall) 11027189777a2SCristian Pallares if test -n "$library_names"; then 11028189777a2SCristian Pallares # Do each command in the postuninstall commands. 11029*b3fce824SCristian Pallarés func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11030189777a2SCristian Pallares fi 11031189777a2SCristian Pallares 11032189777a2SCristian Pallares if test -n "$old_library"; then 11033189777a2SCristian Pallares # Do each command in the old_postuninstall commands. 11034*b3fce824SCristian Pallarés func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11035189777a2SCristian Pallares fi 11036189777a2SCristian Pallares # FIXME: should reinstall the best remaining shared library. 11037189777a2SCristian Pallares ;; 11038189777a2SCristian Pallares esac 11039189777a2SCristian Pallares fi 11040189777a2SCristian Pallares ;; 11041189777a2SCristian Pallares 11042189777a2SCristian Pallares *.lo) 11043189777a2SCristian Pallares # Possibly a libtool object, so verify it. 11044189777a2SCristian Pallares if func_lalib_p "$file"; then 11045189777a2SCristian Pallares 11046189777a2SCristian Pallares # Read the .lo file 11047189777a2SCristian Pallares func_source $dir/$name 11048189777a2SCristian Pallares 11049189777a2SCristian Pallares # Add PIC object to the list of files to remove. 11050*b3fce824SCristian Pallarés if test -n "$pic_object" && test none != "$pic_object"; then 11051189777a2SCristian Pallares func_append rmfiles " $dir/$pic_object" 11052189777a2SCristian Pallares fi 11053189777a2SCristian Pallares 11054189777a2SCristian Pallares # Add non-PIC object to the list of files to remove. 11055*b3fce824SCristian Pallarés if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11056189777a2SCristian Pallares func_append rmfiles " $dir/$non_pic_object" 11057189777a2SCristian Pallares fi 11058189777a2SCristian Pallares fi 11059189777a2SCristian Pallares ;; 11060189777a2SCristian Pallares 11061189777a2SCristian Pallares *) 11062*b3fce824SCristian Pallarés if test clean = "$opt_mode"; then 11063189777a2SCristian Pallares noexename=$name 11064189777a2SCristian Pallares case $file in 11065189777a2SCristian Pallares *.exe) 11066189777a2SCristian Pallares func_stripname '' '.exe' "$file" 11067189777a2SCristian Pallares file=$func_stripname_result 11068189777a2SCristian Pallares func_stripname '' '.exe' "$name" 11069189777a2SCristian Pallares noexename=$func_stripname_result 11070189777a2SCristian Pallares # $file with .exe has already been added to rmfiles, 11071189777a2SCristian Pallares # add $file without .exe 11072189777a2SCristian Pallares func_append rmfiles " $file" 11073189777a2SCristian Pallares ;; 11074189777a2SCristian Pallares esac 11075189777a2SCristian Pallares # Do a test to see if this is a libtool program. 11076189777a2SCristian Pallares if func_ltwrapper_p "$file"; then 11077189777a2SCristian Pallares if func_ltwrapper_executable_p "$file"; then 11078189777a2SCristian Pallares func_ltwrapper_scriptname "$file" 11079189777a2SCristian Pallares relink_command= 11080189777a2SCristian Pallares func_source $func_ltwrapper_scriptname_result 11081189777a2SCristian Pallares func_append rmfiles " $func_ltwrapper_scriptname_result" 11082189777a2SCristian Pallares else 11083189777a2SCristian Pallares relink_command= 11084189777a2SCristian Pallares func_source $dir/$noexename 11085189777a2SCristian Pallares fi 11086189777a2SCristian Pallares 11087189777a2SCristian Pallares # note $name still contains .exe if it was in $file originally 11088189777a2SCristian Pallares # as does the version of $file that was added into $rmfiles 11089*b3fce824SCristian Pallarés func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11090*b3fce824SCristian Pallarés if test yes = "$fast_install" && test -n "$relink_command"; then 11091189777a2SCristian Pallares func_append rmfiles " $odir/lt-$name" 11092189777a2SCristian Pallares fi 11093189777a2SCristian Pallares if test "X$noexename" != "X$name"; then 11094*b3fce824SCristian Pallarés func_append rmfiles " $odir/lt-$noexename.c" 11095189777a2SCristian Pallares fi 11096189777a2SCristian Pallares fi 11097189777a2SCristian Pallares fi 11098189777a2SCristian Pallares ;; 11099189777a2SCristian Pallares esac 11100189777a2SCristian Pallares func_show_eval "$RM $rmfiles" 'exit_status=1' 11101189777a2SCristian Pallares done 11102189777a2SCristian Pallares 11103*b3fce824SCristian Pallarés # Try to remove the $objdir's in the directories where we deleted files 11104189777a2SCristian Pallares for dir in $rmdirs; do 11105189777a2SCristian Pallares if test -d "$dir"; then 11106189777a2SCristian Pallares func_show_eval "rmdir $dir >/dev/null 2>&1" 11107189777a2SCristian Pallares fi 11108189777a2SCristian Pallares done 11109189777a2SCristian Pallares 11110189777a2SCristian Pallares exit $exit_status 11111189777a2SCristian Pallares} 11112189777a2SCristian Pallares 11113*b3fce824SCristian Pallarésif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11114189777a2SCristian Pallares func_mode_uninstall ${1+"$@"} 11115*b3fce824SCristian Pallarésfi 11116189777a2SCristian Pallares 11117189777a2SCristian Pallarestest -z "$opt_mode" && { 11118*b3fce824SCristian Pallarés help=$generic_help 11119189777a2SCristian Pallares func_fatal_help "you must specify a MODE" 11120189777a2SCristian Pallares} 11121189777a2SCristian Pallares 11122189777a2SCristian Pallarestest -z "$exec_cmd" && \ 11123*b3fce824SCristian Pallarés func_fatal_help "invalid operation mode '$opt_mode'" 11124189777a2SCristian Pallares 11125189777a2SCristian Pallaresif test -n "$exec_cmd"; then 11126189777a2SCristian Pallares eval exec "$exec_cmd" 11127189777a2SCristian Pallares exit $EXIT_FAILURE 11128189777a2SCristian Pallaresfi 11129189777a2SCristian Pallares 11130189777a2SCristian Pallaresexit $exit_status 11131189777a2SCristian Pallares 11132189777a2SCristian Pallares 11133189777a2SCristian Pallares# The TAGs below are defined such that we never get into a situation 11134*b3fce824SCristian Pallarés# where we disable both kinds of libraries. Given conflicting 11135189777a2SCristian Pallares# choices, we go for a static library, that is the most portable, 11136189777a2SCristian Pallares# since we can't tell whether shared libraries were disabled because 11137189777a2SCristian Pallares# the user asked for that or because the platform doesn't support 11138189777a2SCristian Pallares# them. This is particularly important on AIX, because we don't 11139189777a2SCristian Pallares# support having both static and shared libraries enabled at the same 11140189777a2SCristian Pallares# time on that platform, so we default to a shared-only configuration. 11141189777a2SCristian Pallares# If a disable-shared tag is given, we'll fallback to a static-only 11142189777a2SCristian Pallares# configuration. But we'll never go from static-only to shared-only. 11143189777a2SCristian Pallares 11144189777a2SCristian Pallares# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11145189777a2SCristian Pallaresbuild_libtool_libs=no 11146189777a2SCristian Pallaresbuild_old_libs=yes 11147189777a2SCristian Pallares# ### END LIBTOOL TAG CONFIG: disable-shared 11148189777a2SCristian Pallares 11149189777a2SCristian Pallares# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11150189777a2SCristian Pallaresbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11151189777a2SCristian Pallares# ### END LIBTOOL TAG CONFIG: disable-static 11152189777a2SCristian Pallares 11153189777a2SCristian Pallares# Local Variables: 11154189777a2SCristian Pallares# mode:shell-script 11155189777a2SCristian Pallares# sh-indentation:2 11156189777a2SCristian Pallares# End: 11157