1*46d2f618SCy Schubert#! /bin/sh 2f61ef7f6SDag-Erling Smørgrav## DO NOT EDIT - This file generated from ./build-aux/ltmain.in 3*46d2f618SCy Schubert## by inline-source v2014-01-03.01 4b7579f77SDag-Erling Smørgrav 5*46d2f618SCy Schubert# libtool (GNU libtool) 2.4.6 6f61ef7f6SDag-Erling Smørgrav# Provide generalized library-building support services. 7b7579f77SDag-Erling Smørgrav# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 8b7579f77SDag-Erling Smørgrav 9*46d2f618SCy Schubert# Copyright (C) 1996-2015 Free Software Foundation, Inc. 10b7579f77SDag-Erling Smørgrav# This is free software; see the source for copying conditions. There is NO 11b7579f77SDag-Erling Smørgrav# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12b7579f77SDag-Erling Smørgrav 13b7579f77SDag-Erling Smørgrav# GNU Libtool is free software; you can redistribute it and/or modify 14b7579f77SDag-Erling Smørgrav# it under the terms of the GNU General Public License as published by 15b7579f77SDag-Erling Smørgrav# the Free Software Foundation; either version 2 of the License, or 16b7579f77SDag-Erling Smørgrav# (at your option) any later version. 17b7579f77SDag-Erling Smørgrav# 18b7579f77SDag-Erling Smørgrav# As a special exception to the GNU General Public License, 19b7579f77SDag-Erling Smørgrav# if you distribute this file as part of a program or library that 20b7579f77SDag-Erling Smørgrav# is built using GNU Libtool, you may include this file under the 21b7579f77SDag-Erling Smørgrav# same distribution terms that you use for the rest of that program. 22b7579f77SDag-Erling Smørgrav# 23b7579f77SDag-Erling Smørgrav# GNU Libtool is distributed in the hope that it will be useful, but 24b7579f77SDag-Erling Smørgrav# WITHOUT ANY WARRANTY; without even the implied warranty of 25b7579f77SDag-Erling Smørgrav# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26b7579f77SDag-Erling Smørgrav# General Public License for more details. 27b7579f77SDag-Erling Smørgrav# 28b7579f77SDag-Erling Smørgrav# You should have received a copy of the GNU General Public License 29f61ef7f6SDag-Erling Smørgrav# along with this program. If not, see <http://www.gnu.org/licenses/>. 30b7579f77SDag-Erling Smørgrav 31b7579f77SDag-Erling Smørgrav 32b7579f77SDag-Erling SmørgravPROGRAM=libtool 33b7579f77SDag-Erling SmørgravPACKAGE=libtool 34*46d2f618SCy SchubertVERSION=2.4.6 35*46d2f618SCy Schubertpackage_revision=2.4.6 36b7579f77SDag-Erling Smørgrav 37f61ef7f6SDag-Erling Smørgrav 38f61ef7f6SDag-Erling Smørgrav## ------ ## 39f61ef7f6SDag-Erling Smørgrav## Usage. ## 40f61ef7f6SDag-Erling Smørgrav## ------ ## 41f61ef7f6SDag-Erling Smørgrav 42f61ef7f6SDag-Erling Smørgrav# Run './libtool --help' for help with using this script from the 43f61ef7f6SDag-Erling Smørgrav# command line. 44f61ef7f6SDag-Erling Smørgrav 45f61ef7f6SDag-Erling Smørgrav 46f61ef7f6SDag-Erling Smørgrav## ------------------------------- ## 47f61ef7f6SDag-Erling Smørgrav## User overridable command paths. ## 48f61ef7f6SDag-Erling Smørgrav## ------------------------------- ## 49f61ef7f6SDag-Erling Smørgrav 50f61ef7f6SDag-Erling Smørgrav# After configure completes, it has a better idea of some of the 51f61ef7f6SDag-Erling Smørgrav# shell tools we need than the defaults used by the functions shared 52f61ef7f6SDag-Erling Smørgrav# with bootstrap, so set those here where they can still be over- 53f61ef7f6SDag-Erling Smørgrav# ridden by the user, but otherwise take precedence. 54f61ef7f6SDag-Erling Smørgrav 55f61ef7f6SDag-Erling Smørgrav: ${AUTOCONF="autoconf"} 56f61ef7f6SDag-Erling Smørgrav: ${AUTOMAKE="automake"} 57f61ef7f6SDag-Erling Smørgrav 58f61ef7f6SDag-Erling Smørgrav 59f61ef7f6SDag-Erling Smørgrav## -------------------------- ## 60f61ef7f6SDag-Erling Smørgrav## Source external libraries. ## 61f61ef7f6SDag-Erling Smørgrav## -------------------------- ## 62f61ef7f6SDag-Erling Smørgrav 63f61ef7f6SDag-Erling Smørgrav# Much of our low-level functionality needs to be sourced from external 64f61ef7f6SDag-Erling Smørgrav# libraries, which are installed to $pkgauxdir. 65f61ef7f6SDag-Erling Smørgrav 66f61ef7f6SDag-Erling Smørgrav# Set a version string for this script. 67*46d2f618SCy Schubertscriptversion=2015-01-20.17; # UTC 68f61ef7f6SDag-Erling Smørgrav 69f61ef7f6SDag-Erling Smørgrav# General shell script boiler plate, and helper functions. 70f61ef7f6SDag-Erling Smørgrav# Written by Gary V. Vaughan, 2004 71f61ef7f6SDag-Erling Smørgrav 72*46d2f618SCy Schubert# Copyright (C) 2004-2015 Free Software Foundation, Inc. 73*46d2f618SCy Schubert# This is free software; see the source for copying conditions. There is NO 74*46d2f618SCy Schubert# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 75f61ef7f6SDag-Erling Smørgrav 76*46d2f618SCy Schubert# This program is free software; you can redistribute it and/or modify 77*46d2f618SCy Schubert# it under the terms of the GNU General Public License as published by 78*46d2f618SCy Schubert# the Free Software Foundation; either version 3 of the License, or 79*46d2f618SCy Schubert# (at your option) any later version. 80*46d2f618SCy Schubert 81*46d2f618SCy Schubert# As a special exception to the GNU General Public License, if you distribute 82*46d2f618SCy Schubert# this file as part of a program or library that is built using GNU Libtool, 83*46d2f618SCy Schubert# you may include this file under the same distribution terms that you use 84*46d2f618SCy Schubert# for the rest of that program. 85*46d2f618SCy Schubert 86*46d2f618SCy Schubert# This program is distributed in the hope that it will be useful, 87*46d2f618SCy Schubert# but WITHOUT ANY WARRANTY; without even the implied warranty of 88*46d2f618SCy Schubert# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU 89*46d2f618SCy Schubert# General Public License for more details. 90*46d2f618SCy Schubert 91*46d2f618SCy Schubert# You should have received a copy of the GNU General Public License 92*46d2f618SCy Schubert# along with this program. If not, see <http://www.gnu.org/licenses/>. 93*46d2f618SCy Schubert 94*46d2f618SCy Schubert# Please report bugs or propose patches to gary@gnu.org. 95f61ef7f6SDag-Erling Smørgrav 96f61ef7f6SDag-Erling Smørgrav 97f61ef7f6SDag-Erling Smørgrav## ------ ## 98f61ef7f6SDag-Erling Smørgrav## Usage. ## 99f61ef7f6SDag-Erling Smørgrav## ------ ## 100f61ef7f6SDag-Erling Smørgrav 101f61ef7f6SDag-Erling Smørgrav# Evaluate this file near the top of your script to gain access to 102f61ef7f6SDag-Erling Smørgrav# the functions and variables defined here: 103f61ef7f6SDag-Erling Smørgrav# 104f61ef7f6SDag-Erling Smørgrav# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh 105f61ef7f6SDag-Erling Smørgrav# 106f61ef7f6SDag-Erling Smørgrav# If you need to override any of the default environment variable 107f61ef7f6SDag-Erling Smørgrav# settings, do that before evaluating this file. 108f61ef7f6SDag-Erling Smørgrav 109f61ef7f6SDag-Erling Smørgrav 110f61ef7f6SDag-Erling Smørgrav## -------------------- ## 111f61ef7f6SDag-Erling Smørgrav## Shell normalisation. ## 112f61ef7f6SDag-Erling Smørgrav## -------------------- ## 113f61ef7f6SDag-Erling Smørgrav 114f61ef7f6SDag-Erling Smørgrav# Some shells need a little help to be as Bourne compatible as possible. 115f61ef7f6SDag-Erling Smørgrav# Before doing anything else, make sure all that help has been provided! 116f61ef7f6SDag-Erling Smørgrav 117f61ef7f6SDag-Erling SmørgravDUALCASE=1; export DUALCASE # for MKS sh 118f61ef7f6SDag-Erling Smørgravif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : 119b7579f77SDag-Erling Smørgrav emulate sh 120b7579f77SDag-Erling Smørgrav NULLCMD=: 121f61ef7f6SDag-Erling Smørgrav # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which 122b7579f77SDag-Erling Smørgrav # is contrary to our usage. Disable this feature. 123b7579f77SDag-Erling Smørgrav alias -g '${1+"$@"}'='"$@"' 124b7579f77SDag-Erling Smørgrav setopt NO_GLOB_SUBST 125b7579f77SDag-Erling Smørgravelse 126b7579f77SDag-Erling Smørgrav case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac 127b7579f77SDag-Erling Smørgravfi 128b7579f77SDag-Erling Smørgrav 129f61ef7f6SDag-Erling Smørgrav# NLS nuisances: We save the old values in case they are required later. 130f61ef7f6SDag-Erling Smørgrav_G_user_locale= 131f61ef7f6SDag-Erling Smørgrav_G_safe_locale= 132f61ef7f6SDag-Erling Smørgravfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 133b7579f77SDag-Erling Smørgravdo 134f61ef7f6SDag-Erling Smørgrav eval "if test set = \"\${$_G_var+set}\"; then 135f61ef7f6SDag-Erling Smørgrav save_$_G_var=\$$_G_var 136f61ef7f6SDag-Erling Smørgrav $_G_var=C 137f61ef7f6SDag-Erling Smørgrav export $_G_var 138f61ef7f6SDag-Erling Smørgrav _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" 139f61ef7f6SDag-Erling Smørgrav _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" 140b7579f77SDag-Erling Smørgrav fi" 141b7579f77SDag-Erling Smørgravdone 142*46d2f618SCy Schubert 143*46d2f618SCy Schubert# CDPATH. 144*46d2f618SCy Schubert(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 145b7579f77SDag-Erling Smørgrav 146f61ef7f6SDag-Erling Smørgrav# Make sure IFS has a sensible default 147f61ef7f6SDag-Erling Smørgravsp=' ' 148f61ef7f6SDag-Erling Smørgravnl=' 149f61ef7f6SDag-Erling Smørgrav' 150f61ef7f6SDag-Erling SmørgravIFS="$sp $nl" 151f61ef7f6SDag-Erling Smørgrav 152f61ef7f6SDag-Erling Smørgrav# There are apparently some retarded systems that use ';' as a PATH separator! 153f61ef7f6SDag-Erling Smørgravif test "${PATH_SEPARATOR+set}" != set; then 154f61ef7f6SDag-Erling Smørgrav PATH_SEPARATOR=: 155f61ef7f6SDag-Erling Smørgrav (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { 156f61ef7f6SDag-Erling Smørgrav (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || 157f61ef7f6SDag-Erling Smørgrav PATH_SEPARATOR=';' 158f61ef7f6SDag-Erling Smørgrav } 159f61ef7f6SDag-Erling Smørgravfi 160f61ef7f6SDag-Erling Smørgrav 161f61ef7f6SDag-Erling Smørgrav 162f61ef7f6SDag-Erling Smørgrav 163f61ef7f6SDag-Erling Smørgrav## ------------------------- ## 164f61ef7f6SDag-Erling Smørgrav## Locate command utilities. ## 165f61ef7f6SDag-Erling Smørgrav## ------------------------- ## 166f61ef7f6SDag-Erling Smørgrav 167f61ef7f6SDag-Erling Smørgrav 168f61ef7f6SDag-Erling Smørgrav# func_executable_p FILE 169f61ef7f6SDag-Erling Smørgrav# ---------------------- 170f61ef7f6SDag-Erling Smørgrav# Check that FILE is an executable regular file. 171f61ef7f6SDag-Erling Smørgravfunc_executable_p () 172f61ef7f6SDag-Erling Smørgrav{ 173f61ef7f6SDag-Erling Smørgrav test -f "$1" && test -x "$1" 174f61ef7f6SDag-Erling Smørgrav} 175f61ef7f6SDag-Erling Smørgrav 176f61ef7f6SDag-Erling Smørgrav 177f61ef7f6SDag-Erling Smørgrav# func_path_progs PROGS_LIST CHECK_FUNC [PATH] 178f61ef7f6SDag-Erling Smørgrav# -------------------------------------------- 179f61ef7f6SDag-Erling Smørgrav# Search for either a program that responds to --version with output 180f61ef7f6SDag-Erling Smørgrav# containing "GNU", or else returned by CHECK_FUNC otherwise, by 181f61ef7f6SDag-Erling Smørgrav# trying all the directories in PATH with each of the elements of 182f61ef7f6SDag-Erling Smørgrav# PROGS_LIST. 183f61ef7f6SDag-Erling Smørgrav# 184f61ef7f6SDag-Erling Smørgrav# CHECK_FUNC should accept the path to a candidate program, and 185f61ef7f6SDag-Erling Smørgrav# set $func_check_prog_result if it truncates its output less than 186f61ef7f6SDag-Erling Smørgrav# $_G_path_prog_max characters. 187f61ef7f6SDag-Erling Smørgravfunc_path_progs () 188f61ef7f6SDag-Erling Smørgrav{ 189f61ef7f6SDag-Erling Smørgrav _G_progs_list=$1 190f61ef7f6SDag-Erling Smørgrav _G_check_func=$2 191f61ef7f6SDag-Erling Smørgrav _G_PATH=${3-"$PATH"} 192f61ef7f6SDag-Erling Smørgrav 193f61ef7f6SDag-Erling Smørgrav _G_path_prog_max=0 194f61ef7f6SDag-Erling Smørgrav _G_path_prog_found=false 195f61ef7f6SDag-Erling Smørgrav _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} 196f61ef7f6SDag-Erling Smørgrav for _G_dir in $_G_PATH; do 197f61ef7f6SDag-Erling Smørgrav IFS=$_G_save_IFS 198f61ef7f6SDag-Erling Smørgrav test -z "$_G_dir" && _G_dir=. 199f61ef7f6SDag-Erling Smørgrav for _G_prog_name in $_G_progs_list; do 200f61ef7f6SDag-Erling Smørgrav for _exeext in '' .EXE; do 201f61ef7f6SDag-Erling Smørgrav _G_path_prog=$_G_dir/$_G_prog_name$_exeext 202f61ef7f6SDag-Erling Smørgrav func_executable_p "$_G_path_prog" || continue 203f61ef7f6SDag-Erling Smørgrav case `"$_G_path_prog" --version 2>&1` in 204f61ef7f6SDag-Erling Smørgrav *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; 205f61ef7f6SDag-Erling Smørgrav *) $_G_check_func $_G_path_prog 206f61ef7f6SDag-Erling Smørgrav func_path_progs_result=$func_check_prog_result 207f61ef7f6SDag-Erling Smørgrav ;; 208f61ef7f6SDag-Erling Smørgrav esac 209f61ef7f6SDag-Erling Smørgrav $_G_path_prog_found && break 3 210f61ef7f6SDag-Erling Smørgrav done 211f61ef7f6SDag-Erling Smørgrav done 212f61ef7f6SDag-Erling Smørgrav done 213f61ef7f6SDag-Erling Smørgrav IFS=$_G_save_IFS 214f61ef7f6SDag-Erling Smørgrav test -z "$func_path_progs_result" && { 215f61ef7f6SDag-Erling Smørgrav echo "no acceptable sed could be found in \$PATH" >&2 216f61ef7f6SDag-Erling Smørgrav exit 1 217f61ef7f6SDag-Erling Smørgrav } 218f61ef7f6SDag-Erling Smørgrav} 219f61ef7f6SDag-Erling Smørgrav 220f61ef7f6SDag-Erling Smørgrav 221f61ef7f6SDag-Erling Smørgrav# We want to be able to use the functions in this file before configure 222f61ef7f6SDag-Erling Smørgrav# has figured out where the best binaries are kept, which means we have 223f61ef7f6SDag-Erling Smørgrav# to search for them ourselves - except when the results are already set 224f61ef7f6SDag-Erling Smørgrav# where we skip the searches. 225f61ef7f6SDag-Erling Smørgrav 226f61ef7f6SDag-Erling Smørgrav# Unless the user overrides by setting SED, search the path for either GNU 227f61ef7f6SDag-Erling Smørgrav# sed, or the sed that truncates its output the least. 228f61ef7f6SDag-Erling Smørgravtest -z "$SED" && { 229f61ef7f6SDag-Erling Smørgrav _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ 230f61ef7f6SDag-Erling Smørgrav for _G_i in 1 2 3 4 5 6 7; do 231f61ef7f6SDag-Erling Smørgrav _G_sed_script=$_G_sed_script$nl$_G_sed_script 232f61ef7f6SDag-Erling Smørgrav done 233f61ef7f6SDag-Erling Smørgrav echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed 234f61ef7f6SDag-Erling Smørgrav _G_sed_script= 235f61ef7f6SDag-Erling Smørgrav 236f61ef7f6SDag-Erling Smørgrav func_check_prog_sed () 237f61ef7f6SDag-Erling Smørgrav { 238f61ef7f6SDag-Erling Smørgrav _G_path_prog=$1 239f61ef7f6SDag-Erling Smørgrav 240f61ef7f6SDag-Erling Smørgrav _G_count=0 241f61ef7f6SDag-Erling Smørgrav printf 0123456789 >conftest.in 242f61ef7f6SDag-Erling Smørgrav while : 243f61ef7f6SDag-Erling Smørgrav do 244f61ef7f6SDag-Erling Smørgrav cat conftest.in conftest.in >conftest.tmp 245f61ef7f6SDag-Erling Smørgrav mv conftest.tmp conftest.in 246f61ef7f6SDag-Erling Smørgrav cp conftest.in conftest.nl 247f61ef7f6SDag-Erling Smørgrav echo '' >> conftest.nl 248f61ef7f6SDag-Erling Smørgrav "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break 249f61ef7f6SDag-Erling Smørgrav diff conftest.out conftest.nl >/dev/null 2>&1 || break 250f61ef7f6SDag-Erling Smørgrav _G_count=`expr $_G_count + 1` 251f61ef7f6SDag-Erling Smørgrav if test "$_G_count" -gt "$_G_path_prog_max"; then 252f61ef7f6SDag-Erling Smørgrav # Best one so far, save it but keep looking for a better one 253f61ef7f6SDag-Erling Smørgrav func_check_prog_result=$_G_path_prog 254f61ef7f6SDag-Erling Smørgrav _G_path_prog_max=$_G_count 255f61ef7f6SDag-Erling Smørgrav fi 256f61ef7f6SDag-Erling Smørgrav # 10*(2^10) chars as input seems more than enough 257f61ef7f6SDag-Erling Smørgrav test 10 -lt "$_G_count" && break 258f61ef7f6SDag-Erling Smørgrav done 259f61ef7f6SDag-Erling Smørgrav rm -f conftest.in conftest.tmp conftest.nl conftest.out 260f61ef7f6SDag-Erling Smørgrav } 261f61ef7f6SDag-Erling Smørgrav 262*46d2f618SCy Schubert func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin 263f61ef7f6SDag-Erling Smørgrav rm -f conftest.sed 264f61ef7f6SDag-Erling Smørgrav SED=$func_path_progs_result 265f61ef7f6SDag-Erling Smørgrav} 266f61ef7f6SDag-Erling Smørgrav 267f61ef7f6SDag-Erling Smørgrav 268f61ef7f6SDag-Erling Smørgrav# Unless the user overrides by setting GREP, search the path for either GNU 269f61ef7f6SDag-Erling Smørgrav# grep, or the grep that truncates its output the least. 270f61ef7f6SDag-Erling Smørgravtest -z "$GREP" && { 271f61ef7f6SDag-Erling Smørgrav func_check_prog_grep () 272f61ef7f6SDag-Erling Smørgrav { 273f61ef7f6SDag-Erling Smørgrav _G_path_prog=$1 274f61ef7f6SDag-Erling Smørgrav 275f61ef7f6SDag-Erling Smørgrav _G_count=0 276f61ef7f6SDag-Erling Smørgrav _G_path_prog_max=0 277f61ef7f6SDag-Erling Smørgrav printf 0123456789 >conftest.in 278f61ef7f6SDag-Erling Smørgrav while : 279f61ef7f6SDag-Erling Smørgrav do 280f61ef7f6SDag-Erling Smørgrav cat conftest.in conftest.in >conftest.tmp 281f61ef7f6SDag-Erling Smørgrav mv conftest.tmp conftest.in 282f61ef7f6SDag-Erling Smørgrav cp conftest.in conftest.nl 283f61ef7f6SDag-Erling Smørgrav echo 'GREP' >> conftest.nl 284f61ef7f6SDag-Erling Smørgrav "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break 285f61ef7f6SDag-Erling Smørgrav diff conftest.out conftest.nl >/dev/null 2>&1 || break 286f61ef7f6SDag-Erling Smørgrav _G_count=`expr $_G_count + 1` 287f61ef7f6SDag-Erling Smørgrav if test "$_G_count" -gt "$_G_path_prog_max"; then 288f61ef7f6SDag-Erling Smørgrav # Best one so far, save it but keep looking for a better one 289f61ef7f6SDag-Erling Smørgrav func_check_prog_result=$_G_path_prog 290f61ef7f6SDag-Erling Smørgrav _G_path_prog_max=$_G_count 291f61ef7f6SDag-Erling Smørgrav fi 292f61ef7f6SDag-Erling Smørgrav # 10*(2^10) chars as input seems more than enough 293f61ef7f6SDag-Erling Smørgrav test 10 -lt "$_G_count" && break 294f61ef7f6SDag-Erling Smørgrav done 295f61ef7f6SDag-Erling Smørgrav rm -f conftest.in conftest.tmp conftest.nl conftest.out 296f61ef7f6SDag-Erling Smørgrav } 297f61ef7f6SDag-Erling Smørgrav 298*46d2f618SCy Schubert func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin 299f61ef7f6SDag-Erling Smørgrav GREP=$func_path_progs_result 300f61ef7f6SDag-Erling Smørgrav} 301f61ef7f6SDag-Erling Smørgrav 302f61ef7f6SDag-Erling Smørgrav 303f61ef7f6SDag-Erling Smørgrav## ------------------------------- ## 304f61ef7f6SDag-Erling Smørgrav## User overridable command paths. ## 305f61ef7f6SDag-Erling Smørgrav## ------------------------------- ## 306f61ef7f6SDag-Erling Smørgrav 307f61ef7f6SDag-Erling Smørgrav# All uppercase variable names are used for environment variables. These 308f61ef7f6SDag-Erling Smørgrav# variables can be overridden by the user before calling a script that 309f61ef7f6SDag-Erling Smørgrav# uses them if a suitable command of that name is not already available 310f61ef7f6SDag-Erling Smørgrav# in the command search PATH. 311f61ef7f6SDag-Erling Smørgrav 312f61ef7f6SDag-Erling Smørgrav: ${CP="cp -f"} 313f61ef7f6SDag-Erling Smørgrav: ${ECHO="printf %s\n"} 314f61ef7f6SDag-Erling Smørgrav: ${EGREP="$GREP -E"} 315f61ef7f6SDag-Erling Smørgrav: ${FGREP="$GREP -F"} 316f61ef7f6SDag-Erling Smørgrav: ${LN_S="ln -s"} 317f61ef7f6SDag-Erling Smørgrav: ${MAKE="make"} 318f61ef7f6SDag-Erling Smørgrav: ${MKDIR="mkdir"} 319f61ef7f6SDag-Erling Smørgrav: ${MV="mv -f"} 320f61ef7f6SDag-Erling Smørgrav: ${RM="rm -f"} 321f61ef7f6SDag-Erling Smørgrav: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 322f61ef7f6SDag-Erling Smørgrav 323f61ef7f6SDag-Erling Smørgrav 324f61ef7f6SDag-Erling Smørgrav## -------------------- ## 325f61ef7f6SDag-Erling Smørgrav## Useful sed snippets. ## 326f61ef7f6SDag-Erling Smørgrav## -------------------- ## 327f61ef7f6SDag-Erling Smørgrav 328f61ef7f6SDag-Erling Smørgravsed_dirname='s|/[^/]*$||' 329f61ef7f6SDag-Erling Smørgravsed_basename='s|^.*/||' 330f61ef7f6SDag-Erling Smørgrav 331f61ef7f6SDag-Erling Smørgrav# Sed substitution that helps us do robust quoting. It backslashifies 332f61ef7f6SDag-Erling Smørgrav# metacharacters that are still active within double-quoted strings. 333f61ef7f6SDag-Erling Smørgravsed_quote_subst='s|\([`"$\\]\)|\\\1|g' 334f61ef7f6SDag-Erling Smørgrav 335f61ef7f6SDag-Erling Smørgrav# Same as above, but do not quote variable references. 336f61ef7f6SDag-Erling Smørgravsed_double_quote_subst='s/\(["`\\]\)/\\\1/g' 337f61ef7f6SDag-Erling Smørgrav 338f61ef7f6SDag-Erling Smørgrav# Sed substitution that turns a string into a regex matching for the 339f61ef7f6SDag-Erling Smørgrav# string literally. 340f61ef7f6SDag-Erling Smørgravsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' 341f61ef7f6SDag-Erling Smørgrav 342f61ef7f6SDag-Erling Smørgrav# Sed substitution that converts a w32 file name or path 343f61ef7f6SDag-Erling Smørgrav# that contains forward slashes, into one that contains 344f61ef7f6SDag-Erling Smørgrav# (escaped) backslashes. A very naive implementation. 345f61ef7f6SDag-Erling Smørgravsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 346f61ef7f6SDag-Erling Smørgrav 347f61ef7f6SDag-Erling Smørgrav# Re-'\' parameter expansions in output of sed_double_quote_subst that 348f61ef7f6SDag-Erling Smørgrav# were '\'-ed in input to the same. If an odd number of '\' preceded a 349f61ef7f6SDag-Erling Smørgrav# '$' in input to sed_double_quote_subst, that '$' was protected from 350f61ef7f6SDag-Erling Smørgrav# expansion. Since each input '\' is now two '\'s, look for any number 351f61ef7f6SDag-Erling Smørgrav# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. 352f61ef7f6SDag-Erling Smørgrav_G_bs='\\' 353f61ef7f6SDag-Erling Smørgrav_G_bs2='\\\\' 354f61ef7f6SDag-Erling Smørgrav_G_bs4='\\\\\\\\' 355f61ef7f6SDag-Erling Smørgrav_G_dollar='\$' 356f61ef7f6SDag-Erling Smørgravsed_double_backslash="\ 357f61ef7f6SDag-Erling Smørgrav s/$_G_bs4/&\\ 358f61ef7f6SDag-Erling Smørgrav/g 359f61ef7f6SDag-Erling Smørgrav s/^$_G_bs2$_G_dollar/$_G_bs&/ 360f61ef7f6SDag-Erling Smørgrav s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g 361f61ef7f6SDag-Erling Smørgrav s/\n//g" 362f61ef7f6SDag-Erling Smørgrav 363f61ef7f6SDag-Erling Smørgrav 364f61ef7f6SDag-Erling Smørgrav## ----------------- ## 365f61ef7f6SDag-Erling Smørgrav## Global variables. ## 366f61ef7f6SDag-Erling Smørgrav## ----------------- ## 367f61ef7f6SDag-Erling Smørgrav 368f61ef7f6SDag-Erling Smørgrav# Except for the global variables explicitly listed below, the following 369f61ef7f6SDag-Erling Smørgrav# functions in the '^func_' namespace, and the '^require_' namespace 370f61ef7f6SDag-Erling Smørgrav# variables initialised in the 'Resource management' section, sourcing 371f61ef7f6SDag-Erling Smørgrav# this file will not pollute your global namespace with anything 372f61ef7f6SDag-Erling Smørgrav# else. There's no portable way to scope variables in Bourne shell 373f61ef7f6SDag-Erling Smørgrav# though, so actually running these functions will sometimes place 374f61ef7f6SDag-Erling Smørgrav# results into a variable named after the function, and often use 375f61ef7f6SDag-Erling Smørgrav# temporary variables in the '^_G_' namespace. If you are careful to 376f61ef7f6SDag-Erling Smørgrav# avoid using those namespaces casually in your sourcing script, things 377f61ef7f6SDag-Erling Smørgrav# should continue to work as you expect. And, of course, you can freely 378f61ef7f6SDag-Erling Smørgrav# overwrite any of the functions or variables defined here before 379f61ef7f6SDag-Erling Smørgrav# calling anything to customize them. 380f61ef7f6SDag-Erling Smørgrav 381f61ef7f6SDag-Erling SmørgravEXIT_SUCCESS=0 382f61ef7f6SDag-Erling SmørgravEXIT_FAILURE=1 383f61ef7f6SDag-Erling SmørgravEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 384f61ef7f6SDag-Erling SmørgravEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 385f61ef7f6SDag-Erling Smørgrav 386f61ef7f6SDag-Erling Smørgrav# Allow overriding, eg assuming that you follow the convention of 387f61ef7f6SDag-Erling Smørgrav# putting '$debug_cmd' at the start of all your functions, you can get 388f61ef7f6SDag-Erling Smørgrav# bash to show function call trace with: 389f61ef7f6SDag-Erling Smørgrav# 390f61ef7f6SDag-Erling Smørgrav# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name 391f61ef7f6SDag-Erling Smørgravdebug_cmd=${debug_cmd-":"} 392f61ef7f6SDag-Erling Smørgravexit_cmd=: 393f61ef7f6SDag-Erling Smørgrav 394f61ef7f6SDag-Erling Smørgrav# By convention, finish your script with: 395f61ef7f6SDag-Erling Smørgrav# 396f61ef7f6SDag-Erling Smørgrav# exit $exit_status 397f61ef7f6SDag-Erling Smørgrav# 398f61ef7f6SDag-Erling Smørgrav# so that you can set exit_status to non-zero if you want to indicate 399f61ef7f6SDag-Erling Smørgrav# something went wrong during execution without actually bailing out at 400f61ef7f6SDag-Erling Smørgrav# the point of failure. 401f61ef7f6SDag-Erling Smørgravexit_status=$EXIT_SUCCESS 402b7579f77SDag-Erling Smørgrav 403b7579f77SDag-Erling Smørgrav# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 404b7579f77SDag-Erling Smørgrav# is ksh but when the shell is invoked as "sh" and the current value of 405b7579f77SDag-Erling Smørgrav# the _XPG environment variable is not equal to 1 (one), the special 406b7579f77SDag-Erling Smørgrav# positional parameter $0, within a function call, is the name of the 407b7579f77SDag-Erling Smørgrav# function. 408f61ef7f6SDag-Erling Smørgravprogpath=$0 409f61ef7f6SDag-Erling Smørgrav 410f61ef7f6SDag-Erling Smørgrav# The name of this program. 411f61ef7f6SDag-Erling Smørgravprogname=`$ECHO "$progpath" |$SED "$sed_basename"` 412f61ef7f6SDag-Erling Smørgrav 413f61ef7f6SDag-Erling Smørgrav# Make sure we have an absolute progpath for reexecution: 414f61ef7f6SDag-Erling Smørgravcase $progpath in 415f61ef7f6SDag-Erling Smørgrav [\\/]*|[A-Za-z]:\\*) ;; 416f61ef7f6SDag-Erling Smørgrav *[\\/]*) 417f61ef7f6SDag-Erling Smørgrav progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` 418f61ef7f6SDag-Erling Smørgrav progdir=`cd "$progdir" && pwd` 419f61ef7f6SDag-Erling Smørgrav progpath=$progdir/$progname 420f61ef7f6SDag-Erling Smørgrav ;; 421f61ef7f6SDag-Erling Smørgrav *) 422f61ef7f6SDag-Erling Smørgrav _G_IFS=$IFS 423f61ef7f6SDag-Erling Smørgrav IFS=${PATH_SEPARATOR-:} 424f61ef7f6SDag-Erling Smørgrav for progdir in $PATH; do 425f61ef7f6SDag-Erling Smørgrav IFS=$_G_IFS 426f61ef7f6SDag-Erling Smørgrav test -x "$progdir/$progname" && break 427f61ef7f6SDag-Erling Smørgrav done 428f61ef7f6SDag-Erling Smørgrav IFS=$_G_IFS 429f61ef7f6SDag-Erling Smørgrav test -n "$progdir" || progdir=`pwd` 430f61ef7f6SDag-Erling Smørgrav progpath=$progdir/$progname 431f61ef7f6SDag-Erling Smørgrav ;; 432f61ef7f6SDag-Erling Smørgravesac 433b7579f77SDag-Erling Smørgrav 434b7579f77SDag-Erling Smørgrav 435f61ef7f6SDag-Erling Smørgrav## ----------------- ## 436f61ef7f6SDag-Erling Smørgrav## Standard options. ## 437f61ef7f6SDag-Erling Smørgrav## ----------------- ## 438b7579f77SDag-Erling Smørgrav 439f61ef7f6SDag-Erling Smørgrav# The following options affect the operation of the functions defined 440f61ef7f6SDag-Erling Smørgrav# below, and should be set appropriately depending on run-time para- 441f61ef7f6SDag-Erling Smørgrav# meters passed on the command line. 442b7579f77SDag-Erling Smørgrav 443f61ef7f6SDag-Erling Smørgravopt_dry_run=false 444f61ef7f6SDag-Erling Smørgravopt_quiet=false 445f61ef7f6SDag-Erling Smørgravopt_verbose=false 446b7579f77SDag-Erling Smørgrav 447f61ef7f6SDag-Erling Smørgrav# Categories 'all' and 'none' are always available. Append any others 448f61ef7f6SDag-Erling Smørgrav# you will pass as the first argument to func_warning from your own 449f61ef7f6SDag-Erling Smørgrav# code. 450f61ef7f6SDag-Erling Smørgravwarning_categories= 451b7579f77SDag-Erling Smørgrav 452f61ef7f6SDag-Erling Smørgrav# By default, display warnings according to 'opt_warning_types'. Set 453f61ef7f6SDag-Erling Smørgrav# 'warning_func' to ':' to elide all warnings, or func_fatal_error to 454f61ef7f6SDag-Erling Smørgrav# treat the next displayed warning as a fatal error. 455f61ef7f6SDag-Erling Smørgravwarning_func=func_warn_and_continue 456b7579f77SDag-Erling Smørgrav 457f61ef7f6SDag-Erling Smørgrav# Set to 'all' to display all warnings, 'none' to suppress all 458f61ef7f6SDag-Erling Smørgrav# warnings, or a space delimited list of some subset of 459f61ef7f6SDag-Erling Smørgrav# 'warning_categories' to display only the listed warnings. 460f61ef7f6SDag-Erling Smørgravopt_warning_types=all 461b7579f77SDag-Erling Smørgrav 462f61ef7f6SDag-Erling Smørgrav 463f61ef7f6SDag-Erling Smørgrav## -------------------- ## 464f61ef7f6SDag-Erling Smørgrav## Resource management. ## 465f61ef7f6SDag-Erling Smørgrav## -------------------- ## 466f61ef7f6SDag-Erling Smørgrav 467f61ef7f6SDag-Erling Smørgrav# This section contains definitions for functions that each ensure a 468f61ef7f6SDag-Erling Smørgrav# particular resource (a file, or a non-empty configuration variable for 469f61ef7f6SDag-Erling Smørgrav# example) is available, and if appropriate to extract default values 470f61ef7f6SDag-Erling Smørgrav# from pertinent package files. Call them using their associated 471f61ef7f6SDag-Erling Smørgrav# 'require_*' variable to ensure that they are executed, at most, once. 472f61ef7f6SDag-Erling Smørgrav# 473f61ef7f6SDag-Erling Smørgrav# It's entirely deliberate that calling these functions can set 474f61ef7f6SDag-Erling Smørgrav# variables that don't obey the namespace limitations obeyed by the rest 475f61ef7f6SDag-Erling Smørgrav# of this file, in order that that they be as useful as possible to 476f61ef7f6SDag-Erling Smørgrav# callers. 477f61ef7f6SDag-Erling Smørgrav 478f61ef7f6SDag-Erling Smørgrav 479f61ef7f6SDag-Erling Smørgrav# require_term_colors 480f61ef7f6SDag-Erling Smørgrav# ------------------- 481f61ef7f6SDag-Erling Smørgrav# Allow display of bold text on terminals that support it. 482f61ef7f6SDag-Erling Smørgravrequire_term_colors=func_require_term_colors 483f61ef7f6SDag-Erling Smørgravfunc_require_term_colors () 484f61ef7f6SDag-Erling Smørgrav{ 485f61ef7f6SDag-Erling Smørgrav $debug_cmd 486f61ef7f6SDag-Erling Smørgrav 487f61ef7f6SDag-Erling Smørgrav test -t 1 && { 488f61ef7f6SDag-Erling Smørgrav # COLORTERM and USE_ANSI_COLORS environment variables take 489f61ef7f6SDag-Erling Smørgrav # precedence, because most terminfo databases neglect to describe 490f61ef7f6SDag-Erling Smørgrav # whether color sequences are supported. 491f61ef7f6SDag-Erling Smørgrav test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} 492f61ef7f6SDag-Erling Smørgrav 493f61ef7f6SDag-Erling Smørgrav if test 1 = "$USE_ANSI_COLORS"; then 494f61ef7f6SDag-Erling Smørgrav # Standard ANSI escape sequences 495f61ef7f6SDag-Erling Smørgrav tc_reset='[0m' 496f61ef7f6SDag-Erling Smørgrav tc_bold='[1m'; tc_standout='[7m' 497f61ef7f6SDag-Erling Smørgrav tc_red='[31m'; tc_green='[32m' 498f61ef7f6SDag-Erling Smørgrav tc_blue='[34m'; tc_cyan='[36m' 499f61ef7f6SDag-Erling Smørgrav else 500f61ef7f6SDag-Erling Smørgrav # Otherwise trust the terminfo database after all. 501f61ef7f6SDag-Erling Smørgrav test -n "`tput sgr0 2>/dev/null`" && { 502f61ef7f6SDag-Erling Smørgrav tc_reset=`tput sgr0` 503f61ef7f6SDag-Erling Smørgrav test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` 504f61ef7f6SDag-Erling Smørgrav tc_standout=$tc_bold 505f61ef7f6SDag-Erling Smørgrav test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` 506f61ef7f6SDag-Erling Smørgrav test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` 507f61ef7f6SDag-Erling Smørgrav test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` 508f61ef7f6SDag-Erling Smørgrav test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` 509f61ef7f6SDag-Erling Smørgrav test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` 510f61ef7f6SDag-Erling Smørgrav } 511f61ef7f6SDag-Erling Smørgrav fi 512f61ef7f6SDag-Erling Smørgrav } 513f61ef7f6SDag-Erling Smørgrav 514f61ef7f6SDag-Erling Smørgrav require_term_colors=: 515f61ef7f6SDag-Erling Smørgrav} 516f61ef7f6SDag-Erling Smørgrav 517f61ef7f6SDag-Erling Smørgrav 518f61ef7f6SDag-Erling Smørgrav## ----------------- ## 519f61ef7f6SDag-Erling Smørgrav## Function library. ## 520f61ef7f6SDag-Erling Smørgrav## ----------------- ## 521f61ef7f6SDag-Erling Smørgrav 522f61ef7f6SDag-Erling Smørgrav# This section contains a variety of useful functions to call in your 523f61ef7f6SDag-Erling Smørgrav# scripts. Take note of the portable wrappers for features provided by 524f61ef7f6SDag-Erling Smørgrav# some modern shells, which will fall back to slower equivalents on 525f61ef7f6SDag-Erling Smørgrav# less featureful shells. 526f61ef7f6SDag-Erling Smørgrav 527f61ef7f6SDag-Erling Smørgrav 528f61ef7f6SDag-Erling Smørgrav# func_append VAR VALUE 529f61ef7f6SDag-Erling Smørgrav# --------------------- 530f61ef7f6SDag-Erling Smørgrav# Append VALUE onto the existing contents of VAR. 531f61ef7f6SDag-Erling Smørgrav 532f61ef7f6SDag-Erling Smørgrav # We should try to minimise forks, especially on Windows where they are 533f61ef7f6SDag-Erling Smørgrav # unreasonably slow, so skip the feature probes when bash or zsh are 534f61ef7f6SDag-Erling Smørgrav # being used: 535f61ef7f6SDag-Erling Smørgrav if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then 536f61ef7f6SDag-Erling Smørgrav : ${_G_HAVE_ARITH_OP="yes"} 537f61ef7f6SDag-Erling Smørgrav : ${_G_HAVE_XSI_OPS="yes"} 538f61ef7f6SDag-Erling Smørgrav # The += operator was introduced in bash 3.1 539f61ef7f6SDag-Erling Smørgrav case $BASH_VERSION in 540f61ef7f6SDag-Erling Smørgrav [12].* | 3.0 | 3.0*) ;; 541f61ef7f6SDag-Erling Smørgrav *) 542f61ef7f6SDag-Erling Smørgrav : ${_G_HAVE_PLUSEQ_OP="yes"} 543f61ef7f6SDag-Erling Smørgrav ;; 544f61ef7f6SDag-Erling Smørgrav esac 545f61ef7f6SDag-Erling Smørgrav fi 546f61ef7f6SDag-Erling Smørgrav 547f61ef7f6SDag-Erling Smørgrav # _G_HAVE_PLUSEQ_OP 548f61ef7f6SDag-Erling Smørgrav # Can be empty, in which case the shell is probed, "yes" if += is 549f61ef7f6SDag-Erling Smørgrav # useable or anything else if it does not work. 550f61ef7f6SDag-Erling Smørgrav test -z "$_G_HAVE_PLUSEQ_OP" \ 551f61ef7f6SDag-Erling Smørgrav && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ 552f61ef7f6SDag-Erling Smørgrav && _G_HAVE_PLUSEQ_OP=yes 553f61ef7f6SDag-Erling Smørgrav 554f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_PLUSEQ_OP" 555f61ef7f6SDag-Erling Smørgravthen 556f61ef7f6SDag-Erling Smørgrav # This is an XSI compatible shell, allowing a faster implementation... 557f61ef7f6SDag-Erling Smørgrav eval 'func_append () 558f61ef7f6SDag-Erling Smørgrav { 559f61ef7f6SDag-Erling Smørgrav $debug_cmd 560f61ef7f6SDag-Erling Smørgrav 561f61ef7f6SDag-Erling Smørgrav eval "$1+=\$2" 562f61ef7f6SDag-Erling Smørgrav }' 563f61ef7f6SDag-Erling Smørgravelse 564f61ef7f6SDag-Erling Smørgrav # ...otherwise fall back to using expr, which is often a shell builtin. 565f61ef7f6SDag-Erling Smørgrav func_append () 566f61ef7f6SDag-Erling Smørgrav { 567f61ef7f6SDag-Erling Smørgrav $debug_cmd 568f61ef7f6SDag-Erling Smørgrav 569f61ef7f6SDag-Erling Smørgrav eval "$1=\$$1\$2" 570f61ef7f6SDag-Erling Smørgrav } 571f61ef7f6SDag-Erling Smørgravfi 572f61ef7f6SDag-Erling Smørgrav 573f61ef7f6SDag-Erling Smørgrav 574f61ef7f6SDag-Erling Smørgrav# func_append_quoted VAR VALUE 575f61ef7f6SDag-Erling Smørgrav# ---------------------------- 576f61ef7f6SDag-Erling Smørgrav# Quote VALUE and append to the end of shell variable VAR, separated 577f61ef7f6SDag-Erling Smørgrav# by a space. 578f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_PLUSEQ_OP"; then 579f61ef7f6SDag-Erling Smørgrav eval 'func_append_quoted () 580f61ef7f6SDag-Erling Smørgrav { 581f61ef7f6SDag-Erling Smørgrav $debug_cmd 582f61ef7f6SDag-Erling Smørgrav 583*46d2f618SCy Schubert func_quote_for_eval "$2" 584*46d2f618SCy Schubert eval "$1+=\\ \$func_quote_for_eval_result" 585f61ef7f6SDag-Erling Smørgrav }' 586f61ef7f6SDag-Erling Smørgravelse 587f61ef7f6SDag-Erling Smørgrav func_append_quoted () 588f61ef7f6SDag-Erling Smørgrav { 589f61ef7f6SDag-Erling Smørgrav $debug_cmd 590f61ef7f6SDag-Erling Smørgrav 591*46d2f618SCy Schubert func_quote_for_eval "$2" 592*46d2f618SCy Schubert eval "$1=\$$1\\ \$func_quote_for_eval_result" 593f61ef7f6SDag-Erling Smørgrav } 594f61ef7f6SDag-Erling Smørgravfi 595f61ef7f6SDag-Erling Smørgrav 596f61ef7f6SDag-Erling Smørgrav 597f61ef7f6SDag-Erling Smørgrav# func_append_uniq VAR VALUE 598f61ef7f6SDag-Erling Smørgrav# -------------------------- 599f61ef7f6SDag-Erling Smørgrav# Append unique VALUE onto the existing contents of VAR, assuming 600f61ef7f6SDag-Erling Smørgrav# entries are delimited by the first character of VALUE. For example: 601f61ef7f6SDag-Erling Smørgrav# 602f61ef7f6SDag-Erling Smørgrav# func_append_uniq options " --another-option option-argument" 603f61ef7f6SDag-Erling Smørgrav# 604f61ef7f6SDag-Erling Smørgrav# will only append to $options if " --another-option option-argument " 605f61ef7f6SDag-Erling Smørgrav# is not already present somewhere in $options already (note spaces at 606f61ef7f6SDag-Erling Smørgrav# each end implied by leading space in second argument). 607f61ef7f6SDag-Erling Smørgravfunc_append_uniq () 608f61ef7f6SDag-Erling Smørgrav{ 609f61ef7f6SDag-Erling Smørgrav $debug_cmd 610f61ef7f6SDag-Erling Smørgrav 611f61ef7f6SDag-Erling Smørgrav eval _G_current_value='`$ECHO $'$1'`' 612f61ef7f6SDag-Erling Smørgrav _G_delim=`expr "$2" : '\(.\)'` 613f61ef7f6SDag-Erling Smørgrav 614f61ef7f6SDag-Erling Smørgrav case $_G_delim$_G_current_value$_G_delim in 615f61ef7f6SDag-Erling Smørgrav *"$2$_G_delim"*) ;; 616f61ef7f6SDag-Erling Smørgrav *) func_append "$@" ;; 617f61ef7f6SDag-Erling Smørgrav esac 618f61ef7f6SDag-Erling Smørgrav} 619f61ef7f6SDag-Erling Smørgrav 620f61ef7f6SDag-Erling Smørgrav 621f61ef7f6SDag-Erling Smørgrav# func_arith TERM... 622f61ef7f6SDag-Erling Smørgrav# ------------------ 623f61ef7f6SDag-Erling Smørgrav# Set func_arith_result to the result of evaluating TERMs. 624f61ef7f6SDag-Erling Smørgrav test -z "$_G_HAVE_ARITH_OP" \ 625f61ef7f6SDag-Erling Smørgrav && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ 626f61ef7f6SDag-Erling Smørgrav && _G_HAVE_ARITH_OP=yes 627f61ef7f6SDag-Erling Smørgrav 628f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_ARITH_OP"; then 629f61ef7f6SDag-Erling Smørgrav eval 'func_arith () 630f61ef7f6SDag-Erling Smørgrav { 631f61ef7f6SDag-Erling Smørgrav $debug_cmd 632f61ef7f6SDag-Erling Smørgrav 633f61ef7f6SDag-Erling Smørgrav func_arith_result=$(( $* )) 634f61ef7f6SDag-Erling Smørgrav }' 635f61ef7f6SDag-Erling Smørgravelse 636f61ef7f6SDag-Erling Smørgrav func_arith () 637f61ef7f6SDag-Erling Smørgrav { 638f61ef7f6SDag-Erling Smørgrav $debug_cmd 639f61ef7f6SDag-Erling Smørgrav 640f61ef7f6SDag-Erling Smørgrav func_arith_result=`expr "$@"` 641f61ef7f6SDag-Erling Smørgrav } 642f61ef7f6SDag-Erling Smørgravfi 643f61ef7f6SDag-Erling Smørgrav 644f61ef7f6SDag-Erling Smørgrav 645f61ef7f6SDag-Erling Smørgrav# func_basename FILE 646f61ef7f6SDag-Erling Smørgrav# ------------------ 647f61ef7f6SDag-Erling Smørgrav# Set func_basename_result to FILE with everything up to and including 648f61ef7f6SDag-Erling Smørgrav# the last / stripped. 649f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_XSI_OPS"; then 650f61ef7f6SDag-Erling Smørgrav # If this shell supports suffix pattern removal, then use it to avoid 651f61ef7f6SDag-Erling Smørgrav # forking. Hide the definitions single quotes in case the shell chokes 652f61ef7f6SDag-Erling Smørgrav # on unsupported syntax... 653f61ef7f6SDag-Erling Smørgrav _b='func_basename_result=${1##*/}' 654f61ef7f6SDag-Erling Smørgrav _d='case $1 in 655f61ef7f6SDag-Erling Smørgrav */*) func_dirname_result=${1%/*}$2 ;; 656f61ef7f6SDag-Erling Smørgrav * ) func_dirname_result=$3 ;; 657f61ef7f6SDag-Erling Smørgrav esac' 658f61ef7f6SDag-Erling Smørgrav 659f61ef7f6SDag-Erling Smørgravelse 660f61ef7f6SDag-Erling Smørgrav # ...otherwise fall back to using sed. 661f61ef7f6SDag-Erling Smørgrav _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' 662f61ef7f6SDag-Erling Smørgrav _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` 663f61ef7f6SDag-Erling Smørgrav if test "X$func_dirname_result" = "X$1"; then 664f61ef7f6SDag-Erling Smørgrav func_dirname_result=$3 665f61ef7f6SDag-Erling Smørgrav else 666f61ef7f6SDag-Erling Smørgrav func_append func_dirname_result "$2" 667f61ef7f6SDag-Erling Smørgrav fi' 668f61ef7f6SDag-Erling Smørgravfi 669f61ef7f6SDag-Erling Smørgrav 670f61ef7f6SDag-Erling Smørgraveval 'func_basename () 671f61ef7f6SDag-Erling Smørgrav{ 672f61ef7f6SDag-Erling Smørgrav $debug_cmd 673f61ef7f6SDag-Erling Smørgrav 674f61ef7f6SDag-Erling Smørgrav '"$_b"' 675f61ef7f6SDag-Erling Smørgrav}' 676f61ef7f6SDag-Erling Smørgrav 677f61ef7f6SDag-Erling Smørgrav 678f61ef7f6SDag-Erling Smørgrav# func_dirname FILE APPEND NONDIR_REPLACEMENT 679f61ef7f6SDag-Erling Smørgrav# ------------------------------------------- 680b7579f77SDag-Erling Smørgrav# Compute the dirname of FILE. If nonempty, add APPEND to the result, 681b7579f77SDag-Erling Smørgrav# otherwise set result to NONDIR_REPLACEMENT. 682f61ef7f6SDag-Erling Smørgraveval 'func_dirname () 683b7579f77SDag-Erling Smørgrav{ 684f61ef7f6SDag-Erling Smørgrav $debug_cmd 685f61ef7f6SDag-Erling Smørgrav 686f61ef7f6SDag-Erling Smørgrav '"$_d"' 687f61ef7f6SDag-Erling Smørgrav}' 688b7579f77SDag-Erling Smørgrav 689b7579f77SDag-Erling Smørgrav 690f61ef7f6SDag-Erling Smørgrav# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT 691f61ef7f6SDag-Erling Smørgrav# -------------------------------------------------------- 692f61ef7f6SDag-Erling Smørgrav# Perform func_basename and func_dirname in a single function 693b7579f77SDag-Erling Smørgrav# call: 694b7579f77SDag-Erling Smørgrav# dirname: Compute the dirname of FILE. If nonempty, 695b7579f77SDag-Erling Smørgrav# add APPEND to the result, otherwise set result 696b7579f77SDag-Erling Smørgrav# to NONDIR_REPLACEMENT. 697b7579f77SDag-Erling Smørgrav# value returned in "$func_dirname_result" 698b7579f77SDag-Erling Smørgrav# basename: Compute filename of FILE. 699b7579f77SDag-Erling Smørgrav# value retuned in "$func_basename_result" 700f61ef7f6SDag-Erling Smørgrav# For efficiency, we do not delegate to the functions above but instead 701f61ef7f6SDag-Erling Smørgrav# duplicate the functionality here. 702f61ef7f6SDag-Erling Smørgraveval 'func_dirname_and_basename () 703b7579f77SDag-Erling Smørgrav{ 704f61ef7f6SDag-Erling Smørgrav $debug_cmd 705f61ef7f6SDag-Erling Smørgrav 706f61ef7f6SDag-Erling Smørgrav '"$_b"' 707f61ef7f6SDag-Erling Smørgrav '"$_d"' 708f61ef7f6SDag-Erling Smørgrav}' 709f61ef7f6SDag-Erling Smørgrav 710f61ef7f6SDag-Erling Smørgrav 711f61ef7f6SDag-Erling Smørgrav# func_echo ARG... 712f61ef7f6SDag-Erling Smørgrav# ---------------- 713f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed message. 714f61ef7f6SDag-Erling Smørgravfunc_echo () 715f61ef7f6SDag-Erling Smørgrav{ 716f61ef7f6SDag-Erling Smørgrav $debug_cmd 717f61ef7f6SDag-Erling Smørgrav 718f61ef7f6SDag-Erling Smørgrav _G_message=$* 719f61ef7f6SDag-Erling Smørgrav 720f61ef7f6SDag-Erling Smørgrav func_echo_IFS=$IFS 721f61ef7f6SDag-Erling Smørgrav IFS=$nl 722f61ef7f6SDag-Erling Smørgrav for _G_line in $_G_message; do 723f61ef7f6SDag-Erling Smørgrav IFS=$func_echo_IFS 724f61ef7f6SDag-Erling Smørgrav $ECHO "$progname: $_G_line" 725f61ef7f6SDag-Erling Smørgrav done 726f61ef7f6SDag-Erling Smørgrav IFS=$func_echo_IFS 727f61ef7f6SDag-Erling Smørgrav} 728f61ef7f6SDag-Erling Smørgrav 729f61ef7f6SDag-Erling Smørgrav 730f61ef7f6SDag-Erling Smørgrav# func_echo_all ARG... 731f61ef7f6SDag-Erling Smørgrav# -------------------- 732f61ef7f6SDag-Erling Smørgrav# Invoke $ECHO with all args, space-separated. 733f61ef7f6SDag-Erling Smørgravfunc_echo_all () 734f61ef7f6SDag-Erling Smørgrav{ 735f61ef7f6SDag-Erling Smørgrav $ECHO "$*" 736f61ef7f6SDag-Erling Smørgrav} 737f61ef7f6SDag-Erling Smørgrav 738f61ef7f6SDag-Erling Smørgrav 739f61ef7f6SDag-Erling Smørgrav# func_echo_infix_1 INFIX ARG... 740f61ef7f6SDag-Erling Smørgrav# ------------------------------ 741f61ef7f6SDag-Erling Smørgrav# Echo program name, followed by INFIX on the first line, with any 742f61ef7f6SDag-Erling Smørgrav# additional lines not showing INFIX. 743f61ef7f6SDag-Erling Smørgravfunc_echo_infix_1 () 744f61ef7f6SDag-Erling Smørgrav{ 745f61ef7f6SDag-Erling Smørgrav $debug_cmd 746f61ef7f6SDag-Erling Smørgrav 747f61ef7f6SDag-Erling Smørgrav $require_term_colors 748f61ef7f6SDag-Erling Smørgrav 749f61ef7f6SDag-Erling Smørgrav _G_infix=$1; shift 750f61ef7f6SDag-Erling Smørgrav _G_indent=$_G_infix 751f61ef7f6SDag-Erling Smørgrav _G_prefix="$progname: $_G_infix: " 752f61ef7f6SDag-Erling Smørgrav _G_message=$* 753f61ef7f6SDag-Erling Smørgrav 754f61ef7f6SDag-Erling Smørgrav # Strip color escape sequences before counting printable length 755f61ef7f6SDag-Erling Smørgrav for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" 756f61ef7f6SDag-Erling Smørgrav do 757f61ef7f6SDag-Erling Smørgrav test -n "$_G_tc" && { 758f61ef7f6SDag-Erling Smørgrav _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` 759f61ef7f6SDag-Erling Smørgrav _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` 760f61ef7f6SDag-Erling Smørgrav } 761f61ef7f6SDag-Erling Smørgrav done 762f61ef7f6SDag-Erling Smørgrav _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes 763f61ef7f6SDag-Erling Smørgrav 764f61ef7f6SDag-Erling Smørgrav func_echo_infix_1_IFS=$IFS 765f61ef7f6SDag-Erling Smørgrav IFS=$nl 766f61ef7f6SDag-Erling Smørgrav for _G_line in $_G_message; do 767f61ef7f6SDag-Erling Smørgrav IFS=$func_echo_infix_1_IFS 768f61ef7f6SDag-Erling Smørgrav $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 769f61ef7f6SDag-Erling Smørgrav _G_prefix=$_G_indent 770f61ef7f6SDag-Erling Smørgrav done 771f61ef7f6SDag-Erling Smørgrav IFS=$func_echo_infix_1_IFS 772f61ef7f6SDag-Erling Smørgrav} 773f61ef7f6SDag-Erling Smørgrav 774f61ef7f6SDag-Erling Smørgrav 775f61ef7f6SDag-Erling Smørgrav# func_error ARG... 776f61ef7f6SDag-Erling Smørgrav# ----------------- 777f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed message to standard error. 778f61ef7f6SDag-Erling Smørgravfunc_error () 779f61ef7f6SDag-Erling Smørgrav{ 780f61ef7f6SDag-Erling Smørgrav $debug_cmd 781f61ef7f6SDag-Erling Smørgrav 782f61ef7f6SDag-Erling Smørgrav $require_term_colors 783f61ef7f6SDag-Erling Smørgrav 784f61ef7f6SDag-Erling Smørgrav func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 785f61ef7f6SDag-Erling Smørgrav} 786f61ef7f6SDag-Erling Smørgrav 787f61ef7f6SDag-Erling Smørgrav 788f61ef7f6SDag-Erling Smørgrav# func_fatal_error ARG... 789f61ef7f6SDag-Erling Smørgrav# ----------------------- 790f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed message to standard error, and exit. 791f61ef7f6SDag-Erling Smørgravfunc_fatal_error () 792f61ef7f6SDag-Erling Smørgrav{ 793f61ef7f6SDag-Erling Smørgrav $debug_cmd 794f61ef7f6SDag-Erling Smørgrav 795f61ef7f6SDag-Erling Smørgrav func_error "$*" 796f61ef7f6SDag-Erling Smørgrav exit $EXIT_FAILURE 797f61ef7f6SDag-Erling Smørgrav} 798f61ef7f6SDag-Erling Smørgrav 799f61ef7f6SDag-Erling Smørgrav 800f61ef7f6SDag-Erling Smørgrav# func_grep EXPRESSION FILENAME 801f61ef7f6SDag-Erling Smørgrav# ----------------------------- 802f61ef7f6SDag-Erling Smørgrav# Check whether EXPRESSION matches any line of FILENAME, without output. 803f61ef7f6SDag-Erling Smørgravfunc_grep () 804f61ef7f6SDag-Erling Smørgrav{ 805f61ef7f6SDag-Erling Smørgrav $debug_cmd 806f61ef7f6SDag-Erling Smørgrav 807f61ef7f6SDag-Erling Smørgrav $GREP "$1" "$2" >/dev/null 2>&1 808f61ef7f6SDag-Erling Smørgrav} 809f61ef7f6SDag-Erling Smørgrav 810f61ef7f6SDag-Erling Smørgrav 811f61ef7f6SDag-Erling Smørgrav# func_len STRING 812f61ef7f6SDag-Erling Smørgrav# --------------- 813f61ef7f6SDag-Erling Smørgrav# Set func_len_result to the length of STRING. STRING may not 814f61ef7f6SDag-Erling Smørgrav# start with a hyphen. 815f61ef7f6SDag-Erling Smørgrav test -z "$_G_HAVE_XSI_OPS" \ 816f61ef7f6SDag-Erling Smørgrav && (eval 'x=a/b/c; 817f61ef7f6SDag-Erling Smørgrav test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 818f61ef7f6SDag-Erling Smørgrav && _G_HAVE_XSI_OPS=yes 819f61ef7f6SDag-Erling Smørgrav 820f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_XSI_OPS"; then 821f61ef7f6SDag-Erling Smørgrav eval 'func_len () 822f61ef7f6SDag-Erling Smørgrav { 823f61ef7f6SDag-Erling Smørgrav $debug_cmd 824f61ef7f6SDag-Erling Smørgrav 825f61ef7f6SDag-Erling Smørgrav func_len_result=${#1} 826f61ef7f6SDag-Erling Smørgrav }' 827b7579f77SDag-Erling Smørgravelse 828f61ef7f6SDag-Erling Smørgrav func_len () 829b7579f77SDag-Erling Smørgrav { 830f61ef7f6SDag-Erling Smørgrav $debug_cmd 831f61ef7f6SDag-Erling Smørgrav 832f61ef7f6SDag-Erling Smørgrav func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` 833f61ef7f6SDag-Erling Smørgrav } 834f61ef7f6SDag-Erling Smørgravfi 835f61ef7f6SDag-Erling Smørgrav 836f61ef7f6SDag-Erling Smørgrav 837f61ef7f6SDag-Erling Smørgrav# func_mkdir_p DIRECTORY-PATH 838f61ef7f6SDag-Erling Smørgrav# --------------------------- 839f61ef7f6SDag-Erling Smørgrav# Make sure the entire path to DIRECTORY-PATH is available. 840f61ef7f6SDag-Erling Smørgravfunc_mkdir_p () 841f61ef7f6SDag-Erling Smørgrav{ 842f61ef7f6SDag-Erling Smørgrav $debug_cmd 843f61ef7f6SDag-Erling Smørgrav 844f61ef7f6SDag-Erling Smørgrav _G_directory_path=$1 845f61ef7f6SDag-Erling Smørgrav _G_dir_list= 846f61ef7f6SDag-Erling Smørgrav 847f61ef7f6SDag-Erling Smørgrav if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then 848f61ef7f6SDag-Erling Smørgrav 849f61ef7f6SDag-Erling Smørgrav # Protect directory names starting with '-' 850f61ef7f6SDag-Erling Smørgrav case $_G_directory_path in 851f61ef7f6SDag-Erling Smørgrav -*) _G_directory_path=./$_G_directory_path ;; 852b7579f77SDag-Erling Smørgrav esac 853f61ef7f6SDag-Erling Smørgrav 854f61ef7f6SDag-Erling Smørgrav # While some portion of DIR does not yet exist... 855f61ef7f6SDag-Erling Smørgrav while test ! -d "$_G_directory_path"; do 856f61ef7f6SDag-Erling Smørgrav # ...make a list in topmost first order. Use a colon delimited 857f61ef7f6SDag-Erling Smørgrav # list incase some portion of path contains whitespace. 858f61ef7f6SDag-Erling Smørgrav _G_dir_list=$_G_directory_path:$_G_dir_list 859f61ef7f6SDag-Erling Smørgrav 860f61ef7f6SDag-Erling Smørgrav # If the last portion added has no slash in it, the list is done 861f61ef7f6SDag-Erling Smørgrav case $_G_directory_path in */*) ;; *) break ;; esac 862f61ef7f6SDag-Erling Smørgrav 863f61ef7f6SDag-Erling Smørgrav # ...otherwise throw away the child directory and loop 864f61ef7f6SDag-Erling Smørgrav _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` 865f61ef7f6SDag-Erling Smørgrav done 866f61ef7f6SDag-Erling Smørgrav _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` 867f61ef7f6SDag-Erling Smørgrav 868f61ef7f6SDag-Erling Smørgrav func_mkdir_p_IFS=$IFS; IFS=: 869f61ef7f6SDag-Erling Smørgrav for _G_dir in $_G_dir_list; do 870f61ef7f6SDag-Erling Smørgrav IFS=$func_mkdir_p_IFS 871f61ef7f6SDag-Erling Smørgrav # mkdir can fail with a 'File exist' error if two processes 872f61ef7f6SDag-Erling Smørgrav # try to create one of the directories concurrently. Don't 873f61ef7f6SDag-Erling Smørgrav # stop in that case! 874f61ef7f6SDag-Erling Smørgrav $MKDIR "$_G_dir" 2>/dev/null || : 875f61ef7f6SDag-Erling Smørgrav done 876f61ef7f6SDag-Erling Smørgrav IFS=$func_mkdir_p_IFS 877f61ef7f6SDag-Erling Smørgrav 878f61ef7f6SDag-Erling Smørgrav # Bail out if we (or some other process) failed to create a directory. 879f61ef7f6SDag-Erling Smørgrav test -d "$_G_directory_path" || \ 880f61ef7f6SDag-Erling Smørgrav func_fatal_error "Failed to create '$1'" 881f61ef7f6SDag-Erling Smørgrav fi 882f61ef7f6SDag-Erling Smørgrav} 883b7579f77SDag-Erling Smørgrav 884b7579f77SDag-Erling Smørgrav 885f61ef7f6SDag-Erling Smørgrav# func_mktempdir [BASENAME] 886f61ef7f6SDag-Erling Smørgrav# ------------------------- 887f61ef7f6SDag-Erling Smørgrav# Make a temporary directory that won't clash with other running 888f61ef7f6SDag-Erling Smørgrav# libtool processes, and avoids race conditions if possible. If 889f61ef7f6SDag-Erling Smørgrav# given, BASENAME is the basename for that directory. 890f61ef7f6SDag-Erling Smørgravfunc_mktempdir () 891f61ef7f6SDag-Erling Smørgrav{ 892f61ef7f6SDag-Erling Smørgrav $debug_cmd 893f61ef7f6SDag-Erling Smørgrav 894f61ef7f6SDag-Erling Smørgrav _G_template=${TMPDIR-/tmp}/${1-$progname} 895f61ef7f6SDag-Erling Smørgrav 896f61ef7f6SDag-Erling Smørgrav if test : = "$opt_dry_run"; then 897f61ef7f6SDag-Erling Smørgrav # Return a directory name, but don't create it in dry-run mode 898f61ef7f6SDag-Erling Smørgrav _G_tmpdir=$_G_template-$$ 899f61ef7f6SDag-Erling Smørgrav else 900f61ef7f6SDag-Erling Smørgrav 901f61ef7f6SDag-Erling Smørgrav # If mktemp works, use that first and foremost 902f61ef7f6SDag-Erling Smørgrav _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` 903f61ef7f6SDag-Erling Smørgrav 904f61ef7f6SDag-Erling Smørgrav if test ! -d "$_G_tmpdir"; then 905f61ef7f6SDag-Erling Smørgrav # Failing that, at least try and use $RANDOM to avoid a race 906f61ef7f6SDag-Erling Smørgrav _G_tmpdir=$_G_template-${RANDOM-0}$$ 907f61ef7f6SDag-Erling Smørgrav 908f61ef7f6SDag-Erling Smørgrav func_mktempdir_umask=`umask` 909f61ef7f6SDag-Erling Smørgrav umask 0077 910f61ef7f6SDag-Erling Smørgrav $MKDIR "$_G_tmpdir" 911f61ef7f6SDag-Erling Smørgrav umask $func_mktempdir_umask 912f61ef7f6SDag-Erling Smørgrav fi 913f61ef7f6SDag-Erling Smørgrav 914f61ef7f6SDag-Erling Smørgrav # If we're not in dry-run mode, bomb out on failure 915f61ef7f6SDag-Erling Smørgrav test -d "$_G_tmpdir" || \ 916f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot create temporary directory '$_G_tmpdir'" 917f61ef7f6SDag-Erling Smørgrav fi 918f61ef7f6SDag-Erling Smørgrav 919f61ef7f6SDag-Erling Smørgrav $ECHO "$_G_tmpdir" 920f61ef7f6SDag-Erling Smørgrav} 921f61ef7f6SDag-Erling Smørgrav 922b7579f77SDag-Erling Smørgrav 923b7579f77SDag-Erling Smørgrav# func_normal_abspath PATH 924f61ef7f6SDag-Erling Smørgrav# ------------------------ 925b7579f77SDag-Erling Smørgrav# Remove doubled-up and trailing slashes, "." path components, 926b7579f77SDag-Erling Smørgrav# and cancel out any ".." path components in PATH after making 927b7579f77SDag-Erling Smørgrav# it an absolute path. 928b7579f77SDag-Erling Smørgravfunc_normal_abspath () 929b7579f77SDag-Erling Smørgrav{ 930f61ef7f6SDag-Erling Smørgrav $debug_cmd 931f61ef7f6SDag-Erling Smørgrav 932f61ef7f6SDag-Erling Smørgrav # These SED scripts presuppose an absolute path with a trailing slash. 933f61ef7f6SDag-Erling Smørgrav _G_pathcar='s|^/\([^/]*\).*$|\1|' 934f61ef7f6SDag-Erling Smørgrav _G_pathcdr='s|^/[^/]*||' 935f61ef7f6SDag-Erling Smørgrav _G_removedotparts=':dotsl 936f61ef7f6SDag-Erling Smørgrav s|/\./|/|g 937f61ef7f6SDag-Erling Smørgrav t dotsl 938f61ef7f6SDag-Erling Smørgrav s|/\.$|/|' 939f61ef7f6SDag-Erling Smørgrav _G_collapseslashes='s|/\{1,\}|/|g' 940f61ef7f6SDag-Erling Smørgrav _G_finalslash='s|/*$|/|' 941f61ef7f6SDag-Erling Smørgrav 942b7579f77SDag-Erling Smørgrav # Start from root dir and reassemble the path. 943b7579f77SDag-Erling Smørgrav func_normal_abspath_result= 944b7579f77SDag-Erling Smørgrav func_normal_abspath_tpath=$1 945b7579f77SDag-Erling Smørgrav func_normal_abspath_altnamespace= 946b7579f77SDag-Erling Smørgrav case $func_normal_abspath_tpath in 947b7579f77SDag-Erling Smørgrav "") 948b7579f77SDag-Erling Smørgrav # Empty path, that just means $cwd. 949b7579f77SDag-Erling Smørgrav func_stripname '' '/' "`pwd`" 950b7579f77SDag-Erling Smørgrav func_normal_abspath_result=$func_stripname_result 951b7579f77SDag-Erling Smørgrav return 952b7579f77SDag-Erling Smørgrav ;; 953b7579f77SDag-Erling Smørgrav # The next three entries are used to spot a run of precisely 954b7579f77SDag-Erling Smørgrav # two leading slashes without using negated character classes; 955b7579f77SDag-Erling Smørgrav # we take advantage of case's first-match behaviour. 956b7579f77SDag-Erling Smørgrav ///*) 957b7579f77SDag-Erling Smørgrav # Unusual form of absolute path, do nothing. 958b7579f77SDag-Erling Smørgrav ;; 959b7579f77SDag-Erling Smørgrav //*) 960b7579f77SDag-Erling Smørgrav # Not necessarily an ordinary path; POSIX reserves leading '//' 961b7579f77SDag-Erling Smørgrav # and for example Cygwin uses it to access remote file shares 962b7579f77SDag-Erling Smørgrav # over CIFS/SMB, so we conserve a leading double slash if found. 963b7579f77SDag-Erling Smørgrav func_normal_abspath_altnamespace=/ 964b7579f77SDag-Erling Smørgrav ;; 965b7579f77SDag-Erling Smørgrav /*) 966b7579f77SDag-Erling Smørgrav # Absolute path, do nothing. 967b7579f77SDag-Erling Smørgrav ;; 968b7579f77SDag-Erling Smørgrav *) 969b7579f77SDag-Erling Smørgrav # Relative path, prepend $cwd. 970b7579f77SDag-Erling Smørgrav func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 971b7579f77SDag-Erling Smørgrav ;; 972b7579f77SDag-Erling Smørgrav esac 973f61ef7f6SDag-Erling Smørgrav 974b7579f77SDag-Erling Smørgrav # Cancel out all the simple stuff to save iterations. We also want 975b7579f77SDag-Erling Smørgrav # the path to end with a slash for ease of parsing, so make sure 976b7579f77SDag-Erling Smørgrav # there is one (and only one) here. 977b7579f77SDag-Erling Smørgrav func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 978f61ef7f6SDag-Erling Smørgrav -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` 979b7579f77SDag-Erling Smørgrav while :; do 980b7579f77SDag-Erling Smørgrav # Processed it all yet? 981f61ef7f6SDag-Erling Smørgrav if test / = "$func_normal_abspath_tpath"; then 982b7579f77SDag-Erling Smørgrav # If we ascended to the root using ".." the result may be empty now. 983b7579f77SDag-Erling Smørgrav if test -z "$func_normal_abspath_result"; then 984b7579f77SDag-Erling Smørgrav func_normal_abspath_result=/ 985b7579f77SDag-Erling Smørgrav fi 986b7579f77SDag-Erling Smørgrav break 987b7579f77SDag-Erling Smørgrav fi 988b7579f77SDag-Erling Smørgrav func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 989f61ef7f6SDag-Erling Smørgrav -e "$_G_pathcar"` 990b7579f77SDag-Erling Smørgrav func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 991f61ef7f6SDag-Erling Smørgrav -e "$_G_pathcdr"` 992b7579f77SDag-Erling Smørgrav # Figure out what to do with it 993b7579f77SDag-Erling Smørgrav case $func_normal_abspath_tcomponent in 994b7579f77SDag-Erling Smørgrav "") 995b7579f77SDag-Erling Smørgrav # Trailing empty path component, ignore it. 996b7579f77SDag-Erling Smørgrav ;; 997b7579f77SDag-Erling Smørgrav ..) 998b7579f77SDag-Erling Smørgrav # Parent dir; strip last assembled component from result. 999b7579f77SDag-Erling Smørgrav func_dirname "$func_normal_abspath_result" 1000b7579f77SDag-Erling Smørgrav func_normal_abspath_result=$func_dirname_result 1001b7579f77SDag-Erling Smørgrav ;; 1002b7579f77SDag-Erling Smørgrav *) 1003b7579f77SDag-Erling Smørgrav # Actual path component, append it. 1004f61ef7f6SDag-Erling Smørgrav func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" 1005b7579f77SDag-Erling Smørgrav ;; 1006b7579f77SDag-Erling Smørgrav esac 1007b7579f77SDag-Erling Smørgrav done 1008b7579f77SDag-Erling Smørgrav # Restore leading double-slash if one was found on entry. 1009b7579f77SDag-Erling Smørgrav func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 1010b7579f77SDag-Erling Smørgrav} 1011b7579f77SDag-Erling Smørgrav 1012f61ef7f6SDag-Erling Smørgrav 1013f61ef7f6SDag-Erling Smørgrav# func_notquiet ARG... 1014f61ef7f6SDag-Erling Smørgrav# -------------------- 1015f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed message only when not in quiet mode. 1016f61ef7f6SDag-Erling Smørgravfunc_notquiet () 1017f61ef7f6SDag-Erling Smørgrav{ 1018f61ef7f6SDag-Erling Smørgrav $debug_cmd 1019f61ef7f6SDag-Erling Smørgrav 1020f61ef7f6SDag-Erling Smørgrav $opt_quiet || func_echo ${1+"$@"} 1021f61ef7f6SDag-Erling Smørgrav 1022f61ef7f6SDag-Erling Smørgrav # A bug in bash halts the script if the last line of a function 1023f61ef7f6SDag-Erling Smørgrav # fails when set -e is in force, so we need another command to 1024f61ef7f6SDag-Erling Smørgrav # work around that: 1025f61ef7f6SDag-Erling Smørgrav : 1026f61ef7f6SDag-Erling Smørgrav} 1027f61ef7f6SDag-Erling Smørgrav 1028f61ef7f6SDag-Erling Smørgrav 1029b7579f77SDag-Erling Smørgrav# func_relative_path SRCDIR DSTDIR 1030f61ef7f6SDag-Erling Smørgrav# -------------------------------- 1031f61ef7f6SDag-Erling Smørgrav# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. 1032b7579f77SDag-Erling Smørgravfunc_relative_path () 1033b7579f77SDag-Erling Smørgrav{ 1034f61ef7f6SDag-Erling Smørgrav $debug_cmd 1035f61ef7f6SDag-Erling Smørgrav 1036b7579f77SDag-Erling Smørgrav func_relative_path_result= 1037b7579f77SDag-Erling Smørgrav func_normal_abspath "$1" 1038b7579f77SDag-Erling Smørgrav func_relative_path_tlibdir=$func_normal_abspath_result 1039b7579f77SDag-Erling Smørgrav func_normal_abspath "$2" 1040b7579f77SDag-Erling Smørgrav func_relative_path_tbindir=$func_normal_abspath_result 1041b7579f77SDag-Erling Smørgrav 1042b7579f77SDag-Erling Smørgrav # Ascend the tree starting from libdir 1043b7579f77SDag-Erling Smørgrav while :; do 1044b7579f77SDag-Erling Smørgrav # check if we have found a prefix of bindir 1045b7579f77SDag-Erling Smørgrav case $func_relative_path_tbindir in 1046b7579f77SDag-Erling Smørgrav $func_relative_path_tlibdir) 1047b7579f77SDag-Erling Smørgrav # found an exact match 1048b7579f77SDag-Erling Smørgrav func_relative_path_tcancelled= 1049b7579f77SDag-Erling Smørgrav break 1050b7579f77SDag-Erling Smørgrav ;; 1051b7579f77SDag-Erling Smørgrav $func_relative_path_tlibdir*) 1052b7579f77SDag-Erling Smørgrav # found a matching prefix 1053b7579f77SDag-Erling Smørgrav func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 1054b7579f77SDag-Erling Smørgrav func_relative_path_tcancelled=$func_stripname_result 1055b7579f77SDag-Erling Smørgrav if test -z "$func_relative_path_result"; then 1056b7579f77SDag-Erling Smørgrav func_relative_path_result=. 1057b7579f77SDag-Erling Smørgrav fi 1058b7579f77SDag-Erling Smørgrav break 1059b7579f77SDag-Erling Smørgrav ;; 1060b7579f77SDag-Erling Smørgrav *) 1061b7579f77SDag-Erling Smørgrav func_dirname $func_relative_path_tlibdir 1062f61ef7f6SDag-Erling Smørgrav func_relative_path_tlibdir=$func_dirname_result 1063f61ef7f6SDag-Erling Smørgrav if test -z "$func_relative_path_tlibdir"; then 1064b7579f77SDag-Erling Smørgrav # Have to descend all the way to the root! 1065b7579f77SDag-Erling Smørgrav func_relative_path_result=../$func_relative_path_result 1066b7579f77SDag-Erling Smørgrav func_relative_path_tcancelled=$func_relative_path_tbindir 1067b7579f77SDag-Erling Smørgrav break 1068b7579f77SDag-Erling Smørgrav fi 1069b7579f77SDag-Erling Smørgrav func_relative_path_result=../$func_relative_path_result 1070b7579f77SDag-Erling Smørgrav ;; 1071b7579f77SDag-Erling Smørgrav esac 1072b7579f77SDag-Erling Smørgrav done 1073b7579f77SDag-Erling Smørgrav 1074b7579f77SDag-Erling Smørgrav # Now calculate path; take care to avoid doubling-up slashes. 1075b7579f77SDag-Erling Smørgrav func_stripname '' '/' "$func_relative_path_result" 1076b7579f77SDag-Erling Smørgrav func_relative_path_result=$func_stripname_result 1077b7579f77SDag-Erling Smørgrav func_stripname '/' '/' "$func_relative_path_tcancelled" 1078f61ef7f6SDag-Erling Smørgrav if test -n "$func_stripname_result"; then 1079f61ef7f6SDag-Erling Smørgrav func_append func_relative_path_result "/$func_stripname_result" 1080b7579f77SDag-Erling Smørgrav fi 1081b7579f77SDag-Erling Smørgrav 1082f61ef7f6SDag-Erling Smørgrav # Normalisation. If bindir is libdir, return '.' else relative path. 1083f61ef7f6SDag-Erling Smørgrav if test -n "$func_relative_path_result"; then 1084f61ef7f6SDag-Erling Smørgrav func_stripname './' '' "$func_relative_path_result" 1085b7579f77SDag-Erling Smørgrav func_relative_path_result=$func_stripname_result 1086b7579f77SDag-Erling Smørgrav fi 1087b7579f77SDag-Erling Smørgrav 1088f61ef7f6SDag-Erling Smørgrav test -n "$func_relative_path_result" || func_relative_path_result=. 1089b7579f77SDag-Erling Smørgrav 1090b7579f77SDag-Erling Smørgrav : 1091b7579f77SDag-Erling Smørgrav} 1092b7579f77SDag-Erling Smørgrav 1093b7579f77SDag-Erling Smørgrav 1094*46d2f618SCy Schubert# func_quote_for_eval ARG... 1095*46d2f618SCy Schubert# -------------------------- 1096*46d2f618SCy Schubert# Aesthetically quote ARGs to be evaled later. 1097*46d2f618SCy Schubert# This function returns two values: 1098*46d2f618SCy Schubert# i) func_quote_for_eval_result 1099*46d2f618SCy Schubert# double-quoted, suitable for a subsequent eval 1100*46d2f618SCy Schubert# ii) func_quote_for_eval_unquoted_result 1101*46d2f618SCy Schubert# has all characters that are still active within double 1102*46d2f618SCy Schubert# quotes backslashified. 1103*46d2f618SCy Schubertfunc_quote_for_eval () 1104b7579f77SDag-Erling Smørgrav{ 1105f61ef7f6SDag-Erling Smørgrav $debug_cmd 1106f61ef7f6SDag-Erling Smørgrav 1107*46d2f618SCy Schubert func_quote_for_eval_unquoted_result= 1108*46d2f618SCy Schubert func_quote_for_eval_result= 1109*46d2f618SCy Schubert while test 0 -lt $#; do 1110*46d2f618SCy Schubert case $1 in 1111*46d2f618SCy Schubert *[\\\`\"\$]*) 1112*46d2f618SCy Schubert _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; 1113*46d2f618SCy Schubert *) 1114*46d2f618SCy Schubert _G_unquoted_arg=$1 ;; 1115*46d2f618SCy Schubert esac 1116*46d2f618SCy Schubert if test -n "$func_quote_for_eval_unquoted_result"; then 1117*46d2f618SCy Schubert func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" 1118*46d2f618SCy Schubert else 1119*46d2f618SCy Schubert func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" 1120f61ef7f6SDag-Erling Smørgrav fi 1121b7579f77SDag-Erling Smørgrav 1122*46d2f618SCy Schubert case $_G_unquoted_arg in 1123*46d2f618SCy Schubert # Double-quote args containing shell metacharacters to delay 1124f61ef7f6SDag-Erling Smørgrav # word splitting, command substitution and variable expansion 1125f61ef7f6SDag-Erling Smørgrav # for a subsequent eval. 1126*46d2f618SCy Schubert # Many Bourne shells cannot handle close brackets correctly 1127b7579f77SDag-Erling Smørgrav # in scan sets, so we specify it separately. 1128b7579f77SDag-Erling Smørgrav *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1129*46d2f618SCy Schubert _G_quoted_arg=\"$_G_unquoted_arg\" 11305a5c2279SCy Schubert ;; 1131b7579f77SDag-Erling Smørgrav *) 1132*46d2f618SCy Schubert _G_quoted_arg=$_G_unquoted_arg 11335a5c2279SCy Schubert ;; 1134b7579f77SDag-Erling Smørgrav esac 1135*46d2f618SCy Schubert 1136*46d2f618SCy Schubert if test -n "$func_quote_for_eval_result"; then 1137*46d2f618SCy Schubert func_append func_quote_for_eval_result " $_G_quoted_arg" 11385a5c2279SCy Schubert else 1139*46d2f618SCy Schubert func_append func_quote_for_eval_result "$_G_quoted_arg" 11405a5c2279SCy Schubert fi 11415a5c2279SCy Schubert shift 11425a5c2279SCy Schubert done 1143b7579f77SDag-Erling Smørgrav} 1144b7579f77SDag-Erling Smørgrav 1145b7579f77SDag-Erling Smørgrav 1146*46d2f618SCy Schubert# func_quote_for_expand ARG 1147*46d2f618SCy Schubert# ------------------------- 1148*46d2f618SCy Schubert# Aesthetically quote ARG to be evaled later; same as above, 1149*46d2f618SCy Schubert# but do not quote variable references. 1150*46d2f618SCy Schubertfunc_quote_for_expand () 1151*46d2f618SCy Schubert{ 1152*46d2f618SCy Schubert $debug_cmd 1153*46d2f618SCy Schubert 1154*46d2f618SCy Schubert case $1 in 1155*46d2f618SCy Schubert *[\\\`\"]*) 1156*46d2f618SCy Schubert _G_arg=`$ECHO "$1" | $SED \ 1157*46d2f618SCy Schubert -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; 1158*46d2f618SCy Schubert *) 1159*46d2f618SCy Schubert _G_arg=$1 ;; 1160*46d2f618SCy Schubert esac 1161*46d2f618SCy Schubert 1162*46d2f618SCy Schubert case $_G_arg in 1163*46d2f618SCy Schubert # Double-quote args containing shell metacharacters to delay 1164*46d2f618SCy Schubert # word splitting and command substitution for a subsequent eval. 1165*46d2f618SCy Schubert # Many Bourne shells cannot handle close brackets correctly 1166*46d2f618SCy Schubert # in scan sets, so we specify it separately. 1167*46d2f618SCy Schubert *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1168*46d2f618SCy Schubert _G_arg=\"$_G_arg\" 1169*46d2f618SCy Schubert ;; 1170*46d2f618SCy Schubert esac 1171*46d2f618SCy Schubert 1172*46d2f618SCy Schubert func_quote_for_expand_result=$_G_arg 1173*46d2f618SCy Schubert} 1174*46d2f618SCy Schubert 1175*46d2f618SCy Schubert 1176f61ef7f6SDag-Erling Smørgrav# func_stripname PREFIX SUFFIX NAME 1177f61ef7f6SDag-Erling Smørgrav# --------------------------------- 1178f61ef7f6SDag-Erling Smørgrav# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. 1179f61ef7f6SDag-Erling Smørgrav# PREFIX and SUFFIX must not contain globbing or regex special 1180f61ef7f6SDag-Erling Smørgrav# characters, hashes, percent signs, but SUFFIX may contain a leading 1181f61ef7f6SDag-Erling Smørgrav# dot (in which case that matches only a dot). 1182f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_XSI_OPS"; then 1183f61ef7f6SDag-Erling Smørgrav eval 'func_stripname () 1184f61ef7f6SDag-Erling Smørgrav { 1185f61ef7f6SDag-Erling Smørgrav $debug_cmd 1186f61ef7f6SDag-Erling Smørgrav 1187f61ef7f6SDag-Erling Smørgrav # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are 1188f61ef7f6SDag-Erling Smørgrav # positional parameters, so assign one to ordinary variable first. 1189f61ef7f6SDag-Erling Smørgrav func_stripname_result=$3 1190f61ef7f6SDag-Erling Smørgrav func_stripname_result=${func_stripname_result#"$1"} 1191f61ef7f6SDag-Erling Smørgrav func_stripname_result=${func_stripname_result%"$2"} 1192f61ef7f6SDag-Erling Smørgrav }' 1193f61ef7f6SDag-Erling Smørgravelse 1194f61ef7f6SDag-Erling Smørgrav func_stripname () 1195f61ef7f6SDag-Erling Smørgrav { 1196f61ef7f6SDag-Erling Smørgrav $debug_cmd 1197f61ef7f6SDag-Erling Smørgrav 1198f61ef7f6SDag-Erling Smørgrav case $2 in 1199f61ef7f6SDag-Erling Smørgrav .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; 1200f61ef7f6SDag-Erling Smørgrav *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; 1201f61ef7f6SDag-Erling Smørgrav esac 1202f61ef7f6SDag-Erling Smørgrav } 1203f61ef7f6SDag-Erling Smørgravfi 1204f61ef7f6SDag-Erling Smørgrav 1205f61ef7f6SDag-Erling Smørgrav 1206f61ef7f6SDag-Erling Smørgrav# func_show_eval CMD [FAIL_EXP] 1207f61ef7f6SDag-Erling Smørgrav# ----------------------------- 1208f61ef7f6SDag-Erling Smørgrav# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1209b7579f77SDag-Erling Smørgrav# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1210b7579f77SDag-Erling Smørgrav# is given, then evaluate it. 1211b7579f77SDag-Erling Smørgravfunc_show_eval () 1212b7579f77SDag-Erling Smørgrav{ 1213f61ef7f6SDag-Erling Smørgrav $debug_cmd 1214b7579f77SDag-Erling Smørgrav 1215f61ef7f6SDag-Erling Smørgrav _G_cmd=$1 1216f61ef7f6SDag-Erling Smørgrav _G_fail_exp=${2-':'} 1217f61ef7f6SDag-Erling Smørgrav 1218*46d2f618SCy Schubert func_quote_for_expand "$_G_cmd" 1219*46d2f618SCy Schubert eval "func_notquiet $func_quote_for_expand_result" 1220f61ef7f6SDag-Erling Smørgrav 1221f61ef7f6SDag-Erling Smørgrav $opt_dry_run || { 1222f61ef7f6SDag-Erling Smørgrav eval "$_G_cmd" 1223f61ef7f6SDag-Erling Smørgrav _G_status=$? 1224f61ef7f6SDag-Erling Smørgrav if test 0 -ne "$_G_status"; then 1225f61ef7f6SDag-Erling Smørgrav eval "(exit $_G_status); $_G_fail_exp" 1226f61ef7f6SDag-Erling Smørgrav fi 1227b7579f77SDag-Erling Smørgrav } 1228b7579f77SDag-Erling Smørgrav} 1229b7579f77SDag-Erling Smørgrav 1230b7579f77SDag-Erling Smørgrav 1231f61ef7f6SDag-Erling Smørgrav# func_show_eval_locale CMD [FAIL_EXP] 1232f61ef7f6SDag-Erling Smørgrav# ------------------------------------ 1233f61ef7f6SDag-Erling Smørgrav# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is 1234b7579f77SDag-Erling Smørgrav# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 1235b7579f77SDag-Erling Smørgrav# is given, then evaluate it. Use the saved locale for evaluation. 1236b7579f77SDag-Erling Smørgravfunc_show_eval_locale () 1237b7579f77SDag-Erling Smørgrav{ 1238f61ef7f6SDag-Erling Smørgrav $debug_cmd 1239b7579f77SDag-Erling Smørgrav 1240f61ef7f6SDag-Erling Smørgrav _G_cmd=$1 1241f61ef7f6SDag-Erling Smørgrav _G_fail_exp=${2-':'} 1242f61ef7f6SDag-Erling Smørgrav 1243f61ef7f6SDag-Erling Smørgrav $opt_quiet || { 1244*46d2f618SCy Schubert func_quote_for_expand "$_G_cmd" 1245*46d2f618SCy Schubert eval "func_echo $func_quote_for_expand_result" 1246b7579f77SDag-Erling Smørgrav } 1247b7579f77SDag-Erling Smørgrav 1248f61ef7f6SDag-Erling Smørgrav $opt_dry_run || { 1249f61ef7f6SDag-Erling Smørgrav eval "$_G_user_locale 1250f61ef7f6SDag-Erling Smørgrav $_G_cmd" 1251f61ef7f6SDag-Erling Smørgrav _G_status=$? 1252f61ef7f6SDag-Erling Smørgrav eval "$_G_safe_locale" 1253f61ef7f6SDag-Erling Smørgrav if test 0 -ne "$_G_status"; then 1254f61ef7f6SDag-Erling Smørgrav eval "(exit $_G_status); $_G_fail_exp" 1255b7579f77SDag-Erling Smørgrav fi 1256b7579f77SDag-Erling Smørgrav } 1257f61ef7f6SDag-Erling Smørgrav} 1258f61ef7f6SDag-Erling Smørgrav 1259b7579f77SDag-Erling Smørgrav 1260b7579f77SDag-Erling Smørgrav# func_tr_sh 1261f61ef7f6SDag-Erling Smørgrav# ---------- 1262b7579f77SDag-Erling Smørgrav# Turn $1 into a string suitable for a shell variable name. 1263b7579f77SDag-Erling Smørgrav# Result is stored in $func_tr_sh_result. All characters 1264b7579f77SDag-Erling Smørgrav# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 1265b7579f77SDag-Erling Smørgrav# if $1 begins with a digit, a '_' is prepended as well. 1266b7579f77SDag-Erling Smørgravfunc_tr_sh () 1267b7579f77SDag-Erling Smørgrav{ 1268f61ef7f6SDag-Erling Smørgrav $debug_cmd 1269f61ef7f6SDag-Erling Smørgrav 1270b7579f77SDag-Erling Smørgrav case $1 in 1271b7579f77SDag-Erling Smørgrav [0-9]* | *[!a-zA-Z0-9_]*) 1272f61ef7f6SDag-Erling Smørgrav func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` 1273b7579f77SDag-Erling Smørgrav ;; 1274b7579f77SDag-Erling Smørgrav * ) 1275b7579f77SDag-Erling Smørgrav func_tr_sh_result=$1 1276b7579f77SDag-Erling Smørgrav ;; 1277b7579f77SDag-Erling Smørgrav esac 1278b7579f77SDag-Erling Smørgrav} 1279b7579f77SDag-Erling Smørgrav 1280b7579f77SDag-Erling Smørgrav 1281f61ef7f6SDag-Erling Smørgrav# func_verbose ARG... 1282f61ef7f6SDag-Erling Smørgrav# ------------------- 1283f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed message in verbose mode only. 1284f61ef7f6SDag-Erling Smørgravfunc_verbose () 1285b7579f77SDag-Erling Smørgrav{ 1286f61ef7f6SDag-Erling Smørgrav $debug_cmd 1287b7579f77SDag-Erling Smørgrav 1288f61ef7f6SDag-Erling Smørgrav $opt_verbose && func_echo "$*" 1289f61ef7f6SDag-Erling Smørgrav 1290f61ef7f6SDag-Erling Smørgrav : 1291b7579f77SDag-Erling Smørgrav} 1292b7579f77SDag-Erling Smørgrav 1293f61ef7f6SDag-Erling Smørgrav 1294f61ef7f6SDag-Erling Smørgrav# func_warn_and_continue ARG... 1295f61ef7f6SDag-Erling Smørgrav# ----------------------------- 1296f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed warning message to standard error. 1297f61ef7f6SDag-Erling Smørgravfunc_warn_and_continue () 1298b7579f77SDag-Erling Smørgrav{ 1299f61ef7f6SDag-Erling Smørgrav $debug_cmd 1300b7579f77SDag-Erling Smørgrav 1301f61ef7f6SDag-Erling Smørgrav $require_term_colors 1302f61ef7f6SDag-Erling Smørgrav 1303f61ef7f6SDag-Erling Smørgrav func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 1304b7579f77SDag-Erling Smørgrav} 1305b7579f77SDag-Erling Smørgrav 1306f61ef7f6SDag-Erling Smørgrav 1307f61ef7f6SDag-Erling Smørgrav# func_warning CATEGORY ARG... 1308f61ef7f6SDag-Erling Smørgrav# ---------------------------- 1309f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed warning message to standard error. Warning 1310f61ef7f6SDag-Erling Smørgrav# messages can be filtered according to CATEGORY, where this function 1311f61ef7f6SDag-Erling Smørgrav# elides messages where CATEGORY is not listed in the global variable 1312f61ef7f6SDag-Erling Smørgrav# 'opt_warning_types'. 1313f61ef7f6SDag-Erling Smørgravfunc_warning () 1314f61ef7f6SDag-Erling Smørgrav{ 1315f61ef7f6SDag-Erling Smørgrav $debug_cmd 1316f61ef7f6SDag-Erling Smørgrav 1317f61ef7f6SDag-Erling Smørgrav # CATEGORY must be in the warning_categories list! 1318f61ef7f6SDag-Erling Smørgrav case " $warning_categories " in 1319f61ef7f6SDag-Erling Smørgrav *" $1 "*) ;; 1320f61ef7f6SDag-Erling Smørgrav *) func_internal_error "invalid warning category '$1'" ;; 1321f61ef7f6SDag-Erling Smørgrav esac 1322f61ef7f6SDag-Erling Smørgrav 1323f61ef7f6SDag-Erling Smørgrav _G_category=$1 1324f61ef7f6SDag-Erling Smørgrav shift 1325f61ef7f6SDag-Erling Smørgrav 1326f61ef7f6SDag-Erling Smørgrav case " $opt_warning_types " in 1327f61ef7f6SDag-Erling Smørgrav *" $_G_category "*) $warning_func ${1+"$@"} ;; 1328f61ef7f6SDag-Erling Smørgrav esac 1329f61ef7f6SDag-Erling Smørgrav} 1330f61ef7f6SDag-Erling Smørgrav 1331f61ef7f6SDag-Erling Smørgrav 1332f61ef7f6SDag-Erling Smørgrav# func_sort_ver VER1 VER2 1333f61ef7f6SDag-Erling Smørgrav# ----------------------- 1334f61ef7f6SDag-Erling Smørgrav# 'sort -V' is not generally available. 1335f61ef7f6SDag-Erling Smørgrav# Note this deviates from the version comparison in automake 1336f61ef7f6SDag-Erling Smørgrav# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a 1337f61ef7f6SDag-Erling Smørgrav# but this should suffice as we won't be specifying old 1338f61ef7f6SDag-Erling Smørgrav# version formats or redundant trailing .0 in bootstrap.conf. 1339f61ef7f6SDag-Erling Smørgrav# If we did want full compatibility then we should probably 1340f61ef7f6SDag-Erling Smørgrav# use m4_version_compare from autoconf. 1341f61ef7f6SDag-Erling Smørgravfunc_sort_ver () 1342f61ef7f6SDag-Erling Smørgrav{ 1343f61ef7f6SDag-Erling Smørgrav $debug_cmd 1344f61ef7f6SDag-Erling Smørgrav 1345f61ef7f6SDag-Erling Smørgrav printf '%s\n%s\n' "$1" "$2" \ 1346f61ef7f6SDag-Erling Smørgrav | 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 1347f61ef7f6SDag-Erling Smørgrav} 1348f61ef7f6SDag-Erling Smørgrav 1349f61ef7f6SDag-Erling Smørgrav# func_lt_ver PREV CURR 1350f61ef7f6SDag-Erling Smørgrav# --------------------- 1351f61ef7f6SDag-Erling Smørgrav# Return true if PREV and CURR are in the correct order according to 1352f61ef7f6SDag-Erling Smørgrav# func_sort_ver, otherwise false. Use it like this: 1353f61ef7f6SDag-Erling Smørgrav# 1354f61ef7f6SDag-Erling Smørgrav# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." 1355f61ef7f6SDag-Erling Smørgravfunc_lt_ver () 1356f61ef7f6SDag-Erling Smørgrav{ 1357f61ef7f6SDag-Erling Smørgrav $debug_cmd 1358f61ef7f6SDag-Erling Smørgrav 1359f61ef7f6SDag-Erling Smørgrav test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` 1360f61ef7f6SDag-Erling Smørgrav} 1361f61ef7f6SDag-Erling Smørgrav 1362f61ef7f6SDag-Erling Smørgrav 1363f61ef7f6SDag-Erling Smørgrav# Local variables: 1364f61ef7f6SDag-Erling Smørgrav# mode: shell-script 1365f61ef7f6SDag-Erling Smørgrav# sh-indentation: 2 1366f61ef7f6SDag-Erling Smørgrav# eval: (add-hook 'before-save-hook 'time-stamp) 1367f61ef7f6SDag-Erling Smørgrav# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1368f61ef7f6SDag-Erling Smørgrav# time-stamp-time-zone: "UTC" 1369f61ef7f6SDag-Erling Smørgrav# End: 1370f61ef7f6SDag-Erling Smørgrav#! /bin/sh 1371f61ef7f6SDag-Erling Smørgrav 1372*46d2f618SCy Schubert# Set a version string for this script. 1373*46d2f618SCy Schubertscriptversion=2014-01-07.03; # UTC 1374*46d2f618SCy Schubert 1375f61ef7f6SDag-Erling Smørgrav# A portable, pluggable option parser for Bourne shell. 1376f61ef7f6SDag-Erling Smørgrav# Written by Gary V. Vaughan, 2010 1377f61ef7f6SDag-Erling Smørgrav 1378*46d2f618SCy Schubert# Copyright (C) 2010-2015 Free Software Foundation, Inc. 1379*46d2f618SCy Schubert# This is free software; see the source for copying conditions. There is NO 1380*46d2f618SCy Schubert# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1381f61ef7f6SDag-Erling Smørgrav 1382*46d2f618SCy Schubert# This program is free software: you can redistribute it and/or modify 1383*46d2f618SCy Schubert# it under the terms of the GNU General Public License as published by 1384*46d2f618SCy Schubert# the Free Software Foundation, either version 3 of the License, or 1385*46d2f618SCy Schubert# (at your option) any later version. 1386f61ef7f6SDag-Erling Smørgrav 1387*46d2f618SCy Schubert# This program is distributed in the hope that it will be useful, 1388*46d2f618SCy Schubert# but WITHOUT ANY WARRANTY; without even the implied warranty of 1389*46d2f618SCy Schubert# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1390*46d2f618SCy Schubert# GNU General Public License for more details. 1391*46d2f618SCy Schubert 1392*46d2f618SCy Schubert# You should have received a copy of the GNU General Public License 1393*46d2f618SCy Schubert# along with this program. If not, see <http://www.gnu.org/licenses/>. 1394*46d2f618SCy Schubert 1395*46d2f618SCy Schubert# Please report bugs or propose patches to gary@gnu.org. 1396f61ef7f6SDag-Erling Smørgrav 1397f61ef7f6SDag-Erling Smørgrav 1398f61ef7f6SDag-Erling Smørgrav## ------ ## 1399f61ef7f6SDag-Erling Smørgrav## Usage. ## 1400f61ef7f6SDag-Erling Smørgrav## ------ ## 1401f61ef7f6SDag-Erling Smørgrav 1402f61ef7f6SDag-Erling Smørgrav# This file is a library for parsing options in your shell scripts along 1403f61ef7f6SDag-Erling Smørgrav# with assorted other useful supporting features that you can make use 1404f61ef7f6SDag-Erling Smørgrav# of too. 1405f61ef7f6SDag-Erling Smørgrav# 1406f61ef7f6SDag-Erling Smørgrav# For the simplest scripts you might need only: 1407f61ef7f6SDag-Erling Smørgrav# 1408f61ef7f6SDag-Erling Smørgrav# #!/bin/sh 1409f61ef7f6SDag-Erling Smørgrav# . relative/path/to/funclib.sh 1410f61ef7f6SDag-Erling Smørgrav# . relative/path/to/options-parser 1411f61ef7f6SDag-Erling Smørgrav# scriptversion=1.0 1412f61ef7f6SDag-Erling Smørgrav# func_options ${1+"$@"} 1413f61ef7f6SDag-Erling Smørgrav# eval set dummy "$func_options_result"; shift 1414f61ef7f6SDag-Erling Smørgrav# ...rest of your script... 1415f61ef7f6SDag-Erling Smørgrav# 1416f61ef7f6SDag-Erling Smørgrav# In order for the '--version' option to work, you will need to have a 1417f61ef7f6SDag-Erling Smørgrav# suitably formatted comment like the one at the top of this file 1418*46d2f618SCy Schubert# starting with '# Written by ' and ending with '# warranty; '. 1419f61ef7f6SDag-Erling Smørgrav# 1420f61ef7f6SDag-Erling Smørgrav# For '-h' and '--help' to work, you will also need a one line 1421f61ef7f6SDag-Erling Smørgrav# description of your script's purpose in a comment directly above the 1422f61ef7f6SDag-Erling Smørgrav# '# Written by ' line, like the one at the top of this file. 1423f61ef7f6SDag-Erling Smørgrav# 1424f61ef7f6SDag-Erling Smørgrav# The default options also support '--debug', which will turn on shell 1425f61ef7f6SDag-Erling Smørgrav# execution tracing (see the comment above debug_cmd below for another 1426f61ef7f6SDag-Erling Smørgrav# use), and '--verbose' and the func_verbose function to allow your script 1427f61ef7f6SDag-Erling Smørgrav# to display verbose messages only when your user has specified 1428f61ef7f6SDag-Erling Smørgrav# '--verbose'. 1429f61ef7f6SDag-Erling Smørgrav# 1430*46d2f618SCy Schubert# After sourcing this file, you can plug processing for additional 1431f61ef7f6SDag-Erling Smørgrav# options by amending the variables from the 'Configuration' section 1432f61ef7f6SDag-Erling Smørgrav# below, and following the instructions in the 'Option parsing' 1433f61ef7f6SDag-Erling Smørgrav# section further down. 1434f61ef7f6SDag-Erling Smørgrav 1435f61ef7f6SDag-Erling Smørgrav## -------------- ## 1436f61ef7f6SDag-Erling Smørgrav## Configuration. ## 1437f61ef7f6SDag-Erling Smørgrav## -------------- ## 1438f61ef7f6SDag-Erling Smørgrav 1439f61ef7f6SDag-Erling Smørgrav# You should override these variables in your script after sourcing this 1440f61ef7f6SDag-Erling Smørgrav# file so that they reflect the customisations you have added to the 1441f61ef7f6SDag-Erling Smørgrav# option parser. 1442f61ef7f6SDag-Erling Smørgrav 1443f61ef7f6SDag-Erling Smørgrav# The usage line for option parsing errors and the start of '-h' and 1444f61ef7f6SDag-Erling Smørgrav# '--help' output messages. You can embed shell variables for delayed 1445f61ef7f6SDag-Erling Smørgrav# expansion at the time the message is displayed, but you will need to 1446f61ef7f6SDag-Erling Smørgrav# quote other shell meta-characters carefully to prevent them being 1447f61ef7f6SDag-Erling Smørgrav# expanded when the contents are evaled. 1448f61ef7f6SDag-Erling Smørgravusage='$progpath [OPTION]...' 1449f61ef7f6SDag-Erling Smørgrav 1450f61ef7f6SDag-Erling Smørgrav# Short help message in response to '-h' and '--help'. Add to this or 1451f61ef7f6SDag-Erling Smørgrav# override it after sourcing this library to reflect the full set of 1452f61ef7f6SDag-Erling Smørgrav# options your script accepts. 1453f61ef7f6SDag-Erling Smørgravusage_message="\ 1454f61ef7f6SDag-Erling Smørgrav --debug enable verbose shell tracing 1455f61ef7f6SDag-Erling Smørgrav -W, --warnings=CATEGORY 1456f61ef7f6SDag-Erling Smørgrav report the warnings falling in CATEGORY [all] 1457f61ef7f6SDag-Erling Smørgrav -v, --verbose verbosely report processing 1458f61ef7f6SDag-Erling Smørgrav --version print version information and exit 1459f61ef7f6SDag-Erling Smørgrav -h, --help print short or long help message and exit 1460f61ef7f6SDag-Erling Smørgrav" 1461f61ef7f6SDag-Erling Smørgrav 1462f61ef7f6SDag-Erling Smørgrav# Additional text appended to 'usage_message' in response to '--help'. 1463f61ef7f6SDag-Erling Smørgravlong_help_message=" 1464f61ef7f6SDag-Erling SmørgravWarning categories include: 1465f61ef7f6SDag-Erling Smørgrav 'all' show all warnings 1466f61ef7f6SDag-Erling Smørgrav 'none' turn off all the warnings 1467f61ef7f6SDag-Erling Smørgrav 'error' warnings are treated as fatal errors" 1468f61ef7f6SDag-Erling Smørgrav 1469f61ef7f6SDag-Erling Smørgrav# Help message printed before fatal option parsing errors. 1470f61ef7f6SDag-Erling Smørgravfatal_help="Try '\$progname --help' for more information." 1471f61ef7f6SDag-Erling Smørgrav 1472f61ef7f6SDag-Erling Smørgrav 1473f61ef7f6SDag-Erling Smørgrav 1474f61ef7f6SDag-Erling Smørgrav## ------------------------- ## 1475f61ef7f6SDag-Erling Smørgrav## Hook function management. ## 1476f61ef7f6SDag-Erling Smørgrav## ------------------------- ## 1477f61ef7f6SDag-Erling Smørgrav 1478f61ef7f6SDag-Erling Smørgrav# This section contains functions for adding, removing, and running hooks 1479*46d2f618SCy Schubert# to the main code. A hook is just a named list of of function, that can 1480*46d2f618SCy Schubert# be run in order later on. 1481f61ef7f6SDag-Erling Smørgrav 1482f61ef7f6SDag-Erling Smørgrav# func_hookable FUNC_NAME 1483f61ef7f6SDag-Erling Smørgrav# ----------------------- 1484f61ef7f6SDag-Erling Smørgrav# Declare that FUNC_NAME will run hooks added with 1485f61ef7f6SDag-Erling Smørgrav# 'func_add_hook FUNC_NAME ...'. 1486f61ef7f6SDag-Erling Smørgravfunc_hookable () 1487f61ef7f6SDag-Erling Smørgrav{ 1488f61ef7f6SDag-Erling Smørgrav $debug_cmd 1489f61ef7f6SDag-Erling Smørgrav 1490f61ef7f6SDag-Erling Smørgrav func_append hookable_fns " $1" 1491f61ef7f6SDag-Erling Smørgrav} 1492f61ef7f6SDag-Erling Smørgrav 1493f61ef7f6SDag-Erling Smørgrav 1494f61ef7f6SDag-Erling Smørgrav# func_add_hook FUNC_NAME HOOK_FUNC 1495f61ef7f6SDag-Erling Smørgrav# --------------------------------- 1496f61ef7f6SDag-Erling Smørgrav# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must 1497f61ef7f6SDag-Erling Smørgrav# first have been declared "hookable" by a call to 'func_hookable'. 1498f61ef7f6SDag-Erling Smørgravfunc_add_hook () 1499f61ef7f6SDag-Erling Smørgrav{ 1500f61ef7f6SDag-Erling Smørgrav $debug_cmd 1501f61ef7f6SDag-Erling Smørgrav 1502f61ef7f6SDag-Erling Smørgrav case " $hookable_fns " in 1503f61ef7f6SDag-Erling Smørgrav *" $1 "*) ;; 1504f61ef7f6SDag-Erling Smørgrav *) func_fatal_error "'$1' does not accept hook functions." ;; 1505f61ef7f6SDag-Erling Smørgrav esac 1506f61ef7f6SDag-Erling Smørgrav 1507f61ef7f6SDag-Erling Smørgrav eval func_append ${1}_hooks '" $2"' 1508f61ef7f6SDag-Erling Smørgrav} 1509f61ef7f6SDag-Erling Smørgrav 1510f61ef7f6SDag-Erling Smørgrav 1511f61ef7f6SDag-Erling Smørgrav# func_remove_hook FUNC_NAME HOOK_FUNC 1512f61ef7f6SDag-Erling Smørgrav# ------------------------------------ 1513*46d2f618SCy Schubert# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. 1514f61ef7f6SDag-Erling Smørgravfunc_remove_hook () 1515f61ef7f6SDag-Erling Smørgrav{ 1516f61ef7f6SDag-Erling Smørgrav $debug_cmd 1517f61ef7f6SDag-Erling Smørgrav 1518f61ef7f6SDag-Erling Smørgrav eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' 1519f61ef7f6SDag-Erling Smørgrav} 1520f61ef7f6SDag-Erling Smørgrav 1521f61ef7f6SDag-Erling Smørgrav 1522f61ef7f6SDag-Erling Smørgrav# func_run_hooks FUNC_NAME [ARG]... 1523f61ef7f6SDag-Erling Smørgrav# --------------------------------- 1524f61ef7f6SDag-Erling Smørgrav# Run all hook functions registered to FUNC_NAME. 1525*46d2f618SCy Schubert# It is assumed that the list of hook functions contains nothing more 1526f61ef7f6SDag-Erling Smørgrav# than a whitespace-delimited list of legal shell function names, and 1527f61ef7f6SDag-Erling Smørgrav# no effort is wasted trying to catch shell meta-characters or preserve 1528f61ef7f6SDag-Erling Smørgrav# whitespace. 1529f61ef7f6SDag-Erling Smørgravfunc_run_hooks () 1530f61ef7f6SDag-Erling Smørgrav{ 1531f61ef7f6SDag-Erling Smørgrav $debug_cmd 1532f61ef7f6SDag-Erling Smørgrav 1533f61ef7f6SDag-Erling Smørgrav case " $hookable_fns " in 1534f61ef7f6SDag-Erling Smørgrav *" $1 "*) ;; 1535*46d2f618SCy Schubert *) func_fatal_error "'$1' does not support hook funcions.n" ;; 1536f61ef7f6SDag-Erling Smørgrav esac 1537f61ef7f6SDag-Erling Smørgrav 1538f61ef7f6SDag-Erling Smørgrav eval _G_hook_fns=\$$1_hooks; shift 1539f61ef7f6SDag-Erling Smørgrav 1540f61ef7f6SDag-Erling Smørgrav for _G_hook in $_G_hook_fns; do 1541*46d2f618SCy Schubert eval $_G_hook '"$@"' 1542*46d2f618SCy Schubert 1543*46d2f618SCy Schubert # store returned options list back into positional 1544*46d2f618SCy Schubert # parameters for next 'cmd' execution. 1545*46d2f618SCy Schubert eval _G_hook_result=\$${_G_hook}_result 1546*46d2f618SCy Schubert eval set dummy "$_G_hook_result"; shift 1547f61ef7f6SDag-Erling Smørgrav done 1548*46d2f618SCy Schubert 1549*46d2f618SCy Schubert func_quote_for_eval ${1+"$@"} 1550*46d2f618SCy Schubert func_run_hooks_result=$func_quote_for_eval_result 1551f61ef7f6SDag-Erling Smørgrav} 1552f61ef7f6SDag-Erling Smørgrav 1553f61ef7f6SDag-Erling Smørgrav 1554f61ef7f6SDag-Erling Smørgrav 1555f61ef7f6SDag-Erling Smørgrav## --------------- ## 1556f61ef7f6SDag-Erling Smørgrav## Option parsing. ## 1557f61ef7f6SDag-Erling Smørgrav## --------------- ## 1558f61ef7f6SDag-Erling Smørgrav 1559f61ef7f6SDag-Erling Smørgrav# In order to add your own option parsing hooks, you must accept the 1560*46d2f618SCy Schubert# full positional parameter list in your hook function, remove any 1561*46d2f618SCy Schubert# options that you action, and then pass back the remaining unprocessed 1562*46d2f618SCy Schubert# options in '<hooked_function_name>_result', escaped suitably for 1563*46d2f618SCy Schubert# 'eval'. Like this: 1564f61ef7f6SDag-Erling Smørgrav# 1565f61ef7f6SDag-Erling Smørgrav# my_options_prep () 1566f61ef7f6SDag-Erling Smørgrav# { 1567f61ef7f6SDag-Erling Smørgrav# $debug_cmd 1568f61ef7f6SDag-Erling Smørgrav# 1569f61ef7f6SDag-Erling Smørgrav# # Extend the existing usage message. 1570f61ef7f6SDag-Erling Smørgrav# usage_message=$usage_message' 1571f61ef7f6SDag-Erling Smørgrav# -s, --silent don'\''t print informational messages 1572f61ef7f6SDag-Erling Smørgrav# ' 1573*46d2f618SCy Schubert# 1574*46d2f618SCy Schubert# func_quote_for_eval ${1+"$@"} 1575*46d2f618SCy Schubert# my_options_prep_result=$func_quote_for_eval_result 1576f61ef7f6SDag-Erling Smørgrav# } 1577f61ef7f6SDag-Erling Smørgrav# func_add_hook func_options_prep my_options_prep 1578f61ef7f6SDag-Erling Smørgrav# 1579f61ef7f6SDag-Erling Smørgrav# 1580f61ef7f6SDag-Erling Smørgrav# my_silent_option () 1581f61ef7f6SDag-Erling Smørgrav# { 1582f61ef7f6SDag-Erling Smørgrav# $debug_cmd 1583f61ef7f6SDag-Erling Smørgrav# 1584*46d2f618SCy Schubert# # Note that for efficiency, we parse as many options as we can 1585f61ef7f6SDag-Erling Smørgrav# # recognise in a loop before passing the remainder back to the 1586f61ef7f6SDag-Erling Smørgrav# # caller on the first unrecognised argument we encounter. 1587f61ef7f6SDag-Erling Smørgrav# while test $# -gt 0; do 1588f61ef7f6SDag-Erling Smørgrav# opt=$1; shift 1589f61ef7f6SDag-Erling Smørgrav# case $opt in 1590*46d2f618SCy Schubert# --silent|-s) opt_silent=: ;; 1591f61ef7f6SDag-Erling Smørgrav# # Separate non-argument short options: 1592f61ef7f6SDag-Erling Smørgrav# -s*) func_split_short_opt "$_G_opt" 1593f61ef7f6SDag-Erling Smørgrav# set dummy "$func_split_short_opt_name" \ 1594f61ef7f6SDag-Erling Smørgrav# "-$func_split_short_opt_arg" ${1+"$@"} 1595f61ef7f6SDag-Erling Smørgrav# shift 1596f61ef7f6SDag-Erling Smørgrav# ;; 1597*46d2f618SCy Schubert# *) set dummy "$_G_opt" "$*"; shift; break ;; 1598f61ef7f6SDag-Erling Smørgrav# esac 1599f61ef7f6SDag-Erling Smørgrav# done 1600f61ef7f6SDag-Erling Smørgrav# 1601*46d2f618SCy Schubert# func_quote_for_eval ${1+"$@"} 1602*46d2f618SCy Schubert# my_silent_option_result=$func_quote_for_eval_result 1603f61ef7f6SDag-Erling Smørgrav# } 1604f61ef7f6SDag-Erling Smørgrav# func_add_hook func_parse_options my_silent_option 1605f61ef7f6SDag-Erling Smørgrav# 1606f61ef7f6SDag-Erling Smørgrav# 1607f61ef7f6SDag-Erling Smørgrav# my_option_validation () 1608f61ef7f6SDag-Erling Smørgrav# { 1609f61ef7f6SDag-Erling Smørgrav# $debug_cmd 1610f61ef7f6SDag-Erling Smørgrav# 1611f61ef7f6SDag-Erling Smørgrav# $opt_silent && $opt_verbose && func_fatal_help "\ 1612f61ef7f6SDag-Erling Smørgrav# '--silent' and '--verbose' options are mutually exclusive." 1613*46d2f618SCy Schubert# 1614*46d2f618SCy Schubert# func_quote_for_eval ${1+"$@"} 1615*46d2f618SCy Schubert# my_option_validation_result=$func_quote_for_eval_result 1616f61ef7f6SDag-Erling Smørgrav# } 1617f61ef7f6SDag-Erling Smørgrav# func_add_hook func_validate_options my_option_validation 1618f61ef7f6SDag-Erling Smørgrav# 1619*46d2f618SCy Schubert# You'll alse need to manually amend $usage_message to reflect the extra 1620f61ef7f6SDag-Erling Smørgrav# options you parse. It's preferable to append if you can, so that 1621f61ef7f6SDag-Erling Smørgrav# multiple option parsing hooks can be added safely. 1622f61ef7f6SDag-Erling Smørgrav 1623f61ef7f6SDag-Erling Smørgrav 1624f61ef7f6SDag-Erling Smørgrav# func_options [ARG]... 1625f61ef7f6SDag-Erling Smørgrav# --------------------- 1626f61ef7f6SDag-Erling Smørgrav# All the functions called inside func_options are hookable. See the 1627f61ef7f6SDag-Erling Smørgrav# individual implementations for details. 1628f61ef7f6SDag-Erling Smørgravfunc_hookable func_options 1629f61ef7f6SDag-Erling Smørgravfunc_options () 1630f61ef7f6SDag-Erling Smørgrav{ 1631f61ef7f6SDag-Erling Smørgrav $debug_cmd 1632f61ef7f6SDag-Erling Smørgrav 1633*46d2f618SCy Schubert func_options_prep ${1+"$@"} 1634*46d2f618SCy Schubert eval func_parse_options \ 1635*46d2f618SCy Schubert ${func_options_prep_result+"$func_options_prep_result"} 1636*46d2f618SCy Schubert eval func_validate_options \ 1637*46d2f618SCy Schubert ${func_parse_options_result+"$func_parse_options_result"} 1638f61ef7f6SDag-Erling Smørgrav 1639*46d2f618SCy Schubert eval func_run_hooks func_options \ 1640*46d2f618SCy Schubert ${func_validate_options_result+"$func_validate_options_result"} 1641f61ef7f6SDag-Erling Smørgrav 1642*46d2f618SCy Schubert # save modified positional parameters for caller 1643*46d2f618SCy Schubert func_options_result=$func_run_hooks_result 1644f61ef7f6SDag-Erling Smørgrav} 1645f61ef7f6SDag-Erling Smørgrav 1646f61ef7f6SDag-Erling Smørgrav 1647f61ef7f6SDag-Erling Smørgrav# func_options_prep [ARG]... 1648f61ef7f6SDag-Erling Smørgrav# -------------------------- 1649f61ef7f6SDag-Erling Smørgrav# All initialisations required before starting the option parse loop. 1650f61ef7f6SDag-Erling Smørgrav# Note that when calling hook functions, we pass through the list of 1651f61ef7f6SDag-Erling Smørgrav# positional parameters. If a hook function modifies that list, and 1652*46d2f618SCy Schubert# needs to propogate that back to rest of this script, then the complete 1653*46d2f618SCy Schubert# modified list must be put in 'func_run_hooks_result' before 1654*46d2f618SCy Schubert# returning. 1655f61ef7f6SDag-Erling Smørgravfunc_hookable func_options_prep 1656f61ef7f6SDag-Erling Smørgravfunc_options_prep () 1657f61ef7f6SDag-Erling Smørgrav{ 1658f61ef7f6SDag-Erling Smørgrav $debug_cmd 1659f61ef7f6SDag-Erling Smørgrav 1660f61ef7f6SDag-Erling Smørgrav # Option defaults: 1661f61ef7f6SDag-Erling Smørgrav opt_verbose=false 1662f61ef7f6SDag-Erling Smørgrav opt_warning_types= 1663f61ef7f6SDag-Erling Smørgrav 1664f61ef7f6SDag-Erling Smørgrav func_run_hooks func_options_prep ${1+"$@"} 1665*46d2f618SCy Schubert 1666*46d2f618SCy Schubert # save modified positional parameters for caller 1667*46d2f618SCy Schubert func_options_prep_result=$func_run_hooks_result 1668f61ef7f6SDag-Erling Smørgrav} 1669f61ef7f6SDag-Erling Smørgrav 1670f61ef7f6SDag-Erling Smørgrav 1671f61ef7f6SDag-Erling Smørgrav# func_parse_options [ARG]... 1672f61ef7f6SDag-Erling Smørgrav# --------------------------- 1673f61ef7f6SDag-Erling Smørgrav# The main option parsing loop. 1674f61ef7f6SDag-Erling Smørgravfunc_hookable func_parse_options 1675f61ef7f6SDag-Erling Smørgravfunc_parse_options () 1676f61ef7f6SDag-Erling Smørgrav{ 1677f61ef7f6SDag-Erling Smørgrav $debug_cmd 1678f61ef7f6SDag-Erling Smørgrav 1679*46d2f618SCy Schubert func_parse_options_result= 1680*46d2f618SCy Schubert 1681f61ef7f6SDag-Erling Smørgrav # this just eases exit handling 1682f61ef7f6SDag-Erling Smørgrav while test $# -gt 0; do 1683f61ef7f6SDag-Erling Smørgrav # Defer to hook functions for initial option parsing, so they 1684f61ef7f6SDag-Erling Smørgrav # get priority in the event of reusing an option name. 1685f61ef7f6SDag-Erling Smørgrav func_run_hooks func_parse_options ${1+"$@"} 1686*46d2f618SCy Schubert 1687*46d2f618SCy Schubert # Adjust func_parse_options positional parameters to match 1688*46d2f618SCy Schubert eval set dummy "$func_run_hooks_result"; shift 1689f61ef7f6SDag-Erling Smørgrav 1690f61ef7f6SDag-Erling Smørgrav # Break out of the loop if we already parsed every option. 1691f61ef7f6SDag-Erling Smørgrav test $# -gt 0 || break 1692f61ef7f6SDag-Erling Smørgrav 1693f61ef7f6SDag-Erling Smørgrav _G_opt=$1 1694f61ef7f6SDag-Erling Smørgrav shift 1695f61ef7f6SDag-Erling Smørgrav case $_G_opt in 1696f61ef7f6SDag-Erling Smørgrav --debug|-x) debug_cmd='set -x' 1697*46d2f618SCy Schubert func_echo "enabling shell trace mode" 1698f61ef7f6SDag-Erling Smørgrav $debug_cmd 1699f61ef7f6SDag-Erling Smørgrav ;; 1700f61ef7f6SDag-Erling Smørgrav 1701f61ef7f6SDag-Erling Smørgrav --no-warnings|--no-warning|--no-warn) 1702f61ef7f6SDag-Erling Smørgrav set dummy --warnings none ${1+"$@"} 1703f61ef7f6SDag-Erling Smørgrav shift 1704f61ef7f6SDag-Erling Smørgrav ;; 1705f61ef7f6SDag-Erling Smørgrav 1706f61ef7f6SDag-Erling Smørgrav --warnings|--warning|-W) 1707*46d2f618SCy Schubert test $# = 0 && func_missing_arg $_G_opt && break 1708f61ef7f6SDag-Erling Smørgrav case " $warning_categories $1" in 1709f61ef7f6SDag-Erling Smørgrav *" $1 "*) 1710f61ef7f6SDag-Erling Smørgrav # trailing space prevents matching last $1 above 1711f61ef7f6SDag-Erling Smørgrav func_append_uniq opt_warning_types " $1" 1712f61ef7f6SDag-Erling Smørgrav ;; 1713f61ef7f6SDag-Erling Smørgrav *all) 1714f61ef7f6SDag-Erling Smørgrav opt_warning_types=$warning_categories 1715f61ef7f6SDag-Erling Smørgrav ;; 1716f61ef7f6SDag-Erling Smørgrav *none) 1717f61ef7f6SDag-Erling Smørgrav opt_warning_types=none 1718f61ef7f6SDag-Erling Smørgrav warning_func=: 1719f61ef7f6SDag-Erling Smørgrav ;; 1720f61ef7f6SDag-Erling Smørgrav *error) 1721f61ef7f6SDag-Erling Smørgrav opt_warning_types=$warning_categories 1722f61ef7f6SDag-Erling Smørgrav warning_func=func_fatal_error 1723f61ef7f6SDag-Erling Smørgrav ;; 1724f61ef7f6SDag-Erling Smørgrav *) 1725f61ef7f6SDag-Erling Smørgrav func_fatal_error \ 1726f61ef7f6SDag-Erling Smørgrav "unsupported warning category: '$1'" 1727f61ef7f6SDag-Erling Smørgrav ;; 1728f61ef7f6SDag-Erling Smørgrav esac 1729f61ef7f6SDag-Erling Smørgrav shift 1730f61ef7f6SDag-Erling Smørgrav ;; 1731f61ef7f6SDag-Erling Smørgrav 1732f61ef7f6SDag-Erling Smørgrav --verbose|-v) opt_verbose=: ;; 1733f61ef7f6SDag-Erling Smørgrav --version) func_version ;; 1734f61ef7f6SDag-Erling Smørgrav -\?|-h) func_usage ;; 1735f61ef7f6SDag-Erling Smørgrav --help) func_help ;; 1736f61ef7f6SDag-Erling Smørgrav 1737f61ef7f6SDag-Erling Smørgrav # Separate optargs to long options (plugins may need this): 1738f61ef7f6SDag-Erling Smørgrav --*=*) func_split_equals "$_G_opt" 1739f61ef7f6SDag-Erling Smørgrav set dummy "$func_split_equals_lhs" \ 1740f61ef7f6SDag-Erling Smørgrav "$func_split_equals_rhs" ${1+"$@"} 1741f61ef7f6SDag-Erling Smørgrav shift 1742f61ef7f6SDag-Erling Smørgrav ;; 1743f61ef7f6SDag-Erling Smørgrav 1744f61ef7f6SDag-Erling Smørgrav # Separate optargs to short options: 1745f61ef7f6SDag-Erling Smørgrav -W*) 1746f61ef7f6SDag-Erling Smørgrav func_split_short_opt "$_G_opt" 1747f61ef7f6SDag-Erling Smørgrav set dummy "$func_split_short_opt_name" \ 1748f61ef7f6SDag-Erling Smørgrav "$func_split_short_opt_arg" ${1+"$@"} 1749f61ef7f6SDag-Erling Smørgrav shift 1750f61ef7f6SDag-Erling Smørgrav ;; 1751f61ef7f6SDag-Erling Smørgrav 1752f61ef7f6SDag-Erling Smørgrav # Separate non-argument short options: 1753f61ef7f6SDag-Erling Smørgrav -\?*|-h*|-v*|-x*) 1754f61ef7f6SDag-Erling Smørgrav func_split_short_opt "$_G_opt" 1755f61ef7f6SDag-Erling Smørgrav set dummy "$func_split_short_opt_name" \ 1756f61ef7f6SDag-Erling Smørgrav "-$func_split_short_opt_arg" ${1+"$@"} 1757f61ef7f6SDag-Erling Smørgrav shift 1758f61ef7f6SDag-Erling Smørgrav ;; 1759f61ef7f6SDag-Erling Smørgrav 1760*46d2f618SCy Schubert --) break ;; 1761f61ef7f6SDag-Erling Smørgrav -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; 1762*46d2f618SCy Schubert *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 1763f61ef7f6SDag-Erling Smørgrav esac 1764f61ef7f6SDag-Erling Smørgrav done 1765f61ef7f6SDag-Erling Smørgrav 1766f61ef7f6SDag-Erling Smørgrav # save modified positional parameters for caller 1767*46d2f618SCy Schubert func_quote_for_eval ${1+"$@"} 1768*46d2f618SCy Schubert func_parse_options_result=$func_quote_for_eval_result 1769f61ef7f6SDag-Erling Smørgrav} 1770f61ef7f6SDag-Erling Smørgrav 1771f61ef7f6SDag-Erling Smørgrav 1772f61ef7f6SDag-Erling Smørgrav# func_validate_options [ARG]... 1773f61ef7f6SDag-Erling Smørgrav# ------------------------------ 1774f61ef7f6SDag-Erling Smørgrav# Perform any sanity checks on option settings and/or unconsumed 1775f61ef7f6SDag-Erling Smørgrav# arguments. 1776f61ef7f6SDag-Erling Smørgravfunc_hookable func_validate_options 1777f61ef7f6SDag-Erling Smørgravfunc_validate_options () 1778f61ef7f6SDag-Erling Smørgrav{ 1779f61ef7f6SDag-Erling Smørgrav $debug_cmd 1780f61ef7f6SDag-Erling Smørgrav 1781f61ef7f6SDag-Erling Smørgrav # Display all warnings if -W was not given. 1782f61ef7f6SDag-Erling Smørgrav test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" 1783f61ef7f6SDag-Erling Smørgrav 1784f61ef7f6SDag-Erling Smørgrav func_run_hooks func_validate_options ${1+"$@"} 1785f61ef7f6SDag-Erling Smørgrav 1786f61ef7f6SDag-Erling Smørgrav # Bail if the options were screwed! 1787f61ef7f6SDag-Erling Smørgrav $exit_cmd $EXIT_FAILURE 1788*46d2f618SCy Schubert 1789*46d2f618SCy Schubert # save modified positional parameters for caller 1790*46d2f618SCy Schubert func_validate_options_result=$func_run_hooks_result 1791f61ef7f6SDag-Erling Smørgrav} 1792f61ef7f6SDag-Erling Smørgrav 1793f61ef7f6SDag-Erling Smørgrav 1794f61ef7f6SDag-Erling Smørgrav 1795f61ef7f6SDag-Erling Smørgrav## ----------------- ## 1796f61ef7f6SDag-Erling Smørgrav## Helper functions. ## 1797f61ef7f6SDag-Erling Smørgrav## ----------------- ## 1798f61ef7f6SDag-Erling Smørgrav 1799f61ef7f6SDag-Erling Smørgrav# This section contains the helper functions used by the rest of the 1800f61ef7f6SDag-Erling Smørgrav# hookable option parser framework in ascii-betical order. 1801f61ef7f6SDag-Erling Smørgrav 1802f61ef7f6SDag-Erling Smørgrav 1803f61ef7f6SDag-Erling Smørgrav# func_fatal_help ARG... 1804f61ef7f6SDag-Erling Smørgrav# ---------------------- 1805f61ef7f6SDag-Erling Smørgrav# Echo program name prefixed message to standard error, followed by 1806f61ef7f6SDag-Erling Smørgrav# a help hint, and exit. 1807f61ef7f6SDag-Erling Smørgravfunc_fatal_help () 1808f61ef7f6SDag-Erling Smørgrav{ 1809f61ef7f6SDag-Erling Smørgrav $debug_cmd 1810f61ef7f6SDag-Erling Smørgrav 1811f61ef7f6SDag-Erling Smørgrav eval \$ECHO \""Usage: $usage"\" 1812f61ef7f6SDag-Erling Smørgrav eval \$ECHO \""$fatal_help"\" 1813f61ef7f6SDag-Erling Smørgrav func_error ${1+"$@"} 1814f61ef7f6SDag-Erling Smørgrav exit $EXIT_FAILURE 1815f61ef7f6SDag-Erling Smørgrav} 1816f61ef7f6SDag-Erling Smørgrav 1817f61ef7f6SDag-Erling Smørgrav 1818f61ef7f6SDag-Erling Smørgrav# func_help 1819f61ef7f6SDag-Erling Smørgrav# --------- 1820f61ef7f6SDag-Erling Smørgrav# Echo long help message to standard output and exit. 1821b7579f77SDag-Erling Smørgravfunc_help () 1822b7579f77SDag-Erling Smørgrav{ 1823f61ef7f6SDag-Erling Smørgrav $debug_cmd 1824b7579f77SDag-Erling Smørgrav 1825f61ef7f6SDag-Erling Smørgrav func_usage_message 1826f61ef7f6SDag-Erling Smørgrav $ECHO "$long_help_message" 1827f61ef7f6SDag-Erling Smørgrav exit 0 1828b7579f77SDag-Erling Smørgrav} 1829b7579f77SDag-Erling Smørgrav 1830f61ef7f6SDag-Erling Smørgrav 1831f61ef7f6SDag-Erling Smørgrav# func_missing_arg ARGNAME 1832f61ef7f6SDag-Erling Smørgrav# ------------------------ 1833b7579f77SDag-Erling Smørgrav# Echo program name prefixed message to standard error and set global 1834b7579f77SDag-Erling Smørgrav# exit_cmd. 1835b7579f77SDag-Erling Smørgravfunc_missing_arg () 1836b7579f77SDag-Erling Smørgrav{ 1837f61ef7f6SDag-Erling Smørgrav $debug_cmd 1838b7579f77SDag-Erling Smørgrav 1839f61ef7f6SDag-Erling Smørgrav func_error "Missing argument for '$1'." 1840b7579f77SDag-Erling Smørgrav exit_cmd=exit 1841b7579f77SDag-Erling Smørgrav} 1842b7579f77SDag-Erling Smørgrav 1843b7579f77SDag-Erling Smørgrav 1844f61ef7f6SDag-Erling Smørgrav# func_split_equals STRING 1845f61ef7f6SDag-Erling Smørgrav# ------------------------ 1846*46d2f618SCy Schubert# Set func_split_equals_lhs and func_split_equals_rhs shell variables after 1847*46d2f618SCy Schubert# splitting STRING at the '=' sign. 1848f61ef7f6SDag-Erling Smørgravtest -z "$_G_HAVE_XSI_OPS" \ 1849f61ef7f6SDag-Erling Smørgrav && (eval 'x=a/b/c; 1850f61ef7f6SDag-Erling Smørgrav test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ 1851f61ef7f6SDag-Erling Smørgrav && _G_HAVE_XSI_OPS=yes 1852f61ef7f6SDag-Erling Smørgrav 1853f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_XSI_OPS" 1854f61ef7f6SDag-Erling Smørgravthen 1855f61ef7f6SDag-Erling Smørgrav # This is an XSI compatible shell, allowing a faster implementation... 1856f61ef7f6SDag-Erling Smørgrav eval 'func_split_equals () 1857f61ef7f6SDag-Erling Smørgrav { 1858f61ef7f6SDag-Erling Smørgrav $debug_cmd 1859f61ef7f6SDag-Erling Smørgrav 1860f61ef7f6SDag-Erling Smørgrav func_split_equals_lhs=${1%%=*} 1861f61ef7f6SDag-Erling Smørgrav func_split_equals_rhs=${1#*=} 1862*46d2f618SCy Schubert test "x$func_split_equals_lhs" = "x$1" \ 1863*46d2f618SCy Schubert && func_split_equals_rhs= 1864f61ef7f6SDag-Erling Smørgrav }' 1865f61ef7f6SDag-Erling Smørgravelse 1866f61ef7f6SDag-Erling Smørgrav # ...otherwise fall back to using expr, which is often a shell builtin. 1867f61ef7f6SDag-Erling Smørgrav func_split_equals () 1868f61ef7f6SDag-Erling Smørgrav { 1869f61ef7f6SDag-Erling Smørgrav $debug_cmd 1870f61ef7f6SDag-Erling Smørgrav 1871f61ef7f6SDag-Erling Smørgrav func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` 1872f61ef7f6SDag-Erling Smørgrav func_split_equals_rhs= 1873*46d2f618SCy Schubert test "x$func_split_equals_lhs" = "x$1" \ 1874f61ef7f6SDag-Erling Smørgrav || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` 1875f61ef7f6SDag-Erling Smørgrav } 1876f61ef7f6SDag-Erling Smørgravfi #func_split_equals 1877f61ef7f6SDag-Erling Smørgrav 1878f61ef7f6SDag-Erling Smørgrav 1879f61ef7f6SDag-Erling Smørgrav# func_split_short_opt SHORTOPT 1880f61ef7f6SDag-Erling Smørgrav# ----------------------------- 1881b7579f77SDag-Erling Smørgrav# Set func_split_short_opt_name and func_split_short_opt_arg shell 1882b7579f77SDag-Erling Smørgrav# variables after splitting SHORTOPT after the 2nd character. 1883f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_XSI_OPS" 1884f61ef7f6SDag-Erling Smørgravthen 1885f61ef7f6SDag-Erling Smørgrav # This is an XSI compatible shell, allowing a faster implementation... 1886f61ef7f6SDag-Erling Smørgrav eval 'func_split_short_opt () 1887f61ef7f6SDag-Erling Smørgrav { 1888f61ef7f6SDag-Erling Smørgrav $debug_cmd 1889f61ef7f6SDag-Erling Smørgrav 1890f61ef7f6SDag-Erling Smørgrav func_split_short_opt_arg=${1#??} 1891f61ef7f6SDag-Erling Smørgrav func_split_short_opt_name=${1%"$func_split_short_opt_arg"} 1892f61ef7f6SDag-Erling Smørgrav }' 1893f61ef7f6SDag-Erling Smørgravelse 1894f61ef7f6SDag-Erling Smørgrav # ...otherwise fall back to using expr, which is often a shell builtin. 1895b7579f77SDag-Erling Smørgrav func_split_short_opt () 1896b7579f77SDag-Erling Smørgrav { 1897f61ef7f6SDag-Erling Smørgrav $debug_cmd 1898b7579f77SDag-Erling Smørgrav 1899*46d2f618SCy Schubert func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` 1900f61ef7f6SDag-Erling Smørgrav func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` 1901f61ef7f6SDag-Erling Smørgrav } 1902f61ef7f6SDag-Erling Smørgravfi #func_split_short_opt 1903b7579f77SDag-Erling Smørgrav 1904b7579f77SDag-Erling Smørgrav 1905f61ef7f6SDag-Erling Smørgrav# func_usage 1906f61ef7f6SDag-Erling Smørgrav# ---------- 1907f61ef7f6SDag-Erling Smørgrav# Echo short help message to standard output and exit. 1908f61ef7f6SDag-Erling Smørgravfunc_usage () 1909b7579f77SDag-Erling Smørgrav{ 1910f61ef7f6SDag-Erling Smørgrav $debug_cmd 1911b7579f77SDag-Erling Smørgrav 1912f61ef7f6SDag-Erling Smørgrav func_usage_message 1913f61ef7f6SDag-Erling Smørgrav $ECHO "Run '$progname --help |${PAGER-more}' for full usage" 1914f61ef7f6SDag-Erling Smørgrav exit 0 1915f61ef7f6SDag-Erling Smørgrav} 1916b7579f77SDag-Erling Smørgrav 1917b7579f77SDag-Erling Smørgrav 1918f61ef7f6SDag-Erling Smørgrav# func_usage_message 1919f61ef7f6SDag-Erling Smørgrav# ------------------ 1920f61ef7f6SDag-Erling Smørgrav# Echo short help message to standard output. 1921f61ef7f6SDag-Erling Smørgravfunc_usage_message () 1922b7579f77SDag-Erling Smørgrav{ 1923f61ef7f6SDag-Erling Smørgrav $debug_cmd 1924b7579f77SDag-Erling Smørgrav 1925f61ef7f6SDag-Erling Smørgrav eval \$ECHO \""Usage: $usage"\" 1926f61ef7f6SDag-Erling Smørgrav echo 1927f61ef7f6SDag-Erling Smørgrav $SED -n 's|^# || 1928f61ef7f6SDag-Erling Smørgrav /^Written by/{ 1929f61ef7f6SDag-Erling Smørgrav x;p;x 1930f61ef7f6SDag-Erling Smørgrav } 1931f61ef7f6SDag-Erling Smørgrav h 1932f61ef7f6SDag-Erling Smørgrav /^Written by/q' < "$progpath" 1933f61ef7f6SDag-Erling Smørgrav echo 1934f61ef7f6SDag-Erling Smørgrav eval \$ECHO \""$usage_message"\" 1935f61ef7f6SDag-Erling Smørgrav} 1936f61ef7f6SDag-Erling Smørgrav 1937f61ef7f6SDag-Erling Smørgrav 1938f61ef7f6SDag-Erling Smørgrav# func_version 1939f61ef7f6SDag-Erling Smørgrav# ------------ 1940f61ef7f6SDag-Erling Smørgrav# Echo version message to standard output and exit. 1941f61ef7f6SDag-Erling Smørgravfunc_version () 1942b7579f77SDag-Erling Smørgrav{ 1943f61ef7f6SDag-Erling Smørgrav $debug_cmd 1944f61ef7f6SDag-Erling Smørgrav 1945f61ef7f6SDag-Erling Smørgrav printf '%s\n' "$progname $scriptversion" 1946f61ef7f6SDag-Erling Smørgrav $SED -n ' 1947*46d2f618SCy Schubert /(C)/!b go 1948*46d2f618SCy Schubert :more 1949*46d2f618SCy Schubert /\./!{ 1950*46d2f618SCy Schubert N 1951*46d2f618SCy Schubert s|\n# | | 1952*46d2f618SCy Schubert b more 1953f61ef7f6SDag-Erling Smørgrav } 1954*46d2f618SCy Schubert :go 1955*46d2f618SCy Schubert /^# Written by /,/# warranty; / { 1956f61ef7f6SDag-Erling Smørgrav s|^# || 1957f61ef7f6SDag-Erling Smørgrav s|^# *$|| 1958f61ef7f6SDag-Erling Smørgrav s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| 1959*46d2f618SCy Schubert p 1960*46d2f618SCy Schubert } 1961*46d2f618SCy Schubert /^# Written by / { 1962*46d2f618SCy Schubert s|^# || 1963*46d2f618SCy Schubert p 1964*46d2f618SCy Schubert } 1965*46d2f618SCy Schubert /^warranty; /q' < "$progpath" 1966f61ef7f6SDag-Erling Smørgrav 1967f61ef7f6SDag-Erling Smørgrav exit $? 1968f61ef7f6SDag-Erling Smørgrav} 1969b7579f77SDag-Erling Smørgrav 1970b7579f77SDag-Erling Smørgrav 1971f61ef7f6SDag-Erling Smørgrav# Local variables: 1972f61ef7f6SDag-Erling Smørgrav# mode: shell-script 1973f61ef7f6SDag-Erling Smørgrav# sh-indentation: 2 1974f61ef7f6SDag-Erling Smørgrav# eval: (add-hook 'before-save-hook 'time-stamp) 1975*46d2f618SCy Schubert# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" 1976f61ef7f6SDag-Erling Smørgrav# time-stamp-time-zone: "UTC" 1977f61ef7f6SDag-Erling Smørgrav# End: 1978f61ef7f6SDag-Erling Smørgrav 1979f61ef7f6SDag-Erling Smørgrav# Set a version string. 1980*46d2f618SCy Schubertscriptversion='(GNU libtool) 2.4.6' 1981f61ef7f6SDag-Erling Smørgrav 1982f61ef7f6SDag-Erling Smørgrav 1983f61ef7f6SDag-Erling Smørgrav# func_echo ARG... 1984f61ef7f6SDag-Erling Smørgrav# ---------------- 1985f61ef7f6SDag-Erling Smørgrav# Libtool also displays the current mode in messages, so override 1986f61ef7f6SDag-Erling Smørgrav# funclib.sh func_echo with this custom definition. 1987f61ef7f6SDag-Erling Smørgravfunc_echo () 1988b7579f77SDag-Erling Smørgrav{ 1989f61ef7f6SDag-Erling Smørgrav $debug_cmd 1990f61ef7f6SDag-Erling Smørgrav 1991f61ef7f6SDag-Erling Smørgrav _G_message=$* 1992f61ef7f6SDag-Erling Smørgrav 1993f61ef7f6SDag-Erling Smørgrav func_echo_IFS=$IFS 1994f61ef7f6SDag-Erling Smørgrav IFS=$nl 1995f61ef7f6SDag-Erling Smørgrav for _G_line in $_G_message; do 1996f61ef7f6SDag-Erling Smørgrav IFS=$func_echo_IFS 1997f61ef7f6SDag-Erling Smørgrav $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" 1998f61ef7f6SDag-Erling Smørgrav done 1999f61ef7f6SDag-Erling Smørgrav IFS=$func_echo_IFS 2000f61ef7f6SDag-Erling Smørgrav} 2001b7579f77SDag-Erling Smørgrav 2002b7579f77SDag-Erling Smørgrav 2003f61ef7f6SDag-Erling Smørgrav# func_warning ARG... 2004f61ef7f6SDag-Erling Smørgrav# ------------------- 2005f61ef7f6SDag-Erling Smørgrav# Libtool warnings are not categorized, so override funclib.sh 2006f61ef7f6SDag-Erling Smørgrav# func_warning with this simpler definition. 2007f61ef7f6SDag-Erling Smørgravfunc_warning () 2008b7579f77SDag-Erling Smørgrav{ 2009f61ef7f6SDag-Erling Smørgrav $debug_cmd 2010f61ef7f6SDag-Erling Smørgrav 2011f61ef7f6SDag-Erling Smørgrav $warning_func ${1+"$@"} 2012f61ef7f6SDag-Erling Smørgrav} 2013b7579f77SDag-Erling Smørgrav 2014b7579f77SDag-Erling Smørgrav 2015f61ef7f6SDag-Erling Smørgrav## ---------------- ## 2016f61ef7f6SDag-Erling Smørgrav## Options parsing. ## 2017f61ef7f6SDag-Erling Smørgrav## ---------------- ## 2018f61ef7f6SDag-Erling Smørgrav 2019f61ef7f6SDag-Erling Smørgrav# Hook in the functions to make sure our own options are parsed during 2020f61ef7f6SDag-Erling Smørgrav# the option parsing loop. 2021f61ef7f6SDag-Erling Smørgrav 2022f61ef7f6SDag-Erling Smørgravusage='$progpath [OPTION]... [MODE-ARG]...' 2023f61ef7f6SDag-Erling Smørgrav 2024f61ef7f6SDag-Erling Smørgrav# Short help message in response to '-h'. 2025f61ef7f6SDag-Erling Smørgravusage_message="Options: 2026f61ef7f6SDag-Erling Smørgrav --config show all configuration variables 2027f61ef7f6SDag-Erling Smørgrav --debug enable verbose shell tracing 2028f61ef7f6SDag-Erling Smørgrav -n, --dry-run display commands without modifying any files 2029f61ef7f6SDag-Erling Smørgrav --features display basic configuration information and exit 2030f61ef7f6SDag-Erling Smørgrav --mode=MODE use operation mode MODE 2031f61ef7f6SDag-Erling Smørgrav --no-warnings equivalent to '-Wnone' 2032f61ef7f6SDag-Erling Smørgrav --preserve-dup-deps don't remove duplicate dependency libraries 2033f61ef7f6SDag-Erling Smørgrav --quiet, --silent don't print informational messages 2034f61ef7f6SDag-Erling Smørgrav --tag=TAG use configuration variables from tag TAG 2035f61ef7f6SDag-Erling Smørgrav -v, --verbose print more informational messages than default 2036f61ef7f6SDag-Erling Smørgrav --version print version information 2037f61ef7f6SDag-Erling Smørgrav -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] 2038f61ef7f6SDag-Erling Smørgrav -h, --help, --help-all print short, long, or detailed help message 2039f61ef7f6SDag-Erling Smørgrav" 2040f61ef7f6SDag-Erling Smørgrav 2041f61ef7f6SDag-Erling Smørgrav# Additional text appended to 'usage_message' in response to '--help'. 2042f61ef7f6SDag-Erling Smørgravfunc_help () 2043f61ef7f6SDag-Erling Smørgrav{ 2044f61ef7f6SDag-Erling Smørgrav $debug_cmd 2045f61ef7f6SDag-Erling Smørgrav 2046f61ef7f6SDag-Erling Smørgrav func_usage_message 2047f61ef7f6SDag-Erling Smørgrav $ECHO "$long_help_message 2048f61ef7f6SDag-Erling Smørgrav 2049f61ef7f6SDag-Erling SmørgravMODE must be one of the following: 2050f61ef7f6SDag-Erling Smørgrav 2051f61ef7f6SDag-Erling Smørgrav clean remove files from the build directory 2052f61ef7f6SDag-Erling Smørgrav compile compile a source file into a libtool object 2053f61ef7f6SDag-Erling Smørgrav execute automatically set library path, then run a program 2054f61ef7f6SDag-Erling Smørgrav finish complete the installation of libtool libraries 2055f61ef7f6SDag-Erling Smørgrav install install libraries or executables 2056f61ef7f6SDag-Erling Smørgrav link create a library or an executable 2057f61ef7f6SDag-Erling Smørgrav uninstall remove libraries from an installed directory 2058f61ef7f6SDag-Erling Smørgrav 2059f61ef7f6SDag-Erling SmørgravMODE-ARGS vary depending on the MODE. When passed as first option, 2060f61ef7f6SDag-Erling Smørgrav'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. 2061f61ef7f6SDag-Erling SmørgravTry '$progname --help --mode=MODE' for a more detailed description of MODE. 2062f61ef7f6SDag-Erling Smørgrav 2063f61ef7f6SDag-Erling SmørgravWhen reporting a bug, please describe a test case to reproduce it and 2064f61ef7f6SDag-Erling Smørgravinclude the following information: 2065f61ef7f6SDag-Erling Smørgrav 2066f61ef7f6SDag-Erling Smørgrav host-triplet: $host 2067f61ef7f6SDag-Erling Smørgrav shell: $SHELL 2068f61ef7f6SDag-Erling Smørgrav compiler: $LTCC 2069f61ef7f6SDag-Erling Smørgrav compiler flags: $LTCFLAGS 2070f61ef7f6SDag-Erling Smørgrav linker: $LD (gnu? $with_gnu_ld) 2071*46d2f618SCy Schubert version: $progname (GNU libtool) 2.4.6 2072f61ef7f6SDag-Erling Smørgrav automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` 2073f61ef7f6SDag-Erling Smørgrav autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` 2074f61ef7f6SDag-Erling Smørgrav 2075f61ef7f6SDag-Erling SmørgravReport bugs to <bug-libtool@gnu.org>. 2076f61ef7f6SDag-Erling SmørgravGNU libtool home page: <http://www.gnu.org/software/libtool/>. 2077f61ef7f6SDag-Erling SmørgravGeneral help using GNU software: <http://www.gnu.org/gethelp/>." 2078f61ef7f6SDag-Erling Smørgrav exit 0 2079f61ef7f6SDag-Erling Smørgrav} 2080f61ef7f6SDag-Erling Smørgrav 2081f61ef7f6SDag-Erling Smørgrav 2082f61ef7f6SDag-Erling Smørgrav# func_lo2o OBJECT-NAME 2083f61ef7f6SDag-Erling Smørgrav# --------------------- 2084f61ef7f6SDag-Erling Smørgrav# Transform OBJECT-NAME from a '.lo' suffix to the platform specific 2085f61ef7f6SDag-Erling Smørgrav# object suffix. 2086f61ef7f6SDag-Erling Smørgrav 2087f61ef7f6SDag-Erling Smørgravlo2o=s/\\.lo\$/.$objext/ 2088f61ef7f6SDag-Erling Smørgravo2lo=s/\\.$objext\$/.lo/ 2089f61ef7f6SDag-Erling Smørgrav 2090f61ef7f6SDag-Erling Smørgravif test yes = "$_G_HAVE_XSI_OPS"; then 2091f61ef7f6SDag-Erling Smørgrav eval 'func_lo2o () 2092f61ef7f6SDag-Erling Smørgrav { 2093f61ef7f6SDag-Erling Smørgrav case $1 in 2094f61ef7f6SDag-Erling Smørgrav *.lo) func_lo2o_result=${1%.lo}.$objext ;; 2095f61ef7f6SDag-Erling Smørgrav * ) func_lo2o_result=$1 ;; 2096f61ef7f6SDag-Erling Smørgrav esac 2097f61ef7f6SDag-Erling Smørgrav }' 2098f61ef7f6SDag-Erling Smørgrav 2099f61ef7f6SDag-Erling Smørgrav # func_xform LIBOBJ-OR-SOURCE 2100f61ef7f6SDag-Erling Smørgrav # --------------------------- 2101f61ef7f6SDag-Erling Smørgrav # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) 2102f61ef7f6SDag-Erling Smørgrav # suffix to a '.lo' libtool-object suffix. 2103f61ef7f6SDag-Erling Smørgrav eval 'func_xform () 2104f61ef7f6SDag-Erling Smørgrav { 2105f61ef7f6SDag-Erling Smørgrav func_xform_result=${1%.*}.lo 2106f61ef7f6SDag-Erling Smørgrav }' 2107f61ef7f6SDag-Erling Smørgravelse 2108f61ef7f6SDag-Erling Smørgrav # ...otherwise fall back to using sed. 2109b7579f77SDag-Erling Smørgrav func_lo2o () 2110b7579f77SDag-Erling Smørgrav { 2111f61ef7f6SDag-Erling Smørgrav func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` 2112f61ef7f6SDag-Erling Smørgrav } 2113b7579f77SDag-Erling Smørgrav 2114b7579f77SDag-Erling Smørgrav func_xform () 2115b7579f77SDag-Erling Smørgrav { 2116f61ef7f6SDag-Erling Smørgrav func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` 2117f61ef7f6SDag-Erling Smørgrav } 2118f61ef7f6SDag-Erling Smørgravfi 2119b7579f77SDag-Erling Smørgrav 2120b7579f77SDag-Erling Smørgrav 2121f61ef7f6SDag-Erling Smørgrav# func_fatal_configuration ARG... 2122f61ef7f6SDag-Erling Smørgrav# ------------------------------- 2123b7579f77SDag-Erling Smørgrav# Echo program name prefixed message to standard error, followed by 2124b7579f77SDag-Erling Smørgrav# a configuration failure hint, and exit. 2125b7579f77SDag-Erling Smørgravfunc_fatal_configuration () 2126b7579f77SDag-Erling Smørgrav{ 2127e86b9096SDag-Erling Smørgrav func_fatal_error ${1+"$@"} \ 2128f61ef7f6SDag-Erling Smørgrav "See the $PACKAGE documentation for more information." \ 2129f61ef7f6SDag-Erling Smørgrav "Fatal configuration error." 2130b7579f77SDag-Erling Smørgrav} 2131b7579f77SDag-Erling Smørgrav 2132b7579f77SDag-Erling Smørgrav 2133b7579f77SDag-Erling Smørgrav# func_config 2134f61ef7f6SDag-Erling Smørgrav# ----------- 2135b7579f77SDag-Erling Smørgrav# Display the configuration for all the tags in this script. 2136b7579f77SDag-Erling Smørgravfunc_config () 2137b7579f77SDag-Erling Smørgrav{ 2138b7579f77SDag-Erling Smørgrav re_begincf='^# ### BEGIN LIBTOOL' 2139b7579f77SDag-Erling Smørgrav re_endcf='^# ### END LIBTOOL' 2140b7579f77SDag-Erling Smørgrav 2141b7579f77SDag-Erling Smørgrav # Default configuration. 2142b7579f77SDag-Erling Smørgrav $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 2143b7579f77SDag-Erling Smørgrav 2144b7579f77SDag-Erling Smørgrav # Now print the configurations for the tags. 2145b7579f77SDag-Erling Smørgrav for tagname in $taglist; do 2146b7579f77SDag-Erling Smørgrav $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 2147b7579f77SDag-Erling Smørgrav done 2148b7579f77SDag-Erling Smørgrav 2149b7579f77SDag-Erling Smørgrav exit $? 2150b7579f77SDag-Erling Smørgrav} 2151b7579f77SDag-Erling Smørgrav 2152f61ef7f6SDag-Erling Smørgrav 2153b7579f77SDag-Erling Smørgrav# func_features 2154f61ef7f6SDag-Erling Smørgrav# ------------- 2155b7579f77SDag-Erling Smørgrav# Display the features supported by this script. 2156b7579f77SDag-Erling Smørgravfunc_features () 2157b7579f77SDag-Erling Smørgrav{ 2158b7579f77SDag-Erling Smørgrav echo "host: $host" 2159f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs"; then 2160b7579f77SDag-Erling Smørgrav echo "enable shared libraries" 2161b7579f77SDag-Erling Smørgrav else 2162b7579f77SDag-Erling Smørgrav echo "disable shared libraries" 2163b7579f77SDag-Erling Smørgrav fi 2164f61ef7f6SDag-Erling Smørgrav if test yes = "$build_old_libs"; then 2165b7579f77SDag-Erling Smørgrav echo "enable static libraries" 2166b7579f77SDag-Erling Smørgrav else 2167b7579f77SDag-Erling Smørgrav echo "disable static libraries" 2168b7579f77SDag-Erling Smørgrav fi 2169b7579f77SDag-Erling Smørgrav 2170b7579f77SDag-Erling Smørgrav exit $? 2171b7579f77SDag-Erling Smørgrav} 2172b7579f77SDag-Erling Smørgrav 2173f61ef7f6SDag-Erling Smørgrav 2174f61ef7f6SDag-Erling Smørgrav# func_enable_tag TAGNAME 2175f61ef7f6SDag-Erling Smørgrav# ----------------------- 2176b7579f77SDag-Erling Smørgrav# Verify that TAGNAME is valid, and either flag an error and exit, or 2177b7579f77SDag-Erling Smørgrav# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 2178b7579f77SDag-Erling Smørgrav# variable here. 2179b7579f77SDag-Erling Smørgravfunc_enable_tag () 2180b7579f77SDag-Erling Smørgrav{ 2181b7579f77SDag-Erling Smørgrav # Global variable: 2182f61ef7f6SDag-Erling Smørgrav tagname=$1 2183b7579f77SDag-Erling Smørgrav 2184b7579f77SDag-Erling Smørgrav re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 2185b7579f77SDag-Erling Smørgrav re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 2186f61ef7f6SDag-Erling Smørgrav sed_extractcf=/$re_begincf/,/$re_endcf/p 2187b7579f77SDag-Erling Smørgrav 2188b7579f77SDag-Erling Smørgrav # Validate tagname. 2189b7579f77SDag-Erling Smørgrav case $tagname in 2190b7579f77SDag-Erling Smørgrav *[!-_A-Za-z0-9,/]*) 2191b7579f77SDag-Erling Smørgrav func_fatal_error "invalid tag name: $tagname" 2192b7579f77SDag-Erling Smørgrav ;; 2193b7579f77SDag-Erling Smørgrav esac 2194b7579f77SDag-Erling Smørgrav 2195b7579f77SDag-Erling Smørgrav # Don't test for the "default" C tag, as we know it's 2196b7579f77SDag-Erling Smørgrav # there but not specially marked. 2197b7579f77SDag-Erling Smørgrav case $tagname in 2198b7579f77SDag-Erling Smørgrav CC) ;; 2199b7579f77SDag-Erling Smørgrav *) 2200b7579f77SDag-Erling Smørgrav if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 2201b7579f77SDag-Erling Smørgrav taglist="$taglist $tagname" 2202b7579f77SDag-Erling Smørgrav 2203b7579f77SDag-Erling Smørgrav # Evaluate the configuration. Be careful to quote the path 2204b7579f77SDag-Erling Smørgrav # and the sed script, to avoid splitting on whitespace, but 2205b7579f77SDag-Erling Smørgrav # also don't use non-portable quotes within backquotes within 2206b7579f77SDag-Erling Smørgrav # quotes we have to do it in 2 steps: 2207b7579f77SDag-Erling Smørgrav extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 2208b7579f77SDag-Erling Smørgrav eval "$extractedcf" 2209b7579f77SDag-Erling Smørgrav else 2210b7579f77SDag-Erling Smørgrav func_error "ignoring unknown tag $tagname" 2211b7579f77SDag-Erling Smørgrav fi 2212b7579f77SDag-Erling Smørgrav ;; 2213b7579f77SDag-Erling Smørgrav esac 2214b7579f77SDag-Erling Smørgrav} 2215b7579f77SDag-Erling Smørgrav 2216f61ef7f6SDag-Erling Smørgrav 2217b7579f77SDag-Erling Smørgrav# func_check_version_match 2218f61ef7f6SDag-Erling Smørgrav# ------------------------ 2219b7579f77SDag-Erling Smørgrav# Ensure that we are using m4 macros, and libtool script from the same 2220b7579f77SDag-Erling Smørgrav# release of libtool. 2221b7579f77SDag-Erling Smørgravfunc_check_version_match () 2222b7579f77SDag-Erling Smørgrav{ 2223b7579f77SDag-Erling Smørgrav if test "$package_revision" != "$macro_revision"; then 2224b7579f77SDag-Erling Smørgrav if test "$VERSION" != "$macro_version"; then 2225b7579f77SDag-Erling Smørgrav if test -z "$macro_version"; then 2226b7579f77SDag-Erling Smørgrav cat >&2 <<_LT_EOF 2227b7579f77SDag-Erling Smørgrav$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2228b7579f77SDag-Erling Smørgrav$progname: definition of this LT_INIT comes from an older release. 2229b7579f77SDag-Erling Smørgrav$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2230b7579f77SDag-Erling Smørgrav$progname: and run autoconf again. 2231b7579f77SDag-Erling Smørgrav_LT_EOF 2232b7579f77SDag-Erling Smørgrav else 2233b7579f77SDag-Erling Smørgrav cat >&2 <<_LT_EOF 2234b7579f77SDag-Erling Smørgrav$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 2235b7579f77SDag-Erling Smørgrav$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 2236b7579f77SDag-Erling Smørgrav$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 2237b7579f77SDag-Erling Smørgrav$progname: and run autoconf again. 2238b7579f77SDag-Erling Smørgrav_LT_EOF 2239b7579f77SDag-Erling Smørgrav fi 2240b7579f77SDag-Erling Smørgrav else 2241b7579f77SDag-Erling Smørgrav cat >&2 <<_LT_EOF 2242b7579f77SDag-Erling Smørgrav$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 2243b7579f77SDag-Erling Smørgrav$progname: but the definition of this LT_INIT comes from revision $macro_revision. 2244b7579f77SDag-Erling Smørgrav$progname: You should recreate aclocal.m4 with macros from revision $package_revision 2245b7579f77SDag-Erling Smørgrav$progname: of $PACKAGE $VERSION and run autoconf again. 2246b7579f77SDag-Erling Smørgrav_LT_EOF 2247b7579f77SDag-Erling Smørgrav fi 2248b7579f77SDag-Erling Smørgrav 2249b7579f77SDag-Erling Smørgrav exit $EXIT_MISMATCH 2250b7579f77SDag-Erling Smørgrav fi 2251b7579f77SDag-Erling Smørgrav} 2252b7579f77SDag-Erling Smørgrav 2253b7579f77SDag-Erling Smørgrav 2254f61ef7f6SDag-Erling Smørgrav# libtool_options_prep [ARG]... 2255f61ef7f6SDag-Erling Smørgrav# ----------------------------- 2256f61ef7f6SDag-Erling Smørgrav# Preparation for options parsed by libtool. 2257f61ef7f6SDag-Erling Smørgravlibtool_options_prep () 2258f61ef7f6SDag-Erling Smørgrav{ 2259f61ef7f6SDag-Erling Smørgrav $debug_mode 2260f61ef7f6SDag-Erling Smørgrav 2261f61ef7f6SDag-Erling Smørgrav # Option defaults: 2262f61ef7f6SDag-Erling Smørgrav opt_config=false 2263f61ef7f6SDag-Erling Smørgrav opt_dlopen= 2264f61ef7f6SDag-Erling Smørgrav opt_dry_run=false 2265f61ef7f6SDag-Erling Smørgrav opt_help=false 2266f61ef7f6SDag-Erling Smørgrav opt_mode= 2267f61ef7f6SDag-Erling Smørgrav opt_preserve_dup_deps=false 2268f61ef7f6SDag-Erling Smørgrav opt_quiet=false 2269f61ef7f6SDag-Erling Smørgrav 2270f61ef7f6SDag-Erling Smørgrav nonopt= 2271f61ef7f6SDag-Erling Smørgrav preserve_args= 2272f61ef7f6SDag-Erling Smørgrav 2273b7579f77SDag-Erling Smørgrav # Shorthand for --mode=foo, only valid as the first argument 2274b7579f77SDag-Erling Smørgrav case $1 in 2275b7579f77SDag-Erling Smørgrav clean|clea|cle|cl) 2276b7579f77SDag-Erling Smørgrav shift; set dummy --mode clean ${1+"$@"}; shift 2277b7579f77SDag-Erling Smørgrav ;; 2278b7579f77SDag-Erling Smørgrav compile|compil|compi|comp|com|co|c) 2279b7579f77SDag-Erling Smørgrav shift; set dummy --mode compile ${1+"$@"}; shift 2280b7579f77SDag-Erling Smørgrav ;; 2281b7579f77SDag-Erling Smørgrav execute|execut|execu|exec|exe|ex|e) 2282b7579f77SDag-Erling Smørgrav shift; set dummy --mode execute ${1+"$@"}; shift 2283b7579f77SDag-Erling Smørgrav ;; 2284b7579f77SDag-Erling Smørgrav finish|finis|fini|fin|fi|f) 2285b7579f77SDag-Erling Smørgrav shift; set dummy --mode finish ${1+"$@"}; shift 2286b7579f77SDag-Erling Smørgrav ;; 2287b7579f77SDag-Erling Smørgrav install|instal|insta|inst|ins|in|i) 2288b7579f77SDag-Erling Smørgrav shift; set dummy --mode install ${1+"$@"}; shift 2289b7579f77SDag-Erling Smørgrav ;; 2290b7579f77SDag-Erling Smørgrav link|lin|li|l) 2291b7579f77SDag-Erling Smørgrav shift; set dummy --mode link ${1+"$@"}; shift 2292b7579f77SDag-Erling Smørgrav ;; 2293b7579f77SDag-Erling Smørgrav uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 2294b7579f77SDag-Erling Smørgrav shift; set dummy --mode uninstall ${1+"$@"}; shift 2295b7579f77SDag-Erling Smørgrav ;; 2296b7579f77SDag-Erling Smørgrav esac 2297b7579f77SDag-Erling Smørgrav 2298f61ef7f6SDag-Erling Smørgrav # Pass back the list of options. 2299*46d2f618SCy Schubert func_quote_for_eval ${1+"$@"} 2300*46d2f618SCy Schubert libtool_options_prep_result=$func_quote_for_eval_result 2301f61ef7f6SDag-Erling Smørgrav} 2302f61ef7f6SDag-Erling Smørgravfunc_add_hook func_options_prep libtool_options_prep 2303b7579f77SDag-Erling Smørgrav 2304b7579f77SDag-Erling Smørgrav 2305f61ef7f6SDag-Erling Smørgrav# libtool_parse_options [ARG]... 2306f61ef7f6SDag-Erling Smørgrav# --------------------------------- 2307f61ef7f6SDag-Erling Smørgrav# Provide handling for libtool specific options. 2308f61ef7f6SDag-Erling Smørgravlibtool_parse_options () 2309b7579f77SDag-Erling Smørgrav{ 2310f61ef7f6SDag-Erling Smørgrav $debug_cmd 2311f61ef7f6SDag-Erling Smørgrav 2312f61ef7f6SDag-Erling Smørgrav # Perform our own loop to consume as many options as possible in 2313f61ef7f6SDag-Erling Smørgrav # each iteration. 2314b7579f77SDag-Erling Smørgrav while test $# -gt 0; do 2315f61ef7f6SDag-Erling Smørgrav _G_opt=$1 2316b7579f77SDag-Erling Smørgrav shift 2317f61ef7f6SDag-Erling Smørgrav case $_G_opt in 2318b7579f77SDag-Erling Smørgrav --dry-run|--dryrun|-n) 2319b7579f77SDag-Erling Smørgrav opt_dry_run=: 2320b7579f77SDag-Erling Smørgrav ;; 2321f61ef7f6SDag-Erling Smørgrav 2322f61ef7f6SDag-Erling Smørgrav --config) func_config ;; 2323f61ef7f6SDag-Erling Smørgrav 2324b7579f77SDag-Erling Smørgrav --dlopen|-dlopen) 2325b7579f77SDag-Erling Smørgrav opt_dlopen="${opt_dlopen+$opt_dlopen 2326f61ef7f6SDag-Erling Smørgrav}$1" 2327b7579f77SDag-Erling Smørgrav shift 2328b7579f77SDag-Erling Smørgrav ;; 2329f61ef7f6SDag-Erling Smørgrav 2330b7579f77SDag-Erling Smørgrav --preserve-dup-deps) 2331f61ef7f6SDag-Erling Smørgrav opt_preserve_dup_deps=: ;; 2332f61ef7f6SDag-Erling Smørgrav 2333f61ef7f6SDag-Erling Smørgrav --features) func_features ;; 2334f61ef7f6SDag-Erling Smørgrav 2335f61ef7f6SDag-Erling Smørgrav --finish) set dummy --mode finish ${1+"$@"}; shift ;; 2336f61ef7f6SDag-Erling Smørgrav 2337f61ef7f6SDag-Erling Smørgrav --help) opt_help=: ;; 2338f61ef7f6SDag-Erling Smørgrav 2339f61ef7f6SDag-Erling Smørgrav --help-all) opt_help=': help-all' ;; 2340f61ef7f6SDag-Erling Smørgrav 2341f61ef7f6SDag-Erling Smørgrav --mode) test $# = 0 && func_missing_arg $_G_opt && break 2342f61ef7f6SDag-Erling Smørgrav opt_mode=$1 2343f61ef7f6SDag-Erling Smørgrav case $1 in 2344b7579f77SDag-Erling Smørgrav # Valid mode arguments: 2345b7579f77SDag-Erling Smørgrav clean|compile|execute|finish|install|link|relink|uninstall) ;; 2346b7579f77SDag-Erling Smørgrav 2347b7579f77SDag-Erling Smørgrav # Catch anything else as an error 2348f61ef7f6SDag-Erling Smørgrav *) func_error "invalid argument for $_G_opt" 2349b7579f77SDag-Erling Smørgrav exit_cmd=exit 2350b7579f77SDag-Erling Smørgrav break 2351b7579f77SDag-Erling Smørgrav ;; 2352b7579f77SDag-Erling Smørgrav esac 2353b7579f77SDag-Erling Smørgrav shift 2354b7579f77SDag-Erling Smørgrav ;; 2355f61ef7f6SDag-Erling Smørgrav 2356b7579f77SDag-Erling Smørgrav --no-silent|--no-quiet) 2357f61ef7f6SDag-Erling Smørgrav opt_quiet=false 2358f61ef7f6SDag-Erling Smørgrav func_append preserve_args " $_G_opt" 2359b7579f77SDag-Erling Smørgrav ;; 2360f61ef7f6SDag-Erling Smørgrav 2361f61ef7f6SDag-Erling Smørgrav --no-warnings|--no-warning|--no-warn) 23628ed2b524SDag-Erling Smørgrav opt_warning=false 2363f61ef7f6SDag-Erling Smørgrav func_append preserve_args " $_G_opt" 23648ed2b524SDag-Erling Smørgrav ;; 2365f61ef7f6SDag-Erling Smørgrav 2366b7579f77SDag-Erling Smørgrav --no-verbose) 2367b7579f77SDag-Erling Smørgrav opt_verbose=false 2368f61ef7f6SDag-Erling Smørgrav func_append preserve_args " $_G_opt" 2369b7579f77SDag-Erling Smørgrav ;; 2370f61ef7f6SDag-Erling Smørgrav 2371b7579f77SDag-Erling Smørgrav --silent|--quiet) 2372f61ef7f6SDag-Erling Smørgrav opt_quiet=: 2373b7579f77SDag-Erling Smørgrav opt_verbose=false 2374f61ef7f6SDag-Erling Smørgrav func_append preserve_args " $_G_opt" 2375b7579f77SDag-Erling Smørgrav ;; 2376f61ef7f6SDag-Erling Smørgrav 2377f61ef7f6SDag-Erling Smørgrav --tag) test $# = 0 && func_missing_arg $_G_opt && break 2378f61ef7f6SDag-Erling Smørgrav opt_tag=$1 2379f61ef7f6SDag-Erling Smørgrav func_append preserve_args " $_G_opt $1" 2380f61ef7f6SDag-Erling Smørgrav func_enable_tag "$1" 2381f61ef7f6SDag-Erling Smørgrav shift 2382f61ef7f6SDag-Erling Smørgrav ;; 2383f61ef7f6SDag-Erling Smørgrav 2384f61ef7f6SDag-Erling Smørgrav --verbose|-v) opt_quiet=false 2385b7579f77SDag-Erling Smørgrav opt_verbose=: 2386f61ef7f6SDag-Erling Smørgrav func_append preserve_args " $_G_opt" 2387b7579f77SDag-Erling Smørgrav ;; 2388b7579f77SDag-Erling Smørgrav 2389f61ef7f6SDag-Erling Smørgrav # An option not handled by this hook function: 2390*46d2f618SCy Schubert *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; 2391b7579f77SDag-Erling Smørgrav esac 2392b7579f77SDag-Erling Smørgrav done 2393b7579f77SDag-Erling Smørgrav 2394*46d2f618SCy Schubert 2395f61ef7f6SDag-Erling Smørgrav # save modified positional parameters for caller 2396*46d2f618SCy Schubert func_quote_for_eval ${1+"$@"} 2397*46d2f618SCy Schubert libtool_parse_options_result=$func_quote_for_eval_result 2398f61ef7f6SDag-Erling Smørgrav} 2399f61ef7f6SDag-Erling Smørgravfunc_add_hook func_parse_options libtool_parse_options 2400f61ef7f6SDag-Erling Smørgrav 2401f61ef7f6SDag-Erling Smørgrav 2402f61ef7f6SDag-Erling Smørgrav 2403f61ef7f6SDag-Erling Smørgrav# libtool_validate_options [ARG]... 2404f61ef7f6SDag-Erling Smørgrav# --------------------------------- 2405f61ef7f6SDag-Erling Smørgrav# Perform any sanity checks on option settings and/or unconsumed 2406f61ef7f6SDag-Erling Smørgrav# arguments. 2407f61ef7f6SDag-Erling Smørgravlibtool_validate_options () 2408f61ef7f6SDag-Erling Smørgrav{ 2409b7579f77SDag-Erling Smørgrav # save first non-option argument 2410f61ef7f6SDag-Erling Smørgrav if test 0 -lt $#; then 2411f61ef7f6SDag-Erling Smørgrav nonopt=$1 2412b7579f77SDag-Erling Smørgrav shift 2413b7579f77SDag-Erling Smørgrav fi 2414b7579f77SDag-Erling Smørgrav 2415b7579f77SDag-Erling Smørgrav # preserve --debug 2416f61ef7f6SDag-Erling Smørgrav test : = "$debug_cmd" || func_append preserve_args " --debug" 2417b7579f77SDag-Erling Smørgrav 2418*46d2f618SCy Schubert case $host in 2419*46d2f618SCy Schubert # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 2420*46d2f618SCy Schubert # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 2421*46d2f618SCy Schubert *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) 2422*46d2f618SCy Schubert # don't eliminate duplications in $postdeps and $predeps 2423b7579f77SDag-Erling Smørgrav opt_duplicate_compiler_generated_deps=: 2424*46d2f618SCy Schubert ;; 2425*46d2f618SCy Schubert *) 2426*46d2f618SCy Schubert opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 2427*46d2f618SCy Schubert ;; 2428*46d2f618SCy Schubert esac 2429b7579f77SDag-Erling Smørgrav 2430b7579f77SDag-Erling Smørgrav $opt_help || { 2431b7579f77SDag-Erling Smørgrav # Sanity checks first: 2432b7579f77SDag-Erling Smørgrav func_check_version_match 2433b7579f77SDag-Erling Smørgrav 2434f61ef7f6SDag-Erling Smørgrav test yes != "$build_libtool_libs" \ 2435f61ef7f6SDag-Erling Smørgrav && test yes != "$build_old_libs" \ 2436f61ef7f6SDag-Erling Smørgrav && func_fatal_configuration "not configured to build any kind of library" 2437b7579f77SDag-Erling Smørgrav 2438b7579f77SDag-Erling Smørgrav # Darwin sucks 2439b7579f77SDag-Erling Smørgrav eval std_shrext=\"$shrext_cmds\" 2440b7579f77SDag-Erling Smørgrav 2441b7579f77SDag-Erling Smørgrav # Only execute mode is allowed to have -dlopen flags. 2442f61ef7f6SDag-Erling Smørgrav if test -n "$opt_dlopen" && test execute != "$opt_mode"; then 2443f61ef7f6SDag-Erling Smørgrav func_error "unrecognized option '-dlopen'" 2444b7579f77SDag-Erling Smørgrav $ECHO "$help" 1>&2 2445b7579f77SDag-Erling Smørgrav exit $EXIT_FAILURE 2446b7579f77SDag-Erling Smørgrav fi 2447b7579f77SDag-Erling Smørgrav 2448b7579f77SDag-Erling Smørgrav # Change the help message to a mode-specific one. 2449f61ef7f6SDag-Erling Smørgrav generic_help=$help 2450f61ef7f6SDag-Erling Smørgrav help="Try '$progname --help --mode=$opt_mode' for more information." 2451b7579f77SDag-Erling Smørgrav } 2452b7579f77SDag-Erling Smørgrav 2453f61ef7f6SDag-Erling Smørgrav # Pass back the unparsed argument list 2454*46d2f618SCy Schubert func_quote_for_eval ${1+"$@"} 2455*46d2f618SCy Schubert libtool_validate_options_result=$func_quote_for_eval_result 2456b7579f77SDag-Erling Smørgrav} 2457f61ef7f6SDag-Erling Smørgravfunc_add_hook func_validate_options libtool_validate_options 2458b7579f77SDag-Erling Smørgrav 2459b7579f77SDag-Erling Smørgrav 2460f61ef7f6SDag-Erling Smørgrav# Process options as early as possible so that --help and --version 2461f61ef7f6SDag-Erling Smørgrav# can return quickly. 2462f61ef7f6SDag-Erling Smørgravfunc_options ${1+"$@"} 2463f61ef7f6SDag-Erling Smørgraveval set dummy "$func_options_result"; shift 2464f61ef7f6SDag-Erling Smørgrav 2465b7579f77SDag-Erling Smørgrav 2466b7579f77SDag-Erling Smørgrav 2467b7579f77SDag-Erling Smørgrav## ----------- ## 2468b7579f77SDag-Erling Smørgrav## Main. ## 2469b7579f77SDag-Erling Smørgrav## ----------- ## 2470b7579f77SDag-Erling Smørgrav 2471f61ef7f6SDag-Erling Smørgravmagic='%%%MAGIC variable%%%' 2472f61ef7f6SDag-Erling Smørgravmagic_exe='%%%MAGIC EXE variable%%%' 2473f61ef7f6SDag-Erling Smørgrav 2474f61ef7f6SDag-Erling Smørgrav# Global variables. 2475f61ef7f6SDag-Erling Smørgravextracted_archives= 2476f61ef7f6SDag-Erling Smørgravextracted_serial=0 2477f61ef7f6SDag-Erling Smørgrav 2478f61ef7f6SDag-Erling Smørgrav# If this variable is set in any of the actions, the command in it 2479f61ef7f6SDag-Erling Smørgrav# will be execed at the end. This prevents here-documents from being 2480f61ef7f6SDag-Erling Smørgrav# left over by shells. 2481f61ef7f6SDag-Erling Smørgravexec_cmd= 2482f61ef7f6SDag-Erling Smørgrav 2483f61ef7f6SDag-Erling Smørgrav 2484f61ef7f6SDag-Erling Smørgrav# A function that is used when there is no print builtin or printf. 2485f61ef7f6SDag-Erling Smørgravfunc_fallback_echo () 2486f61ef7f6SDag-Erling Smørgrav{ 2487f61ef7f6SDag-Erling Smørgrav eval 'cat <<_LTECHO_EOF 2488f61ef7f6SDag-Erling Smørgrav$1 2489f61ef7f6SDag-Erling Smørgrav_LTECHO_EOF' 2490f61ef7f6SDag-Erling Smørgrav} 2491f61ef7f6SDag-Erling Smørgrav 2492f61ef7f6SDag-Erling Smørgrav# func_generated_by_libtool 2493f61ef7f6SDag-Erling Smørgrav# True iff stdin has been generated by Libtool. This function is only 2494f61ef7f6SDag-Erling Smørgrav# a basic sanity check; it will hardly flush out determined imposters. 2495f61ef7f6SDag-Erling Smørgravfunc_generated_by_libtool_p () 2496f61ef7f6SDag-Erling Smørgrav{ 2497f61ef7f6SDag-Erling Smørgrav $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 2498f61ef7f6SDag-Erling Smørgrav} 2499f61ef7f6SDag-Erling Smørgrav 2500b7579f77SDag-Erling Smørgrav# func_lalib_p file 2501f61ef7f6SDag-Erling Smørgrav# True iff FILE is a libtool '.la' library or '.lo' object file. 2502b7579f77SDag-Erling Smørgrav# This function is only a basic sanity check; it will hardly flush out 2503b7579f77SDag-Erling Smørgrav# determined imposters. 2504b7579f77SDag-Erling Smørgravfunc_lalib_p () 2505b7579f77SDag-Erling Smørgrav{ 2506b7579f77SDag-Erling Smørgrav test -f "$1" && 2507f61ef7f6SDag-Erling Smørgrav $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p 2508b7579f77SDag-Erling Smørgrav} 2509b7579f77SDag-Erling Smørgrav 2510b7579f77SDag-Erling Smørgrav# func_lalib_unsafe_p file 2511f61ef7f6SDag-Erling Smørgrav# True iff FILE is a libtool '.la' library or '.lo' object file. 2512b7579f77SDag-Erling Smørgrav# This function implements the same check as func_lalib_p without 2513b7579f77SDag-Erling Smørgrav# resorting to external programs. To this end, it redirects stdin and 2514b7579f77SDag-Erling Smørgrav# closes it afterwards, without saving the original file descriptor. 2515b7579f77SDag-Erling Smørgrav# As a safety measure, use it only where a negative result would be 2516f61ef7f6SDag-Erling Smørgrav# fatal anyway. Works if 'file' does not exist. 2517b7579f77SDag-Erling Smørgravfunc_lalib_unsafe_p () 2518b7579f77SDag-Erling Smørgrav{ 2519b7579f77SDag-Erling Smørgrav lalib_p=no 2520b7579f77SDag-Erling Smørgrav if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 2521b7579f77SDag-Erling Smørgrav for lalib_p_l in 1 2 3 4 2522b7579f77SDag-Erling Smørgrav do 2523b7579f77SDag-Erling Smørgrav read lalib_p_line 2524f61ef7f6SDag-Erling Smørgrav case $lalib_p_line in 2525b7579f77SDag-Erling Smørgrav \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 2526b7579f77SDag-Erling Smørgrav esac 2527b7579f77SDag-Erling Smørgrav done 2528b7579f77SDag-Erling Smørgrav exec 0<&5 5<&- 2529b7579f77SDag-Erling Smørgrav fi 2530f61ef7f6SDag-Erling Smørgrav test yes = "$lalib_p" 2531b7579f77SDag-Erling Smørgrav} 2532b7579f77SDag-Erling Smørgrav 2533b7579f77SDag-Erling Smørgrav# func_ltwrapper_script_p file 2534b7579f77SDag-Erling Smørgrav# True iff FILE is a libtool wrapper script 2535b7579f77SDag-Erling Smørgrav# This function is only a basic sanity check; it will hardly flush out 2536b7579f77SDag-Erling Smørgrav# determined imposters. 2537b7579f77SDag-Erling Smørgravfunc_ltwrapper_script_p () 2538b7579f77SDag-Erling Smørgrav{ 2539f61ef7f6SDag-Erling Smørgrav test -f "$1" && 2540f61ef7f6SDag-Erling Smørgrav $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p 2541b7579f77SDag-Erling Smørgrav} 2542b7579f77SDag-Erling Smørgrav 2543b7579f77SDag-Erling Smørgrav# func_ltwrapper_executable_p file 2544b7579f77SDag-Erling Smørgrav# True iff FILE is a libtool wrapper executable 2545b7579f77SDag-Erling Smørgrav# This function is only a basic sanity check; it will hardly flush out 2546b7579f77SDag-Erling Smørgrav# determined imposters. 2547b7579f77SDag-Erling Smørgravfunc_ltwrapper_executable_p () 2548b7579f77SDag-Erling Smørgrav{ 2549b7579f77SDag-Erling Smørgrav func_ltwrapper_exec_suffix= 2550b7579f77SDag-Erling Smørgrav case $1 in 2551b7579f77SDag-Erling Smørgrav *.exe) ;; 2552b7579f77SDag-Erling Smørgrav *) func_ltwrapper_exec_suffix=.exe ;; 2553b7579f77SDag-Erling Smørgrav esac 2554b7579f77SDag-Erling Smørgrav $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 2555b7579f77SDag-Erling Smørgrav} 2556b7579f77SDag-Erling Smørgrav 2557b7579f77SDag-Erling Smørgrav# func_ltwrapper_scriptname file 2558b7579f77SDag-Erling Smørgrav# Assumes file is an ltwrapper_executable 2559b7579f77SDag-Erling Smørgrav# uses $file to determine the appropriate filename for a 2560b7579f77SDag-Erling Smørgrav# temporary ltwrapper_script. 2561b7579f77SDag-Erling Smørgravfunc_ltwrapper_scriptname () 2562b7579f77SDag-Erling Smørgrav{ 2563b7579f77SDag-Erling Smørgrav func_dirname_and_basename "$1" "" "." 2564b7579f77SDag-Erling Smørgrav func_stripname '' '.exe' "$func_basename_result" 2565f61ef7f6SDag-Erling Smørgrav func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper 2566b7579f77SDag-Erling Smørgrav} 2567b7579f77SDag-Erling Smørgrav 2568b7579f77SDag-Erling Smørgrav# func_ltwrapper_p file 2569b7579f77SDag-Erling Smørgrav# True iff FILE is a libtool wrapper script or wrapper executable 2570b7579f77SDag-Erling Smørgrav# This function is only a basic sanity check; it will hardly flush out 2571b7579f77SDag-Erling Smørgrav# determined imposters. 2572b7579f77SDag-Erling Smørgravfunc_ltwrapper_p () 2573b7579f77SDag-Erling Smørgrav{ 2574b7579f77SDag-Erling Smørgrav func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 2575b7579f77SDag-Erling Smørgrav} 2576b7579f77SDag-Erling Smørgrav 2577b7579f77SDag-Erling Smørgrav 2578b7579f77SDag-Erling Smørgrav# func_execute_cmds commands fail_cmd 2579b7579f77SDag-Erling Smørgrav# Execute tilde-delimited COMMANDS. 2580b7579f77SDag-Erling Smørgrav# If FAIL_CMD is given, eval that upon failure. 2581b7579f77SDag-Erling Smørgrav# FAIL_CMD may read-access the current command in variable CMD! 2582b7579f77SDag-Erling Smørgravfunc_execute_cmds () 2583b7579f77SDag-Erling Smørgrav{ 2584f61ef7f6SDag-Erling Smørgrav $debug_cmd 2585f61ef7f6SDag-Erling Smørgrav 2586b7579f77SDag-Erling Smørgrav save_ifs=$IFS; IFS='~' 2587b7579f77SDag-Erling Smørgrav for cmd in $1; do 2588f61ef7f6SDag-Erling Smørgrav IFS=$sp$nl 2589b7579f77SDag-Erling Smørgrav eval cmd=\"$cmd\" 2590f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 2591b7579f77SDag-Erling Smørgrav func_show_eval "$cmd" "${2-:}" 2592b7579f77SDag-Erling Smørgrav done 2593b7579f77SDag-Erling Smørgrav IFS=$save_ifs 2594b7579f77SDag-Erling Smørgrav} 2595b7579f77SDag-Erling Smørgrav 2596b7579f77SDag-Erling Smørgrav 2597b7579f77SDag-Erling Smørgrav# func_source file 2598b7579f77SDag-Erling Smørgrav# Source FILE, adding directory component if necessary. 2599b7579f77SDag-Erling Smørgrav# Note that it is not necessary on cygwin/mingw to append a dot to 2600b7579f77SDag-Erling Smørgrav# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 2601b7579f77SDag-Erling Smørgrav# behavior happens only for exec(3), not for open(2)! Also, sourcing 2602f61ef7f6SDag-Erling Smørgrav# 'FILE.' does not work on cygwin managed mounts. 2603b7579f77SDag-Erling Smørgravfunc_source () 2604b7579f77SDag-Erling Smørgrav{ 2605f61ef7f6SDag-Erling Smørgrav $debug_cmd 2606f61ef7f6SDag-Erling Smørgrav 2607b7579f77SDag-Erling Smørgrav case $1 in 2608b7579f77SDag-Erling Smørgrav */* | *\\*) . "$1" ;; 2609b7579f77SDag-Erling Smørgrav *) . "./$1" ;; 2610b7579f77SDag-Erling Smørgrav esac 2611b7579f77SDag-Erling Smørgrav} 2612b7579f77SDag-Erling Smørgrav 2613b7579f77SDag-Erling Smørgrav 2614b7579f77SDag-Erling Smørgrav# func_resolve_sysroot PATH 2615b7579f77SDag-Erling Smørgrav# Replace a leading = in PATH with a sysroot. Store the result into 2616b7579f77SDag-Erling Smørgrav# func_resolve_sysroot_result 2617b7579f77SDag-Erling Smørgravfunc_resolve_sysroot () 2618b7579f77SDag-Erling Smørgrav{ 2619b7579f77SDag-Erling Smørgrav func_resolve_sysroot_result=$1 2620b7579f77SDag-Erling Smørgrav case $func_resolve_sysroot_result in 2621b7579f77SDag-Erling Smørgrav =*) 2622b7579f77SDag-Erling Smørgrav func_stripname '=' '' "$func_resolve_sysroot_result" 2623b7579f77SDag-Erling Smørgrav func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 2624b7579f77SDag-Erling Smørgrav ;; 2625b7579f77SDag-Erling Smørgrav esac 2626b7579f77SDag-Erling Smørgrav} 2627b7579f77SDag-Erling Smørgrav 2628b7579f77SDag-Erling Smørgrav# func_replace_sysroot PATH 2629b7579f77SDag-Erling Smørgrav# If PATH begins with the sysroot, replace it with = and 2630b7579f77SDag-Erling Smørgrav# store the result into func_replace_sysroot_result. 2631b7579f77SDag-Erling Smørgravfunc_replace_sysroot () 2632b7579f77SDag-Erling Smørgrav{ 2633f61ef7f6SDag-Erling Smørgrav case $lt_sysroot:$1 in 2634b7579f77SDag-Erling Smørgrav ?*:"$lt_sysroot"*) 2635b7579f77SDag-Erling Smørgrav func_stripname "$lt_sysroot" '' "$1" 2636f61ef7f6SDag-Erling Smørgrav func_replace_sysroot_result='='$func_stripname_result 2637b7579f77SDag-Erling Smørgrav ;; 2638b7579f77SDag-Erling Smørgrav *) 2639b7579f77SDag-Erling Smørgrav # Including no sysroot. 2640b7579f77SDag-Erling Smørgrav func_replace_sysroot_result=$1 2641b7579f77SDag-Erling Smørgrav ;; 2642b7579f77SDag-Erling Smørgrav esac 2643b7579f77SDag-Erling Smørgrav} 2644b7579f77SDag-Erling Smørgrav 2645b7579f77SDag-Erling Smørgrav# func_infer_tag arg 2646b7579f77SDag-Erling Smørgrav# Infer tagged configuration to use if any are available and 2647b7579f77SDag-Erling Smørgrav# if one wasn't chosen via the "--tag" command line option. 2648b7579f77SDag-Erling Smørgrav# Only attempt this if the compiler in the base compile 2649b7579f77SDag-Erling Smørgrav# command doesn't match the default compiler. 2650b7579f77SDag-Erling Smørgrav# arg is usually of the form 'gcc ...' 2651b7579f77SDag-Erling Smørgravfunc_infer_tag () 2652b7579f77SDag-Erling Smørgrav{ 2653f61ef7f6SDag-Erling Smørgrav $debug_cmd 2654f61ef7f6SDag-Erling Smørgrav 2655b7579f77SDag-Erling Smørgrav if test -n "$available_tags" && test -z "$tagname"; then 2656b7579f77SDag-Erling Smørgrav CC_quoted= 2657b7579f77SDag-Erling Smørgrav for arg in $CC; do 2658b7579f77SDag-Erling Smørgrav func_append_quoted CC_quoted "$arg" 2659b7579f77SDag-Erling Smørgrav done 2660b7579f77SDag-Erling Smørgrav CC_expanded=`func_echo_all $CC` 2661b7579f77SDag-Erling Smørgrav CC_quoted_expanded=`func_echo_all $CC_quoted` 2662b7579f77SDag-Erling Smørgrav case $@ in 2663b7579f77SDag-Erling Smørgrav # Blanks in the command may have been stripped by the calling shell, 2664b7579f77SDag-Erling Smørgrav # but not from the CC environment variable when configure was run. 2665b7579f77SDag-Erling Smørgrav " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2666b7579f77SDag-Erling Smørgrav " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 2667b7579f77SDag-Erling Smørgrav # Blanks at the start of $base_compile will cause this to fail 2668b7579f77SDag-Erling Smørgrav # if we don't check for them as well. 2669b7579f77SDag-Erling Smørgrav *) 2670b7579f77SDag-Erling Smørgrav for z in $available_tags; do 2671b7579f77SDag-Erling Smørgrav if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 2672b7579f77SDag-Erling Smørgrav # Evaluate the configuration. 2673f61ef7f6SDag-Erling Smørgrav eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 2674b7579f77SDag-Erling Smørgrav CC_quoted= 2675b7579f77SDag-Erling Smørgrav for arg in $CC; do 2676b7579f77SDag-Erling Smørgrav # Double-quote args containing other shell metacharacters. 2677b7579f77SDag-Erling Smørgrav func_append_quoted CC_quoted "$arg" 2678b7579f77SDag-Erling Smørgrav done 2679b7579f77SDag-Erling Smørgrav CC_expanded=`func_echo_all $CC` 2680b7579f77SDag-Erling Smørgrav CC_quoted_expanded=`func_echo_all $CC_quoted` 2681b7579f77SDag-Erling Smørgrav case "$@ " in 2682b7579f77SDag-Erling Smørgrav " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 2683b7579f77SDag-Erling Smørgrav " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 2684b7579f77SDag-Erling Smørgrav # The compiler in the base compile command matches 2685b7579f77SDag-Erling Smørgrav # the one in the tagged configuration. 2686b7579f77SDag-Erling Smørgrav # Assume this is the tagged configuration we want. 2687b7579f77SDag-Erling Smørgrav tagname=$z 2688b7579f77SDag-Erling Smørgrav break 2689b7579f77SDag-Erling Smørgrav ;; 2690b7579f77SDag-Erling Smørgrav esac 2691b7579f77SDag-Erling Smørgrav fi 2692b7579f77SDag-Erling Smørgrav done 2693b7579f77SDag-Erling Smørgrav # If $tagname still isn't set, then no tagged configuration 2694b7579f77SDag-Erling Smørgrav # was found and let the user know that the "--tag" command 2695b7579f77SDag-Erling Smørgrav # line option must be used. 2696b7579f77SDag-Erling Smørgrav if test -z "$tagname"; then 2697b7579f77SDag-Erling Smørgrav func_echo "unable to infer tagged configuration" 2698f61ef7f6SDag-Erling Smørgrav func_fatal_error "specify a tag with '--tag'" 2699b7579f77SDag-Erling Smørgrav# else 2700b7579f77SDag-Erling Smørgrav# func_verbose "using $tagname tagged configuration" 2701b7579f77SDag-Erling Smørgrav fi 2702b7579f77SDag-Erling Smørgrav ;; 2703b7579f77SDag-Erling Smørgrav esac 2704b7579f77SDag-Erling Smørgrav fi 2705b7579f77SDag-Erling Smørgrav} 2706b7579f77SDag-Erling Smørgrav 2707b7579f77SDag-Erling Smørgrav 2708b7579f77SDag-Erling Smørgrav 2709b7579f77SDag-Erling Smørgrav# func_write_libtool_object output_name pic_name nonpic_name 2710b7579f77SDag-Erling Smørgrav# Create a libtool object file (analogous to a ".la" file), 2711b7579f77SDag-Erling Smørgrav# but don't create it if we're doing a dry run. 2712b7579f77SDag-Erling Smørgravfunc_write_libtool_object () 2713b7579f77SDag-Erling Smørgrav{ 2714f61ef7f6SDag-Erling Smørgrav write_libobj=$1 2715f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs"; then 2716f61ef7f6SDag-Erling Smørgrav write_lobj=\'$2\' 2717b7579f77SDag-Erling Smørgrav else 2718b7579f77SDag-Erling Smørgrav write_lobj=none 2719b7579f77SDag-Erling Smørgrav fi 2720b7579f77SDag-Erling Smørgrav 2721f61ef7f6SDag-Erling Smørgrav if test yes = "$build_old_libs"; then 2722f61ef7f6SDag-Erling Smørgrav write_oldobj=\'$3\' 2723b7579f77SDag-Erling Smørgrav else 2724b7579f77SDag-Erling Smørgrav write_oldobj=none 2725b7579f77SDag-Erling Smørgrav fi 2726b7579f77SDag-Erling Smørgrav 2727b7579f77SDag-Erling Smørgrav $opt_dry_run || { 2728b7579f77SDag-Erling Smørgrav cat >${write_libobj}T <<EOF 2729b7579f77SDag-Erling Smørgrav# $write_libobj - a libtool object file 2730f61ef7f6SDag-Erling Smørgrav# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 2731b7579f77SDag-Erling Smørgrav# 2732b7579f77SDag-Erling Smørgrav# Please DO NOT delete this file! 2733b7579f77SDag-Erling Smørgrav# It is necessary for linking the library. 2734b7579f77SDag-Erling Smørgrav 2735b7579f77SDag-Erling Smørgrav# Name of the PIC object. 2736b7579f77SDag-Erling Smørgravpic_object=$write_lobj 2737b7579f77SDag-Erling Smørgrav 2738b7579f77SDag-Erling Smørgrav# Name of the non-PIC object 2739b7579f77SDag-Erling Smørgravnon_pic_object=$write_oldobj 2740b7579f77SDag-Erling Smørgrav 2741b7579f77SDag-Erling SmørgravEOF 2742f61ef7f6SDag-Erling Smørgrav $MV "${write_libobj}T" "$write_libobj" 2743b7579f77SDag-Erling Smørgrav } 2744b7579f77SDag-Erling Smørgrav} 2745b7579f77SDag-Erling Smørgrav 2746b7579f77SDag-Erling Smørgrav 2747b7579f77SDag-Erling Smørgrav################################################## 2748b7579f77SDag-Erling Smørgrav# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 2749b7579f77SDag-Erling Smørgrav################################################## 2750b7579f77SDag-Erling Smørgrav 2751b7579f77SDag-Erling Smørgrav# func_convert_core_file_wine_to_w32 ARG 2752b7579f77SDag-Erling Smørgrav# Helper function used by file name conversion functions when $build is *nix, 2753b7579f77SDag-Erling Smørgrav# and $host is mingw, cygwin, or some other w32 environment. Relies on a 2754b7579f77SDag-Erling Smørgrav# correctly configured wine environment available, with the winepath program 2755b7579f77SDag-Erling Smørgrav# in $build's $PATH. 2756b7579f77SDag-Erling Smørgrav# 2757b7579f77SDag-Erling Smørgrav# ARG is the $build file name to be converted to w32 format. 2758b7579f77SDag-Erling Smørgrav# Result is available in $func_convert_core_file_wine_to_w32_result, and will 2759b7579f77SDag-Erling Smørgrav# be empty on error (or when ARG is empty) 2760b7579f77SDag-Erling Smørgravfunc_convert_core_file_wine_to_w32 () 2761b7579f77SDag-Erling Smørgrav{ 2762f61ef7f6SDag-Erling Smørgrav $debug_cmd 2763f61ef7f6SDag-Erling Smørgrav 2764f61ef7f6SDag-Erling Smørgrav func_convert_core_file_wine_to_w32_result=$1 2765b7579f77SDag-Erling Smørgrav if test -n "$1"; then 2766b7579f77SDag-Erling Smørgrav # Unfortunately, winepath does not exit with a non-zero error code, so we 2767b7579f77SDag-Erling Smørgrav # are forced to check the contents of stdout. On the other hand, if the 2768b7579f77SDag-Erling Smørgrav # command is not found, the shell will set an exit code of 127 and print 2769b7579f77SDag-Erling Smørgrav # *an error message* to stdout. So we must check for both error code of 2770b7579f77SDag-Erling Smørgrav # zero AND non-empty stdout, which explains the odd construction: 2771b7579f77SDag-Erling Smørgrav func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 2772f61ef7f6SDag-Erling Smørgrav if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then 2773b7579f77SDag-Erling Smørgrav func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 2774f61ef7f6SDag-Erling Smørgrav $SED -e "$sed_naive_backslashify"` 2775b7579f77SDag-Erling Smørgrav else 2776b7579f77SDag-Erling Smørgrav func_convert_core_file_wine_to_w32_result= 2777b7579f77SDag-Erling Smørgrav fi 2778b7579f77SDag-Erling Smørgrav fi 2779b7579f77SDag-Erling Smørgrav} 2780b7579f77SDag-Erling Smørgrav# end: func_convert_core_file_wine_to_w32 2781b7579f77SDag-Erling Smørgrav 2782b7579f77SDag-Erling Smørgrav 2783b7579f77SDag-Erling Smørgrav# func_convert_core_path_wine_to_w32 ARG 2784b7579f77SDag-Erling Smørgrav# Helper function used by path conversion functions when $build is *nix, and 2785b7579f77SDag-Erling Smørgrav# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 2786b7579f77SDag-Erling Smørgrav# configured wine environment available, with the winepath program in $build's 2787b7579f77SDag-Erling Smørgrav# $PATH. Assumes ARG has no leading or trailing path separator characters. 2788b7579f77SDag-Erling Smørgrav# 2789b7579f77SDag-Erling Smørgrav# ARG is path to be converted from $build format to win32. 2790b7579f77SDag-Erling Smørgrav# Result is available in $func_convert_core_path_wine_to_w32_result. 2791b7579f77SDag-Erling Smørgrav# Unconvertible file (directory) names in ARG are skipped; if no directory names 2792b7579f77SDag-Erling Smørgrav# are convertible, then the result may be empty. 2793b7579f77SDag-Erling Smørgravfunc_convert_core_path_wine_to_w32 () 2794b7579f77SDag-Erling Smørgrav{ 2795f61ef7f6SDag-Erling Smørgrav $debug_cmd 2796f61ef7f6SDag-Erling Smørgrav 2797b7579f77SDag-Erling Smørgrav # unfortunately, winepath doesn't convert paths, only file names 2798f61ef7f6SDag-Erling Smørgrav func_convert_core_path_wine_to_w32_result= 2799b7579f77SDag-Erling Smørgrav if test -n "$1"; then 2800b7579f77SDag-Erling Smørgrav oldIFS=$IFS 2801b7579f77SDag-Erling Smørgrav IFS=: 2802b7579f77SDag-Erling Smørgrav for func_convert_core_path_wine_to_w32_f in $1; do 2803b7579f77SDag-Erling Smørgrav IFS=$oldIFS 2804b7579f77SDag-Erling Smørgrav func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 2805b7579f77SDag-Erling Smørgrav if test -n "$func_convert_core_file_wine_to_w32_result"; then 2806b7579f77SDag-Erling Smørgrav if test -z "$func_convert_core_path_wine_to_w32_result"; then 2807f61ef7f6SDag-Erling Smørgrav func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result 2808b7579f77SDag-Erling Smørgrav else 2809b7579f77SDag-Erling Smørgrav func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 2810b7579f77SDag-Erling Smørgrav fi 2811b7579f77SDag-Erling Smørgrav fi 2812b7579f77SDag-Erling Smørgrav done 2813b7579f77SDag-Erling Smørgrav IFS=$oldIFS 2814b7579f77SDag-Erling Smørgrav fi 2815b7579f77SDag-Erling Smørgrav} 2816b7579f77SDag-Erling Smørgrav# end: func_convert_core_path_wine_to_w32 2817b7579f77SDag-Erling Smørgrav 2818b7579f77SDag-Erling Smørgrav 2819b7579f77SDag-Erling Smørgrav# func_cygpath ARGS... 2820b7579f77SDag-Erling Smørgrav# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 2821b7579f77SDag-Erling Smørgrav# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 2822b7579f77SDag-Erling Smørgrav# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 2823b7579f77SDag-Erling Smørgrav# (2), returns the Cygwin file name or path in func_cygpath_result (input 2824b7579f77SDag-Erling Smørgrav# file name or path is assumed to be in w32 format, as previously converted 2825b7579f77SDag-Erling Smørgrav# from $build's *nix or MSYS format). In case (3), returns the w32 file name 2826b7579f77SDag-Erling Smørgrav# or path in func_cygpath_result (input file name or path is assumed to be in 2827b7579f77SDag-Erling Smørgrav# Cygwin format). Returns an empty string on error. 2828b7579f77SDag-Erling Smørgrav# 2829b7579f77SDag-Erling Smørgrav# ARGS are passed to cygpath, with the last one being the file name or path to 2830b7579f77SDag-Erling Smørgrav# be converted. 2831b7579f77SDag-Erling Smørgrav# 2832b7579f77SDag-Erling Smørgrav# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 2833b7579f77SDag-Erling Smørgrav# environment variable; do not put it in $PATH. 2834b7579f77SDag-Erling Smørgravfunc_cygpath () 2835b7579f77SDag-Erling Smørgrav{ 2836f61ef7f6SDag-Erling Smørgrav $debug_cmd 2837f61ef7f6SDag-Erling Smørgrav 2838b7579f77SDag-Erling Smørgrav if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 2839b7579f77SDag-Erling Smørgrav func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 2840b7579f77SDag-Erling Smørgrav if test "$?" -ne 0; then 2841b7579f77SDag-Erling Smørgrav # on failure, ensure result is empty 2842b7579f77SDag-Erling Smørgrav func_cygpath_result= 2843b7579f77SDag-Erling Smørgrav fi 2844b7579f77SDag-Erling Smørgrav else 2845b7579f77SDag-Erling Smørgrav func_cygpath_result= 2846f61ef7f6SDag-Erling Smørgrav func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" 2847b7579f77SDag-Erling Smørgrav fi 2848b7579f77SDag-Erling Smørgrav} 2849b7579f77SDag-Erling Smørgrav#end: func_cygpath 2850b7579f77SDag-Erling Smørgrav 2851b7579f77SDag-Erling Smørgrav 2852b7579f77SDag-Erling Smørgrav# func_convert_core_msys_to_w32 ARG 2853b7579f77SDag-Erling Smørgrav# Convert file name or path ARG from MSYS format to w32 format. Return 2854b7579f77SDag-Erling Smørgrav# result in func_convert_core_msys_to_w32_result. 2855b7579f77SDag-Erling Smørgravfunc_convert_core_msys_to_w32 () 2856b7579f77SDag-Erling Smørgrav{ 2857f61ef7f6SDag-Erling Smørgrav $debug_cmd 2858f61ef7f6SDag-Erling Smørgrav 2859b7579f77SDag-Erling Smørgrav # awkward: cmd appends spaces to result 2860b7579f77SDag-Erling Smørgrav func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 2861f61ef7f6SDag-Erling Smørgrav $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` 2862b7579f77SDag-Erling Smørgrav} 2863b7579f77SDag-Erling Smørgrav#end: func_convert_core_msys_to_w32 2864b7579f77SDag-Erling Smørgrav 2865b7579f77SDag-Erling Smørgrav 2866b7579f77SDag-Erling Smørgrav# func_convert_file_check ARG1 ARG2 2867b7579f77SDag-Erling Smørgrav# Verify that ARG1 (a file name in $build format) was converted to $host 2868b7579f77SDag-Erling Smørgrav# format in ARG2. Otherwise, emit an error message, but continue (resetting 2869b7579f77SDag-Erling Smørgrav# func_to_host_file_result to ARG1). 2870b7579f77SDag-Erling Smørgravfunc_convert_file_check () 2871b7579f77SDag-Erling Smørgrav{ 2872f61ef7f6SDag-Erling Smørgrav $debug_cmd 2873f61ef7f6SDag-Erling Smørgrav 2874b7579f77SDag-Erling Smørgrav if test -z "$2" && test -n "$1"; then 2875b7579f77SDag-Erling Smørgrav func_error "Could not determine host file name corresponding to" 2876f61ef7f6SDag-Erling Smørgrav func_error " '$1'" 2877b7579f77SDag-Erling Smørgrav func_error "Continuing, but uninstalled executables may not work." 2878b7579f77SDag-Erling Smørgrav # Fallback: 2879f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$1 2880b7579f77SDag-Erling Smørgrav fi 2881b7579f77SDag-Erling Smørgrav} 2882b7579f77SDag-Erling Smørgrav# end func_convert_file_check 2883b7579f77SDag-Erling Smørgrav 2884b7579f77SDag-Erling Smørgrav 2885b7579f77SDag-Erling Smørgrav# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 2886b7579f77SDag-Erling Smørgrav# Verify that FROM_PATH (a path in $build format) was converted to $host 2887b7579f77SDag-Erling Smørgrav# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 2888b7579f77SDag-Erling Smørgrav# func_to_host_file_result to a simplistic fallback value (see below). 2889b7579f77SDag-Erling Smørgravfunc_convert_path_check () 2890b7579f77SDag-Erling Smørgrav{ 2891f61ef7f6SDag-Erling Smørgrav $debug_cmd 2892f61ef7f6SDag-Erling Smørgrav 2893b7579f77SDag-Erling Smørgrav if test -z "$4" && test -n "$3"; then 2894b7579f77SDag-Erling Smørgrav func_error "Could not determine the host path corresponding to" 2895f61ef7f6SDag-Erling Smørgrav func_error " '$3'" 2896b7579f77SDag-Erling Smørgrav func_error "Continuing, but uninstalled executables may not work." 2897b7579f77SDag-Erling Smørgrav # Fallback. This is a deliberately simplistic "conversion" and 2898b7579f77SDag-Erling Smørgrav # should not be "improved". See libtool.info. 2899b7579f77SDag-Erling Smørgrav if test "x$1" != "x$2"; then 2900b7579f77SDag-Erling Smørgrav lt_replace_pathsep_chars="s|$1|$2|g" 2901b7579f77SDag-Erling Smørgrav func_to_host_path_result=`echo "$3" | 2902b7579f77SDag-Erling Smørgrav $SED -e "$lt_replace_pathsep_chars"` 2903b7579f77SDag-Erling Smørgrav else 2904f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$3 2905b7579f77SDag-Erling Smørgrav fi 2906b7579f77SDag-Erling Smørgrav fi 2907b7579f77SDag-Erling Smørgrav} 2908b7579f77SDag-Erling Smørgrav# end func_convert_path_check 2909b7579f77SDag-Erling Smørgrav 2910b7579f77SDag-Erling Smørgrav 2911b7579f77SDag-Erling Smørgrav# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 2912b7579f77SDag-Erling Smørgrav# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 2913b7579f77SDag-Erling Smørgrav# and appending REPL if ORIG matches BACKPAT. 2914b7579f77SDag-Erling Smørgravfunc_convert_path_front_back_pathsep () 2915b7579f77SDag-Erling Smørgrav{ 2916f61ef7f6SDag-Erling Smørgrav $debug_cmd 2917f61ef7f6SDag-Erling Smørgrav 2918b7579f77SDag-Erling Smørgrav case $4 in 2919f61ef7f6SDag-Erling Smørgrav $1 ) func_to_host_path_result=$3$func_to_host_path_result 2920b7579f77SDag-Erling Smørgrav ;; 2921b7579f77SDag-Erling Smørgrav esac 2922b7579f77SDag-Erling Smørgrav case $4 in 2923b7579f77SDag-Erling Smørgrav $2 ) func_append func_to_host_path_result "$3" 2924b7579f77SDag-Erling Smørgrav ;; 2925b7579f77SDag-Erling Smørgrav esac 2926b7579f77SDag-Erling Smørgrav} 2927b7579f77SDag-Erling Smørgrav# end func_convert_path_front_back_pathsep 2928b7579f77SDag-Erling Smørgrav 2929b7579f77SDag-Erling Smørgrav 2930b7579f77SDag-Erling Smørgrav################################################## 2931b7579f77SDag-Erling Smørgrav# $build to $host FILE NAME CONVERSION FUNCTIONS # 2932b7579f77SDag-Erling Smørgrav################################################## 2933f61ef7f6SDag-Erling Smørgrav# invoked via '$to_host_file_cmd ARG' 2934b7579f77SDag-Erling Smørgrav# 2935b7579f77SDag-Erling Smørgrav# In each case, ARG is the path to be converted from $build to $host format. 2936b7579f77SDag-Erling Smørgrav# Result will be available in $func_to_host_file_result. 2937b7579f77SDag-Erling Smørgrav 2938b7579f77SDag-Erling Smørgrav 2939b7579f77SDag-Erling Smørgrav# func_to_host_file ARG 2940b7579f77SDag-Erling Smørgrav# Converts the file name ARG from $build format to $host format. Return result 2941b7579f77SDag-Erling Smørgrav# in func_to_host_file_result. 2942b7579f77SDag-Erling Smørgravfunc_to_host_file () 2943b7579f77SDag-Erling Smørgrav{ 2944f61ef7f6SDag-Erling Smørgrav $debug_cmd 2945f61ef7f6SDag-Erling Smørgrav 2946b7579f77SDag-Erling Smørgrav $to_host_file_cmd "$1" 2947b7579f77SDag-Erling Smørgrav} 2948b7579f77SDag-Erling Smørgrav# end func_to_host_file 2949b7579f77SDag-Erling Smørgrav 2950b7579f77SDag-Erling Smørgrav 2951b7579f77SDag-Erling Smørgrav# func_to_tool_file ARG LAZY 2952b7579f77SDag-Erling Smørgrav# converts the file name ARG from $build format to toolchain format. Return 2953b7579f77SDag-Erling Smørgrav# result in func_to_tool_file_result. If the conversion in use is listed 2954b7579f77SDag-Erling Smørgrav# in (the comma separated) LAZY, no conversion takes place. 2955b7579f77SDag-Erling Smørgravfunc_to_tool_file () 2956b7579f77SDag-Erling Smørgrav{ 2957f61ef7f6SDag-Erling Smørgrav $debug_cmd 2958f61ef7f6SDag-Erling Smørgrav 2959b7579f77SDag-Erling Smørgrav case ,$2, in 2960b7579f77SDag-Erling Smørgrav *,"$to_tool_file_cmd",*) 2961b7579f77SDag-Erling Smørgrav func_to_tool_file_result=$1 2962b7579f77SDag-Erling Smørgrav ;; 2963b7579f77SDag-Erling Smørgrav *) 2964b7579f77SDag-Erling Smørgrav $to_tool_file_cmd "$1" 2965b7579f77SDag-Erling Smørgrav func_to_tool_file_result=$func_to_host_file_result 2966b7579f77SDag-Erling Smørgrav ;; 2967b7579f77SDag-Erling Smørgrav esac 2968b7579f77SDag-Erling Smørgrav} 2969b7579f77SDag-Erling Smørgrav# end func_to_tool_file 2970b7579f77SDag-Erling Smørgrav 2971b7579f77SDag-Erling Smørgrav 2972b7579f77SDag-Erling Smørgrav# func_convert_file_noop ARG 2973b7579f77SDag-Erling Smørgrav# Copy ARG to func_to_host_file_result. 2974b7579f77SDag-Erling Smørgravfunc_convert_file_noop () 2975b7579f77SDag-Erling Smørgrav{ 2976f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$1 2977b7579f77SDag-Erling Smørgrav} 2978b7579f77SDag-Erling Smørgrav# end func_convert_file_noop 2979b7579f77SDag-Erling Smørgrav 2980b7579f77SDag-Erling Smørgrav 2981b7579f77SDag-Erling Smørgrav# func_convert_file_msys_to_w32 ARG 2982b7579f77SDag-Erling Smørgrav# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 2983b7579f77SDag-Erling Smørgrav# conversion to w32 is not available inside the cwrapper. Returns result in 2984b7579f77SDag-Erling Smørgrav# func_to_host_file_result. 2985b7579f77SDag-Erling Smørgravfunc_convert_file_msys_to_w32 () 2986b7579f77SDag-Erling Smørgrav{ 2987f61ef7f6SDag-Erling Smørgrav $debug_cmd 2988f61ef7f6SDag-Erling Smørgrav 2989f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$1 2990b7579f77SDag-Erling Smørgrav if test -n "$1"; then 2991b7579f77SDag-Erling Smørgrav func_convert_core_msys_to_w32 "$1" 2992f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$func_convert_core_msys_to_w32_result 2993b7579f77SDag-Erling Smørgrav fi 2994b7579f77SDag-Erling Smørgrav func_convert_file_check "$1" "$func_to_host_file_result" 2995b7579f77SDag-Erling Smørgrav} 2996b7579f77SDag-Erling Smørgrav# end func_convert_file_msys_to_w32 2997b7579f77SDag-Erling Smørgrav 2998b7579f77SDag-Erling Smørgrav 2999b7579f77SDag-Erling Smørgrav# func_convert_file_cygwin_to_w32 ARG 3000b7579f77SDag-Erling Smørgrav# Convert file name ARG from Cygwin to w32 format. Returns result in 3001b7579f77SDag-Erling Smørgrav# func_to_host_file_result. 3002b7579f77SDag-Erling Smørgravfunc_convert_file_cygwin_to_w32 () 3003b7579f77SDag-Erling Smørgrav{ 3004f61ef7f6SDag-Erling Smørgrav $debug_cmd 3005f61ef7f6SDag-Erling Smørgrav 3006f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$1 3007b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3008b7579f77SDag-Erling Smørgrav # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 3009b7579f77SDag-Erling Smørgrav # LT_CYGPATH in this case. 3010b7579f77SDag-Erling Smørgrav func_to_host_file_result=`cygpath -m "$1"` 3011b7579f77SDag-Erling Smørgrav fi 3012b7579f77SDag-Erling Smørgrav func_convert_file_check "$1" "$func_to_host_file_result" 3013b7579f77SDag-Erling Smørgrav} 3014b7579f77SDag-Erling Smørgrav# end func_convert_file_cygwin_to_w32 3015b7579f77SDag-Erling Smørgrav 3016b7579f77SDag-Erling Smørgrav 3017b7579f77SDag-Erling Smørgrav# func_convert_file_nix_to_w32 ARG 3018b7579f77SDag-Erling Smørgrav# Convert file name ARG from *nix to w32 format. Requires a wine environment 3019b7579f77SDag-Erling Smørgrav# and a working winepath. Returns result in func_to_host_file_result. 3020b7579f77SDag-Erling Smørgravfunc_convert_file_nix_to_w32 () 3021b7579f77SDag-Erling Smørgrav{ 3022f61ef7f6SDag-Erling Smørgrav $debug_cmd 3023f61ef7f6SDag-Erling Smørgrav 3024f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$1 3025b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3026b7579f77SDag-Erling Smørgrav func_convert_core_file_wine_to_w32 "$1" 3027f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$func_convert_core_file_wine_to_w32_result 3028b7579f77SDag-Erling Smørgrav fi 3029b7579f77SDag-Erling Smørgrav func_convert_file_check "$1" "$func_to_host_file_result" 3030b7579f77SDag-Erling Smørgrav} 3031b7579f77SDag-Erling Smørgrav# end func_convert_file_nix_to_w32 3032b7579f77SDag-Erling Smørgrav 3033b7579f77SDag-Erling Smørgrav 3034b7579f77SDag-Erling Smørgrav# func_convert_file_msys_to_cygwin ARG 3035b7579f77SDag-Erling Smørgrav# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3036b7579f77SDag-Erling Smørgrav# Returns result in func_to_host_file_result. 3037b7579f77SDag-Erling Smørgravfunc_convert_file_msys_to_cygwin () 3038b7579f77SDag-Erling Smørgrav{ 3039f61ef7f6SDag-Erling Smørgrav $debug_cmd 3040f61ef7f6SDag-Erling Smørgrav 3041f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$1 3042b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3043b7579f77SDag-Erling Smørgrav func_convert_core_msys_to_w32 "$1" 3044b7579f77SDag-Erling Smørgrav func_cygpath -u "$func_convert_core_msys_to_w32_result" 3045f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$func_cygpath_result 3046b7579f77SDag-Erling Smørgrav fi 3047b7579f77SDag-Erling Smørgrav func_convert_file_check "$1" "$func_to_host_file_result" 3048b7579f77SDag-Erling Smørgrav} 3049b7579f77SDag-Erling Smørgrav# end func_convert_file_msys_to_cygwin 3050b7579f77SDag-Erling Smørgrav 3051b7579f77SDag-Erling Smørgrav 3052b7579f77SDag-Erling Smørgrav# func_convert_file_nix_to_cygwin ARG 3053b7579f77SDag-Erling Smørgrav# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 3054b7579f77SDag-Erling Smørgrav# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 3055b7579f77SDag-Erling Smørgrav# in func_to_host_file_result. 3056b7579f77SDag-Erling Smørgravfunc_convert_file_nix_to_cygwin () 3057b7579f77SDag-Erling Smørgrav{ 3058f61ef7f6SDag-Erling Smørgrav $debug_cmd 3059f61ef7f6SDag-Erling Smørgrav 3060f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$1 3061b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3062b7579f77SDag-Erling Smørgrav # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 3063b7579f77SDag-Erling Smørgrav func_convert_core_file_wine_to_w32 "$1" 3064b7579f77SDag-Erling Smørgrav func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 3065f61ef7f6SDag-Erling Smørgrav func_to_host_file_result=$func_cygpath_result 3066b7579f77SDag-Erling Smørgrav fi 3067b7579f77SDag-Erling Smørgrav func_convert_file_check "$1" "$func_to_host_file_result" 3068b7579f77SDag-Erling Smørgrav} 3069b7579f77SDag-Erling Smørgrav# end func_convert_file_nix_to_cygwin 3070b7579f77SDag-Erling Smørgrav 3071b7579f77SDag-Erling Smørgrav 3072b7579f77SDag-Erling Smørgrav############################################# 3073b7579f77SDag-Erling Smørgrav# $build to $host PATH CONVERSION FUNCTIONS # 3074b7579f77SDag-Erling Smørgrav############################################# 3075f61ef7f6SDag-Erling Smørgrav# invoked via '$to_host_path_cmd ARG' 3076b7579f77SDag-Erling Smørgrav# 3077b7579f77SDag-Erling Smørgrav# In each case, ARG is the path to be converted from $build to $host format. 3078b7579f77SDag-Erling Smørgrav# The result will be available in $func_to_host_path_result. 3079b7579f77SDag-Erling Smørgrav# 3080b7579f77SDag-Erling Smørgrav# Path separators are also converted from $build format to $host format. If 3081b7579f77SDag-Erling Smørgrav# ARG begins or ends with a path separator character, it is preserved (but 3082b7579f77SDag-Erling Smørgrav# converted to $host format) on output. 3083b7579f77SDag-Erling Smørgrav# 3084b7579f77SDag-Erling Smørgrav# All path conversion functions are named using the following convention: 3085b7579f77SDag-Erling Smørgrav# file name conversion function : func_convert_file_X_to_Y () 3086b7579f77SDag-Erling Smørgrav# path conversion function : func_convert_path_X_to_Y () 3087b7579f77SDag-Erling Smørgrav# where, for any given $build/$host combination the 'X_to_Y' value is the 3088b7579f77SDag-Erling Smørgrav# same. If conversion functions are added for new $build/$host combinations, 3089b7579f77SDag-Erling Smørgrav# the two new functions must follow this pattern, or func_init_to_host_path_cmd 3090b7579f77SDag-Erling Smørgrav# will break. 3091b7579f77SDag-Erling Smørgrav 3092b7579f77SDag-Erling Smørgrav 3093b7579f77SDag-Erling Smørgrav# func_init_to_host_path_cmd 3094b7579f77SDag-Erling Smørgrav# Ensures that function "pointer" variable $to_host_path_cmd is set to the 3095b7579f77SDag-Erling Smørgrav# appropriate value, based on the value of $to_host_file_cmd. 3096b7579f77SDag-Erling Smørgravto_host_path_cmd= 3097b7579f77SDag-Erling Smørgravfunc_init_to_host_path_cmd () 3098b7579f77SDag-Erling Smørgrav{ 3099f61ef7f6SDag-Erling Smørgrav $debug_cmd 3100f61ef7f6SDag-Erling Smørgrav 3101b7579f77SDag-Erling Smørgrav if test -z "$to_host_path_cmd"; then 3102b7579f77SDag-Erling Smørgrav func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 3103f61ef7f6SDag-Erling Smørgrav to_host_path_cmd=func_convert_path_$func_stripname_result 3104b7579f77SDag-Erling Smørgrav fi 3105b7579f77SDag-Erling Smørgrav} 3106b7579f77SDag-Erling Smørgrav 3107b7579f77SDag-Erling Smørgrav 3108b7579f77SDag-Erling Smørgrav# func_to_host_path ARG 3109b7579f77SDag-Erling Smørgrav# Converts the path ARG from $build format to $host format. Return result 3110b7579f77SDag-Erling Smørgrav# in func_to_host_path_result. 3111b7579f77SDag-Erling Smørgravfunc_to_host_path () 3112b7579f77SDag-Erling Smørgrav{ 3113f61ef7f6SDag-Erling Smørgrav $debug_cmd 3114f61ef7f6SDag-Erling Smørgrav 3115b7579f77SDag-Erling Smørgrav func_init_to_host_path_cmd 3116b7579f77SDag-Erling Smørgrav $to_host_path_cmd "$1" 3117b7579f77SDag-Erling Smørgrav} 3118b7579f77SDag-Erling Smørgrav# end func_to_host_path 3119b7579f77SDag-Erling Smørgrav 3120b7579f77SDag-Erling Smørgrav 3121b7579f77SDag-Erling Smørgrav# func_convert_path_noop ARG 3122b7579f77SDag-Erling Smørgrav# Copy ARG to func_to_host_path_result. 3123b7579f77SDag-Erling Smørgravfunc_convert_path_noop () 3124b7579f77SDag-Erling Smørgrav{ 3125f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$1 3126b7579f77SDag-Erling Smørgrav} 3127b7579f77SDag-Erling Smørgrav# end func_convert_path_noop 3128b7579f77SDag-Erling Smørgrav 3129b7579f77SDag-Erling Smørgrav 3130b7579f77SDag-Erling Smørgrav# func_convert_path_msys_to_w32 ARG 3131b7579f77SDag-Erling Smørgrav# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 3132b7579f77SDag-Erling Smørgrav# conversion to w32 is not available inside the cwrapper. Returns result in 3133b7579f77SDag-Erling Smørgrav# func_to_host_path_result. 3134b7579f77SDag-Erling Smørgravfunc_convert_path_msys_to_w32 () 3135b7579f77SDag-Erling Smørgrav{ 3136f61ef7f6SDag-Erling Smørgrav $debug_cmd 3137f61ef7f6SDag-Erling Smørgrav 3138f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$1 3139b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3140b7579f77SDag-Erling Smørgrav # Remove leading and trailing path separator characters from ARG. MSYS 3141b7579f77SDag-Erling Smørgrav # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 3142b7579f77SDag-Erling Smørgrav # and winepath ignores them completely. 3143b7579f77SDag-Erling Smørgrav func_stripname : : "$1" 3144b7579f77SDag-Erling Smørgrav func_to_host_path_tmp1=$func_stripname_result 3145b7579f77SDag-Erling Smørgrav func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3146f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$func_convert_core_msys_to_w32_result 3147b7579f77SDag-Erling Smørgrav func_convert_path_check : ";" \ 3148b7579f77SDag-Erling Smørgrav "$func_to_host_path_tmp1" "$func_to_host_path_result" 3149b7579f77SDag-Erling Smørgrav func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3150b7579f77SDag-Erling Smørgrav fi 3151b7579f77SDag-Erling Smørgrav} 3152b7579f77SDag-Erling Smørgrav# end func_convert_path_msys_to_w32 3153b7579f77SDag-Erling Smørgrav 3154b7579f77SDag-Erling Smørgrav 3155b7579f77SDag-Erling Smørgrav# func_convert_path_cygwin_to_w32 ARG 3156b7579f77SDag-Erling Smørgrav# Convert path ARG from Cygwin to w32 format. Returns result in 3157b7579f77SDag-Erling Smørgrav# func_to_host_file_result. 3158b7579f77SDag-Erling Smørgravfunc_convert_path_cygwin_to_w32 () 3159b7579f77SDag-Erling Smørgrav{ 3160f61ef7f6SDag-Erling Smørgrav $debug_cmd 3161f61ef7f6SDag-Erling Smørgrav 3162f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$1 3163b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3164b7579f77SDag-Erling Smørgrav # See func_convert_path_msys_to_w32: 3165b7579f77SDag-Erling Smørgrav func_stripname : : "$1" 3166b7579f77SDag-Erling Smørgrav func_to_host_path_tmp1=$func_stripname_result 3167b7579f77SDag-Erling Smørgrav func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 3168b7579f77SDag-Erling Smørgrav func_convert_path_check : ";" \ 3169b7579f77SDag-Erling Smørgrav "$func_to_host_path_tmp1" "$func_to_host_path_result" 3170b7579f77SDag-Erling Smørgrav func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3171b7579f77SDag-Erling Smørgrav fi 3172b7579f77SDag-Erling Smørgrav} 3173b7579f77SDag-Erling Smørgrav# end func_convert_path_cygwin_to_w32 3174b7579f77SDag-Erling Smørgrav 3175b7579f77SDag-Erling Smørgrav 3176b7579f77SDag-Erling Smørgrav# func_convert_path_nix_to_w32 ARG 3177b7579f77SDag-Erling Smørgrav# Convert path ARG from *nix to w32 format. Requires a wine environment and 3178b7579f77SDag-Erling Smørgrav# a working winepath. Returns result in func_to_host_file_result. 3179b7579f77SDag-Erling Smørgravfunc_convert_path_nix_to_w32 () 3180b7579f77SDag-Erling Smørgrav{ 3181f61ef7f6SDag-Erling Smørgrav $debug_cmd 3182f61ef7f6SDag-Erling Smørgrav 3183f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$1 3184b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3185b7579f77SDag-Erling Smørgrav # See func_convert_path_msys_to_w32: 3186b7579f77SDag-Erling Smørgrav func_stripname : : "$1" 3187b7579f77SDag-Erling Smørgrav func_to_host_path_tmp1=$func_stripname_result 3188b7579f77SDag-Erling Smørgrav func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3189f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$func_convert_core_path_wine_to_w32_result 3190b7579f77SDag-Erling Smørgrav func_convert_path_check : ";" \ 3191b7579f77SDag-Erling Smørgrav "$func_to_host_path_tmp1" "$func_to_host_path_result" 3192b7579f77SDag-Erling Smørgrav func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 3193b7579f77SDag-Erling Smørgrav fi 3194b7579f77SDag-Erling Smørgrav} 3195b7579f77SDag-Erling Smørgrav# end func_convert_path_nix_to_w32 3196b7579f77SDag-Erling Smørgrav 3197b7579f77SDag-Erling Smørgrav 3198b7579f77SDag-Erling Smørgrav# func_convert_path_msys_to_cygwin ARG 3199b7579f77SDag-Erling Smørgrav# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 3200b7579f77SDag-Erling Smørgrav# Returns result in func_to_host_file_result. 3201b7579f77SDag-Erling Smørgravfunc_convert_path_msys_to_cygwin () 3202b7579f77SDag-Erling Smørgrav{ 3203f61ef7f6SDag-Erling Smørgrav $debug_cmd 3204f61ef7f6SDag-Erling Smørgrav 3205f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$1 3206b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3207b7579f77SDag-Erling Smørgrav # See func_convert_path_msys_to_w32: 3208b7579f77SDag-Erling Smørgrav func_stripname : : "$1" 3209b7579f77SDag-Erling Smørgrav func_to_host_path_tmp1=$func_stripname_result 3210b7579f77SDag-Erling Smørgrav func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 3211b7579f77SDag-Erling Smørgrav func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 3212f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$func_cygpath_result 3213b7579f77SDag-Erling Smørgrav func_convert_path_check : : \ 3214b7579f77SDag-Erling Smørgrav "$func_to_host_path_tmp1" "$func_to_host_path_result" 3215b7579f77SDag-Erling Smørgrav func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3216b7579f77SDag-Erling Smørgrav fi 3217b7579f77SDag-Erling Smørgrav} 3218b7579f77SDag-Erling Smørgrav# end func_convert_path_msys_to_cygwin 3219b7579f77SDag-Erling Smørgrav 3220b7579f77SDag-Erling Smørgrav 3221b7579f77SDag-Erling Smørgrav# func_convert_path_nix_to_cygwin ARG 3222b7579f77SDag-Erling Smørgrav# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 3223b7579f77SDag-Erling Smørgrav# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 3224b7579f77SDag-Erling Smørgrav# func_to_host_file_result. 3225b7579f77SDag-Erling Smørgravfunc_convert_path_nix_to_cygwin () 3226b7579f77SDag-Erling Smørgrav{ 3227f61ef7f6SDag-Erling Smørgrav $debug_cmd 3228f61ef7f6SDag-Erling Smørgrav 3229f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$1 3230b7579f77SDag-Erling Smørgrav if test -n "$1"; then 3231b7579f77SDag-Erling Smørgrav # Remove leading and trailing path separator characters from 3232b7579f77SDag-Erling Smørgrav # ARG. msys behavior is inconsistent here, cygpath turns them 3233b7579f77SDag-Erling Smørgrav # into '.;' and ';.', and winepath ignores them completely. 3234b7579f77SDag-Erling Smørgrav func_stripname : : "$1" 3235b7579f77SDag-Erling Smørgrav func_to_host_path_tmp1=$func_stripname_result 3236b7579f77SDag-Erling Smørgrav func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 3237b7579f77SDag-Erling Smørgrav func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 3238f61ef7f6SDag-Erling Smørgrav func_to_host_path_result=$func_cygpath_result 3239b7579f77SDag-Erling Smørgrav func_convert_path_check : : \ 3240b7579f77SDag-Erling Smørgrav "$func_to_host_path_tmp1" "$func_to_host_path_result" 3241b7579f77SDag-Erling Smørgrav func_convert_path_front_back_pathsep ":*" "*:" : "$1" 3242b7579f77SDag-Erling Smørgrav fi 3243b7579f77SDag-Erling Smørgrav} 3244b7579f77SDag-Erling Smørgrav# end func_convert_path_nix_to_cygwin 3245b7579f77SDag-Erling Smørgrav 3246b7579f77SDag-Erling Smørgrav 3247f61ef7f6SDag-Erling Smørgrav# func_dll_def_p FILE 3248f61ef7f6SDag-Erling Smørgrav# True iff FILE is a Windows DLL '.def' file. 3249f61ef7f6SDag-Erling Smørgrav# Keep in sync with _LT_DLL_DEF_P in libtool.m4 3250f61ef7f6SDag-Erling Smørgravfunc_dll_def_p () 3251f61ef7f6SDag-Erling Smørgrav{ 3252f61ef7f6SDag-Erling Smørgrav $debug_cmd 3253f61ef7f6SDag-Erling Smørgrav 3254f61ef7f6SDag-Erling Smørgrav func_dll_def_p_tmp=`$SED -n \ 3255f61ef7f6SDag-Erling Smørgrav -e 's/^[ ]*//' \ 3256f61ef7f6SDag-Erling Smørgrav -e '/^\(;.*\)*$/d' \ 3257f61ef7f6SDag-Erling Smørgrav -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ 3258f61ef7f6SDag-Erling Smørgrav -e q \ 3259f61ef7f6SDag-Erling Smørgrav "$1"` 3260f61ef7f6SDag-Erling Smørgrav test DEF = "$func_dll_def_p_tmp" 3261f61ef7f6SDag-Erling Smørgrav} 3262f61ef7f6SDag-Erling Smørgrav 3263f61ef7f6SDag-Erling Smørgrav 3264b7579f77SDag-Erling Smørgrav# func_mode_compile arg... 3265b7579f77SDag-Erling Smørgravfunc_mode_compile () 3266b7579f77SDag-Erling Smørgrav{ 3267f61ef7f6SDag-Erling Smørgrav $debug_cmd 3268f61ef7f6SDag-Erling Smørgrav 3269b7579f77SDag-Erling Smørgrav # Get the compilation command and the source file. 3270b7579f77SDag-Erling Smørgrav base_compile= 3271f61ef7f6SDag-Erling Smørgrav srcfile=$nonopt # always keep a non-empty value in "srcfile" 3272b7579f77SDag-Erling Smørgrav suppress_opt=yes 3273b7579f77SDag-Erling Smørgrav suppress_output= 3274b7579f77SDag-Erling Smørgrav arg_mode=normal 3275b7579f77SDag-Erling Smørgrav libobj= 3276b7579f77SDag-Erling Smørgrav later= 3277b7579f77SDag-Erling Smørgrav pie_flag= 3278b7579f77SDag-Erling Smørgrav 3279b7579f77SDag-Erling Smørgrav for arg 3280b7579f77SDag-Erling Smørgrav do 3281b7579f77SDag-Erling Smørgrav case $arg_mode in 3282b7579f77SDag-Erling Smørgrav arg ) 3283b7579f77SDag-Erling Smørgrav # do not "continue". Instead, add this to base_compile 3284f61ef7f6SDag-Erling Smørgrav lastarg=$arg 3285b7579f77SDag-Erling Smørgrav arg_mode=normal 3286b7579f77SDag-Erling Smørgrav ;; 3287b7579f77SDag-Erling Smørgrav 3288b7579f77SDag-Erling Smørgrav target ) 3289f61ef7f6SDag-Erling Smørgrav libobj=$arg 3290b7579f77SDag-Erling Smørgrav arg_mode=normal 3291b7579f77SDag-Erling Smørgrav continue 3292b7579f77SDag-Erling Smørgrav ;; 3293b7579f77SDag-Erling Smørgrav 3294b7579f77SDag-Erling Smørgrav normal ) 3295b7579f77SDag-Erling Smørgrav # Accept any command-line options. 3296b7579f77SDag-Erling Smørgrav case $arg in 3297b7579f77SDag-Erling Smørgrav -o) 3298b7579f77SDag-Erling Smørgrav test -n "$libobj" && \ 3299f61ef7f6SDag-Erling Smørgrav func_fatal_error "you cannot specify '-o' more than once" 3300b7579f77SDag-Erling Smørgrav arg_mode=target 3301b7579f77SDag-Erling Smørgrav continue 3302b7579f77SDag-Erling Smørgrav ;; 3303b7579f77SDag-Erling Smørgrav 3304b7579f77SDag-Erling Smørgrav -pie | -fpie | -fPIE) 3305b7579f77SDag-Erling Smørgrav func_append pie_flag " $arg" 3306b7579f77SDag-Erling Smørgrav continue 3307b7579f77SDag-Erling Smørgrav ;; 3308b7579f77SDag-Erling Smørgrav 3309b7579f77SDag-Erling Smørgrav -shared | -static | -prefer-pic | -prefer-non-pic) 3310b7579f77SDag-Erling Smørgrav func_append later " $arg" 3311b7579f77SDag-Erling Smørgrav continue 3312b7579f77SDag-Erling Smørgrav ;; 3313b7579f77SDag-Erling Smørgrav 3314b7579f77SDag-Erling Smørgrav -no-suppress) 3315b7579f77SDag-Erling Smørgrav suppress_opt=no 3316b7579f77SDag-Erling Smørgrav continue 3317b7579f77SDag-Erling Smørgrav ;; 3318b7579f77SDag-Erling Smørgrav 3319b7579f77SDag-Erling Smørgrav -Xcompiler) 3320b7579f77SDag-Erling Smørgrav arg_mode=arg # the next one goes into the "base_compile" arg list 3321b7579f77SDag-Erling Smørgrav continue # The current "srcfile" will either be retained or 3322b7579f77SDag-Erling Smørgrav ;; # replaced later. I would guess that would be a bug. 3323b7579f77SDag-Erling Smørgrav 3324b7579f77SDag-Erling Smørgrav -Wc,*) 3325b7579f77SDag-Erling Smørgrav func_stripname '-Wc,' '' "$arg" 3326b7579f77SDag-Erling Smørgrav args=$func_stripname_result 3327b7579f77SDag-Erling Smørgrav lastarg= 3328f61ef7f6SDag-Erling Smørgrav save_ifs=$IFS; IFS=, 3329b7579f77SDag-Erling Smørgrav for arg in $args; do 3330f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 3331b7579f77SDag-Erling Smørgrav func_append_quoted lastarg "$arg" 3332b7579f77SDag-Erling Smørgrav done 3333f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 3334b7579f77SDag-Erling Smørgrav func_stripname ' ' '' "$lastarg" 3335b7579f77SDag-Erling Smørgrav lastarg=$func_stripname_result 3336b7579f77SDag-Erling Smørgrav 3337b7579f77SDag-Erling Smørgrav # Add the arguments to base_compile. 3338b7579f77SDag-Erling Smørgrav func_append base_compile " $lastarg" 3339b7579f77SDag-Erling Smørgrav continue 3340b7579f77SDag-Erling Smørgrav ;; 3341b7579f77SDag-Erling Smørgrav 3342b7579f77SDag-Erling Smørgrav *) 3343b7579f77SDag-Erling Smørgrav # Accept the current argument as the source file. 3344b7579f77SDag-Erling Smørgrav # The previous "srcfile" becomes the current argument. 3345b7579f77SDag-Erling Smørgrav # 3346f61ef7f6SDag-Erling Smørgrav lastarg=$srcfile 3347f61ef7f6SDag-Erling Smørgrav srcfile=$arg 3348b7579f77SDag-Erling Smørgrav ;; 3349b7579f77SDag-Erling Smørgrav esac # case $arg 3350b7579f77SDag-Erling Smørgrav ;; 3351b7579f77SDag-Erling Smørgrav esac # case $arg_mode 3352b7579f77SDag-Erling Smørgrav 3353b7579f77SDag-Erling Smørgrav # Aesthetically quote the previous argument. 3354b7579f77SDag-Erling Smørgrav func_append_quoted base_compile "$lastarg" 3355b7579f77SDag-Erling Smørgrav done # for arg 3356b7579f77SDag-Erling Smørgrav 3357b7579f77SDag-Erling Smørgrav case $arg_mode in 3358b7579f77SDag-Erling Smørgrav arg) 3359b7579f77SDag-Erling Smørgrav func_fatal_error "you must specify an argument for -Xcompile" 3360b7579f77SDag-Erling Smørgrav ;; 3361b7579f77SDag-Erling Smørgrav target) 3362f61ef7f6SDag-Erling Smørgrav func_fatal_error "you must specify a target with '-o'" 3363b7579f77SDag-Erling Smørgrav ;; 3364b7579f77SDag-Erling Smørgrav *) 3365b7579f77SDag-Erling Smørgrav # Get the name of the library object. 3366b7579f77SDag-Erling Smørgrav test -z "$libobj" && { 3367b7579f77SDag-Erling Smørgrav func_basename "$srcfile" 3368f61ef7f6SDag-Erling Smørgrav libobj=$func_basename_result 3369b7579f77SDag-Erling Smørgrav } 3370b7579f77SDag-Erling Smørgrav ;; 3371b7579f77SDag-Erling Smørgrav esac 3372b7579f77SDag-Erling Smørgrav 3373b7579f77SDag-Erling Smørgrav # Recognize several different file suffixes. 3374b7579f77SDag-Erling Smørgrav # If the user specifies -o file.o, it is replaced with file.lo 3375b7579f77SDag-Erling Smørgrav case $libobj in 3376b7579f77SDag-Erling Smørgrav *.[cCFSifmso] | \ 3377b7579f77SDag-Erling Smørgrav *.ada | *.adb | *.ads | *.asm | \ 3378b7579f77SDag-Erling Smørgrav *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 33798ed2b524SDag-Erling Smørgrav *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 3380b7579f77SDag-Erling Smørgrav func_xform "$libobj" 3381b7579f77SDag-Erling Smørgrav libobj=$func_xform_result 3382b7579f77SDag-Erling Smørgrav ;; 3383b7579f77SDag-Erling Smørgrav esac 3384b7579f77SDag-Erling Smørgrav 3385b7579f77SDag-Erling Smørgrav case $libobj in 3386b7579f77SDag-Erling Smørgrav *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 3387b7579f77SDag-Erling Smørgrav *) 3388f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot determine name of library object from '$libobj'" 3389b7579f77SDag-Erling Smørgrav ;; 3390b7579f77SDag-Erling Smørgrav esac 3391b7579f77SDag-Erling Smørgrav 3392b7579f77SDag-Erling Smørgrav func_infer_tag $base_compile 3393b7579f77SDag-Erling Smørgrav 3394b7579f77SDag-Erling Smørgrav for arg in $later; do 3395b7579f77SDag-Erling Smørgrav case $arg in 3396b7579f77SDag-Erling Smørgrav -shared) 3397f61ef7f6SDag-Erling Smørgrav test yes = "$build_libtool_libs" \ 3398f61ef7f6SDag-Erling Smørgrav || func_fatal_configuration "cannot build a shared library" 3399b7579f77SDag-Erling Smørgrav build_old_libs=no 3400b7579f77SDag-Erling Smørgrav continue 3401b7579f77SDag-Erling Smørgrav ;; 3402b7579f77SDag-Erling Smørgrav 3403b7579f77SDag-Erling Smørgrav -static) 3404b7579f77SDag-Erling Smørgrav build_libtool_libs=no 3405b7579f77SDag-Erling Smørgrav build_old_libs=yes 3406b7579f77SDag-Erling Smørgrav continue 3407b7579f77SDag-Erling Smørgrav ;; 3408b7579f77SDag-Erling Smørgrav 3409b7579f77SDag-Erling Smørgrav -prefer-pic) 3410b7579f77SDag-Erling Smørgrav pic_mode=yes 3411b7579f77SDag-Erling Smørgrav continue 3412b7579f77SDag-Erling Smørgrav ;; 3413b7579f77SDag-Erling Smørgrav 3414b7579f77SDag-Erling Smørgrav -prefer-non-pic) 3415b7579f77SDag-Erling Smørgrav pic_mode=no 3416b7579f77SDag-Erling Smørgrav continue 3417b7579f77SDag-Erling Smørgrav ;; 3418b7579f77SDag-Erling Smørgrav esac 3419b7579f77SDag-Erling Smørgrav done 3420b7579f77SDag-Erling Smørgrav 3421*46d2f618SCy Schubert func_quote_for_eval "$libobj" 3422*46d2f618SCy Schubert test "X$libobj" != "X$func_quote_for_eval_result" \ 3423b7579f77SDag-Erling Smørgrav && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 3424f61ef7f6SDag-Erling Smørgrav && func_warning "libobj name '$libobj' may not contain shell special characters." 3425b7579f77SDag-Erling Smørgrav func_dirname_and_basename "$obj" "/" "" 3426f61ef7f6SDag-Erling Smørgrav objname=$func_basename_result 3427f61ef7f6SDag-Erling Smørgrav xdir=$func_dirname_result 3428f61ef7f6SDag-Erling Smørgrav lobj=$xdir$objdir/$objname 3429b7579f77SDag-Erling Smørgrav 3430b7579f77SDag-Erling Smørgrav test -z "$base_compile" && \ 3431b7579f77SDag-Erling Smørgrav func_fatal_help "you must specify a compilation command" 3432b7579f77SDag-Erling Smørgrav 3433b7579f77SDag-Erling Smørgrav # Delete any leftover library objects. 3434f61ef7f6SDag-Erling Smørgrav if test yes = "$build_old_libs"; then 3435b7579f77SDag-Erling Smørgrav removelist="$obj $lobj $libobj ${libobj}T" 3436b7579f77SDag-Erling Smørgrav else 3437b7579f77SDag-Erling Smørgrav removelist="$lobj $libobj ${libobj}T" 3438b7579f77SDag-Erling Smørgrav fi 3439b7579f77SDag-Erling Smørgrav 3440b7579f77SDag-Erling Smørgrav # On Cygwin there's no "real" PIC flag so we must build both object types 3441b7579f77SDag-Erling Smørgrav case $host_os in 3442b7579f77SDag-Erling Smørgrav cygwin* | mingw* | pw32* | os2* | cegcc*) 3443b7579f77SDag-Erling Smørgrav pic_mode=default 3444b7579f77SDag-Erling Smørgrav ;; 3445b7579f77SDag-Erling Smørgrav esac 3446f61ef7f6SDag-Erling Smørgrav if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then 3447b7579f77SDag-Erling Smørgrav # non-PIC code in shared libraries is not supported 3448b7579f77SDag-Erling Smørgrav pic_mode=default 3449b7579f77SDag-Erling Smørgrav fi 3450b7579f77SDag-Erling Smørgrav 3451b7579f77SDag-Erling Smørgrav # Calculate the filename of the output object if compiler does 3452b7579f77SDag-Erling Smørgrav # not support -o with -c 3453f61ef7f6SDag-Erling Smørgrav if test no = "$compiler_c_o"; then 3454f61ef7f6SDag-Erling Smørgrav output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext 3455f61ef7f6SDag-Erling Smørgrav lockfile=$output_obj.lock 3456b7579f77SDag-Erling Smørgrav else 3457b7579f77SDag-Erling Smørgrav output_obj= 3458b7579f77SDag-Erling Smørgrav need_locks=no 3459b7579f77SDag-Erling Smørgrav lockfile= 3460b7579f77SDag-Erling Smørgrav fi 3461b7579f77SDag-Erling Smørgrav 3462b7579f77SDag-Erling Smørgrav # Lock this critical section if it is needed 3463b7579f77SDag-Erling Smørgrav # We use this script file to make the link, it avoids creating a new file 3464f61ef7f6SDag-Erling Smørgrav if test yes = "$need_locks"; then 3465b7579f77SDag-Erling Smørgrav until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3466b7579f77SDag-Erling Smørgrav func_echo "Waiting for $lockfile to be removed" 3467b7579f77SDag-Erling Smørgrav sleep 2 3468b7579f77SDag-Erling Smørgrav done 3469f61ef7f6SDag-Erling Smørgrav elif test warn = "$need_locks"; then 3470b7579f77SDag-Erling Smørgrav if test -f "$lockfile"; then 3471b7579f77SDag-Erling Smørgrav $ECHO "\ 3472b7579f77SDag-Erling Smørgrav*** ERROR, $lockfile exists and contains: 3473b7579f77SDag-Erling Smørgrav`cat $lockfile 2>/dev/null` 3474b7579f77SDag-Erling Smørgrav 3475b7579f77SDag-Erling SmørgravThis indicates that another process is trying to use the same 3476b7579f77SDag-Erling Smørgravtemporary object file, and libtool could not work around it because 3477f61ef7f6SDag-Erling Smørgravyour compiler does not support '-c' and '-o' together. If you 3478b7579f77SDag-Erling Smørgravrepeat this compilation, it may succeed, by chance, but you had better 3479b7579f77SDag-Erling Smørgravavoid parallel builds (make -j) in this platform, or get a better 3480b7579f77SDag-Erling Smørgravcompiler." 3481b7579f77SDag-Erling Smørgrav 3482b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $removelist 3483b7579f77SDag-Erling Smørgrav exit $EXIT_FAILURE 3484b7579f77SDag-Erling Smørgrav fi 3485b7579f77SDag-Erling Smørgrav func_append removelist " $output_obj" 3486b7579f77SDag-Erling Smørgrav $ECHO "$srcfile" > "$lockfile" 3487b7579f77SDag-Erling Smørgrav fi 3488b7579f77SDag-Erling Smørgrav 3489b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $removelist 3490b7579f77SDag-Erling Smørgrav func_append removelist " $lockfile" 3491b7579f77SDag-Erling Smørgrav trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 3492b7579f77SDag-Erling Smørgrav 3493b7579f77SDag-Erling Smørgrav func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 3494b7579f77SDag-Erling Smørgrav srcfile=$func_to_tool_file_result 3495*46d2f618SCy Schubert func_quote_for_eval "$srcfile" 3496*46d2f618SCy Schubert qsrcfile=$func_quote_for_eval_result 3497b7579f77SDag-Erling Smørgrav 3498b7579f77SDag-Erling Smørgrav # Only build a PIC object if we are building libtool libraries. 3499f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs"; then 3500b7579f77SDag-Erling Smørgrav # Without this assignment, base_compile gets emptied. 3501b7579f77SDag-Erling Smørgrav fbsd_hideous_sh_bug=$base_compile 3502b7579f77SDag-Erling Smørgrav 3503f61ef7f6SDag-Erling Smørgrav if test no != "$pic_mode"; then 3504b7579f77SDag-Erling Smørgrav command="$base_compile $qsrcfile $pic_flag" 3505b7579f77SDag-Erling Smørgrav else 3506b7579f77SDag-Erling Smørgrav # Don't build PIC code 3507b7579f77SDag-Erling Smørgrav command="$base_compile $qsrcfile" 3508b7579f77SDag-Erling Smørgrav fi 3509b7579f77SDag-Erling Smørgrav 3510b7579f77SDag-Erling Smørgrav func_mkdir_p "$xdir$objdir" 3511b7579f77SDag-Erling Smørgrav 3512b7579f77SDag-Erling Smørgrav if test -z "$output_obj"; then 3513b7579f77SDag-Erling Smørgrav # Place PIC objects in $objdir 3514b7579f77SDag-Erling Smørgrav func_append command " -o $lobj" 3515b7579f77SDag-Erling Smørgrav fi 3516b7579f77SDag-Erling Smørgrav 3517b7579f77SDag-Erling Smørgrav func_show_eval_locale "$command" \ 3518b7579f77SDag-Erling Smørgrav 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 3519b7579f77SDag-Erling Smørgrav 3520f61ef7f6SDag-Erling Smørgrav if test warn = "$need_locks" && 3521b7579f77SDag-Erling Smørgrav test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3522b7579f77SDag-Erling Smørgrav $ECHO "\ 3523b7579f77SDag-Erling Smørgrav*** ERROR, $lockfile contains: 3524b7579f77SDag-Erling Smørgrav`cat $lockfile 2>/dev/null` 3525b7579f77SDag-Erling Smørgrav 3526b7579f77SDag-Erling Smørgravbut it should contain: 3527b7579f77SDag-Erling Smørgrav$srcfile 3528b7579f77SDag-Erling Smørgrav 3529b7579f77SDag-Erling SmørgravThis indicates that another process is trying to use the same 3530b7579f77SDag-Erling Smørgravtemporary object file, and libtool could not work around it because 3531f61ef7f6SDag-Erling Smørgravyour compiler does not support '-c' and '-o' together. If you 3532b7579f77SDag-Erling Smørgravrepeat this compilation, it may succeed, by chance, but you had better 3533b7579f77SDag-Erling Smørgravavoid parallel builds (make -j) in this platform, or get a better 3534b7579f77SDag-Erling Smørgravcompiler." 3535b7579f77SDag-Erling Smørgrav 3536b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $removelist 3537b7579f77SDag-Erling Smørgrav exit $EXIT_FAILURE 3538b7579f77SDag-Erling Smørgrav fi 3539b7579f77SDag-Erling Smørgrav 3540b7579f77SDag-Erling Smørgrav # Just move the object if needed, then go on to compile the next one 3541b7579f77SDag-Erling Smørgrav if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 3542b7579f77SDag-Erling Smørgrav func_show_eval '$MV "$output_obj" "$lobj"' \ 3543b7579f77SDag-Erling Smørgrav 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3544b7579f77SDag-Erling Smørgrav fi 3545b7579f77SDag-Erling Smørgrav 3546b7579f77SDag-Erling Smørgrav # Allow error messages only from the first compilation. 3547f61ef7f6SDag-Erling Smørgrav if test yes = "$suppress_opt"; then 3548b7579f77SDag-Erling Smørgrav suppress_output=' >/dev/null 2>&1' 3549b7579f77SDag-Erling Smørgrav fi 3550b7579f77SDag-Erling Smørgrav fi 3551b7579f77SDag-Erling Smørgrav 3552b7579f77SDag-Erling Smørgrav # Only build a position-dependent object if we build old libraries. 3553f61ef7f6SDag-Erling Smørgrav if test yes = "$build_old_libs"; then 3554f61ef7f6SDag-Erling Smørgrav if test yes != "$pic_mode"; then 3555b7579f77SDag-Erling Smørgrav # Don't build PIC code 3556b7579f77SDag-Erling Smørgrav command="$base_compile $qsrcfile$pie_flag" 3557b7579f77SDag-Erling Smørgrav else 3558b7579f77SDag-Erling Smørgrav command="$base_compile $qsrcfile $pic_flag" 3559b7579f77SDag-Erling Smørgrav fi 3560f61ef7f6SDag-Erling Smørgrav if test yes = "$compiler_c_o"; then 3561b7579f77SDag-Erling Smørgrav func_append command " -o $obj" 3562b7579f77SDag-Erling Smørgrav fi 3563b7579f77SDag-Erling Smørgrav 3564b7579f77SDag-Erling Smørgrav # Suppress compiler output if we already did a PIC compilation. 3565b7579f77SDag-Erling Smørgrav func_append command "$suppress_output" 3566b7579f77SDag-Erling Smørgrav func_show_eval_locale "$command" \ 3567b7579f77SDag-Erling Smørgrav '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 3568b7579f77SDag-Erling Smørgrav 3569f61ef7f6SDag-Erling Smørgrav if test warn = "$need_locks" && 3570b7579f77SDag-Erling Smørgrav test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 3571b7579f77SDag-Erling Smørgrav $ECHO "\ 3572b7579f77SDag-Erling Smørgrav*** ERROR, $lockfile contains: 3573b7579f77SDag-Erling Smørgrav`cat $lockfile 2>/dev/null` 3574b7579f77SDag-Erling Smørgrav 3575b7579f77SDag-Erling Smørgravbut it should contain: 3576b7579f77SDag-Erling Smørgrav$srcfile 3577b7579f77SDag-Erling Smørgrav 3578b7579f77SDag-Erling SmørgravThis indicates that another process is trying to use the same 3579b7579f77SDag-Erling Smørgravtemporary object file, and libtool could not work around it because 3580f61ef7f6SDag-Erling Smørgravyour compiler does not support '-c' and '-o' together. If you 3581b7579f77SDag-Erling Smørgravrepeat this compilation, it may succeed, by chance, but you had better 3582b7579f77SDag-Erling Smørgravavoid parallel builds (make -j) in this platform, or get a better 3583b7579f77SDag-Erling Smørgravcompiler." 3584b7579f77SDag-Erling Smørgrav 3585b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $removelist 3586b7579f77SDag-Erling Smørgrav exit $EXIT_FAILURE 3587b7579f77SDag-Erling Smørgrav fi 3588b7579f77SDag-Erling Smørgrav 3589b7579f77SDag-Erling Smørgrav # Just move the object if needed 3590b7579f77SDag-Erling Smørgrav if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 3591b7579f77SDag-Erling Smørgrav func_show_eval '$MV "$output_obj" "$obj"' \ 3592b7579f77SDag-Erling Smørgrav 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 3593b7579f77SDag-Erling Smørgrav fi 3594b7579f77SDag-Erling Smørgrav fi 3595b7579f77SDag-Erling Smørgrav 3596b7579f77SDag-Erling Smørgrav $opt_dry_run || { 3597b7579f77SDag-Erling Smørgrav func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 3598b7579f77SDag-Erling Smørgrav 3599b7579f77SDag-Erling Smørgrav # Unlock the critical section if it was locked 3600f61ef7f6SDag-Erling Smørgrav if test no != "$need_locks"; then 3601b7579f77SDag-Erling Smørgrav removelist=$lockfile 3602b7579f77SDag-Erling Smørgrav $RM "$lockfile" 3603b7579f77SDag-Erling Smørgrav fi 3604b7579f77SDag-Erling Smørgrav } 3605b7579f77SDag-Erling Smørgrav 3606b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 3607b7579f77SDag-Erling Smørgrav} 3608b7579f77SDag-Erling Smørgrav 3609b7579f77SDag-Erling Smørgrav$opt_help || { 3610f61ef7f6SDag-Erling Smørgrav test compile = "$opt_mode" && func_mode_compile ${1+"$@"} 3611b7579f77SDag-Erling Smørgrav} 3612b7579f77SDag-Erling Smørgrav 3613b7579f77SDag-Erling Smørgravfunc_mode_help () 3614b7579f77SDag-Erling Smørgrav{ 3615b7579f77SDag-Erling Smørgrav # We need to display help for each of the modes. 3616b7579f77SDag-Erling Smørgrav case $opt_mode in 3617b7579f77SDag-Erling Smørgrav "") 3618b7579f77SDag-Erling Smørgrav # Generic help is extracted from the usage comments 3619b7579f77SDag-Erling Smørgrav # at the start of this file. 3620b7579f77SDag-Erling Smørgrav func_help 3621b7579f77SDag-Erling Smørgrav ;; 3622b7579f77SDag-Erling Smørgrav 3623b7579f77SDag-Erling Smørgrav clean) 3624b7579f77SDag-Erling Smørgrav $ECHO \ 3625b7579f77SDag-Erling Smørgrav"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 3626b7579f77SDag-Erling Smørgrav 3627b7579f77SDag-Erling SmørgravRemove files from the build directory. 3628b7579f77SDag-Erling Smørgrav 3629b7579f77SDag-Erling SmørgravRM is the name of the program to use to delete files associated with each FILE 3630f61ef7f6SDag-Erling Smørgrav(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3631b7579f77SDag-Erling Smørgravto RM. 3632b7579f77SDag-Erling Smørgrav 3633b7579f77SDag-Erling SmørgravIf FILE is a libtool library, object or program, all the files associated 3634b7579f77SDag-Erling Smørgravwith it are deleted. Otherwise, only FILE itself is deleted using RM." 3635b7579f77SDag-Erling Smørgrav ;; 3636b7579f77SDag-Erling Smørgrav 3637b7579f77SDag-Erling Smørgrav compile) 3638b7579f77SDag-Erling Smørgrav $ECHO \ 3639b7579f77SDag-Erling Smørgrav"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 3640b7579f77SDag-Erling Smørgrav 3641b7579f77SDag-Erling SmørgravCompile a source file into a libtool library object. 3642b7579f77SDag-Erling Smørgrav 3643b7579f77SDag-Erling SmørgravThis mode accepts the following additional options: 3644b7579f77SDag-Erling Smørgrav 3645b7579f77SDag-Erling Smørgrav -o OUTPUT-FILE set the output file name to OUTPUT-FILE 3646b7579f77SDag-Erling Smørgrav -no-suppress do not suppress compiler output for multiple passes 3647b7579f77SDag-Erling Smørgrav -prefer-pic try to build PIC objects only 3648b7579f77SDag-Erling Smørgrav -prefer-non-pic try to build non-PIC objects only 3649f61ef7f6SDag-Erling Smørgrav -shared do not build a '.o' file suitable for static linking 3650f61ef7f6SDag-Erling Smørgrav -static only build a '.o' file suitable for static linking 3651*46d2f618SCy Schubert -Wc,FLAG pass FLAG directly to the compiler 3652b7579f77SDag-Erling Smørgrav 3653f61ef7f6SDag-Erling SmørgravCOMPILE-COMMAND is a command to be used in creating a 'standard' object file 3654b7579f77SDag-Erling Smørgravfrom the given SOURCEFILE. 3655b7579f77SDag-Erling Smørgrav 3656b7579f77SDag-Erling SmørgravThe output file name is determined by removing the directory component from 3657f61ef7f6SDag-Erling SmørgravSOURCEFILE, then substituting the C source code suffix '.c' with the 3658f61ef7f6SDag-Erling Smørgravlibrary object suffix, '.lo'." 3659b7579f77SDag-Erling Smørgrav ;; 3660b7579f77SDag-Erling Smørgrav 3661b7579f77SDag-Erling Smørgrav execute) 3662b7579f77SDag-Erling Smørgrav $ECHO \ 3663b7579f77SDag-Erling Smørgrav"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 3664b7579f77SDag-Erling Smørgrav 3665b7579f77SDag-Erling SmørgravAutomatically set library path, then run a program. 3666b7579f77SDag-Erling Smørgrav 3667b7579f77SDag-Erling SmørgravThis mode accepts the following additional options: 3668b7579f77SDag-Erling Smørgrav 3669b7579f77SDag-Erling Smørgrav -dlopen FILE add the directory containing FILE to the library path 3670b7579f77SDag-Erling Smørgrav 3671f61ef7f6SDag-Erling SmørgravThis mode sets the library path environment variable according to '-dlopen' 3672b7579f77SDag-Erling Smørgravflags. 3673b7579f77SDag-Erling Smørgrav 3674b7579f77SDag-Erling SmørgravIf any of the ARGS are libtool executable wrappers, then they are translated 3675b7579f77SDag-Erling Smørgravinto their corresponding uninstalled binary, and any of their required library 3676b7579f77SDag-Erling Smørgravdirectories are added to the library path. 3677b7579f77SDag-Erling Smørgrav 3678b7579f77SDag-Erling SmørgravThen, COMMAND is executed, with ARGS as arguments." 3679b7579f77SDag-Erling Smørgrav ;; 3680b7579f77SDag-Erling Smørgrav 3681b7579f77SDag-Erling Smørgrav finish) 3682b7579f77SDag-Erling Smørgrav $ECHO \ 3683b7579f77SDag-Erling Smørgrav"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 3684b7579f77SDag-Erling Smørgrav 3685b7579f77SDag-Erling SmørgravComplete the installation of libtool libraries. 3686b7579f77SDag-Erling Smørgrav 3687b7579f77SDag-Erling SmørgravEach LIBDIR is a directory that contains libtool libraries. 3688b7579f77SDag-Erling Smørgrav 3689b7579f77SDag-Erling SmørgravThe commands that this mode executes may require superuser privileges. Use 3690f61ef7f6SDag-Erling Smørgravthe '--dry-run' option if you just want to see what would be executed." 3691b7579f77SDag-Erling Smørgrav ;; 3692b7579f77SDag-Erling Smørgrav 3693b7579f77SDag-Erling Smørgrav install) 3694b7579f77SDag-Erling Smørgrav $ECHO \ 3695b7579f77SDag-Erling Smørgrav"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 3696b7579f77SDag-Erling Smørgrav 3697b7579f77SDag-Erling SmørgravInstall executables or libraries. 3698b7579f77SDag-Erling Smørgrav 3699b7579f77SDag-Erling SmørgravINSTALL-COMMAND is the installation command. The first component should be 3700f61ef7f6SDag-Erling Smørgraveither the 'install' or 'cp' program. 3701b7579f77SDag-Erling Smørgrav 3702b7579f77SDag-Erling SmørgravThe following components of INSTALL-COMMAND are treated specially: 3703b7579f77SDag-Erling Smørgrav 3704b7579f77SDag-Erling Smørgrav -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 3705b7579f77SDag-Erling Smørgrav 3706b7579f77SDag-Erling SmørgravThe rest of the components are interpreted as arguments to that command (only 3707b7579f77SDag-Erling SmørgravBSD-compatible install options are recognized)." 3708b7579f77SDag-Erling Smørgrav ;; 3709b7579f77SDag-Erling Smørgrav 3710b7579f77SDag-Erling Smørgrav link) 3711b7579f77SDag-Erling Smørgrav $ECHO \ 3712b7579f77SDag-Erling Smørgrav"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 3713b7579f77SDag-Erling Smørgrav 3714b7579f77SDag-Erling SmørgravLink object files or libraries together to form another library, or to 3715b7579f77SDag-Erling Smørgravcreate an executable program. 3716b7579f77SDag-Erling Smørgrav 3717b7579f77SDag-Erling SmørgravLINK-COMMAND is a command using the C compiler that you would use to create 3718b7579f77SDag-Erling Smørgrava program from several object files. 3719b7579f77SDag-Erling Smørgrav 3720b7579f77SDag-Erling SmørgravThe following components of LINK-COMMAND are treated specially: 3721b7579f77SDag-Erling Smørgrav 3722b7579f77SDag-Erling Smørgrav -all-static do not do any dynamic linking at all 3723b7579f77SDag-Erling Smørgrav -avoid-version do not add a version suffix if possible 3724b7579f77SDag-Erling Smørgrav -bindir BINDIR specify path to binaries directory (for systems where 3725b7579f77SDag-Erling Smørgrav libraries must be found in the PATH setting at runtime) 3726f61ef7f6SDag-Erling Smørgrav -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime 3727b7579f77SDag-Erling Smørgrav -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 3728b7579f77SDag-Erling Smørgrav -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 3729b7579f77SDag-Erling Smørgrav -export-symbols SYMFILE 3730b7579f77SDag-Erling Smørgrav try to export only the symbols listed in SYMFILE 3731b7579f77SDag-Erling Smørgrav -export-symbols-regex REGEX 3732b7579f77SDag-Erling Smørgrav try to export only the symbols matching REGEX 3733b7579f77SDag-Erling Smørgrav -LLIBDIR search LIBDIR for required installed libraries 3734b7579f77SDag-Erling Smørgrav -lNAME OUTPUT-FILE requires the installed library libNAME 3735b7579f77SDag-Erling Smørgrav -module build a library that can dlopened 3736b7579f77SDag-Erling Smørgrav -no-fast-install disable the fast-install mode 3737b7579f77SDag-Erling Smørgrav -no-install link a not-installable executable 3738b7579f77SDag-Erling Smørgrav -no-undefined declare that a library does not refer to external symbols 3739b7579f77SDag-Erling Smørgrav -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 3740f61ef7f6SDag-Erling Smørgrav -objectlist FILE use a list of object files found in FILE to specify objects 3741f61ef7f6SDag-Erling Smørgrav -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) 3742b7579f77SDag-Erling Smørgrav -precious-files-regex REGEX 3743b7579f77SDag-Erling Smørgrav don't remove output files matching REGEX 3744b7579f77SDag-Erling Smørgrav -release RELEASE specify package release information 3745b7579f77SDag-Erling Smørgrav -rpath LIBDIR the created library will eventually be installed in LIBDIR 3746b7579f77SDag-Erling Smørgrav -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 3747b7579f77SDag-Erling Smørgrav -shared only do dynamic linking of libtool libraries 3748b7579f77SDag-Erling Smørgrav -shrext SUFFIX override the standard shared library file extension 3749b7579f77SDag-Erling Smørgrav -static do not do any dynamic linking of uninstalled libtool libraries 3750b7579f77SDag-Erling Smørgrav -static-libtool-libs 3751b7579f77SDag-Erling Smørgrav do not do any dynamic linking of libtool libraries 3752b7579f77SDag-Erling Smørgrav -version-info CURRENT[:REVISION[:AGE]] 3753b7579f77SDag-Erling Smørgrav specify library version info [each variable defaults to 0] 3754b7579f77SDag-Erling Smørgrav -weak LIBNAME declare that the target provides the LIBNAME interface 3755b7579f77SDag-Erling Smørgrav -Wc,FLAG 3756b7579f77SDag-Erling Smørgrav -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 3757b7579f77SDag-Erling Smørgrav -Wl,FLAG 3758b7579f77SDag-Erling Smørgrav -Xlinker FLAG pass linker-specific FLAG directly to the linker 3759b7579f77SDag-Erling Smørgrav -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 3760b7579f77SDag-Erling Smørgrav 3761f61ef7f6SDag-Erling SmørgravAll other options (arguments beginning with '-') are ignored. 3762b7579f77SDag-Erling Smørgrav 3763f61ef7f6SDag-Erling SmørgravEvery other argument is treated as a filename. Files ending in '.la' are 3764b7579f77SDag-Erling Smørgravtreated as uninstalled libtool libraries, other files are standard or library 3765b7579f77SDag-Erling Smørgravobject files. 3766b7579f77SDag-Erling Smørgrav 3767f61ef7f6SDag-Erling SmørgravIf the OUTPUT-FILE ends in '.la', then a libtool library is created, 3768f61ef7f6SDag-Erling Smørgravonly library objects ('.lo' files) may be specified, and '-rpath' is 3769b7579f77SDag-Erling Smørgravrequired, except when creating a convenience library. 3770b7579f77SDag-Erling Smørgrav 3771f61ef7f6SDag-Erling SmørgravIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created 3772f61ef7f6SDag-Erling Smørgravusing 'ar' and 'ranlib', or on Windows using 'lib'. 3773b7579f77SDag-Erling Smørgrav 3774f61ef7f6SDag-Erling SmørgravIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file 3775b7579f77SDag-Erling Smørgravis created, otherwise an executable program is created." 3776b7579f77SDag-Erling Smørgrav ;; 3777b7579f77SDag-Erling Smørgrav 3778b7579f77SDag-Erling Smørgrav uninstall) 3779b7579f77SDag-Erling Smørgrav $ECHO \ 3780b7579f77SDag-Erling Smørgrav"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 3781b7579f77SDag-Erling Smørgrav 3782b7579f77SDag-Erling SmørgravRemove libraries from an installation directory. 3783b7579f77SDag-Erling Smørgrav 3784b7579f77SDag-Erling SmørgravRM is the name of the program to use to delete files associated with each FILE 3785f61ef7f6SDag-Erling Smørgrav(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed 3786b7579f77SDag-Erling Smørgravto RM. 3787b7579f77SDag-Erling Smørgrav 3788b7579f77SDag-Erling SmørgravIf FILE is a libtool library, all the files associated with it are deleted. 3789b7579f77SDag-Erling SmørgravOtherwise, only FILE itself is deleted using RM." 3790b7579f77SDag-Erling Smørgrav ;; 3791b7579f77SDag-Erling Smørgrav 3792b7579f77SDag-Erling Smørgrav *) 3793f61ef7f6SDag-Erling Smørgrav func_fatal_help "invalid operation mode '$opt_mode'" 3794b7579f77SDag-Erling Smørgrav ;; 3795b7579f77SDag-Erling Smørgrav esac 3796b7579f77SDag-Erling Smørgrav 3797b7579f77SDag-Erling Smørgrav echo 3798f61ef7f6SDag-Erling Smørgrav $ECHO "Try '$progname --help' for more information about other modes." 3799b7579f77SDag-Erling Smørgrav} 3800b7579f77SDag-Erling Smørgrav 3801b7579f77SDag-Erling Smørgrav# Now that we've collected a possible --mode arg, show help if necessary 3802b7579f77SDag-Erling Smørgravif $opt_help; then 3803f61ef7f6SDag-Erling Smørgrav if test : = "$opt_help"; then 3804b7579f77SDag-Erling Smørgrav func_mode_help 3805b7579f77SDag-Erling Smørgrav else 3806b7579f77SDag-Erling Smørgrav { 3807b7579f77SDag-Erling Smørgrav func_help noexit 3808b7579f77SDag-Erling Smørgrav for opt_mode in compile link execute install finish uninstall clean; do 3809b7579f77SDag-Erling Smørgrav func_mode_help 3810b7579f77SDag-Erling Smørgrav done 3811f61ef7f6SDag-Erling Smørgrav } | $SED -n '1p; 2,$s/^Usage:/ or: /p' 3812b7579f77SDag-Erling Smørgrav { 3813b7579f77SDag-Erling Smørgrav func_help noexit 3814b7579f77SDag-Erling Smørgrav for opt_mode in compile link execute install finish uninstall clean; do 3815b7579f77SDag-Erling Smørgrav echo 3816b7579f77SDag-Erling Smørgrav func_mode_help 3817b7579f77SDag-Erling Smørgrav done 3818b7579f77SDag-Erling Smørgrav } | 3819f61ef7f6SDag-Erling Smørgrav $SED '1d 3820b7579f77SDag-Erling Smørgrav /^When reporting/,/^Report/{ 3821b7579f77SDag-Erling Smørgrav H 3822b7579f77SDag-Erling Smørgrav d 3823b7579f77SDag-Erling Smørgrav } 3824b7579f77SDag-Erling Smørgrav $x 3825b7579f77SDag-Erling Smørgrav /information about other modes/d 3826b7579f77SDag-Erling Smørgrav /more detailed .*MODE/d 3827b7579f77SDag-Erling Smørgrav s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 3828b7579f77SDag-Erling Smørgrav fi 3829b7579f77SDag-Erling Smørgrav exit $? 3830b7579f77SDag-Erling Smørgravfi 3831b7579f77SDag-Erling Smørgrav 3832b7579f77SDag-Erling Smørgrav 3833b7579f77SDag-Erling Smørgrav# func_mode_execute arg... 3834b7579f77SDag-Erling Smørgravfunc_mode_execute () 3835b7579f77SDag-Erling Smørgrav{ 3836f61ef7f6SDag-Erling Smørgrav $debug_cmd 3837f61ef7f6SDag-Erling Smørgrav 3838b7579f77SDag-Erling Smørgrav # The first argument is the command name. 3839f61ef7f6SDag-Erling Smørgrav cmd=$nonopt 3840b7579f77SDag-Erling Smørgrav test -z "$cmd" && \ 3841b7579f77SDag-Erling Smørgrav func_fatal_help "you must specify a COMMAND" 3842b7579f77SDag-Erling Smørgrav 3843b7579f77SDag-Erling Smørgrav # Handle -dlopen flags immediately. 3844b7579f77SDag-Erling Smørgrav for file in $opt_dlopen; do 3845b7579f77SDag-Erling Smørgrav test -f "$file" \ 3846f61ef7f6SDag-Erling Smørgrav || func_fatal_help "'$file' is not a file" 3847b7579f77SDag-Erling Smørgrav 3848b7579f77SDag-Erling Smørgrav dir= 3849b7579f77SDag-Erling Smørgrav case $file in 3850b7579f77SDag-Erling Smørgrav *.la) 3851b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$file" 3852b7579f77SDag-Erling Smørgrav file=$func_resolve_sysroot_result 3853b7579f77SDag-Erling Smørgrav 3854b7579f77SDag-Erling Smørgrav # Check to see that this really is a libtool archive. 3855b7579f77SDag-Erling Smørgrav func_lalib_unsafe_p "$file" \ 3856f61ef7f6SDag-Erling Smørgrav || func_fatal_help "'$lib' is not a valid libtool archive" 3857b7579f77SDag-Erling Smørgrav 3858b7579f77SDag-Erling Smørgrav # Read the libtool library. 3859b7579f77SDag-Erling Smørgrav dlname= 3860b7579f77SDag-Erling Smørgrav library_names= 3861b7579f77SDag-Erling Smørgrav func_source "$file" 3862b7579f77SDag-Erling Smørgrav 3863b7579f77SDag-Erling Smørgrav # Skip this library if it cannot be dlopened. 3864b7579f77SDag-Erling Smørgrav if test -z "$dlname"; then 3865b7579f77SDag-Erling Smørgrav # Warn if it was a shared library. 3866b7579f77SDag-Erling Smørgrav test -n "$library_names" && \ 3867f61ef7f6SDag-Erling Smørgrav func_warning "'$file' was not linked with '-export-dynamic'" 3868b7579f77SDag-Erling Smørgrav continue 3869b7579f77SDag-Erling Smørgrav fi 3870b7579f77SDag-Erling Smørgrav 3871b7579f77SDag-Erling Smørgrav func_dirname "$file" "" "." 3872f61ef7f6SDag-Erling Smørgrav dir=$func_dirname_result 3873b7579f77SDag-Erling Smørgrav 3874b7579f77SDag-Erling Smørgrav if test -f "$dir/$objdir/$dlname"; then 3875b7579f77SDag-Erling Smørgrav func_append dir "/$objdir" 3876b7579f77SDag-Erling Smørgrav else 3877b7579f77SDag-Erling Smørgrav if test ! -f "$dir/$dlname"; then 3878f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" 3879b7579f77SDag-Erling Smørgrav fi 3880b7579f77SDag-Erling Smørgrav fi 3881b7579f77SDag-Erling Smørgrav ;; 3882b7579f77SDag-Erling Smørgrav 3883b7579f77SDag-Erling Smørgrav *.lo) 3884b7579f77SDag-Erling Smørgrav # Just add the directory containing the .lo file. 3885b7579f77SDag-Erling Smørgrav func_dirname "$file" "" "." 3886f61ef7f6SDag-Erling Smørgrav dir=$func_dirname_result 3887b7579f77SDag-Erling Smørgrav ;; 3888b7579f77SDag-Erling Smørgrav 3889b7579f77SDag-Erling Smørgrav *) 3890f61ef7f6SDag-Erling Smørgrav func_warning "'-dlopen' is ignored for non-libtool libraries and objects" 3891b7579f77SDag-Erling Smørgrav continue 3892b7579f77SDag-Erling Smørgrav ;; 3893b7579f77SDag-Erling Smørgrav esac 3894b7579f77SDag-Erling Smørgrav 3895b7579f77SDag-Erling Smørgrav # Get the absolute pathname. 3896b7579f77SDag-Erling Smørgrav absdir=`cd "$dir" && pwd` 3897f61ef7f6SDag-Erling Smørgrav test -n "$absdir" && dir=$absdir 3898b7579f77SDag-Erling Smørgrav 3899b7579f77SDag-Erling Smørgrav # Now add the directory to shlibpath_var. 3900b7579f77SDag-Erling Smørgrav if eval "test -z \"\$$shlibpath_var\""; then 3901b7579f77SDag-Erling Smørgrav eval "$shlibpath_var=\"\$dir\"" 3902b7579f77SDag-Erling Smørgrav else 3903b7579f77SDag-Erling Smørgrav eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 3904b7579f77SDag-Erling Smørgrav fi 3905b7579f77SDag-Erling Smørgrav done 3906b7579f77SDag-Erling Smørgrav 3907b7579f77SDag-Erling Smørgrav # This variable tells wrapper scripts just to set shlibpath_var 3908b7579f77SDag-Erling Smørgrav # rather than running their programs. 3909f61ef7f6SDag-Erling Smørgrav libtool_execute_magic=$magic 3910b7579f77SDag-Erling Smørgrav 3911b7579f77SDag-Erling Smørgrav # Check if any of the arguments is a wrapper script. 3912b7579f77SDag-Erling Smørgrav args= 3913b7579f77SDag-Erling Smørgrav for file 3914b7579f77SDag-Erling Smørgrav do 3915b7579f77SDag-Erling Smørgrav case $file in 3916b7579f77SDag-Erling Smørgrav -* | *.la | *.lo ) ;; 3917b7579f77SDag-Erling Smørgrav *) 3918b7579f77SDag-Erling Smørgrav # Do a test to see if this is really a libtool program. 3919b7579f77SDag-Erling Smørgrav if func_ltwrapper_script_p "$file"; then 3920b7579f77SDag-Erling Smørgrav func_source "$file" 3921b7579f77SDag-Erling Smørgrav # Transform arg to wrapped name. 3922f61ef7f6SDag-Erling Smørgrav file=$progdir/$program 3923b7579f77SDag-Erling Smørgrav elif func_ltwrapper_executable_p "$file"; then 3924b7579f77SDag-Erling Smørgrav func_ltwrapper_scriptname "$file" 3925b7579f77SDag-Erling Smørgrav func_source "$func_ltwrapper_scriptname_result" 3926b7579f77SDag-Erling Smørgrav # Transform arg to wrapped name. 3927f61ef7f6SDag-Erling Smørgrav file=$progdir/$program 3928b7579f77SDag-Erling Smørgrav fi 3929b7579f77SDag-Erling Smørgrav ;; 3930b7579f77SDag-Erling Smørgrav esac 3931b7579f77SDag-Erling Smørgrav # Quote arguments (to preserve shell metacharacters). 3932b7579f77SDag-Erling Smørgrav func_append_quoted args "$file" 3933b7579f77SDag-Erling Smørgrav done 3934b7579f77SDag-Erling Smørgrav 3935f61ef7f6SDag-Erling Smørgrav if $opt_dry_run; then 3936f61ef7f6SDag-Erling Smørgrav # Display what would be done. 3937f61ef7f6SDag-Erling Smørgrav if test -n "$shlibpath_var"; then 3938f61ef7f6SDag-Erling Smørgrav eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 3939f61ef7f6SDag-Erling Smørgrav echo "export $shlibpath_var" 3940f61ef7f6SDag-Erling Smørgrav fi 3941f61ef7f6SDag-Erling Smørgrav $ECHO "$cmd$args" 3942f61ef7f6SDag-Erling Smørgrav exit $EXIT_SUCCESS 3943f61ef7f6SDag-Erling Smørgrav else 3944b7579f77SDag-Erling Smørgrav if test -n "$shlibpath_var"; then 3945b7579f77SDag-Erling Smørgrav # Export the shlibpath_var. 3946b7579f77SDag-Erling Smørgrav eval "export $shlibpath_var" 3947b7579f77SDag-Erling Smørgrav fi 3948b7579f77SDag-Erling Smørgrav 3949b7579f77SDag-Erling Smørgrav # Restore saved environment variables 3950b7579f77SDag-Erling Smørgrav for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 3951b7579f77SDag-Erling Smørgrav do 3952b7579f77SDag-Erling Smørgrav eval "if test \"\${save_$lt_var+set}\" = set; then 3953b7579f77SDag-Erling Smørgrav $lt_var=\$save_$lt_var; export $lt_var 3954b7579f77SDag-Erling Smørgrav else 3955b7579f77SDag-Erling Smørgrav $lt_unset $lt_var 3956b7579f77SDag-Erling Smørgrav fi" 3957b7579f77SDag-Erling Smørgrav done 3958b7579f77SDag-Erling Smørgrav 3959b7579f77SDag-Erling Smørgrav # Now prepare to actually exec the command. 3960f61ef7f6SDag-Erling Smørgrav exec_cmd=\$cmd$args 3961b7579f77SDag-Erling Smørgrav fi 3962b7579f77SDag-Erling Smørgrav} 3963b7579f77SDag-Erling Smørgrav 3964f61ef7f6SDag-Erling Smørgravtest execute = "$opt_mode" && func_mode_execute ${1+"$@"} 3965b7579f77SDag-Erling Smørgrav 3966b7579f77SDag-Erling Smørgrav 3967b7579f77SDag-Erling Smørgrav# func_mode_finish arg... 3968b7579f77SDag-Erling Smørgravfunc_mode_finish () 3969b7579f77SDag-Erling Smørgrav{ 3970f61ef7f6SDag-Erling Smørgrav $debug_cmd 3971f61ef7f6SDag-Erling Smørgrav 3972b7579f77SDag-Erling Smørgrav libs= 3973b7579f77SDag-Erling Smørgrav libdirs= 3974b7579f77SDag-Erling Smørgrav admincmds= 3975b7579f77SDag-Erling Smørgrav 3976b7579f77SDag-Erling Smørgrav for opt in "$nonopt" ${1+"$@"} 3977b7579f77SDag-Erling Smørgrav do 3978b7579f77SDag-Erling Smørgrav if test -d "$opt"; then 3979b7579f77SDag-Erling Smørgrav func_append libdirs " $opt" 3980b7579f77SDag-Erling Smørgrav 3981b7579f77SDag-Erling Smørgrav elif test -f "$opt"; then 3982b7579f77SDag-Erling Smørgrav if func_lalib_unsafe_p "$opt"; then 3983b7579f77SDag-Erling Smørgrav func_append libs " $opt" 3984b7579f77SDag-Erling Smørgrav else 3985f61ef7f6SDag-Erling Smørgrav func_warning "'$opt' is not a valid libtool archive" 3986b7579f77SDag-Erling Smørgrav fi 3987b7579f77SDag-Erling Smørgrav 3988b7579f77SDag-Erling Smørgrav else 3989f61ef7f6SDag-Erling Smørgrav func_fatal_error "invalid argument '$opt'" 3990b7579f77SDag-Erling Smørgrav fi 3991b7579f77SDag-Erling Smørgrav done 3992b7579f77SDag-Erling Smørgrav 3993b7579f77SDag-Erling Smørgrav if test -n "$libs"; then 3994b7579f77SDag-Erling Smørgrav if test -n "$lt_sysroot"; then 3995b7579f77SDag-Erling Smørgrav sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 3996b7579f77SDag-Erling Smørgrav sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 3997b7579f77SDag-Erling Smørgrav else 3998b7579f77SDag-Erling Smørgrav sysroot_cmd= 3999b7579f77SDag-Erling Smørgrav fi 4000b7579f77SDag-Erling Smørgrav 4001b7579f77SDag-Erling Smørgrav # Remove sysroot references 4002b7579f77SDag-Erling Smørgrav if $opt_dry_run; then 4003b7579f77SDag-Erling Smørgrav for lib in $libs; do 4004f61ef7f6SDag-Erling Smørgrav echo "removing references to $lt_sysroot and '=' prefixes from $lib" 4005b7579f77SDag-Erling Smørgrav done 4006b7579f77SDag-Erling Smørgrav else 4007b7579f77SDag-Erling Smørgrav tmpdir=`func_mktempdir` 4008b7579f77SDag-Erling Smørgrav for lib in $libs; do 4009f61ef7f6SDag-Erling Smørgrav $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 4010b7579f77SDag-Erling Smørgrav > $tmpdir/tmp-la 4011b7579f77SDag-Erling Smørgrav mv -f $tmpdir/tmp-la $lib 4012b7579f77SDag-Erling Smørgrav done 4013b7579f77SDag-Erling Smørgrav ${RM}r "$tmpdir" 4014b7579f77SDag-Erling Smørgrav fi 4015b7579f77SDag-Erling Smørgrav fi 4016b7579f77SDag-Erling Smørgrav 4017b7579f77SDag-Erling Smørgrav if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4018b7579f77SDag-Erling Smørgrav for libdir in $libdirs; do 4019b7579f77SDag-Erling Smørgrav if test -n "$finish_cmds"; then 4020b7579f77SDag-Erling Smørgrav # Do each command in the finish commands. 4021b7579f77SDag-Erling Smørgrav func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 4022b7579f77SDag-Erling Smørgrav'"$cmd"'"' 4023b7579f77SDag-Erling Smørgrav fi 4024b7579f77SDag-Erling Smørgrav if test -n "$finish_eval"; then 4025b7579f77SDag-Erling Smørgrav # Do the single finish_eval. 4026b7579f77SDag-Erling Smørgrav eval cmds=\"$finish_eval\" 4027b7579f77SDag-Erling Smørgrav $opt_dry_run || eval "$cmds" || func_append admincmds " 4028b7579f77SDag-Erling Smørgrav $cmds" 4029b7579f77SDag-Erling Smørgrav fi 4030b7579f77SDag-Erling Smørgrav done 4031b7579f77SDag-Erling Smørgrav fi 4032b7579f77SDag-Erling Smørgrav 4033b7579f77SDag-Erling Smørgrav # Exit here if they wanted silent mode. 4034f61ef7f6SDag-Erling Smørgrav $opt_quiet && exit $EXIT_SUCCESS 4035b7579f77SDag-Erling Smørgrav 4036b7579f77SDag-Erling Smørgrav if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 4037b7579f77SDag-Erling Smørgrav echo "----------------------------------------------------------------------" 4038b7579f77SDag-Erling Smørgrav echo "Libraries have been installed in:" 4039b7579f77SDag-Erling Smørgrav for libdir in $libdirs; do 4040b7579f77SDag-Erling Smørgrav $ECHO " $libdir" 4041b7579f77SDag-Erling Smørgrav done 4042b7579f77SDag-Erling Smørgrav echo 4043b7579f77SDag-Erling Smørgrav echo "If you ever happen to want to link against installed libraries" 4044b7579f77SDag-Erling Smørgrav echo "in a given directory, LIBDIR, you must either use libtool, and" 4045f61ef7f6SDag-Erling Smørgrav echo "specify the full pathname of the library, or use the '-LLIBDIR'" 4046b7579f77SDag-Erling Smørgrav echo "flag during linking and do at least one of the following:" 4047b7579f77SDag-Erling Smørgrav if test -n "$shlibpath_var"; then 4048f61ef7f6SDag-Erling Smørgrav echo " - add LIBDIR to the '$shlibpath_var' environment variable" 4049b7579f77SDag-Erling Smørgrav echo " during execution" 4050b7579f77SDag-Erling Smørgrav fi 4051b7579f77SDag-Erling Smørgrav if test -n "$runpath_var"; then 4052f61ef7f6SDag-Erling Smørgrav echo " - add LIBDIR to the '$runpath_var' environment variable" 4053b7579f77SDag-Erling Smørgrav echo " during linking" 4054b7579f77SDag-Erling Smørgrav fi 4055b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_flag_spec"; then 4056b7579f77SDag-Erling Smørgrav libdir=LIBDIR 4057b7579f77SDag-Erling Smørgrav eval flag=\"$hardcode_libdir_flag_spec\" 4058b7579f77SDag-Erling Smørgrav 4059f61ef7f6SDag-Erling Smørgrav $ECHO " - use the '$flag' linker flag" 4060b7579f77SDag-Erling Smørgrav fi 4061b7579f77SDag-Erling Smørgrav if test -n "$admincmds"; then 4062b7579f77SDag-Erling Smørgrav $ECHO " - have your system administrator run these commands:$admincmds" 4063b7579f77SDag-Erling Smørgrav fi 4064b7579f77SDag-Erling Smørgrav if test -f /etc/ld.so.conf; then 4065f61ef7f6SDag-Erling Smørgrav echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" 4066b7579f77SDag-Erling Smørgrav fi 4067b7579f77SDag-Erling Smørgrav echo 4068b7579f77SDag-Erling Smørgrav 4069b7579f77SDag-Erling Smørgrav echo "See any operating system documentation about shared libraries for" 4070b7579f77SDag-Erling Smørgrav case $host in 4071b7579f77SDag-Erling Smørgrav solaris2.[6789]|solaris2.1[0-9]) 4072b7579f77SDag-Erling Smørgrav echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 4073b7579f77SDag-Erling Smørgrav echo "pages." 4074b7579f77SDag-Erling Smørgrav ;; 4075b7579f77SDag-Erling Smørgrav *) 4076b7579f77SDag-Erling Smørgrav echo "more information, such as the ld(1) and ld.so(8) manual pages." 4077b7579f77SDag-Erling Smørgrav ;; 4078b7579f77SDag-Erling Smørgrav esac 4079b7579f77SDag-Erling Smørgrav echo "----------------------------------------------------------------------" 4080b7579f77SDag-Erling Smørgrav fi 4081b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 4082b7579f77SDag-Erling Smørgrav} 4083b7579f77SDag-Erling Smørgrav 4084f61ef7f6SDag-Erling Smørgravtest finish = "$opt_mode" && func_mode_finish ${1+"$@"} 4085b7579f77SDag-Erling Smørgrav 4086b7579f77SDag-Erling Smørgrav 4087b7579f77SDag-Erling Smørgrav# func_mode_install arg... 4088b7579f77SDag-Erling Smørgravfunc_mode_install () 4089b7579f77SDag-Erling Smørgrav{ 4090f61ef7f6SDag-Erling Smørgrav $debug_cmd 4091f61ef7f6SDag-Erling Smørgrav 4092b7579f77SDag-Erling Smørgrav # There may be an optional sh(1) argument at the beginning of 4093b7579f77SDag-Erling Smørgrav # install_prog (especially on Windows NT). 4094f61ef7f6SDag-Erling Smørgrav if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || 4095b7579f77SDag-Erling Smørgrav # Allow the use of GNU shtool's install command. 4096f61ef7f6SDag-Erling Smørgrav case $nonopt in *shtool*) :;; *) false;; esac 4097f61ef7f6SDag-Erling Smørgrav then 4098b7579f77SDag-Erling Smørgrav # Aesthetically quote it. 4099*46d2f618SCy Schubert func_quote_for_eval "$nonopt" 4100*46d2f618SCy Schubert install_prog="$func_quote_for_eval_result " 4101b7579f77SDag-Erling Smørgrav arg=$1 4102b7579f77SDag-Erling Smørgrav shift 4103b7579f77SDag-Erling Smørgrav else 4104b7579f77SDag-Erling Smørgrav install_prog= 4105b7579f77SDag-Erling Smørgrav arg=$nonopt 4106b7579f77SDag-Erling Smørgrav fi 4107b7579f77SDag-Erling Smørgrav 4108b7579f77SDag-Erling Smørgrav # The real first argument should be the name of the installation program. 4109b7579f77SDag-Erling Smørgrav # Aesthetically quote it. 4110*46d2f618SCy Schubert func_quote_for_eval "$arg" 4111*46d2f618SCy Schubert func_append install_prog "$func_quote_for_eval_result" 4112b7579f77SDag-Erling Smørgrav install_shared_prog=$install_prog 4113b7579f77SDag-Erling Smørgrav case " $install_prog " in 4114b7579f77SDag-Erling Smørgrav *[\\\ /]cp\ *) install_cp=: ;; 4115b7579f77SDag-Erling Smørgrav *) install_cp=false ;; 4116b7579f77SDag-Erling Smørgrav esac 4117b7579f77SDag-Erling Smørgrav 4118b7579f77SDag-Erling Smørgrav # We need to accept at least all the BSD install flags. 4119b7579f77SDag-Erling Smørgrav dest= 4120b7579f77SDag-Erling Smørgrav files= 4121b7579f77SDag-Erling Smørgrav opts= 4122b7579f77SDag-Erling Smørgrav prev= 4123b7579f77SDag-Erling Smørgrav install_type= 4124f61ef7f6SDag-Erling Smørgrav isdir=false 4125b7579f77SDag-Erling Smørgrav stripme= 4126b7579f77SDag-Erling Smørgrav no_mode=: 4127b7579f77SDag-Erling Smørgrav for arg 4128b7579f77SDag-Erling Smørgrav do 4129b7579f77SDag-Erling Smørgrav arg2= 4130b7579f77SDag-Erling Smørgrav if test -n "$dest"; then 4131b7579f77SDag-Erling Smørgrav func_append files " $dest" 4132b7579f77SDag-Erling Smørgrav dest=$arg 4133b7579f77SDag-Erling Smørgrav continue 4134b7579f77SDag-Erling Smørgrav fi 4135b7579f77SDag-Erling Smørgrav 4136b7579f77SDag-Erling Smørgrav case $arg in 4137f61ef7f6SDag-Erling Smørgrav -d) isdir=: ;; 4138b7579f77SDag-Erling Smørgrav -f) 4139b7579f77SDag-Erling Smørgrav if $install_cp; then :; else 4140b7579f77SDag-Erling Smørgrav prev=$arg 4141b7579f77SDag-Erling Smørgrav fi 4142b7579f77SDag-Erling Smørgrav ;; 4143b7579f77SDag-Erling Smørgrav -g | -m | -o) 4144b7579f77SDag-Erling Smørgrav prev=$arg 4145b7579f77SDag-Erling Smørgrav ;; 4146b7579f77SDag-Erling Smørgrav -s) 4147b7579f77SDag-Erling Smørgrav stripme=" -s" 4148b7579f77SDag-Erling Smørgrav continue 4149b7579f77SDag-Erling Smørgrav ;; 4150b7579f77SDag-Erling Smørgrav -*) 4151b7579f77SDag-Erling Smørgrav ;; 4152b7579f77SDag-Erling Smørgrav *) 4153b7579f77SDag-Erling Smørgrav # If the previous option needed an argument, then skip it. 4154b7579f77SDag-Erling Smørgrav if test -n "$prev"; then 4155f61ef7f6SDag-Erling Smørgrav if test X-m = "X$prev" && test -n "$install_override_mode"; then 4156b7579f77SDag-Erling Smørgrav arg2=$install_override_mode 4157b7579f77SDag-Erling Smørgrav no_mode=false 4158b7579f77SDag-Erling Smørgrav fi 4159b7579f77SDag-Erling Smørgrav prev= 4160b7579f77SDag-Erling Smørgrav else 4161b7579f77SDag-Erling Smørgrav dest=$arg 4162b7579f77SDag-Erling Smørgrav continue 4163b7579f77SDag-Erling Smørgrav fi 4164b7579f77SDag-Erling Smørgrav ;; 4165b7579f77SDag-Erling Smørgrav esac 4166b7579f77SDag-Erling Smørgrav 4167b7579f77SDag-Erling Smørgrav # Aesthetically quote the argument. 4168*46d2f618SCy Schubert func_quote_for_eval "$arg" 4169*46d2f618SCy Schubert func_append install_prog " $func_quote_for_eval_result" 4170b7579f77SDag-Erling Smørgrav if test -n "$arg2"; then 4171*46d2f618SCy Schubert func_quote_for_eval "$arg2" 4172b7579f77SDag-Erling Smørgrav fi 4173*46d2f618SCy Schubert func_append install_shared_prog " $func_quote_for_eval_result" 4174b7579f77SDag-Erling Smørgrav done 4175b7579f77SDag-Erling Smørgrav 4176b7579f77SDag-Erling Smørgrav test -z "$install_prog" && \ 4177b7579f77SDag-Erling Smørgrav func_fatal_help "you must specify an install program" 4178b7579f77SDag-Erling Smørgrav 4179b7579f77SDag-Erling Smørgrav test -n "$prev" && \ 4180f61ef7f6SDag-Erling Smørgrav func_fatal_help "the '$prev' option requires an argument" 4181b7579f77SDag-Erling Smørgrav 4182b7579f77SDag-Erling Smørgrav if test -n "$install_override_mode" && $no_mode; then 4183b7579f77SDag-Erling Smørgrav if $install_cp; then :; else 4184*46d2f618SCy Schubert func_quote_for_eval "$install_override_mode" 4185*46d2f618SCy Schubert func_append install_shared_prog " -m $func_quote_for_eval_result" 4186b7579f77SDag-Erling Smørgrav fi 4187b7579f77SDag-Erling Smørgrav fi 4188b7579f77SDag-Erling Smørgrav 4189b7579f77SDag-Erling Smørgrav if test -z "$files"; then 4190b7579f77SDag-Erling Smørgrav if test -z "$dest"; then 4191b7579f77SDag-Erling Smørgrav func_fatal_help "no file or destination specified" 4192b7579f77SDag-Erling Smørgrav else 4193b7579f77SDag-Erling Smørgrav func_fatal_help "you must specify a destination" 4194b7579f77SDag-Erling Smørgrav fi 4195b7579f77SDag-Erling Smørgrav fi 4196b7579f77SDag-Erling Smørgrav 4197b7579f77SDag-Erling Smørgrav # Strip any trailing slash from the destination. 4198b7579f77SDag-Erling Smørgrav func_stripname '' '/' "$dest" 4199b7579f77SDag-Erling Smørgrav dest=$func_stripname_result 4200b7579f77SDag-Erling Smørgrav 4201b7579f77SDag-Erling Smørgrav # Check to see that the destination is a directory. 4202f61ef7f6SDag-Erling Smørgrav test -d "$dest" && isdir=: 4203f61ef7f6SDag-Erling Smørgrav if $isdir; then 4204f61ef7f6SDag-Erling Smørgrav destdir=$dest 4205b7579f77SDag-Erling Smørgrav destname= 4206b7579f77SDag-Erling Smørgrav else 4207b7579f77SDag-Erling Smørgrav func_dirname_and_basename "$dest" "" "." 4208f61ef7f6SDag-Erling Smørgrav destdir=$func_dirname_result 4209f61ef7f6SDag-Erling Smørgrav destname=$func_basename_result 4210b7579f77SDag-Erling Smørgrav 4211b7579f77SDag-Erling Smørgrav # Not a directory, so check to see that there is only one file specified. 4212b7579f77SDag-Erling Smørgrav set dummy $files; shift 4213b7579f77SDag-Erling Smørgrav test "$#" -gt 1 && \ 4214f61ef7f6SDag-Erling Smørgrav func_fatal_help "'$dest' is not a directory" 4215b7579f77SDag-Erling Smørgrav fi 4216b7579f77SDag-Erling Smørgrav case $destdir in 4217b7579f77SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) ;; 4218b7579f77SDag-Erling Smørgrav *) 4219b7579f77SDag-Erling Smørgrav for file in $files; do 4220b7579f77SDag-Erling Smørgrav case $file in 4221b7579f77SDag-Erling Smørgrav *.lo) ;; 4222b7579f77SDag-Erling Smørgrav *) 4223f61ef7f6SDag-Erling Smørgrav func_fatal_help "'$destdir' must be an absolute directory name" 4224b7579f77SDag-Erling Smørgrav ;; 4225b7579f77SDag-Erling Smørgrav esac 4226b7579f77SDag-Erling Smørgrav done 4227b7579f77SDag-Erling Smørgrav ;; 4228b7579f77SDag-Erling Smørgrav esac 4229b7579f77SDag-Erling Smørgrav 4230b7579f77SDag-Erling Smørgrav # This variable tells wrapper scripts just to set variables rather 4231b7579f77SDag-Erling Smørgrav # than running their programs. 4232f61ef7f6SDag-Erling Smørgrav libtool_install_magic=$magic 4233b7579f77SDag-Erling Smørgrav 4234b7579f77SDag-Erling Smørgrav staticlibs= 4235b7579f77SDag-Erling Smørgrav future_libdirs= 4236b7579f77SDag-Erling Smørgrav current_libdirs= 4237b7579f77SDag-Erling Smørgrav for file in $files; do 4238b7579f77SDag-Erling Smørgrav 4239b7579f77SDag-Erling Smørgrav # Do each installation. 4240b7579f77SDag-Erling Smørgrav case $file in 4241b7579f77SDag-Erling Smørgrav *.$libext) 4242b7579f77SDag-Erling Smørgrav # Do the static libraries later. 4243b7579f77SDag-Erling Smørgrav func_append staticlibs " $file" 4244b7579f77SDag-Erling Smørgrav ;; 4245b7579f77SDag-Erling Smørgrav 4246b7579f77SDag-Erling Smørgrav *.la) 4247b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$file" 4248b7579f77SDag-Erling Smørgrav file=$func_resolve_sysroot_result 4249b7579f77SDag-Erling Smørgrav 4250b7579f77SDag-Erling Smørgrav # Check to see that this really is a libtool archive. 4251b7579f77SDag-Erling Smørgrav func_lalib_unsafe_p "$file" \ 4252f61ef7f6SDag-Erling Smørgrav || func_fatal_help "'$file' is not a valid libtool archive" 4253b7579f77SDag-Erling Smørgrav 4254b7579f77SDag-Erling Smørgrav library_names= 4255b7579f77SDag-Erling Smørgrav old_library= 4256b7579f77SDag-Erling Smørgrav relink_command= 4257b7579f77SDag-Erling Smørgrav func_source "$file" 4258b7579f77SDag-Erling Smørgrav 4259b7579f77SDag-Erling Smørgrav # Add the libdir to current_libdirs if it is the destination. 4260b7579f77SDag-Erling Smørgrav if test "X$destdir" = "X$libdir"; then 4261b7579f77SDag-Erling Smørgrav case "$current_libdirs " in 4262b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 4263b7579f77SDag-Erling Smørgrav *) func_append current_libdirs " $libdir" ;; 4264b7579f77SDag-Erling Smørgrav esac 4265b7579f77SDag-Erling Smørgrav else 4266b7579f77SDag-Erling Smørgrav # Note the libdir as a future libdir. 4267b7579f77SDag-Erling Smørgrav case "$future_libdirs " in 4268b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 4269b7579f77SDag-Erling Smørgrav *) func_append future_libdirs " $libdir" ;; 4270b7579f77SDag-Erling Smørgrav esac 4271b7579f77SDag-Erling Smørgrav fi 4272b7579f77SDag-Erling Smørgrav 4273b7579f77SDag-Erling Smørgrav func_dirname "$file" "/" "" 4274f61ef7f6SDag-Erling Smørgrav dir=$func_dirname_result 4275b7579f77SDag-Erling Smørgrav func_append dir "$objdir" 4276b7579f77SDag-Erling Smørgrav 4277b7579f77SDag-Erling Smørgrav if test -n "$relink_command"; then 4278b7579f77SDag-Erling Smørgrav # Determine the prefix the user has applied to our future dir. 4279b7579f77SDag-Erling Smørgrav inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 4280b7579f77SDag-Erling Smørgrav 4281b7579f77SDag-Erling Smørgrav # Don't allow the user to place us outside of our expected 4282b7579f77SDag-Erling Smørgrav # location b/c this prevents finding dependent libraries that 4283b7579f77SDag-Erling Smørgrav # are installed to the same prefix. 4284b7579f77SDag-Erling Smørgrav # At present, this check doesn't affect windows .dll's that 4285b7579f77SDag-Erling Smørgrav # are installed into $libdir/../bin (currently, that works fine) 4286b7579f77SDag-Erling Smørgrav # but it's something to keep an eye on. 4287b7579f77SDag-Erling Smørgrav test "$inst_prefix_dir" = "$destdir" && \ 4288f61ef7f6SDag-Erling Smørgrav func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" 4289b7579f77SDag-Erling Smørgrav 4290b7579f77SDag-Erling Smørgrav if test -n "$inst_prefix_dir"; then 4291b7579f77SDag-Erling Smørgrav # Stick the inst_prefix_dir data into the link command. 4292b7579f77SDag-Erling Smørgrav relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 4293b7579f77SDag-Erling Smørgrav else 4294b7579f77SDag-Erling Smørgrav relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 4295b7579f77SDag-Erling Smørgrav fi 4296b7579f77SDag-Erling Smørgrav 4297f61ef7f6SDag-Erling Smørgrav func_warning "relinking '$file'" 4298b7579f77SDag-Erling Smørgrav func_show_eval "$relink_command" \ 4299f61ef7f6SDag-Erling Smørgrav 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' 4300b7579f77SDag-Erling Smørgrav fi 4301b7579f77SDag-Erling Smørgrav 4302b7579f77SDag-Erling Smørgrav # See the names of the shared library. 4303b7579f77SDag-Erling Smørgrav set dummy $library_names; shift 4304b7579f77SDag-Erling Smørgrav if test -n "$1"; then 4305f61ef7f6SDag-Erling Smørgrav realname=$1 4306b7579f77SDag-Erling Smørgrav shift 4307b7579f77SDag-Erling Smørgrav 4308f61ef7f6SDag-Erling Smørgrav srcname=$realname 4309f61ef7f6SDag-Erling Smørgrav test -n "$relink_command" && srcname=${realname}T 4310b7579f77SDag-Erling Smørgrav 4311b7579f77SDag-Erling Smørgrav # Install the shared library and build the symlinks. 4312b7579f77SDag-Erling Smørgrav func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 4313b7579f77SDag-Erling Smørgrav 'exit $?' 4314f61ef7f6SDag-Erling Smørgrav tstripme=$stripme 4315b7579f77SDag-Erling Smørgrav case $host_os in 4316b7579f77SDag-Erling Smørgrav cygwin* | mingw* | pw32* | cegcc*) 4317b7579f77SDag-Erling Smørgrav case $realname in 4318b7579f77SDag-Erling Smørgrav *.dll.a) 4319f61ef7f6SDag-Erling Smørgrav tstripme= 4320f61ef7f6SDag-Erling Smørgrav ;; 4321f61ef7f6SDag-Erling Smørgrav esac 4322f61ef7f6SDag-Erling Smørgrav ;; 4323f61ef7f6SDag-Erling Smørgrav os2*) 4324f61ef7f6SDag-Erling Smørgrav case $realname in 4325f61ef7f6SDag-Erling Smørgrav *_dll.a) 4326f61ef7f6SDag-Erling Smørgrav tstripme= 4327b7579f77SDag-Erling Smørgrav ;; 4328b7579f77SDag-Erling Smørgrav esac 4329b7579f77SDag-Erling Smørgrav ;; 4330b7579f77SDag-Erling Smørgrav esac 4331b7579f77SDag-Erling Smørgrav if test -n "$tstripme" && test -n "$striplib"; then 4332b7579f77SDag-Erling Smørgrav func_show_eval "$striplib $destdir/$realname" 'exit $?' 4333b7579f77SDag-Erling Smørgrav fi 4334b7579f77SDag-Erling Smørgrav 4335b7579f77SDag-Erling Smørgrav if test "$#" -gt 0; then 4336b7579f77SDag-Erling Smørgrav # Delete the old symlinks, and create new ones. 4337f61ef7f6SDag-Erling Smørgrav # Try 'ln -sf' first, because the 'ln' binary might depend on 4338b7579f77SDag-Erling Smørgrav # the symlink we replace! Solaris /bin/ln does not understand -f, 4339b7579f77SDag-Erling Smørgrav # so we also need to try rm && ln -s. 4340b7579f77SDag-Erling Smørgrav for linkname 4341b7579f77SDag-Erling Smørgrav do 4342b7579f77SDag-Erling Smørgrav test "$linkname" != "$realname" \ 4343b7579f77SDag-Erling Smørgrav && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 4344b7579f77SDag-Erling Smørgrav done 4345b7579f77SDag-Erling Smørgrav fi 4346b7579f77SDag-Erling Smørgrav 4347b7579f77SDag-Erling Smørgrav # Do each command in the postinstall commands. 4348f61ef7f6SDag-Erling Smørgrav lib=$destdir/$realname 4349b7579f77SDag-Erling Smørgrav func_execute_cmds "$postinstall_cmds" 'exit $?' 4350b7579f77SDag-Erling Smørgrav fi 4351b7579f77SDag-Erling Smørgrav 4352b7579f77SDag-Erling Smørgrav # Install the pseudo-library for information purposes. 4353b7579f77SDag-Erling Smørgrav func_basename "$file" 4354f61ef7f6SDag-Erling Smørgrav name=$func_basename_result 4355f61ef7f6SDag-Erling Smørgrav instname=$dir/${name}i 4356b7579f77SDag-Erling Smørgrav func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 4357b7579f77SDag-Erling Smørgrav 4358b7579f77SDag-Erling Smørgrav # Maybe install the static library, too. 4359b7579f77SDag-Erling Smørgrav test -n "$old_library" && func_append staticlibs " $dir/$old_library" 4360b7579f77SDag-Erling Smørgrav ;; 4361b7579f77SDag-Erling Smørgrav 4362b7579f77SDag-Erling Smørgrav *.lo) 4363b7579f77SDag-Erling Smørgrav # Install (i.e. copy) a libtool object. 4364b7579f77SDag-Erling Smørgrav 4365b7579f77SDag-Erling Smørgrav # Figure out destination file name, if it wasn't already specified. 4366b7579f77SDag-Erling Smørgrav if test -n "$destname"; then 4367f61ef7f6SDag-Erling Smørgrav destfile=$destdir/$destname 4368b7579f77SDag-Erling Smørgrav else 4369b7579f77SDag-Erling Smørgrav func_basename "$file" 4370f61ef7f6SDag-Erling Smørgrav destfile=$func_basename_result 4371f61ef7f6SDag-Erling Smørgrav destfile=$destdir/$destfile 4372b7579f77SDag-Erling Smørgrav fi 4373b7579f77SDag-Erling Smørgrav 4374b7579f77SDag-Erling Smørgrav # Deduce the name of the destination old-style object file. 4375b7579f77SDag-Erling Smørgrav case $destfile in 4376b7579f77SDag-Erling Smørgrav *.lo) 4377b7579f77SDag-Erling Smørgrav func_lo2o "$destfile" 4378b7579f77SDag-Erling Smørgrav staticdest=$func_lo2o_result 4379b7579f77SDag-Erling Smørgrav ;; 4380b7579f77SDag-Erling Smørgrav *.$objext) 4381f61ef7f6SDag-Erling Smørgrav staticdest=$destfile 4382b7579f77SDag-Erling Smørgrav destfile= 4383b7579f77SDag-Erling Smørgrav ;; 4384b7579f77SDag-Erling Smørgrav *) 4385f61ef7f6SDag-Erling Smørgrav func_fatal_help "cannot copy a libtool object to '$destfile'" 4386b7579f77SDag-Erling Smørgrav ;; 4387b7579f77SDag-Erling Smørgrav esac 4388b7579f77SDag-Erling Smørgrav 4389b7579f77SDag-Erling Smørgrav # Install the libtool object if requested. 4390b7579f77SDag-Erling Smørgrav test -n "$destfile" && \ 4391b7579f77SDag-Erling Smørgrav func_show_eval "$install_prog $file $destfile" 'exit $?' 4392b7579f77SDag-Erling Smørgrav 4393b7579f77SDag-Erling Smørgrav # Install the old object if enabled. 4394f61ef7f6SDag-Erling Smørgrav if test yes = "$build_old_libs"; then 4395b7579f77SDag-Erling Smørgrav # Deduce the name of the old-style object file. 4396b7579f77SDag-Erling Smørgrav func_lo2o "$file" 4397b7579f77SDag-Erling Smørgrav staticobj=$func_lo2o_result 4398b7579f77SDag-Erling Smørgrav func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 4399b7579f77SDag-Erling Smørgrav fi 4400b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 4401b7579f77SDag-Erling Smørgrav ;; 4402b7579f77SDag-Erling Smørgrav 4403b7579f77SDag-Erling Smørgrav *) 4404b7579f77SDag-Erling Smørgrav # Figure out destination file name, if it wasn't already specified. 4405b7579f77SDag-Erling Smørgrav if test -n "$destname"; then 4406f61ef7f6SDag-Erling Smørgrav destfile=$destdir/$destname 4407b7579f77SDag-Erling Smørgrav else 4408b7579f77SDag-Erling Smørgrav func_basename "$file" 4409f61ef7f6SDag-Erling Smørgrav destfile=$func_basename_result 4410f61ef7f6SDag-Erling Smørgrav destfile=$destdir/$destfile 4411b7579f77SDag-Erling Smørgrav fi 4412b7579f77SDag-Erling Smørgrav 4413b7579f77SDag-Erling Smørgrav # If the file is missing, and there is a .exe on the end, strip it 4414b7579f77SDag-Erling Smørgrav # because it is most likely a libtool script we actually want to 4415b7579f77SDag-Erling Smørgrav # install 4416f61ef7f6SDag-Erling Smørgrav stripped_ext= 4417b7579f77SDag-Erling Smørgrav case $file in 4418b7579f77SDag-Erling Smørgrav *.exe) 4419b7579f77SDag-Erling Smørgrav if test ! -f "$file"; then 4420b7579f77SDag-Erling Smørgrav func_stripname '' '.exe' "$file" 4421b7579f77SDag-Erling Smørgrav file=$func_stripname_result 4422f61ef7f6SDag-Erling Smørgrav stripped_ext=.exe 4423b7579f77SDag-Erling Smørgrav fi 4424b7579f77SDag-Erling Smørgrav ;; 4425b7579f77SDag-Erling Smørgrav esac 4426b7579f77SDag-Erling Smørgrav 4427b7579f77SDag-Erling Smørgrav # Do a test to see if this is really a libtool program. 4428b7579f77SDag-Erling Smørgrav case $host in 4429b7579f77SDag-Erling Smørgrav *cygwin* | *mingw*) 4430b7579f77SDag-Erling Smørgrav if func_ltwrapper_executable_p "$file"; then 4431b7579f77SDag-Erling Smørgrav func_ltwrapper_scriptname "$file" 4432b7579f77SDag-Erling Smørgrav wrapper=$func_ltwrapper_scriptname_result 4433b7579f77SDag-Erling Smørgrav else 4434b7579f77SDag-Erling Smørgrav func_stripname '' '.exe' "$file" 4435b7579f77SDag-Erling Smørgrav wrapper=$func_stripname_result 4436b7579f77SDag-Erling Smørgrav fi 4437b7579f77SDag-Erling Smørgrav ;; 4438b7579f77SDag-Erling Smørgrav *) 4439b7579f77SDag-Erling Smørgrav wrapper=$file 4440b7579f77SDag-Erling Smørgrav ;; 4441b7579f77SDag-Erling Smørgrav esac 4442b7579f77SDag-Erling Smørgrav if func_ltwrapper_script_p "$wrapper"; then 4443b7579f77SDag-Erling Smørgrav notinst_deplibs= 4444b7579f77SDag-Erling Smørgrav relink_command= 4445b7579f77SDag-Erling Smørgrav 4446b7579f77SDag-Erling Smørgrav func_source "$wrapper" 4447b7579f77SDag-Erling Smørgrav 4448b7579f77SDag-Erling Smørgrav # Check the variables that should have been set. 4449b7579f77SDag-Erling Smørgrav test -z "$generated_by_libtool_version" && \ 4450f61ef7f6SDag-Erling Smørgrav func_fatal_error "invalid libtool wrapper script '$wrapper'" 4451b7579f77SDag-Erling Smørgrav 4452f61ef7f6SDag-Erling Smørgrav finalize=: 4453b7579f77SDag-Erling Smørgrav for lib in $notinst_deplibs; do 4454b7579f77SDag-Erling Smørgrav # Check to see that each library is installed. 4455b7579f77SDag-Erling Smørgrav libdir= 4456b7579f77SDag-Erling Smørgrav if test -f "$lib"; then 4457b7579f77SDag-Erling Smørgrav func_source "$lib" 4458b7579f77SDag-Erling Smørgrav fi 4459f61ef7f6SDag-Erling Smørgrav libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` 4460b7579f77SDag-Erling Smørgrav if test -n "$libdir" && test ! -f "$libfile"; then 4461f61ef7f6SDag-Erling Smørgrav func_warning "'$lib' has not been installed in '$libdir'" 4462f61ef7f6SDag-Erling Smørgrav finalize=false 4463b7579f77SDag-Erling Smørgrav fi 4464b7579f77SDag-Erling Smørgrav done 4465b7579f77SDag-Erling Smørgrav 4466b7579f77SDag-Erling Smørgrav relink_command= 4467b7579f77SDag-Erling Smørgrav func_source "$wrapper" 4468b7579f77SDag-Erling Smørgrav 4469b7579f77SDag-Erling Smørgrav outputname= 4470f61ef7f6SDag-Erling Smørgrav if test no = "$fast_install" && test -n "$relink_command"; then 4471b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4472f61ef7f6SDag-Erling Smørgrav if $finalize; then 4473b7579f77SDag-Erling Smørgrav tmpdir=`func_mktempdir` 4474b7579f77SDag-Erling Smørgrav func_basename "$file$stripped_ext" 4475f61ef7f6SDag-Erling Smørgrav file=$func_basename_result 4476f61ef7f6SDag-Erling Smørgrav outputname=$tmpdir/$file 4477b7579f77SDag-Erling Smørgrav # Replace the output file specification. 4478b7579f77SDag-Erling Smørgrav relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 4479b7579f77SDag-Erling Smørgrav 4480f61ef7f6SDag-Erling Smørgrav $opt_quiet || { 4481*46d2f618SCy Schubert func_quote_for_expand "$relink_command" 4482*46d2f618SCy Schubert eval "func_echo $func_quote_for_expand_result" 4483b7579f77SDag-Erling Smørgrav } 4484b7579f77SDag-Erling Smørgrav if eval "$relink_command"; then : 4485b7579f77SDag-Erling Smørgrav else 4486f61ef7f6SDag-Erling Smørgrav func_error "error: relink '$file' with the above command before installing it" 4487b7579f77SDag-Erling Smørgrav $opt_dry_run || ${RM}r "$tmpdir" 4488b7579f77SDag-Erling Smørgrav continue 4489b7579f77SDag-Erling Smørgrav fi 4490f61ef7f6SDag-Erling Smørgrav file=$outputname 4491b7579f77SDag-Erling Smørgrav else 4492f61ef7f6SDag-Erling Smørgrav func_warning "cannot relink '$file'" 4493b7579f77SDag-Erling Smørgrav fi 4494b7579f77SDag-Erling Smørgrav } 4495b7579f77SDag-Erling Smørgrav else 4496b7579f77SDag-Erling Smørgrav # Install the binary that we compiled earlier. 4497b7579f77SDag-Erling Smørgrav file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 4498b7579f77SDag-Erling Smørgrav fi 4499b7579f77SDag-Erling Smørgrav fi 4500b7579f77SDag-Erling Smørgrav 4501b7579f77SDag-Erling Smørgrav # remove .exe since cygwin /usr/bin/install will append another 4502b7579f77SDag-Erling Smørgrav # one anyway 4503b7579f77SDag-Erling Smørgrav case $install_prog,$host in 4504b7579f77SDag-Erling Smørgrav */usr/bin/install*,*cygwin*) 4505b7579f77SDag-Erling Smørgrav case $file:$destfile in 4506b7579f77SDag-Erling Smørgrav *.exe:*.exe) 4507b7579f77SDag-Erling Smørgrav # this is ok 4508b7579f77SDag-Erling Smørgrav ;; 4509b7579f77SDag-Erling Smørgrav *.exe:*) 4510b7579f77SDag-Erling Smørgrav destfile=$destfile.exe 4511b7579f77SDag-Erling Smørgrav ;; 4512b7579f77SDag-Erling Smørgrav *:*.exe) 4513b7579f77SDag-Erling Smørgrav func_stripname '' '.exe' "$destfile" 4514b7579f77SDag-Erling Smørgrav destfile=$func_stripname_result 4515b7579f77SDag-Erling Smørgrav ;; 4516b7579f77SDag-Erling Smørgrav esac 4517b7579f77SDag-Erling Smørgrav ;; 4518b7579f77SDag-Erling Smørgrav esac 4519b7579f77SDag-Erling Smørgrav func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 4520b7579f77SDag-Erling Smørgrav $opt_dry_run || if test -n "$outputname"; then 4521b7579f77SDag-Erling Smørgrav ${RM}r "$tmpdir" 4522b7579f77SDag-Erling Smørgrav fi 4523b7579f77SDag-Erling Smørgrav ;; 4524b7579f77SDag-Erling Smørgrav esac 4525b7579f77SDag-Erling Smørgrav done 4526b7579f77SDag-Erling Smørgrav 4527b7579f77SDag-Erling Smørgrav for file in $staticlibs; do 4528b7579f77SDag-Erling Smørgrav func_basename "$file" 4529f61ef7f6SDag-Erling Smørgrav name=$func_basename_result 4530b7579f77SDag-Erling Smørgrav 4531b7579f77SDag-Erling Smørgrav # Set up the ranlib parameters. 4532f61ef7f6SDag-Erling Smørgrav oldlib=$destdir/$name 45338ed2b524SDag-Erling Smørgrav func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 45348ed2b524SDag-Erling Smørgrav tool_oldlib=$func_to_tool_file_result 4535b7579f77SDag-Erling Smørgrav 4536b7579f77SDag-Erling Smørgrav func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 4537b7579f77SDag-Erling Smørgrav 4538b7579f77SDag-Erling Smørgrav if test -n "$stripme" && test -n "$old_striplib"; then 45398ed2b524SDag-Erling Smørgrav func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 4540b7579f77SDag-Erling Smørgrav fi 4541b7579f77SDag-Erling Smørgrav 4542b7579f77SDag-Erling Smørgrav # Do each command in the postinstall commands. 4543b7579f77SDag-Erling Smørgrav func_execute_cmds "$old_postinstall_cmds" 'exit $?' 4544b7579f77SDag-Erling Smørgrav done 4545b7579f77SDag-Erling Smørgrav 4546b7579f77SDag-Erling Smørgrav test -n "$future_libdirs" && \ 4547f61ef7f6SDag-Erling Smørgrav func_warning "remember to run '$progname --finish$future_libdirs'" 4548b7579f77SDag-Erling Smørgrav 4549b7579f77SDag-Erling Smørgrav if test -n "$current_libdirs"; then 4550b7579f77SDag-Erling Smørgrav # Maybe just do a dry run. 4551b7579f77SDag-Erling Smørgrav $opt_dry_run && current_libdirs=" -n$current_libdirs" 4552f61ef7f6SDag-Erling Smørgrav exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' 4553b7579f77SDag-Erling Smørgrav else 4554b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 4555b7579f77SDag-Erling Smørgrav fi 4556b7579f77SDag-Erling Smørgrav} 4557b7579f77SDag-Erling Smørgrav 4558f61ef7f6SDag-Erling Smørgravtest install = "$opt_mode" && func_mode_install ${1+"$@"} 4559b7579f77SDag-Erling Smørgrav 4560b7579f77SDag-Erling Smørgrav 4561b7579f77SDag-Erling Smørgrav# func_generate_dlsyms outputname originator pic_p 4562b7579f77SDag-Erling Smørgrav# Extract symbols from dlprefiles and create ${outputname}S.o with 4563b7579f77SDag-Erling Smørgrav# a dlpreopen symbol table. 4564b7579f77SDag-Erling Smørgravfunc_generate_dlsyms () 4565b7579f77SDag-Erling Smørgrav{ 4566f61ef7f6SDag-Erling Smørgrav $debug_cmd 4567f61ef7f6SDag-Erling Smørgrav 4568f61ef7f6SDag-Erling Smørgrav my_outputname=$1 4569f61ef7f6SDag-Erling Smørgrav my_originator=$2 4570f61ef7f6SDag-Erling Smørgrav my_pic_p=${3-false} 4571f61ef7f6SDag-Erling Smørgrav my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` 4572b7579f77SDag-Erling Smørgrav my_dlsyms= 4573b7579f77SDag-Erling Smørgrav 4574f61ef7f6SDag-Erling Smørgrav if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 4575b7579f77SDag-Erling Smørgrav if test -n "$NM" && test -n "$global_symbol_pipe"; then 4576f61ef7f6SDag-Erling Smørgrav my_dlsyms=${my_outputname}S.c 4577b7579f77SDag-Erling Smørgrav else 4578b7579f77SDag-Erling Smørgrav func_error "not configured to extract global symbols from dlpreopened files" 4579b7579f77SDag-Erling Smørgrav fi 4580b7579f77SDag-Erling Smørgrav fi 4581b7579f77SDag-Erling Smørgrav 4582b7579f77SDag-Erling Smørgrav if test -n "$my_dlsyms"; then 4583b7579f77SDag-Erling Smørgrav case $my_dlsyms in 4584b7579f77SDag-Erling Smørgrav "") ;; 4585b7579f77SDag-Erling Smørgrav *.c) 4586b7579f77SDag-Erling Smørgrav # Discover the nlist of each of the dlfiles. 4587f61ef7f6SDag-Erling Smørgrav nlist=$output_objdir/$my_outputname.nm 4588b7579f77SDag-Erling Smørgrav 4589b7579f77SDag-Erling Smørgrav func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 4590b7579f77SDag-Erling Smørgrav 4591b7579f77SDag-Erling Smørgrav # Parse the name list into a source file. 4592b7579f77SDag-Erling Smørgrav func_verbose "creating $output_objdir/$my_dlsyms" 4593b7579f77SDag-Erling Smørgrav 4594b7579f77SDag-Erling Smørgrav $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 4595f61ef7f6SDag-Erling Smørgrav/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ 4596f61ef7f6SDag-Erling Smørgrav/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ 4597b7579f77SDag-Erling Smørgrav 4598b7579f77SDag-Erling Smørgrav#ifdef __cplusplus 4599b7579f77SDag-Erling Smørgravextern \"C\" { 4600b7579f77SDag-Erling Smørgrav#endif 4601b7579f77SDag-Erling Smørgrav 4602f61ef7f6SDag-Erling Smørgrav#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 4603b7579f77SDag-Erling Smørgrav#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 4604b7579f77SDag-Erling Smørgrav#endif 4605b7579f77SDag-Erling Smørgrav 4606b7579f77SDag-Erling Smørgrav/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 4607f61ef7f6SDag-Erling Smørgrav#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE 4608f61ef7f6SDag-Erling Smørgrav/* DATA imports from DLLs on WIN32 can't be const, because runtime 4609b7579f77SDag-Erling Smørgrav relocations are performed -- see ld's documentation on pseudo-relocs. */ 4610b7579f77SDag-Erling Smørgrav# define LT_DLSYM_CONST 4611f61ef7f6SDag-Erling Smørgrav#elif defined __osf__ 4612b7579f77SDag-Erling Smørgrav/* This system does not cope well with relocations in const data. */ 4613b7579f77SDag-Erling Smørgrav# define LT_DLSYM_CONST 4614b7579f77SDag-Erling Smørgrav#else 4615b7579f77SDag-Erling Smørgrav# define LT_DLSYM_CONST const 4616b7579f77SDag-Erling Smørgrav#endif 4617b7579f77SDag-Erling Smørgrav 4618f61ef7f6SDag-Erling Smørgrav#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 4619f61ef7f6SDag-Erling Smørgrav 4620b7579f77SDag-Erling Smørgrav/* External symbol declarations for the compiler. */\ 4621b7579f77SDag-Erling Smørgrav" 4622b7579f77SDag-Erling Smørgrav 4623f61ef7f6SDag-Erling Smørgrav if test yes = "$dlself"; then 4624f61ef7f6SDag-Erling Smørgrav func_verbose "generating symbol list for '$output'" 4625b7579f77SDag-Erling Smørgrav 4626b7579f77SDag-Erling Smørgrav $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 4627b7579f77SDag-Erling Smørgrav 4628b7579f77SDag-Erling Smørgrav # Add our own program objects to the symbol list. 4629b7579f77SDag-Erling Smørgrav progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 4630b7579f77SDag-Erling Smørgrav for progfile in $progfiles; do 4631b7579f77SDag-Erling Smørgrav func_to_tool_file "$progfile" func_convert_file_msys_to_w32 4632f61ef7f6SDag-Erling Smørgrav func_verbose "extracting global C symbols from '$func_to_tool_file_result'" 4633b7579f77SDag-Erling Smørgrav $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 4634b7579f77SDag-Erling Smørgrav done 4635b7579f77SDag-Erling Smørgrav 4636b7579f77SDag-Erling Smørgrav if test -n "$exclude_expsyms"; then 4637b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4638b7579f77SDag-Erling Smørgrav eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4639b7579f77SDag-Erling Smørgrav eval '$MV "$nlist"T "$nlist"' 4640b7579f77SDag-Erling Smørgrav } 4641b7579f77SDag-Erling Smørgrav fi 4642b7579f77SDag-Erling Smørgrav 4643b7579f77SDag-Erling Smørgrav if test -n "$export_symbols_regex"; then 4644b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4645b7579f77SDag-Erling Smørgrav eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4646b7579f77SDag-Erling Smørgrav eval '$MV "$nlist"T "$nlist"' 4647b7579f77SDag-Erling Smørgrav } 4648b7579f77SDag-Erling Smørgrav fi 4649b7579f77SDag-Erling Smørgrav 4650b7579f77SDag-Erling Smørgrav # Prepare the list of exported symbols 4651b7579f77SDag-Erling Smørgrav if test -z "$export_symbols"; then 4652f61ef7f6SDag-Erling Smørgrav export_symbols=$output_objdir/$outputname.exp 4653b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4654b7579f77SDag-Erling Smørgrav $RM $export_symbols 4655f61ef7f6SDag-Erling Smørgrav eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4656b7579f77SDag-Erling Smørgrav case $host in 4657b7579f77SDag-Erling Smørgrav *cygwin* | *mingw* | *cegcc* ) 4658b7579f77SDag-Erling Smørgrav eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4659b7579f77SDag-Erling Smørgrav eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4660b7579f77SDag-Erling Smørgrav ;; 4661b7579f77SDag-Erling Smørgrav esac 4662b7579f77SDag-Erling Smørgrav } 4663b7579f77SDag-Erling Smørgrav else 4664b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4665f61ef7f6SDag-Erling Smørgrav eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4666b7579f77SDag-Erling Smørgrav eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4667b7579f77SDag-Erling Smørgrav eval '$MV "$nlist"T "$nlist"' 4668b7579f77SDag-Erling Smørgrav case $host in 4669b7579f77SDag-Erling Smørgrav *cygwin* | *mingw* | *cegcc* ) 4670b7579f77SDag-Erling Smørgrav eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4671b7579f77SDag-Erling Smørgrav eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4672b7579f77SDag-Erling Smørgrav ;; 4673b7579f77SDag-Erling Smørgrav esac 4674b7579f77SDag-Erling Smørgrav } 4675b7579f77SDag-Erling Smørgrav fi 4676b7579f77SDag-Erling Smørgrav fi 4677b7579f77SDag-Erling Smørgrav 4678b7579f77SDag-Erling Smørgrav for dlprefile in $dlprefiles; do 4679f61ef7f6SDag-Erling Smørgrav func_verbose "extracting global C symbols from '$dlprefile'" 4680b7579f77SDag-Erling Smørgrav func_basename "$dlprefile" 4681f61ef7f6SDag-Erling Smørgrav name=$func_basename_result 4682b7579f77SDag-Erling Smørgrav case $host in 4683b7579f77SDag-Erling Smørgrav *cygwin* | *mingw* | *cegcc* ) 4684b7579f77SDag-Erling Smørgrav # if an import library, we need to obtain dlname 4685b7579f77SDag-Erling Smørgrav if func_win32_import_lib_p "$dlprefile"; then 4686b7579f77SDag-Erling Smørgrav func_tr_sh "$dlprefile" 4687b7579f77SDag-Erling Smørgrav eval "curr_lafile=\$libfile_$func_tr_sh_result" 4688f61ef7f6SDag-Erling Smørgrav dlprefile_dlbasename= 4689b7579f77SDag-Erling Smørgrav if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 4690b7579f77SDag-Erling Smørgrav # Use subshell, to avoid clobbering current variable values 4691b7579f77SDag-Erling Smørgrav dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 4692b7579f77SDag-Erling Smørgrav if test -n "$dlprefile_dlname"; then 4693b7579f77SDag-Erling Smørgrav func_basename "$dlprefile_dlname" 4694f61ef7f6SDag-Erling Smørgrav dlprefile_dlbasename=$func_basename_result 4695b7579f77SDag-Erling Smørgrav else 4696b7579f77SDag-Erling Smørgrav # no lafile. user explicitly requested -dlpreopen <import library>. 4697b7579f77SDag-Erling Smørgrav $sharedlib_from_linklib_cmd "$dlprefile" 4698b7579f77SDag-Erling Smørgrav dlprefile_dlbasename=$sharedlib_from_linklib_result 4699b7579f77SDag-Erling Smørgrav fi 4700b7579f77SDag-Erling Smørgrav fi 4701b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4702b7579f77SDag-Erling Smørgrav if test -n "$dlprefile_dlbasename"; then 4703b7579f77SDag-Erling Smørgrav eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 4704b7579f77SDag-Erling Smørgrav else 4705b7579f77SDag-Erling Smørgrav func_warning "Could not compute DLL name from $name" 4706b7579f77SDag-Erling Smørgrav eval '$ECHO ": $name " >> "$nlist"' 4707b7579f77SDag-Erling Smørgrav fi 4708b7579f77SDag-Erling Smørgrav func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4709b7579f77SDag-Erling Smørgrav eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 4710b7579f77SDag-Erling Smørgrav $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 4711b7579f77SDag-Erling Smørgrav } 4712b7579f77SDag-Erling Smørgrav else # not an import lib 4713b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4714b7579f77SDag-Erling Smørgrav eval '$ECHO ": $name " >> "$nlist"' 4715b7579f77SDag-Erling Smørgrav func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4716b7579f77SDag-Erling Smørgrav eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4717b7579f77SDag-Erling Smørgrav } 4718b7579f77SDag-Erling Smørgrav fi 4719b7579f77SDag-Erling Smørgrav ;; 4720b7579f77SDag-Erling Smørgrav *) 4721b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4722b7579f77SDag-Erling Smørgrav eval '$ECHO ": $name " >> "$nlist"' 4723b7579f77SDag-Erling Smørgrav func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 4724b7579f77SDag-Erling Smørgrav eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 4725b7579f77SDag-Erling Smørgrav } 4726b7579f77SDag-Erling Smørgrav ;; 4727b7579f77SDag-Erling Smørgrav esac 4728b7579f77SDag-Erling Smørgrav done 4729b7579f77SDag-Erling Smørgrav 4730b7579f77SDag-Erling Smørgrav $opt_dry_run || { 4731b7579f77SDag-Erling Smørgrav # Make sure we have at least an empty file. 4732b7579f77SDag-Erling Smørgrav test -f "$nlist" || : > "$nlist" 4733b7579f77SDag-Erling Smørgrav 4734b7579f77SDag-Erling Smørgrav if test -n "$exclude_expsyms"; then 4735b7579f77SDag-Erling Smørgrav $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4736b7579f77SDag-Erling Smørgrav $MV "$nlist"T "$nlist" 4737b7579f77SDag-Erling Smørgrav fi 4738b7579f77SDag-Erling Smørgrav 4739b7579f77SDag-Erling Smørgrav # Try sorting and uniquifying the output. 4740b7579f77SDag-Erling Smørgrav if $GREP -v "^: " < "$nlist" | 4741b7579f77SDag-Erling Smørgrav if sort -k 3 </dev/null >/dev/null 2>&1; then 4742b7579f77SDag-Erling Smørgrav sort -k 3 4743b7579f77SDag-Erling Smørgrav else 4744b7579f77SDag-Erling Smørgrav sort +2 4745b7579f77SDag-Erling Smørgrav fi | 4746b7579f77SDag-Erling Smørgrav uniq > "$nlist"S; then 4747b7579f77SDag-Erling Smørgrav : 4748b7579f77SDag-Erling Smørgrav else 4749b7579f77SDag-Erling Smørgrav $GREP -v "^: " < "$nlist" > "$nlist"S 4750b7579f77SDag-Erling Smørgrav fi 4751b7579f77SDag-Erling Smørgrav 4752b7579f77SDag-Erling Smørgrav if test -f "$nlist"S; then 4753b7579f77SDag-Erling Smørgrav eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 4754b7579f77SDag-Erling Smørgrav else 4755b7579f77SDag-Erling Smørgrav echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 4756b7579f77SDag-Erling Smørgrav fi 4757b7579f77SDag-Erling Smørgrav 4758f61ef7f6SDag-Erling Smørgrav func_show_eval '$RM "${nlist}I"' 4759f61ef7f6SDag-Erling Smørgrav if test -n "$global_symbol_to_import"; then 4760f61ef7f6SDag-Erling Smørgrav eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 4761f61ef7f6SDag-Erling Smørgrav fi 4762f61ef7f6SDag-Erling Smørgrav 4763b7579f77SDag-Erling Smørgrav echo >> "$output_objdir/$my_dlsyms" "\ 4764b7579f77SDag-Erling Smørgrav 4765b7579f77SDag-Erling Smørgrav/* The mapping between symbol names and symbols. */ 4766b7579f77SDag-Erling Smørgravtypedef struct { 4767b7579f77SDag-Erling Smørgrav const char *name; 4768b7579f77SDag-Erling Smørgrav void *address; 4769b7579f77SDag-Erling Smørgrav} lt_dlsymlist; 4770b7579f77SDag-Erling Smørgravextern LT_DLSYM_CONST lt_dlsymlist 4771f61ef7f6SDag-Erling Smørgravlt_${my_prefix}_LTX_preloaded_symbols[];\ 4772f61ef7f6SDag-Erling Smørgrav" 4773f61ef7f6SDag-Erling Smørgrav 4774f61ef7f6SDag-Erling Smørgrav if test -s "$nlist"I; then 4775f61ef7f6SDag-Erling Smørgrav echo >> "$output_objdir/$my_dlsyms" "\ 4776f61ef7f6SDag-Erling Smørgravstatic void lt_syminit(void) 4777f61ef7f6SDag-Erling Smørgrav{ 4778f61ef7f6SDag-Erling Smørgrav LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; 4779f61ef7f6SDag-Erling Smørgrav for (; symbol->name; ++symbol) 4780f61ef7f6SDag-Erling Smørgrav {" 4781f61ef7f6SDag-Erling Smørgrav $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" 4782f61ef7f6SDag-Erling Smørgrav echo >> "$output_objdir/$my_dlsyms" "\ 4783f61ef7f6SDag-Erling Smørgrav } 4784f61ef7f6SDag-Erling Smørgrav}" 4785f61ef7f6SDag-Erling Smørgrav fi 4786f61ef7f6SDag-Erling Smørgrav echo >> "$output_objdir/$my_dlsyms" "\ 4787b7579f77SDag-Erling SmørgravLT_DLSYM_CONST lt_dlsymlist 4788b7579f77SDag-Erling Smørgravlt_${my_prefix}_LTX_preloaded_symbols[] = 4789f61ef7f6SDag-Erling Smørgrav{ {\"$my_originator\", (void *) 0}," 4790f61ef7f6SDag-Erling Smørgrav 4791f61ef7f6SDag-Erling Smørgrav if test -s "$nlist"I; then 4792f61ef7f6SDag-Erling Smørgrav echo >> "$output_objdir/$my_dlsyms" "\ 4793f61ef7f6SDag-Erling Smørgrav {\"@INIT@\", (void *) <_syminit}," 4794f61ef7f6SDag-Erling Smørgrav fi 4795b7579f77SDag-Erling Smørgrav 4796b7579f77SDag-Erling Smørgrav case $need_lib_prefix in 4797b7579f77SDag-Erling Smørgrav no) 4798b7579f77SDag-Erling Smørgrav eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 4799b7579f77SDag-Erling Smørgrav ;; 4800b7579f77SDag-Erling Smørgrav *) 4801b7579f77SDag-Erling Smørgrav eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 4802b7579f77SDag-Erling Smørgrav ;; 4803b7579f77SDag-Erling Smørgrav esac 4804b7579f77SDag-Erling Smørgrav echo >> "$output_objdir/$my_dlsyms" "\ 4805b7579f77SDag-Erling Smørgrav {0, (void *) 0} 4806b7579f77SDag-Erling Smørgrav}; 4807b7579f77SDag-Erling Smørgrav 4808b7579f77SDag-Erling Smørgrav/* This works around a problem in FreeBSD linker */ 4809b7579f77SDag-Erling Smørgrav#ifdef FREEBSD_WORKAROUND 4810b7579f77SDag-Erling Smørgravstatic const void *lt_preloaded_setup() { 4811b7579f77SDag-Erling Smørgrav return lt_${my_prefix}_LTX_preloaded_symbols; 4812b7579f77SDag-Erling Smørgrav} 4813b7579f77SDag-Erling Smørgrav#endif 4814b7579f77SDag-Erling Smørgrav 4815b7579f77SDag-Erling Smørgrav#ifdef __cplusplus 4816b7579f77SDag-Erling Smørgrav} 4817b7579f77SDag-Erling Smørgrav#endif\ 4818b7579f77SDag-Erling Smørgrav" 4819b7579f77SDag-Erling Smørgrav } # !$opt_dry_run 4820b7579f77SDag-Erling Smørgrav 4821b7579f77SDag-Erling Smørgrav pic_flag_for_symtable= 4822b7579f77SDag-Erling Smørgrav case "$compile_command " in 4823b7579f77SDag-Erling Smørgrav *" -static "*) ;; 4824b7579f77SDag-Erling Smørgrav *) 4825b7579f77SDag-Erling Smørgrav case $host in 4826b7579f77SDag-Erling Smørgrav # compiling the symbol table file with pic_flag works around 4827b7579f77SDag-Erling Smørgrav # a FreeBSD bug that causes programs to crash when -lm is 4828b7579f77SDag-Erling Smørgrav # linked before any other PIC object. But we must not use 4829b7579f77SDag-Erling Smørgrav # pic_flag when linking with -static. The problem exists in 4830b7579f77SDag-Erling Smørgrav # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 48318ed2b524SDag-Erling Smørgrav *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 4832b7579f77SDag-Erling Smørgrav pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 4833b7579f77SDag-Erling Smørgrav *-*-hpux*) 4834b7579f77SDag-Erling Smørgrav pic_flag_for_symtable=" $pic_flag" ;; 4835b7579f77SDag-Erling Smørgrav *) 4836f61ef7f6SDag-Erling Smørgrav $my_pic_p && pic_flag_for_symtable=" $pic_flag" 4837b7579f77SDag-Erling Smørgrav ;; 4838b7579f77SDag-Erling Smørgrav esac 4839b7579f77SDag-Erling Smørgrav ;; 4840b7579f77SDag-Erling Smørgrav esac 4841b7579f77SDag-Erling Smørgrav symtab_cflags= 4842b7579f77SDag-Erling Smørgrav for arg in $LTCFLAGS; do 4843b7579f77SDag-Erling Smørgrav case $arg in 4844b7579f77SDag-Erling Smørgrav -pie | -fpie | -fPIE) ;; 4845b7579f77SDag-Erling Smørgrav *) func_append symtab_cflags " $arg" ;; 4846b7579f77SDag-Erling Smørgrav esac 4847b7579f77SDag-Erling Smørgrav done 4848b7579f77SDag-Erling Smørgrav 4849b7579f77SDag-Erling Smørgrav # Now compile the dynamic symbol file. 4850b7579f77SDag-Erling Smørgrav func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 4851b7579f77SDag-Erling Smørgrav 4852b7579f77SDag-Erling Smørgrav # Clean up the generated files. 4853f61ef7f6SDag-Erling Smørgrav func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' 4854b7579f77SDag-Erling Smørgrav 4855b7579f77SDag-Erling Smørgrav # Transform the symbol file into the correct name. 4856f61ef7f6SDag-Erling Smørgrav symfileobj=$output_objdir/${my_outputname}S.$objext 4857b7579f77SDag-Erling Smørgrav case $host in 4858b7579f77SDag-Erling Smørgrav *cygwin* | *mingw* | *cegcc* ) 4859b7579f77SDag-Erling Smørgrav if test -f "$output_objdir/$my_outputname.def"; then 4860b7579f77SDag-Erling Smørgrav compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4861b7579f77SDag-Erling Smørgrav finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 4862b7579f77SDag-Erling Smørgrav else 4863b7579f77SDag-Erling Smørgrav compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4864b7579f77SDag-Erling Smørgrav finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4865b7579f77SDag-Erling Smørgrav fi 4866b7579f77SDag-Erling Smørgrav ;; 4867b7579f77SDag-Erling Smørgrav *) 4868b7579f77SDag-Erling Smørgrav compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4869b7579f77SDag-Erling Smørgrav finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 4870b7579f77SDag-Erling Smørgrav ;; 4871b7579f77SDag-Erling Smørgrav esac 4872b7579f77SDag-Erling Smørgrav ;; 4873b7579f77SDag-Erling Smørgrav *) 4874f61ef7f6SDag-Erling Smørgrav func_fatal_error "unknown suffix for '$my_dlsyms'" 4875b7579f77SDag-Erling Smørgrav ;; 4876b7579f77SDag-Erling Smørgrav esac 4877b7579f77SDag-Erling Smørgrav else 4878b7579f77SDag-Erling Smørgrav # We keep going just in case the user didn't refer to 4879b7579f77SDag-Erling Smørgrav # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 4880b7579f77SDag-Erling Smørgrav # really was required. 4881b7579f77SDag-Erling Smørgrav 4882b7579f77SDag-Erling Smørgrav # Nullify the symbol file. 4883b7579f77SDag-Erling Smørgrav compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 4884b7579f77SDag-Erling Smørgrav finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 4885b7579f77SDag-Erling Smørgrav fi 4886b7579f77SDag-Erling Smørgrav} 4887b7579f77SDag-Erling Smørgrav 4888f61ef7f6SDag-Erling Smørgrav# func_cygming_gnu_implib_p ARG 4889f61ef7f6SDag-Erling Smørgrav# This predicate returns with zero status (TRUE) if 4890f61ef7f6SDag-Erling Smørgrav# ARG is a GNU/binutils-style import library. Returns 4891f61ef7f6SDag-Erling Smørgrav# with nonzero status (FALSE) otherwise. 4892f61ef7f6SDag-Erling Smørgravfunc_cygming_gnu_implib_p () 4893f61ef7f6SDag-Erling Smørgrav{ 4894f61ef7f6SDag-Erling Smørgrav $debug_cmd 4895f61ef7f6SDag-Erling Smørgrav 4896f61ef7f6SDag-Erling Smørgrav func_to_tool_file "$1" func_convert_file_msys_to_w32 4897f61ef7f6SDag-Erling Smørgrav 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)$'` 4898f61ef7f6SDag-Erling Smørgrav test -n "$func_cygming_gnu_implib_tmp" 4899f61ef7f6SDag-Erling Smørgrav} 4900f61ef7f6SDag-Erling Smørgrav 4901f61ef7f6SDag-Erling Smørgrav# func_cygming_ms_implib_p ARG 4902f61ef7f6SDag-Erling Smørgrav# This predicate returns with zero status (TRUE) if 4903f61ef7f6SDag-Erling Smørgrav# ARG is an MS-style import library. Returns 4904f61ef7f6SDag-Erling Smørgrav# with nonzero status (FALSE) otherwise. 4905f61ef7f6SDag-Erling Smørgravfunc_cygming_ms_implib_p () 4906f61ef7f6SDag-Erling Smørgrav{ 4907f61ef7f6SDag-Erling Smørgrav $debug_cmd 4908f61ef7f6SDag-Erling Smørgrav 4909f61ef7f6SDag-Erling Smørgrav func_to_tool_file "$1" func_convert_file_msys_to_w32 4910f61ef7f6SDag-Erling Smørgrav func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 4911f61ef7f6SDag-Erling Smørgrav test -n "$func_cygming_ms_implib_tmp" 4912f61ef7f6SDag-Erling Smørgrav} 4913f61ef7f6SDag-Erling Smørgrav 4914b7579f77SDag-Erling Smørgrav# func_win32_libid arg 4915b7579f77SDag-Erling Smørgrav# return the library type of file 'arg' 4916b7579f77SDag-Erling Smørgrav# 4917b7579f77SDag-Erling Smørgrav# Need a lot of goo to handle *both* DLLs and import libs 4918b7579f77SDag-Erling Smørgrav# Has to be a shell function in order to 'eat' the argument 4919b7579f77SDag-Erling Smørgrav# that is supplied when $file_magic_command is called. 4920b7579f77SDag-Erling Smørgrav# Despite the name, also deal with 64 bit binaries. 4921b7579f77SDag-Erling Smørgravfunc_win32_libid () 4922b7579f77SDag-Erling Smørgrav{ 4923f61ef7f6SDag-Erling Smørgrav $debug_cmd 4924f61ef7f6SDag-Erling Smørgrav 4925f61ef7f6SDag-Erling Smørgrav win32_libid_type=unknown 4926b7579f77SDag-Erling Smørgrav win32_fileres=`file -L $1 2>/dev/null` 4927b7579f77SDag-Erling Smørgrav case $win32_fileres in 4928b7579f77SDag-Erling Smørgrav *ar\ archive\ import\ library*) # definitely import 4929b7579f77SDag-Erling Smørgrav win32_libid_type="x86 archive import" 4930b7579f77SDag-Erling Smørgrav ;; 4931b7579f77SDag-Erling Smørgrav *ar\ archive*) # could be an import, or static 4932b7579f77SDag-Erling Smørgrav # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 4933b7579f77SDag-Erling Smørgrav if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 4934b7579f77SDag-Erling Smørgrav $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 4935f61ef7f6SDag-Erling Smørgrav case $nm_interface in 4936f61ef7f6SDag-Erling Smørgrav "MS dumpbin") 4937f61ef7f6SDag-Erling Smørgrav if func_cygming_ms_implib_p "$1" || 4938f61ef7f6SDag-Erling Smørgrav func_cygming_gnu_implib_p "$1" 4939f61ef7f6SDag-Erling Smørgrav then 4940f61ef7f6SDag-Erling Smørgrav win32_nmres=import 4941f61ef7f6SDag-Erling Smørgrav else 4942f61ef7f6SDag-Erling Smørgrav win32_nmres= 4943f61ef7f6SDag-Erling Smørgrav fi 4944f61ef7f6SDag-Erling Smørgrav ;; 4945f61ef7f6SDag-Erling Smørgrav *) 4946b7579f77SDag-Erling Smørgrav func_to_tool_file "$1" func_convert_file_msys_to_w32 4947b7579f77SDag-Erling Smørgrav win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 4948b7579f77SDag-Erling Smørgrav $SED -n -e ' 4949b7579f77SDag-Erling Smørgrav 1,100{ 4950b7579f77SDag-Erling Smørgrav / I /{ 4951f61ef7f6SDag-Erling Smørgrav s|.*|import| 4952b7579f77SDag-Erling Smørgrav p 4953b7579f77SDag-Erling Smørgrav q 4954b7579f77SDag-Erling Smørgrav } 4955b7579f77SDag-Erling Smørgrav }'` 4956f61ef7f6SDag-Erling Smørgrav ;; 4957f61ef7f6SDag-Erling Smørgrav esac 4958b7579f77SDag-Erling Smørgrav case $win32_nmres in 4959b7579f77SDag-Erling Smørgrav import*) win32_libid_type="x86 archive import";; 4960b7579f77SDag-Erling Smørgrav *) win32_libid_type="x86 archive static";; 4961b7579f77SDag-Erling Smørgrav esac 4962b7579f77SDag-Erling Smørgrav fi 4963b7579f77SDag-Erling Smørgrav ;; 4964b7579f77SDag-Erling Smørgrav *DLL*) 4965b7579f77SDag-Erling Smørgrav win32_libid_type="x86 DLL" 4966b7579f77SDag-Erling Smørgrav ;; 4967b7579f77SDag-Erling Smørgrav *executable*) # but shell scripts are "executable" too... 4968b7579f77SDag-Erling Smørgrav case $win32_fileres in 4969b7579f77SDag-Erling Smørgrav *MS\ Windows\ PE\ Intel*) 4970b7579f77SDag-Erling Smørgrav win32_libid_type="x86 DLL" 4971b7579f77SDag-Erling Smørgrav ;; 4972b7579f77SDag-Erling Smørgrav esac 4973b7579f77SDag-Erling Smørgrav ;; 4974b7579f77SDag-Erling Smørgrav esac 4975b7579f77SDag-Erling Smørgrav $ECHO "$win32_libid_type" 4976b7579f77SDag-Erling Smørgrav} 4977b7579f77SDag-Erling Smørgrav 4978b7579f77SDag-Erling Smørgrav# func_cygming_dll_for_implib ARG 4979b7579f77SDag-Erling Smørgrav# 4980b7579f77SDag-Erling Smørgrav# Platform-specific function to extract the 4981b7579f77SDag-Erling Smørgrav# name of the DLL associated with the specified 4982b7579f77SDag-Erling Smørgrav# import library ARG. 4983b7579f77SDag-Erling Smørgrav# Invoked by eval'ing the libtool variable 4984b7579f77SDag-Erling Smørgrav# $sharedlib_from_linklib_cmd 4985b7579f77SDag-Erling Smørgrav# Result is available in the variable 4986b7579f77SDag-Erling Smørgrav# $sharedlib_from_linklib_result 4987b7579f77SDag-Erling Smørgravfunc_cygming_dll_for_implib () 4988b7579f77SDag-Erling Smørgrav{ 4989f61ef7f6SDag-Erling Smørgrav $debug_cmd 4990f61ef7f6SDag-Erling Smørgrav 4991b7579f77SDag-Erling Smørgrav sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 4992b7579f77SDag-Erling Smørgrav} 4993b7579f77SDag-Erling Smørgrav 4994b7579f77SDag-Erling Smørgrav# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 4995b7579f77SDag-Erling Smørgrav# 4996b7579f77SDag-Erling Smørgrav# The is the core of a fallback implementation of a 4997b7579f77SDag-Erling Smørgrav# platform-specific function to extract the name of the 4998b7579f77SDag-Erling Smørgrav# DLL associated with the specified import library LIBNAME. 4999b7579f77SDag-Erling Smørgrav# 5000b7579f77SDag-Erling Smørgrav# SECTION_NAME is either .idata$6 or .idata$7, depending 5001b7579f77SDag-Erling Smørgrav# on the platform and compiler that created the implib. 5002b7579f77SDag-Erling Smørgrav# 5003b7579f77SDag-Erling Smørgrav# Echos the name of the DLL associated with the 5004b7579f77SDag-Erling Smørgrav# specified import library. 5005b7579f77SDag-Erling Smørgravfunc_cygming_dll_for_implib_fallback_core () 5006b7579f77SDag-Erling Smørgrav{ 5007f61ef7f6SDag-Erling Smørgrav $debug_cmd 5008f61ef7f6SDag-Erling Smørgrav 5009b7579f77SDag-Erling Smørgrav match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 5010b7579f77SDag-Erling Smørgrav $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 5011b7579f77SDag-Erling Smørgrav $SED '/^Contents of section '"$match_literal"':/{ 5012b7579f77SDag-Erling Smørgrav # Place marker at beginning of archive member dllname section 5013b7579f77SDag-Erling Smørgrav s/.*/====MARK====/ 5014b7579f77SDag-Erling Smørgrav p 5015b7579f77SDag-Erling Smørgrav d 5016b7579f77SDag-Erling Smørgrav } 5017b7579f77SDag-Erling Smørgrav # These lines can sometimes be longer than 43 characters, but 5018b7579f77SDag-Erling Smørgrav # are always uninteresting 5019b7579f77SDag-Erling Smørgrav /:[ ]*file format pe[i]\{,1\}-/d 5020b7579f77SDag-Erling Smørgrav /^In archive [^:]*:/d 5021b7579f77SDag-Erling Smørgrav # Ensure marker is printed 5022b7579f77SDag-Erling Smørgrav /^====MARK====/p 5023b7579f77SDag-Erling Smørgrav # Remove all lines with less than 43 characters 5024b7579f77SDag-Erling Smørgrav /^.\{43\}/!d 5025b7579f77SDag-Erling Smørgrav # From remaining lines, remove first 43 characters 5026b7579f77SDag-Erling Smørgrav s/^.\{43\}//' | 5027b7579f77SDag-Erling Smørgrav $SED -n ' 5028b7579f77SDag-Erling Smørgrav # Join marker and all lines until next marker into a single line 5029b7579f77SDag-Erling Smørgrav /^====MARK====/ b para 5030b7579f77SDag-Erling Smørgrav H 5031b7579f77SDag-Erling Smørgrav $ b para 5032b7579f77SDag-Erling Smørgrav b 5033b7579f77SDag-Erling Smørgrav :para 5034b7579f77SDag-Erling Smørgrav x 5035b7579f77SDag-Erling Smørgrav s/\n//g 5036b7579f77SDag-Erling Smørgrav # Remove the marker 5037b7579f77SDag-Erling Smørgrav s/^====MARK====// 5038b7579f77SDag-Erling Smørgrav # Remove trailing dots and whitespace 5039b7579f77SDag-Erling Smørgrav s/[\. \t]*$// 5040b7579f77SDag-Erling Smørgrav # Print 5041b7579f77SDag-Erling Smørgrav /./p' | 5042b7579f77SDag-Erling Smørgrav # we now have a list, one entry per line, of the stringified 5043b7579f77SDag-Erling Smørgrav # contents of the appropriate section of all members of the 5044f61ef7f6SDag-Erling Smørgrav # archive that possess that section. Heuristic: eliminate 5045f61ef7f6SDag-Erling Smørgrav # all those that have a first or second character that is 5046b7579f77SDag-Erling Smørgrav # a '.' (that is, objdump's representation of an unprintable 5047b7579f77SDag-Erling Smørgrav # character.) This should work for all archives with less than 5048b7579f77SDag-Erling Smørgrav # 0x302f exports -- but will fail for DLLs whose name actually 5049b7579f77SDag-Erling Smørgrav # begins with a literal '.' or a single character followed by 5050b7579f77SDag-Erling Smørgrav # a '.'. 5051b7579f77SDag-Erling Smørgrav # 5052b7579f77SDag-Erling Smørgrav # Of those that remain, print the first one. 5053b7579f77SDag-Erling Smørgrav $SED -e '/^\./d;/^.\./d;q' 5054b7579f77SDag-Erling Smørgrav} 5055b7579f77SDag-Erling Smørgrav 5056b7579f77SDag-Erling Smørgrav# func_cygming_dll_for_implib_fallback ARG 5057b7579f77SDag-Erling Smørgrav# Platform-specific function to extract the 5058b7579f77SDag-Erling Smørgrav# name of the DLL associated with the specified 5059b7579f77SDag-Erling Smørgrav# import library ARG. 5060b7579f77SDag-Erling Smørgrav# 5061b7579f77SDag-Erling Smørgrav# This fallback implementation is for use when $DLLTOOL 5062b7579f77SDag-Erling Smørgrav# does not support the --identify-strict option. 5063b7579f77SDag-Erling Smørgrav# Invoked by eval'ing the libtool variable 5064b7579f77SDag-Erling Smørgrav# $sharedlib_from_linklib_cmd 5065b7579f77SDag-Erling Smørgrav# Result is available in the variable 5066b7579f77SDag-Erling Smørgrav# $sharedlib_from_linklib_result 5067b7579f77SDag-Erling Smørgravfunc_cygming_dll_for_implib_fallback () 5068b7579f77SDag-Erling Smørgrav{ 5069f61ef7f6SDag-Erling Smørgrav $debug_cmd 5070f61ef7f6SDag-Erling Smørgrav 5071b7579f77SDag-Erling Smørgrav if func_cygming_gnu_implib_p "$1"; then 5072b7579f77SDag-Erling Smørgrav # binutils import library 5073b7579f77SDag-Erling Smørgrav sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 5074b7579f77SDag-Erling Smørgrav elif func_cygming_ms_implib_p "$1"; then 5075b7579f77SDag-Erling Smørgrav # ms-generated import library 5076b7579f77SDag-Erling Smørgrav sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 5077b7579f77SDag-Erling Smørgrav else 5078b7579f77SDag-Erling Smørgrav # unknown 5079f61ef7f6SDag-Erling Smørgrav sharedlib_from_linklib_result= 5080b7579f77SDag-Erling Smørgrav fi 5081b7579f77SDag-Erling Smørgrav} 5082b7579f77SDag-Erling Smørgrav 5083b7579f77SDag-Erling Smørgrav 5084b7579f77SDag-Erling Smørgrav# func_extract_an_archive dir oldlib 5085b7579f77SDag-Erling Smørgravfunc_extract_an_archive () 5086b7579f77SDag-Erling Smørgrav{ 5087f61ef7f6SDag-Erling Smørgrav $debug_cmd 5088f61ef7f6SDag-Erling Smørgrav 5089f61ef7f6SDag-Erling Smørgrav f_ex_an_ar_dir=$1; shift 5090f61ef7f6SDag-Erling Smørgrav f_ex_an_ar_oldlib=$1 5091f61ef7f6SDag-Erling Smørgrav if test yes = "$lock_old_archive_extraction"; then 5092b7579f77SDag-Erling Smørgrav lockfile=$f_ex_an_ar_oldlib.lock 5093b7579f77SDag-Erling Smørgrav until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 5094b7579f77SDag-Erling Smørgrav func_echo "Waiting for $lockfile to be removed" 5095b7579f77SDag-Erling Smørgrav sleep 2 5096b7579f77SDag-Erling Smørgrav done 5097b7579f77SDag-Erling Smørgrav fi 5098b7579f77SDag-Erling Smørgrav func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 5099b7579f77SDag-Erling Smørgrav 'stat=$?; rm -f "$lockfile"; exit $stat' 5100f61ef7f6SDag-Erling Smørgrav if test yes = "$lock_old_archive_extraction"; then 5101b7579f77SDag-Erling Smørgrav $opt_dry_run || rm -f "$lockfile" 5102b7579f77SDag-Erling Smørgrav fi 5103b7579f77SDag-Erling Smørgrav if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 5104b7579f77SDag-Erling Smørgrav : 5105b7579f77SDag-Erling Smørgrav else 5106b7579f77SDag-Erling Smørgrav func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 5107b7579f77SDag-Erling Smørgrav fi 5108b7579f77SDag-Erling Smørgrav} 5109b7579f77SDag-Erling Smørgrav 5110b7579f77SDag-Erling Smørgrav 5111b7579f77SDag-Erling Smørgrav# func_extract_archives gentop oldlib ... 5112b7579f77SDag-Erling Smørgravfunc_extract_archives () 5113b7579f77SDag-Erling Smørgrav{ 5114f61ef7f6SDag-Erling Smørgrav $debug_cmd 5115f61ef7f6SDag-Erling Smørgrav 5116f61ef7f6SDag-Erling Smørgrav my_gentop=$1; shift 5117b7579f77SDag-Erling Smørgrav my_oldlibs=${1+"$@"} 5118f61ef7f6SDag-Erling Smørgrav my_oldobjs= 5119f61ef7f6SDag-Erling Smørgrav my_xlib= 5120f61ef7f6SDag-Erling Smørgrav my_xabs= 5121f61ef7f6SDag-Erling Smørgrav my_xdir= 5122b7579f77SDag-Erling Smørgrav 5123b7579f77SDag-Erling Smørgrav for my_xlib in $my_oldlibs; do 5124b7579f77SDag-Erling Smørgrav # Extract the objects. 5125b7579f77SDag-Erling Smørgrav case $my_xlib in 5126f61ef7f6SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; 5127b7579f77SDag-Erling Smørgrav *) my_xabs=`pwd`"/$my_xlib" ;; 5128b7579f77SDag-Erling Smørgrav esac 5129b7579f77SDag-Erling Smørgrav func_basename "$my_xlib" 5130f61ef7f6SDag-Erling Smørgrav my_xlib=$func_basename_result 5131b7579f77SDag-Erling Smørgrav my_xlib_u=$my_xlib 5132b7579f77SDag-Erling Smørgrav while :; do 5133b7579f77SDag-Erling Smørgrav case " $extracted_archives " in 5134b7579f77SDag-Erling Smørgrav *" $my_xlib_u "*) 5135b7579f77SDag-Erling Smørgrav func_arith $extracted_serial + 1 5136b7579f77SDag-Erling Smørgrav extracted_serial=$func_arith_result 5137b7579f77SDag-Erling Smørgrav my_xlib_u=lt$extracted_serial-$my_xlib ;; 5138b7579f77SDag-Erling Smørgrav *) break ;; 5139b7579f77SDag-Erling Smørgrav esac 5140b7579f77SDag-Erling Smørgrav done 5141b7579f77SDag-Erling Smørgrav extracted_archives="$extracted_archives $my_xlib_u" 5142f61ef7f6SDag-Erling Smørgrav my_xdir=$my_gentop/$my_xlib_u 5143b7579f77SDag-Erling Smørgrav 5144b7579f77SDag-Erling Smørgrav func_mkdir_p "$my_xdir" 5145b7579f77SDag-Erling Smørgrav 5146b7579f77SDag-Erling Smørgrav case $host in 5147b7579f77SDag-Erling Smørgrav *-darwin*) 5148b7579f77SDag-Erling Smørgrav func_verbose "Extracting $my_xabs" 5149b7579f77SDag-Erling Smørgrav # Do not bother doing anything if just a dry run 5150b7579f77SDag-Erling Smørgrav $opt_dry_run || { 5151b7579f77SDag-Erling Smørgrav darwin_orig_dir=`pwd` 5152b7579f77SDag-Erling Smørgrav cd $my_xdir || exit $? 5153b7579f77SDag-Erling Smørgrav darwin_archive=$my_xabs 5154b7579f77SDag-Erling Smørgrav darwin_curdir=`pwd` 5155f61ef7f6SDag-Erling Smørgrav func_basename "$darwin_archive" 5156f61ef7f6SDag-Erling Smørgrav darwin_base_archive=$func_basename_result 5157b7579f77SDag-Erling Smørgrav darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 5158b7579f77SDag-Erling Smørgrav if test -n "$darwin_arches"; then 5159b7579f77SDag-Erling Smørgrav darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 5160b7579f77SDag-Erling Smørgrav darwin_arch= 5161b7579f77SDag-Erling Smørgrav func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 5162b7579f77SDag-Erling Smørgrav for darwin_arch in $darwin_arches; do 5163f61ef7f6SDag-Erling Smørgrav func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" 5164f61ef7f6SDag-Erling Smørgrav $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" 5165f61ef7f6SDag-Erling Smørgrav cd "unfat-$$/$darwin_base_archive-$darwin_arch" 5166f61ef7f6SDag-Erling Smørgrav func_extract_an_archive "`pwd`" "$darwin_base_archive" 5167b7579f77SDag-Erling Smørgrav cd "$darwin_curdir" 5168f61ef7f6SDag-Erling Smørgrav $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" 5169b7579f77SDag-Erling Smørgrav done # $darwin_arches 5170b7579f77SDag-Erling Smørgrav ## Okay now we've a bunch of thin objects, gotta fatten them up :) 5171f61ef7f6SDag-Erling Smørgrav darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` 5172b7579f77SDag-Erling Smørgrav darwin_file= 5173b7579f77SDag-Erling Smørgrav darwin_files= 5174b7579f77SDag-Erling Smørgrav for darwin_file in $darwin_filelist; do 5175b7579f77SDag-Erling Smørgrav darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 5176b7579f77SDag-Erling Smørgrav $LIPO -create -output "$darwin_file" $darwin_files 5177b7579f77SDag-Erling Smørgrav done # $darwin_filelist 5178b7579f77SDag-Erling Smørgrav $RM -rf unfat-$$ 5179b7579f77SDag-Erling Smørgrav cd "$darwin_orig_dir" 5180b7579f77SDag-Erling Smørgrav else 5181b7579f77SDag-Erling Smørgrav cd $darwin_orig_dir 5182b7579f77SDag-Erling Smørgrav func_extract_an_archive "$my_xdir" "$my_xabs" 5183b7579f77SDag-Erling Smørgrav fi # $darwin_arches 5184b7579f77SDag-Erling Smørgrav } # !$opt_dry_run 5185b7579f77SDag-Erling Smørgrav ;; 5186b7579f77SDag-Erling Smørgrav *) 5187b7579f77SDag-Erling Smørgrav func_extract_an_archive "$my_xdir" "$my_xabs" 5188b7579f77SDag-Erling Smørgrav ;; 5189b7579f77SDag-Erling Smørgrav esac 5190b7579f77SDag-Erling Smørgrav my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 5191b7579f77SDag-Erling Smørgrav done 5192b7579f77SDag-Erling Smørgrav 5193f61ef7f6SDag-Erling Smørgrav func_extract_archives_result=$my_oldobjs 5194b7579f77SDag-Erling Smørgrav} 5195b7579f77SDag-Erling Smørgrav 5196b7579f77SDag-Erling Smørgrav 5197b7579f77SDag-Erling Smørgrav# func_emit_wrapper [arg=no] 5198b7579f77SDag-Erling Smørgrav# 5199b7579f77SDag-Erling Smørgrav# Emit a libtool wrapper script on stdout. 5200b7579f77SDag-Erling Smørgrav# Don't directly open a file because we may want to 5201b7579f77SDag-Erling Smørgrav# incorporate the script contents within a cygwin/mingw 5202b7579f77SDag-Erling Smørgrav# wrapper executable. Must ONLY be called from within 5203b7579f77SDag-Erling Smørgrav# func_mode_link because it depends on a number of variables 5204b7579f77SDag-Erling Smørgrav# set therein. 5205b7579f77SDag-Erling Smørgrav# 5206b7579f77SDag-Erling Smørgrav# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 5207b7579f77SDag-Erling Smørgrav# variable will take. If 'yes', then the emitted script 5208f61ef7f6SDag-Erling Smørgrav# will assume that the directory where it is stored is 5209b7579f77SDag-Erling Smørgrav# the $objdir directory. This is a cygwin/mingw-specific 5210b7579f77SDag-Erling Smørgrav# behavior. 5211b7579f77SDag-Erling Smørgravfunc_emit_wrapper () 5212b7579f77SDag-Erling Smørgrav{ 5213b7579f77SDag-Erling Smørgrav func_emit_wrapper_arg1=${1-no} 5214b7579f77SDag-Erling Smørgrav 5215b7579f77SDag-Erling Smørgrav $ECHO "\ 5216b7579f77SDag-Erling Smørgrav#! $SHELL 5217b7579f77SDag-Erling Smørgrav 5218b7579f77SDag-Erling Smørgrav# $output - temporary wrapper script for $objdir/$outputname 5219f61ef7f6SDag-Erling Smørgrav# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5220b7579f77SDag-Erling Smørgrav# 5221b7579f77SDag-Erling Smørgrav# The $output program cannot be directly executed until all the libtool 5222b7579f77SDag-Erling Smørgrav# libraries that it depends on are installed. 5223b7579f77SDag-Erling Smørgrav# 5224b7579f77SDag-Erling Smørgrav# This wrapper script should never be moved out of the build directory. 5225b7579f77SDag-Erling Smørgrav# If it is, it will not operate correctly. 5226b7579f77SDag-Erling Smørgrav 5227b7579f77SDag-Erling Smørgrav# Sed substitution that helps us do robust quoting. It backslashifies 5228b7579f77SDag-Erling Smørgrav# metacharacters that are still active within double-quoted strings. 5229b7579f77SDag-Erling Smørgravsed_quote_subst='$sed_quote_subst' 5230b7579f77SDag-Erling Smørgrav 5231b7579f77SDag-Erling Smørgrav# Be Bourne compatible 5232b7579f77SDag-Erling Smørgravif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5233b7579f77SDag-Erling Smørgrav emulate sh 5234b7579f77SDag-Erling Smørgrav NULLCMD=: 5235b7579f77SDag-Erling Smørgrav # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5236b7579f77SDag-Erling Smørgrav # is contrary to our usage. Disable this feature. 5237b7579f77SDag-Erling Smørgrav alias -g '\${1+\"\$@\"}'='\"\$@\"' 5238b7579f77SDag-Erling Smørgrav setopt NO_GLOB_SUBST 5239b7579f77SDag-Erling Smørgravelse 5240b7579f77SDag-Erling Smørgrav case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5241b7579f77SDag-Erling Smørgravfi 5242b7579f77SDag-Erling SmørgravBIN_SH=xpg4; export BIN_SH # for Tru64 5243b7579f77SDag-Erling SmørgravDUALCASE=1; export DUALCASE # for MKS sh 5244b7579f77SDag-Erling Smørgrav 5245b7579f77SDag-Erling Smørgrav# The HP-UX ksh and POSIX shell print the target directory to stdout 5246b7579f77SDag-Erling Smørgrav# if CDPATH is set. 5247b7579f77SDag-Erling Smørgrav(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5248b7579f77SDag-Erling Smørgrav 5249b7579f77SDag-Erling Smørgravrelink_command=\"$relink_command\" 5250b7579f77SDag-Erling Smørgrav 5251b7579f77SDag-Erling Smørgrav# This environment variable determines our operation mode. 5252b7579f77SDag-Erling Smørgravif test \"\$libtool_install_magic\" = \"$magic\"; then 5253b7579f77SDag-Erling Smørgrav # install mode needs the following variables: 5254b7579f77SDag-Erling Smørgrav generated_by_libtool_version='$macro_version' 5255b7579f77SDag-Erling Smørgrav notinst_deplibs='$notinst_deplibs' 5256b7579f77SDag-Erling Smørgravelse 5257b7579f77SDag-Erling Smørgrav # When we are sourced in execute mode, \$file and \$ECHO are already set. 5258b7579f77SDag-Erling Smørgrav if test \"\$libtool_execute_magic\" != \"$magic\"; then 5259b7579f77SDag-Erling Smørgrav file=\"\$0\"" 5260b7579f77SDag-Erling Smørgrav 5261*46d2f618SCy Schubert qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 5262b7579f77SDag-Erling Smørgrav $ECHO "\ 5263b7579f77SDag-Erling Smørgrav 5264b7579f77SDag-Erling Smørgrav# A function that is used when there is no print builtin or printf. 5265b7579f77SDag-Erling Smørgravfunc_fallback_echo () 5266b7579f77SDag-Erling Smørgrav{ 5267b7579f77SDag-Erling Smørgrav eval 'cat <<_LTECHO_EOF 5268b7579f77SDag-Erling Smørgrav\$1 5269b7579f77SDag-Erling Smørgrav_LTECHO_EOF' 5270b7579f77SDag-Erling Smørgrav} 5271*46d2f618SCy Schubert ECHO=\"$qECHO\" 5272b7579f77SDag-Erling Smørgrav fi 5273b7579f77SDag-Erling Smørgrav 5274b7579f77SDag-Erling Smørgrav# Very basic option parsing. These options are (a) specific to 5275b7579f77SDag-Erling Smørgrav# the libtool wrapper, (b) are identical between the wrapper 5276f61ef7f6SDag-Erling Smørgrav# /script/ and the wrapper /executable/ that is used only on 5277b7579f77SDag-Erling Smørgrav# windows platforms, and (c) all begin with the string "--lt-" 5278f61ef7f6SDag-Erling Smørgrav# (application programs are unlikely to have options that match 5279b7579f77SDag-Erling Smørgrav# this pattern). 5280b7579f77SDag-Erling Smørgrav# 5281b7579f77SDag-Erling Smørgrav# There are only two supported options: --lt-debug and 5282b7579f77SDag-Erling Smørgrav# --lt-dump-script. There is, deliberately, no --lt-help. 5283b7579f77SDag-Erling Smørgrav# 5284b7579f77SDag-Erling Smørgrav# The first argument to this parsing function should be the 5285b7579f77SDag-Erling Smørgrav# script's $0 value, followed by "$@". 5286b7579f77SDag-Erling Smørgravlt_option_debug= 5287b7579f77SDag-Erling Smørgravfunc_parse_lt_options () 5288b7579f77SDag-Erling Smørgrav{ 5289b7579f77SDag-Erling Smørgrav lt_script_arg0=\$0 5290b7579f77SDag-Erling Smørgrav shift 5291b7579f77SDag-Erling Smørgrav for lt_opt 5292b7579f77SDag-Erling Smørgrav do 5293b7579f77SDag-Erling Smørgrav case \"\$lt_opt\" in 5294b7579f77SDag-Erling Smørgrav --lt-debug) lt_option_debug=1 ;; 5295b7579f77SDag-Erling Smørgrav --lt-dump-script) 5296b7579f77SDag-Erling Smørgrav lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 5297b7579f77SDag-Erling Smørgrav test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 5298b7579f77SDag-Erling Smørgrav lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 5299b7579f77SDag-Erling Smørgrav cat \"\$lt_dump_D/\$lt_dump_F\" 5300b7579f77SDag-Erling Smørgrav exit 0 5301b7579f77SDag-Erling Smørgrav ;; 5302b7579f77SDag-Erling Smørgrav --lt-*) 5303b7579f77SDag-Erling Smørgrav \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 5304b7579f77SDag-Erling Smørgrav exit 1 5305b7579f77SDag-Erling Smørgrav ;; 5306b7579f77SDag-Erling Smørgrav esac 5307b7579f77SDag-Erling Smørgrav done 5308b7579f77SDag-Erling Smørgrav 5309b7579f77SDag-Erling Smørgrav # Print the debug banner immediately: 5310b7579f77SDag-Erling Smørgrav if test -n \"\$lt_option_debug\"; then 5311f61ef7f6SDag-Erling Smørgrav echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 5312b7579f77SDag-Erling Smørgrav fi 5313b7579f77SDag-Erling Smørgrav} 5314b7579f77SDag-Erling Smørgrav 5315b7579f77SDag-Erling Smørgrav# Used when --lt-debug. Prints its arguments to stdout 5316b7579f77SDag-Erling Smørgrav# (redirection is the responsibility of the caller) 5317b7579f77SDag-Erling Smørgravfunc_lt_dump_args () 5318b7579f77SDag-Erling Smørgrav{ 5319b7579f77SDag-Erling Smørgrav lt_dump_args_N=1; 5320b7579f77SDag-Erling Smørgrav for lt_arg 5321b7579f77SDag-Erling Smørgrav do 5322f61ef7f6SDag-Erling Smørgrav \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" 5323b7579f77SDag-Erling Smørgrav lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 5324b7579f77SDag-Erling Smørgrav done 5325b7579f77SDag-Erling Smørgrav} 5326b7579f77SDag-Erling Smørgrav 5327b7579f77SDag-Erling Smørgrav# Core function for launching the target application 5328b7579f77SDag-Erling Smørgravfunc_exec_program_core () 5329b7579f77SDag-Erling Smørgrav{ 5330b7579f77SDag-Erling Smørgrav" 5331b7579f77SDag-Erling Smørgrav case $host in 5332b7579f77SDag-Erling Smørgrav # Backslashes separate directories on plain windows 5333b7579f77SDag-Erling Smørgrav *-*-mingw | *-*-os2* | *-cegcc*) 5334b7579f77SDag-Erling Smørgrav $ECHO "\ 5335b7579f77SDag-Erling Smørgrav if test -n \"\$lt_option_debug\"; then 5336f61ef7f6SDag-Erling Smørgrav \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 5337b7579f77SDag-Erling Smørgrav func_lt_dump_args \${1+\"\$@\"} 1>&2 5338b7579f77SDag-Erling Smørgrav fi 5339b7579f77SDag-Erling Smørgrav exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5340b7579f77SDag-Erling Smørgrav" 5341b7579f77SDag-Erling Smørgrav ;; 5342b7579f77SDag-Erling Smørgrav 5343b7579f77SDag-Erling Smørgrav *) 5344b7579f77SDag-Erling Smørgrav $ECHO "\ 5345b7579f77SDag-Erling Smørgrav if test -n \"\$lt_option_debug\"; then 5346f61ef7f6SDag-Erling Smørgrav \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 5347b7579f77SDag-Erling Smørgrav func_lt_dump_args \${1+\"\$@\"} 1>&2 5348b7579f77SDag-Erling Smørgrav fi 5349b7579f77SDag-Erling Smørgrav exec \"\$progdir/\$program\" \${1+\"\$@\"} 5350b7579f77SDag-Erling Smørgrav" 5351b7579f77SDag-Erling Smørgrav ;; 5352b7579f77SDag-Erling Smørgrav esac 5353b7579f77SDag-Erling Smørgrav $ECHO "\ 5354b7579f77SDag-Erling Smørgrav \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 5355b7579f77SDag-Erling Smørgrav exit 1 5356b7579f77SDag-Erling Smørgrav} 5357b7579f77SDag-Erling Smørgrav 5358b7579f77SDag-Erling Smørgrav# A function to encapsulate launching the target application 5359b7579f77SDag-Erling Smørgrav# Strips options in the --lt-* namespace from \$@ and 5360b7579f77SDag-Erling Smørgrav# launches target application with the remaining arguments. 5361b7579f77SDag-Erling Smørgravfunc_exec_program () 5362b7579f77SDag-Erling Smørgrav{ 53638ed2b524SDag-Erling Smørgrav case \" \$* \" in 53648ed2b524SDag-Erling Smørgrav *\\ --lt-*) 5365b7579f77SDag-Erling Smørgrav for lt_wr_arg 5366b7579f77SDag-Erling Smørgrav do 5367b7579f77SDag-Erling Smørgrav case \$lt_wr_arg in 5368b7579f77SDag-Erling Smørgrav --lt-*) ;; 5369b7579f77SDag-Erling Smørgrav *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 5370b7579f77SDag-Erling Smørgrav esac 5371b7579f77SDag-Erling Smørgrav shift 53728ed2b524SDag-Erling Smørgrav done ;; 53738ed2b524SDag-Erling Smørgrav esac 5374b7579f77SDag-Erling Smørgrav func_exec_program_core \${1+\"\$@\"} 5375b7579f77SDag-Erling Smørgrav} 5376b7579f77SDag-Erling Smørgrav 5377b7579f77SDag-Erling Smørgrav # Parse options 5378b7579f77SDag-Erling Smørgrav func_parse_lt_options \"\$0\" \${1+\"\$@\"} 5379b7579f77SDag-Erling Smørgrav 5380b7579f77SDag-Erling Smørgrav # Find the directory that this script lives in. 5381b7579f77SDag-Erling Smørgrav thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 5382b7579f77SDag-Erling Smørgrav test \"x\$thisdir\" = \"x\$file\" && thisdir=. 5383b7579f77SDag-Erling Smørgrav 5384b7579f77SDag-Erling Smørgrav # Follow symbolic links until we get to the real thisdir. 5385b7579f77SDag-Erling Smørgrav file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 5386b7579f77SDag-Erling Smørgrav while test -n \"\$file\"; do 5387b7579f77SDag-Erling Smørgrav destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 5388b7579f77SDag-Erling Smørgrav 5389b7579f77SDag-Erling Smørgrav # If there was a directory component, then change thisdir. 5390b7579f77SDag-Erling Smørgrav if test \"x\$destdir\" != \"x\$file\"; then 5391b7579f77SDag-Erling Smørgrav case \"\$destdir\" in 5392b7579f77SDag-Erling Smørgrav [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5393b7579f77SDag-Erling Smørgrav *) thisdir=\"\$thisdir/\$destdir\" ;; 5394b7579f77SDag-Erling Smørgrav esac 5395b7579f77SDag-Erling Smørgrav fi 5396b7579f77SDag-Erling Smørgrav 5397b7579f77SDag-Erling Smørgrav file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 5398b7579f77SDag-Erling Smørgrav file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 5399b7579f77SDag-Erling Smørgrav done 5400b7579f77SDag-Erling Smørgrav 5401b7579f77SDag-Erling Smørgrav # Usually 'no', except on cygwin/mingw when embedded into 5402b7579f77SDag-Erling Smørgrav # the cwrapper. 5403b7579f77SDag-Erling Smørgrav WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 5404b7579f77SDag-Erling Smørgrav if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 5405b7579f77SDag-Erling Smørgrav # special case for '.' 5406b7579f77SDag-Erling Smørgrav if test \"\$thisdir\" = \".\"; then 5407b7579f77SDag-Erling Smørgrav thisdir=\`pwd\` 5408b7579f77SDag-Erling Smørgrav fi 5409b7579f77SDag-Erling Smørgrav # remove .libs from thisdir 5410b7579f77SDag-Erling Smørgrav case \"\$thisdir\" in 5411b7579f77SDag-Erling Smørgrav *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 5412b7579f77SDag-Erling Smørgrav $objdir ) thisdir=. ;; 5413b7579f77SDag-Erling Smørgrav esac 5414b7579f77SDag-Erling Smørgrav fi 5415b7579f77SDag-Erling Smørgrav 5416b7579f77SDag-Erling Smørgrav # Try to get the absolute directory name. 5417b7579f77SDag-Erling Smørgrav absdir=\`cd \"\$thisdir\" && pwd\` 5418b7579f77SDag-Erling Smørgrav test -n \"\$absdir\" && thisdir=\"\$absdir\" 5419b7579f77SDag-Erling Smørgrav" 5420b7579f77SDag-Erling Smørgrav 5421f61ef7f6SDag-Erling Smørgrav if test yes = "$fast_install"; then 5422b7579f77SDag-Erling Smørgrav $ECHO "\ 5423b7579f77SDag-Erling Smørgrav program=lt-'$outputname'$exeext 5424b7579f77SDag-Erling Smørgrav progdir=\"\$thisdir/$objdir\" 5425b7579f77SDag-Erling Smørgrav 5426b7579f77SDag-Erling Smørgrav if test ! -f \"\$progdir/\$program\" || 5427f61ef7f6SDag-Erling Smørgrav { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ 5428b7579f77SDag-Erling Smørgrav test \"X\$file\" != \"X\$progdir/\$program\"; }; then 5429b7579f77SDag-Erling Smørgrav 5430b7579f77SDag-Erling Smørgrav file=\"\$\$-\$program\" 5431b7579f77SDag-Erling Smørgrav 5432b7579f77SDag-Erling Smørgrav if test ! -d \"\$progdir\"; then 5433b7579f77SDag-Erling Smørgrav $MKDIR \"\$progdir\" 5434b7579f77SDag-Erling Smørgrav else 5435b7579f77SDag-Erling Smørgrav $RM \"\$progdir/\$file\" 5436b7579f77SDag-Erling Smørgrav fi" 5437b7579f77SDag-Erling Smørgrav 5438b7579f77SDag-Erling Smørgrav $ECHO "\ 5439b7579f77SDag-Erling Smørgrav 5440b7579f77SDag-Erling Smørgrav # relink executable if necessary 5441b7579f77SDag-Erling Smørgrav if test -n \"\$relink_command\"; then 5442b7579f77SDag-Erling Smørgrav if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5443b7579f77SDag-Erling Smørgrav else 5444f61ef7f6SDag-Erling Smørgrav \$ECHO \"\$relink_command_output\" >&2 5445b7579f77SDag-Erling Smørgrav $RM \"\$progdir/\$file\" 5446b7579f77SDag-Erling Smørgrav exit 1 5447b7579f77SDag-Erling Smørgrav fi 5448b7579f77SDag-Erling Smørgrav fi 5449b7579f77SDag-Erling Smørgrav 5450b7579f77SDag-Erling Smørgrav $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5451b7579f77SDag-Erling Smørgrav { $RM \"\$progdir/\$program\"; 5452b7579f77SDag-Erling Smørgrav $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5453b7579f77SDag-Erling Smørgrav $RM \"\$progdir/\$file\" 5454b7579f77SDag-Erling Smørgrav fi" 5455b7579f77SDag-Erling Smørgrav else 5456b7579f77SDag-Erling Smørgrav $ECHO "\ 5457b7579f77SDag-Erling Smørgrav program='$outputname' 5458b7579f77SDag-Erling Smørgrav progdir=\"\$thisdir/$objdir\" 5459b7579f77SDag-Erling Smørgrav" 5460b7579f77SDag-Erling Smørgrav fi 5461b7579f77SDag-Erling Smørgrav 5462b7579f77SDag-Erling Smørgrav $ECHO "\ 5463b7579f77SDag-Erling Smørgrav 5464b7579f77SDag-Erling Smørgrav if test -f \"\$progdir/\$program\"; then" 5465b7579f77SDag-Erling Smørgrav 5466b7579f77SDag-Erling Smørgrav # fixup the dll searchpath if we need to. 5467b7579f77SDag-Erling Smørgrav # 5468b7579f77SDag-Erling Smørgrav # Fix the DLL searchpath if we need to. Do this before prepending 5469b7579f77SDag-Erling Smørgrav # to shlibpath, because on Windows, both are PATH and uninstalled 5470b7579f77SDag-Erling Smørgrav # libraries must come first. 5471b7579f77SDag-Erling Smørgrav if test -n "$dllsearchpath"; then 5472b7579f77SDag-Erling Smørgrav $ECHO "\ 5473b7579f77SDag-Erling Smørgrav # Add the dll search path components to the executable PATH 5474b7579f77SDag-Erling Smørgrav PATH=$dllsearchpath:\$PATH 5475b7579f77SDag-Erling Smørgrav" 5476b7579f77SDag-Erling Smørgrav fi 5477b7579f77SDag-Erling Smørgrav 5478b7579f77SDag-Erling Smørgrav # Export our shlibpath_var if we have one. 5479f61ef7f6SDag-Erling Smørgrav if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5480b7579f77SDag-Erling Smørgrav $ECHO "\ 5481b7579f77SDag-Erling Smørgrav # Add our own library path to $shlibpath_var 5482b7579f77SDag-Erling Smørgrav $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 5483b7579f77SDag-Erling Smørgrav 5484b7579f77SDag-Erling Smørgrav # Some systems cannot cope with colon-terminated $shlibpath_var 5485b7579f77SDag-Erling Smørgrav # The second colon is a workaround for a bug in BeOS R4 sed 5486b7579f77SDag-Erling Smørgrav $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 5487b7579f77SDag-Erling Smørgrav 5488b7579f77SDag-Erling Smørgrav export $shlibpath_var 5489b7579f77SDag-Erling Smørgrav" 5490b7579f77SDag-Erling Smørgrav fi 5491b7579f77SDag-Erling Smørgrav 5492b7579f77SDag-Erling Smørgrav $ECHO "\ 5493b7579f77SDag-Erling Smørgrav if test \"\$libtool_execute_magic\" != \"$magic\"; then 5494b7579f77SDag-Erling Smørgrav # Run the actual program with our arguments. 5495b7579f77SDag-Erling Smørgrav func_exec_program \${1+\"\$@\"} 5496b7579f77SDag-Erling Smørgrav fi 5497b7579f77SDag-Erling Smørgrav else 5498b7579f77SDag-Erling Smørgrav # The program doesn't exist. 5499f61ef7f6SDag-Erling Smørgrav \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 5500b7579f77SDag-Erling Smørgrav \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 5501b7579f77SDag-Erling Smørgrav \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 5502b7579f77SDag-Erling Smørgrav exit 1 5503b7579f77SDag-Erling Smørgrav fi 5504b7579f77SDag-Erling Smørgravfi\ 5505b7579f77SDag-Erling Smørgrav" 5506b7579f77SDag-Erling Smørgrav} 5507b7579f77SDag-Erling Smørgrav 5508b7579f77SDag-Erling Smørgrav 5509b7579f77SDag-Erling Smørgrav# func_emit_cwrapperexe_src 5510b7579f77SDag-Erling Smørgrav# emit the source code for a wrapper executable on stdout 5511b7579f77SDag-Erling Smørgrav# Must ONLY be called from within func_mode_link because 5512b7579f77SDag-Erling Smørgrav# it depends on a number of variable set therein. 5513b7579f77SDag-Erling Smørgravfunc_emit_cwrapperexe_src () 5514b7579f77SDag-Erling Smørgrav{ 5515b7579f77SDag-Erling Smørgrav cat <<EOF 5516b7579f77SDag-Erling Smørgrav 5517b7579f77SDag-Erling Smørgrav/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 5518f61ef7f6SDag-Erling Smørgrav Generated by $PROGRAM (GNU $PACKAGE) $VERSION 5519b7579f77SDag-Erling Smørgrav 5520b7579f77SDag-Erling Smørgrav The $output program cannot be directly executed until all the libtool 5521b7579f77SDag-Erling Smørgrav libraries that it depends on are installed. 5522b7579f77SDag-Erling Smørgrav 5523b7579f77SDag-Erling Smørgrav This wrapper executable should never be moved out of the build directory. 5524b7579f77SDag-Erling Smørgrav If it is, it will not operate correctly. 5525b7579f77SDag-Erling Smørgrav*/ 5526b7579f77SDag-Erling SmørgravEOF 5527b7579f77SDag-Erling Smørgrav cat <<"EOF" 5528b7579f77SDag-Erling Smørgrav#ifdef _MSC_VER 5529b7579f77SDag-Erling Smørgrav# define _CRT_SECURE_NO_DEPRECATE 1 5530b7579f77SDag-Erling Smørgrav#endif 5531b7579f77SDag-Erling Smørgrav#include <stdio.h> 5532b7579f77SDag-Erling Smørgrav#include <stdlib.h> 5533b7579f77SDag-Erling Smørgrav#ifdef _MSC_VER 5534b7579f77SDag-Erling Smørgrav# include <direct.h> 5535b7579f77SDag-Erling Smørgrav# include <process.h> 5536b7579f77SDag-Erling Smørgrav# include <io.h> 5537b7579f77SDag-Erling Smørgrav#else 5538b7579f77SDag-Erling Smørgrav# include <unistd.h> 5539b7579f77SDag-Erling Smørgrav# include <stdint.h> 5540b7579f77SDag-Erling Smørgrav# ifdef __CYGWIN__ 5541b7579f77SDag-Erling Smørgrav# include <io.h> 5542b7579f77SDag-Erling Smørgrav# endif 5543b7579f77SDag-Erling Smørgrav#endif 5544b7579f77SDag-Erling Smørgrav#include <malloc.h> 5545b7579f77SDag-Erling Smørgrav#include <stdarg.h> 5546b7579f77SDag-Erling Smørgrav#include <assert.h> 5547b7579f77SDag-Erling Smørgrav#include <string.h> 5548b7579f77SDag-Erling Smørgrav#include <ctype.h> 5549b7579f77SDag-Erling Smørgrav#include <errno.h> 5550b7579f77SDag-Erling Smørgrav#include <fcntl.h> 5551b7579f77SDag-Erling Smørgrav#include <sys/stat.h> 5552b7579f77SDag-Erling Smørgrav 5553f61ef7f6SDag-Erling Smørgrav#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) 5554f61ef7f6SDag-Erling Smørgrav 5555b7579f77SDag-Erling Smørgrav/* declarations of non-ANSI functions */ 5556f61ef7f6SDag-Erling Smørgrav#if defined __MINGW32__ 5557b7579f77SDag-Erling Smørgrav# ifdef __STRICT_ANSI__ 5558b7579f77SDag-Erling Smørgravint _putenv (const char *); 5559b7579f77SDag-Erling Smørgrav# endif 5560f61ef7f6SDag-Erling Smørgrav#elif defined __CYGWIN__ 5561b7579f77SDag-Erling Smørgrav# ifdef __STRICT_ANSI__ 5562b7579f77SDag-Erling Smørgravchar *realpath (const char *, char *); 5563b7579f77SDag-Erling Smørgravint putenv (char *); 5564b7579f77SDag-Erling Smørgravint setenv (const char *, const char *, int); 5565b7579f77SDag-Erling Smørgrav# endif 5566f61ef7f6SDag-Erling Smørgrav/* #elif defined other_platform || defined ... */ 5567b7579f77SDag-Erling Smørgrav#endif 5568b7579f77SDag-Erling Smørgrav 5569b7579f77SDag-Erling Smørgrav/* portability defines, excluding path handling macros */ 5570f61ef7f6SDag-Erling Smørgrav#if defined _MSC_VER 5571b7579f77SDag-Erling Smørgrav# define setmode _setmode 5572b7579f77SDag-Erling Smørgrav# define stat _stat 5573b7579f77SDag-Erling Smørgrav# define chmod _chmod 5574b7579f77SDag-Erling Smørgrav# define getcwd _getcwd 5575b7579f77SDag-Erling Smørgrav# define putenv _putenv 5576b7579f77SDag-Erling Smørgrav# define S_IXUSR _S_IEXEC 5577f61ef7f6SDag-Erling Smørgrav#elif defined __MINGW32__ 5578b7579f77SDag-Erling Smørgrav# define setmode _setmode 5579b7579f77SDag-Erling Smørgrav# define stat _stat 5580b7579f77SDag-Erling Smørgrav# define chmod _chmod 5581b7579f77SDag-Erling Smørgrav# define getcwd _getcwd 5582b7579f77SDag-Erling Smørgrav# define putenv _putenv 5583f61ef7f6SDag-Erling Smørgrav#elif defined __CYGWIN__ 5584b7579f77SDag-Erling Smørgrav# define HAVE_SETENV 5585b7579f77SDag-Erling Smørgrav# define FOPEN_WB "wb" 5586f61ef7f6SDag-Erling Smørgrav/* #elif defined other platforms ... */ 5587b7579f77SDag-Erling Smørgrav#endif 5588b7579f77SDag-Erling Smørgrav 5589f61ef7f6SDag-Erling Smørgrav#if defined PATH_MAX 5590b7579f77SDag-Erling Smørgrav# define LT_PATHMAX PATH_MAX 5591f61ef7f6SDag-Erling Smørgrav#elif defined MAXPATHLEN 5592b7579f77SDag-Erling Smørgrav# define LT_PATHMAX MAXPATHLEN 5593b7579f77SDag-Erling Smørgrav#else 5594b7579f77SDag-Erling Smørgrav# define LT_PATHMAX 1024 5595b7579f77SDag-Erling Smørgrav#endif 5596b7579f77SDag-Erling Smørgrav 5597b7579f77SDag-Erling Smørgrav#ifndef S_IXOTH 5598b7579f77SDag-Erling Smørgrav# define S_IXOTH 0 5599b7579f77SDag-Erling Smørgrav#endif 5600b7579f77SDag-Erling Smørgrav#ifndef S_IXGRP 5601b7579f77SDag-Erling Smørgrav# define S_IXGRP 0 5602b7579f77SDag-Erling Smørgrav#endif 5603b7579f77SDag-Erling Smørgrav 5604b7579f77SDag-Erling Smørgrav/* path handling portability macros */ 5605b7579f77SDag-Erling Smørgrav#ifndef DIR_SEPARATOR 5606b7579f77SDag-Erling Smørgrav# define DIR_SEPARATOR '/' 5607b7579f77SDag-Erling Smørgrav# define PATH_SEPARATOR ':' 5608b7579f77SDag-Erling Smørgrav#endif 5609b7579f77SDag-Erling Smørgrav 5610f61ef7f6SDag-Erling Smørgrav#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ 5611f61ef7f6SDag-Erling Smørgrav defined __OS2__ 5612b7579f77SDag-Erling Smørgrav# define HAVE_DOS_BASED_FILE_SYSTEM 5613b7579f77SDag-Erling Smørgrav# define FOPEN_WB "wb" 5614b7579f77SDag-Erling Smørgrav# ifndef DIR_SEPARATOR_2 5615b7579f77SDag-Erling Smørgrav# define DIR_SEPARATOR_2 '\\' 5616b7579f77SDag-Erling Smørgrav# endif 5617b7579f77SDag-Erling Smørgrav# ifndef PATH_SEPARATOR_2 5618b7579f77SDag-Erling Smørgrav# define PATH_SEPARATOR_2 ';' 5619b7579f77SDag-Erling Smørgrav# endif 5620b7579f77SDag-Erling Smørgrav#endif 5621b7579f77SDag-Erling Smørgrav 5622b7579f77SDag-Erling Smørgrav#ifndef DIR_SEPARATOR_2 5623b7579f77SDag-Erling Smørgrav# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5624b7579f77SDag-Erling Smørgrav#else /* DIR_SEPARATOR_2 */ 5625b7579f77SDag-Erling Smørgrav# define IS_DIR_SEPARATOR(ch) \ 5626b7579f77SDag-Erling Smørgrav (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5627b7579f77SDag-Erling Smørgrav#endif /* DIR_SEPARATOR_2 */ 5628b7579f77SDag-Erling Smørgrav 5629b7579f77SDag-Erling Smørgrav#ifndef PATH_SEPARATOR_2 5630b7579f77SDag-Erling Smørgrav# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5631b7579f77SDag-Erling Smørgrav#else /* PATH_SEPARATOR_2 */ 5632b7579f77SDag-Erling Smørgrav# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5633b7579f77SDag-Erling Smørgrav#endif /* PATH_SEPARATOR_2 */ 5634b7579f77SDag-Erling Smørgrav 5635b7579f77SDag-Erling Smørgrav#ifndef FOPEN_WB 5636b7579f77SDag-Erling Smørgrav# define FOPEN_WB "w" 5637b7579f77SDag-Erling Smørgrav#endif 5638b7579f77SDag-Erling Smørgrav#ifndef _O_BINARY 5639b7579f77SDag-Erling Smørgrav# define _O_BINARY 0 5640b7579f77SDag-Erling Smørgrav#endif 5641b7579f77SDag-Erling Smørgrav 5642b7579f77SDag-Erling Smørgrav#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5643b7579f77SDag-Erling Smørgrav#define XFREE(stale) do { \ 5644f61ef7f6SDag-Erling Smørgrav if (stale) { free (stale); stale = 0; } \ 5645b7579f77SDag-Erling Smørgrav} while (0) 5646b7579f77SDag-Erling Smørgrav 5647f61ef7f6SDag-Erling Smørgrav#if defined LT_DEBUGWRAPPER 5648b7579f77SDag-Erling Smørgravstatic int lt_debug = 1; 5649b7579f77SDag-Erling Smørgrav#else 5650b7579f77SDag-Erling Smørgravstatic int lt_debug = 0; 5651b7579f77SDag-Erling Smørgrav#endif 5652b7579f77SDag-Erling Smørgrav 5653b7579f77SDag-Erling Smørgravconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 5654b7579f77SDag-Erling Smørgrav 5655b7579f77SDag-Erling Smørgravvoid *xmalloc (size_t num); 5656b7579f77SDag-Erling Smørgravchar *xstrdup (const char *string); 5657b7579f77SDag-Erling Smørgravconst char *base_name (const char *name); 5658b7579f77SDag-Erling Smørgravchar *find_executable (const char *wrapper); 5659b7579f77SDag-Erling Smørgravchar *chase_symlinks (const char *pathspec); 5660b7579f77SDag-Erling Smørgravint make_executable (const char *path); 5661b7579f77SDag-Erling Smørgravint check_executable (const char *path); 5662b7579f77SDag-Erling Smørgravchar *strendzap (char *str, const char *pat); 5663b7579f77SDag-Erling Smørgravvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 5664b7579f77SDag-Erling Smørgravvoid lt_fatal (const char *file, int line, const char *message, ...); 5665b7579f77SDag-Erling Smørgravstatic const char *nonnull (const char *s); 5666b7579f77SDag-Erling Smørgravstatic const char *nonempty (const char *s); 5667b7579f77SDag-Erling Smørgravvoid lt_setenv (const char *name, const char *value); 5668b7579f77SDag-Erling Smørgravchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 5669b7579f77SDag-Erling Smørgravvoid lt_update_exe_path (const char *name, const char *value); 5670b7579f77SDag-Erling Smørgravvoid lt_update_lib_path (const char *name, const char *value); 5671b7579f77SDag-Erling Smørgravchar **prepare_spawn (char **argv); 5672b7579f77SDag-Erling Smørgravvoid lt_dump_script (FILE *f); 5673b7579f77SDag-Erling SmørgravEOF 5674b7579f77SDag-Erling Smørgrav 5675b7579f77SDag-Erling Smørgrav cat <<EOF 5676f61ef7f6SDag-Erling Smørgrav#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) 5677f61ef7f6SDag-Erling Smørgrav# define externally_visible volatile 5678f61ef7f6SDag-Erling Smørgrav#else 5679f61ef7f6SDag-Erling Smørgrav# define externally_visible __attribute__((externally_visible)) volatile 5680f61ef7f6SDag-Erling Smørgrav#endif 5681f61ef7f6SDag-Erling Smørgravexternally_visible const char * MAGIC_EXE = "$magic_exe"; 5682b7579f77SDag-Erling Smørgravconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 5683b7579f77SDag-Erling SmørgravEOF 5684b7579f77SDag-Erling Smørgrav 5685f61ef7f6SDag-Erling Smørgrav if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5686b7579f77SDag-Erling Smørgrav func_to_host_path "$temp_rpath" 5687b7579f77SDag-Erling Smørgrav cat <<EOF 5688b7579f77SDag-Erling Smørgravconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 5689b7579f77SDag-Erling SmørgravEOF 5690b7579f77SDag-Erling Smørgrav else 5691b7579f77SDag-Erling Smørgrav cat <<"EOF" 5692b7579f77SDag-Erling Smørgravconst char * LIB_PATH_VALUE = ""; 5693b7579f77SDag-Erling SmørgravEOF 5694b7579f77SDag-Erling Smørgrav fi 5695b7579f77SDag-Erling Smørgrav 5696b7579f77SDag-Erling Smørgrav if test -n "$dllsearchpath"; then 5697b7579f77SDag-Erling Smørgrav func_to_host_path "$dllsearchpath:" 5698b7579f77SDag-Erling Smørgrav cat <<EOF 5699b7579f77SDag-Erling Smørgravconst char * EXE_PATH_VARNAME = "PATH"; 5700b7579f77SDag-Erling Smørgravconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 5701b7579f77SDag-Erling SmørgravEOF 5702b7579f77SDag-Erling Smørgrav else 5703b7579f77SDag-Erling Smørgrav cat <<"EOF" 5704b7579f77SDag-Erling Smørgravconst char * EXE_PATH_VARNAME = ""; 5705b7579f77SDag-Erling Smørgravconst char * EXE_PATH_VALUE = ""; 5706b7579f77SDag-Erling SmørgravEOF 5707b7579f77SDag-Erling Smørgrav fi 5708b7579f77SDag-Erling Smørgrav 5709f61ef7f6SDag-Erling Smørgrav if test yes = "$fast_install"; then 5710b7579f77SDag-Erling Smørgrav cat <<EOF 5711b7579f77SDag-Erling Smørgravconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 5712b7579f77SDag-Erling SmørgravEOF 5713b7579f77SDag-Erling Smørgrav else 5714b7579f77SDag-Erling Smørgrav cat <<EOF 5715b7579f77SDag-Erling Smørgravconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 5716b7579f77SDag-Erling SmørgravEOF 5717b7579f77SDag-Erling Smørgrav fi 5718b7579f77SDag-Erling Smørgrav 5719b7579f77SDag-Erling Smørgrav 5720b7579f77SDag-Erling Smørgrav cat <<"EOF" 5721b7579f77SDag-Erling Smørgrav 5722b7579f77SDag-Erling Smørgrav#define LTWRAPPER_OPTION_PREFIX "--lt-" 5723b7579f77SDag-Erling Smørgrav 5724b7579f77SDag-Erling Smørgravstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 5725b7579f77SDag-Erling Smørgravstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 5726b7579f77SDag-Erling Smørgravstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 5727b7579f77SDag-Erling Smørgrav 5728b7579f77SDag-Erling Smørgravint 5729b7579f77SDag-Erling Smørgravmain (int argc, char *argv[]) 5730b7579f77SDag-Erling Smørgrav{ 5731b7579f77SDag-Erling Smørgrav char **newargz; 5732b7579f77SDag-Erling Smørgrav int newargc; 5733b7579f77SDag-Erling Smørgrav char *tmp_pathspec; 5734b7579f77SDag-Erling Smørgrav char *actual_cwrapper_path; 5735b7579f77SDag-Erling Smørgrav char *actual_cwrapper_name; 5736b7579f77SDag-Erling Smørgrav char *target_name; 5737b7579f77SDag-Erling Smørgrav char *lt_argv_zero; 5738f61ef7f6SDag-Erling Smørgrav int rval = 127; 5739b7579f77SDag-Erling Smørgrav 5740b7579f77SDag-Erling Smørgrav int i; 5741b7579f77SDag-Erling Smørgrav 5742b7579f77SDag-Erling Smørgrav program_name = (char *) xstrdup (base_name (argv[0])); 5743f61ef7f6SDag-Erling Smørgrav newargz = XMALLOC (char *, (size_t) argc + 1); 5744b7579f77SDag-Erling Smørgrav 5745b7579f77SDag-Erling Smørgrav /* very simple arg parsing; don't want to rely on getopt 5746b7579f77SDag-Erling Smørgrav * also, copy all non cwrapper options to newargz, except 5747b7579f77SDag-Erling Smørgrav * argz[0], which is handled differently 5748b7579f77SDag-Erling Smørgrav */ 5749b7579f77SDag-Erling Smørgrav newargc=0; 5750b7579f77SDag-Erling Smørgrav for (i = 1; i < argc; i++) 5751b7579f77SDag-Erling Smørgrav { 5752f61ef7f6SDag-Erling Smørgrav if (STREQ (argv[i], dumpscript_opt)) 5753b7579f77SDag-Erling Smørgrav { 5754b7579f77SDag-Erling SmørgravEOF 5755f61ef7f6SDag-Erling Smørgrav case $host in 5756b7579f77SDag-Erling Smørgrav *mingw* | *cygwin* ) 5757b7579f77SDag-Erling Smørgrav # make stdout use "unix" line endings 5758b7579f77SDag-Erling Smørgrav echo " setmode(1,_O_BINARY);" 5759b7579f77SDag-Erling Smørgrav ;; 5760b7579f77SDag-Erling Smørgrav esac 5761b7579f77SDag-Erling Smørgrav 5762b7579f77SDag-Erling Smørgrav cat <<"EOF" 5763b7579f77SDag-Erling Smørgrav lt_dump_script (stdout); 5764b7579f77SDag-Erling Smørgrav return 0; 5765b7579f77SDag-Erling Smørgrav } 5766f61ef7f6SDag-Erling Smørgrav if (STREQ (argv[i], debug_opt)) 5767b7579f77SDag-Erling Smørgrav { 5768b7579f77SDag-Erling Smørgrav lt_debug = 1; 5769b7579f77SDag-Erling Smørgrav continue; 5770b7579f77SDag-Erling Smørgrav } 5771f61ef7f6SDag-Erling Smørgrav if (STREQ (argv[i], ltwrapper_option_prefix)) 5772b7579f77SDag-Erling Smørgrav { 5773b7579f77SDag-Erling Smørgrav /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 5774b7579f77SDag-Erling Smørgrav namespace, but it is not one of the ones we know about and 5775f61ef7f6SDag-Erling Smørgrav have already dealt with, above (inluding dump-script), then 5776b7579f77SDag-Erling Smørgrav report an error. Otherwise, targets might begin to believe 5777b7579f77SDag-Erling Smørgrav they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 5778b7579f77SDag-Erling Smørgrav namespace. The first time any user complains about this, we'll 5779b7579f77SDag-Erling Smørgrav need to make LTWRAPPER_OPTION_PREFIX a configure-time option 5780b7579f77SDag-Erling Smørgrav or a configure.ac-settable value. 5781b7579f77SDag-Erling Smørgrav */ 5782b7579f77SDag-Erling Smørgrav lt_fatal (__FILE__, __LINE__, 5783b7579f77SDag-Erling Smørgrav "unrecognized %s option: '%s'", 5784b7579f77SDag-Erling Smørgrav ltwrapper_option_prefix, argv[i]); 5785b7579f77SDag-Erling Smørgrav } 5786b7579f77SDag-Erling Smørgrav /* otherwise ... */ 5787b7579f77SDag-Erling Smørgrav newargz[++newargc] = xstrdup (argv[i]); 5788b7579f77SDag-Erling Smørgrav } 5789b7579f77SDag-Erling Smørgrav newargz[++newargc] = NULL; 5790b7579f77SDag-Erling Smørgrav 5791b7579f77SDag-Erling SmørgravEOF 5792b7579f77SDag-Erling Smørgrav cat <<EOF 5793b7579f77SDag-Erling Smørgrav /* The GNU banner must be the first non-error debug message */ 5794f61ef7f6SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); 5795b7579f77SDag-Erling SmørgravEOF 5796b7579f77SDag-Erling Smørgrav cat <<"EOF" 5797b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 5798b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 5799b7579f77SDag-Erling Smørgrav 5800b7579f77SDag-Erling Smørgrav tmp_pathspec = find_executable (argv[0]); 5801b7579f77SDag-Erling Smørgrav if (tmp_pathspec == NULL) 5802b7579f77SDag-Erling Smørgrav lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 5803b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 5804b7579f77SDag-Erling Smørgrav "(main) found exe (before symlink chase) at: %s\n", 5805b7579f77SDag-Erling Smørgrav tmp_pathspec); 5806b7579f77SDag-Erling Smørgrav 5807b7579f77SDag-Erling Smørgrav actual_cwrapper_path = chase_symlinks (tmp_pathspec); 5808b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 5809b7579f77SDag-Erling Smørgrav "(main) found exe (after symlink chase) at: %s\n", 5810b7579f77SDag-Erling Smørgrav actual_cwrapper_path); 5811b7579f77SDag-Erling Smørgrav XFREE (tmp_pathspec); 5812b7579f77SDag-Erling Smørgrav 5813b7579f77SDag-Erling Smørgrav actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 5814b7579f77SDag-Erling Smørgrav strendzap (actual_cwrapper_path, actual_cwrapper_name); 5815b7579f77SDag-Erling Smørgrav 5816b7579f77SDag-Erling Smørgrav /* wrapper name transforms */ 5817b7579f77SDag-Erling Smørgrav strendzap (actual_cwrapper_name, ".exe"); 5818b7579f77SDag-Erling Smørgrav tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 5819b7579f77SDag-Erling Smørgrav XFREE (actual_cwrapper_name); 5820b7579f77SDag-Erling Smørgrav actual_cwrapper_name = tmp_pathspec; 5821b7579f77SDag-Erling Smørgrav tmp_pathspec = 0; 5822b7579f77SDag-Erling Smørgrav 5823b7579f77SDag-Erling Smørgrav /* target_name transforms -- use actual target program name; might have lt- prefix */ 5824b7579f77SDag-Erling Smørgrav target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 5825b7579f77SDag-Erling Smørgrav strendzap (target_name, ".exe"); 5826b7579f77SDag-Erling Smørgrav tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 5827b7579f77SDag-Erling Smørgrav XFREE (target_name); 5828b7579f77SDag-Erling Smørgrav target_name = tmp_pathspec; 5829b7579f77SDag-Erling Smørgrav tmp_pathspec = 0; 5830b7579f77SDag-Erling Smørgrav 5831b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 5832b7579f77SDag-Erling Smørgrav "(main) libtool target name: %s\n", 5833b7579f77SDag-Erling Smørgrav target_name); 5834b7579f77SDag-Erling SmørgravEOF 5835b7579f77SDag-Erling Smørgrav 5836b7579f77SDag-Erling Smørgrav cat <<EOF 5837b7579f77SDag-Erling Smørgrav newargz[0] = 5838b7579f77SDag-Erling Smørgrav XMALLOC (char, (strlen (actual_cwrapper_path) + 5839b7579f77SDag-Erling Smørgrav strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 5840b7579f77SDag-Erling Smørgrav strcpy (newargz[0], actual_cwrapper_path); 5841b7579f77SDag-Erling Smørgrav strcat (newargz[0], "$objdir"); 5842b7579f77SDag-Erling Smørgrav strcat (newargz[0], "/"); 5843b7579f77SDag-Erling SmørgravEOF 5844b7579f77SDag-Erling Smørgrav 5845b7579f77SDag-Erling Smørgrav cat <<"EOF" 5846b7579f77SDag-Erling Smørgrav /* stop here, and copy so we don't have to do this twice */ 5847b7579f77SDag-Erling Smørgrav tmp_pathspec = xstrdup (newargz[0]); 5848b7579f77SDag-Erling Smørgrav 5849b7579f77SDag-Erling Smørgrav /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 5850b7579f77SDag-Erling Smørgrav strcat (newargz[0], actual_cwrapper_name); 5851b7579f77SDag-Erling Smørgrav 5852b7579f77SDag-Erling Smørgrav /* DO want the lt- prefix here if it exists, so use target_name */ 5853b7579f77SDag-Erling Smørgrav lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 5854b7579f77SDag-Erling Smørgrav XFREE (tmp_pathspec); 5855b7579f77SDag-Erling Smørgrav tmp_pathspec = NULL; 5856b7579f77SDag-Erling SmørgravEOF 5857b7579f77SDag-Erling Smørgrav 5858b7579f77SDag-Erling Smørgrav case $host_os in 5859b7579f77SDag-Erling Smørgrav mingw*) 5860b7579f77SDag-Erling Smørgrav cat <<"EOF" 5861b7579f77SDag-Erling Smørgrav { 5862b7579f77SDag-Erling Smørgrav char* p; 5863b7579f77SDag-Erling Smørgrav while ((p = strchr (newargz[0], '\\')) != NULL) 5864b7579f77SDag-Erling Smørgrav { 5865b7579f77SDag-Erling Smørgrav *p = '/'; 5866b7579f77SDag-Erling Smørgrav } 5867b7579f77SDag-Erling Smørgrav while ((p = strchr (lt_argv_zero, '\\')) != NULL) 5868b7579f77SDag-Erling Smørgrav { 5869b7579f77SDag-Erling Smørgrav *p = '/'; 5870b7579f77SDag-Erling Smørgrav } 5871b7579f77SDag-Erling Smørgrav } 5872b7579f77SDag-Erling SmørgravEOF 5873b7579f77SDag-Erling Smørgrav ;; 5874b7579f77SDag-Erling Smørgrav esac 5875b7579f77SDag-Erling Smørgrav 5876b7579f77SDag-Erling Smørgrav cat <<"EOF" 5877b7579f77SDag-Erling Smørgrav XFREE (target_name); 5878b7579f77SDag-Erling Smørgrav XFREE (actual_cwrapper_path); 5879b7579f77SDag-Erling Smørgrav XFREE (actual_cwrapper_name); 5880b7579f77SDag-Erling Smørgrav 5881b7579f77SDag-Erling Smørgrav lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 5882b7579f77SDag-Erling Smørgrav lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 5883b7579f77SDag-Erling Smørgrav /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 5884b7579f77SDag-Erling Smørgrav be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 5885b7579f77SDag-Erling Smørgrav because on Windows, both *_VARNAMEs are PATH but uninstalled 5886b7579f77SDag-Erling Smørgrav libraries must come first. */ 5887b7579f77SDag-Erling Smørgrav lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 5888b7579f77SDag-Erling Smørgrav lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 5889b7579f77SDag-Erling Smørgrav 5890b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 5891b7579f77SDag-Erling Smørgrav nonnull (lt_argv_zero)); 5892b7579f77SDag-Erling Smørgrav for (i = 0; i < newargc; i++) 5893b7579f77SDag-Erling Smørgrav { 5894b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 5895b7579f77SDag-Erling Smørgrav i, nonnull (newargz[i])); 5896b7579f77SDag-Erling Smørgrav } 5897b7579f77SDag-Erling Smørgrav 5898b7579f77SDag-Erling SmørgravEOF 5899b7579f77SDag-Erling Smørgrav 5900b7579f77SDag-Erling Smørgrav case $host_os in 5901b7579f77SDag-Erling Smørgrav mingw*) 5902b7579f77SDag-Erling Smørgrav cat <<"EOF" 5903b7579f77SDag-Erling Smørgrav /* execv doesn't actually work on mingw as expected on unix */ 5904b7579f77SDag-Erling Smørgrav newargz = prepare_spawn (newargz); 5905f61ef7f6SDag-Erling Smørgrav rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 5906b7579f77SDag-Erling Smørgrav if (rval == -1) 5907b7579f77SDag-Erling Smørgrav { 5908b7579f77SDag-Erling Smørgrav /* failed to start process */ 5909b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 5910b7579f77SDag-Erling Smørgrav "(main) failed to launch target \"%s\": %s\n", 5911b7579f77SDag-Erling Smørgrav lt_argv_zero, nonnull (strerror (errno))); 5912b7579f77SDag-Erling Smørgrav return 127; 5913b7579f77SDag-Erling Smørgrav } 5914b7579f77SDag-Erling Smørgrav return rval; 5915b7579f77SDag-Erling SmørgravEOF 5916b7579f77SDag-Erling Smørgrav ;; 5917b7579f77SDag-Erling Smørgrav *) 5918b7579f77SDag-Erling Smørgrav cat <<"EOF" 5919b7579f77SDag-Erling Smørgrav execv (lt_argv_zero, newargz); 5920b7579f77SDag-Erling Smørgrav return rval; /* =127, but avoids unused variable warning */ 5921b7579f77SDag-Erling SmørgravEOF 5922b7579f77SDag-Erling Smørgrav ;; 5923b7579f77SDag-Erling Smørgrav esac 5924b7579f77SDag-Erling Smørgrav 5925b7579f77SDag-Erling Smørgrav cat <<"EOF" 5926b7579f77SDag-Erling Smørgrav} 5927b7579f77SDag-Erling Smørgrav 5928b7579f77SDag-Erling Smørgravvoid * 5929b7579f77SDag-Erling Smørgravxmalloc (size_t num) 5930b7579f77SDag-Erling Smørgrav{ 5931b7579f77SDag-Erling Smørgrav void *p = (void *) malloc (num); 5932b7579f77SDag-Erling Smørgrav if (!p) 5933b7579f77SDag-Erling Smørgrav lt_fatal (__FILE__, __LINE__, "memory exhausted"); 5934b7579f77SDag-Erling Smørgrav 5935b7579f77SDag-Erling Smørgrav return p; 5936b7579f77SDag-Erling Smørgrav} 5937b7579f77SDag-Erling Smørgrav 5938b7579f77SDag-Erling Smørgravchar * 5939b7579f77SDag-Erling Smørgravxstrdup (const char *string) 5940b7579f77SDag-Erling Smørgrav{ 5941b7579f77SDag-Erling Smørgrav return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 5942b7579f77SDag-Erling Smørgrav string) : NULL; 5943b7579f77SDag-Erling Smørgrav} 5944b7579f77SDag-Erling Smørgrav 5945b7579f77SDag-Erling Smørgravconst char * 5946b7579f77SDag-Erling Smørgravbase_name (const char *name) 5947b7579f77SDag-Erling Smørgrav{ 5948b7579f77SDag-Erling Smørgrav const char *base; 5949b7579f77SDag-Erling Smørgrav 5950f61ef7f6SDag-Erling Smørgrav#if defined HAVE_DOS_BASED_FILE_SYSTEM 5951b7579f77SDag-Erling Smørgrav /* Skip over the disk name in MSDOS pathnames. */ 5952b7579f77SDag-Erling Smørgrav if (isalpha ((unsigned char) name[0]) && name[1] == ':') 5953b7579f77SDag-Erling Smørgrav name += 2; 5954b7579f77SDag-Erling Smørgrav#endif 5955b7579f77SDag-Erling Smørgrav 5956b7579f77SDag-Erling Smørgrav for (base = name; *name; name++) 5957b7579f77SDag-Erling Smørgrav if (IS_DIR_SEPARATOR (*name)) 5958b7579f77SDag-Erling Smørgrav base = name + 1; 5959b7579f77SDag-Erling Smørgrav return base; 5960b7579f77SDag-Erling Smørgrav} 5961b7579f77SDag-Erling Smørgrav 5962b7579f77SDag-Erling Smørgravint 5963b7579f77SDag-Erling Smørgravcheck_executable (const char *path) 5964b7579f77SDag-Erling Smørgrav{ 5965b7579f77SDag-Erling Smørgrav struct stat st; 5966b7579f77SDag-Erling Smørgrav 5967b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 5968b7579f77SDag-Erling Smørgrav nonempty (path)); 5969b7579f77SDag-Erling Smørgrav if ((!path) || (!*path)) 5970b7579f77SDag-Erling Smørgrav return 0; 5971b7579f77SDag-Erling Smørgrav 5972b7579f77SDag-Erling Smørgrav if ((stat (path, &st) >= 0) 5973b7579f77SDag-Erling Smørgrav && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 5974b7579f77SDag-Erling Smørgrav return 1; 5975b7579f77SDag-Erling Smørgrav else 5976b7579f77SDag-Erling Smørgrav return 0; 5977b7579f77SDag-Erling Smørgrav} 5978b7579f77SDag-Erling Smørgrav 5979b7579f77SDag-Erling Smørgravint 5980b7579f77SDag-Erling Smørgravmake_executable (const char *path) 5981b7579f77SDag-Erling Smørgrav{ 5982b7579f77SDag-Erling Smørgrav int rval = 0; 5983b7579f77SDag-Erling Smørgrav struct stat st; 5984b7579f77SDag-Erling Smørgrav 5985b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 5986b7579f77SDag-Erling Smørgrav nonempty (path)); 5987b7579f77SDag-Erling Smørgrav if ((!path) || (!*path)) 5988b7579f77SDag-Erling Smørgrav return 0; 5989b7579f77SDag-Erling Smørgrav 5990b7579f77SDag-Erling Smørgrav if (stat (path, &st) >= 0) 5991b7579f77SDag-Erling Smørgrav { 5992b7579f77SDag-Erling Smørgrav rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 5993b7579f77SDag-Erling Smørgrav } 5994b7579f77SDag-Erling Smørgrav return rval; 5995b7579f77SDag-Erling Smørgrav} 5996b7579f77SDag-Erling Smørgrav 5997b7579f77SDag-Erling Smørgrav/* Searches for the full path of the wrapper. Returns 5998b7579f77SDag-Erling Smørgrav newly allocated full path name if found, NULL otherwise 5999b7579f77SDag-Erling Smørgrav Does not chase symlinks, even on platforms that support them. 6000b7579f77SDag-Erling Smørgrav*/ 6001b7579f77SDag-Erling Smørgravchar * 6002b7579f77SDag-Erling Smørgravfind_executable (const char *wrapper) 6003b7579f77SDag-Erling Smørgrav{ 6004b7579f77SDag-Erling Smørgrav int has_slash = 0; 6005b7579f77SDag-Erling Smørgrav const char *p; 6006b7579f77SDag-Erling Smørgrav const char *p_next; 6007b7579f77SDag-Erling Smørgrav /* static buffer for getcwd */ 6008b7579f77SDag-Erling Smørgrav char tmp[LT_PATHMAX + 1]; 6009f61ef7f6SDag-Erling Smørgrav size_t tmp_len; 6010b7579f77SDag-Erling Smørgrav char *concat_name; 6011b7579f77SDag-Erling Smørgrav 6012b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 6013b7579f77SDag-Erling Smørgrav nonempty (wrapper)); 6014b7579f77SDag-Erling Smørgrav 6015b7579f77SDag-Erling Smørgrav if ((wrapper == NULL) || (*wrapper == '\0')) 6016b7579f77SDag-Erling Smørgrav return NULL; 6017b7579f77SDag-Erling Smørgrav 6018b7579f77SDag-Erling Smørgrav /* Absolute path? */ 6019f61ef7f6SDag-Erling Smørgrav#if defined HAVE_DOS_BASED_FILE_SYSTEM 6020b7579f77SDag-Erling Smørgrav if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 6021b7579f77SDag-Erling Smørgrav { 6022b7579f77SDag-Erling Smørgrav concat_name = xstrdup (wrapper); 6023b7579f77SDag-Erling Smørgrav if (check_executable (concat_name)) 6024b7579f77SDag-Erling Smørgrav return concat_name; 6025b7579f77SDag-Erling Smørgrav XFREE (concat_name); 6026b7579f77SDag-Erling Smørgrav } 6027b7579f77SDag-Erling Smørgrav else 6028b7579f77SDag-Erling Smørgrav { 6029b7579f77SDag-Erling Smørgrav#endif 6030b7579f77SDag-Erling Smørgrav if (IS_DIR_SEPARATOR (wrapper[0])) 6031b7579f77SDag-Erling Smørgrav { 6032b7579f77SDag-Erling Smørgrav concat_name = xstrdup (wrapper); 6033b7579f77SDag-Erling Smørgrav if (check_executable (concat_name)) 6034b7579f77SDag-Erling Smørgrav return concat_name; 6035b7579f77SDag-Erling Smørgrav XFREE (concat_name); 6036b7579f77SDag-Erling Smørgrav } 6037f61ef7f6SDag-Erling Smørgrav#if defined HAVE_DOS_BASED_FILE_SYSTEM 6038b7579f77SDag-Erling Smørgrav } 6039b7579f77SDag-Erling Smørgrav#endif 6040b7579f77SDag-Erling Smørgrav 6041b7579f77SDag-Erling Smørgrav for (p = wrapper; *p; p++) 6042b7579f77SDag-Erling Smørgrav if (*p == '/') 6043b7579f77SDag-Erling Smørgrav { 6044b7579f77SDag-Erling Smørgrav has_slash = 1; 6045b7579f77SDag-Erling Smørgrav break; 6046b7579f77SDag-Erling Smørgrav } 6047b7579f77SDag-Erling Smørgrav if (!has_slash) 6048b7579f77SDag-Erling Smørgrav { 6049b7579f77SDag-Erling Smørgrav /* no slashes; search PATH */ 6050b7579f77SDag-Erling Smørgrav const char *path = getenv ("PATH"); 6051b7579f77SDag-Erling Smørgrav if (path != NULL) 6052b7579f77SDag-Erling Smørgrav { 6053b7579f77SDag-Erling Smørgrav for (p = path; *p; p = p_next) 6054b7579f77SDag-Erling Smørgrav { 6055b7579f77SDag-Erling Smørgrav const char *q; 6056b7579f77SDag-Erling Smørgrav size_t p_len; 6057b7579f77SDag-Erling Smørgrav for (q = p; *q; q++) 6058b7579f77SDag-Erling Smørgrav if (IS_PATH_SEPARATOR (*q)) 6059b7579f77SDag-Erling Smørgrav break; 6060f61ef7f6SDag-Erling Smørgrav p_len = (size_t) (q - p); 6061b7579f77SDag-Erling Smørgrav p_next = (*q == '\0' ? q : q + 1); 6062b7579f77SDag-Erling Smørgrav if (p_len == 0) 6063b7579f77SDag-Erling Smørgrav { 6064b7579f77SDag-Erling Smørgrav /* empty path: current directory */ 6065b7579f77SDag-Erling Smørgrav if (getcwd (tmp, LT_PATHMAX) == NULL) 6066b7579f77SDag-Erling Smørgrav lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6067b7579f77SDag-Erling Smørgrav nonnull (strerror (errno))); 6068b7579f77SDag-Erling Smørgrav tmp_len = strlen (tmp); 6069b7579f77SDag-Erling Smørgrav concat_name = 6070b7579f77SDag-Erling Smørgrav XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6071b7579f77SDag-Erling Smørgrav memcpy (concat_name, tmp, tmp_len); 6072b7579f77SDag-Erling Smørgrav concat_name[tmp_len] = '/'; 6073b7579f77SDag-Erling Smørgrav strcpy (concat_name + tmp_len + 1, wrapper); 6074b7579f77SDag-Erling Smørgrav } 6075b7579f77SDag-Erling Smørgrav else 6076b7579f77SDag-Erling Smørgrav { 6077b7579f77SDag-Erling Smørgrav concat_name = 6078b7579f77SDag-Erling Smørgrav XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 6079b7579f77SDag-Erling Smørgrav memcpy (concat_name, p, p_len); 6080b7579f77SDag-Erling Smørgrav concat_name[p_len] = '/'; 6081b7579f77SDag-Erling Smørgrav strcpy (concat_name + p_len + 1, wrapper); 6082b7579f77SDag-Erling Smørgrav } 6083b7579f77SDag-Erling Smørgrav if (check_executable (concat_name)) 6084b7579f77SDag-Erling Smørgrav return concat_name; 6085b7579f77SDag-Erling Smørgrav XFREE (concat_name); 6086b7579f77SDag-Erling Smørgrav } 6087b7579f77SDag-Erling Smørgrav } 6088b7579f77SDag-Erling Smørgrav /* not found in PATH; assume curdir */ 6089b7579f77SDag-Erling Smørgrav } 6090b7579f77SDag-Erling Smørgrav /* Relative path | not found in path: prepend cwd */ 6091b7579f77SDag-Erling Smørgrav if (getcwd (tmp, LT_PATHMAX) == NULL) 6092b7579f77SDag-Erling Smørgrav lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 6093b7579f77SDag-Erling Smørgrav nonnull (strerror (errno))); 6094b7579f77SDag-Erling Smørgrav tmp_len = strlen (tmp); 6095b7579f77SDag-Erling Smørgrav concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 6096b7579f77SDag-Erling Smørgrav memcpy (concat_name, tmp, tmp_len); 6097b7579f77SDag-Erling Smørgrav concat_name[tmp_len] = '/'; 6098b7579f77SDag-Erling Smørgrav strcpy (concat_name + tmp_len + 1, wrapper); 6099b7579f77SDag-Erling Smørgrav 6100b7579f77SDag-Erling Smørgrav if (check_executable (concat_name)) 6101b7579f77SDag-Erling Smørgrav return concat_name; 6102b7579f77SDag-Erling Smørgrav XFREE (concat_name); 6103b7579f77SDag-Erling Smørgrav return NULL; 6104b7579f77SDag-Erling Smørgrav} 6105b7579f77SDag-Erling Smørgrav 6106b7579f77SDag-Erling Smørgravchar * 6107b7579f77SDag-Erling Smørgravchase_symlinks (const char *pathspec) 6108b7579f77SDag-Erling Smørgrav{ 6109b7579f77SDag-Erling Smørgrav#ifndef S_ISLNK 6110b7579f77SDag-Erling Smørgrav return xstrdup (pathspec); 6111b7579f77SDag-Erling Smørgrav#else 6112b7579f77SDag-Erling Smørgrav char buf[LT_PATHMAX]; 6113b7579f77SDag-Erling Smørgrav struct stat s; 6114b7579f77SDag-Erling Smørgrav char *tmp_pathspec = xstrdup (pathspec); 6115b7579f77SDag-Erling Smørgrav char *p; 6116b7579f77SDag-Erling Smørgrav int has_symlinks = 0; 6117b7579f77SDag-Erling Smørgrav while (strlen (tmp_pathspec) && !has_symlinks) 6118b7579f77SDag-Erling Smørgrav { 6119b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 6120b7579f77SDag-Erling Smørgrav "checking path component for symlinks: %s\n", 6121b7579f77SDag-Erling Smørgrav tmp_pathspec); 6122b7579f77SDag-Erling Smørgrav if (lstat (tmp_pathspec, &s) == 0) 6123b7579f77SDag-Erling Smørgrav { 6124b7579f77SDag-Erling Smørgrav if (S_ISLNK (s.st_mode) != 0) 6125b7579f77SDag-Erling Smørgrav { 6126b7579f77SDag-Erling Smørgrav has_symlinks = 1; 6127b7579f77SDag-Erling Smørgrav break; 6128b7579f77SDag-Erling Smørgrav } 6129b7579f77SDag-Erling Smørgrav 6130b7579f77SDag-Erling Smørgrav /* search backwards for last DIR_SEPARATOR */ 6131b7579f77SDag-Erling Smørgrav p = tmp_pathspec + strlen (tmp_pathspec) - 1; 6132b7579f77SDag-Erling Smørgrav while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6133b7579f77SDag-Erling Smørgrav p--; 6134b7579f77SDag-Erling Smørgrav if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 6135b7579f77SDag-Erling Smørgrav { 6136b7579f77SDag-Erling Smørgrav /* no more DIR_SEPARATORS left */ 6137b7579f77SDag-Erling Smørgrav break; 6138b7579f77SDag-Erling Smørgrav } 6139b7579f77SDag-Erling Smørgrav *p = '\0'; 6140b7579f77SDag-Erling Smørgrav } 6141b7579f77SDag-Erling Smørgrav else 6142b7579f77SDag-Erling Smørgrav { 6143b7579f77SDag-Erling Smørgrav lt_fatal (__FILE__, __LINE__, 6144b7579f77SDag-Erling Smørgrav "error accessing file \"%s\": %s", 6145b7579f77SDag-Erling Smørgrav tmp_pathspec, nonnull (strerror (errno))); 6146b7579f77SDag-Erling Smørgrav } 6147b7579f77SDag-Erling Smørgrav } 6148b7579f77SDag-Erling Smørgrav XFREE (tmp_pathspec); 6149b7579f77SDag-Erling Smørgrav 6150b7579f77SDag-Erling Smørgrav if (!has_symlinks) 6151b7579f77SDag-Erling Smørgrav { 6152b7579f77SDag-Erling Smørgrav return xstrdup (pathspec); 6153b7579f77SDag-Erling Smørgrav } 6154b7579f77SDag-Erling Smørgrav 6155b7579f77SDag-Erling Smørgrav tmp_pathspec = realpath (pathspec, buf); 6156b7579f77SDag-Erling Smørgrav if (tmp_pathspec == 0) 6157b7579f77SDag-Erling Smørgrav { 6158b7579f77SDag-Erling Smørgrav lt_fatal (__FILE__, __LINE__, 6159b7579f77SDag-Erling Smørgrav "could not follow symlinks for %s", pathspec); 6160b7579f77SDag-Erling Smørgrav } 6161b7579f77SDag-Erling Smørgrav return xstrdup (tmp_pathspec); 6162b7579f77SDag-Erling Smørgrav#endif 6163b7579f77SDag-Erling Smørgrav} 6164b7579f77SDag-Erling Smørgrav 6165b7579f77SDag-Erling Smørgravchar * 6166b7579f77SDag-Erling Smørgravstrendzap (char *str, const char *pat) 6167b7579f77SDag-Erling Smørgrav{ 6168b7579f77SDag-Erling Smørgrav size_t len, patlen; 6169b7579f77SDag-Erling Smørgrav 6170b7579f77SDag-Erling Smørgrav assert (str != NULL); 6171b7579f77SDag-Erling Smørgrav assert (pat != NULL); 6172b7579f77SDag-Erling Smørgrav 6173b7579f77SDag-Erling Smørgrav len = strlen (str); 6174b7579f77SDag-Erling Smørgrav patlen = strlen (pat); 6175b7579f77SDag-Erling Smørgrav 6176b7579f77SDag-Erling Smørgrav if (patlen <= len) 6177b7579f77SDag-Erling Smørgrav { 6178b7579f77SDag-Erling Smørgrav str += len - patlen; 6179f61ef7f6SDag-Erling Smørgrav if (STREQ (str, pat)) 6180b7579f77SDag-Erling Smørgrav *str = '\0'; 6181b7579f77SDag-Erling Smørgrav } 6182b7579f77SDag-Erling Smørgrav return str; 6183b7579f77SDag-Erling Smørgrav} 6184b7579f77SDag-Erling Smørgrav 6185b7579f77SDag-Erling Smørgravvoid 6186b7579f77SDag-Erling Smørgravlt_debugprintf (const char *file, int line, const char *fmt, ...) 6187b7579f77SDag-Erling Smørgrav{ 6188b7579f77SDag-Erling Smørgrav va_list args; 6189b7579f77SDag-Erling Smørgrav if (lt_debug) 6190b7579f77SDag-Erling Smørgrav { 6191b7579f77SDag-Erling Smørgrav (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 6192b7579f77SDag-Erling Smørgrav va_start (args, fmt); 6193b7579f77SDag-Erling Smørgrav (void) vfprintf (stderr, fmt, args); 6194b7579f77SDag-Erling Smørgrav va_end (args); 6195b7579f77SDag-Erling Smørgrav } 6196b7579f77SDag-Erling Smørgrav} 6197b7579f77SDag-Erling Smørgrav 6198b7579f77SDag-Erling Smørgravstatic void 6199b7579f77SDag-Erling Smørgravlt_error_core (int exit_status, const char *file, 6200b7579f77SDag-Erling Smørgrav int line, const char *mode, 6201b7579f77SDag-Erling Smørgrav const char *message, va_list ap) 6202b7579f77SDag-Erling Smørgrav{ 6203b7579f77SDag-Erling Smørgrav fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 6204b7579f77SDag-Erling Smørgrav vfprintf (stderr, message, ap); 6205b7579f77SDag-Erling Smørgrav fprintf (stderr, ".\n"); 6206b7579f77SDag-Erling Smørgrav 6207b7579f77SDag-Erling Smørgrav if (exit_status >= 0) 6208b7579f77SDag-Erling Smørgrav exit (exit_status); 6209b7579f77SDag-Erling Smørgrav} 6210b7579f77SDag-Erling Smørgrav 6211b7579f77SDag-Erling Smørgravvoid 6212b7579f77SDag-Erling Smørgravlt_fatal (const char *file, int line, const char *message, ...) 6213b7579f77SDag-Erling Smørgrav{ 6214b7579f77SDag-Erling Smørgrav va_list ap; 6215b7579f77SDag-Erling Smørgrav va_start (ap, message); 6216b7579f77SDag-Erling Smørgrav lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 6217b7579f77SDag-Erling Smørgrav va_end (ap); 6218b7579f77SDag-Erling Smørgrav} 6219b7579f77SDag-Erling Smørgrav 6220b7579f77SDag-Erling Smørgravstatic const char * 6221b7579f77SDag-Erling Smørgravnonnull (const char *s) 6222b7579f77SDag-Erling Smørgrav{ 6223b7579f77SDag-Erling Smørgrav return s ? s : "(null)"; 6224b7579f77SDag-Erling Smørgrav} 6225b7579f77SDag-Erling Smørgrav 6226b7579f77SDag-Erling Smørgravstatic const char * 6227b7579f77SDag-Erling Smørgravnonempty (const char *s) 6228b7579f77SDag-Erling Smørgrav{ 6229b7579f77SDag-Erling Smørgrav return (s && !*s) ? "(empty)" : nonnull (s); 6230b7579f77SDag-Erling Smørgrav} 6231b7579f77SDag-Erling Smørgrav 6232b7579f77SDag-Erling Smørgravvoid 6233b7579f77SDag-Erling Smørgravlt_setenv (const char *name, const char *value) 6234b7579f77SDag-Erling Smørgrav{ 6235b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 6236b7579f77SDag-Erling Smørgrav "(lt_setenv) setting '%s' to '%s'\n", 6237b7579f77SDag-Erling Smørgrav nonnull (name), nonnull (value)); 6238b7579f77SDag-Erling Smørgrav { 6239b7579f77SDag-Erling Smørgrav#ifdef HAVE_SETENV 6240b7579f77SDag-Erling Smørgrav /* always make a copy, for consistency with !HAVE_SETENV */ 6241b7579f77SDag-Erling Smørgrav char *str = xstrdup (value); 6242b7579f77SDag-Erling Smørgrav setenv (name, str, 1); 6243b7579f77SDag-Erling Smørgrav#else 6244f61ef7f6SDag-Erling Smørgrav size_t len = strlen (name) + 1 + strlen (value) + 1; 6245b7579f77SDag-Erling Smørgrav char *str = XMALLOC (char, len); 6246b7579f77SDag-Erling Smørgrav sprintf (str, "%s=%s", name, value); 6247b7579f77SDag-Erling Smørgrav if (putenv (str) != EXIT_SUCCESS) 6248b7579f77SDag-Erling Smørgrav { 6249b7579f77SDag-Erling Smørgrav XFREE (str); 6250b7579f77SDag-Erling Smørgrav } 6251b7579f77SDag-Erling Smørgrav#endif 6252b7579f77SDag-Erling Smørgrav } 6253b7579f77SDag-Erling Smørgrav} 6254b7579f77SDag-Erling Smørgrav 6255b7579f77SDag-Erling Smørgravchar * 6256b7579f77SDag-Erling Smørgravlt_extend_str (const char *orig_value, const char *add, int to_end) 6257b7579f77SDag-Erling Smørgrav{ 6258b7579f77SDag-Erling Smørgrav char *new_value; 6259b7579f77SDag-Erling Smørgrav if (orig_value && *orig_value) 6260b7579f77SDag-Erling Smørgrav { 6261f61ef7f6SDag-Erling Smørgrav size_t orig_value_len = strlen (orig_value); 6262f61ef7f6SDag-Erling Smørgrav size_t add_len = strlen (add); 6263b7579f77SDag-Erling Smørgrav new_value = XMALLOC (char, add_len + orig_value_len + 1); 6264b7579f77SDag-Erling Smørgrav if (to_end) 6265b7579f77SDag-Erling Smørgrav { 6266b7579f77SDag-Erling Smørgrav strcpy (new_value, orig_value); 6267b7579f77SDag-Erling Smørgrav strcpy (new_value + orig_value_len, add); 6268b7579f77SDag-Erling Smørgrav } 6269b7579f77SDag-Erling Smørgrav else 6270b7579f77SDag-Erling Smørgrav { 6271b7579f77SDag-Erling Smørgrav strcpy (new_value, add); 6272b7579f77SDag-Erling Smørgrav strcpy (new_value + add_len, orig_value); 6273b7579f77SDag-Erling Smørgrav } 6274b7579f77SDag-Erling Smørgrav } 6275b7579f77SDag-Erling Smørgrav else 6276b7579f77SDag-Erling Smørgrav { 6277b7579f77SDag-Erling Smørgrav new_value = xstrdup (add); 6278b7579f77SDag-Erling Smørgrav } 6279b7579f77SDag-Erling Smørgrav return new_value; 6280b7579f77SDag-Erling Smørgrav} 6281b7579f77SDag-Erling Smørgrav 6282b7579f77SDag-Erling Smørgravvoid 6283b7579f77SDag-Erling Smørgravlt_update_exe_path (const char *name, const char *value) 6284b7579f77SDag-Erling Smørgrav{ 6285b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 6286b7579f77SDag-Erling Smørgrav "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 6287b7579f77SDag-Erling Smørgrav nonnull (name), nonnull (value)); 6288b7579f77SDag-Erling Smørgrav 6289b7579f77SDag-Erling Smørgrav if (name && *name && value && *value) 6290b7579f77SDag-Erling Smørgrav { 6291b7579f77SDag-Erling Smørgrav char *new_value = lt_extend_str (getenv (name), value, 0); 6292b7579f77SDag-Erling Smørgrav /* some systems can't cope with a ':'-terminated path #' */ 6293f61ef7f6SDag-Erling Smørgrav size_t len = strlen (new_value); 6294f61ef7f6SDag-Erling Smørgrav while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 6295b7579f77SDag-Erling Smørgrav { 6296f61ef7f6SDag-Erling Smørgrav new_value[--len] = '\0'; 6297b7579f77SDag-Erling Smørgrav } 6298b7579f77SDag-Erling Smørgrav lt_setenv (name, new_value); 6299b7579f77SDag-Erling Smørgrav XFREE (new_value); 6300b7579f77SDag-Erling Smørgrav } 6301b7579f77SDag-Erling Smørgrav} 6302b7579f77SDag-Erling Smørgrav 6303b7579f77SDag-Erling Smørgravvoid 6304b7579f77SDag-Erling Smørgravlt_update_lib_path (const char *name, const char *value) 6305b7579f77SDag-Erling Smørgrav{ 6306b7579f77SDag-Erling Smørgrav lt_debugprintf (__FILE__, __LINE__, 6307b7579f77SDag-Erling Smørgrav "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 6308b7579f77SDag-Erling Smørgrav nonnull (name), nonnull (value)); 6309b7579f77SDag-Erling Smørgrav 6310b7579f77SDag-Erling Smørgrav if (name && *name && value && *value) 6311b7579f77SDag-Erling Smørgrav { 6312b7579f77SDag-Erling Smørgrav char *new_value = lt_extend_str (getenv (name), value, 0); 6313b7579f77SDag-Erling Smørgrav lt_setenv (name, new_value); 6314b7579f77SDag-Erling Smørgrav XFREE (new_value); 6315b7579f77SDag-Erling Smørgrav } 6316b7579f77SDag-Erling Smørgrav} 6317b7579f77SDag-Erling Smørgrav 6318b7579f77SDag-Erling SmørgravEOF 6319b7579f77SDag-Erling Smørgrav case $host_os in 6320b7579f77SDag-Erling Smørgrav mingw*) 6321b7579f77SDag-Erling Smørgrav cat <<"EOF" 6322b7579f77SDag-Erling Smørgrav 6323b7579f77SDag-Erling Smørgrav/* Prepares an argument vector before calling spawn(). 6324b7579f77SDag-Erling Smørgrav Note that spawn() does not by itself call the command interpreter 6325b7579f77SDag-Erling Smørgrav (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 6326b7579f77SDag-Erling Smørgrav ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 6327b7579f77SDag-Erling Smørgrav GetVersionEx(&v); 6328b7579f77SDag-Erling Smørgrav v.dwPlatformId == VER_PLATFORM_WIN32_NT; 6329b7579f77SDag-Erling Smørgrav }) ? "cmd.exe" : "command.com"). 6330b7579f77SDag-Erling Smørgrav Instead it simply concatenates the arguments, separated by ' ', and calls 6331b7579f77SDag-Erling Smørgrav CreateProcess(). We must quote the arguments since Win32 CreateProcess() 6332b7579f77SDag-Erling Smørgrav interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 6333b7579f77SDag-Erling Smørgrav special way: 6334b7579f77SDag-Erling Smørgrav - Space and tab are interpreted as delimiters. They are not treated as 6335b7579f77SDag-Erling Smørgrav delimiters if they are surrounded by double quotes: "...". 6336b7579f77SDag-Erling Smørgrav - Unescaped double quotes are removed from the input. Their only effect is 6337b7579f77SDag-Erling Smørgrav that within double quotes, space and tab are treated like normal 6338b7579f77SDag-Erling Smørgrav characters. 6339b7579f77SDag-Erling Smørgrav - Backslashes not followed by double quotes are not special. 6340b7579f77SDag-Erling Smørgrav - But 2*n+1 backslashes followed by a double quote become 6341b7579f77SDag-Erling Smørgrav n backslashes followed by a double quote (n >= 0): 6342b7579f77SDag-Erling Smørgrav \" -> " 6343b7579f77SDag-Erling Smørgrav \\\" -> \" 6344b7579f77SDag-Erling Smørgrav \\\\\" -> \\" 6345b7579f77SDag-Erling Smørgrav */ 6346b7579f77SDag-Erling Smørgrav#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" 6347b7579f77SDag-Erling Smørgrav#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" 6348b7579f77SDag-Erling Smørgravchar ** 6349b7579f77SDag-Erling Smørgravprepare_spawn (char **argv) 6350b7579f77SDag-Erling Smørgrav{ 6351b7579f77SDag-Erling Smørgrav size_t argc; 6352b7579f77SDag-Erling Smørgrav char **new_argv; 6353b7579f77SDag-Erling Smørgrav size_t i; 6354b7579f77SDag-Erling Smørgrav 6355b7579f77SDag-Erling Smørgrav /* Count number of arguments. */ 6356b7579f77SDag-Erling Smørgrav for (argc = 0; argv[argc] != NULL; argc++) 6357b7579f77SDag-Erling Smørgrav ; 6358b7579f77SDag-Erling Smørgrav 6359b7579f77SDag-Erling Smørgrav /* Allocate new argument vector. */ 6360b7579f77SDag-Erling Smørgrav new_argv = XMALLOC (char *, argc + 1); 6361b7579f77SDag-Erling Smørgrav 6362b7579f77SDag-Erling Smørgrav /* Put quoted arguments into the new argument vector. */ 6363b7579f77SDag-Erling Smørgrav for (i = 0; i < argc; i++) 6364b7579f77SDag-Erling Smørgrav { 6365b7579f77SDag-Erling Smørgrav const char *string = argv[i]; 6366b7579f77SDag-Erling Smørgrav 6367b7579f77SDag-Erling Smørgrav if (string[0] == '\0') 6368b7579f77SDag-Erling Smørgrav new_argv[i] = xstrdup ("\"\""); 6369b7579f77SDag-Erling Smørgrav else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 6370b7579f77SDag-Erling Smørgrav { 6371b7579f77SDag-Erling Smørgrav int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 6372b7579f77SDag-Erling Smørgrav size_t length; 6373b7579f77SDag-Erling Smørgrav unsigned int backslashes; 6374b7579f77SDag-Erling Smørgrav const char *s; 6375b7579f77SDag-Erling Smørgrav char *quoted_string; 6376b7579f77SDag-Erling Smørgrav char *p; 6377b7579f77SDag-Erling Smørgrav 6378b7579f77SDag-Erling Smørgrav length = 0; 6379b7579f77SDag-Erling Smørgrav backslashes = 0; 6380b7579f77SDag-Erling Smørgrav if (quote_around) 6381b7579f77SDag-Erling Smørgrav length++; 6382b7579f77SDag-Erling Smørgrav for (s = string; *s != '\0'; s++) 6383b7579f77SDag-Erling Smørgrav { 6384b7579f77SDag-Erling Smørgrav char c = *s; 6385b7579f77SDag-Erling Smørgrav if (c == '"') 6386b7579f77SDag-Erling Smørgrav length += backslashes + 1; 6387b7579f77SDag-Erling Smørgrav length++; 6388b7579f77SDag-Erling Smørgrav if (c == '\\') 6389b7579f77SDag-Erling Smørgrav backslashes++; 6390b7579f77SDag-Erling Smørgrav else 6391b7579f77SDag-Erling Smørgrav backslashes = 0; 6392b7579f77SDag-Erling Smørgrav } 6393b7579f77SDag-Erling Smørgrav if (quote_around) 6394b7579f77SDag-Erling Smørgrav length += backslashes + 1; 6395b7579f77SDag-Erling Smørgrav 6396b7579f77SDag-Erling Smørgrav quoted_string = XMALLOC (char, length + 1); 6397b7579f77SDag-Erling Smørgrav 6398b7579f77SDag-Erling Smørgrav p = quoted_string; 6399b7579f77SDag-Erling Smørgrav backslashes = 0; 6400b7579f77SDag-Erling Smørgrav if (quote_around) 6401b7579f77SDag-Erling Smørgrav *p++ = '"'; 6402b7579f77SDag-Erling Smørgrav for (s = string; *s != '\0'; s++) 6403b7579f77SDag-Erling Smørgrav { 6404b7579f77SDag-Erling Smørgrav char c = *s; 6405b7579f77SDag-Erling Smørgrav if (c == '"') 6406b7579f77SDag-Erling Smørgrav { 6407b7579f77SDag-Erling Smørgrav unsigned int j; 6408b7579f77SDag-Erling Smørgrav for (j = backslashes + 1; j > 0; j--) 6409b7579f77SDag-Erling Smørgrav *p++ = '\\'; 6410b7579f77SDag-Erling Smørgrav } 6411b7579f77SDag-Erling Smørgrav *p++ = c; 6412b7579f77SDag-Erling Smørgrav if (c == '\\') 6413b7579f77SDag-Erling Smørgrav backslashes++; 6414b7579f77SDag-Erling Smørgrav else 6415b7579f77SDag-Erling Smørgrav backslashes = 0; 6416b7579f77SDag-Erling Smørgrav } 6417b7579f77SDag-Erling Smørgrav if (quote_around) 6418b7579f77SDag-Erling Smørgrav { 6419b7579f77SDag-Erling Smørgrav unsigned int j; 6420b7579f77SDag-Erling Smørgrav for (j = backslashes; j > 0; j--) 6421b7579f77SDag-Erling Smørgrav *p++ = '\\'; 6422b7579f77SDag-Erling Smørgrav *p++ = '"'; 6423b7579f77SDag-Erling Smørgrav } 6424b7579f77SDag-Erling Smørgrav *p = '\0'; 6425b7579f77SDag-Erling Smørgrav 6426b7579f77SDag-Erling Smørgrav new_argv[i] = quoted_string; 6427b7579f77SDag-Erling Smørgrav } 6428b7579f77SDag-Erling Smørgrav else 6429b7579f77SDag-Erling Smørgrav new_argv[i] = (char *) string; 6430b7579f77SDag-Erling Smørgrav } 6431b7579f77SDag-Erling Smørgrav new_argv[argc] = NULL; 6432b7579f77SDag-Erling Smørgrav 6433b7579f77SDag-Erling Smørgrav return new_argv; 6434b7579f77SDag-Erling Smørgrav} 6435b7579f77SDag-Erling SmørgravEOF 6436b7579f77SDag-Erling Smørgrav ;; 6437b7579f77SDag-Erling Smørgrav esac 6438b7579f77SDag-Erling Smørgrav 6439b7579f77SDag-Erling Smørgrav cat <<"EOF" 6440b7579f77SDag-Erling Smørgravvoid lt_dump_script (FILE* f) 6441b7579f77SDag-Erling Smørgrav{ 6442b7579f77SDag-Erling SmørgravEOF 6443b7579f77SDag-Erling Smørgrav func_emit_wrapper yes | 64448ed2b524SDag-Erling Smørgrav $SED -n -e ' 64458ed2b524SDag-Erling Smørgravs/^\(.\{79\}\)\(..*\)/\1\ 64468ed2b524SDag-Erling Smørgrav\2/ 64478ed2b524SDag-Erling Smørgravh 64488ed2b524SDag-Erling Smørgravs/\([\\"]\)/\\\1/g 64498ed2b524SDag-Erling Smørgravs/$/\\n/ 64508ed2b524SDag-Erling Smørgravs/\([^\n]*\).*/ fputs ("\1", f);/p 64518ed2b524SDag-Erling Smørgravg 64528ed2b524SDag-Erling SmørgravD' 6453b7579f77SDag-Erling Smørgrav cat <<"EOF" 6454b7579f77SDag-Erling Smørgrav} 6455b7579f77SDag-Erling SmørgravEOF 6456b7579f77SDag-Erling Smørgrav} 6457b7579f77SDag-Erling Smørgrav# end: func_emit_cwrapperexe_src 6458b7579f77SDag-Erling Smørgrav 6459b7579f77SDag-Erling Smørgrav# func_win32_import_lib_p ARG 6460b7579f77SDag-Erling Smørgrav# True if ARG is an import lib, as indicated by $file_magic_cmd 6461b7579f77SDag-Erling Smørgravfunc_win32_import_lib_p () 6462b7579f77SDag-Erling Smørgrav{ 6463f61ef7f6SDag-Erling Smørgrav $debug_cmd 6464f61ef7f6SDag-Erling Smørgrav 6465b7579f77SDag-Erling Smørgrav case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 6466b7579f77SDag-Erling Smørgrav *import*) : ;; 6467b7579f77SDag-Erling Smørgrav *) false ;; 6468b7579f77SDag-Erling Smørgrav esac 6469b7579f77SDag-Erling Smørgrav} 6470b7579f77SDag-Erling Smørgrav 6471f61ef7f6SDag-Erling Smørgrav# func_suncc_cstd_abi 6472f61ef7f6SDag-Erling Smørgrav# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! 6473f61ef7f6SDag-Erling Smørgrav# Several compiler flags select an ABI that is incompatible with the 6474f61ef7f6SDag-Erling Smørgrav# Cstd library. Avoid specifying it if any are in CXXFLAGS. 6475f61ef7f6SDag-Erling Smørgravfunc_suncc_cstd_abi () 6476f61ef7f6SDag-Erling Smørgrav{ 6477f61ef7f6SDag-Erling Smørgrav $debug_cmd 6478f61ef7f6SDag-Erling Smørgrav 6479f61ef7f6SDag-Erling Smørgrav case " $compile_command " in 6480f61ef7f6SDag-Erling Smørgrav *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) 6481f61ef7f6SDag-Erling Smørgrav suncc_use_cstd_abi=no 6482f61ef7f6SDag-Erling Smørgrav ;; 6483f61ef7f6SDag-Erling Smørgrav *) 6484f61ef7f6SDag-Erling Smørgrav suncc_use_cstd_abi=yes 6485f61ef7f6SDag-Erling Smørgrav ;; 6486f61ef7f6SDag-Erling Smørgrav esac 6487f61ef7f6SDag-Erling Smørgrav} 6488f61ef7f6SDag-Erling Smørgrav 6489b7579f77SDag-Erling Smørgrav# func_mode_link arg... 6490b7579f77SDag-Erling Smørgravfunc_mode_link () 6491b7579f77SDag-Erling Smørgrav{ 6492f61ef7f6SDag-Erling Smørgrav $debug_cmd 6493f61ef7f6SDag-Erling Smørgrav 6494b7579f77SDag-Erling Smørgrav case $host in 6495b7579f77SDag-Erling Smørgrav *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6496b7579f77SDag-Erling Smørgrav # It is impossible to link a dll without this setting, and 6497b7579f77SDag-Erling Smørgrav # we shouldn't force the makefile maintainer to figure out 6498f61ef7f6SDag-Erling Smørgrav # what system we are compiling for in order to pass an extra 6499b7579f77SDag-Erling Smørgrav # flag for every libtool invocation. 6500b7579f77SDag-Erling Smørgrav # allow_undefined=no 6501b7579f77SDag-Erling Smørgrav 6502b7579f77SDag-Erling Smørgrav # FIXME: Unfortunately, there are problems with the above when trying 6503f61ef7f6SDag-Erling Smørgrav # to make a dll that has undefined symbols, in which case not 6504b7579f77SDag-Erling Smørgrav # even a static library is built. For now, we need to specify 6505b7579f77SDag-Erling Smørgrav # -no-undefined on the libtool link line when we can be certain 6506b7579f77SDag-Erling Smørgrav # that all symbols are satisfied, otherwise we get a static library. 6507b7579f77SDag-Erling Smørgrav allow_undefined=yes 6508b7579f77SDag-Erling Smørgrav ;; 6509b7579f77SDag-Erling Smørgrav *) 6510b7579f77SDag-Erling Smørgrav allow_undefined=yes 6511b7579f77SDag-Erling Smørgrav ;; 6512b7579f77SDag-Erling Smørgrav esac 6513b7579f77SDag-Erling Smørgrav libtool_args=$nonopt 6514b7579f77SDag-Erling Smørgrav base_compile="$nonopt $@" 6515b7579f77SDag-Erling Smørgrav compile_command=$nonopt 6516b7579f77SDag-Erling Smørgrav finalize_command=$nonopt 6517b7579f77SDag-Erling Smørgrav 6518b7579f77SDag-Erling Smørgrav compile_rpath= 6519b7579f77SDag-Erling Smørgrav finalize_rpath= 6520b7579f77SDag-Erling Smørgrav compile_shlibpath= 6521b7579f77SDag-Erling Smørgrav finalize_shlibpath= 6522b7579f77SDag-Erling Smørgrav convenience= 6523b7579f77SDag-Erling Smørgrav old_convenience= 6524b7579f77SDag-Erling Smørgrav deplibs= 6525b7579f77SDag-Erling Smørgrav old_deplibs= 6526b7579f77SDag-Erling Smørgrav compiler_flags= 6527b7579f77SDag-Erling Smørgrav linker_flags= 6528b7579f77SDag-Erling Smørgrav dllsearchpath= 6529b7579f77SDag-Erling Smørgrav lib_search_path=`pwd` 6530b7579f77SDag-Erling Smørgrav inst_prefix_dir= 6531b7579f77SDag-Erling Smørgrav new_inherited_linker_flags= 6532b7579f77SDag-Erling Smørgrav 6533b7579f77SDag-Erling Smørgrav avoid_version=no 6534b7579f77SDag-Erling Smørgrav bindir= 6535b7579f77SDag-Erling Smørgrav dlfiles= 6536b7579f77SDag-Erling Smørgrav dlprefiles= 6537b7579f77SDag-Erling Smørgrav dlself=no 6538b7579f77SDag-Erling Smørgrav export_dynamic=no 6539b7579f77SDag-Erling Smørgrav export_symbols= 6540b7579f77SDag-Erling Smørgrav export_symbols_regex= 6541b7579f77SDag-Erling Smørgrav generated= 6542b7579f77SDag-Erling Smørgrav libobjs= 6543b7579f77SDag-Erling Smørgrav ltlibs= 6544b7579f77SDag-Erling Smørgrav module=no 6545b7579f77SDag-Erling Smørgrav no_install=no 6546b7579f77SDag-Erling Smørgrav objs= 6547f61ef7f6SDag-Erling Smørgrav os2dllname= 6548b7579f77SDag-Erling Smørgrav non_pic_objects= 6549b7579f77SDag-Erling Smørgrav precious_files_regex= 6550b7579f77SDag-Erling Smørgrav prefer_static_libs=no 6551f61ef7f6SDag-Erling Smørgrav preload=false 6552b7579f77SDag-Erling Smørgrav prev= 6553b7579f77SDag-Erling Smørgrav prevarg= 6554b7579f77SDag-Erling Smørgrav release= 6555b7579f77SDag-Erling Smørgrav rpath= 6556b7579f77SDag-Erling Smørgrav xrpath= 6557b7579f77SDag-Erling Smørgrav perm_rpath= 6558b7579f77SDag-Erling Smørgrav temp_rpath= 6559b7579f77SDag-Erling Smørgrav thread_safe=no 6560b7579f77SDag-Erling Smørgrav vinfo= 6561b7579f77SDag-Erling Smørgrav vinfo_number=no 6562b7579f77SDag-Erling Smørgrav weak_libs= 6563f61ef7f6SDag-Erling Smørgrav single_module=$wl-single_module 6564b7579f77SDag-Erling Smørgrav func_infer_tag $base_compile 6565b7579f77SDag-Erling Smørgrav 6566b7579f77SDag-Erling Smørgrav # We need to know -static, to get the right output filenames. 6567b7579f77SDag-Erling Smørgrav for arg 6568b7579f77SDag-Erling Smørgrav do 6569b7579f77SDag-Erling Smørgrav case $arg in 6570b7579f77SDag-Erling Smørgrav -shared) 6571f61ef7f6SDag-Erling Smørgrav test yes != "$build_libtool_libs" \ 6572f61ef7f6SDag-Erling Smørgrav && func_fatal_configuration "cannot build a shared library" 6573b7579f77SDag-Erling Smørgrav build_old_libs=no 6574b7579f77SDag-Erling Smørgrav break 6575b7579f77SDag-Erling Smørgrav ;; 6576b7579f77SDag-Erling Smørgrav -all-static | -static | -static-libtool-libs) 6577b7579f77SDag-Erling Smørgrav case $arg in 6578b7579f77SDag-Erling Smørgrav -all-static) 6579f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then 6580b7579f77SDag-Erling Smørgrav func_warning "complete static linking is impossible in this configuration" 6581b7579f77SDag-Erling Smørgrav fi 6582b7579f77SDag-Erling Smørgrav if test -n "$link_static_flag"; then 6583b7579f77SDag-Erling Smørgrav dlopen_self=$dlopen_self_static 6584b7579f77SDag-Erling Smørgrav fi 6585b7579f77SDag-Erling Smørgrav prefer_static_libs=yes 6586b7579f77SDag-Erling Smørgrav ;; 6587b7579f77SDag-Erling Smørgrav -static) 6588b7579f77SDag-Erling Smørgrav if test -z "$pic_flag" && test -n "$link_static_flag"; then 6589b7579f77SDag-Erling Smørgrav dlopen_self=$dlopen_self_static 6590b7579f77SDag-Erling Smørgrav fi 6591b7579f77SDag-Erling Smørgrav prefer_static_libs=built 6592b7579f77SDag-Erling Smørgrav ;; 6593b7579f77SDag-Erling Smørgrav -static-libtool-libs) 6594b7579f77SDag-Erling Smørgrav if test -z "$pic_flag" && test -n "$link_static_flag"; then 6595b7579f77SDag-Erling Smørgrav dlopen_self=$dlopen_self_static 6596b7579f77SDag-Erling Smørgrav fi 6597b7579f77SDag-Erling Smørgrav prefer_static_libs=yes 6598b7579f77SDag-Erling Smørgrav ;; 6599b7579f77SDag-Erling Smørgrav esac 6600b7579f77SDag-Erling Smørgrav build_libtool_libs=no 6601b7579f77SDag-Erling Smørgrav build_old_libs=yes 6602b7579f77SDag-Erling Smørgrav break 6603b7579f77SDag-Erling Smørgrav ;; 6604b7579f77SDag-Erling Smørgrav esac 6605b7579f77SDag-Erling Smørgrav done 6606b7579f77SDag-Erling Smørgrav 6607b7579f77SDag-Erling Smørgrav # See if our shared archives depend on static archives. 6608b7579f77SDag-Erling Smørgrav test -n "$old_archive_from_new_cmds" && build_old_libs=yes 6609b7579f77SDag-Erling Smørgrav 6610b7579f77SDag-Erling Smørgrav # Go through the arguments, transforming them on the way. 6611b7579f77SDag-Erling Smørgrav while test "$#" -gt 0; do 6612f61ef7f6SDag-Erling Smørgrav arg=$1 6613b7579f77SDag-Erling Smørgrav shift 6614*46d2f618SCy Schubert func_quote_for_eval "$arg" 6615*46d2f618SCy Schubert qarg=$func_quote_for_eval_unquoted_result 6616*46d2f618SCy Schubert func_append libtool_args " $func_quote_for_eval_result" 6617b7579f77SDag-Erling Smørgrav 6618b7579f77SDag-Erling Smørgrav # If the previous option needs an argument, assign it. 6619b7579f77SDag-Erling Smørgrav if test -n "$prev"; then 6620b7579f77SDag-Erling Smørgrav case $prev in 6621b7579f77SDag-Erling Smørgrav output) 6622b7579f77SDag-Erling Smørgrav func_append compile_command " @OUTPUT@" 6623b7579f77SDag-Erling Smørgrav func_append finalize_command " @OUTPUT@" 6624b7579f77SDag-Erling Smørgrav ;; 6625b7579f77SDag-Erling Smørgrav esac 6626b7579f77SDag-Erling Smørgrav 6627b7579f77SDag-Erling Smørgrav case $prev in 6628b7579f77SDag-Erling Smørgrav bindir) 6629f61ef7f6SDag-Erling Smørgrav bindir=$arg 6630b7579f77SDag-Erling Smørgrav prev= 6631b7579f77SDag-Erling Smørgrav continue 6632b7579f77SDag-Erling Smørgrav ;; 6633b7579f77SDag-Erling Smørgrav dlfiles|dlprefiles) 6634f61ef7f6SDag-Erling Smørgrav $preload || { 6635b7579f77SDag-Erling Smørgrav # Add the symbol object into the linking commands. 6636b7579f77SDag-Erling Smørgrav func_append compile_command " @SYMFILE@" 6637b7579f77SDag-Erling Smørgrav func_append finalize_command " @SYMFILE@" 6638f61ef7f6SDag-Erling Smørgrav preload=: 6639f61ef7f6SDag-Erling Smørgrav } 6640b7579f77SDag-Erling Smørgrav case $arg in 6641b7579f77SDag-Erling Smørgrav *.la | *.lo) ;; # We handle these cases below. 6642b7579f77SDag-Erling Smørgrav force) 6643f61ef7f6SDag-Erling Smørgrav if test no = "$dlself"; then 6644b7579f77SDag-Erling Smørgrav dlself=needless 6645b7579f77SDag-Erling Smørgrav export_dynamic=yes 6646b7579f77SDag-Erling Smørgrav fi 6647b7579f77SDag-Erling Smørgrav prev= 6648b7579f77SDag-Erling Smørgrav continue 6649b7579f77SDag-Erling Smørgrav ;; 6650b7579f77SDag-Erling Smørgrav self) 6651f61ef7f6SDag-Erling Smørgrav if test dlprefiles = "$prev"; then 6652b7579f77SDag-Erling Smørgrav dlself=yes 6653f61ef7f6SDag-Erling Smørgrav elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then 6654b7579f77SDag-Erling Smørgrav dlself=yes 6655b7579f77SDag-Erling Smørgrav else 6656b7579f77SDag-Erling Smørgrav dlself=needless 6657b7579f77SDag-Erling Smørgrav export_dynamic=yes 6658b7579f77SDag-Erling Smørgrav fi 6659b7579f77SDag-Erling Smørgrav prev= 6660b7579f77SDag-Erling Smørgrav continue 6661b7579f77SDag-Erling Smørgrav ;; 6662b7579f77SDag-Erling Smørgrav *) 6663f61ef7f6SDag-Erling Smørgrav if test dlfiles = "$prev"; then 6664b7579f77SDag-Erling Smørgrav func_append dlfiles " $arg" 6665b7579f77SDag-Erling Smørgrav else 6666b7579f77SDag-Erling Smørgrav func_append dlprefiles " $arg" 6667b7579f77SDag-Erling Smørgrav fi 6668b7579f77SDag-Erling Smørgrav prev= 6669b7579f77SDag-Erling Smørgrav continue 6670b7579f77SDag-Erling Smørgrav ;; 6671b7579f77SDag-Erling Smørgrav esac 6672b7579f77SDag-Erling Smørgrav ;; 6673b7579f77SDag-Erling Smørgrav expsyms) 6674f61ef7f6SDag-Erling Smørgrav export_symbols=$arg 6675b7579f77SDag-Erling Smørgrav test -f "$arg" \ 6676f61ef7f6SDag-Erling Smørgrav || func_fatal_error "symbol file '$arg' does not exist" 6677b7579f77SDag-Erling Smørgrav prev= 6678b7579f77SDag-Erling Smørgrav continue 6679b7579f77SDag-Erling Smørgrav ;; 6680b7579f77SDag-Erling Smørgrav expsyms_regex) 6681f61ef7f6SDag-Erling Smørgrav export_symbols_regex=$arg 6682b7579f77SDag-Erling Smørgrav prev= 6683b7579f77SDag-Erling Smørgrav continue 6684b7579f77SDag-Erling Smørgrav ;; 6685b7579f77SDag-Erling Smørgrav framework) 6686b7579f77SDag-Erling Smørgrav case $host in 6687b7579f77SDag-Erling Smørgrav *-*-darwin*) 6688b7579f77SDag-Erling Smørgrav case "$deplibs " in 6689b7579f77SDag-Erling Smørgrav *" $qarg.ltframework "*) ;; 6690b7579f77SDag-Erling Smørgrav *) func_append deplibs " $qarg.ltframework" # this is fixed later 6691b7579f77SDag-Erling Smørgrav ;; 6692b7579f77SDag-Erling Smørgrav esac 6693b7579f77SDag-Erling Smørgrav ;; 6694b7579f77SDag-Erling Smørgrav esac 6695b7579f77SDag-Erling Smørgrav prev= 6696b7579f77SDag-Erling Smørgrav continue 6697b7579f77SDag-Erling Smørgrav ;; 6698b7579f77SDag-Erling Smørgrav inst_prefix) 6699f61ef7f6SDag-Erling Smørgrav inst_prefix_dir=$arg 6700f61ef7f6SDag-Erling Smørgrav prev= 6701f61ef7f6SDag-Erling Smørgrav continue 6702f61ef7f6SDag-Erling Smørgrav ;; 6703f61ef7f6SDag-Erling Smørgrav mllvm) 6704f61ef7f6SDag-Erling Smørgrav # Clang does not use LLVM to link, so we can simply discard any 6705f61ef7f6SDag-Erling Smørgrav # '-mllvm $arg' options when doing the link step. 6706b7579f77SDag-Erling Smørgrav prev= 6707b7579f77SDag-Erling Smørgrav continue 6708b7579f77SDag-Erling Smørgrav ;; 6709b7579f77SDag-Erling Smørgrav objectlist) 6710b7579f77SDag-Erling Smørgrav if test -f "$arg"; then 6711b7579f77SDag-Erling Smørgrav save_arg=$arg 6712b7579f77SDag-Erling Smørgrav moreargs= 6713b7579f77SDag-Erling Smørgrav for fil in `cat "$save_arg"` 6714b7579f77SDag-Erling Smørgrav do 6715b7579f77SDag-Erling Smørgrav# func_append moreargs " $fil" 6716b7579f77SDag-Erling Smørgrav arg=$fil 6717b7579f77SDag-Erling Smørgrav # A libtool-controlled object. 6718b7579f77SDag-Erling Smørgrav 6719b7579f77SDag-Erling Smørgrav # Check to see that this really is a libtool object. 6720b7579f77SDag-Erling Smørgrav if func_lalib_unsafe_p "$arg"; then 6721b7579f77SDag-Erling Smørgrav pic_object= 6722b7579f77SDag-Erling Smørgrav non_pic_object= 6723b7579f77SDag-Erling Smørgrav 6724b7579f77SDag-Erling Smørgrav # Read the .lo file 6725b7579f77SDag-Erling Smørgrav func_source "$arg" 6726b7579f77SDag-Erling Smørgrav 6727b7579f77SDag-Erling Smørgrav if test -z "$pic_object" || 6728b7579f77SDag-Erling Smørgrav test -z "$non_pic_object" || 6729f61ef7f6SDag-Erling Smørgrav test none = "$pic_object" && 6730f61ef7f6SDag-Erling Smørgrav test none = "$non_pic_object"; then 6731f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot find name of object for '$arg'" 6732b7579f77SDag-Erling Smørgrav fi 6733b7579f77SDag-Erling Smørgrav 6734b7579f77SDag-Erling Smørgrav # Extract subdirectory from the argument. 6735b7579f77SDag-Erling Smørgrav func_dirname "$arg" "/" "" 6736f61ef7f6SDag-Erling Smørgrav xdir=$func_dirname_result 6737b7579f77SDag-Erling Smørgrav 6738f61ef7f6SDag-Erling Smørgrav if test none != "$pic_object"; then 6739b7579f77SDag-Erling Smørgrav # Prepend the subdirectory the object is found in. 6740f61ef7f6SDag-Erling Smørgrav pic_object=$xdir$pic_object 6741b7579f77SDag-Erling Smørgrav 6742f61ef7f6SDag-Erling Smørgrav if test dlfiles = "$prev"; then 6743f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 6744b7579f77SDag-Erling Smørgrav func_append dlfiles " $pic_object" 6745b7579f77SDag-Erling Smørgrav prev= 6746b7579f77SDag-Erling Smørgrav continue 6747b7579f77SDag-Erling Smørgrav else 6748b7579f77SDag-Erling Smørgrav # If libtool objects are unsupported, then we need to preload. 6749b7579f77SDag-Erling Smørgrav prev=dlprefiles 6750b7579f77SDag-Erling Smørgrav fi 6751b7579f77SDag-Erling Smørgrav fi 6752b7579f77SDag-Erling Smørgrav 6753b7579f77SDag-Erling Smørgrav # CHECK ME: I think I busted this. -Ossama 6754f61ef7f6SDag-Erling Smørgrav if test dlprefiles = "$prev"; then 6755b7579f77SDag-Erling Smørgrav # Preload the old-style object. 6756b7579f77SDag-Erling Smørgrav func_append dlprefiles " $pic_object" 6757b7579f77SDag-Erling Smørgrav prev= 6758b7579f77SDag-Erling Smørgrav fi 6759b7579f77SDag-Erling Smørgrav 6760b7579f77SDag-Erling Smørgrav # A PIC object. 6761b7579f77SDag-Erling Smørgrav func_append libobjs " $pic_object" 6762f61ef7f6SDag-Erling Smørgrav arg=$pic_object 6763b7579f77SDag-Erling Smørgrav fi 6764b7579f77SDag-Erling Smørgrav 6765b7579f77SDag-Erling Smørgrav # Non-PIC object. 6766f61ef7f6SDag-Erling Smørgrav if test none != "$non_pic_object"; then 6767b7579f77SDag-Erling Smørgrav # Prepend the subdirectory the object is found in. 6768f61ef7f6SDag-Erling Smørgrav non_pic_object=$xdir$non_pic_object 6769b7579f77SDag-Erling Smørgrav 6770b7579f77SDag-Erling Smørgrav # A standard non-PIC object 6771b7579f77SDag-Erling Smørgrav func_append non_pic_objects " $non_pic_object" 6772f61ef7f6SDag-Erling Smørgrav if test -z "$pic_object" || test none = "$pic_object"; then 6773f61ef7f6SDag-Erling Smørgrav arg=$non_pic_object 6774b7579f77SDag-Erling Smørgrav fi 6775b7579f77SDag-Erling Smørgrav else 6776b7579f77SDag-Erling Smørgrav # If the PIC object exists, use it instead. 6777b7579f77SDag-Erling Smørgrav # $xdir was prepended to $pic_object above. 6778f61ef7f6SDag-Erling Smørgrav non_pic_object=$pic_object 6779b7579f77SDag-Erling Smørgrav func_append non_pic_objects " $non_pic_object" 6780b7579f77SDag-Erling Smørgrav fi 6781b7579f77SDag-Erling Smørgrav else 6782b7579f77SDag-Erling Smørgrav # Only an error if not doing a dry-run. 6783b7579f77SDag-Erling Smørgrav if $opt_dry_run; then 6784b7579f77SDag-Erling Smørgrav # Extract subdirectory from the argument. 6785b7579f77SDag-Erling Smørgrav func_dirname "$arg" "/" "" 6786f61ef7f6SDag-Erling Smørgrav xdir=$func_dirname_result 6787b7579f77SDag-Erling Smørgrav 6788b7579f77SDag-Erling Smørgrav func_lo2o "$arg" 6789b7579f77SDag-Erling Smørgrav pic_object=$xdir$objdir/$func_lo2o_result 6790b7579f77SDag-Erling Smørgrav non_pic_object=$xdir$func_lo2o_result 6791b7579f77SDag-Erling Smørgrav func_append libobjs " $pic_object" 6792b7579f77SDag-Erling Smørgrav func_append non_pic_objects " $non_pic_object" 6793b7579f77SDag-Erling Smørgrav else 6794f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$arg' is not a valid libtool object" 6795b7579f77SDag-Erling Smørgrav fi 6796b7579f77SDag-Erling Smørgrav fi 6797b7579f77SDag-Erling Smørgrav done 6798b7579f77SDag-Erling Smørgrav else 6799f61ef7f6SDag-Erling Smørgrav func_fatal_error "link input file '$arg' does not exist" 6800b7579f77SDag-Erling Smørgrav fi 6801b7579f77SDag-Erling Smørgrav arg=$save_arg 6802b7579f77SDag-Erling Smørgrav prev= 6803b7579f77SDag-Erling Smørgrav continue 6804b7579f77SDag-Erling Smørgrav ;; 6805f61ef7f6SDag-Erling Smørgrav os2dllname) 6806f61ef7f6SDag-Erling Smørgrav os2dllname=$arg 6807f61ef7f6SDag-Erling Smørgrav prev= 6808f61ef7f6SDag-Erling Smørgrav continue 6809f61ef7f6SDag-Erling Smørgrav ;; 6810b7579f77SDag-Erling Smørgrav precious_regex) 6811f61ef7f6SDag-Erling Smørgrav precious_files_regex=$arg 6812b7579f77SDag-Erling Smørgrav prev= 6813b7579f77SDag-Erling Smørgrav continue 6814b7579f77SDag-Erling Smørgrav ;; 6815b7579f77SDag-Erling Smørgrav release) 6816f61ef7f6SDag-Erling Smørgrav release=-$arg 6817b7579f77SDag-Erling Smørgrav prev= 6818b7579f77SDag-Erling Smørgrav continue 6819b7579f77SDag-Erling Smørgrav ;; 6820b7579f77SDag-Erling Smørgrav rpath | xrpath) 6821b7579f77SDag-Erling Smørgrav # We need an absolute path. 6822b7579f77SDag-Erling Smørgrav case $arg in 6823b7579f77SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) ;; 6824b7579f77SDag-Erling Smørgrav *) 6825b7579f77SDag-Erling Smørgrav func_fatal_error "only absolute run-paths are allowed" 6826b7579f77SDag-Erling Smørgrav ;; 6827b7579f77SDag-Erling Smørgrav esac 6828f61ef7f6SDag-Erling Smørgrav if test rpath = "$prev"; then 6829b7579f77SDag-Erling Smørgrav case "$rpath " in 6830b7579f77SDag-Erling Smørgrav *" $arg "*) ;; 6831b7579f77SDag-Erling Smørgrav *) func_append rpath " $arg" ;; 6832b7579f77SDag-Erling Smørgrav esac 6833b7579f77SDag-Erling Smørgrav else 6834b7579f77SDag-Erling Smørgrav case "$xrpath " in 6835b7579f77SDag-Erling Smørgrav *" $arg "*) ;; 6836b7579f77SDag-Erling Smørgrav *) func_append xrpath " $arg" ;; 6837b7579f77SDag-Erling Smørgrav esac 6838b7579f77SDag-Erling Smørgrav fi 6839b7579f77SDag-Erling Smørgrav prev= 6840b7579f77SDag-Erling Smørgrav continue 6841b7579f77SDag-Erling Smørgrav ;; 6842b7579f77SDag-Erling Smørgrav shrext) 6843f61ef7f6SDag-Erling Smørgrav shrext_cmds=$arg 6844b7579f77SDag-Erling Smørgrav prev= 6845b7579f77SDag-Erling Smørgrav continue 6846b7579f77SDag-Erling Smørgrav ;; 6847b7579f77SDag-Erling Smørgrav weak) 6848b7579f77SDag-Erling Smørgrav func_append weak_libs " $arg" 6849b7579f77SDag-Erling Smørgrav prev= 6850b7579f77SDag-Erling Smørgrav continue 6851b7579f77SDag-Erling Smørgrav ;; 6852b7579f77SDag-Erling Smørgrav xcclinker) 6853b7579f77SDag-Erling Smørgrav func_append linker_flags " $qarg" 6854b7579f77SDag-Erling Smørgrav func_append compiler_flags " $qarg" 6855b7579f77SDag-Erling Smørgrav prev= 6856b7579f77SDag-Erling Smørgrav func_append compile_command " $qarg" 6857b7579f77SDag-Erling Smørgrav func_append finalize_command " $qarg" 6858b7579f77SDag-Erling Smørgrav continue 6859b7579f77SDag-Erling Smørgrav ;; 6860b7579f77SDag-Erling Smørgrav xcompiler) 6861b7579f77SDag-Erling Smørgrav func_append compiler_flags " $qarg" 6862b7579f77SDag-Erling Smørgrav prev= 6863b7579f77SDag-Erling Smørgrav func_append compile_command " $qarg" 6864b7579f77SDag-Erling Smørgrav func_append finalize_command " $qarg" 6865b7579f77SDag-Erling Smørgrav continue 6866b7579f77SDag-Erling Smørgrav ;; 6867b7579f77SDag-Erling Smørgrav xlinker) 6868b7579f77SDag-Erling Smørgrav func_append linker_flags " $qarg" 6869b7579f77SDag-Erling Smørgrav func_append compiler_flags " $wl$qarg" 6870b7579f77SDag-Erling Smørgrav prev= 6871b7579f77SDag-Erling Smørgrav func_append compile_command " $wl$qarg" 6872b7579f77SDag-Erling Smørgrav func_append finalize_command " $wl$qarg" 6873b7579f77SDag-Erling Smørgrav continue 6874b7579f77SDag-Erling Smørgrav ;; 6875b7579f77SDag-Erling Smørgrav *) 6876b7579f77SDag-Erling Smørgrav eval "$prev=\"\$arg\"" 6877b7579f77SDag-Erling Smørgrav prev= 6878b7579f77SDag-Erling Smørgrav continue 6879b7579f77SDag-Erling Smørgrav ;; 6880b7579f77SDag-Erling Smørgrav esac 6881b7579f77SDag-Erling Smørgrav fi # test -n "$prev" 6882b7579f77SDag-Erling Smørgrav 6883f61ef7f6SDag-Erling Smørgrav prevarg=$arg 6884b7579f77SDag-Erling Smørgrav 6885b7579f77SDag-Erling Smørgrav case $arg in 6886b7579f77SDag-Erling Smørgrav -all-static) 6887b7579f77SDag-Erling Smørgrav if test -n "$link_static_flag"; then 6888b7579f77SDag-Erling Smørgrav # See comment for -static flag below, for more details. 6889b7579f77SDag-Erling Smørgrav func_append compile_command " $link_static_flag" 6890b7579f77SDag-Erling Smørgrav func_append finalize_command " $link_static_flag" 6891b7579f77SDag-Erling Smørgrav fi 6892b7579f77SDag-Erling Smørgrav continue 6893b7579f77SDag-Erling Smørgrav ;; 6894b7579f77SDag-Erling Smørgrav 6895b7579f77SDag-Erling Smørgrav -allow-undefined) 6896b7579f77SDag-Erling Smørgrav # FIXME: remove this flag sometime in the future. 6897f61ef7f6SDag-Erling Smørgrav func_fatal_error "'-allow-undefined' must not be used because it is the default" 6898b7579f77SDag-Erling Smørgrav ;; 6899b7579f77SDag-Erling Smørgrav 6900b7579f77SDag-Erling Smørgrav -avoid-version) 6901b7579f77SDag-Erling Smørgrav avoid_version=yes 6902b7579f77SDag-Erling Smørgrav continue 6903b7579f77SDag-Erling Smørgrav ;; 6904b7579f77SDag-Erling Smørgrav 6905b7579f77SDag-Erling Smørgrav -bindir) 6906b7579f77SDag-Erling Smørgrav prev=bindir 6907b7579f77SDag-Erling Smørgrav continue 6908b7579f77SDag-Erling Smørgrav ;; 6909b7579f77SDag-Erling Smørgrav 6910b7579f77SDag-Erling Smørgrav -dlopen) 6911b7579f77SDag-Erling Smørgrav prev=dlfiles 6912b7579f77SDag-Erling Smørgrav continue 6913b7579f77SDag-Erling Smørgrav ;; 6914b7579f77SDag-Erling Smørgrav 6915b7579f77SDag-Erling Smørgrav -dlpreopen) 6916b7579f77SDag-Erling Smørgrav prev=dlprefiles 6917b7579f77SDag-Erling Smørgrav continue 6918b7579f77SDag-Erling Smørgrav ;; 6919b7579f77SDag-Erling Smørgrav 6920b7579f77SDag-Erling Smørgrav -export-dynamic) 6921b7579f77SDag-Erling Smørgrav export_dynamic=yes 6922b7579f77SDag-Erling Smørgrav continue 6923b7579f77SDag-Erling Smørgrav ;; 6924b7579f77SDag-Erling Smørgrav 6925b7579f77SDag-Erling Smørgrav -export-symbols | -export-symbols-regex) 6926b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 6927b7579f77SDag-Erling Smørgrav func_fatal_error "more than one -exported-symbols argument is not allowed" 6928b7579f77SDag-Erling Smørgrav fi 6929f61ef7f6SDag-Erling Smørgrav if test X-export-symbols = "X$arg"; then 6930b7579f77SDag-Erling Smørgrav prev=expsyms 6931b7579f77SDag-Erling Smørgrav else 6932b7579f77SDag-Erling Smørgrav prev=expsyms_regex 6933b7579f77SDag-Erling Smørgrav fi 6934b7579f77SDag-Erling Smørgrav continue 6935b7579f77SDag-Erling Smørgrav ;; 6936b7579f77SDag-Erling Smørgrav 6937b7579f77SDag-Erling Smørgrav -framework) 6938b7579f77SDag-Erling Smørgrav prev=framework 6939b7579f77SDag-Erling Smørgrav continue 6940b7579f77SDag-Erling Smørgrav ;; 6941b7579f77SDag-Erling Smørgrav 6942b7579f77SDag-Erling Smørgrav -inst-prefix-dir) 6943b7579f77SDag-Erling Smørgrav prev=inst_prefix 6944b7579f77SDag-Erling Smørgrav continue 6945b7579f77SDag-Erling Smørgrav ;; 6946b7579f77SDag-Erling Smørgrav 6947b7579f77SDag-Erling Smørgrav # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 6948b7579f77SDag-Erling Smørgrav # so, if we see these flags be careful not to treat them like -L 6949b7579f77SDag-Erling Smørgrav -L[A-Z][A-Z]*:*) 6950b7579f77SDag-Erling Smørgrav case $with_gcc/$host in 6951b7579f77SDag-Erling Smørgrav no/*-*-irix* | /*-*-irix*) 6952b7579f77SDag-Erling Smørgrav func_append compile_command " $arg" 6953b7579f77SDag-Erling Smørgrav func_append finalize_command " $arg" 6954b7579f77SDag-Erling Smørgrav ;; 6955b7579f77SDag-Erling Smørgrav esac 6956b7579f77SDag-Erling Smørgrav continue 6957b7579f77SDag-Erling Smørgrav ;; 6958b7579f77SDag-Erling Smørgrav 6959b7579f77SDag-Erling Smørgrav -L*) 6960b7579f77SDag-Erling Smørgrav func_stripname "-L" '' "$arg" 6961b7579f77SDag-Erling Smørgrav if test -z "$func_stripname_result"; then 6962b7579f77SDag-Erling Smørgrav if test "$#" -gt 0; then 6963f61ef7f6SDag-Erling Smørgrav func_fatal_error "require no space between '-L' and '$1'" 6964b7579f77SDag-Erling Smørgrav else 6965f61ef7f6SDag-Erling Smørgrav func_fatal_error "need path for '-L' option" 6966b7579f77SDag-Erling Smørgrav fi 6967b7579f77SDag-Erling Smørgrav fi 6968b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$func_stripname_result" 6969b7579f77SDag-Erling Smørgrav dir=$func_resolve_sysroot_result 6970b7579f77SDag-Erling Smørgrav # We need an absolute path. 6971b7579f77SDag-Erling Smørgrav case $dir in 6972b7579f77SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) ;; 6973b7579f77SDag-Erling Smørgrav *) 6974b7579f77SDag-Erling Smørgrav absdir=`cd "$dir" && pwd` 6975b7579f77SDag-Erling Smørgrav test -z "$absdir" && \ 6976f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot determine absolute directory name of '$dir'" 6977f61ef7f6SDag-Erling Smørgrav dir=$absdir 6978b7579f77SDag-Erling Smørgrav ;; 6979b7579f77SDag-Erling Smørgrav esac 6980b7579f77SDag-Erling Smørgrav case "$deplibs " in 6981b7579f77SDag-Erling Smørgrav *" -L$dir "* | *" $arg "*) 6982b7579f77SDag-Erling Smørgrav # Will only happen for absolute or sysroot arguments 6983b7579f77SDag-Erling Smørgrav ;; 6984b7579f77SDag-Erling Smørgrav *) 6985b7579f77SDag-Erling Smørgrav # Preserve sysroot, but never include relative directories 6986b7579f77SDag-Erling Smørgrav case $dir in 6987b7579f77SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 6988b7579f77SDag-Erling Smørgrav *) func_append deplibs " -L$dir" ;; 6989b7579f77SDag-Erling Smørgrav esac 6990b7579f77SDag-Erling Smørgrav func_append lib_search_path " $dir" 6991b7579f77SDag-Erling Smørgrav ;; 6992b7579f77SDag-Erling Smørgrav esac 6993b7579f77SDag-Erling Smørgrav case $host in 6994b7579f77SDag-Erling Smørgrav *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 6995b7579f77SDag-Erling Smørgrav testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 6996b7579f77SDag-Erling Smørgrav case :$dllsearchpath: in 6997b7579f77SDag-Erling Smørgrav *":$dir:"*) ;; 6998b7579f77SDag-Erling Smørgrav ::) dllsearchpath=$dir;; 6999b7579f77SDag-Erling Smørgrav *) func_append dllsearchpath ":$dir";; 7000b7579f77SDag-Erling Smørgrav esac 7001b7579f77SDag-Erling Smørgrav case :$dllsearchpath: in 7002b7579f77SDag-Erling Smørgrav *":$testbindir:"*) ;; 7003b7579f77SDag-Erling Smørgrav ::) dllsearchpath=$testbindir;; 7004b7579f77SDag-Erling Smørgrav *) func_append dllsearchpath ":$testbindir";; 7005b7579f77SDag-Erling Smørgrav esac 7006b7579f77SDag-Erling Smørgrav ;; 7007b7579f77SDag-Erling Smørgrav esac 7008b7579f77SDag-Erling Smørgrav continue 7009b7579f77SDag-Erling Smørgrav ;; 7010b7579f77SDag-Erling Smørgrav 7011b7579f77SDag-Erling Smørgrav -l*) 7012f61ef7f6SDag-Erling Smørgrav if test X-lc = "X$arg" || test X-lm = "X$arg"; then 7013b7579f77SDag-Erling Smørgrav case $host in 7014b7579f77SDag-Erling Smørgrav *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 7015b7579f77SDag-Erling Smørgrav # These systems don't actually have a C or math library (as such) 7016b7579f77SDag-Erling Smørgrav continue 7017b7579f77SDag-Erling Smørgrav ;; 7018b7579f77SDag-Erling Smørgrav *-*-os2*) 7019b7579f77SDag-Erling Smørgrav # These systems don't actually have a C library (as such) 7020f61ef7f6SDag-Erling Smørgrav test X-lc = "X$arg" && continue 7021b7579f77SDag-Erling Smørgrav ;; 7022*46d2f618SCy Schubert *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7023b7579f77SDag-Erling Smørgrav # Do not include libc due to us having libc/libc_r. 7024f61ef7f6SDag-Erling Smørgrav test X-lc = "X$arg" && continue 7025b7579f77SDag-Erling Smørgrav ;; 7026b7579f77SDag-Erling Smørgrav *-*-rhapsody* | *-*-darwin1.[012]) 7027b7579f77SDag-Erling Smørgrav # Rhapsody C and math libraries are in the System framework 7028b7579f77SDag-Erling Smørgrav func_append deplibs " System.ltframework" 7029b7579f77SDag-Erling Smørgrav continue 7030b7579f77SDag-Erling Smørgrav ;; 7031b7579f77SDag-Erling Smørgrav *-*-sco3.2v5* | *-*-sco5v6*) 7032b7579f77SDag-Erling Smørgrav # Causes problems with __ctype 7033f61ef7f6SDag-Erling Smørgrav test X-lc = "X$arg" && continue 7034b7579f77SDag-Erling Smørgrav ;; 7035b7579f77SDag-Erling Smørgrav *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7036b7579f77SDag-Erling Smørgrav # Compiler inserts libc in the correct place for threads to work 7037f61ef7f6SDag-Erling Smørgrav test X-lc = "X$arg" && continue 7038b7579f77SDag-Erling Smørgrav ;; 7039b7579f77SDag-Erling Smørgrav esac 7040f61ef7f6SDag-Erling Smørgrav elif test X-lc_r = "X$arg"; then 7041b7579f77SDag-Erling Smørgrav case $host in 7042*46d2f618SCy Schubert *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) 7043b7579f77SDag-Erling Smørgrav # Do not include libc_r directly, use -pthread flag. 7044b7579f77SDag-Erling Smørgrav continue 7045b7579f77SDag-Erling Smørgrav ;; 7046b7579f77SDag-Erling Smørgrav esac 7047b7579f77SDag-Erling Smørgrav fi 7048b7579f77SDag-Erling Smørgrav func_append deplibs " $arg" 7049b7579f77SDag-Erling Smørgrav continue 7050b7579f77SDag-Erling Smørgrav ;; 7051b7579f77SDag-Erling Smørgrav 7052f61ef7f6SDag-Erling Smørgrav -mllvm) 7053f61ef7f6SDag-Erling Smørgrav prev=mllvm 7054f61ef7f6SDag-Erling Smørgrav continue 7055f61ef7f6SDag-Erling Smørgrav ;; 7056f61ef7f6SDag-Erling Smørgrav 7057b7579f77SDag-Erling Smørgrav -module) 7058b7579f77SDag-Erling Smørgrav module=yes 7059b7579f77SDag-Erling Smørgrav continue 7060b7579f77SDag-Erling Smørgrav ;; 7061b7579f77SDag-Erling Smørgrav 7062b7579f77SDag-Erling Smørgrav # Tru64 UNIX uses -model [arg] to determine the layout of C++ 7063b7579f77SDag-Erling Smørgrav # classes, name mangling, and exception handling. 7064b7579f77SDag-Erling Smørgrav # Darwin uses the -arch flag to determine output architecture. 7065b7579f77SDag-Erling Smørgrav -model|-arch|-isysroot|--sysroot) 7066b7579f77SDag-Erling Smørgrav func_append compiler_flags " $arg" 7067b7579f77SDag-Erling Smørgrav func_append compile_command " $arg" 7068b7579f77SDag-Erling Smørgrav func_append finalize_command " $arg" 7069b7579f77SDag-Erling Smørgrav prev=xcompiler 7070b7579f77SDag-Erling Smørgrav continue 7071b7579f77SDag-Erling Smørgrav ;; 7072*46d2f618SCy Schubert 7073*46d2f618SCy Schubert -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 70748ed2b524SDag-Erling Smørgrav |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7075b7579f77SDag-Erling Smørgrav func_append compiler_flags " $arg" 7076b7579f77SDag-Erling Smørgrav func_append compile_command " $arg" 7077b7579f77SDag-Erling Smørgrav func_append finalize_command " $arg" 7078b7579f77SDag-Erling Smørgrav case "$new_inherited_linker_flags " in 7079b7579f77SDag-Erling Smørgrav *" $arg "*) ;; 7080b7579f77SDag-Erling Smørgrav * ) func_append new_inherited_linker_flags " $arg" ;; 7081b7579f77SDag-Erling Smørgrav esac 7082b7579f77SDag-Erling Smørgrav continue 7083b7579f77SDag-Erling Smørgrav ;; 7084b7579f77SDag-Erling Smørgrav 7085b7579f77SDag-Erling Smørgrav -multi_module) 7086f61ef7f6SDag-Erling Smørgrav single_module=$wl-multi_module 7087b7579f77SDag-Erling Smørgrav continue 7088b7579f77SDag-Erling Smørgrav ;; 7089b7579f77SDag-Erling Smørgrav 7090b7579f77SDag-Erling Smørgrav -no-fast-install) 7091b7579f77SDag-Erling Smørgrav fast_install=no 7092b7579f77SDag-Erling Smørgrav continue 7093b7579f77SDag-Erling Smørgrav ;; 7094b7579f77SDag-Erling Smørgrav 7095b7579f77SDag-Erling Smørgrav -no-install) 7096b7579f77SDag-Erling Smørgrav case $host in 7097b7579f77SDag-Erling Smørgrav *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 7098b7579f77SDag-Erling Smørgrav # The PATH hackery in wrapper scripts is required on Windows 7099b7579f77SDag-Erling Smørgrav # and Darwin in order for the loader to find any dlls it needs. 7100f61ef7f6SDag-Erling Smørgrav func_warning "'-no-install' is ignored for $host" 7101f61ef7f6SDag-Erling Smørgrav func_warning "assuming '-no-fast-install' instead" 7102b7579f77SDag-Erling Smørgrav fast_install=no 7103b7579f77SDag-Erling Smørgrav ;; 7104b7579f77SDag-Erling Smørgrav *) no_install=yes ;; 7105b7579f77SDag-Erling Smørgrav esac 7106b7579f77SDag-Erling Smørgrav continue 7107b7579f77SDag-Erling Smørgrav ;; 7108b7579f77SDag-Erling Smørgrav 7109b7579f77SDag-Erling Smørgrav -no-undefined) 7110b7579f77SDag-Erling Smørgrav allow_undefined=no 7111b7579f77SDag-Erling Smørgrav continue 7112b7579f77SDag-Erling Smørgrav ;; 7113b7579f77SDag-Erling Smørgrav 7114b7579f77SDag-Erling Smørgrav -objectlist) 7115b7579f77SDag-Erling Smørgrav prev=objectlist 7116b7579f77SDag-Erling Smørgrav continue 7117b7579f77SDag-Erling Smørgrav ;; 7118b7579f77SDag-Erling Smørgrav 7119f61ef7f6SDag-Erling Smørgrav -os2dllname) 7120f61ef7f6SDag-Erling Smørgrav prev=os2dllname 7121f61ef7f6SDag-Erling Smørgrav continue 7122f61ef7f6SDag-Erling Smørgrav ;; 7123f61ef7f6SDag-Erling Smørgrav 7124b7579f77SDag-Erling Smørgrav -o) prev=output ;; 7125b7579f77SDag-Erling Smørgrav 7126b7579f77SDag-Erling Smørgrav -precious-files-regex) 7127b7579f77SDag-Erling Smørgrav prev=precious_regex 7128b7579f77SDag-Erling Smørgrav continue 7129b7579f77SDag-Erling Smørgrav ;; 7130b7579f77SDag-Erling Smørgrav 7131b7579f77SDag-Erling Smørgrav -release) 7132b7579f77SDag-Erling Smørgrav prev=release 7133b7579f77SDag-Erling Smørgrav continue 7134b7579f77SDag-Erling Smørgrav ;; 7135b7579f77SDag-Erling Smørgrav 7136b7579f77SDag-Erling Smørgrav -rpath) 7137b7579f77SDag-Erling Smørgrav prev=rpath 7138b7579f77SDag-Erling Smørgrav continue 7139b7579f77SDag-Erling Smørgrav ;; 7140b7579f77SDag-Erling Smørgrav 7141b7579f77SDag-Erling Smørgrav -R) 7142b7579f77SDag-Erling Smørgrav prev=xrpath 7143b7579f77SDag-Erling Smørgrav continue 7144b7579f77SDag-Erling Smørgrav ;; 7145b7579f77SDag-Erling Smørgrav 7146b7579f77SDag-Erling Smørgrav -R*) 7147b7579f77SDag-Erling Smørgrav func_stripname '-R' '' "$arg" 7148b7579f77SDag-Erling Smørgrav dir=$func_stripname_result 7149b7579f77SDag-Erling Smørgrav # We need an absolute path. 7150b7579f77SDag-Erling Smørgrav case $dir in 7151b7579f77SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) ;; 7152b7579f77SDag-Erling Smørgrav =*) 7153b7579f77SDag-Erling Smørgrav func_stripname '=' '' "$dir" 7154b7579f77SDag-Erling Smørgrav dir=$lt_sysroot$func_stripname_result 7155b7579f77SDag-Erling Smørgrav ;; 7156b7579f77SDag-Erling Smørgrav *) 7157b7579f77SDag-Erling Smørgrav func_fatal_error "only absolute run-paths are allowed" 7158b7579f77SDag-Erling Smørgrav ;; 7159b7579f77SDag-Erling Smørgrav esac 7160b7579f77SDag-Erling Smørgrav case "$xrpath " in 7161b7579f77SDag-Erling Smørgrav *" $dir "*) ;; 7162b7579f77SDag-Erling Smørgrav *) func_append xrpath " $dir" ;; 7163b7579f77SDag-Erling Smørgrav esac 7164b7579f77SDag-Erling Smørgrav continue 7165b7579f77SDag-Erling Smørgrav ;; 7166b7579f77SDag-Erling Smørgrav 7167b7579f77SDag-Erling Smørgrav -shared) 7168b7579f77SDag-Erling Smørgrav # The effects of -shared are defined in a previous loop. 7169b7579f77SDag-Erling Smørgrav continue 7170b7579f77SDag-Erling Smørgrav ;; 7171b7579f77SDag-Erling Smørgrav 7172b7579f77SDag-Erling Smørgrav -shrext) 7173b7579f77SDag-Erling Smørgrav prev=shrext 7174b7579f77SDag-Erling Smørgrav continue 7175b7579f77SDag-Erling Smørgrav ;; 7176b7579f77SDag-Erling Smørgrav 7177b7579f77SDag-Erling Smørgrav -static | -static-libtool-libs) 7178b7579f77SDag-Erling Smørgrav # The effects of -static are defined in a previous loop. 7179b7579f77SDag-Erling Smørgrav # We used to do the same as -all-static on platforms that 7180b7579f77SDag-Erling Smørgrav # didn't have a PIC flag, but the assumption that the effects 7181b7579f77SDag-Erling Smørgrav # would be equivalent was wrong. It would break on at least 7182b7579f77SDag-Erling Smørgrav # Digital Unix and AIX. 7183b7579f77SDag-Erling Smørgrav continue 7184b7579f77SDag-Erling Smørgrav ;; 7185b7579f77SDag-Erling Smørgrav 7186b7579f77SDag-Erling Smørgrav -thread-safe) 7187b7579f77SDag-Erling Smørgrav thread_safe=yes 7188b7579f77SDag-Erling Smørgrav continue 7189b7579f77SDag-Erling Smørgrav ;; 7190b7579f77SDag-Erling Smørgrav 7191b7579f77SDag-Erling Smørgrav -version-info) 7192b7579f77SDag-Erling Smørgrav prev=vinfo 7193b7579f77SDag-Erling Smørgrav continue 7194b7579f77SDag-Erling Smørgrav ;; 7195b7579f77SDag-Erling Smørgrav 7196b7579f77SDag-Erling Smørgrav -version-number) 7197b7579f77SDag-Erling Smørgrav prev=vinfo 7198b7579f77SDag-Erling Smørgrav vinfo_number=yes 7199b7579f77SDag-Erling Smørgrav continue 7200b7579f77SDag-Erling Smørgrav ;; 7201b7579f77SDag-Erling Smørgrav 7202b7579f77SDag-Erling Smørgrav -weak) 7203b7579f77SDag-Erling Smørgrav prev=weak 7204b7579f77SDag-Erling Smørgrav continue 7205b7579f77SDag-Erling Smørgrav ;; 7206b7579f77SDag-Erling Smørgrav 7207b7579f77SDag-Erling Smørgrav -Wc,*) 7208b7579f77SDag-Erling Smørgrav func_stripname '-Wc,' '' "$arg" 7209b7579f77SDag-Erling Smørgrav args=$func_stripname_result 7210b7579f77SDag-Erling Smørgrav arg= 7211f61ef7f6SDag-Erling Smørgrav save_ifs=$IFS; IFS=, 7212b7579f77SDag-Erling Smørgrav for flag in $args; do 7213f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 7214*46d2f618SCy Schubert func_quote_for_eval "$flag" 7215*46d2f618SCy Schubert func_append arg " $func_quote_for_eval_result" 7216*46d2f618SCy Schubert func_append compiler_flags " $func_quote_for_eval_result" 7217b7579f77SDag-Erling Smørgrav done 7218f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 7219b7579f77SDag-Erling Smørgrav func_stripname ' ' '' "$arg" 7220b7579f77SDag-Erling Smørgrav arg=$func_stripname_result 7221b7579f77SDag-Erling Smørgrav ;; 7222b7579f77SDag-Erling Smørgrav 7223b7579f77SDag-Erling Smørgrav -Wl,*) 7224b7579f77SDag-Erling Smørgrav func_stripname '-Wl,' '' "$arg" 7225b7579f77SDag-Erling Smørgrav args=$func_stripname_result 7226b7579f77SDag-Erling Smørgrav arg= 7227f61ef7f6SDag-Erling Smørgrav save_ifs=$IFS; IFS=, 7228b7579f77SDag-Erling Smørgrav for flag in $args; do 7229f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 7230*46d2f618SCy Schubert func_quote_for_eval "$flag" 7231*46d2f618SCy Schubert func_append arg " $wl$func_quote_for_eval_result" 7232*46d2f618SCy Schubert func_append compiler_flags " $wl$func_quote_for_eval_result" 7233*46d2f618SCy Schubert func_append linker_flags " $func_quote_for_eval_result" 7234b7579f77SDag-Erling Smørgrav done 7235f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 7236b7579f77SDag-Erling Smørgrav func_stripname ' ' '' "$arg" 7237b7579f77SDag-Erling Smørgrav arg=$func_stripname_result 7238b7579f77SDag-Erling Smørgrav ;; 7239b7579f77SDag-Erling Smørgrav 7240b7579f77SDag-Erling Smørgrav -Xcompiler) 7241b7579f77SDag-Erling Smørgrav prev=xcompiler 7242b7579f77SDag-Erling Smørgrav continue 7243b7579f77SDag-Erling Smørgrav ;; 7244b7579f77SDag-Erling Smørgrav 7245b7579f77SDag-Erling Smørgrav -Xlinker) 7246b7579f77SDag-Erling Smørgrav prev=xlinker 7247b7579f77SDag-Erling Smørgrav continue 7248b7579f77SDag-Erling Smørgrav ;; 7249b7579f77SDag-Erling Smørgrav 7250b7579f77SDag-Erling Smørgrav -XCClinker) 7251b7579f77SDag-Erling Smørgrav prev=xcclinker 7252b7579f77SDag-Erling Smørgrav continue 7253b7579f77SDag-Erling Smørgrav ;; 7254b7579f77SDag-Erling Smørgrav 7255b7579f77SDag-Erling Smørgrav # -msg_* for osf cc 7256b7579f77SDag-Erling Smørgrav -msg_*) 7257*46d2f618SCy Schubert func_quote_for_eval "$arg" 7258*46d2f618SCy Schubert arg=$func_quote_for_eval_result 7259b7579f77SDag-Erling Smørgrav ;; 7260b7579f77SDag-Erling Smørgrav 7261b7579f77SDag-Erling Smørgrav # Flags to be passed through unchanged, with rationale: 7262b7579f77SDag-Erling Smørgrav # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 7263b7579f77SDag-Erling Smørgrav # -r[0-9][0-9]* specify processor for the SGI compiler 7264b7579f77SDag-Erling Smørgrav # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 7265b7579f77SDag-Erling Smørgrav # +DA*, +DD* enable 64-bit mode for the HP compiler 7266b7579f77SDag-Erling Smørgrav # -q* compiler args for the IBM compiler 7267b7579f77SDag-Erling Smørgrav # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 7268b7579f77SDag-Erling Smørgrav # -F/path path to uninstalled frameworks, gcc on darwin 7269b7579f77SDag-Erling Smørgrav # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 7270f61ef7f6SDag-Erling Smørgrav # -fstack-protector* stack protector flags for GCC 7271b7579f77SDag-Erling Smørgrav # @file GCC response files 7272b7579f77SDag-Erling Smørgrav # -tp=* Portland pgcc target processor selection 7273b7579f77SDag-Erling Smørgrav # --sysroot=* for sysroot support 7274f61ef7f6SDag-Erling Smørgrav # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 7275e86b9096SDag-Erling Smørgrav # -specs=* GCC specs files 7276f61ef7f6SDag-Erling Smørgrav # -stdlib=* select c++ std lib with clang 7277b7579f77SDag-Erling Smørgrav -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 7278b7579f77SDag-Erling Smørgrav -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 7279e86b9096SDag-Erling Smørgrav -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ 7280*46d2f618SCy Schubert -specs=*) 7281*46d2f618SCy Schubert func_quote_for_eval "$arg" 7282*46d2f618SCy Schubert arg=$func_quote_for_eval_result 7283b7579f77SDag-Erling Smørgrav func_append compile_command " $arg" 7284b7579f77SDag-Erling Smørgrav func_append finalize_command " $arg" 7285b7579f77SDag-Erling Smørgrav func_append compiler_flags " $arg" 7286b7579f77SDag-Erling Smørgrav continue 7287b7579f77SDag-Erling Smørgrav ;; 7288b7579f77SDag-Erling Smørgrav 7289f61ef7f6SDag-Erling Smørgrav -Z*) 7290f61ef7f6SDag-Erling Smørgrav if test os2 = "`expr $host : '.*\(os2\)'`"; then 7291f61ef7f6SDag-Erling Smørgrav # OS/2 uses -Zxxx to specify OS/2-specific options 7292f61ef7f6SDag-Erling Smørgrav compiler_flags="$compiler_flags $arg" 7293f61ef7f6SDag-Erling Smørgrav func_append compile_command " $arg" 7294f61ef7f6SDag-Erling Smørgrav func_append finalize_command " $arg" 7295f61ef7f6SDag-Erling Smørgrav case $arg in 7296f61ef7f6SDag-Erling Smørgrav -Zlinker | -Zstack) 7297f61ef7f6SDag-Erling Smørgrav prev=xcompiler 7298f61ef7f6SDag-Erling Smørgrav ;; 7299f61ef7f6SDag-Erling Smørgrav esac 7300f61ef7f6SDag-Erling Smørgrav continue 7301f61ef7f6SDag-Erling Smørgrav else 7302f61ef7f6SDag-Erling Smørgrav # Otherwise treat like 'Some other compiler flag' below 7303*46d2f618SCy Schubert func_quote_for_eval "$arg" 7304*46d2f618SCy Schubert arg=$func_quote_for_eval_result 7305f61ef7f6SDag-Erling Smørgrav fi 7306f61ef7f6SDag-Erling Smørgrav ;; 7307f61ef7f6SDag-Erling Smørgrav 7308b7579f77SDag-Erling Smørgrav # Some other compiler flag. 7309b7579f77SDag-Erling Smørgrav -* | +*) 7310*46d2f618SCy Schubert func_quote_for_eval "$arg" 7311*46d2f618SCy Schubert arg=$func_quote_for_eval_result 7312b7579f77SDag-Erling Smørgrav ;; 7313b7579f77SDag-Erling Smørgrav 7314b7579f77SDag-Erling Smørgrav *.$objext) 7315b7579f77SDag-Erling Smørgrav # A standard object. 7316b7579f77SDag-Erling Smørgrav func_append objs " $arg" 7317b7579f77SDag-Erling Smørgrav ;; 7318b7579f77SDag-Erling Smørgrav 7319b7579f77SDag-Erling Smørgrav *.lo) 7320b7579f77SDag-Erling Smørgrav # A libtool-controlled object. 7321b7579f77SDag-Erling Smørgrav 7322b7579f77SDag-Erling Smørgrav # Check to see that this really is a libtool object. 7323b7579f77SDag-Erling Smørgrav if func_lalib_unsafe_p "$arg"; then 7324b7579f77SDag-Erling Smørgrav pic_object= 7325b7579f77SDag-Erling Smørgrav non_pic_object= 7326b7579f77SDag-Erling Smørgrav 7327b7579f77SDag-Erling Smørgrav # Read the .lo file 7328b7579f77SDag-Erling Smørgrav func_source "$arg" 7329b7579f77SDag-Erling Smørgrav 7330b7579f77SDag-Erling Smørgrav if test -z "$pic_object" || 7331b7579f77SDag-Erling Smørgrav test -z "$non_pic_object" || 7332f61ef7f6SDag-Erling Smørgrav test none = "$pic_object" && 7333f61ef7f6SDag-Erling Smørgrav test none = "$non_pic_object"; then 7334f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot find name of object for '$arg'" 7335b7579f77SDag-Erling Smørgrav fi 7336b7579f77SDag-Erling Smørgrav 7337b7579f77SDag-Erling Smørgrav # Extract subdirectory from the argument. 7338b7579f77SDag-Erling Smørgrav func_dirname "$arg" "/" "" 7339f61ef7f6SDag-Erling Smørgrav xdir=$func_dirname_result 7340b7579f77SDag-Erling Smørgrav 7341f61ef7f6SDag-Erling Smørgrav test none = "$pic_object" || { 7342b7579f77SDag-Erling Smørgrav # Prepend the subdirectory the object is found in. 7343f61ef7f6SDag-Erling Smørgrav pic_object=$xdir$pic_object 7344b7579f77SDag-Erling Smørgrav 7345f61ef7f6SDag-Erling Smørgrav if test dlfiles = "$prev"; then 7346f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then 7347b7579f77SDag-Erling Smørgrav func_append dlfiles " $pic_object" 7348b7579f77SDag-Erling Smørgrav prev= 7349b7579f77SDag-Erling Smørgrav continue 7350b7579f77SDag-Erling Smørgrav else 7351b7579f77SDag-Erling Smørgrav # If libtool objects are unsupported, then we need to preload. 7352b7579f77SDag-Erling Smørgrav prev=dlprefiles 7353b7579f77SDag-Erling Smørgrav fi 7354b7579f77SDag-Erling Smørgrav fi 7355b7579f77SDag-Erling Smørgrav 7356b7579f77SDag-Erling Smørgrav # CHECK ME: I think I busted this. -Ossama 7357f61ef7f6SDag-Erling Smørgrav if test dlprefiles = "$prev"; then 7358b7579f77SDag-Erling Smørgrav # Preload the old-style object. 7359b7579f77SDag-Erling Smørgrav func_append dlprefiles " $pic_object" 7360b7579f77SDag-Erling Smørgrav prev= 7361b7579f77SDag-Erling Smørgrav fi 7362b7579f77SDag-Erling Smørgrav 7363b7579f77SDag-Erling Smørgrav # A PIC object. 7364b7579f77SDag-Erling Smørgrav func_append libobjs " $pic_object" 7365f61ef7f6SDag-Erling Smørgrav arg=$pic_object 7366f61ef7f6SDag-Erling Smørgrav } 7367b7579f77SDag-Erling Smørgrav 7368b7579f77SDag-Erling Smørgrav # Non-PIC object. 7369f61ef7f6SDag-Erling Smørgrav if test none != "$non_pic_object"; then 7370b7579f77SDag-Erling Smørgrav # Prepend the subdirectory the object is found in. 7371f61ef7f6SDag-Erling Smørgrav non_pic_object=$xdir$non_pic_object 7372b7579f77SDag-Erling Smørgrav 7373b7579f77SDag-Erling Smørgrav # A standard non-PIC object 7374b7579f77SDag-Erling Smørgrav func_append non_pic_objects " $non_pic_object" 7375f61ef7f6SDag-Erling Smørgrav if test -z "$pic_object" || test none = "$pic_object"; then 7376f61ef7f6SDag-Erling Smørgrav arg=$non_pic_object 7377b7579f77SDag-Erling Smørgrav fi 7378b7579f77SDag-Erling Smørgrav else 7379b7579f77SDag-Erling Smørgrav # If the PIC object exists, use it instead. 7380b7579f77SDag-Erling Smørgrav # $xdir was prepended to $pic_object above. 7381f61ef7f6SDag-Erling Smørgrav non_pic_object=$pic_object 7382b7579f77SDag-Erling Smørgrav func_append non_pic_objects " $non_pic_object" 7383b7579f77SDag-Erling Smørgrav fi 7384b7579f77SDag-Erling Smørgrav else 7385b7579f77SDag-Erling Smørgrav # Only an error if not doing a dry-run. 7386b7579f77SDag-Erling Smørgrav if $opt_dry_run; then 7387b7579f77SDag-Erling Smørgrav # Extract subdirectory from the argument. 7388b7579f77SDag-Erling Smørgrav func_dirname "$arg" "/" "" 7389f61ef7f6SDag-Erling Smørgrav xdir=$func_dirname_result 7390b7579f77SDag-Erling Smørgrav 7391b7579f77SDag-Erling Smørgrav func_lo2o "$arg" 7392b7579f77SDag-Erling Smørgrav pic_object=$xdir$objdir/$func_lo2o_result 7393b7579f77SDag-Erling Smørgrav non_pic_object=$xdir$func_lo2o_result 7394b7579f77SDag-Erling Smørgrav func_append libobjs " $pic_object" 7395b7579f77SDag-Erling Smørgrav func_append non_pic_objects " $non_pic_object" 7396b7579f77SDag-Erling Smørgrav else 7397f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$arg' is not a valid libtool object" 7398b7579f77SDag-Erling Smørgrav fi 7399b7579f77SDag-Erling Smørgrav fi 7400b7579f77SDag-Erling Smørgrav ;; 7401b7579f77SDag-Erling Smørgrav 7402b7579f77SDag-Erling Smørgrav *.$libext) 7403b7579f77SDag-Erling Smørgrav # An archive. 7404b7579f77SDag-Erling Smørgrav func_append deplibs " $arg" 7405b7579f77SDag-Erling Smørgrav func_append old_deplibs " $arg" 7406b7579f77SDag-Erling Smørgrav continue 7407b7579f77SDag-Erling Smørgrav ;; 7408b7579f77SDag-Erling Smørgrav 7409b7579f77SDag-Erling Smørgrav *.la) 7410b7579f77SDag-Erling Smørgrav # A libtool-controlled library. 7411b7579f77SDag-Erling Smørgrav 7412b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$arg" 7413f61ef7f6SDag-Erling Smørgrav if test dlfiles = "$prev"; then 7414b7579f77SDag-Erling Smørgrav # This library was specified with -dlopen. 7415b7579f77SDag-Erling Smørgrav func_append dlfiles " $func_resolve_sysroot_result" 7416b7579f77SDag-Erling Smørgrav prev= 7417f61ef7f6SDag-Erling Smørgrav elif test dlprefiles = "$prev"; then 7418b7579f77SDag-Erling Smørgrav # The library was specified with -dlpreopen. 7419b7579f77SDag-Erling Smørgrav func_append dlprefiles " $func_resolve_sysroot_result" 7420b7579f77SDag-Erling Smørgrav prev= 7421b7579f77SDag-Erling Smørgrav else 7422b7579f77SDag-Erling Smørgrav func_append deplibs " $func_resolve_sysroot_result" 7423b7579f77SDag-Erling Smørgrav fi 7424b7579f77SDag-Erling Smørgrav continue 7425b7579f77SDag-Erling Smørgrav ;; 7426b7579f77SDag-Erling Smørgrav 7427b7579f77SDag-Erling Smørgrav # Some other compiler argument. 7428b7579f77SDag-Erling Smørgrav *) 7429b7579f77SDag-Erling Smørgrav # Unknown arguments in both finalize_command and compile_command need 7430b7579f77SDag-Erling Smørgrav # to be aesthetically quoted because they are evaled later. 7431*46d2f618SCy Schubert func_quote_for_eval "$arg" 7432*46d2f618SCy Schubert arg=$func_quote_for_eval_result 7433b7579f77SDag-Erling Smørgrav ;; 7434b7579f77SDag-Erling Smørgrav esac # arg 7435b7579f77SDag-Erling Smørgrav 7436b7579f77SDag-Erling Smørgrav # Now actually substitute the argument into the commands. 7437b7579f77SDag-Erling Smørgrav if test -n "$arg"; then 7438b7579f77SDag-Erling Smørgrav func_append compile_command " $arg" 7439b7579f77SDag-Erling Smørgrav func_append finalize_command " $arg" 7440b7579f77SDag-Erling Smørgrav fi 7441b7579f77SDag-Erling Smørgrav done # argument parsing loop 7442b7579f77SDag-Erling Smørgrav 7443b7579f77SDag-Erling Smørgrav test -n "$prev" && \ 7444f61ef7f6SDag-Erling Smørgrav func_fatal_help "the '$prevarg' option requires an argument" 7445b7579f77SDag-Erling Smørgrav 7446f61ef7f6SDag-Erling Smørgrav if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then 7447b7579f77SDag-Erling Smørgrav eval arg=\"$export_dynamic_flag_spec\" 7448b7579f77SDag-Erling Smørgrav func_append compile_command " $arg" 7449b7579f77SDag-Erling Smørgrav func_append finalize_command " $arg" 7450b7579f77SDag-Erling Smørgrav fi 7451b7579f77SDag-Erling Smørgrav 7452b7579f77SDag-Erling Smørgrav oldlibs= 7453b7579f77SDag-Erling Smørgrav # calculate the name of the file, without its directory 7454b7579f77SDag-Erling Smørgrav func_basename "$output" 7455f61ef7f6SDag-Erling Smørgrav outputname=$func_basename_result 7456f61ef7f6SDag-Erling Smørgrav libobjs_save=$libobjs 7457b7579f77SDag-Erling Smørgrav 7458b7579f77SDag-Erling Smørgrav if test -n "$shlibpath_var"; then 7459b7579f77SDag-Erling Smørgrav # get the directories listed in $shlibpath_var 7460f61ef7f6SDag-Erling Smørgrav eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` 7461b7579f77SDag-Erling Smørgrav else 7462b7579f77SDag-Erling Smørgrav shlib_search_path= 7463b7579f77SDag-Erling Smørgrav fi 7464b7579f77SDag-Erling Smørgrav eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 7465b7579f77SDag-Erling Smørgrav eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 7466b7579f77SDag-Erling Smørgrav 7467f61ef7f6SDag-Erling Smørgrav # Definition is injected by LT_CONFIG during libtool generation. 7468f61ef7f6SDag-Erling Smørgrav func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 7469f61ef7f6SDag-Erling Smørgrav 7470b7579f77SDag-Erling Smørgrav func_dirname "$output" "/" "" 7471f61ef7f6SDag-Erling Smørgrav output_objdir=$func_dirname_result$objdir 7472b7579f77SDag-Erling Smørgrav func_to_tool_file "$output_objdir/" 7473b7579f77SDag-Erling Smørgrav tool_output_objdir=$func_to_tool_file_result 7474b7579f77SDag-Erling Smørgrav # Create the object directory. 7475b7579f77SDag-Erling Smørgrav func_mkdir_p "$output_objdir" 7476b7579f77SDag-Erling Smørgrav 7477b7579f77SDag-Erling Smørgrav # Determine the type of output 7478b7579f77SDag-Erling Smørgrav case $output in 7479b7579f77SDag-Erling Smørgrav "") 7480b7579f77SDag-Erling Smørgrav func_fatal_help "you must specify an output file" 7481b7579f77SDag-Erling Smørgrav ;; 7482b7579f77SDag-Erling Smørgrav *.$libext) linkmode=oldlib ;; 7483b7579f77SDag-Erling Smørgrav *.lo | *.$objext) linkmode=obj ;; 7484b7579f77SDag-Erling Smørgrav *.la) linkmode=lib ;; 7485b7579f77SDag-Erling Smørgrav *) linkmode=prog ;; # Anything else should be a program. 7486b7579f77SDag-Erling Smørgrav esac 7487b7579f77SDag-Erling Smørgrav 7488b7579f77SDag-Erling Smørgrav specialdeplibs= 7489b7579f77SDag-Erling Smørgrav 7490b7579f77SDag-Erling Smørgrav libs= 7491b7579f77SDag-Erling Smørgrav # Find all interdependent deplibs by searching for libraries 7492b7579f77SDag-Erling Smørgrav # that are linked more than once (e.g. -la -lb -la) 7493b7579f77SDag-Erling Smørgrav for deplib in $deplibs; do 7494b7579f77SDag-Erling Smørgrav if $opt_preserve_dup_deps; then 7495b7579f77SDag-Erling Smørgrav case "$libs " in 7496b7579f77SDag-Erling Smørgrav *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7497b7579f77SDag-Erling Smørgrav esac 7498b7579f77SDag-Erling Smørgrav fi 7499b7579f77SDag-Erling Smørgrav func_append libs " $deplib" 7500b7579f77SDag-Erling Smørgrav done 7501b7579f77SDag-Erling Smørgrav 7502f61ef7f6SDag-Erling Smørgrav if test lib = "$linkmode"; then 7503b7579f77SDag-Erling Smørgrav libs="$predeps $libs $compiler_lib_search_path $postdeps" 7504b7579f77SDag-Erling Smørgrav 7505b7579f77SDag-Erling Smørgrav # Compute libraries that are listed more than once in $predeps 7506b7579f77SDag-Erling Smørgrav # $postdeps and mark them as special (i.e., whose duplicates are 7507b7579f77SDag-Erling Smørgrav # not to be eliminated). 7508b7579f77SDag-Erling Smørgrav pre_post_deps= 7509b7579f77SDag-Erling Smørgrav if $opt_duplicate_compiler_generated_deps; then 7510b7579f77SDag-Erling Smørgrav for pre_post_dep in $predeps $postdeps; do 7511b7579f77SDag-Erling Smørgrav case "$pre_post_deps " in 7512b7579f77SDag-Erling Smørgrav *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 7513b7579f77SDag-Erling Smørgrav esac 7514b7579f77SDag-Erling Smørgrav func_append pre_post_deps " $pre_post_dep" 7515b7579f77SDag-Erling Smørgrav done 7516b7579f77SDag-Erling Smørgrav fi 7517b7579f77SDag-Erling Smørgrav pre_post_deps= 7518b7579f77SDag-Erling Smørgrav fi 7519b7579f77SDag-Erling Smørgrav 7520b7579f77SDag-Erling Smørgrav deplibs= 7521b7579f77SDag-Erling Smørgrav newdependency_libs= 7522b7579f77SDag-Erling Smørgrav newlib_search_path= 7523b7579f77SDag-Erling Smørgrav need_relink=no # whether we're linking any uninstalled libtool libraries 7524b7579f77SDag-Erling Smørgrav notinst_deplibs= # not-installed libtool libraries 7525b7579f77SDag-Erling Smørgrav notinst_path= # paths that contain not-installed libtool libraries 7526b7579f77SDag-Erling Smørgrav 7527b7579f77SDag-Erling Smørgrav case $linkmode in 7528b7579f77SDag-Erling Smørgrav lib) 7529b7579f77SDag-Erling Smørgrav passes="conv dlpreopen link" 7530b7579f77SDag-Erling Smørgrav for file in $dlfiles $dlprefiles; do 7531b7579f77SDag-Erling Smørgrav case $file in 7532b7579f77SDag-Erling Smørgrav *.la) ;; 7533b7579f77SDag-Erling Smørgrav *) 7534f61ef7f6SDag-Erling Smørgrav func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" 7535b7579f77SDag-Erling Smørgrav ;; 7536b7579f77SDag-Erling Smørgrav esac 7537b7579f77SDag-Erling Smørgrav done 7538b7579f77SDag-Erling Smørgrav ;; 7539b7579f77SDag-Erling Smørgrav prog) 7540b7579f77SDag-Erling Smørgrav compile_deplibs= 7541b7579f77SDag-Erling Smørgrav finalize_deplibs= 7542f61ef7f6SDag-Erling Smørgrav alldeplibs=false 7543b7579f77SDag-Erling Smørgrav newdlfiles= 7544b7579f77SDag-Erling Smørgrav newdlprefiles= 7545b7579f77SDag-Erling Smørgrav passes="conv scan dlopen dlpreopen link" 7546b7579f77SDag-Erling Smørgrav ;; 7547b7579f77SDag-Erling Smørgrav *) passes="conv" 7548b7579f77SDag-Erling Smørgrav ;; 7549b7579f77SDag-Erling Smørgrav esac 7550b7579f77SDag-Erling Smørgrav 7551b7579f77SDag-Erling Smørgrav for pass in $passes; do 7552b7579f77SDag-Erling Smørgrav # The preopen pass in lib mode reverses $deplibs; put it back here 7553b7579f77SDag-Erling Smørgrav # so that -L comes before libs that need it for instance... 7554f61ef7f6SDag-Erling Smørgrav if test lib,link = "$linkmode,$pass"; then 7555b7579f77SDag-Erling Smørgrav ## FIXME: Find the place where the list is rebuilt in the wrong 7556b7579f77SDag-Erling Smørgrav ## order, and fix it there properly 7557b7579f77SDag-Erling Smørgrav tmp_deplibs= 7558b7579f77SDag-Erling Smørgrav for deplib in $deplibs; do 7559b7579f77SDag-Erling Smørgrav tmp_deplibs="$deplib $tmp_deplibs" 7560b7579f77SDag-Erling Smørgrav done 7561f61ef7f6SDag-Erling Smørgrav deplibs=$tmp_deplibs 7562b7579f77SDag-Erling Smørgrav fi 7563b7579f77SDag-Erling Smørgrav 7564f61ef7f6SDag-Erling Smørgrav if test lib,link = "$linkmode,$pass" || 7565f61ef7f6SDag-Erling Smørgrav test prog,scan = "$linkmode,$pass"; then 7566f61ef7f6SDag-Erling Smørgrav libs=$deplibs 7567b7579f77SDag-Erling Smørgrav deplibs= 7568b7579f77SDag-Erling Smørgrav fi 7569f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode"; then 7570b7579f77SDag-Erling Smørgrav case $pass in 7571f61ef7f6SDag-Erling Smørgrav dlopen) libs=$dlfiles ;; 7572f61ef7f6SDag-Erling Smørgrav dlpreopen) libs=$dlprefiles ;; 7573b7579f77SDag-Erling Smørgrav link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 7574b7579f77SDag-Erling Smørgrav esac 7575b7579f77SDag-Erling Smørgrav fi 7576f61ef7f6SDag-Erling Smørgrav if test lib,dlpreopen = "$linkmode,$pass"; then 7577b7579f77SDag-Erling Smørgrav # Collect and forward deplibs of preopened libtool libs 7578b7579f77SDag-Erling Smørgrav for lib in $dlprefiles; do 7579b7579f77SDag-Erling Smørgrav # Ignore non-libtool-libs 7580b7579f77SDag-Erling Smørgrav dependency_libs= 7581b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$lib" 7582b7579f77SDag-Erling Smørgrav case $lib in 7583b7579f77SDag-Erling Smørgrav *.la) func_source "$func_resolve_sysroot_result" ;; 7584b7579f77SDag-Erling Smørgrav esac 7585b7579f77SDag-Erling Smørgrav 7586b7579f77SDag-Erling Smørgrav # Collect preopened libtool deplibs, except any this library 7587b7579f77SDag-Erling Smørgrav # has declared as weak libs 7588b7579f77SDag-Erling Smørgrav for deplib in $dependency_libs; do 7589b7579f77SDag-Erling Smørgrav func_basename "$deplib" 7590b7579f77SDag-Erling Smørgrav deplib_base=$func_basename_result 7591b7579f77SDag-Erling Smørgrav case " $weak_libs " in 7592b7579f77SDag-Erling Smørgrav *" $deplib_base "*) ;; 7593b7579f77SDag-Erling Smørgrav *) func_append deplibs " $deplib" ;; 7594b7579f77SDag-Erling Smørgrav esac 7595b7579f77SDag-Erling Smørgrav done 7596b7579f77SDag-Erling Smørgrav done 7597f61ef7f6SDag-Erling Smørgrav libs=$dlprefiles 7598b7579f77SDag-Erling Smørgrav fi 7599f61ef7f6SDag-Erling Smørgrav if test dlopen = "$pass"; then 7600b7579f77SDag-Erling Smørgrav # Collect dlpreopened libraries 7601f61ef7f6SDag-Erling Smørgrav save_deplibs=$deplibs 7602b7579f77SDag-Erling Smørgrav deplibs= 7603b7579f77SDag-Erling Smørgrav fi 7604b7579f77SDag-Erling Smørgrav 7605b7579f77SDag-Erling Smørgrav for deplib in $libs; do 7606b7579f77SDag-Erling Smørgrav lib= 7607f61ef7f6SDag-Erling Smørgrav found=false 7608b7579f77SDag-Erling Smørgrav case $deplib in 76098ed2b524SDag-Erling Smørgrav -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 76108ed2b524SDag-Erling Smørgrav |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 7611f61ef7f6SDag-Erling Smørgrav if test prog,link = "$linkmode,$pass"; then 7612b7579f77SDag-Erling Smørgrav compile_deplibs="$deplib $compile_deplibs" 7613b7579f77SDag-Erling Smørgrav finalize_deplibs="$deplib $finalize_deplibs" 7614b7579f77SDag-Erling Smørgrav else 7615b7579f77SDag-Erling Smørgrav func_append compiler_flags " $deplib" 7616f61ef7f6SDag-Erling Smørgrav if test lib = "$linkmode"; then 7617b7579f77SDag-Erling Smørgrav case "$new_inherited_linker_flags " in 7618b7579f77SDag-Erling Smørgrav *" $deplib "*) ;; 7619b7579f77SDag-Erling Smørgrav * ) func_append new_inherited_linker_flags " $deplib" ;; 7620b7579f77SDag-Erling Smørgrav esac 7621b7579f77SDag-Erling Smørgrav fi 7622b7579f77SDag-Erling Smørgrav fi 7623b7579f77SDag-Erling Smørgrav continue 7624b7579f77SDag-Erling Smørgrav ;; 7625b7579f77SDag-Erling Smørgrav -l*) 7626f61ef7f6SDag-Erling Smørgrav if test lib != "$linkmode" && test prog != "$linkmode"; then 7627f61ef7f6SDag-Erling Smørgrav func_warning "'-l' is ignored for archives/objects" 7628b7579f77SDag-Erling Smørgrav continue 7629b7579f77SDag-Erling Smørgrav fi 7630b7579f77SDag-Erling Smørgrav func_stripname '-l' '' "$deplib" 7631b7579f77SDag-Erling Smørgrav name=$func_stripname_result 7632f61ef7f6SDag-Erling Smørgrav if test lib = "$linkmode"; then 7633b7579f77SDag-Erling Smørgrav searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 7634b7579f77SDag-Erling Smørgrav else 7635b7579f77SDag-Erling Smørgrav searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 7636b7579f77SDag-Erling Smørgrav fi 7637b7579f77SDag-Erling Smørgrav for searchdir in $searchdirs; do 7638b7579f77SDag-Erling Smørgrav for search_ext in .la $std_shrext .so .a; do 7639b7579f77SDag-Erling Smørgrav # Search the libtool library 7640f61ef7f6SDag-Erling Smørgrav lib=$searchdir/lib$name$search_ext 7641b7579f77SDag-Erling Smørgrav if test -f "$lib"; then 7642f61ef7f6SDag-Erling Smørgrav if test .la = "$search_ext"; then 7643f61ef7f6SDag-Erling Smørgrav found=: 7644b7579f77SDag-Erling Smørgrav else 7645f61ef7f6SDag-Erling Smørgrav found=false 7646b7579f77SDag-Erling Smørgrav fi 7647b7579f77SDag-Erling Smørgrav break 2 7648b7579f77SDag-Erling Smørgrav fi 7649b7579f77SDag-Erling Smørgrav done 7650b7579f77SDag-Erling Smørgrav done 7651f61ef7f6SDag-Erling Smørgrav if $found; then 7652f61ef7f6SDag-Erling Smørgrav # deplib is a libtool library 7653b7579f77SDag-Erling Smørgrav # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 7654b7579f77SDag-Erling Smørgrav # We need to do some special things here, and not later. 7655f61ef7f6SDag-Erling Smørgrav if test yes = "$allow_libtool_libs_with_static_runtimes"; then 7656b7579f77SDag-Erling Smørgrav case " $predeps $postdeps " in 7657b7579f77SDag-Erling Smørgrav *" $deplib "*) 7658b7579f77SDag-Erling Smørgrav if func_lalib_p "$lib"; then 7659b7579f77SDag-Erling Smørgrav library_names= 7660b7579f77SDag-Erling Smørgrav old_library= 7661b7579f77SDag-Erling Smørgrav func_source "$lib" 7662b7579f77SDag-Erling Smørgrav for l in $old_library $library_names; do 7663f61ef7f6SDag-Erling Smørgrav ll=$l 7664b7579f77SDag-Erling Smørgrav done 7665b7579f77SDag-Erling Smørgrav if test "X$ll" = "X$old_library"; then # only static version available 7666f61ef7f6SDag-Erling Smørgrav found=false 7667b7579f77SDag-Erling Smørgrav func_dirname "$lib" "" "." 7668f61ef7f6SDag-Erling Smørgrav ladir=$func_dirname_result 7669b7579f77SDag-Erling Smørgrav lib=$ladir/$old_library 7670f61ef7f6SDag-Erling Smørgrav if test prog,link = "$linkmode,$pass"; then 7671b7579f77SDag-Erling Smørgrav compile_deplibs="$deplib $compile_deplibs" 7672b7579f77SDag-Erling Smørgrav finalize_deplibs="$deplib $finalize_deplibs" 7673b7579f77SDag-Erling Smørgrav else 7674b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7675f61ef7f6SDag-Erling Smørgrav test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7676b7579f77SDag-Erling Smørgrav fi 7677b7579f77SDag-Erling Smørgrav continue 7678b7579f77SDag-Erling Smørgrav fi 7679b7579f77SDag-Erling Smørgrav fi 7680b7579f77SDag-Erling Smørgrav ;; 7681b7579f77SDag-Erling Smørgrav *) ;; 7682b7579f77SDag-Erling Smørgrav esac 7683b7579f77SDag-Erling Smørgrav fi 7684f61ef7f6SDag-Erling Smørgrav else 7685f61ef7f6SDag-Erling Smørgrav # deplib doesn't seem to be a libtool library 7686f61ef7f6SDag-Erling Smørgrav if test prog,link = "$linkmode,$pass"; then 7687b7579f77SDag-Erling Smørgrav compile_deplibs="$deplib $compile_deplibs" 7688b7579f77SDag-Erling Smørgrav finalize_deplibs="$deplib $finalize_deplibs" 7689b7579f77SDag-Erling Smørgrav else 7690b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7691f61ef7f6SDag-Erling Smørgrav test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" 7692f61ef7f6SDag-Erling Smørgrav fi 7693f61ef7f6SDag-Erling Smørgrav continue 7694f61ef7f6SDag-Erling Smørgrav fi 7695f61ef7f6SDag-Erling Smørgrav ;; # -l 7696f61ef7f6SDag-Erling Smørgrav *.ltframework) 7697f61ef7f6SDag-Erling Smørgrav if test prog,link = "$linkmode,$pass"; then 7698f61ef7f6SDag-Erling Smørgrav compile_deplibs="$deplib $compile_deplibs" 7699f61ef7f6SDag-Erling Smørgrav finalize_deplibs="$deplib $finalize_deplibs" 7700f61ef7f6SDag-Erling Smørgrav else 7701f61ef7f6SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7702f61ef7f6SDag-Erling Smørgrav if test lib = "$linkmode"; then 7703b7579f77SDag-Erling Smørgrav case "$new_inherited_linker_flags " in 7704b7579f77SDag-Erling Smørgrav *" $deplib "*) ;; 7705b7579f77SDag-Erling Smørgrav * ) func_append new_inherited_linker_flags " $deplib" ;; 7706b7579f77SDag-Erling Smørgrav esac 7707b7579f77SDag-Erling Smørgrav fi 7708b7579f77SDag-Erling Smørgrav fi 7709b7579f77SDag-Erling Smørgrav continue 7710b7579f77SDag-Erling Smørgrav ;; 7711b7579f77SDag-Erling Smørgrav -L*) 7712b7579f77SDag-Erling Smørgrav case $linkmode in 7713b7579f77SDag-Erling Smørgrav lib) 7714b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7715f61ef7f6SDag-Erling Smørgrav test conv = "$pass" && continue 7716b7579f77SDag-Erling Smørgrav newdependency_libs="$deplib $newdependency_libs" 7717b7579f77SDag-Erling Smørgrav func_stripname '-L' '' "$deplib" 7718b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$func_stripname_result" 7719b7579f77SDag-Erling Smørgrav func_append newlib_search_path " $func_resolve_sysroot_result" 7720b7579f77SDag-Erling Smørgrav ;; 7721b7579f77SDag-Erling Smørgrav prog) 7722f61ef7f6SDag-Erling Smørgrav if test conv = "$pass"; then 7723b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7724b7579f77SDag-Erling Smørgrav continue 7725b7579f77SDag-Erling Smørgrav fi 7726f61ef7f6SDag-Erling Smørgrav if test scan = "$pass"; then 7727b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7728b7579f77SDag-Erling Smørgrav else 7729b7579f77SDag-Erling Smørgrav compile_deplibs="$deplib $compile_deplibs" 7730b7579f77SDag-Erling Smørgrav finalize_deplibs="$deplib $finalize_deplibs" 7731b7579f77SDag-Erling Smørgrav fi 7732b7579f77SDag-Erling Smørgrav func_stripname '-L' '' "$deplib" 7733b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$func_stripname_result" 7734b7579f77SDag-Erling Smørgrav func_append newlib_search_path " $func_resolve_sysroot_result" 7735b7579f77SDag-Erling Smørgrav ;; 7736b7579f77SDag-Erling Smørgrav *) 7737f61ef7f6SDag-Erling Smørgrav func_warning "'-L' is ignored for archives/objects" 7738b7579f77SDag-Erling Smørgrav ;; 7739b7579f77SDag-Erling Smørgrav esac # linkmode 7740b7579f77SDag-Erling Smørgrav continue 7741b7579f77SDag-Erling Smørgrav ;; # -L 7742b7579f77SDag-Erling Smørgrav -R*) 7743f61ef7f6SDag-Erling Smørgrav if test link = "$pass"; then 7744b7579f77SDag-Erling Smørgrav func_stripname '-R' '' "$deplib" 7745b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$func_stripname_result" 7746b7579f77SDag-Erling Smørgrav dir=$func_resolve_sysroot_result 7747b7579f77SDag-Erling Smørgrav # Make sure the xrpath contains only unique directories. 7748b7579f77SDag-Erling Smørgrav case "$xrpath " in 7749b7579f77SDag-Erling Smørgrav *" $dir "*) ;; 7750b7579f77SDag-Erling Smørgrav *) func_append xrpath " $dir" ;; 7751b7579f77SDag-Erling Smørgrav esac 7752b7579f77SDag-Erling Smørgrav fi 7753b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7754b7579f77SDag-Erling Smørgrav continue 7755b7579f77SDag-Erling Smørgrav ;; 7756b7579f77SDag-Erling Smørgrav *.la) 7757b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$deplib" 7758b7579f77SDag-Erling Smørgrav lib=$func_resolve_sysroot_result 7759b7579f77SDag-Erling Smørgrav ;; 7760b7579f77SDag-Erling Smørgrav *.$libext) 7761f61ef7f6SDag-Erling Smørgrav if test conv = "$pass"; then 7762b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7763b7579f77SDag-Erling Smørgrav continue 7764b7579f77SDag-Erling Smørgrav fi 7765b7579f77SDag-Erling Smørgrav case $linkmode in 7766b7579f77SDag-Erling Smørgrav lib) 7767b7579f77SDag-Erling Smørgrav # Linking convenience modules into shared libraries is allowed, 7768b7579f77SDag-Erling Smørgrav # but linking other static libraries is non-portable. 7769b7579f77SDag-Erling Smørgrav case " $dlpreconveniencelibs " in 7770b7579f77SDag-Erling Smørgrav *" $deplib "*) ;; 7771b7579f77SDag-Erling Smørgrav *) 7772f61ef7f6SDag-Erling Smørgrav valid_a_lib=false 7773b7579f77SDag-Erling Smørgrav case $deplibs_check_method in 7774b7579f77SDag-Erling Smørgrav match_pattern*) 7775b7579f77SDag-Erling Smørgrav set dummy $deplibs_check_method; shift 7776b7579f77SDag-Erling Smørgrav match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7777b7579f77SDag-Erling Smørgrav if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 7778b7579f77SDag-Erling Smørgrav | $EGREP "$match_pattern_regex" > /dev/null; then 7779f61ef7f6SDag-Erling Smørgrav valid_a_lib=: 7780b7579f77SDag-Erling Smørgrav fi 7781b7579f77SDag-Erling Smørgrav ;; 7782b7579f77SDag-Erling Smørgrav pass_all) 7783f61ef7f6SDag-Erling Smørgrav valid_a_lib=: 7784b7579f77SDag-Erling Smørgrav ;; 7785b7579f77SDag-Erling Smørgrav esac 7786f61ef7f6SDag-Erling Smørgrav if $valid_a_lib; then 7787f61ef7f6SDag-Erling Smørgrav echo 7788f61ef7f6SDag-Erling Smørgrav $ECHO "*** Warning: Linking the shared library $output against the" 7789f61ef7f6SDag-Erling Smørgrav $ECHO "*** static library $deplib is not portable!" 7790f61ef7f6SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7791f61ef7f6SDag-Erling Smørgrav else 7792b7579f77SDag-Erling Smørgrav echo 7793b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: Trying to link with static lib archive $deplib." 7794b7579f77SDag-Erling Smørgrav echo "*** I have the capability to make that library automatically link in when" 7795b7579f77SDag-Erling Smørgrav echo "*** you link to this library. But I can only do this if you have a" 7796b7579f77SDag-Erling Smørgrav echo "*** shared version of the library, which you do not appear to have" 7797b7579f77SDag-Erling Smørgrav echo "*** because the file extensions .$libext of this argument makes me believe" 7798b7579f77SDag-Erling Smørgrav echo "*** that it is just a static archive that I should not use here." 7799b7579f77SDag-Erling Smørgrav fi 7800b7579f77SDag-Erling Smørgrav ;; 7801b7579f77SDag-Erling Smørgrav esac 7802b7579f77SDag-Erling Smørgrav continue 7803b7579f77SDag-Erling Smørgrav ;; 7804b7579f77SDag-Erling Smørgrav prog) 7805f61ef7f6SDag-Erling Smørgrav if test link != "$pass"; then 7806b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7807b7579f77SDag-Erling Smørgrav else 7808b7579f77SDag-Erling Smørgrav compile_deplibs="$deplib $compile_deplibs" 7809b7579f77SDag-Erling Smørgrav finalize_deplibs="$deplib $finalize_deplibs" 7810b7579f77SDag-Erling Smørgrav fi 7811b7579f77SDag-Erling Smørgrav continue 7812b7579f77SDag-Erling Smørgrav ;; 7813b7579f77SDag-Erling Smørgrav esac # linkmode 7814b7579f77SDag-Erling Smørgrav ;; # *.$libext 7815b7579f77SDag-Erling Smørgrav *.lo | *.$objext) 7816f61ef7f6SDag-Erling Smørgrav if test conv = "$pass"; then 7817b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7818f61ef7f6SDag-Erling Smørgrav elif test prog = "$linkmode"; then 7819f61ef7f6SDag-Erling Smørgrav if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then 7820b7579f77SDag-Erling Smørgrav # If there is no dlopen support or we're linking statically, 7821b7579f77SDag-Erling Smørgrav # we need to preload. 7822b7579f77SDag-Erling Smørgrav func_append newdlprefiles " $deplib" 7823b7579f77SDag-Erling Smørgrav compile_deplibs="$deplib $compile_deplibs" 7824b7579f77SDag-Erling Smørgrav finalize_deplibs="$deplib $finalize_deplibs" 7825b7579f77SDag-Erling Smørgrav else 7826b7579f77SDag-Erling Smørgrav func_append newdlfiles " $deplib" 7827b7579f77SDag-Erling Smørgrav fi 7828b7579f77SDag-Erling Smørgrav fi 7829b7579f77SDag-Erling Smørgrav continue 7830b7579f77SDag-Erling Smørgrav ;; 7831b7579f77SDag-Erling Smørgrav %DEPLIBS%) 7832f61ef7f6SDag-Erling Smørgrav alldeplibs=: 7833b7579f77SDag-Erling Smørgrav continue 7834b7579f77SDag-Erling Smørgrav ;; 7835b7579f77SDag-Erling Smørgrav esac # case $deplib 7836b7579f77SDag-Erling Smørgrav 7837f61ef7f6SDag-Erling Smørgrav $found || test -f "$lib" \ 7838f61ef7f6SDag-Erling Smørgrav || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" 7839b7579f77SDag-Erling Smørgrav 7840b7579f77SDag-Erling Smørgrav # Check to see that this really is a libtool archive. 7841b7579f77SDag-Erling Smørgrav func_lalib_unsafe_p "$lib" \ 7842f61ef7f6SDag-Erling Smørgrav || func_fatal_error "'$lib' is not a valid libtool archive" 7843b7579f77SDag-Erling Smørgrav 7844b7579f77SDag-Erling Smørgrav func_dirname "$lib" "" "." 7845f61ef7f6SDag-Erling Smørgrav ladir=$func_dirname_result 7846b7579f77SDag-Erling Smørgrav 7847b7579f77SDag-Erling Smørgrav dlname= 7848b7579f77SDag-Erling Smørgrav dlopen= 7849b7579f77SDag-Erling Smørgrav dlpreopen= 7850b7579f77SDag-Erling Smørgrav libdir= 7851b7579f77SDag-Erling Smørgrav library_names= 7852b7579f77SDag-Erling Smørgrav old_library= 7853b7579f77SDag-Erling Smørgrav inherited_linker_flags= 7854b7579f77SDag-Erling Smørgrav # If the library was installed with an old release of libtool, 7855b7579f77SDag-Erling Smørgrav # it will not redefine variables installed, or shouldnotlink 7856b7579f77SDag-Erling Smørgrav installed=yes 7857b7579f77SDag-Erling Smørgrav shouldnotlink=no 7858b7579f77SDag-Erling Smørgrav avoidtemprpath= 7859b7579f77SDag-Erling Smørgrav 7860b7579f77SDag-Erling Smørgrav 7861b7579f77SDag-Erling Smørgrav # Read the .la file 7862b7579f77SDag-Erling Smørgrav func_source "$lib" 7863b7579f77SDag-Erling Smørgrav 7864b7579f77SDag-Erling Smørgrav # Convert "-framework foo" to "foo.ltframework" 7865b7579f77SDag-Erling Smørgrav if test -n "$inherited_linker_flags"; then 7866b7579f77SDag-Erling Smørgrav tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 7867b7579f77SDag-Erling Smørgrav for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 7868b7579f77SDag-Erling Smørgrav case " $new_inherited_linker_flags " in 7869b7579f77SDag-Erling Smørgrav *" $tmp_inherited_linker_flag "*) ;; 7870b7579f77SDag-Erling Smørgrav *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 7871b7579f77SDag-Erling Smørgrav esac 7872b7579f77SDag-Erling Smørgrav done 7873b7579f77SDag-Erling Smørgrav fi 7874b7579f77SDag-Erling Smørgrav dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7875f61ef7f6SDag-Erling Smørgrav if test lib,link = "$linkmode,$pass" || 7876f61ef7f6SDag-Erling Smørgrav test prog,scan = "$linkmode,$pass" || 7877f61ef7f6SDag-Erling Smørgrav { test prog != "$linkmode" && test lib != "$linkmode"; }; then 7878b7579f77SDag-Erling Smørgrav test -n "$dlopen" && func_append dlfiles " $dlopen" 7879b7579f77SDag-Erling Smørgrav test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 7880b7579f77SDag-Erling Smørgrav fi 7881b7579f77SDag-Erling Smørgrav 7882f61ef7f6SDag-Erling Smørgrav if test conv = "$pass"; then 7883b7579f77SDag-Erling Smørgrav # Only check for convenience libraries 7884b7579f77SDag-Erling Smørgrav deplibs="$lib $deplibs" 7885b7579f77SDag-Erling Smørgrav if test -z "$libdir"; then 7886b7579f77SDag-Erling Smørgrav if test -z "$old_library"; then 7887f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot find name of link library for '$lib'" 7888b7579f77SDag-Erling Smørgrav fi 7889b7579f77SDag-Erling Smørgrav # It is a libtool convenience library, so add in its objects. 7890b7579f77SDag-Erling Smørgrav func_append convenience " $ladir/$objdir/$old_library" 7891b7579f77SDag-Erling Smørgrav func_append old_convenience " $ladir/$objdir/$old_library" 7892f61ef7f6SDag-Erling Smørgrav elif test prog != "$linkmode" && test lib != "$linkmode"; then 7893f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$lib' is not a convenience library" 7894b7579f77SDag-Erling Smørgrav fi 7895b7579f77SDag-Erling Smørgrav tmp_libs= 7896b7579f77SDag-Erling Smørgrav for deplib in $dependency_libs; do 7897b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 7898b7579f77SDag-Erling Smørgrav if $opt_preserve_dup_deps; then 7899b7579f77SDag-Erling Smørgrav case "$tmp_libs " in 7900b7579f77SDag-Erling Smørgrav *" $deplib "*) func_append specialdeplibs " $deplib" ;; 7901b7579f77SDag-Erling Smørgrav esac 7902b7579f77SDag-Erling Smørgrav fi 7903b7579f77SDag-Erling Smørgrav func_append tmp_libs " $deplib" 7904b7579f77SDag-Erling Smørgrav done 7905b7579f77SDag-Erling Smørgrav continue 7906b7579f77SDag-Erling Smørgrav fi # $pass = conv 7907b7579f77SDag-Erling Smørgrav 7908b7579f77SDag-Erling Smørgrav 7909b7579f77SDag-Erling Smørgrav # Get the name of the library we link against. 7910b7579f77SDag-Erling Smørgrav linklib= 7911b7579f77SDag-Erling Smørgrav if test -n "$old_library" && 7912f61ef7f6SDag-Erling Smørgrav { test yes = "$prefer_static_libs" || 7913f61ef7f6SDag-Erling Smørgrav test built,no = "$prefer_static_libs,$installed"; }; then 7914b7579f77SDag-Erling Smørgrav linklib=$old_library 7915b7579f77SDag-Erling Smørgrav else 7916b7579f77SDag-Erling Smørgrav for l in $old_library $library_names; do 7917f61ef7f6SDag-Erling Smørgrav linklib=$l 7918b7579f77SDag-Erling Smørgrav done 7919b7579f77SDag-Erling Smørgrav fi 7920b7579f77SDag-Erling Smørgrav if test -z "$linklib"; then 7921f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot find name of link library for '$lib'" 7922b7579f77SDag-Erling Smørgrav fi 7923b7579f77SDag-Erling Smørgrav 7924b7579f77SDag-Erling Smørgrav # This library was specified with -dlopen. 7925f61ef7f6SDag-Erling Smørgrav if test dlopen = "$pass"; then 7926f61ef7f6SDag-Erling Smørgrav test -z "$libdir" \ 7927f61ef7f6SDag-Erling Smørgrav && func_fatal_error "cannot -dlopen a convenience library: '$lib'" 7928b7579f77SDag-Erling Smørgrav if test -z "$dlname" || 7929f61ef7f6SDag-Erling Smørgrav test yes != "$dlopen_support" || 7930f61ef7f6SDag-Erling Smørgrav test no = "$build_libtool_libs" 7931f61ef7f6SDag-Erling Smørgrav then 7932b7579f77SDag-Erling Smørgrav # If there is no dlname, no dlopen support or we're linking 7933b7579f77SDag-Erling Smørgrav # statically, we need to preload. We also need to preload any 7934b7579f77SDag-Erling Smørgrav # dependent libraries so libltdl's deplib preloader doesn't 7935b7579f77SDag-Erling Smørgrav # bomb out in the load deplibs phase. 7936b7579f77SDag-Erling Smørgrav func_append dlprefiles " $lib $dependency_libs" 7937b7579f77SDag-Erling Smørgrav else 7938b7579f77SDag-Erling Smørgrav func_append newdlfiles " $lib" 7939b7579f77SDag-Erling Smørgrav fi 7940b7579f77SDag-Erling Smørgrav continue 7941b7579f77SDag-Erling Smørgrav fi # $pass = dlopen 7942b7579f77SDag-Erling Smørgrav 7943b7579f77SDag-Erling Smørgrav # We need an absolute path. 7944b7579f77SDag-Erling Smørgrav case $ladir in 7945f61ef7f6SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; 7946b7579f77SDag-Erling Smørgrav *) 7947b7579f77SDag-Erling Smørgrav abs_ladir=`cd "$ladir" && pwd` 7948b7579f77SDag-Erling Smørgrav if test -z "$abs_ladir"; then 7949f61ef7f6SDag-Erling Smørgrav func_warning "cannot determine absolute directory name of '$ladir'" 7950b7579f77SDag-Erling Smørgrav func_warning "passing it literally to the linker, although it might fail" 7951f61ef7f6SDag-Erling Smørgrav abs_ladir=$ladir 7952b7579f77SDag-Erling Smørgrav fi 7953b7579f77SDag-Erling Smørgrav ;; 7954b7579f77SDag-Erling Smørgrav esac 7955b7579f77SDag-Erling Smørgrav func_basename "$lib" 7956f61ef7f6SDag-Erling Smørgrav laname=$func_basename_result 7957b7579f77SDag-Erling Smørgrav 7958b7579f77SDag-Erling Smørgrav # Find the relevant object directory and library name. 7959f61ef7f6SDag-Erling Smørgrav if test yes = "$installed"; then 7960b7579f77SDag-Erling Smørgrav if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7961f61ef7f6SDag-Erling Smørgrav func_warning "library '$lib' was moved." 7962f61ef7f6SDag-Erling Smørgrav dir=$ladir 7963f61ef7f6SDag-Erling Smørgrav absdir=$abs_ladir 7964f61ef7f6SDag-Erling Smørgrav libdir=$abs_ladir 7965b7579f77SDag-Erling Smørgrav else 7966f61ef7f6SDag-Erling Smørgrav dir=$lt_sysroot$libdir 7967f61ef7f6SDag-Erling Smørgrav absdir=$lt_sysroot$libdir 7968b7579f77SDag-Erling Smørgrav fi 7969f61ef7f6SDag-Erling Smørgrav test yes = "$hardcode_automatic" && avoidtemprpath=yes 7970b7579f77SDag-Erling Smørgrav else 7971b7579f77SDag-Erling Smørgrav if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 7972f61ef7f6SDag-Erling Smørgrav dir=$ladir 7973f61ef7f6SDag-Erling Smørgrav absdir=$abs_ladir 7974b7579f77SDag-Erling Smørgrav # Remove this search path later 7975b7579f77SDag-Erling Smørgrav func_append notinst_path " $abs_ladir" 7976b7579f77SDag-Erling Smørgrav else 7977f61ef7f6SDag-Erling Smørgrav dir=$ladir/$objdir 7978f61ef7f6SDag-Erling Smørgrav absdir=$abs_ladir/$objdir 7979b7579f77SDag-Erling Smørgrav # Remove this search path later 7980b7579f77SDag-Erling Smørgrav func_append notinst_path " $abs_ladir" 7981b7579f77SDag-Erling Smørgrav fi 7982b7579f77SDag-Erling Smørgrav fi # $installed = yes 7983b7579f77SDag-Erling Smørgrav func_stripname 'lib' '.la' "$laname" 7984b7579f77SDag-Erling Smørgrav name=$func_stripname_result 7985b7579f77SDag-Erling Smørgrav 7986b7579f77SDag-Erling Smørgrav # This library was specified with -dlpreopen. 7987f61ef7f6SDag-Erling Smørgrav if test dlpreopen = "$pass"; then 7988f61ef7f6SDag-Erling Smørgrav if test -z "$libdir" && test prog = "$linkmode"; then 7989f61ef7f6SDag-Erling Smørgrav func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" 7990b7579f77SDag-Erling Smørgrav fi 7991f61ef7f6SDag-Erling Smørgrav case $host in 7992b7579f77SDag-Erling Smørgrav # special handling for platforms with PE-DLLs. 7993b7579f77SDag-Erling Smørgrav *cygwin* | *mingw* | *cegcc* ) 7994b7579f77SDag-Erling Smørgrav # Linker will automatically link against shared library if both 7995b7579f77SDag-Erling Smørgrav # static and shared are present. Therefore, ensure we extract 7996b7579f77SDag-Erling Smørgrav # symbols from the import library if a shared library is present 7997b7579f77SDag-Erling Smørgrav # (otherwise, the dlopen module name will be incorrect). We do 7998b7579f77SDag-Erling Smørgrav # this by putting the import library name into $newdlprefiles. 7999b7579f77SDag-Erling Smørgrav # We recover the dlopen module name by 'saving' the la file 8000b7579f77SDag-Erling Smørgrav # name in a special purpose variable, and (later) extracting the 8001b7579f77SDag-Erling Smørgrav # dlname from the la file. 8002b7579f77SDag-Erling Smørgrav if test -n "$dlname"; then 8003b7579f77SDag-Erling Smørgrav func_tr_sh "$dir/$linklib" 8004b7579f77SDag-Erling Smørgrav eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 8005b7579f77SDag-Erling Smørgrav func_append newdlprefiles " $dir/$linklib" 8006b7579f77SDag-Erling Smørgrav else 8007b7579f77SDag-Erling Smørgrav func_append newdlprefiles " $dir/$old_library" 8008b7579f77SDag-Erling Smørgrav # Keep a list of preopened convenience libraries to check 8009b7579f77SDag-Erling Smørgrav # that they are being used correctly in the link pass. 8010b7579f77SDag-Erling Smørgrav test -z "$libdir" && \ 8011b7579f77SDag-Erling Smørgrav func_append dlpreconveniencelibs " $dir/$old_library" 8012b7579f77SDag-Erling Smørgrav fi 8013b7579f77SDag-Erling Smørgrav ;; 8014b7579f77SDag-Erling Smørgrav * ) 8015b7579f77SDag-Erling Smørgrav # Prefer using a static library (so that no silly _DYNAMIC symbols 8016b7579f77SDag-Erling Smørgrav # are required to link). 8017b7579f77SDag-Erling Smørgrav if test -n "$old_library"; then 8018b7579f77SDag-Erling Smørgrav func_append newdlprefiles " $dir/$old_library" 8019b7579f77SDag-Erling Smørgrav # Keep a list of preopened convenience libraries to check 8020b7579f77SDag-Erling Smørgrav # that they are being used correctly in the link pass. 8021b7579f77SDag-Erling Smørgrav test -z "$libdir" && \ 8022b7579f77SDag-Erling Smørgrav func_append dlpreconveniencelibs " $dir/$old_library" 8023b7579f77SDag-Erling Smørgrav # Otherwise, use the dlname, so that lt_dlopen finds it. 8024b7579f77SDag-Erling Smørgrav elif test -n "$dlname"; then 8025b7579f77SDag-Erling Smørgrav func_append newdlprefiles " $dir/$dlname" 8026b7579f77SDag-Erling Smørgrav else 8027b7579f77SDag-Erling Smørgrav func_append newdlprefiles " $dir/$linklib" 8028b7579f77SDag-Erling Smørgrav fi 8029b7579f77SDag-Erling Smørgrav ;; 8030b7579f77SDag-Erling Smørgrav esac 8031b7579f77SDag-Erling Smørgrav fi # $pass = dlpreopen 8032b7579f77SDag-Erling Smørgrav 8033b7579f77SDag-Erling Smørgrav if test -z "$libdir"; then 8034b7579f77SDag-Erling Smørgrav # Link the convenience library 8035f61ef7f6SDag-Erling Smørgrav if test lib = "$linkmode"; then 8036b7579f77SDag-Erling Smørgrav deplibs="$dir/$old_library $deplibs" 8037f61ef7f6SDag-Erling Smørgrav elif test prog,link = "$linkmode,$pass"; then 8038b7579f77SDag-Erling Smørgrav compile_deplibs="$dir/$old_library $compile_deplibs" 8039b7579f77SDag-Erling Smørgrav finalize_deplibs="$dir/$old_library $finalize_deplibs" 8040b7579f77SDag-Erling Smørgrav else 8041b7579f77SDag-Erling Smørgrav deplibs="$lib $deplibs" # used for prog,scan pass 8042b7579f77SDag-Erling Smørgrav fi 8043b7579f77SDag-Erling Smørgrav continue 8044b7579f77SDag-Erling Smørgrav fi 8045b7579f77SDag-Erling Smørgrav 8046b7579f77SDag-Erling Smørgrav 8047f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode" && test link != "$pass"; then 8048b7579f77SDag-Erling Smørgrav func_append newlib_search_path " $ladir" 8049b7579f77SDag-Erling Smørgrav deplibs="$lib $deplibs" 8050b7579f77SDag-Erling Smørgrav 8051f61ef7f6SDag-Erling Smørgrav linkalldeplibs=false 8052f61ef7f6SDag-Erling Smørgrav if test no != "$link_all_deplibs" || test -z "$library_names" || 8053f61ef7f6SDag-Erling Smørgrav test no = "$build_libtool_libs"; then 8054f61ef7f6SDag-Erling Smørgrav linkalldeplibs=: 8055b7579f77SDag-Erling Smørgrav fi 8056b7579f77SDag-Erling Smørgrav 8057b7579f77SDag-Erling Smørgrav tmp_libs= 8058b7579f77SDag-Erling Smørgrav for deplib in $dependency_libs; do 8059b7579f77SDag-Erling Smørgrav case $deplib in 8060b7579f77SDag-Erling Smørgrav -L*) func_stripname '-L' '' "$deplib" 8061b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$func_stripname_result" 8062b7579f77SDag-Erling Smørgrav func_append newlib_search_path " $func_resolve_sysroot_result" 8063b7579f77SDag-Erling Smørgrav ;; 8064b7579f77SDag-Erling Smørgrav esac 8065b7579f77SDag-Erling Smørgrav # Need to link against all dependency_libs? 8066f61ef7f6SDag-Erling Smørgrav if $linkalldeplibs; then 8067b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 8068b7579f77SDag-Erling Smørgrav else 8069b7579f77SDag-Erling Smørgrav # Need to hardcode shared library paths 8070b7579f77SDag-Erling Smørgrav # or/and link against static libraries 8071b7579f77SDag-Erling Smørgrav newdependency_libs="$deplib $newdependency_libs" 8072b7579f77SDag-Erling Smørgrav fi 8073b7579f77SDag-Erling Smørgrav if $opt_preserve_dup_deps; then 8074b7579f77SDag-Erling Smørgrav case "$tmp_libs " in 8075b7579f77SDag-Erling Smørgrav *" $deplib "*) func_append specialdeplibs " $deplib" ;; 8076b7579f77SDag-Erling Smørgrav esac 8077b7579f77SDag-Erling Smørgrav fi 8078b7579f77SDag-Erling Smørgrav func_append tmp_libs " $deplib" 8079b7579f77SDag-Erling Smørgrav done # for deplib 8080b7579f77SDag-Erling Smørgrav continue 8081b7579f77SDag-Erling Smørgrav fi # $linkmode = prog... 8082b7579f77SDag-Erling Smørgrav 8083f61ef7f6SDag-Erling Smørgrav if test prog,link = "$linkmode,$pass"; then 8084b7579f77SDag-Erling Smørgrav if test -n "$library_names" && 8085f61ef7f6SDag-Erling Smørgrav { { test no = "$prefer_static_libs" || 8086f61ef7f6SDag-Erling Smørgrav test built,yes = "$prefer_static_libs,$installed"; } || 8087b7579f77SDag-Erling Smørgrav test -z "$old_library"; }; then 8088b7579f77SDag-Erling Smørgrav # We need to hardcode the library path 8089b7579f77SDag-Erling Smørgrav if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then 8090b7579f77SDag-Erling Smørgrav # Make sure the rpath contains only unique directories. 8091f61ef7f6SDag-Erling Smørgrav case $temp_rpath: in 8092b7579f77SDag-Erling Smørgrav *"$absdir:"*) ;; 8093b7579f77SDag-Erling Smørgrav *) func_append temp_rpath "$absdir:" ;; 8094b7579f77SDag-Erling Smørgrav esac 8095b7579f77SDag-Erling Smørgrav fi 8096b7579f77SDag-Erling Smørgrav 8097b7579f77SDag-Erling Smørgrav # Hardcode the library path. 8098b7579f77SDag-Erling Smørgrav # Skip directories that are in the system default run-time 8099b7579f77SDag-Erling Smørgrav # search path. 8100b7579f77SDag-Erling Smørgrav case " $sys_lib_dlsearch_path " in 8101b7579f77SDag-Erling Smørgrav *" $absdir "*) ;; 8102b7579f77SDag-Erling Smørgrav *) 8103b7579f77SDag-Erling Smørgrav case "$compile_rpath " in 8104b7579f77SDag-Erling Smørgrav *" $absdir "*) ;; 8105b7579f77SDag-Erling Smørgrav *) func_append compile_rpath " $absdir" ;; 8106b7579f77SDag-Erling Smørgrav esac 8107b7579f77SDag-Erling Smørgrav ;; 8108b7579f77SDag-Erling Smørgrav esac 8109b7579f77SDag-Erling Smørgrav case " $sys_lib_dlsearch_path " in 8110b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 8111b7579f77SDag-Erling Smørgrav *) 8112b7579f77SDag-Erling Smørgrav case "$finalize_rpath " in 8113b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 8114b7579f77SDag-Erling Smørgrav *) func_append finalize_rpath " $libdir" ;; 8115b7579f77SDag-Erling Smørgrav esac 8116b7579f77SDag-Erling Smørgrav ;; 8117b7579f77SDag-Erling Smørgrav esac 8118b7579f77SDag-Erling Smørgrav fi # $linkmode,$pass = prog,link... 8119b7579f77SDag-Erling Smørgrav 8120f61ef7f6SDag-Erling Smørgrav if $alldeplibs && 8121f61ef7f6SDag-Erling Smørgrav { test pass_all = "$deplibs_check_method" || 8122f61ef7f6SDag-Erling Smørgrav { test yes = "$build_libtool_libs" && 8123b7579f77SDag-Erling Smørgrav test -n "$library_names"; }; }; then 8124b7579f77SDag-Erling Smørgrav # We only need to search for static libraries 8125b7579f77SDag-Erling Smørgrav continue 8126b7579f77SDag-Erling Smørgrav fi 8127b7579f77SDag-Erling Smørgrav fi 8128b7579f77SDag-Erling Smørgrav 8129b7579f77SDag-Erling Smørgrav link_static=no # Whether the deplib will be linked statically 8130b7579f77SDag-Erling Smørgrav use_static_libs=$prefer_static_libs 8131f61ef7f6SDag-Erling Smørgrav if test built = "$use_static_libs" && test yes = "$installed"; then 8132b7579f77SDag-Erling Smørgrav use_static_libs=no 8133b7579f77SDag-Erling Smørgrav fi 8134b7579f77SDag-Erling Smørgrav if test -n "$library_names" && 8135f61ef7f6SDag-Erling Smørgrav { test no = "$use_static_libs" || test -z "$old_library"; }; then 8136b7579f77SDag-Erling Smørgrav case $host in 8137f61ef7f6SDag-Erling Smørgrav *cygwin* | *mingw* | *cegcc* | *os2*) 8138b7579f77SDag-Erling Smørgrav # No point in relinking DLLs because paths are not encoded 8139b7579f77SDag-Erling Smørgrav func_append notinst_deplibs " $lib" 8140b7579f77SDag-Erling Smørgrav need_relink=no 8141b7579f77SDag-Erling Smørgrav ;; 8142b7579f77SDag-Erling Smørgrav *) 8143f61ef7f6SDag-Erling Smørgrav if test no = "$installed"; then 8144b7579f77SDag-Erling Smørgrav func_append notinst_deplibs " $lib" 8145b7579f77SDag-Erling Smørgrav need_relink=yes 8146b7579f77SDag-Erling Smørgrav fi 8147b7579f77SDag-Erling Smørgrav ;; 8148b7579f77SDag-Erling Smørgrav esac 8149b7579f77SDag-Erling Smørgrav # This is a shared library 8150b7579f77SDag-Erling Smørgrav 8151b7579f77SDag-Erling Smørgrav # Warn about portability, can't link against -module's on some 8152b7579f77SDag-Erling Smørgrav # systems (darwin). Don't bleat about dlopened modules though! 8153f61ef7f6SDag-Erling Smørgrav dlopenmodule= 8154b7579f77SDag-Erling Smørgrav for dlpremoduletest in $dlprefiles; do 8155b7579f77SDag-Erling Smørgrav if test "X$dlpremoduletest" = "X$lib"; then 8156f61ef7f6SDag-Erling Smørgrav dlopenmodule=$dlpremoduletest 8157b7579f77SDag-Erling Smørgrav break 8158b7579f77SDag-Erling Smørgrav fi 8159b7579f77SDag-Erling Smørgrav done 8160f61ef7f6SDag-Erling Smørgrav if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then 8161b7579f77SDag-Erling Smørgrav echo 8162f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode"; then 8163b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: Linking the executable $output against the loadable module" 8164b7579f77SDag-Erling Smørgrav else 8165b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: Linking the shared library $output against the loadable module" 8166b7579f77SDag-Erling Smørgrav fi 8167b7579f77SDag-Erling Smørgrav $ECHO "*** $linklib is not portable!" 8168b7579f77SDag-Erling Smørgrav fi 8169f61ef7f6SDag-Erling Smørgrav if test lib = "$linkmode" && 8170f61ef7f6SDag-Erling Smørgrav test yes = "$hardcode_into_libs"; then 8171b7579f77SDag-Erling Smørgrav # Hardcode the library path. 8172b7579f77SDag-Erling Smørgrav # Skip directories that are in the system default run-time 8173b7579f77SDag-Erling Smørgrav # search path. 8174b7579f77SDag-Erling Smørgrav case " $sys_lib_dlsearch_path " in 8175b7579f77SDag-Erling Smørgrav *" $absdir "*) ;; 8176b7579f77SDag-Erling Smørgrav *) 8177b7579f77SDag-Erling Smørgrav case "$compile_rpath " in 8178b7579f77SDag-Erling Smørgrav *" $absdir "*) ;; 8179b7579f77SDag-Erling Smørgrav *) func_append compile_rpath " $absdir" ;; 8180b7579f77SDag-Erling Smørgrav esac 8181b7579f77SDag-Erling Smørgrav ;; 8182b7579f77SDag-Erling Smørgrav esac 8183b7579f77SDag-Erling Smørgrav case " $sys_lib_dlsearch_path " in 8184b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 8185b7579f77SDag-Erling Smørgrav *) 8186b7579f77SDag-Erling Smørgrav case "$finalize_rpath " in 8187b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 8188b7579f77SDag-Erling Smørgrav *) func_append finalize_rpath " $libdir" ;; 8189b7579f77SDag-Erling Smørgrav esac 8190b7579f77SDag-Erling Smørgrav ;; 8191b7579f77SDag-Erling Smørgrav esac 8192b7579f77SDag-Erling Smørgrav fi 8193b7579f77SDag-Erling Smørgrav 8194b7579f77SDag-Erling Smørgrav if test -n "$old_archive_from_expsyms_cmds"; then 8195b7579f77SDag-Erling Smørgrav # figure out the soname 8196b7579f77SDag-Erling Smørgrav set dummy $library_names 8197b7579f77SDag-Erling Smørgrav shift 8198f61ef7f6SDag-Erling Smørgrav realname=$1 8199b7579f77SDag-Erling Smørgrav shift 8200b7579f77SDag-Erling Smørgrav libname=`eval "\\$ECHO \"$libname_spec\""` 8201b7579f77SDag-Erling Smørgrav # use dlname if we got it. it's perfectly good, no? 8202b7579f77SDag-Erling Smørgrav if test -n "$dlname"; then 8203f61ef7f6SDag-Erling Smørgrav soname=$dlname 8204b7579f77SDag-Erling Smørgrav elif test -n "$soname_spec"; then 8205b7579f77SDag-Erling Smørgrav # bleh windows 8206b7579f77SDag-Erling Smørgrav case $host in 8207f61ef7f6SDag-Erling Smørgrav *cygwin* | mingw* | *cegcc* | *os2*) 8208b7579f77SDag-Erling Smørgrav func_arith $current - $age 8209b7579f77SDag-Erling Smørgrav major=$func_arith_result 8210f61ef7f6SDag-Erling Smørgrav versuffix=-$major 8211b7579f77SDag-Erling Smørgrav ;; 8212b7579f77SDag-Erling Smørgrav esac 8213b7579f77SDag-Erling Smørgrav eval soname=\"$soname_spec\" 8214b7579f77SDag-Erling Smørgrav else 8215f61ef7f6SDag-Erling Smørgrav soname=$realname 8216b7579f77SDag-Erling Smørgrav fi 8217b7579f77SDag-Erling Smørgrav 8218b7579f77SDag-Erling Smørgrav # Make a new name for the extract_expsyms_cmds to use 8219f61ef7f6SDag-Erling Smørgrav soroot=$soname 8220b7579f77SDag-Erling Smørgrav func_basename "$soroot" 8221f61ef7f6SDag-Erling Smørgrav soname=$func_basename_result 8222b7579f77SDag-Erling Smørgrav func_stripname 'lib' '.dll' "$soname" 8223b7579f77SDag-Erling Smørgrav newlib=libimp-$func_stripname_result.a 8224b7579f77SDag-Erling Smørgrav 8225b7579f77SDag-Erling Smørgrav # If the library has no export list, then create one now 8226b7579f77SDag-Erling Smørgrav if test -f "$output_objdir/$soname-def"; then : 8227b7579f77SDag-Erling Smørgrav else 8228f61ef7f6SDag-Erling Smørgrav func_verbose "extracting exported symbol list from '$soname'" 8229b7579f77SDag-Erling Smørgrav func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 8230b7579f77SDag-Erling Smørgrav fi 8231b7579f77SDag-Erling Smørgrav 8232b7579f77SDag-Erling Smørgrav # Create $newlib 8233b7579f77SDag-Erling Smørgrav if test -f "$output_objdir/$newlib"; then :; else 8234f61ef7f6SDag-Erling Smørgrav func_verbose "generating import library for '$soname'" 8235b7579f77SDag-Erling Smørgrav func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 8236b7579f77SDag-Erling Smørgrav fi 8237b7579f77SDag-Erling Smørgrav # make sure the library variables are pointing to the new library 8238b7579f77SDag-Erling Smørgrav dir=$output_objdir 8239b7579f77SDag-Erling Smørgrav linklib=$newlib 8240b7579f77SDag-Erling Smørgrav fi # test -n "$old_archive_from_expsyms_cmds" 8241b7579f77SDag-Erling Smørgrav 8242f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode" || test relink != "$opt_mode"; then 8243b7579f77SDag-Erling Smørgrav add_shlibpath= 8244b7579f77SDag-Erling Smørgrav add_dir= 8245b7579f77SDag-Erling Smørgrav add= 8246b7579f77SDag-Erling Smørgrav lib_linked=yes 8247b7579f77SDag-Erling Smørgrav case $hardcode_action in 8248b7579f77SDag-Erling Smørgrav immediate | unsupported) 8249f61ef7f6SDag-Erling Smørgrav if test no = "$hardcode_direct"; then 8250f61ef7f6SDag-Erling Smørgrav add=$dir/$linklib 8251b7579f77SDag-Erling Smørgrav case $host in 8252f61ef7f6SDag-Erling Smørgrav *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; 8253f61ef7f6SDag-Erling Smørgrav *-*-sysv4*uw2*) add_dir=-L$dir ;; 8254b7579f77SDag-Erling Smørgrav *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 8255f61ef7f6SDag-Erling Smørgrav *-*-unixware7*) add_dir=-L$dir ;; 8256b7579f77SDag-Erling Smørgrav *-*-darwin* ) 8257b7579f77SDag-Erling Smørgrav # if the lib is a (non-dlopened) module then we cannot 8258b7579f77SDag-Erling Smørgrav # link against it, someone is ignoring the earlier warnings 8259b7579f77SDag-Erling Smørgrav if /usr/bin/file -L $add 2> /dev/null | 8260b7579f77SDag-Erling Smørgrav $GREP ": [^:]* bundle" >/dev/null; then 8261b7579f77SDag-Erling Smørgrav if test "X$dlopenmodule" != "X$lib"; then 8262b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: lib $linklib is a module, not a shared library" 8263b7579f77SDag-Erling Smørgrav if test -z "$old_library"; then 8264b7579f77SDag-Erling Smørgrav echo 8265b7579f77SDag-Erling Smørgrav echo "*** And there doesn't seem to be a static archive available" 8266b7579f77SDag-Erling Smørgrav echo "*** The link will probably fail, sorry" 8267b7579f77SDag-Erling Smørgrav else 8268f61ef7f6SDag-Erling Smørgrav add=$dir/$old_library 8269b7579f77SDag-Erling Smørgrav fi 8270b7579f77SDag-Erling Smørgrav elif test -n "$old_library"; then 8271f61ef7f6SDag-Erling Smørgrav add=$dir/$old_library 8272b7579f77SDag-Erling Smørgrav fi 8273b7579f77SDag-Erling Smørgrav fi 8274b7579f77SDag-Erling Smørgrav esac 8275f61ef7f6SDag-Erling Smørgrav elif test no = "$hardcode_minus_L"; then 8276b7579f77SDag-Erling Smørgrav case $host in 8277f61ef7f6SDag-Erling Smørgrav *-*-sunos*) add_shlibpath=$dir ;; 8278b7579f77SDag-Erling Smørgrav esac 8279f61ef7f6SDag-Erling Smørgrav add_dir=-L$dir 8280f61ef7f6SDag-Erling Smørgrav add=-l$name 8281f61ef7f6SDag-Erling Smørgrav elif test no = "$hardcode_shlibpath_var"; then 8282f61ef7f6SDag-Erling Smørgrav add_shlibpath=$dir 8283f61ef7f6SDag-Erling Smørgrav add=-l$name 8284b7579f77SDag-Erling Smørgrav else 8285b7579f77SDag-Erling Smørgrav lib_linked=no 8286b7579f77SDag-Erling Smørgrav fi 8287b7579f77SDag-Erling Smørgrav ;; 8288b7579f77SDag-Erling Smørgrav relink) 8289f61ef7f6SDag-Erling Smørgrav if test yes = "$hardcode_direct" && 8290f61ef7f6SDag-Erling Smørgrav test no = "$hardcode_direct_absolute"; then 8291f61ef7f6SDag-Erling Smørgrav add=$dir/$linklib 8292f61ef7f6SDag-Erling Smørgrav elif test yes = "$hardcode_minus_L"; then 8293f61ef7f6SDag-Erling Smørgrav add_dir=-L$absdir 8294b7579f77SDag-Erling Smørgrav # Try looking first in the location we're being installed to. 8295b7579f77SDag-Erling Smørgrav if test -n "$inst_prefix_dir"; then 8296b7579f77SDag-Erling Smørgrav case $libdir in 8297b7579f77SDag-Erling Smørgrav [\\/]*) 8298b7579f77SDag-Erling Smørgrav func_append add_dir " -L$inst_prefix_dir$libdir" 8299b7579f77SDag-Erling Smørgrav ;; 8300b7579f77SDag-Erling Smørgrav esac 8301b7579f77SDag-Erling Smørgrav fi 8302f61ef7f6SDag-Erling Smørgrav add=-l$name 8303f61ef7f6SDag-Erling Smørgrav elif test yes = "$hardcode_shlibpath_var"; then 8304f61ef7f6SDag-Erling Smørgrav add_shlibpath=$dir 8305f61ef7f6SDag-Erling Smørgrav add=-l$name 8306b7579f77SDag-Erling Smørgrav else 8307b7579f77SDag-Erling Smørgrav lib_linked=no 8308b7579f77SDag-Erling Smørgrav fi 8309b7579f77SDag-Erling Smørgrav ;; 8310b7579f77SDag-Erling Smørgrav *) lib_linked=no ;; 8311b7579f77SDag-Erling Smørgrav esac 8312b7579f77SDag-Erling Smørgrav 8313f61ef7f6SDag-Erling Smørgrav if test yes != "$lib_linked"; then 8314b7579f77SDag-Erling Smørgrav func_fatal_configuration "unsupported hardcode properties" 8315b7579f77SDag-Erling Smørgrav fi 8316b7579f77SDag-Erling Smørgrav 8317b7579f77SDag-Erling Smørgrav if test -n "$add_shlibpath"; then 8318b7579f77SDag-Erling Smørgrav case :$compile_shlibpath: in 8319b7579f77SDag-Erling Smørgrav *":$add_shlibpath:"*) ;; 8320b7579f77SDag-Erling Smørgrav *) func_append compile_shlibpath "$add_shlibpath:" ;; 8321b7579f77SDag-Erling Smørgrav esac 8322b7579f77SDag-Erling Smørgrav fi 8323f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode"; then 8324b7579f77SDag-Erling Smørgrav test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 8325b7579f77SDag-Erling Smørgrav test -n "$add" && compile_deplibs="$add $compile_deplibs" 8326b7579f77SDag-Erling Smørgrav else 8327b7579f77SDag-Erling Smørgrav test -n "$add_dir" && deplibs="$add_dir $deplibs" 8328b7579f77SDag-Erling Smørgrav test -n "$add" && deplibs="$add $deplibs" 8329f61ef7f6SDag-Erling Smørgrav if test yes != "$hardcode_direct" && 8330f61ef7f6SDag-Erling Smørgrav test yes != "$hardcode_minus_L" && 8331f61ef7f6SDag-Erling Smørgrav test yes = "$hardcode_shlibpath_var"; then 8332b7579f77SDag-Erling Smørgrav case :$finalize_shlibpath: in 8333b7579f77SDag-Erling Smørgrav *":$libdir:"*) ;; 8334b7579f77SDag-Erling Smørgrav *) func_append finalize_shlibpath "$libdir:" ;; 8335b7579f77SDag-Erling Smørgrav esac 8336b7579f77SDag-Erling Smørgrav fi 8337b7579f77SDag-Erling Smørgrav fi 8338b7579f77SDag-Erling Smørgrav fi 8339b7579f77SDag-Erling Smørgrav 8340f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode" || test relink = "$opt_mode"; then 8341b7579f77SDag-Erling Smørgrav add_shlibpath= 8342b7579f77SDag-Erling Smørgrav add_dir= 8343b7579f77SDag-Erling Smørgrav add= 8344b7579f77SDag-Erling Smørgrav # Finalize command for both is simple: just hardcode it. 8345f61ef7f6SDag-Erling Smørgrav if test yes = "$hardcode_direct" && 8346f61ef7f6SDag-Erling Smørgrav test no = "$hardcode_direct_absolute"; then 8347f61ef7f6SDag-Erling Smørgrav add=$libdir/$linklib 8348f61ef7f6SDag-Erling Smørgrav elif test yes = "$hardcode_minus_L"; then 8349f61ef7f6SDag-Erling Smørgrav add_dir=-L$libdir 8350f61ef7f6SDag-Erling Smørgrav add=-l$name 8351f61ef7f6SDag-Erling Smørgrav elif test yes = "$hardcode_shlibpath_var"; then 8352b7579f77SDag-Erling Smørgrav case :$finalize_shlibpath: in 8353b7579f77SDag-Erling Smørgrav *":$libdir:"*) ;; 8354b7579f77SDag-Erling Smørgrav *) func_append finalize_shlibpath "$libdir:" ;; 8355b7579f77SDag-Erling Smørgrav esac 8356f61ef7f6SDag-Erling Smørgrav add=-l$name 8357f61ef7f6SDag-Erling Smørgrav elif test yes = "$hardcode_automatic"; then 8358b7579f77SDag-Erling Smørgrav if test -n "$inst_prefix_dir" && 8359b7579f77SDag-Erling Smørgrav test -f "$inst_prefix_dir$libdir/$linklib"; then 8360f61ef7f6SDag-Erling Smørgrav add=$inst_prefix_dir$libdir/$linklib 8361b7579f77SDag-Erling Smørgrav else 8362f61ef7f6SDag-Erling Smørgrav add=$libdir/$linklib 8363b7579f77SDag-Erling Smørgrav fi 8364b7579f77SDag-Erling Smørgrav else 8365b7579f77SDag-Erling Smørgrav # We cannot seem to hardcode it, guess we'll fake it. 8366f61ef7f6SDag-Erling Smørgrav add_dir=-L$libdir 8367b7579f77SDag-Erling Smørgrav # Try looking first in the location we're being installed to. 8368b7579f77SDag-Erling Smørgrav if test -n "$inst_prefix_dir"; then 8369b7579f77SDag-Erling Smørgrav case $libdir in 8370b7579f77SDag-Erling Smørgrav [\\/]*) 8371b7579f77SDag-Erling Smørgrav func_append add_dir " -L$inst_prefix_dir$libdir" 8372b7579f77SDag-Erling Smørgrav ;; 8373b7579f77SDag-Erling Smørgrav esac 8374b7579f77SDag-Erling Smørgrav fi 8375f61ef7f6SDag-Erling Smørgrav add=-l$name 8376b7579f77SDag-Erling Smørgrav fi 8377b7579f77SDag-Erling Smørgrav 8378f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode"; then 8379b7579f77SDag-Erling Smørgrav test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 8380b7579f77SDag-Erling Smørgrav test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 8381b7579f77SDag-Erling Smørgrav else 8382b7579f77SDag-Erling Smørgrav test -n "$add_dir" && deplibs="$add_dir $deplibs" 8383b7579f77SDag-Erling Smørgrav test -n "$add" && deplibs="$add $deplibs" 8384b7579f77SDag-Erling Smørgrav fi 8385b7579f77SDag-Erling Smørgrav fi 8386f61ef7f6SDag-Erling Smørgrav elif test prog = "$linkmode"; then 8387b7579f77SDag-Erling Smørgrav # Here we assume that one of hardcode_direct or hardcode_minus_L 8388b7579f77SDag-Erling Smørgrav # is not unsupported. This is valid on all known static and 8389b7579f77SDag-Erling Smørgrav # shared platforms. 8390f61ef7f6SDag-Erling Smørgrav if test unsupported != "$hardcode_direct"; then 8391f61ef7f6SDag-Erling Smørgrav test -n "$old_library" && linklib=$old_library 8392b7579f77SDag-Erling Smørgrav compile_deplibs="$dir/$linklib $compile_deplibs" 8393b7579f77SDag-Erling Smørgrav finalize_deplibs="$dir/$linklib $finalize_deplibs" 8394b7579f77SDag-Erling Smørgrav else 8395b7579f77SDag-Erling Smørgrav compile_deplibs="-l$name -L$dir $compile_deplibs" 8396b7579f77SDag-Erling Smørgrav finalize_deplibs="-l$name -L$dir $finalize_deplibs" 8397b7579f77SDag-Erling Smørgrav fi 8398f61ef7f6SDag-Erling Smørgrav elif test yes = "$build_libtool_libs"; then 8399b7579f77SDag-Erling Smørgrav # Not a shared library 8400f61ef7f6SDag-Erling Smørgrav if test pass_all != "$deplibs_check_method"; then 8401b7579f77SDag-Erling Smørgrav # We're trying link a shared library against a static one 8402b7579f77SDag-Erling Smørgrav # but the system doesn't support it. 8403b7579f77SDag-Erling Smørgrav 8404b7579f77SDag-Erling Smørgrav # Just print a warning and add the library to dependency_libs so 8405b7579f77SDag-Erling Smørgrav # that the program can be linked against the static library. 8406b7579f77SDag-Erling Smørgrav echo 8407b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: This system cannot link to static lib archive $lib." 8408b7579f77SDag-Erling Smørgrav echo "*** I have the capability to make that library automatically link in when" 8409b7579f77SDag-Erling Smørgrav echo "*** you link to this library. But I can only do this if you have a" 8410b7579f77SDag-Erling Smørgrav echo "*** shared version of the library, which you do not appear to have." 8411f61ef7f6SDag-Erling Smørgrav if test yes = "$module"; then 8412b7579f77SDag-Erling Smørgrav echo "*** But as you try to build a module library, libtool will still create " 8413b7579f77SDag-Erling Smørgrav echo "*** a static module, that should work as long as the dlopening application" 8414b7579f77SDag-Erling Smørgrav echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 8415b7579f77SDag-Erling Smørgrav if test -z "$global_symbol_pipe"; then 8416b7579f77SDag-Erling Smørgrav echo 8417b7579f77SDag-Erling Smørgrav echo "*** However, this would only work if libtool was able to extract symbol" 8418f61ef7f6SDag-Erling Smørgrav echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 8419b7579f77SDag-Erling Smørgrav echo "*** not find such a program. So, this module is probably useless." 8420f61ef7f6SDag-Erling Smørgrav echo "*** 'nm' from GNU binutils and a full rebuild may help." 8421b7579f77SDag-Erling Smørgrav fi 8422f61ef7f6SDag-Erling Smørgrav if test no = "$build_old_libs"; then 8423b7579f77SDag-Erling Smørgrav build_libtool_libs=module 8424b7579f77SDag-Erling Smørgrav build_old_libs=yes 8425b7579f77SDag-Erling Smørgrav else 8426b7579f77SDag-Erling Smørgrav build_libtool_libs=no 8427b7579f77SDag-Erling Smørgrav fi 8428b7579f77SDag-Erling Smørgrav fi 8429b7579f77SDag-Erling Smørgrav else 8430b7579f77SDag-Erling Smørgrav deplibs="$dir/$old_library $deplibs" 8431b7579f77SDag-Erling Smørgrav link_static=yes 8432b7579f77SDag-Erling Smørgrav fi 8433b7579f77SDag-Erling Smørgrav fi # link shared/static library? 8434b7579f77SDag-Erling Smørgrav 8435f61ef7f6SDag-Erling Smørgrav if test lib = "$linkmode"; then 8436b7579f77SDag-Erling Smørgrav if test -n "$dependency_libs" && 8437f61ef7f6SDag-Erling Smørgrav { test yes != "$hardcode_into_libs" || 8438f61ef7f6SDag-Erling Smørgrav test yes = "$build_old_libs" || 8439f61ef7f6SDag-Erling Smørgrav test yes = "$link_static"; }; then 8440b7579f77SDag-Erling Smørgrav # Extract -R from dependency_libs 8441b7579f77SDag-Erling Smørgrav temp_deplibs= 8442b7579f77SDag-Erling Smørgrav for libdir in $dependency_libs; do 8443b7579f77SDag-Erling Smørgrav case $libdir in 8444b7579f77SDag-Erling Smørgrav -R*) func_stripname '-R' '' "$libdir" 8445b7579f77SDag-Erling Smørgrav temp_xrpath=$func_stripname_result 8446b7579f77SDag-Erling Smørgrav case " $xrpath " in 8447b7579f77SDag-Erling Smørgrav *" $temp_xrpath "*) ;; 8448b7579f77SDag-Erling Smørgrav *) func_append xrpath " $temp_xrpath";; 8449b7579f77SDag-Erling Smørgrav esac;; 8450b7579f77SDag-Erling Smørgrav *) func_append temp_deplibs " $libdir";; 8451b7579f77SDag-Erling Smørgrav esac 8452b7579f77SDag-Erling Smørgrav done 8453f61ef7f6SDag-Erling Smørgrav dependency_libs=$temp_deplibs 8454b7579f77SDag-Erling Smørgrav fi 8455b7579f77SDag-Erling Smørgrav 8456b7579f77SDag-Erling Smørgrav func_append newlib_search_path " $absdir" 8457b7579f77SDag-Erling Smørgrav # Link against this library 8458f61ef7f6SDag-Erling Smørgrav test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 8459b7579f77SDag-Erling Smørgrav # ... and its dependency_libs 8460b7579f77SDag-Erling Smørgrav tmp_libs= 8461b7579f77SDag-Erling Smørgrav for deplib in $dependency_libs; do 8462b7579f77SDag-Erling Smørgrav newdependency_libs="$deplib $newdependency_libs" 8463b7579f77SDag-Erling Smørgrav case $deplib in 8464b7579f77SDag-Erling Smørgrav -L*) func_stripname '-L' '' "$deplib" 8465b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$func_stripname_result";; 8466b7579f77SDag-Erling Smørgrav *) func_resolve_sysroot "$deplib" ;; 8467b7579f77SDag-Erling Smørgrav esac 8468b7579f77SDag-Erling Smørgrav if $opt_preserve_dup_deps; then 8469b7579f77SDag-Erling Smørgrav case "$tmp_libs " in 8470b7579f77SDag-Erling Smørgrav *" $func_resolve_sysroot_result "*) 8471b7579f77SDag-Erling Smørgrav func_append specialdeplibs " $func_resolve_sysroot_result" ;; 8472b7579f77SDag-Erling Smørgrav esac 8473b7579f77SDag-Erling Smørgrav fi 8474b7579f77SDag-Erling Smørgrav func_append tmp_libs " $func_resolve_sysroot_result" 8475b7579f77SDag-Erling Smørgrav done 8476b7579f77SDag-Erling Smørgrav 8477f61ef7f6SDag-Erling Smørgrav if test no != "$link_all_deplibs"; then 8478b7579f77SDag-Erling Smørgrav # Add the search paths of all dependency libraries 8479b7579f77SDag-Erling Smørgrav for deplib in $dependency_libs; do 8480b7579f77SDag-Erling Smørgrav path= 8481b7579f77SDag-Erling Smørgrav case $deplib in 8482f61ef7f6SDag-Erling Smørgrav -L*) path=$deplib ;; 8483b7579f77SDag-Erling Smørgrav *.la) 8484b7579f77SDag-Erling Smørgrav func_resolve_sysroot "$deplib" 8485b7579f77SDag-Erling Smørgrav deplib=$func_resolve_sysroot_result 8486b7579f77SDag-Erling Smørgrav func_dirname "$deplib" "" "." 8487b7579f77SDag-Erling Smørgrav dir=$func_dirname_result 8488b7579f77SDag-Erling Smørgrav # We need an absolute path. 8489b7579f77SDag-Erling Smørgrav case $dir in 8490f61ef7f6SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; 8491b7579f77SDag-Erling Smørgrav *) 8492b7579f77SDag-Erling Smørgrav absdir=`cd "$dir" && pwd` 8493b7579f77SDag-Erling Smørgrav if test -z "$absdir"; then 8494f61ef7f6SDag-Erling Smørgrav func_warning "cannot determine absolute directory name of '$dir'" 8495f61ef7f6SDag-Erling Smørgrav absdir=$dir 8496b7579f77SDag-Erling Smørgrav fi 8497b7579f77SDag-Erling Smørgrav ;; 8498b7579f77SDag-Erling Smørgrav esac 8499b7579f77SDag-Erling Smørgrav if $GREP "^installed=no" $deplib > /dev/null; then 8500b7579f77SDag-Erling Smørgrav case $host in 8501b7579f77SDag-Erling Smørgrav *-*-darwin*) 8502b7579f77SDag-Erling Smørgrav depdepl= 8503f61ef7f6SDag-Erling Smørgrav eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 8504b7579f77SDag-Erling Smørgrav if test -n "$deplibrary_names"; then 8505b7579f77SDag-Erling Smørgrav for tmp in $deplibrary_names; do 8506b7579f77SDag-Erling Smørgrav depdepl=$tmp 8507b7579f77SDag-Erling Smørgrav done 8508b7579f77SDag-Erling Smørgrav if test -f "$absdir/$objdir/$depdepl"; then 8509f61ef7f6SDag-Erling Smørgrav depdepl=$absdir/$objdir/$depdepl 8510f61ef7f6SDag-Erling Smørgrav darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8511b7579f77SDag-Erling Smørgrav if test -z "$darwin_install_name"; then 8512f61ef7f6SDag-Erling Smørgrav darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 8513b7579f77SDag-Erling Smørgrav fi 8514f61ef7f6SDag-Erling Smørgrav func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" 8515f61ef7f6SDag-Erling Smørgrav func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" 8516b7579f77SDag-Erling Smørgrav path= 8517b7579f77SDag-Erling Smørgrav fi 8518b7579f77SDag-Erling Smørgrav fi 8519b7579f77SDag-Erling Smørgrav ;; 8520b7579f77SDag-Erling Smørgrav *) 8521f61ef7f6SDag-Erling Smørgrav path=-L$absdir/$objdir 8522b7579f77SDag-Erling Smørgrav ;; 8523b7579f77SDag-Erling Smørgrav esac 8524b7579f77SDag-Erling Smørgrav else 8525f61ef7f6SDag-Erling Smørgrav eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8526b7579f77SDag-Erling Smørgrav test -z "$libdir" && \ 8527f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$deplib' is not a valid libtool archive" 8528b7579f77SDag-Erling Smørgrav test "$absdir" != "$libdir" && \ 8529f61ef7f6SDag-Erling Smørgrav func_warning "'$deplib' seems to be moved" 8530b7579f77SDag-Erling Smørgrav 8531f61ef7f6SDag-Erling Smørgrav path=-L$absdir 8532b7579f77SDag-Erling Smørgrav fi 8533b7579f77SDag-Erling Smørgrav ;; 8534b7579f77SDag-Erling Smørgrav esac 8535b7579f77SDag-Erling Smørgrav case " $deplibs " in 8536b7579f77SDag-Erling Smørgrav *" $path "*) ;; 8537b7579f77SDag-Erling Smørgrav *) deplibs="$path $deplibs" ;; 8538b7579f77SDag-Erling Smørgrav esac 8539b7579f77SDag-Erling Smørgrav done 8540b7579f77SDag-Erling Smørgrav fi # link_all_deplibs != no 8541b7579f77SDag-Erling Smørgrav fi # linkmode = lib 8542b7579f77SDag-Erling Smørgrav done # for deplib in $libs 8543f61ef7f6SDag-Erling Smørgrav if test link = "$pass"; then 8544f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode"; then 8545b7579f77SDag-Erling Smørgrav compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 8546b7579f77SDag-Erling Smørgrav finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 8547b7579f77SDag-Erling Smørgrav else 8548b7579f77SDag-Erling Smørgrav compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8549b7579f77SDag-Erling Smørgrav fi 8550b7579f77SDag-Erling Smørgrav fi 8551f61ef7f6SDag-Erling Smørgrav dependency_libs=$newdependency_libs 8552f61ef7f6SDag-Erling Smørgrav if test dlpreopen = "$pass"; then 8553b7579f77SDag-Erling Smørgrav # Link the dlpreopened libraries before other libraries 8554b7579f77SDag-Erling Smørgrav for deplib in $save_deplibs; do 8555b7579f77SDag-Erling Smørgrav deplibs="$deplib $deplibs" 8556b7579f77SDag-Erling Smørgrav done 8557b7579f77SDag-Erling Smørgrav fi 8558f61ef7f6SDag-Erling Smørgrav if test dlopen != "$pass"; then 8559f61ef7f6SDag-Erling Smørgrav test conv = "$pass" || { 8560b7579f77SDag-Erling Smørgrav # Make sure lib_search_path contains only unique directories. 8561b7579f77SDag-Erling Smørgrav lib_search_path= 8562b7579f77SDag-Erling Smørgrav for dir in $newlib_search_path; do 8563b7579f77SDag-Erling Smørgrav case "$lib_search_path " in 8564b7579f77SDag-Erling Smørgrav *" $dir "*) ;; 8565b7579f77SDag-Erling Smørgrav *) func_append lib_search_path " $dir" ;; 8566b7579f77SDag-Erling Smørgrav esac 8567b7579f77SDag-Erling Smørgrav done 8568b7579f77SDag-Erling Smørgrav newlib_search_path= 8569f61ef7f6SDag-Erling Smørgrav } 8570b7579f77SDag-Erling Smørgrav 8571f61ef7f6SDag-Erling Smørgrav if test prog,link = "$linkmode,$pass"; then 8572b7579f77SDag-Erling Smørgrav vars="compile_deplibs finalize_deplibs" 8573f61ef7f6SDag-Erling Smørgrav else 8574f61ef7f6SDag-Erling Smørgrav vars=deplibs 8575b7579f77SDag-Erling Smørgrav fi 8576b7579f77SDag-Erling Smørgrav for var in $vars dependency_libs; do 8577b7579f77SDag-Erling Smørgrav # Add libraries to $var in reverse order 8578b7579f77SDag-Erling Smørgrav eval tmp_libs=\"\$$var\" 8579b7579f77SDag-Erling Smørgrav new_libs= 8580b7579f77SDag-Erling Smørgrav for deplib in $tmp_libs; do 8581b7579f77SDag-Erling Smørgrav # FIXME: Pedantically, this is the right thing to do, so 8582b7579f77SDag-Erling Smørgrav # that some nasty dependency loop isn't accidentally 8583b7579f77SDag-Erling Smørgrav # broken: 8584b7579f77SDag-Erling Smørgrav #new_libs="$deplib $new_libs" 8585b7579f77SDag-Erling Smørgrav # Pragmatically, this seems to cause very few problems in 8586b7579f77SDag-Erling Smørgrav # practice: 8587b7579f77SDag-Erling Smørgrav case $deplib in 8588b7579f77SDag-Erling Smørgrav -L*) new_libs="$deplib $new_libs" ;; 8589b7579f77SDag-Erling Smørgrav -R*) ;; 8590b7579f77SDag-Erling Smørgrav *) 8591b7579f77SDag-Erling Smørgrav # And here is the reason: when a library appears more 8592b7579f77SDag-Erling Smørgrav # than once as an explicit dependence of a library, or 8593b7579f77SDag-Erling Smørgrav # is implicitly linked in more than once by the 8594b7579f77SDag-Erling Smørgrav # compiler, it is considered special, and multiple 8595b7579f77SDag-Erling Smørgrav # occurrences thereof are not removed. Compare this 8596b7579f77SDag-Erling Smørgrav # with having the same library being listed as a 8597b7579f77SDag-Erling Smørgrav # dependency of multiple other libraries: in this case, 8598b7579f77SDag-Erling Smørgrav # we know (pedantically, we assume) the library does not 8599b7579f77SDag-Erling Smørgrav # need to be listed more than once, so we keep only the 8600b7579f77SDag-Erling Smørgrav # last copy. This is not always right, but it is rare 8601b7579f77SDag-Erling Smørgrav # enough that we require users that really mean to play 8602b7579f77SDag-Erling Smørgrav # such unportable linking tricks to link the library 8603b7579f77SDag-Erling Smørgrav # using -Wl,-lname, so that libtool does not consider it 8604b7579f77SDag-Erling Smørgrav # for duplicate removal. 8605b7579f77SDag-Erling Smørgrav case " $specialdeplibs " in 8606b7579f77SDag-Erling Smørgrav *" $deplib "*) new_libs="$deplib $new_libs" ;; 8607b7579f77SDag-Erling Smørgrav *) 8608b7579f77SDag-Erling Smørgrav case " $new_libs " in 8609b7579f77SDag-Erling Smørgrav *" $deplib "*) ;; 8610b7579f77SDag-Erling Smørgrav *) new_libs="$deplib $new_libs" ;; 8611b7579f77SDag-Erling Smørgrav esac 8612b7579f77SDag-Erling Smørgrav ;; 8613b7579f77SDag-Erling Smørgrav esac 8614b7579f77SDag-Erling Smørgrav ;; 8615b7579f77SDag-Erling Smørgrav esac 8616b7579f77SDag-Erling Smørgrav done 8617b7579f77SDag-Erling Smørgrav tmp_libs= 8618b7579f77SDag-Erling Smørgrav for deplib in $new_libs; do 8619b7579f77SDag-Erling Smørgrav case $deplib in 8620b7579f77SDag-Erling Smørgrav -L*) 8621b7579f77SDag-Erling Smørgrav case " $tmp_libs " in 8622b7579f77SDag-Erling Smørgrav *" $deplib "*) ;; 8623b7579f77SDag-Erling Smørgrav *) func_append tmp_libs " $deplib" ;; 8624b7579f77SDag-Erling Smørgrav esac 8625b7579f77SDag-Erling Smørgrav ;; 8626b7579f77SDag-Erling Smørgrav *) func_append tmp_libs " $deplib" ;; 8627b7579f77SDag-Erling Smørgrav esac 8628b7579f77SDag-Erling Smørgrav done 8629b7579f77SDag-Erling Smørgrav eval $var=\"$tmp_libs\" 8630b7579f77SDag-Erling Smørgrav done # for var 8631b7579f77SDag-Erling Smørgrav fi 8632f61ef7f6SDag-Erling Smørgrav 8633f61ef7f6SDag-Erling Smørgrav # Add Sun CC postdeps if required: 8634f61ef7f6SDag-Erling Smørgrav test CXX = "$tagname" && { 8635f61ef7f6SDag-Erling Smørgrav case $host_os in 8636f61ef7f6SDag-Erling Smørgrav linux*) 8637*46d2f618SCy Schubert case `$CC -V 2>&1 | sed 5q` in 8638f61ef7f6SDag-Erling Smørgrav *Sun\ C*) # Sun C++ 5.9 8639f61ef7f6SDag-Erling Smørgrav func_suncc_cstd_abi 8640f61ef7f6SDag-Erling Smørgrav 8641f61ef7f6SDag-Erling Smørgrav if test no != "$suncc_use_cstd_abi"; then 8642f61ef7f6SDag-Erling Smørgrav func_append postdeps ' -library=Cstd -library=Crun' 8643f61ef7f6SDag-Erling Smørgrav fi 8644f61ef7f6SDag-Erling Smørgrav ;; 8645f61ef7f6SDag-Erling Smørgrav esac 8646f61ef7f6SDag-Erling Smørgrav ;; 8647f61ef7f6SDag-Erling Smørgrav 8648f61ef7f6SDag-Erling Smørgrav solaris*) 8649f61ef7f6SDag-Erling Smørgrav func_cc_basename "$CC" 8650f61ef7f6SDag-Erling Smørgrav case $func_cc_basename_result in 8651f61ef7f6SDag-Erling Smørgrav CC* | sunCC*) 8652f61ef7f6SDag-Erling Smørgrav func_suncc_cstd_abi 8653f61ef7f6SDag-Erling Smørgrav 8654f61ef7f6SDag-Erling Smørgrav if test no != "$suncc_use_cstd_abi"; then 8655f61ef7f6SDag-Erling Smørgrav func_append postdeps ' -library=Cstd -library=Crun' 8656f61ef7f6SDag-Erling Smørgrav fi 8657f61ef7f6SDag-Erling Smørgrav ;; 8658f61ef7f6SDag-Erling Smørgrav esac 8659f61ef7f6SDag-Erling Smørgrav ;; 8660f61ef7f6SDag-Erling Smørgrav esac 8661f61ef7f6SDag-Erling Smørgrav } 8662f61ef7f6SDag-Erling Smørgrav 8663b7579f77SDag-Erling Smørgrav # Last step: remove runtime libs from dependency_libs 8664b7579f77SDag-Erling Smørgrav # (they stay in deplibs) 8665b7579f77SDag-Erling Smørgrav tmp_libs= 8666b7579f77SDag-Erling Smørgrav for i in $dependency_libs; do 8667b7579f77SDag-Erling Smørgrav case " $predeps $postdeps $compiler_lib_search_path " in 8668b7579f77SDag-Erling Smørgrav *" $i "*) 8669f61ef7f6SDag-Erling Smørgrav i= 8670b7579f77SDag-Erling Smørgrav ;; 8671b7579f77SDag-Erling Smørgrav esac 8672b7579f77SDag-Erling Smørgrav if test -n "$i"; then 8673b7579f77SDag-Erling Smørgrav func_append tmp_libs " $i" 8674b7579f77SDag-Erling Smørgrav fi 8675b7579f77SDag-Erling Smørgrav done 8676b7579f77SDag-Erling Smørgrav dependency_libs=$tmp_libs 8677b7579f77SDag-Erling Smørgrav done # for pass 8678f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode"; then 8679f61ef7f6SDag-Erling Smørgrav dlfiles=$newdlfiles 8680b7579f77SDag-Erling Smørgrav fi 8681f61ef7f6SDag-Erling Smørgrav if test prog = "$linkmode" || test lib = "$linkmode"; then 8682f61ef7f6SDag-Erling Smørgrav dlprefiles=$newdlprefiles 8683b7579f77SDag-Erling Smørgrav fi 8684b7579f77SDag-Erling Smørgrav 8685b7579f77SDag-Erling Smørgrav case $linkmode in 8686b7579f77SDag-Erling Smørgrav oldlib) 8687f61ef7f6SDag-Erling Smørgrav if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 8688f61ef7f6SDag-Erling Smørgrav func_warning "'-dlopen' is ignored for archives" 8689b7579f77SDag-Erling Smørgrav fi 8690b7579f77SDag-Erling Smørgrav 8691b7579f77SDag-Erling Smørgrav case " $deplibs" in 8692b7579f77SDag-Erling Smørgrav *\ -l* | *\ -L*) 8693f61ef7f6SDag-Erling Smørgrav func_warning "'-l' and '-L' are ignored for archives" ;; 8694b7579f77SDag-Erling Smørgrav esac 8695b7579f77SDag-Erling Smørgrav 8696b7579f77SDag-Erling Smørgrav test -n "$rpath" && \ 8697f61ef7f6SDag-Erling Smørgrav func_warning "'-rpath' is ignored for archives" 8698b7579f77SDag-Erling Smørgrav 8699b7579f77SDag-Erling Smørgrav test -n "$xrpath" && \ 8700f61ef7f6SDag-Erling Smørgrav func_warning "'-R' is ignored for archives" 8701b7579f77SDag-Erling Smørgrav 8702b7579f77SDag-Erling Smørgrav test -n "$vinfo" && \ 8703f61ef7f6SDag-Erling Smørgrav func_warning "'-version-info/-version-number' is ignored for archives" 8704b7579f77SDag-Erling Smørgrav 8705b7579f77SDag-Erling Smørgrav test -n "$release" && \ 8706f61ef7f6SDag-Erling Smørgrav func_warning "'-release' is ignored for archives" 8707b7579f77SDag-Erling Smørgrav 8708b7579f77SDag-Erling Smørgrav test -n "$export_symbols$export_symbols_regex" && \ 8709f61ef7f6SDag-Erling Smørgrav func_warning "'-export-symbols' is ignored for archives" 8710b7579f77SDag-Erling Smørgrav 8711b7579f77SDag-Erling Smørgrav # Now set the variables for building old libraries. 8712b7579f77SDag-Erling Smørgrav build_libtool_libs=no 8713f61ef7f6SDag-Erling Smørgrav oldlibs=$output 8714b7579f77SDag-Erling Smørgrav func_append objs "$old_deplibs" 8715b7579f77SDag-Erling Smørgrav ;; 8716b7579f77SDag-Erling Smørgrav 8717b7579f77SDag-Erling Smørgrav lib) 8718f61ef7f6SDag-Erling Smørgrav # Make sure we only generate libraries of the form 'libNAME.la'. 8719b7579f77SDag-Erling Smørgrav case $outputname in 8720b7579f77SDag-Erling Smørgrav lib*) 8721b7579f77SDag-Erling Smørgrav func_stripname 'lib' '.la' "$outputname" 8722b7579f77SDag-Erling Smørgrav name=$func_stripname_result 8723b7579f77SDag-Erling Smørgrav eval shared_ext=\"$shrext_cmds\" 8724b7579f77SDag-Erling Smørgrav eval libname=\"$libname_spec\" 8725b7579f77SDag-Erling Smørgrav ;; 8726b7579f77SDag-Erling Smørgrav *) 8727f61ef7f6SDag-Erling Smørgrav test no = "$module" \ 8728f61ef7f6SDag-Erling Smørgrav && func_fatal_help "libtool library '$output' must begin with 'lib'" 8729b7579f77SDag-Erling Smørgrav 8730f61ef7f6SDag-Erling Smørgrav if test no != "$need_lib_prefix"; then 8731b7579f77SDag-Erling Smørgrav # Add the "lib" prefix for modules if required 8732b7579f77SDag-Erling Smørgrav func_stripname '' '.la' "$outputname" 8733b7579f77SDag-Erling Smørgrav name=$func_stripname_result 8734b7579f77SDag-Erling Smørgrav eval shared_ext=\"$shrext_cmds\" 8735b7579f77SDag-Erling Smørgrav eval libname=\"$libname_spec\" 8736b7579f77SDag-Erling Smørgrav else 8737b7579f77SDag-Erling Smørgrav func_stripname '' '.la' "$outputname" 8738b7579f77SDag-Erling Smørgrav libname=$func_stripname_result 8739b7579f77SDag-Erling Smørgrav fi 8740b7579f77SDag-Erling Smørgrav ;; 8741b7579f77SDag-Erling Smørgrav esac 8742b7579f77SDag-Erling Smørgrav 8743b7579f77SDag-Erling Smørgrav if test -n "$objs"; then 8744f61ef7f6SDag-Erling Smørgrav if test pass_all != "$deplibs_check_method"; then 8745f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" 8746b7579f77SDag-Erling Smørgrav else 8747b7579f77SDag-Erling Smørgrav echo 8748b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 8749b7579f77SDag-Erling Smørgrav $ECHO "*** objects $objs is not portable!" 8750b7579f77SDag-Erling Smørgrav func_append libobjs " $objs" 8751b7579f77SDag-Erling Smørgrav fi 8752b7579f77SDag-Erling Smørgrav fi 8753b7579f77SDag-Erling Smørgrav 8754f61ef7f6SDag-Erling Smørgrav test no = "$dlself" \ 8755f61ef7f6SDag-Erling Smørgrav || func_warning "'-dlopen self' is ignored for libtool libraries" 8756b7579f77SDag-Erling Smørgrav 8757b7579f77SDag-Erling Smørgrav set dummy $rpath 8758b7579f77SDag-Erling Smørgrav shift 8759f61ef7f6SDag-Erling Smørgrav test 1 -lt "$#" \ 8760f61ef7f6SDag-Erling Smørgrav && func_warning "ignoring multiple '-rpath's for a libtool library" 8761b7579f77SDag-Erling Smørgrav 8762f61ef7f6SDag-Erling Smørgrav install_libdir=$1 8763b7579f77SDag-Erling Smørgrav 8764b7579f77SDag-Erling Smørgrav oldlibs= 8765b7579f77SDag-Erling Smørgrav if test -z "$rpath"; then 8766f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs"; then 8767b7579f77SDag-Erling Smørgrav # Building a libtool convenience library. 8768f61ef7f6SDag-Erling Smørgrav # Some compilers have problems with a '.al' extension so 8769b7579f77SDag-Erling Smørgrav # convenience libraries should have the same extension an 8770b7579f77SDag-Erling Smørgrav # archive normally would. 8771b7579f77SDag-Erling Smørgrav oldlibs="$output_objdir/$libname.$libext $oldlibs" 8772b7579f77SDag-Erling Smørgrav build_libtool_libs=convenience 8773b7579f77SDag-Erling Smørgrav build_old_libs=yes 8774b7579f77SDag-Erling Smørgrav fi 8775b7579f77SDag-Erling Smørgrav 8776b7579f77SDag-Erling Smørgrav test -n "$vinfo" && \ 8777f61ef7f6SDag-Erling Smørgrav func_warning "'-version-info/-version-number' is ignored for convenience libraries" 8778b7579f77SDag-Erling Smørgrav 8779b7579f77SDag-Erling Smørgrav test -n "$release" && \ 8780f61ef7f6SDag-Erling Smørgrav func_warning "'-release' is ignored for convenience libraries" 8781b7579f77SDag-Erling Smørgrav else 8782b7579f77SDag-Erling Smørgrav 8783b7579f77SDag-Erling Smørgrav # Parse the version information argument. 8784f61ef7f6SDag-Erling Smørgrav save_ifs=$IFS; IFS=: 8785b7579f77SDag-Erling Smørgrav set dummy $vinfo 0 0 0 8786b7579f77SDag-Erling Smørgrav shift 8787f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 8788b7579f77SDag-Erling Smørgrav 8789b7579f77SDag-Erling Smørgrav test -n "$7" && \ 8790f61ef7f6SDag-Erling Smørgrav func_fatal_help "too many parameters to '-version-info'" 8791b7579f77SDag-Erling Smørgrav 8792b7579f77SDag-Erling Smørgrav # convert absolute version numbers to libtool ages 8793b7579f77SDag-Erling Smørgrav # this retains compatibility with .la files and attempts 8794b7579f77SDag-Erling Smørgrav # to make the code below a bit more comprehensible 8795b7579f77SDag-Erling Smørgrav 8796b7579f77SDag-Erling Smørgrav case $vinfo_number in 8797b7579f77SDag-Erling Smørgrav yes) 8798f61ef7f6SDag-Erling Smørgrav number_major=$1 8799f61ef7f6SDag-Erling Smørgrav number_minor=$2 8800f61ef7f6SDag-Erling Smørgrav number_revision=$3 8801b7579f77SDag-Erling Smørgrav # 8802b7579f77SDag-Erling Smørgrav # There are really only two kinds -- those that 8803b7579f77SDag-Erling Smørgrav # use the current revision as the major version 8804b7579f77SDag-Erling Smørgrav # and those that subtract age and use age as 8805b7579f77SDag-Erling Smørgrav # a minor version. But, then there is irix 8806f61ef7f6SDag-Erling Smørgrav # that has an extra 1 added just for fun 8807b7579f77SDag-Erling Smørgrav # 8808b7579f77SDag-Erling Smørgrav case $version_type in 88098ed2b524SDag-Erling Smørgrav # correct linux to gnu/linux during the next big refactor 8810*46d2f618SCy Schubert darwin|freebsd-elf|linux|osf|windows|none) 8811b7579f77SDag-Erling Smørgrav func_arith $number_major + $number_minor 8812b7579f77SDag-Erling Smørgrav current=$func_arith_result 8813f61ef7f6SDag-Erling Smørgrav age=$number_minor 8814f61ef7f6SDag-Erling Smørgrav revision=$number_revision 8815b7579f77SDag-Erling Smørgrav ;; 8816f61ef7f6SDag-Erling Smørgrav freebsd-aout|qnx|sunos) 8817f61ef7f6SDag-Erling Smørgrav current=$number_major 8818f61ef7f6SDag-Erling Smørgrav revision=$number_minor 8819f61ef7f6SDag-Erling Smørgrav age=0 8820b7579f77SDag-Erling Smørgrav ;; 8821b7579f77SDag-Erling Smørgrav irix|nonstopux) 8822b7579f77SDag-Erling Smørgrav func_arith $number_major + $number_minor 8823b7579f77SDag-Erling Smørgrav current=$func_arith_result 8824f61ef7f6SDag-Erling Smørgrav age=$number_minor 8825f61ef7f6SDag-Erling Smørgrav revision=$number_minor 8826b7579f77SDag-Erling Smørgrav lt_irix_increment=no 8827b7579f77SDag-Erling Smørgrav ;; 8828b7579f77SDag-Erling Smørgrav esac 8829b7579f77SDag-Erling Smørgrav ;; 8830b7579f77SDag-Erling Smørgrav no) 8831f61ef7f6SDag-Erling Smørgrav current=$1 8832f61ef7f6SDag-Erling Smørgrav revision=$2 8833f61ef7f6SDag-Erling Smørgrav age=$3 8834b7579f77SDag-Erling Smørgrav ;; 8835b7579f77SDag-Erling Smørgrav esac 8836b7579f77SDag-Erling Smørgrav 8837b7579f77SDag-Erling Smørgrav # Check that each of the things are valid numbers. 8838b7579f77SDag-Erling Smørgrav case $current in 8839b7579f77SDag-Erling Smørgrav 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]) ;; 8840b7579f77SDag-Erling Smørgrav *) 8841f61ef7f6SDag-Erling Smørgrav func_error "CURRENT '$current' must be a nonnegative integer" 8842f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$vinfo' is not valid version information" 8843b7579f77SDag-Erling Smørgrav ;; 8844b7579f77SDag-Erling Smørgrav esac 8845b7579f77SDag-Erling Smørgrav 8846b7579f77SDag-Erling Smørgrav case $revision in 8847b7579f77SDag-Erling Smørgrav 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]) ;; 8848b7579f77SDag-Erling Smørgrav *) 8849f61ef7f6SDag-Erling Smørgrav func_error "REVISION '$revision' must be a nonnegative integer" 8850f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$vinfo' is not valid version information" 8851b7579f77SDag-Erling Smørgrav ;; 8852b7579f77SDag-Erling Smørgrav esac 8853b7579f77SDag-Erling Smørgrav 8854b7579f77SDag-Erling Smørgrav case $age in 8855b7579f77SDag-Erling Smørgrav 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]) ;; 8856b7579f77SDag-Erling Smørgrav *) 8857f61ef7f6SDag-Erling Smørgrav func_error "AGE '$age' must be a nonnegative integer" 8858f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$vinfo' is not valid version information" 8859b7579f77SDag-Erling Smørgrav ;; 8860b7579f77SDag-Erling Smørgrav esac 8861b7579f77SDag-Erling Smørgrav 8862b7579f77SDag-Erling Smørgrav if test "$age" -gt "$current"; then 8863f61ef7f6SDag-Erling Smørgrav func_error "AGE '$age' is greater than the current interface number '$current'" 8864f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$vinfo' is not valid version information" 8865b7579f77SDag-Erling Smørgrav fi 8866b7579f77SDag-Erling Smørgrav 8867b7579f77SDag-Erling Smørgrav # Calculate the version variables. 8868b7579f77SDag-Erling Smørgrav major= 8869b7579f77SDag-Erling Smørgrav versuffix= 8870b7579f77SDag-Erling Smørgrav verstring= 8871b7579f77SDag-Erling Smørgrav case $version_type in 8872b7579f77SDag-Erling Smørgrav none) ;; 8873b7579f77SDag-Erling Smørgrav 8874b7579f77SDag-Erling Smørgrav darwin) 8875b7579f77SDag-Erling Smørgrav # Like Linux, but with the current version available in 8876b7579f77SDag-Erling Smørgrav # verstring for coding it into the library header 8877b7579f77SDag-Erling Smørgrav func_arith $current - $age 8878b7579f77SDag-Erling Smørgrav major=.$func_arith_result 8879f61ef7f6SDag-Erling Smørgrav versuffix=$major.$age.$revision 8880b7579f77SDag-Erling Smørgrav # Darwin ld doesn't like 0 for these options... 8881b7579f77SDag-Erling Smørgrav func_arith $current + 1 8882b7579f77SDag-Erling Smørgrav minor_current=$func_arith_result 8883f61ef7f6SDag-Erling Smørgrav xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8884b7579f77SDag-Erling Smørgrav verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8885f61ef7f6SDag-Erling Smørgrav # On Darwin other compilers 8886f61ef7f6SDag-Erling Smørgrav case $CC in 8887f61ef7f6SDag-Erling Smørgrav nagfor*) 8888f61ef7f6SDag-Erling Smørgrav verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" 8889f61ef7f6SDag-Erling Smørgrav ;; 8890f61ef7f6SDag-Erling Smørgrav *) 8891f61ef7f6SDag-Erling Smørgrav verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 8892f61ef7f6SDag-Erling Smørgrav ;; 8893f61ef7f6SDag-Erling Smørgrav esac 8894b7579f77SDag-Erling Smørgrav ;; 8895b7579f77SDag-Erling Smørgrav 8896b7579f77SDag-Erling Smørgrav freebsd-aout) 8897f61ef7f6SDag-Erling Smørgrav major=.$current 8898f61ef7f6SDag-Erling Smørgrav versuffix=.$current.$revision 8899b7579f77SDag-Erling Smørgrav ;; 8900b7579f77SDag-Erling Smørgrav 8901*46d2f618SCy Schubert freebsd-elf) 8902f61ef7f6SDag-Erling Smørgrav func_arith $current - $age 8903f61ef7f6SDag-Erling Smørgrav major=.$func_arith_result 8904f61ef7f6SDag-Erling Smørgrav versuffix=$major.$age.$revision 8905b7579f77SDag-Erling Smørgrav ;; 8906b7579f77SDag-Erling Smørgrav 8907b7579f77SDag-Erling Smørgrav irix | nonstopux) 8908f61ef7f6SDag-Erling Smørgrav if test no = "$lt_irix_increment"; then 8909b7579f77SDag-Erling Smørgrav func_arith $current - $age 8910b7579f77SDag-Erling Smørgrav else 8911b7579f77SDag-Erling Smørgrav func_arith $current - $age + 1 8912b7579f77SDag-Erling Smørgrav fi 8913b7579f77SDag-Erling Smørgrav major=$func_arith_result 8914b7579f77SDag-Erling Smørgrav 8915b7579f77SDag-Erling Smørgrav case $version_type in 8916b7579f77SDag-Erling Smørgrav nonstopux) verstring_prefix=nonstopux ;; 8917b7579f77SDag-Erling Smørgrav *) verstring_prefix=sgi ;; 8918b7579f77SDag-Erling Smørgrav esac 8919f61ef7f6SDag-Erling Smørgrav verstring=$verstring_prefix$major.$revision 8920b7579f77SDag-Erling Smørgrav 8921b7579f77SDag-Erling Smørgrav # Add in all the interfaces that we are compatible with. 8922b7579f77SDag-Erling Smørgrav loop=$revision 8923f61ef7f6SDag-Erling Smørgrav while test 0 -ne "$loop"; do 8924b7579f77SDag-Erling Smørgrav func_arith $revision - $loop 8925b7579f77SDag-Erling Smørgrav iface=$func_arith_result 8926b7579f77SDag-Erling Smørgrav func_arith $loop - 1 8927b7579f77SDag-Erling Smørgrav loop=$func_arith_result 8928f61ef7f6SDag-Erling Smørgrav verstring=$verstring_prefix$major.$iface:$verstring 8929b7579f77SDag-Erling Smørgrav done 8930b7579f77SDag-Erling Smørgrav 8931f61ef7f6SDag-Erling Smørgrav # Before this point, $major must not contain '.'. 8932b7579f77SDag-Erling Smørgrav major=.$major 8933f61ef7f6SDag-Erling Smørgrav versuffix=$major.$revision 8934b7579f77SDag-Erling Smørgrav ;; 8935b7579f77SDag-Erling Smørgrav 89368ed2b524SDag-Erling Smørgrav linux) # correct to gnu/linux during the next big refactor 8937b7579f77SDag-Erling Smørgrav func_arith $current - $age 8938b7579f77SDag-Erling Smørgrav major=.$func_arith_result 8939f61ef7f6SDag-Erling Smørgrav versuffix=$major.$age.$revision 8940b7579f77SDag-Erling Smørgrav ;; 8941b7579f77SDag-Erling Smørgrav 8942b7579f77SDag-Erling Smørgrav osf) 8943b7579f77SDag-Erling Smørgrav func_arith $current - $age 8944b7579f77SDag-Erling Smørgrav major=.$func_arith_result 8945f61ef7f6SDag-Erling Smørgrav versuffix=.$current.$age.$revision 8946f61ef7f6SDag-Erling Smørgrav verstring=$current.$age.$revision 8947b7579f77SDag-Erling Smørgrav 8948b7579f77SDag-Erling Smørgrav # Add in all the interfaces that we are compatible with. 8949b7579f77SDag-Erling Smørgrav loop=$age 8950f61ef7f6SDag-Erling Smørgrav while test 0 -ne "$loop"; do 8951b7579f77SDag-Erling Smørgrav func_arith $current - $loop 8952b7579f77SDag-Erling Smørgrav iface=$func_arith_result 8953b7579f77SDag-Erling Smørgrav func_arith $loop - 1 8954b7579f77SDag-Erling Smørgrav loop=$func_arith_result 8955f61ef7f6SDag-Erling Smørgrav verstring=$verstring:$iface.0 8956b7579f77SDag-Erling Smørgrav done 8957b7579f77SDag-Erling Smørgrav 8958b7579f77SDag-Erling Smørgrav # Make executables depend on our current version. 8959f61ef7f6SDag-Erling Smørgrav func_append verstring ":$current.0" 8960b7579f77SDag-Erling Smørgrav ;; 8961b7579f77SDag-Erling Smørgrav 8962b7579f77SDag-Erling Smørgrav qnx) 8963f61ef7f6SDag-Erling Smørgrav major=.$current 8964f61ef7f6SDag-Erling Smørgrav versuffix=.$current 8965f61ef7f6SDag-Erling Smørgrav ;; 8966f61ef7f6SDag-Erling Smørgrav 8967f61ef7f6SDag-Erling Smørgrav sco) 8968f61ef7f6SDag-Erling Smørgrav major=.$current 8969f61ef7f6SDag-Erling Smørgrav versuffix=.$current 8970b7579f77SDag-Erling Smørgrav ;; 8971b7579f77SDag-Erling Smørgrav 8972b7579f77SDag-Erling Smørgrav sunos) 8973f61ef7f6SDag-Erling Smørgrav major=.$current 8974f61ef7f6SDag-Erling Smørgrav versuffix=.$current.$revision 8975b7579f77SDag-Erling Smørgrav ;; 8976b7579f77SDag-Erling Smørgrav 8977b7579f77SDag-Erling Smørgrav windows) 8978b7579f77SDag-Erling Smørgrav # Use '-' rather than '.', since we only want one 8979b7579f77SDag-Erling Smørgrav # extension on DOS 8.3 file systems. 8980b7579f77SDag-Erling Smørgrav func_arith $current - $age 8981b7579f77SDag-Erling Smørgrav major=$func_arith_result 8982f61ef7f6SDag-Erling Smørgrav versuffix=-$major 8983b7579f77SDag-Erling Smørgrav ;; 8984b7579f77SDag-Erling Smørgrav 8985b7579f77SDag-Erling Smørgrav *) 8986f61ef7f6SDag-Erling Smørgrav func_fatal_configuration "unknown library version type '$version_type'" 8987b7579f77SDag-Erling Smørgrav ;; 8988b7579f77SDag-Erling Smørgrav esac 8989b7579f77SDag-Erling Smørgrav 8990b7579f77SDag-Erling Smørgrav # Clear the version info if we defaulted, and they specified a release. 8991b7579f77SDag-Erling Smørgrav if test -z "$vinfo" && test -n "$release"; then 8992b7579f77SDag-Erling Smørgrav major= 8993b7579f77SDag-Erling Smørgrav case $version_type in 8994b7579f77SDag-Erling Smørgrav darwin) 8995b7579f77SDag-Erling Smørgrav # we can't check for "0.0" in archive_cmds due to quoting 8996b7579f77SDag-Erling Smørgrav # problems, so we reset it completely 8997b7579f77SDag-Erling Smørgrav verstring= 8998b7579f77SDag-Erling Smørgrav ;; 8999b7579f77SDag-Erling Smørgrav *) 9000f61ef7f6SDag-Erling Smørgrav verstring=0.0 9001b7579f77SDag-Erling Smørgrav ;; 9002b7579f77SDag-Erling Smørgrav esac 9003f61ef7f6SDag-Erling Smørgrav if test no = "$need_version"; then 9004b7579f77SDag-Erling Smørgrav versuffix= 9005b7579f77SDag-Erling Smørgrav else 9006f61ef7f6SDag-Erling Smørgrav versuffix=.0.0 9007b7579f77SDag-Erling Smørgrav fi 9008b7579f77SDag-Erling Smørgrav fi 9009b7579f77SDag-Erling Smørgrav 9010b7579f77SDag-Erling Smørgrav # Remove version info from name if versioning should be avoided 9011f61ef7f6SDag-Erling Smørgrav if test yes,no = "$avoid_version,$need_version"; then 9012b7579f77SDag-Erling Smørgrav major= 9013b7579f77SDag-Erling Smørgrav versuffix= 9014f61ef7f6SDag-Erling Smørgrav verstring= 9015b7579f77SDag-Erling Smørgrav fi 9016b7579f77SDag-Erling Smørgrav 9017b7579f77SDag-Erling Smørgrav # Check to see if the archive will have undefined symbols. 9018f61ef7f6SDag-Erling Smørgrav if test yes = "$allow_undefined"; then 9019f61ef7f6SDag-Erling Smørgrav if test unsupported = "$allow_undefined_flag"; then 9020f61ef7f6SDag-Erling Smørgrav if test yes = "$build_old_libs"; then 9021f61ef7f6SDag-Erling Smørgrav func_warning "undefined symbols not allowed in $host shared libraries; building static only" 9022b7579f77SDag-Erling Smørgrav build_libtool_libs=no 9023f61ef7f6SDag-Erling Smørgrav else 9024f61ef7f6SDag-Erling Smørgrav func_fatal_error "can't build $host shared library unless -no-undefined is specified" 9025f61ef7f6SDag-Erling Smørgrav fi 9026b7579f77SDag-Erling Smørgrav fi 9027b7579f77SDag-Erling Smørgrav else 9028b7579f77SDag-Erling Smørgrav # Don't allow undefined symbols. 9029f61ef7f6SDag-Erling Smørgrav allow_undefined_flag=$no_undefined_flag 9030b7579f77SDag-Erling Smørgrav fi 9031b7579f77SDag-Erling Smørgrav 9032b7579f77SDag-Erling Smørgrav fi 9033b7579f77SDag-Erling Smørgrav 9034f61ef7f6SDag-Erling Smørgrav func_generate_dlsyms "$libname" "$libname" : 9035b7579f77SDag-Erling Smørgrav func_append libobjs " $symfileobj" 9036f61ef7f6SDag-Erling Smørgrav test " " = "$libobjs" && libobjs= 9037b7579f77SDag-Erling Smørgrav 9038f61ef7f6SDag-Erling Smørgrav if test relink != "$opt_mode"; then 9039b7579f77SDag-Erling Smørgrav # Remove our outputs, but don't remove object files since they 9040b7579f77SDag-Erling Smørgrav # may have been created when compiling PIC objects. 9041b7579f77SDag-Erling Smørgrav removelist= 9042b7579f77SDag-Erling Smørgrav tempremovelist=`$ECHO "$output_objdir/*"` 9043b7579f77SDag-Erling Smørgrav for p in $tempremovelist; do 9044b7579f77SDag-Erling Smørgrav case $p in 9045b7579f77SDag-Erling Smørgrav *.$objext | *.gcno) 9046b7579f77SDag-Erling Smørgrav ;; 9047f61ef7f6SDag-Erling Smørgrav $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) 9048f61ef7f6SDag-Erling Smørgrav if test -n "$precious_files_regex"; then 9049b7579f77SDag-Erling Smørgrav if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 9050b7579f77SDag-Erling Smørgrav then 9051b7579f77SDag-Erling Smørgrav continue 9052b7579f77SDag-Erling Smørgrav fi 9053b7579f77SDag-Erling Smørgrav fi 9054b7579f77SDag-Erling Smørgrav func_append removelist " $p" 9055b7579f77SDag-Erling Smørgrav ;; 9056b7579f77SDag-Erling Smørgrav *) ;; 9057b7579f77SDag-Erling Smørgrav esac 9058b7579f77SDag-Erling Smørgrav done 9059b7579f77SDag-Erling Smørgrav test -n "$removelist" && \ 9060b7579f77SDag-Erling Smørgrav func_show_eval "${RM}r \$removelist" 9061b7579f77SDag-Erling Smørgrav fi 9062b7579f77SDag-Erling Smørgrav 9063b7579f77SDag-Erling Smørgrav # Now set the variables for building old libraries. 9064f61ef7f6SDag-Erling Smørgrav if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then 9065b7579f77SDag-Erling Smørgrav func_append oldlibs " $output_objdir/$libname.$libext" 9066b7579f77SDag-Erling Smørgrav 9067b7579f77SDag-Erling Smørgrav # Transform .lo files to .o files. 9068f61ef7f6SDag-Erling Smørgrav oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` 9069b7579f77SDag-Erling Smørgrav fi 9070b7579f77SDag-Erling Smørgrav 9071b7579f77SDag-Erling Smørgrav # Eliminate all temporary directories. 9072b7579f77SDag-Erling Smørgrav #for path in $notinst_path; do 9073b7579f77SDag-Erling Smørgrav # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 9074b7579f77SDag-Erling Smørgrav # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 9075b7579f77SDag-Erling Smørgrav # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 9076b7579f77SDag-Erling Smørgrav #done 9077b7579f77SDag-Erling Smørgrav 9078b7579f77SDag-Erling Smørgrav if test -n "$xrpath"; then 9079b7579f77SDag-Erling Smørgrav # If the user specified any rpath flags, then add them. 9080b7579f77SDag-Erling Smørgrav temp_xrpath= 9081b7579f77SDag-Erling Smørgrav for libdir in $xrpath; do 9082b7579f77SDag-Erling Smørgrav func_replace_sysroot "$libdir" 9083b7579f77SDag-Erling Smørgrav func_append temp_xrpath " -R$func_replace_sysroot_result" 9084b7579f77SDag-Erling Smørgrav case "$finalize_rpath " in 9085b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 9086b7579f77SDag-Erling Smørgrav *) func_append finalize_rpath " $libdir" ;; 9087b7579f77SDag-Erling Smørgrav esac 9088b7579f77SDag-Erling Smørgrav done 9089f61ef7f6SDag-Erling Smørgrav if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then 9090b7579f77SDag-Erling Smørgrav dependency_libs="$temp_xrpath $dependency_libs" 9091b7579f77SDag-Erling Smørgrav fi 9092b7579f77SDag-Erling Smørgrav fi 9093b7579f77SDag-Erling Smørgrav 9094b7579f77SDag-Erling Smørgrav # Make sure dlfiles contains only unique files that won't be dlpreopened 9095f61ef7f6SDag-Erling Smørgrav old_dlfiles=$dlfiles 9096b7579f77SDag-Erling Smørgrav dlfiles= 9097b7579f77SDag-Erling Smørgrav for lib in $old_dlfiles; do 9098b7579f77SDag-Erling Smørgrav case " $dlprefiles $dlfiles " in 9099b7579f77SDag-Erling Smørgrav *" $lib "*) ;; 9100b7579f77SDag-Erling Smørgrav *) func_append dlfiles " $lib" ;; 9101b7579f77SDag-Erling Smørgrav esac 9102b7579f77SDag-Erling Smørgrav done 9103b7579f77SDag-Erling Smørgrav 9104b7579f77SDag-Erling Smørgrav # Make sure dlprefiles contains only unique files 9105f61ef7f6SDag-Erling Smørgrav old_dlprefiles=$dlprefiles 9106b7579f77SDag-Erling Smørgrav dlprefiles= 9107b7579f77SDag-Erling Smørgrav for lib in $old_dlprefiles; do 9108b7579f77SDag-Erling Smørgrav case "$dlprefiles " in 9109b7579f77SDag-Erling Smørgrav *" $lib "*) ;; 9110b7579f77SDag-Erling Smørgrav *) func_append dlprefiles " $lib" ;; 9111b7579f77SDag-Erling Smørgrav esac 9112b7579f77SDag-Erling Smørgrav done 9113b7579f77SDag-Erling Smørgrav 9114f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs"; then 9115b7579f77SDag-Erling Smørgrav if test -n "$rpath"; then 9116b7579f77SDag-Erling Smørgrav case $host in 9117b7579f77SDag-Erling Smørgrav *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 9118b7579f77SDag-Erling Smørgrav # these systems don't actually have a c library (as such)! 9119b7579f77SDag-Erling Smørgrav ;; 9120b7579f77SDag-Erling Smørgrav *-*-rhapsody* | *-*-darwin1.[012]) 9121b7579f77SDag-Erling Smørgrav # Rhapsody C library is in the System framework 9122b7579f77SDag-Erling Smørgrav func_append deplibs " System.ltframework" 9123b7579f77SDag-Erling Smørgrav ;; 9124b7579f77SDag-Erling Smørgrav *-*-netbsd*) 9125b7579f77SDag-Erling Smørgrav # Don't link with libc until the a.out ld.so is fixed. 9126b7579f77SDag-Erling Smørgrav ;; 9127*46d2f618SCy Schubert *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 9128b7579f77SDag-Erling Smørgrav # Do not include libc due to us having libc/libc_r. 9129b7579f77SDag-Erling Smørgrav ;; 9130b7579f77SDag-Erling Smørgrav *-*-sco3.2v5* | *-*-sco5v6*) 9131b7579f77SDag-Erling Smørgrav # Causes problems with __ctype 9132b7579f77SDag-Erling Smørgrav ;; 9133b7579f77SDag-Erling Smørgrav *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 9134b7579f77SDag-Erling Smørgrav # Compiler inserts libc in the correct place for threads to work 9135b7579f77SDag-Erling Smørgrav ;; 9136b7579f77SDag-Erling Smørgrav *) 9137b7579f77SDag-Erling Smørgrav # Add libc to deplibs on all other systems if necessary. 9138f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_need_lc"; then 9139b7579f77SDag-Erling Smørgrav func_append deplibs " -lc" 9140b7579f77SDag-Erling Smørgrav fi 9141b7579f77SDag-Erling Smørgrav ;; 9142b7579f77SDag-Erling Smørgrav esac 9143b7579f77SDag-Erling Smørgrav fi 9144b7579f77SDag-Erling Smørgrav 9145b7579f77SDag-Erling Smørgrav # Transform deplibs into only deplibs that can be linked in shared. 9146b7579f77SDag-Erling Smørgrav name_save=$name 9147b7579f77SDag-Erling Smørgrav libname_save=$libname 9148b7579f77SDag-Erling Smørgrav release_save=$release 9149b7579f77SDag-Erling Smørgrav versuffix_save=$versuffix 9150b7579f77SDag-Erling Smørgrav major_save=$major 9151b7579f77SDag-Erling Smørgrav # I'm not sure if I'm treating the release correctly. I think 9152b7579f77SDag-Erling Smørgrav # release should show up in the -l (ie -lgmp5) so we don't want to 9153b7579f77SDag-Erling Smørgrav # add it in twice. Is that correct? 9154f61ef7f6SDag-Erling Smørgrav release= 9155f61ef7f6SDag-Erling Smørgrav versuffix= 9156f61ef7f6SDag-Erling Smørgrav major= 9157b7579f77SDag-Erling Smørgrav newdeplibs= 9158b7579f77SDag-Erling Smørgrav droppeddeps=no 9159b7579f77SDag-Erling Smørgrav case $deplibs_check_method in 9160b7579f77SDag-Erling Smørgrav pass_all) 9161b7579f77SDag-Erling Smørgrav # Don't check for shared/static. Everything works. 9162b7579f77SDag-Erling Smørgrav # This might be a little naive. We might want to check 9163b7579f77SDag-Erling Smørgrav # whether the library exists or not. But this is on 9164b7579f77SDag-Erling Smørgrav # osf3 & osf4 and I'm not really sure... Just 9165b7579f77SDag-Erling Smørgrav # implementing what was already the behavior. 9166b7579f77SDag-Erling Smørgrav newdeplibs=$deplibs 9167b7579f77SDag-Erling Smørgrav ;; 9168b7579f77SDag-Erling Smørgrav test_compile) 9169b7579f77SDag-Erling Smørgrav # This code stresses the "libraries are programs" paradigm to its 9170b7579f77SDag-Erling Smørgrav # limits. Maybe even breaks it. We compile a program, linking it 9171b7579f77SDag-Erling Smørgrav # against the deplibs as a proxy for the library. Then we can check 9172b7579f77SDag-Erling Smørgrav # whether they linked in statically or dynamically with ldd. 9173b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM conftest.c 9174b7579f77SDag-Erling Smørgrav cat > conftest.c <<EOF 9175b7579f77SDag-Erling Smørgrav int main() { return 0; } 9176b7579f77SDag-Erling SmørgravEOF 9177b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM conftest 9178b7579f77SDag-Erling Smørgrav if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 9179b7579f77SDag-Erling Smørgrav ldd_output=`ldd conftest` 9180b7579f77SDag-Erling Smørgrav for i in $deplibs; do 9181b7579f77SDag-Erling Smørgrav case $i in 9182b7579f77SDag-Erling Smørgrav -l*) 9183b7579f77SDag-Erling Smørgrav func_stripname -l '' "$i" 9184b7579f77SDag-Erling Smørgrav name=$func_stripname_result 9185f61ef7f6SDag-Erling Smørgrav if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9186b7579f77SDag-Erling Smørgrav case " $predeps $postdeps " in 9187b7579f77SDag-Erling Smørgrav *" $i "*) 9188b7579f77SDag-Erling Smørgrav func_append newdeplibs " $i" 9189f61ef7f6SDag-Erling Smørgrav i= 9190b7579f77SDag-Erling Smørgrav ;; 9191b7579f77SDag-Erling Smørgrav esac 9192b7579f77SDag-Erling Smørgrav fi 9193b7579f77SDag-Erling Smørgrav if test -n "$i"; then 9194b7579f77SDag-Erling Smørgrav libname=`eval "\\$ECHO \"$libname_spec\""` 9195b7579f77SDag-Erling Smørgrav deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9196b7579f77SDag-Erling Smørgrav set dummy $deplib_matches; shift 9197b7579f77SDag-Erling Smørgrav deplib_match=$1 9198b7579f77SDag-Erling Smørgrav if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9199b7579f77SDag-Erling Smørgrav func_append newdeplibs " $i" 9200b7579f77SDag-Erling Smørgrav else 9201b7579f77SDag-Erling Smørgrav droppeddeps=yes 9202b7579f77SDag-Erling Smørgrav echo 9203b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9204b7579f77SDag-Erling Smørgrav echo "*** I have the capability to make that library automatically link in when" 9205b7579f77SDag-Erling Smørgrav echo "*** you link to this library. But I can only do this if you have a" 9206b7579f77SDag-Erling Smørgrav echo "*** shared version of the library, which I believe you do not have" 9207b7579f77SDag-Erling Smørgrav echo "*** because a test_compile did reveal that the linker did not use it for" 9208b7579f77SDag-Erling Smørgrav echo "*** its dynamic dependency list that programs get resolved with at runtime." 9209b7579f77SDag-Erling Smørgrav fi 9210b7579f77SDag-Erling Smørgrav fi 9211b7579f77SDag-Erling Smørgrav ;; 9212b7579f77SDag-Erling Smørgrav *) 9213b7579f77SDag-Erling Smørgrav func_append newdeplibs " $i" 9214b7579f77SDag-Erling Smørgrav ;; 9215b7579f77SDag-Erling Smørgrav esac 9216b7579f77SDag-Erling Smørgrav done 9217b7579f77SDag-Erling Smørgrav else 9218b7579f77SDag-Erling Smørgrav # Error occurred in the first compile. Let's try to salvage 9219b7579f77SDag-Erling Smørgrav # the situation: Compile a separate program for each library. 9220b7579f77SDag-Erling Smørgrav for i in $deplibs; do 9221b7579f77SDag-Erling Smørgrav case $i in 9222b7579f77SDag-Erling Smørgrav -l*) 9223b7579f77SDag-Erling Smørgrav func_stripname -l '' "$i" 9224b7579f77SDag-Erling Smørgrav name=$func_stripname_result 9225b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM conftest 9226b7579f77SDag-Erling Smørgrav if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 9227b7579f77SDag-Erling Smørgrav ldd_output=`ldd conftest` 9228f61ef7f6SDag-Erling Smørgrav if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9229b7579f77SDag-Erling Smørgrav case " $predeps $postdeps " in 9230b7579f77SDag-Erling Smørgrav *" $i "*) 9231b7579f77SDag-Erling Smørgrav func_append newdeplibs " $i" 9232f61ef7f6SDag-Erling Smørgrav i= 9233b7579f77SDag-Erling Smørgrav ;; 9234b7579f77SDag-Erling Smørgrav esac 9235b7579f77SDag-Erling Smørgrav fi 9236b7579f77SDag-Erling Smørgrav if test -n "$i"; then 9237b7579f77SDag-Erling Smørgrav libname=`eval "\\$ECHO \"$libname_spec\""` 9238b7579f77SDag-Erling Smørgrav deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 9239b7579f77SDag-Erling Smørgrav set dummy $deplib_matches; shift 9240b7579f77SDag-Erling Smørgrav deplib_match=$1 9241b7579f77SDag-Erling Smørgrav if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then 9242b7579f77SDag-Erling Smørgrav func_append newdeplibs " $i" 9243b7579f77SDag-Erling Smørgrav else 9244b7579f77SDag-Erling Smørgrav droppeddeps=yes 9245b7579f77SDag-Erling Smørgrav echo 9246b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: dynamic linker does not accept needed library $i." 9247b7579f77SDag-Erling Smørgrav echo "*** I have the capability to make that library automatically link in when" 9248b7579f77SDag-Erling Smørgrav echo "*** you link to this library. But I can only do this if you have a" 9249b7579f77SDag-Erling Smørgrav echo "*** shared version of the library, which you do not appear to have" 9250b7579f77SDag-Erling Smørgrav echo "*** because a test_compile did reveal that the linker did not use this one" 9251b7579f77SDag-Erling Smørgrav echo "*** as a dynamic dependency that programs can get resolved with at runtime." 9252b7579f77SDag-Erling Smørgrav fi 9253b7579f77SDag-Erling Smørgrav fi 9254b7579f77SDag-Erling Smørgrav else 9255b7579f77SDag-Erling Smørgrav droppeddeps=yes 9256b7579f77SDag-Erling Smørgrav echo 9257b7579f77SDag-Erling Smørgrav $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 9258b7579f77SDag-Erling Smørgrav echo "*** make it link in! You will probably need to install it or some" 9259b7579f77SDag-Erling Smørgrav echo "*** library that it depends on before this library will be fully" 9260b7579f77SDag-Erling Smørgrav echo "*** functional. Installing it before continuing would be even better." 9261b7579f77SDag-Erling Smørgrav fi 9262b7579f77SDag-Erling Smørgrav ;; 9263b7579f77SDag-Erling Smørgrav *) 9264b7579f77SDag-Erling Smørgrav func_append newdeplibs " $i" 9265b7579f77SDag-Erling Smørgrav ;; 9266b7579f77SDag-Erling Smørgrav esac 9267b7579f77SDag-Erling Smørgrav done 9268b7579f77SDag-Erling Smørgrav fi 9269b7579f77SDag-Erling Smørgrav ;; 9270b7579f77SDag-Erling Smørgrav file_magic*) 9271b7579f77SDag-Erling Smørgrav set dummy $deplibs_check_method; shift 9272b7579f77SDag-Erling Smørgrav file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9273b7579f77SDag-Erling Smørgrav for a_deplib in $deplibs; do 9274b7579f77SDag-Erling Smørgrav case $a_deplib in 9275b7579f77SDag-Erling Smørgrav -l*) 9276b7579f77SDag-Erling Smørgrav func_stripname -l '' "$a_deplib" 9277b7579f77SDag-Erling Smørgrav name=$func_stripname_result 9278f61ef7f6SDag-Erling Smørgrav if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9279b7579f77SDag-Erling Smørgrav case " $predeps $postdeps " in 9280b7579f77SDag-Erling Smørgrav *" $a_deplib "*) 9281b7579f77SDag-Erling Smørgrav func_append newdeplibs " $a_deplib" 9282f61ef7f6SDag-Erling Smørgrav a_deplib= 9283b7579f77SDag-Erling Smørgrav ;; 9284b7579f77SDag-Erling Smørgrav esac 9285b7579f77SDag-Erling Smørgrav fi 9286b7579f77SDag-Erling Smørgrav if test -n "$a_deplib"; then 9287b7579f77SDag-Erling Smørgrav libname=`eval "\\$ECHO \"$libname_spec\""` 9288b7579f77SDag-Erling Smørgrav if test -n "$file_magic_glob"; then 9289b7579f77SDag-Erling Smørgrav libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 9290b7579f77SDag-Erling Smørgrav else 9291b7579f77SDag-Erling Smørgrav libnameglob=$libname 9292b7579f77SDag-Erling Smørgrav fi 9293f61ef7f6SDag-Erling Smørgrav test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` 9294b7579f77SDag-Erling Smørgrav for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9295f61ef7f6SDag-Erling Smørgrav if test yes = "$want_nocaseglob"; then 9296b7579f77SDag-Erling Smørgrav shopt -s nocaseglob 9297b7579f77SDag-Erling Smørgrav potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9298b7579f77SDag-Erling Smørgrav $nocaseglob 9299b7579f77SDag-Erling Smørgrav else 9300b7579f77SDag-Erling Smørgrav potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 9301b7579f77SDag-Erling Smørgrav fi 9302b7579f77SDag-Erling Smørgrav for potent_lib in $potential_libs; do 9303b7579f77SDag-Erling Smørgrav # Follow soft links. 9304b7579f77SDag-Erling Smørgrav if ls -lLd "$potent_lib" 2>/dev/null | 9305b7579f77SDag-Erling Smørgrav $GREP " -> " >/dev/null; then 9306b7579f77SDag-Erling Smørgrav continue 9307b7579f77SDag-Erling Smørgrav fi 9308b7579f77SDag-Erling Smørgrav # The statement above tries to avoid entering an 9309b7579f77SDag-Erling Smørgrav # endless loop below, in case of cyclic links. 9310b7579f77SDag-Erling Smørgrav # We might still enter an endless loop, since a link 9311b7579f77SDag-Erling Smørgrav # loop can be closed while we follow links, 9312b7579f77SDag-Erling Smørgrav # but so what? 9313f61ef7f6SDag-Erling Smørgrav potlib=$potent_lib 9314b7579f77SDag-Erling Smørgrav while test -h "$potlib" 2>/dev/null; do 9315f61ef7f6SDag-Erling Smørgrav potliblink=`ls -ld $potlib | $SED 's/.* -> //'` 9316b7579f77SDag-Erling Smørgrav case $potliblink in 9317f61ef7f6SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; 9318f61ef7f6SDag-Erling Smørgrav *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; 9319b7579f77SDag-Erling Smørgrav esac 9320b7579f77SDag-Erling Smørgrav done 9321b7579f77SDag-Erling Smørgrav if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 9322b7579f77SDag-Erling Smørgrav $SED -e 10q | 9323b7579f77SDag-Erling Smørgrav $EGREP "$file_magic_regex" > /dev/null; then 9324b7579f77SDag-Erling Smørgrav func_append newdeplibs " $a_deplib" 9325f61ef7f6SDag-Erling Smørgrav a_deplib= 9326b7579f77SDag-Erling Smørgrav break 2 9327b7579f77SDag-Erling Smørgrav fi 9328b7579f77SDag-Erling Smørgrav done 9329b7579f77SDag-Erling Smørgrav done 9330b7579f77SDag-Erling Smørgrav fi 9331b7579f77SDag-Erling Smørgrav if test -n "$a_deplib"; then 9332b7579f77SDag-Erling Smørgrav droppeddeps=yes 9333b7579f77SDag-Erling Smørgrav echo 9334b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9335b7579f77SDag-Erling Smørgrav echo "*** I have the capability to make that library automatically link in when" 9336b7579f77SDag-Erling Smørgrav echo "*** you link to this library. But I can only do this if you have a" 9337b7579f77SDag-Erling Smørgrav echo "*** shared version of the library, which you do not appear to have" 9338b7579f77SDag-Erling Smørgrav echo "*** because I did check the linker path looking for a file starting" 9339b7579f77SDag-Erling Smørgrav if test -z "$potlib"; then 9340b7579f77SDag-Erling Smørgrav $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 9341b7579f77SDag-Erling Smørgrav else 9342b7579f77SDag-Erling Smørgrav $ECHO "*** with $libname and none of the candidates passed a file format test" 9343b7579f77SDag-Erling Smørgrav $ECHO "*** using a file magic. Last file checked: $potlib" 9344b7579f77SDag-Erling Smørgrav fi 9345b7579f77SDag-Erling Smørgrav fi 9346b7579f77SDag-Erling Smørgrav ;; 9347b7579f77SDag-Erling Smørgrav *) 9348b7579f77SDag-Erling Smørgrav # Add a -L argument. 9349b7579f77SDag-Erling Smørgrav func_append newdeplibs " $a_deplib" 9350b7579f77SDag-Erling Smørgrav ;; 9351b7579f77SDag-Erling Smørgrav esac 9352b7579f77SDag-Erling Smørgrav done # Gone through all deplibs. 9353b7579f77SDag-Erling Smørgrav ;; 9354b7579f77SDag-Erling Smørgrav match_pattern*) 9355b7579f77SDag-Erling Smørgrav set dummy $deplibs_check_method; shift 9356b7579f77SDag-Erling Smørgrav match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 9357b7579f77SDag-Erling Smørgrav for a_deplib in $deplibs; do 9358b7579f77SDag-Erling Smørgrav case $a_deplib in 9359b7579f77SDag-Erling Smørgrav -l*) 9360b7579f77SDag-Erling Smørgrav func_stripname -l '' "$a_deplib" 9361b7579f77SDag-Erling Smørgrav name=$func_stripname_result 9362f61ef7f6SDag-Erling Smørgrav if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9363b7579f77SDag-Erling Smørgrav case " $predeps $postdeps " in 9364b7579f77SDag-Erling Smørgrav *" $a_deplib "*) 9365b7579f77SDag-Erling Smørgrav func_append newdeplibs " $a_deplib" 9366f61ef7f6SDag-Erling Smørgrav a_deplib= 9367b7579f77SDag-Erling Smørgrav ;; 9368b7579f77SDag-Erling Smørgrav esac 9369b7579f77SDag-Erling Smørgrav fi 9370b7579f77SDag-Erling Smørgrav if test -n "$a_deplib"; then 9371b7579f77SDag-Erling Smørgrav libname=`eval "\\$ECHO \"$libname_spec\""` 9372b7579f77SDag-Erling Smørgrav for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 9373b7579f77SDag-Erling Smørgrav potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 9374b7579f77SDag-Erling Smørgrav for potent_lib in $potential_libs; do 9375f61ef7f6SDag-Erling Smørgrav potlib=$potent_lib # see symlink-check above in file_magic test 9376b7579f77SDag-Erling Smørgrav if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 9377b7579f77SDag-Erling Smørgrav $EGREP "$match_pattern_regex" > /dev/null; then 9378b7579f77SDag-Erling Smørgrav func_append newdeplibs " $a_deplib" 9379f61ef7f6SDag-Erling Smørgrav a_deplib= 9380b7579f77SDag-Erling Smørgrav break 2 9381b7579f77SDag-Erling Smørgrav fi 9382b7579f77SDag-Erling Smørgrav done 9383b7579f77SDag-Erling Smørgrav done 9384b7579f77SDag-Erling Smørgrav fi 9385b7579f77SDag-Erling Smørgrav if test -n "$a_deplib"; then 9386b7579f77SDag-Erling Smørgrav droppeddeps=yes 9387b7579f77SDag-Erling Smørgrav echo 9388b7579f77SDag-Erling Smørgrav $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 9389b7579f77SDag-Erling Smørgrav echo "*** I have the capability to make that library automatically link in when" 9390b7579f77SDag-Erling Smørgrav echo "*** you link to this library. But I can only do this if you have a" 9391b7579f77SDag-Erling Smørgrav echo "*** shared version of the library, which you do not appear to have" 9392b7579f77SDag-Erling Smørgrav echo "*** because I did check the linker path looking for a file starting" 9393b7579f77SDag-Erling Smørgrav if test -z "$potlib"; then 9394b7579f77SDag-Erling Smørgrav $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 9395b7579f77SDag-Erling Smørgrav else 9396b7579f77SDag-Erling Smørgrav $ECHO "*** with $libname and none of the candidates passed a file format test" 9397b7579f77SDag-Erling Smørgrav $ECHO "*** using a regex pattern. Last file checked: $potlib" 9398b7579f77SDag-Erling Smørgrav fi 9399b7579f77SDag-Erling Smørgrav fi 9400b7579f77SDag-Erling Smørgrav ;; 9401b7579f77SDag-Erling Smørgrav *) 9402b7579f77SDag-Erling Smørgrav # Add a -L argument. 9403b7579f77SDag-Erling Smørgrav func_append newdeplibs " $a_deplib" 9404b7579f77SDag-Erling Smørgrav ;; 9405b7579f77SDag-Erling Smørgrav esac 9406b7579f77SDag-Erling Smørgrav done # Gone through all deplibs. 9407b7579f77SDag-Erling Smørgrav ;; 9408b7579f77SDag-Erling Smørgrav none | unknown | *) 9409f61ef7f6SDag-Erling Smørgrav newdeplibs= 9410b7579f77SDag-Erling Smørgrav tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 9411f61ef7f6SDag-Erling Smørgrav if test yes = "$allow_libtool_libs_with_static_runtimes"; then 9412b7579f77SDag-Erling Smørgrav for i in $predeps $postdeps; do 9413b7579f77SDag-Erling Smørgrav # can't use Xsed below, because $i might contain '/' 9414f61ef7f6SDag-Erling Smørgrav tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` 9415b7579f77SDag-Erling Smørgrav done 9416b7579f77SDag-Erling Smørgrav fi 9417b7579f77SDag-Erling Smørgrav case $tmp_deplibs in 9418b7579f77SDag-Erling Smørgrav *[!\ \ ]*) 9419b7579f77SDag-Erling Smørgrav echo 9420f61ef7f6SDag-Erling Smørgrav if test none = "$deplibs_check_method"; then 9421b7579f77SDag-Erling Smørgrav echo "*** Warning: inter-library dependencies are not supported in this platform." 9422b7579f77SDag-Erling Smørgrav else 9423b7579f77SDag-Erling Smørgrav echo "*** Warning: inter-library dependencies are not known to be supported." 9424b7579f77SDag-Erling Smørgrav fi 9425b7579f77SDag-Erling Smørgrav echo "*** All declared inter-library dependencies are being dropped." 9426b7579f77SDag-Erling Smørgrav droppeddeps=yes 9427b7579f77SDag-Erling Smørgrav ;; 9428b7579f77SDag-Erling Smørgrav esac 9429b7579f77SDag-Erling Smørgrav ;; 9430b7579f77SDag-Erling Smørgrav esac 9431b7579f77SDag-Erling Smørgrav versuffix=$versuffix_save 9432b7579f77SDag-Erling Smørgrav major=$major_save 9433b7579f77SDag-Erling Smørgrav release=$release_save 9434b7579f77SDag-Erling Smørgrav libname=$libname_save 9435b7579f77SDag-Erling Smørgrav name=$name_save 9436b7579f77SDag-Erling Smørgrav 9437b7579f77SDag-Erling Smørgrav case $host in 9438b7579f77SDag-Erling Smørgrav *-*-rhapsody* | *-*-darwin1.[012]) 9439b7579f77SDag-Erling Smørgrav # On Rhapsody replace the C library with the System framework 9440b7579f77SDag-Erling Smørgrav newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 9441b7579f77SDag-Erling Smørgrav ;; 9442b7579f77SDag-Erling Smørgrav esac 9443b7579f77SDag-Erling Smørgrav 9444f61ef7f6SDag-Erling Smørgrav if test yes = "$droppeddeps"; then 9445f61ef7f6SDag-Erling Smørgrav if test yes = "$module"; then 9446b7579f77SDag-Erling Smørgrav echo 9447b7579f77SDag-Erling Smørgrav echo "*** Warning: libtool could not satisfy all declared inter-library" 9448b7579f77SDag-Erling Smørgrav $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 9449b7579f77SDag-Erling Smørgrav echo "*** a static module, that should work as long as the dlopening" 9450b7579f77SDag-Erling Smørgrav echo "*** application is linked with the -dlopen flag." 9451b7579f77SDag-Erling Smørgrav if test -z "$global_symbol_pipe"; then 9452b7579f77SDag-Erling Smørgrav echo 9453b7579f77SDag-Erling Smørgrav echo "*** However, this would only work if libtool was able to extract symbol" 9454f61ef7f6SDag-Erling Smørgrav echo "*** lists from a program, using 'nm' or equivalent, but libtool could" 9455b7579f77SDag-Erling Smørgrav echo "*** not find such a program. So, this module is probably useless." 9456f61ef7f6SDag-Erling Smørgrav echo "*** 'nm' from GNU binutils and a full rebuild may help." 9457b7579f77SDag-Erling Smørgrav fi 9458f61ef7f6SDag-Erling Smørgrav if test no = "$build_old_libs"; then 9459f61ef7f6SDag-Erling Smørgrav oldlibs=$output_objdir/$libname.$libext 9460b7579f77SDag-Erling Smørgrav build_libtool_libs=module 9461b7579f77SDag-Erling Smørgrav build_old_libs=yes 9462b7579f77SDag-Erling Smørgrav else 9463b7579f77SDag-Erling Smørgrav build_libtool_libs=no 9464b7579f77SDag-Erling Smørgrav fi 9465b7579f77SDag-Erling Smørgrav else 9466b7579f77SDag-Erling Smørgrav echo "*** The inter-library dependencies that have been dropped here will be" 9467b7579f77SDag-Erling Smørgrav echo "*** automatically added whenever a program is linked with this library" 9468b7579f77SDag-Erling Smørgrav echo "*** or is declared to -dlopen it." 9469b7579f77SDag-Erling Smørgrav 9470f61ef7f6SDag-Erling Smørgrav if test no = "$allow_undefined"; then 9471b7579f77SDag-Erling Smørgrav echo 9472b7579f77SDag-Erling Smørgrav echo "*** Since this library must not contain undefined symbols," 9473b7579f77SDag-Erling Smørgrav echo "*** because either the platform does not support them or" 9474b7579f77SDag-Erling Smørgrav echo "*** it was explicitly requested with -no-undefined," 9475b7579f77SDag-Erling Smørgrav echo "*** libtool will only create a static version of it." 9476f61ef7f6SDag-Erling Smørgrav if test no = "$build_old_libs"; then 9477f61ef7f6SDag-Erling Smørgrav oldlibs=$output_objdir/$libname.$libext 9478b7579f77SDag-Erling Smørgrav build_libtool_libs=module 9479b7579f77SDag-Erling Smørgrav build_old_libs=yes 9480b7579f77SDag-Erling Smørgrav else 9481b7579f77SDag-Erling Smørgrav build_libtool_libs=no 9482b7579f77SDag-Erling Smørgrav fi 9483b7579f77SDag-Erling Smørgrav fi 9484b7579f77SDag-Erling Smørgrav fi 9485b7579f77SDag-Erling Smørgrav fi 9486b7579f77SDag-Erling Smørgrav # Done checking deplibs! 9487b7579f77SDag-Erling Smørgrav deplibs=$newdeplibs 9488b7579f77SDag-Erling Smørgrav fi 9489b7579f77SDag-Erling Smørgrav # Time to change all our "foo.ltframework" stuff back to "-framework foo" 9490b7579f77SDag-Erling Smørgrav case $host in 9491b7579f77SDag-Erling Smørgrav *-*-darwin*) 9492b7579f77SDag-Erling Smørgrav newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9493b7579f77SDag-Erling Smørgrav new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9494b7579f77SDag-Erling Smørgrav deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 9495b7579f77SDag-Erling Smørgrav ;; 9496b7579f77SDag-Erling Smørgrav esac 9497b7579f77SDag-Erling Smørgrav 9498b7579f77SDag-Erling Smørgrav # move library search paths that coincide with paths to not yet 9499b7579f77SDag-Erling Smørgrav # installed libraries to the beginning of the library search list 9500b7579f77SDag-Erling Smørgrav new_libs= 9501b7579f77SDag-Erling Smørgrav for path in $notinst_path; do 9502b7579f77SDag-Erling Smørgrav case " $new_libs " in 9503b7579f77SDag-Erling Smørgrav *" -L$path/$objdir "*) ;; 9504b7579f77SDag-Erling Smørgrav *) 9505b7579f77SDag-Erling Smørgrav case " $deplibs " in 9506b7579f77SDag-Erling Smørgrav *" -L$path/$objdir "*) 9507b7579f77SDag-Erling Smørgrav func_append new_libs " -L$path/$objdir" ;; 9508b7579f77SDag-Erling Smørgrav esac 9509b7579f77SDag-Erling Smørgrav ;; 9510b7579f77SDag-Erling Smørgrav esac 9511b7579f77SDag-Erling Smørgrav done 9512b7579f77SDag-Erling Smørgrav for deplib in $deplibs; do 9513b7579f77SDag-Erling Smørgrav case $deplib in 9514b7579f77SDag-Erling Smørgrav -L*) 9515b7579f77SDag-Erling Smørgrav case " $new_libs " in 9516b7579f77SDag-Erling Smørgrav *" $deplib "*) ;; 9517b7579f77SDag-Erling Smørgrav *) func_append new_libs " $deplib" ;; 9518b7579f77SDag-Erling Smørgrav esac 9519b7579f77SDag-Erling Smørgrav ;; 9520b7579f77SDag-Erling Smørgrav *) func_append new_libs " $deplib" ;; 9521b7579f77SDag-Erling Smørgrav esac 9522b7579f77SDag-Erling Smørgrav done 9523f61ef7f6SDag-Erling Smørgrav deplibs=$new_libs 9524b7579f77SDag-Erling Smørgrav 9525b7579f77SDag-Erling Smørgrav # All the library-specific variables (install_libdir is set above). 9526b7579f77SDag-Erling Smørgrav library_names= 9527b7579f77SDag-Erling Smørgrav old_library= 9528b7579f77SDag-Erling Smørgrav dlname= 9529b7579f77SDag-Erling Smørgrav 9530b7579f77SDag-Erling Smørgrav # Test again, we may have decided not to build it any more 9531f61ef7f6SDag-Erling Smørgrav if test yes = "$build_libtool_libs"; then 9532f61ef7f6SDag-Erling Smørgrav # Remove $wl instances when linking with ld. 95338ed2b524SDag-Erling Smørgrav # FIXME: should test the right _cmds variable. 95348ed2b524SDag-Erling Smørgrav case $archive_cmds in 95358ed2b524SDag-Erling Smørgrav *\$LD\ *) wl= ;; 95368ed2b524SDag-Erling Smørgrav esac 9537f61ef7f6SDag-Erling Smørgrav if test yes = "$hardcode_into_libs"; then 9538b7579f77SDag-Erling Smørgrav # Hardcode the library paths 9539b7579f77SDag-Erling Smørgrav hardcode_libdirs= 9540b7579f77SDag-Erling Smørgrav dep_rpath= 9541f61ef7f6SDag-Erling Smørgrav rpath=$finalize_rpath 9542f61ef7f6SDag-Erling Smørgrav test relink = "$opt_mode" || rpath=$compile_rpath$rpath 9543b7579f77SDag-Erling Smørgrav for libdir in $rpath; do 9544b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_flag_spec"; then 9545b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_separator"; then 9546b7579f77SDag-Erling Smørgrav func_replace_sysroot "$libdir" 9547b7579f77SDag-Erling Smørgrav libdir=$func_replace_sysroot_result 9548b7579f77SDag-Erling Smørgrav if test -z "$hardcode_libdirs"; then 9549f61ef7f6SDag-Erling Smørgrav hardcode_libdirs=$libdir 9550b7579f77SDag-Erling Smørgrav else 9551b7579f77SDag-Erling Smørgrav # Just accumulate the unique libdirs. 9552b7579f77SDag-Erling Smørgrav case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 9553b7579f77SDag-Erling Smørgrav *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 9554b7579f77SDag-Erling Smørgrav ;; 9555b7579f77SDag-Erling Smørgrav *) 9556b7579f77SDag-Erling Smørgrav func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 9557b7579f77SDag-Erling Smørgrav ;; 9558b7579f77SDag-Erling Smørgrav esac 9559b7579f77SDag-Erling Smørgrav fi 9560b7579f77SDag-Erling Smørgrav else 9561b7579f77SDag-Erling Smørgrav eval flag=\"$hardcode_libdir_flag_spec\" 9562b7579f77SDag-Erling Smørgrav func_append dep_rpath " $flag" 9563b7579f77SDag-Erling Smørgrav fi 9564b7579f77SDag-Erling Smørgrav elif test -n "$runpath_var"; then 9565b7579f77SDag-Erling Smørgrav case "$perm_rpath " in 9566b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 95678ed2b524SDag-Erling Smørgrav *) func_append perm_rpath " $libdir" ;; 9568b7579f77SDag-Erling Smørgrav esac 9569b7579f77SDag-Erling Smørgrav fi 9570b7579f77SDag-Erling Smørgrav done 9571b7579f77SDag-Erling Smørgrav # Substitute the hardcoded libdirs into the rpath. 9572b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_separator" && 9573b7579f77SDag-Erling Smørgrav test -n "$hardcode_libdirs"; then 9574f61ef7f6SDag-Erling Smørgrav libdir=$hardcode_libdirs 95758ed2b524SDag-Erling Smørgrav eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 9576b7579f77SDag-Erling Smørgrav fi 9577b7579f77SDag-Erling Smørgrav if test -n "$runpath_var" && test -n "$perm_rpath"; then 9578b7579f77SDag-Erling Smørgrav # We should set the runpath_var. 9579b7579f77SDag-Erling Smørgrav rpath= 9580b7579f77SDag-Erling Smørgrav for dir in $perm_rpath; do 9581b7579f77SDag-Erling Smørgrav func_append rpath "$dir:" 9582b7579f77SDag-Erling Smørgrav done 9583b7579f77SDag-Erling Smørgrav eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 9584b7579f77SDag-Erling Smørgrav fi 9585b7579f77SDag-Erling Smørgrav test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 9586b7579f77SDag-Erling Smørgrav fi 9587b7579f77SDag-Erling Smørgrav 9588f61ef7f6SDag-Erling Smørgrav shlibpath=$finalize_shlibpath 9589f61ef7f6SDag-Erling Smørgrav test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath 9590b7579f77SDag-Erling Smørgrav if test -n "$shlibpath"; then 9591b7579f77SDag-Erling Smørgrav eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 9592b7579f77SDag-Erling Smørgrav fi 9593b7579f77SDag-Erling Smørgrav 9594b7579f77SDag-Erling Smørgrav # Get the real and link names of the library. 9595b7579f77SDag-Erling Smørgrav eval shared_ext=\"$shrext_cmds\" 9596b7579f77SDag-Erling Smørgrav eval library_names=\"$library_names_spec\" 9597b7579f77SDag-Erling Smørgrav set dummy $library_names 9598b7579f77SDag-Erling Smørgrav shift 9599f61ef7f6SDag-Erling Smørgrav realname=$1 9600b7579f77SDag-Erling Smørgrav shift 9601b7579f77SDag-Erling Smørgrav 9602b7579f77SDag-Erling Smørgrav if test -n "$soname_spec"; then 9603b7579f77SDag-Erling Smørgrav eval soname=\"$soname_spec\" 9604b7579f77SDag-Erling Smørgrav else 9605f61ef7f6SDag-Erling Smørgrav soname=$realname 9606b7579f77SDag-Erling Smørgrav fi 9607b7579f77SDag-Erling Smørgrav if test -z "$dlname"; then 9608b7579f77SDag-Erling Smørgrav dlname=$soname 9609b7579f77SDag-Erling Smørgrav fi 9610b7579f77SDag-Erling Smørgrav 9611f61ef7f6SDag-Erling Smørgrav lib=$output_objdir/$realname 9612b7579f77SDag-Erling Smørgrav linknames= 9613b7579f77SDag-Erling Smørgrav for link 9614b7579f77SDag-Erling Smørgrav do 9615b7579f77SDag-Erling Smørgrav func_append linknames " $link" 9616b7579f77SDag-Erling Smørgrav done 9617b7579f77SDag-Erling Smørgrav 9618b7579f77SDag-Erling Smørgrav # Use standard objects if they are pic 9619b7579f77SDag-Erling Smørgrav test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 9620b7579f77SDag-Erling Smørgrav test "X$libobjs" = "X " && libobjs= 9621b7579f77SDag-Erling Smørgrav 9622b7579f77SDag-Erling Smørgrav delfiles= 9623b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -n "$include_expsyms"; then 9624b7579f77SDag-Erling Smørgrav $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 9625f61ef7f6SDag-Erling Smørgrav export_symbols=$output_objdir/$libname.uexp 9626b7579f77SDag-Erling Smørgrav func_append delfiles " $export_symbols" 9627b7579f77SDag-Erling Smørgrav fi 9628b7579f77SDag-Erling Smørgrav 9629b7579f77SDag-Erling Smørgrav orig_export_symbols= 9630b7579f77SDag-Erling Smørgrav case $host_os in 9631b7579f77SDag-Erling Smørgrav cygwin* | mingw* | cegcc*) 9632b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 9633b7579f77SDag-Erling Smørgrav # exporting using user supplied symfile 9634f61ef7f6SDag-Erling Smørgrav func_dll_def_p "$export_symbols" || { 9635b7579f77SDag-Erling Smørgrav # and it's NOT already a .def file. Must figure out 9636b7579f77SDag-Erling Smørgrav # which of the given symbols are data symbols and tag 9637b7579f77SDag-Erling Smørgrav # them as such. So, trigger use of export_symbols_cmds. 9638b7579f77SDag-Erling Smørgrav # export_symbols gets reassigned inside the "prepare 9639b7579f77SDag-Erling Smørgrav # the list of exported symbols" if statement, so the 9640b7579f77SDag-Erling Smørgrav # include_expsyms logic still works. 9641f61ef7f6SDag-Erling Smørgrav orig_export_symbols=$export_symbols 9642b7579f77SDag-Erling Smørgrav export_symbols= 9643b7579f77SDag-Erling Smørgrav always_export_symbols=yes 9644f61ef7f6SDag-Erling Smørgrav } 9645b7579f77SDag-Erling Smørgrav fi 9646b7579f77SDag-Erling Smørgrav ;; 9647b7579f77SDag-Erling Smørgrav esac 9648b7579f77SDag-Erling Smørgrav 9649b7579f77SDag-Erling Smørgrav # Prepare the list of exported symbols 9650b7579f77SDag-Erling Smørgrav if test -z "$export_symbols"; then 9651f61ef7f6SDag-Erling Smørgrav if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then 9652f61ef7f6SDag-Erling Smørgrav func_verbose "generating symbol list for '$libname.la'" 9653f61ef7f6SDag-Erling Smørgrav export_symbols=$output_objdir/$libname.exp 9654b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $export_symbols 9655b7579f77SDag-Erling Smørgrav cmds=$export_symbols_cmds 9656f61ef7f6SDag-Erling Smørgrav save_ifs=$IFS; IFS='~' 9657b7579f77SDag-Erling Smørgrav for cmd1 in $cmds; do 9658f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 9659b7579f77SDag-Erling Smørgrav # Take the normal branch if the nm_file_list_spec branch 9660b7579f77SDag-Erling Smørgrav # doesn't work or if tool conversion is not needed. 9661b7579f77SDag-Erling Smørgrav case $nm_file_list_spec~$to_tool_file_cmd in 9662b7579f77SDag-Erling Smørgrav *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 9663b7579f77SDag-Erling Smørgrav try_normal_branch=yes 9664b7579f77SDag-Erling Smørgrav eval cmd=\"$cmd1\" 9665b7579f77SDag-Erling Smørgrav func_len " $cmd" 9666b7579f77SDag-Erling Smørgrav len=$func_len_result 9667b7579f77SDag-Erling Smørgrav ;; 9668b7579f77SDag-Erling Smørgrav *) 9669b7579f77SDag-Erling Smørgrav try_normal_branch=no 9670b7579f77SDag-Erling Smørgrav ;; 9671b7579f77SDag-Erling Smørgrav esac 9672f61ef7f6SDag-Erling Smørgrav if test yes = "$try_normal_branch" \ 9673b7579f77SDag-Erling Smørgrav && { test "$len" -lt "$max_cmd_len" \ 9674b7579f77SDag-Erling Smørgrav || test "$max_cmd_len" -le -1; } 9675b7579f77SDag-Erling Smørgrav then 9676b7579f77SDag-Erling Smørgrav func_show_eval "$cmd" 'exit $?' 9677b7579f77SDag-Erling Smørgrav skipped_export=false 9678b7579f77SDag-Erling Smørgrav elif test -n "$nm_file_list_spec"; then 9679b7579f77SDag-Erling Smørgrav func_basename "$output" 9680b7579f77SDag-Erling Smørgrav output_la=$func_basename_result 9681b7579f77SDag-Erling Smørgrav save_libobjs=$libobjs 9682b7579f77SDag-Erling Smørgrav save_output=$output 9683f61ef7f6SDag-Erling Smørgrav output=$output_objdir/$output_la.nm 9684b7579f77SDag-Erling Smørgrav func_to_tool_file "$output" 9685b7579f77SDag-Erling Smørgrav libobjs=$nm_file_list_spec$func_to_tool_file_result 9686b7579f77SDag-Erling Smørgrav func_append delfiles " $output" 9687b7579f77SDag-Erling Smørgrav func_verbose "creating $NM input file list: $output" 9688b7579f77SDag-Erling Smørgrav for obj in $save_libobjs; do 9689b7579f77SDag-Erling Smørgrav func_to_tool_file "$obj" 9690b7579f77SDag-Erling Smørgrav $ECHO "$func_to_tool_file_result" 9691b7579f77SDag-Erling Smørgrav done > "$output" 9692b7579f77SDag-Erling Smørgrav eval cmd=\"$cmd1\" 9693b7579f77SDag-Erling Smørgrav func_show_eval "$cmd" 'exit $?' 9694b7579f77SDag-Erling Smørgrav output=$save_output 9695b7579f77SDag-Erling Smørgrav libobjs=$save_libobjs 9696b7579f77SDag-Erling Smørgrav skipped_export=false 9697b7579f77SDag-Erling Smørgrav else 9698b7579f77SDag-Erling Smørgrav # The command line is too long to execute in one step. 9699b7579f77SDag-Erling Smørgrav func_verbose "using reloadable object file for export list..." 9700b7579f77SDag-Erling Smørgrav skipped_export=: 9701b7579f77SDag-Erling Smørgrav # Break out early, otherwise skipped_export may be 9702b7579f77SDag-Erling Smørgrav # set to false by a later but shorter cmd. 9703b7579f77SDag-Erling Smørgrav break 9704b7579f77SDag-Erling Smørgrav fi 9705b7579f77SDag-Erling Smørgrav done 9706f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 9707f61ef7f6SDag-Erling Smørgrav if test -n "$export_symbols_regex" && test : != "$skipped_export"; then 9708b7579f77SDag-Erling Smørgrav func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9709b7579f77SDag-Erling Smørgrav func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9710b7579f77SDag-Erling Smørgrav fi 9711b7579f77SDag-Erling Smørgrav fi 9712b7579f77SDag-Erling Smørgrav fi 9713b7579f77SDag-Erling Smørgrav 9714b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -n "$include_expsyms"; then 9715f61ef7f6SDag-Erling Smørgrav tmp_export_symbols=$export_symbols 9716f61ef7f6SDag-Erling Smørgrav test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9717b7579f77SDag-Erling Smørgrav $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9718b7579f77SDag-Erling Smørgrav fi 9719b7579f77SDag-Erling Smørgrav 9720f61ef7f6SDag-Erling Smørgrav if test : != "$skipped_export" && test -n "$orig_export_symbols"; then 9721b7579f77SDag-Erling Smørgrav # The given exports_symbols file has to be filtered, so filter it. 9722f61ef7f6SDag-Erling Smørgrav func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9723b7579f77SDag-Erling Smørgrav # FIXME: $output_objdir/$libname.filter potentially contains lots of 9724f61ef7f6SDag-Erling Smørgrav # 's' commands, which not all seds can handle. GNU sed should be fine 9725b7579f77SDag-Erling Smørgrav # though. Also, the filter scales superlinearly with the number of 9726b7579f77SDag-Erling Smørgrav # global variables. join(1) would be nice here, but unfortunately 9727b7579f77SDag-Erling Smørgrav # isn't a blessed tool. 9728b7579f77SDag-Erling Smørgrav $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9729b7579f77SDag-Erling Smørgrav func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9730b7579f77SDag-Erling Smørgrav export_symbols=$output_objdir/$libname.def 9731b7579f77SDag-Erling Smørgrav $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9732b7579f77SDag-Erling Smørgrav fi 9733b7579f77SDag-Erling Smørgrav 9734b7579f77SDag-Erling Smørgrav tmp_deplibs= 9735b7579f77SDag-Erling Smørgrav for test_deplib in $deplibs; do 9736b7579f77SDag-Erling Smørgrav case " $convenience " in 9737b7579f77SDag-Erling Smørgrav *" $test_deplib "*) ;; 9738b7579f77SDag-Erling Smørgrav *) 9739b7579f77SDag-Erling Smørgrav func_append tmp_deplibs " $test_deplib" 9740b7579f77SDag-Erling Smørgrav ;; 9741b7579f77SDag-Erling Smørgrav esac 9742b7579f77SDag-Erling Smørgrav done 9743f61ef7f6SDag-Erling Smørgrav deplibs=$tmp_deplibs 9744b7579f77SDag-Erling Smørgrav 9745b7579f77SDag-Erling Smørgrav if test -n "$convenience"; then 9746b7579f77SDag-Erling Smørgrav if test -n "$whole_archive_flag_spec" && 9747f61ef7f6SDag-Erling Smørgrav test yes = "$compiler_needs_object" && 9748b7579f77SDag-Erling Smørgrav test -z "$libobjs"; then 9749b7579f77SDag-Erling Smørgrav # extract the archives, so we have objects to list. 9750b7579f77SDag-Erling Smørgrav # TODO: could optimize this to just extract one archive. 9751b7579f77SDag-Erling Smørgrav whole_archive_flag_spec= 9752b7579f77SDag-Erling Smørgrav fi 9753b7579f77SDag-Erling Smørgrav if test -n "$whole_archive_flag_spec"; then 9754b7579f77SDag-Erling Smørgrav save_libobjs=$libobjs 9755b7579f77SDag-Erling Smørgrav eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9756b7579f77SDag-Erling Smørgrav test "X$libobjs" = "X " && libobjs= 9757b7579f77SDag-Erling Smørgrav else 9758f61ef7f6SDag-Erling Smørgrav gentop=$output_objdir/${outputname}x 9759b7579f77SDag-Erling Smørgrav func_append generated " $gentop" 9760b7579f77SDag-Erling Smørgrav 9761b7579f77SDag-Erling Smørgrav func_extract_archives $gentop $convenience 9762b7579f77SDag-Erling Smørgrav func_append libobjs " $func_extract_archives_result" 9763b7579f77SDag-Erling Smørgrav test "X$libobjs" = "X " && libobjs= 9764b7579f77SDag-Erling Smørgrav fi 9765b7579f77SDag-Erling Smørgrav fi 9766b7579f77SDag-Erling Smørgrav 9767f61ef7f6SDag-Erling Smørgrav if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then 9768b7579f77SDag-Erling Smørgrav eval flag=\"$thread_safe_flag_spec\" 9769b7579f77SDag-Erling Smørgrav func_append linker_flags " $flag" 9770b7579f77SDag-Erling Smørgrav fi 9771b7579f77SDag-Erling Smørgrav 9772b7579f77SDag-Erling Smørgrav # Make a backup of the uninstalled library when relinking 9773f61ef7f6SDag-Erling Smørgrav if test relink = "$opt_mode"; then 9774b7579f77SDag-Erling Smørgrav $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 9775b7579f77SDag-Erling Smørgrav fi 9776b7579f77SDag-Erling Smørgrav 9777b7579f77SDag-Erling Smørgrav # Do each of the archive commands. 9778f61ef7f6SDag-Erling Smørgrav if test yes = "$module" && test -n "$module_cmds"; then 9779b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9780b7579f77SDag-Erling Smørgrav eval test_cmds=\"$module_expsym_cmds\" 9781b7579f77SDag-Erling Smørgrav cmds=$module_expsym_cmds 9782b7579f77SDag-Erling Smørgrav else 9783b7579f77SDag-Erling Smørgrav eval test_cmds=\"$module_cmds\" 9784b7579f77SDag-Erling Smørgrav cmds=$module_cmds 9785b7579f77SDag-Erling Smørgrav fi 9786b7579f77SDag-Erling Smørgrav else 9787b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 9788b7579f77SDag-Erling Smørgrav eval test_cmds=\"$archive_expsym_cmds\" 9789b7579f77SDag-Erling Smørgrav cmds=$archive_expsym_cmds 9790b7579f77SDag-Erling Smørgrav else 9791b7579f77SDag-Erling Smørgrav eval test_cmds=\"$archive_cmds\" 9792b7579f77SDag-Erling Smørgrav cmds=$archive_cmds 9793b7579f77SDag-Erling Smørgrav fi 9794b7579f77SDag-Erling Smørgrav fi 9795b7579f77SDag-Erling Smørgrav 9796f61ef7f6SDag-Erling Smørgrav if test : != "$skipped_export" && 9797b7579f77SDag-Erling Smørgrav func_len " $test_cmds" && 9798b7579f77SDag-Erling Smørgrav len=$func_len_result && 9799b7579f77SDag-Erling Smørgrav test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9800b7579f77SDag-Erling Smørgrav : 9801b7579f77SDag-Erling Smørgrav else 9802b7579f77SDag-Erling Smørgrav # The command line is too long to link in one step, link piecewise 9803b7579f77SDag-Erling Smørgrav # or, if using GNU ld and skipped_export is not :, use a linker 9804b7579f77SDag-Erling Smørgrav # script. 9805b7579f77SDag-Erling Smørgrav 9806b7579f77SDag-Erling Smørgrav # Save the value of $output and $libobjs because we want to 9807b7579f77SDag-Erling Smørgrav # use them later. If we have whole_archive_flag_spec, we 9808b7579f77SDag-Erling Smørgrav # want to use save_libobjs as it was before 9809b7579f77SDag-Erling Smørgrav # whole_archive_flag_spec was expanded, because we can't 9810b7579f77SDag-Erling Smørgrav # assume the linker understands whole_archive_flag_spec. 9811b7579f77SDag-Erling Smørgrav # This may have to be revisited, in case too many 9812b7579f77SDag-Erling Smørgrav # convenience libraries get linked in and end up exceeding 9813b7579f77SDag-Erling Smørgrav # the spec. 9814b7579f77SDag-Erling Smørgrav if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 9815b7579f77SDag-Erling Smørgrav save_libobjs=$libobjs 9816b7579f77SDag-Erling Smørgrav fi 9817b7579f77SDag-Erling Smørgrav save_output=$output 9818b7579f77SDag-Erling Smørgrav func_basename "$output" 9819b7579f77SDag-Erling Smørgrav output_la=$func_basename_result 9820b7579f77SDag-Erling Smørgrav 9821b7579f77SDag-Erling Smørgrav # Clear the reloadable object creation command queue and 9822b7579f77SDag-Erling Smørgrav # initialize k to one. 9823b7579f77SDag-Erling Smørgrav test_cmds= 9824b7579f77SDag-Erling Smørgrav concat_cmds= 9825b7579f77SDag-Erling Smørgrav objlist= 9826b7579f77SDag-Erling Smørgrav last_robj= 9827b7579f77SDag-Erling Smørgrav k=1 9828b7579f77SDag-Erling Smørgrav 9829f61ef7f6SDag-Erling Smørgrav if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then 9830f61ef7f6SDag-Erling Smørgrav output=$output_objdir/$output_la.lnkscript 9831b7579f77SDag-Erling Smørgrav func_verbose "creating GNU ld script: $output" 9832b7579f77SDag-Erling Smørgrav echo 'INPUT (' > $output 9833b7579f77SDag-Erling Smørgrav for obj in $save_libobjs 9834b7579f77SDag-Erling Smørgrav do 9835b7579f77SDag-Erling Smørgrav func_to_tool_file "$obj" 9836b7579f77SDag-Erling Smørgrav $ECHO "$func_to_tool_file_result" >> $output 9837b7579f77SDag-Erling Smørgrav done 9838b7579f77SDag-Erling Smørgrav echo ')' >> $output 9839b7579f77SDag-Erling Smørgrav func_append delfiles " $output" 9840b7579f77SDag-Erling Smørgrav func_to_tool_file "$output" 9841b7579f77SDag-Erling Smørgrav output=$func_to_tool_file_result 9842f61ef7f6SDag-Erling Smørgrav elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then 9843f61ef7f6SDag-Erling Smørgrav output=$output_objdir/$output_la.lnk 9844b7579f77SDag-Erling Smørgrav func_verbose "creating linker input file list: $output" 9845b7579f77SDag-Erling Smørgrav : > $output 9846b7579f77SDag-Erling Smørgrav set x $save_libobjs 9847b7579f77SDag-Erling Smørgrav shift 9848b7579f77SDag-Erling Smørgrav firstobj= 9849f61ef7f6SDag-Erling Smørgrav if test yes = "$compiler_needs_object"; then 9850b7579f77SDag-Erling Smørgrav firstobj="$1 " 9851b7579f77SDag-Erling Smørgrav shift 9852b7579f77SDag-Erling Smørgrav fi 9853b7579f77SDag-Erling Smørgrav for obj 9854b7579f77SDag-Erling Smørgrav do 9855b7579f77SDag-Erling Smørgrav func_to_tool_file "$obj" 9856b7579f77SDag-Erling Smørgrav $ECHO "$func_to_tool_file_result" >> $output 9857b7579f77SDag-Erling Smørgrav done 9858b7579f77SDag-Erling Smørgrav func_append delfiles " $output" 9859b7579f77SDag-Erling Smørgrav func_to_tool_file "$output" 9860b7579f77SDag-Erling Smørgrav output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 9861b7579f77SDag-Erling Smørgrav else 9862b7579f77SDag-Erling Smørgrav if test -n "$save_libobjs"; then 9863b7579f77SDag-Erling Smørgrav func_verbose "creating reloadable object files..." 9864f61ef7f6SDag-Erling Smørgrav output=$output_objdir/$output_la-$k.$objext 9865b7579f77SDag-Erling Smørgrav eval test_cmds=\"$reload_cmds\" 9866b7579f77SDag-Erling Smørgrav func_len " $test_cmds" 9867b7579f77SDag-Erling Smørgrav len0=$func_len_result 9868b7579f77SDag-Erling Smørgrav len=$len0 9869b7579f77SDag-Erling Smørgrav 9870b7579f77SDag-Erling Smørgrav # Loop over the list of objects to be linked. 9871b7579f77SDag-Erling Smørgrav for obj in $save_libobjs 9872b7579f77SDag-Erling Smørgrav do 9873b7579f77SDag-Erling Smørgrav func_len " $obj" 9874b7579f77SDag-Erling Smørgrav func_arith $len + $func_len_result 9875b7579f77SDag-Erling Smørgrav len=$func_arith_result 9876f61ef7f6SDag-Erling Smørgrav if test -z "$objlist" || 9877b7579f77SDag-Erling Smørgrav test "$len" -lt "$max_cmd_len"; then 9878b7579f77SDag-Erling Smørgrav func_append objlist " $obj" 9879b7579f77SDag-Erling Smørgrav else 9880b7579f77SDag-Erling Smørgrav # The command $test_cmds is almost too long, add a 9881b7579f77SDag-Erling Smørgrav # command to the queue. 9882f61ef7f6SDag-Erling Smørgrav if test 1 -eq "$k"; then 9883b7579f77SDag-Erling Smørgrav # The first file doesn't have a previous command to add. 9884b7579f77SDag-Erling Smørgrav reload_objs=$objlist 9885b7579f77SDag-Erling Smørgrav eval concat_cmds=\"$reload_cmds\" 9886b7579f77SDag-Erling Smørgrav else 9887b7579f77SDag-Erling Smørgrav # All subsequent reloadable object files will link in 9888b7579f77SDag-Erling Smørgrav # the last one created. 9889b7579f77SDag-Erling Smørgrav reload_objs="$objlist $last_robj" 9890b7579f77SDag-Erling Smørgrav eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 9891b7579f77SDag-Erling Smørgrav fi 9892f61ef7f6SDag-Erling Smørgrav last_robj=$output_objdir/$output_la-$k.$objext 9893b7579f77SDag-Erling Smørgrav func_arith $k + 1 9894b7579f77SDag-Erling Smørgrav k=$func_arith_result 9895f61ef7f6SDag-Erling Smørgrav output=$output_objdir/$output_la-$k.$objext 9896b7579f77SDag-Erling Smørgrav objlist=" $obj" 9897b7579f77SDag-Erling Smørgrav func_len " $last_robj" 9898b7579f77SDag-Erling Smørgrav func_arith $len0 + $func_len_result 9899b7579f77SDag-Erling Smørgrav len=$func_arith_result 9900b7579f77SDag-Erling Smørgrav fi 9901b7579f77SDag-Erling Smørgrav done 9902b7579f77SDag-Erling Smørgrav # Handle the remaining objects by creating one last 9903b7579f77SDag-Erling Smørgrav # reloadable object file. All subsequent reloadable object 9904b7579f77SDag-Erling Smørgrav # files will link in the last one created. 9905b7579f77SDag-Erling Smørgrav test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9906b7579f77SDag-Erling Smørgrav reload_objs="$objlist $last_robj" 9907f61ef7f6SDag-Erling Smørgrav eval concat_cmds=\"\$concat_cmds$reload_cmds\" 9908b7579f77SDag-Erling Smørgrav if test -n "$last_robj"; then 9909f61ef7f6SDag-Erling Smørgrav eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9910b7579f77SDag-Erling Smørgrav fi 9911b7579f77SDag-Erling Smørgrav func_append delfiles " $output" 9912b7579f77SDag-Erling Smørgrav 9913b7579f77SDag-Erling Smørgrav else 9914b7579f77SDag-Erling Smørgrav output= 9915b7579f77SDag-Erling Smørgrav fi 9916b7579f77SDag-Erling Smørgrav 9917f61ef7f6SDag-Erling Smørgrav ${skipped_export-false} && { 9918f61ef7f6SDag-Erling Smørgrav func_verbose "generating symbol list for '$libname.la'" 9919f61ef7f6SDag-Erling Smørgrav export_symbols=$output_objdir/$libname.exp 9920b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $export_symbols 9921b7579f77SDag-Erling Smørgrav libobjs=$output 9922b7579f77SDag-Erling Smørgrav # Append the command to create the export file. 9923b7579f77SDag-Erling Smørgrav test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9924b7579f77SDag-Erling Smørgrav eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 9925b7579f77SDag-Erling Smørgrav if test -n "$last_robj"; then 9926b7579f77SDag-Erling Smørgrav eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 9927b7579f77SDag-Erling Smørgrav fi 9928f61ef7f6SDag-Erling Smørgrav } 9929b7579f77SDag-Erling Smørgrav 9930b7579f77SDag-Erling Smørgrav test -n "$save_libobjs" && 9931b7579f77SDag-Erling Smørgrav func_verbose "creating a temporary reloadable object file: $output" 9932b7579f77SDag-Erling Smørgrav 9933b7579f77SDag-Erling Smørgrav # Loop through the commands generated above and execute them. 9934f61ef7f6SDag-Erling Smørgrav save_ifs=$IFS; IFS='~' 9935b7579f77SDag-Erling Smørgrav for cmd in $concat_cmds; do 9936f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 9937f61ef7f6SDag-Erling Smørgrav $opt_quiet || { 9938*46d2f618SCy Schubert func_quote_for_expand "$cmd" 9939*46d2f618SCy Schubert eval "func_echo $func_quote_for_expand_result" 9940b7579f77SDag-Erling Smørgrav } 9941b7579f77SDag-Erling Smørgrav $opt_dry_run || eval "$cmd" || { 9942b7579f77SDag-Erling Smørgrav lt_exit=$? 9943b7579f77SDag-Erling Smørgrav 9944b7579f77SDag-Erling Smørgrav # Restore the uninstalled library and exit 9945f61ef7f6SDag-Erling Smørgrav if test relink = "$opt_mode"; then 9946b7579f77SDag-Erling Smørgrav ( cd "$output_objdir" && \ 9947b7579f77SDag-Erling Smørgrav $RM "${realname}T" && \ 9948b7579f77SDag-Erling Smørgrav $MV "${realname}U" "$realname" ) 9949b7579f77SDag-Erling Smørgrav fi 9950b7579f77SDag-Erling Smørgrav 9951b7579f77SDag-Erling Smørgrav exit $lt_exit 9952b7579f77SDag-Erling Smørgrav } 9953b7579f77SDag-Erling Smørgrav done 9954f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 9955b7579f77SDag-Erling Smørgrav 9956b7579f77SDag-Erling Smørgrav if test -n "$export_symbols_regex" && ${skipped_export-false}; then 9957b7579f77SDag-Erling Smørgrav func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 9958b7579f77SDag-Erling Smørgrav func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 9959b7579f77SDag-Erling Smørgrav fi 9960b7579f77SDag-Erling Smørgrav fi 9961b7579f77SDag-Erling Smørgrav 9962f61ef7f6SDag-Erling Smørgrav ${skipped_export-false} && { 9963b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -n "$include_expsyms"; then 9964f61ef7f6SDag-Erling Smørgrav tmp_export_symbols=$export_symbols 9965f61ef7f6SDag-Erling Smørgrav test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols 9966b7579f77SDag-Erling Smørgrav $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 9967b7579f77SDag-Erling Smørgrav fi 9968b7579f77SDag-Erling Smørgrav 9969b7579f77SDag-Erling Smørgrav if test -n "$orig_export_symbols"; then 9970b7579f77SDag-Erling Smørgrav # The given exports_symbols file has to be filtered, so filter it. 9971f61ef7f6SDag-Erling Smørgrav func_verbose "filter symbol list for '$libname.la' to tag DATA exports" 9972b7579f77SDag-Erling Smørgrav # FIXME: $output_objdir/$libname.filter potentially contains lots of 9973f61ef7f6SDag-Erling Smørgrav # 's' commands, which not all seds can handle. GNU sed should be fine 9974b7579f77SDag-Erling Smørgrav # though. Also, the filter scales superlinearly with the number of 9975b7579f77SDag-Erling Smørgrav # global variables. join(1) would be nice here, but unfortunately 9976b7579f77SDag-Erling Smørgrav # isn't a blessed tool. 9977b7579f77SDag-Erling Smørgrav $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 9978b7579f77SDag-Erling Smørgrav func_append delfiles " $export_symbols $output_objdir/$libname.filter" 9979b7579f77SDag-Erling Smørgrav export_symbols=$output_objdir/$libname.def 9980b7579f77SDag-Erling Smørgrav $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 9981b7579f77SDag-Erling Smørgrav fi 9982f61ef7f6SDag-Erling Smørgrav } 9983b7579f77SDag-Erling Smørgrav 9984b7579f77SDag-Erling Smørgrav libobjs=$output 9985b7579f77SDag-Erling Smørgrav # Restore the value of output. 9986b7579f77SDag-Erling Smørgrav output=$save_output 9987b7579f77SDag-Erling Smørgrav 9988b7579f77SDag-Erling Smørgrav if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 9989b7579f77SDag-Erling Smørgrav eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 9990b7579f77SDag-Erling Smørgrav test "X$libobjs" = "X " && libobjs= 9991b7579f77SDag-Erling Smørgrav fi 9992b7579f77SDag-Erling Smørgrav # Expand the library linking commands again to reset the 9993b7579f77SDag-Erling Smørgrav # value of $libobjs for piecewise linking. 9994b7579f77SDag-Erling Smørgrav 9995b7579f77SDag-Erling Smørgrav # Do each of the archive commands. 9996f61ef7f6SDag-Erling Smørgrav if test yes = "$module" && test -n "$module_cmds"; then 9997b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 9998b7579f77SDag-Erling Smørgrav cmds=$module_expsym_cmds 9999b7579f77SDag-Erling Smørgrav else 10000b7579f77SDag-Erling Smørgrav cmds=$module_cmds 10001b7579f77SDag-Erling Smørgrav fi 10002b7579f77SDag-Erling Smørgrav else 10003b7579f77SDag-Erling Smørgrav if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 10004b7579f77SDag-Erling Smørgrav cmds=$archive_expsym_cmds 10005b7579f77SDag-Erling Smørgrav else 10006b7579f77SDag-Erling Smørgrav cmds=$archive_cmds 10007b7579f77SDag-Erling Smørgrav fi 10008b7579f77SDag-Erling Smørgrav fi 10009b7579f77SDag-Erling Smørgrav fi 10010b7579f77SDag-Erling Smørgrav 10011b7579f77SDag-Erling Smørgrav if test -n "$delfiles"; then 10012b7579f77SDag-Erling Smørgrav # Append the command to remove temporary files to $cmds. 10013b7579f77SDag-Erling Smørgrav eval cmds=\"\$cmds~\$RM $delfiles\" 10014b7579f77SDag-Erling Smørgrav fi 10015b7579f77SDag-Erling Smørgrav 10016b7579f77SDag-Erling Smørgrav # Add any objects from preloaded convenience libraries 10017b7579f77SDag-Erling Smørgrav if test -n "$dlprefiles"; then 10018f61ef7f6SDag-Erling Smørgrav gentop=$output_objdir/${outputname}x 10019b7579f77SDag-Erling Smørgrav func_append generated " $gentop" 10020b7579f77SDag-Erling Smørgrav 10021b7579f77SDag-Erling Smørgrav func_extract_archives $gentop $dlprefiles 10022b7579f77SDag-Erling Smørgrav func_append libobjs " $func_extract_archives_result" 10023b7579f77SDag-Erling Smørgrav test "X$libobjs" = "X " && libobjs= 10024b7579f77SDag-Erling Smørgrav fi 10025b7579f77SDag-Erling Smørgrav 10026f61ef7f6SDag-Erling Smørgrav save_ifs=$IFS; IFS='~' 10027b7579f77SDag-Erling Smørgrav for cmd in $cmds; do 10028f61ef7f6SDag-Erling Smørgrav IFS=$sp$nl 10029b7579f77SDag-Erling Smørgrav eval cmd=\"$cmd\" 10030f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 10031f61ef7f6SDag-Erling Smørgrav $opt_quiet || { 10032*46d2f618SCy Schubert func_quote_for_expand "$cmd" 10033*46d2f618SCy Schubert eval "func_echo $func_quote_for_expand_result" 10034b7579f77SDag-Erling Smørgrav } 10035b7579f77SDag-Erling Smørgrav $opt_dry_run || eval "$cmd" || { 10036b7579f77SDag-Erling Smørgrav lt_exit=$? 10037b7579f77SDag-Erling Smørgrav 10038b7579f77SDag-Erling Smørgrav # Restore the uninstalled library and exit 10039f61ef7f6SDag-Erling Smørgrav if test relink = "$opt_mode"; then 10040b7579f77SDag-Erling Smørgrav ( cd "$output_objdir" && \ 10041b7579f77SDag-Erling Smørgrav $RM "${realname}T" && \ 10042b7579f77SDag-Erling Smørgrav $MV "${realname}U" "$realname" ) 10043b7579f77SDag-Erling Smørgrav fi 10044b7579f77SDag-Erling Smørgrav 10045b7579f77SDag-Erling Smørgrav exit $lt_exit 10046b7579f77SDag-Erling Smørgrav } 10047b7579f77SDag-Erling Smørgrav done 10048f61ef7f6SDag-Erling Smørgrav IFS=$save_ifs 10049b7579f77SDag-Erling Smørgrav 10050b7579f77SDag-Erling Smørgrav # Restore the uninstalled library and exit 10051f61ef7f6SDag-Erling Smørgrav if test relink = "$opt_mode"; then 10052b7579f77SDag-Erling Smørgrav $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 10053b7579f77SDag-Erling Smørgrav 10054b7579f77SDag-Erling Smørgrav if test -n "$convenience"; then 10055b7579f77SDag-Erling Smørgrav if test -z "$whole_archive_flag_spec"; then 10056b7579f77SDag-Erling Smørgrav func_show_eval '${RM}r "$gentop"' 10057b7579f77SDag-Erling Smørgrav fi 10058b7579f77SDag-Erling Smørgrav fi 10059b7579f77SDag-Erling Smørgrav 10060b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 10061b7579f77SDag-Erling Smørgrav fi 10062b7579f77SDag-Erling Smørgrav 10063b7579f77SDag-Erling Smørgrav # Create links to the real library. 10064b7579f77SDag-Erling Smørgrav for linkname in $linknames; do 10065b7579f77SDag-Erling Smørgrav if test "$realname" != "$linkname"; then 10066b7579f77SDag-Erling Smørgrav func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 10067b7579f77SDag-Erling Smørgrav fi 10068b7579f77SDag-Erling Smørgrav done 10069b7579f77SDag-Erling Smørgrav 10070b7579f77SDag-Erling Smørgrav # If -module or -export-dynamic was specified, set the dlname. 10071f61ef7f6SDag-Erling Smørgrav if test yes = "$module" || test yes = "$export_dynamic"; then 10072b7579f77SDag-Erling Smørgrav # On all known operating systems, these are identical. 10073f61ef7f6SDag-Erling Smørgrav dlname=$soname 10074b7579f77SDag-Erling Smørgrav fi 10075b7579f77SDag-Erling Smørgrav fi 10076b7579f77SDag-Erling Smørgrav ;; 10077b7579f77SDag-Erling Smørgrav 10078b7579f77SDag-Erling Smørgrav obj) 10079f61ef7f6SDag-Erling Smørgrav if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then 10080f61ef7f6SDag-Erling Smørgrav func_warning "'-dlopen' is ignored for objects" 10081b7579f77SDag-Erling Smørgrav fi 10082b7579f77SDag-Erling Smørgrav 10083b7579f77SDag-Erling Smørgrav case " $deplibs" in 10084b7579f77SDag-Erling Smørgrav *\ -l* | *\ -L*) 10085f61ef7f6SDag-Erling Smørgrav func_warning "'-l' and '-L' are ignored for objects" ;; 10086b7579f77SDag-Erling Smørgrav esac 10087b7579f77SDag-Erling Smørgrav 10088b7579f77SDag-Erling Smørgrav test -n "$rpath" && \ 10089f61ef7f6SDag-Erling Smørgrav func_warning "'-rpath' is ignored for objects" 10090b7579f77SDag-Erling Smørgrav 10091b7579f77SDag-Erling Smørgrav test -n "$xrpath" && \ 10092f61ef7f6SDag-Erling Smørgrav func_warning "'-R' is ignored for objects" 10093b7579f77SDag-Erling Smørgrav 10094b7579f77SDag-Erling Smørgrav test -n "$vinfo" && \ 10095f61ef7f6SDag-Erling Smørgrav func_warning "'-version-info' is ignored for objects" 10096b7579f77SDag-Erling Smørgrav 10097b7579f77SDag-Erling Smørgrav test -n "$release" && \ 10098f61ef7f6SDag-Erling Smørgrav func_warning "'-release' is ignored for objects" 10099b7579f77SDag-Erling Smørgrav 10100b7579f77SDag-Erling Smørgrav case $output in 10101b7579f77SDag-Erling Smørgrav *.lo) 10102b7579f77SDag-Erling Smørgrav test -n "$objs$old_deplibs" && \ 10103f61ef7f6SDag-Erling Smørgrav func_fatal_error "cannot build library object '$output' from non-libtool objects" 10104b7579f77SDag-Erling Smørgrav 10105b7579f77SDag-Erling Smørgrav libobj=$output 10106b7579f77SDag-Erling Smørgrav func_lo2o "$libobj" 10107b7579f77SDag-Erling Smørgrav obj=$func_lo2o_result 10108b7579f77SDag-Erling Smørgrav ;; 10109b7579f77SDag-Erling Smørgrav *) 10110b7579f77SDag-Erling Smørgrav libobj= 10111f61ef7f6SDag-Erling Smørgrav obj=$output 10112b7579f77SDag-Erling Smørgrav ;; 10113b7579f77SDag-Erling Smørgrav esac 10114b7579f77SDag-Erling Smørgrav 10115b7579f77SDag-Erling Smørgrav # Delete the old objects. 10116b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $obj $libobj 10117b7579f77SDag-Erling Smørgrav 10118b7579f77SDag-Erling Smørgrav # Objects from convenience libraries. This assumes 10119b7579f77SDag-Erling Smørgrav # single-version convenience libraries. Whenever we create 10120b7579f77SDag-Erling Smørgrav # different ones for PIC/non-PIC, this we'll have to duplicate 10121b7579f77SDag-Erling Smørgrav # the extraction. 10122b7579f77SDag-Erling Smørgrav reload_conv_objs= 10123b7579f77SDag-Erling Smørgrav gentop= 10124f61ef7f6SDag-Erling Smørgrav # if reload_cmds runs $LD directly, get rid of -Wl from 10125f61ef7f6SDag-Erling Smørgrav # whole_archive_flag_spec and hope we can get by with turning comma 10126f61ef7f6SDag-Erling Smørgrav # into space. 10127f61ef7f6SDag-Erling Smørgrav case $reload_cmds in 10128f61ef7f6SDag-Erling Smørgrav *\$LD[\ \$]*) wl= ;; 10129f61ef7f6SDag-Erling Smørgrav esac 10130b7579f77SDag-Erling Smørgrav if test -n "$convenience"; then 10131b7579f77SDag-Erling Smørgrav if test -n "$whole_archive_flag_spec"; then 10132b7579f77SDag-Erling Smørgrav eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 10133f61ef7f6SDag-Erling Smørgrav test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 10134f61ef7f6SDag-Erling Smørgrav reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 10135b7579f77SDag-Erling Smørgrav else 10136f61ef7f6SDag-Erling Smørgrav gentop=$output_objdir/${obj}x 10137b7579f77SDag-Erling Smørgrav func_append generated " $gentop" 10138b7579f77SDag-Erling Smørgrav 10139b7579f77SDag-Erling Smørgrav func_extract_archives $gentop $convenience 10140b7579f77SDag-Erling Smørgrav reload_conv_objs="$reload_objs $func_extract_archives_result" 10141b7579f77SDag-Erling Smørgrav fi 10142b7579f77SDag-Erling Smørgrav fi 10143b7579f77SDag-Erling Smørgrav 10144b7579f77SDag-Erling Smørgrav # If we're not building shared, we need to use non_pic_objs 10145f61ef7f6SDag-Erling Smørgrav test yes = "$build_libtool_libs" || libobjs=$non_pic_objects 10146b7579f77SDag-Erling Smørgrav 10147b7579f77SDag-Erling Smørgrav # Create the old-style object. 10148f61ef7f6SDag-Erling Smørgrav reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs 10149b7579f77SDag-Erling Smørgrav 10150f61ef7f6SDag-Erling Smørgrav output=$obj 10151b7579f77SDag-Erling Smørgrav func_execute_cmds "$reload_cmds" 'exit $?' 10152b7579f77SDag-Erling Smørgrav 10153b7579f77SDag-Erling Smørgrav # Exit if we aren't doing a library object file. 10154b7579f77SDag-Erling Smørgrav if test -z "$libobj"; then 10155b7579f77SDag-Erling Smørgrav if test -n "$gentop"; then 10156b7579f77SDag-Erling Smørgrav func_show_eval '${RM}r "$gentop"' 10157b7579f77SDag-Erling Smørgrav fi 10158b7579f77SDag-Erling Smørgrav 10159b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 10160b7579f77SDag-Erling Smørgrav fi 10161b7579f77SDag-Erling Smørgrav 10162f61ef7f6SDag-Erling Smørgrav test yes = "$build_libtool_libs" || { 10163b7579f77SDag-Erling Smørgrav if test -n "$gentop"; then 10164b7579f77SDag-Erling Smørgrav func_show_eval '${RM}r "$gentop"' 10165b7579f77SDag-Erling Smørgrav fi 10166b7579f77SDag-Erling Smørgrav 10167b7579f77SDag-Erling Smørgrav # Create an invalid libtool object if no PIC, so that we don't 10168b7579f77SDag-Erling Smørgrav # accidentally link it into a program. 10169b7579f77SDag-Erling Smørgrav # $show "echo timestamp > $libobj" 10170b7579f77SDag-Erling Smørgrav # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 10171b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 10172f61ef7f6SDag-Erling Smørgrav } 10173b7579f77SDag-Erling Smørgrav 10174f61ef7f6SDag-Erling Smørgrav if test -n "$pic_flag" || test default != "$pic_mode"; then 10175b7579f77SDag-Erling Smørgrav # Only do commands if we really have different PIC objects. 10176b7579f77SDag-Erling Smørgrav reload_objs="$libobjs $reload_conv_objs" 10177f61ef7f6SDag-Erling Smørgrav output=$libobj 10178b7579f77SDag-Erling Smørgrav func_execute_cmds "$reload_cmds" 'exit $?' 10179b7579f77SDag-Erling Smørgrav fi 10180b7579f77SDag-Erling Smørgrav 10181b7579f77SDag-Erling Smørgrav if test -n "$gentop"; then 10182b7579f77SDag-Erling Smørgrav func_show_eval '${RM}r "$gentop"' 10183b7579f77SDag-Erling Smørgrav fi 10184b7579f77SDag-Erling Smørgrav 10185b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 10186b7579f77SDag-Erling Smørgrav ;; 10187b7579f77SDag-Erling Smørgrav 10188b7579f77SDag-Erling Smørgrav prog) 10189b7579f77SDag-Erling Smørgrav case $host in 10190b7579f77SDag-Erling Smørgrav *cygwin*) func_stripname '' '.exe' "$output" 10191b7579f77SDag-Erling Smørgrav output=$func_stripname_result.exe;; 10192b7579f77SDag-Erling Smørgrav esac 10193b7579f77SDag-Erling Smørgrav test -n "$vinfo" && \ 10194f61ef7f6SDag-Erling Smørgrav func_warning "'-version-info' is ignored for programs" 10195b7579f77SDag-Erling Smørgrav 10196b7579f77SDag-Erling Smørgrav test -n "$release" && \ 10197f61ef7f6SDag-Erling Smørgrav func_warning "'-release' is ignored for programs" 10198b7579f77SDag-Erling Smørgrav 10199f61ef7f6SDag-Erling Smørgrav $preload \ 10200f61ef7f6SDag-Erling Smørgrav && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ 10201f61ef7f6SDag-Erling Smørgrav && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." 10202b7579f77SDag-Erling Smørgrav 10203b7579f77SDag-Erling Smørgrav case $host in 10204b7579f77SDag-Erling Smørgrav *-*-rhapsody* | *-*-darwin1.[012]) 10205b7579f77SDag-Erling Smørgrav # On Rhapsody replace the C library is the System framework 10206b7579f77SDag-Erling Smørgrav compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 10207b7579f77SDag-Erling Smørgrav finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 10208b7579f77SDag-Erling Smørgrav ;; 10209b7579f77SDag-Erling Smørgrav esac 10210b7579f77SDag-Erling Smørgrav 10211b7579f77SDag-Erling Smørgrav case $host in 10212b7579f77SDag-Erling Smørgrav *-*-darwin*) 10213b7579f77SDag-Erling Smørgrav # Don't allow lazy linking, it breaks C++ global constructors 10214b7579f77SDag-Erling Smørgrav # But is supposedly fixed on 10.4 or later (yay!). 10215f61ef7f6SDag-Erling Smørgrav if test CXX = "$tagname"; then 10216b7579f77SDag-Erling Smørgrav case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10217b7579f77SDag-Erling Smørgrav 10.[0123]) 10218f61ef7f6SDag-Erling Smørgrav func_append compile_command " $wl-bind_at_load" 10219f61ef7f6SDag-Erling Smørgrav func_append finalize_command " $wl-bind_at_load" 10220b7579f77SDag-Erling Smørgrav ;; 10221b7579f77SDag-Erling Smørgrav esac 10222b7579f77SDag-Erling Smørgrav fi 10223b7579f77SDag-Erling Smørgrav # Time to change all our "foo.ltframework" stuff back to "-framework foo" 10224b7579f77SDag-Erling Smørgrav compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10225b7579f77SDag-Erling Smørgrav finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 10226b7579f77SDag-Erling Smørgrav ;; 10227b7579f77SDag-Erling Smørgrav esac 10228b7579f77SDag-Erling Smørgrav 10229b7579f77SDag-Erling Smørgrav 10230b7579f77SDag-Erling Smørgrav # move library search paths that coincide with paths to not yet 10231b7579f77SDag-Erling Smørgrav # installed libraries to the beginning of the library search list 10232b7579f77SDag-Erling Smørgrav new_libs= 10233b7579f77SDag-Erling Smørgrav for path in $notinst_path; do 10234b7579f77SDag-Erling Smørgrav case " $new_libs " in 10235b7579f77SDag-Erling Smørgrav *" -L$path/$objdir "*) ;; 10236b7579f77SDag-Erling Smørgrav *) 10237b7579f77SDag-Erling Smørgrav case " $compile_deplibs " in 10238b7579f77SDag-Erling Smørgrav *" -L$path/$objdir "*) 10239b7579f77SDag-Erling Smørgrav func_append new_libs " -L$path/$objdir" ;; 10240b7579f77SDag-Erling Smørgrav esac 10241b7579f77SDag-Erling Smørgrav ;; 10242b7579f77SDag-Erling Smørgrav esac 10243b7579f77SDag-Erling Smørgrav done 10244b7579f77SDag-Erling Smørgrav for deplib in $compile_deplibs; do 10245b7579f77SDag-Erling Smørgrav case $deplib in 10246b7579f77SDag-Erling Smørgrav -L*) 10247b7579f77SDag-Erling Smørgrav case " $new_libs " in 10248b7579f77SDag-Erling Smørgrav *" $deplib "*) ;; 10249b7579f77SDag-Erling Smørgrav *) func_append new_libs " $deplib" ;; 10250b7579f77SDag-Erling Smørgrav esac 10251b7579f77SDag-Erling Smørgrav ;; 10252b7579f77SDag-Erling Smørgrav *) func_append new_libs " $deplib" ;; 10253b7579f77SDag-Erling Smørgrav esac 10254b7579f77SDag-Erling Smørgrav done 10255f61ef7f6SDag-Erling Smørgrav compile_deplibs=$new_libs 10256b7579f77SDag-Erling Smørgrav 10257b7579f77SDag-Erling Smørgrav 10258b7579f77SDag-Erling Smørgrav func_append compile_command " $compile_deplibs" 10259b7579f77SDag-Erling Smørgrav func_append finalize_command " $finalize_deplibs" 10260b7579f77SDag-Erling Smørgrav 10261b7579f77SDag-Erling Smørgrav if test -n "$rpath$xrpath"; then 10262b7579f77SDag-Erling Smørgrav # If the user specified any rpath flags, then add them. 10263b7579f77SDag-Erling Smørgrav for libdir in $rpath $xrpath; do 10264b7579f77SDag-Erling Smørgrav # This is the magic to use -rpath. 10265b7579f77SDag-Erling Smørgrav case "$finalize_rpath " in 10266b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 10267b7579f77SDag-Erling Smørgrav *) func_append finalize_rpath " $libdir" ;; 10268b7579f77SDag-Erling Smørgrav esac 10269b7579f77SDag-Erling Smørgrav done 10270b7579f77SDag-Erling Smørgrav fi 10271b7579f77SDag-Erling Smørgrav 10272b7579f77SDag-Erling Smørgrav # Now hardcode the library paths 10273b7579f77SDag-Erling Smørgrav rpath= 10274b7579f77SDag-Erling Smørgrav hardcode_libdirs= 10275b7579f77SDag-Erling Smørgrav for libdir in $compile_rpath $finalize_rpath; do 10276b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_flag_spec"; then 10277b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_separator"; then 10278b7579f77SDag-Erling Smørgrav if test -z "$hardcode_libdirs"; then 10279f61ef7f6SDag-Erling Smørgrav hardcode_libdirs=$libdir 10280b7579f77SDag-Erling Smørgrav else 10281b7579f77SDag-Erling Smørgrav # Just accumulate the unique libdirs. 10282b7579f77SDag-Erling Smørgrav case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10283b7579f77SDag-Erling Smørgrav *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10284b7579f77SDag-Erling Smørgrav ;; 10285b7579f77SDag-Erling Smørgrav *) 10286b7579f77SDag-Erling Smørgrav func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10287b7579f77SDag-Erling Smørgrav ;; 10288b7579f77SDag-Erling Smørgrav esac 10289b7579f77SDag-Erling Smørgrav fi 10290b7579f77SDag-Erling Smørgrav else 10291b7579f77SDag-Erling Smørgrav eval flag=\"$hardcode_libdir_flag_spec\" 10292b7579f77SDag-Erling Smørgrav func_append rpath " $flag" 10293b7579f77SDag-Erling Smørgrav fi 10294b7579f77SDag-Erling Smørgrav elif test -n "$runpath_var"; then 10295b7579f77SDag-Erling Smørgrav case "$perm_rpath " in 10296b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 10297b7579f77SDag-Erling Smørgrav *) func_append perm_rpath " $libdir" ;; 10298b7579f77SDag-Erling Smørgrav esac 10299b7579f77SDag-Erling Smørgrav fi 10300b7579f77SDag-Erling Smørgrav case $host in 10301b7579f77SDag-Erling Smørgrav *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 10302f61ef7f6SDag-Erling Smørgrav testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` 10303b7579f77SDag-Erling Smørgrav case :$dllsearchpath: in 10304b7579f77SDag-Erling Smørgrav *":$libdir:"*) ;; 10305b7579f77SDag-Erling Smørgrav ::) dllsearchpath=$libdir;; 10306b7579f77SDag-Erling Smørgrav *) func_append dllsearchpath ":$libdir";; 10307b7579f77SDag-Erling Smørgrav esac 10308b7579f77SDag-Erling Smørgrav case :$dllsearchpath: in 10309b7579f77SDag-Erling Smørgrav *":$testbindir:"*) ;; 10310b7579f77SDag-Erling Smørgrav ::) dllsearchpath=$testbindir;; 10311b7579f77SDag-Erling Smørgrav *) func_append dllsearchpath ":$testbindir";; 10312b7579f77SDag-Erling Smørgrav esac 10313b7579f77SDag-Erling Smørgrav ;; 10314b7579f77SDag-Erling Smørgrav esac 10315b7579f77SDag-Erling Smørgrav done 10316b7579f77SDag-Erling Smørgrav # Substitute the hardcoded libdirs into the rpath. 10317b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_separator" && 10318b7579f77SDag-Erling Smørgrav test -n "$hardcode_libdirs"; then 10319f61ef7f6SDag-Erling Smørgrav libdir=$hardcode_libdirs 10320b7579f77SDag-Erling Smørgrav eval rpath=\" $hardcode_libdir_flag_spec\" 10321b7579f77SDag-Erling Smørgrav fi 10322f61ef7f6SDag-Erling Smørgrav compile_rpath=$rpath 10323b7579f77SDag-Erling Smørgrav 10324b7579f77SDag-Erling Smørgrav rpath= 10325b7579f77SDag-Erling Smørgrav hardcode_libdirs= 10326b7579f77SDag-Erling Smørgrav for libdir in $finalize_rpath; do 10327b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_flag_spec"; then 10328b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_separator"; then 10329b7579f77SDag-Erling Smørgrav if test -z "$hardcode_libdirs"; then 10330f61ef7f6SDag-Erling Smørgrav hardcode_libdirs=$libdir 10331b7579f77SDag-Erling Smørgrav else 10332b7579f77SDag-Erling Smørgrav # Just accumulate the unique libdirs. 10333b7579f77SDag-Erling Smørgrav case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 10334b7579f77SDag-Erling Smørgrav *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 10335b7579f77SDag-Erling Smørgrav ;; 10336b7579f77SDag-Erling Smørgrav *) 10337b7579f77SDag-Erling Smørgrav func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 10338b7579f77SDag-Erling Smørgrav ;; 10339b7579f77SDag-Erling Smørgrav esac 10340b7579f77SDag-Erling Smørgrav fi 10341b7579f77SDag-Erling Smørgrav else 10342b7579f77SDag-Erling Smørgrav eval flag=\"$hardcode_libdir_flag_spec\" 10343b7579f77SDag-Erling Smørgrav func_append rpath " $flag" 10344b7579f77SDag-Erling Smørgrav fi 10345b7579f77SDag-Erling Smørgrav elif test -n "$runpath_var"; then 10346b7579f77SDag-Erling Smørgrav case "$finalize_perm_rpath " in 10347b7579f77SDag-Erling Smørgrav *" $libdir "*) ;; 10348b7579f77SDag-Erling Smørgrav *) func_append finalize_perm_rpath " $libdir" ;; 10349b7579f77SDag-Erling Smørgrav esac 10350b7579f77SDag-Erling Smørgrav fi 10351b7579f77SDag-Erling Smørgrav done 10352b7579f77SDag-Erling Smørgrav # Substitute the hardcoded libdirs into the rpath. 10353b7579f77SDag-Erling Smørgrav if test -n "$hardcode_libdir_separator" && 10354b7579f77SDag-Erling Smørgrav test -n "$hardcode_libdirs"; then 10355f61ef7f6SDag-Erling Smørgrav libdir=$hardcode_libdirs 10356b7579f77SDag-Erling Smørgrav eval rpath=\" $hardcode_libdir_flag_spec\" 10357b7579f77SDag-Erling Smørgrav fi 10358f61ef7f6SDag-Erling Smørgrav finalize_rpath=$rpath 10359b7579f77SDag-Erling Smørgrav 10360f61ef7f6SDag-Erling Smørgrav if test -n "$libobjs" && test yes = "$build_old_libs"; then 10361b7579f77SDag-Erling Smørgrav # Transform all the library objects into standard objects. 10362b7579f77SDag-Erling Smørgrav compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10363b7579f77SDag-Erling Smørgrav finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 10364b7579f77SDag-Erling Smørgrav fi 10365b7579f77SDag-Erling Smørgrav 10366f61ef7f6SDag-Erling Smørgrav func_generate_dlsyms "$outputname" "@PROGRAM@" false 10367b7579f77SDag-Erling Smørgrav 10368b7579f77SDag-Erling Smørgrav # template prelinking step 10369b7579f77SDag-Erling Smørgrav if test -n "$prelink_cmds"; then 10370b7579f77SDag-Erling Smørgrav func_execute_cmds "$prelink_cmds" 'exit $?' 10371b7579f77SDag-Erling Smørgrav fi 10372b7579f77SDag-Erling Smørgrav 10373f61ef7f6SDag-Erling Smørgrav wrappers_required=: 10374b7579f77SDag-Erling Smørgrav case $host in 10375b7579f77SDag-Erling Smørgrav *cegcc* | *mingw32ce*) 10376b7579f77SDag-Erling Smørgrav # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 10377f61ef7f6SDag-Erling Smørgrav wrappers_required=false 10378b7579f77SDag-Erling Smørgrav ;; 10379b7579f77SDag-Erling Smørgrav *cygwin* | *mingw* ) 10380f61ef7f6SDag-Erling Smørgrav test yes = "$build_libtool_libs" || wrappers_required=false 10381b7579f77SDag-Erling Smørgrav ;; 10382b7579f77SDag-Erling Smørgrav *) 10383f61ef7f6SDag-Erling Smørgrav if test no = "$need_relink" || test yes != "$build_libtool_libs"; then 10384f61ef7f6SDag-Erling Smørgrav wrappers_required=false 10385b7579f77SDag-Erling Smørgrav fi 10386b7579f77SDag-Erling Smørgrav ;; 10387b7579f77SDag-Erling Smørgrav esac 10388f61ef7f6SDag-Erling Smørgrav $wrappers_required || { 10389b7579f77SDag-Erling Smørgrav # Replace the output file specification. 10390b7579f77SDag-Erling Smørgrav compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10391f61ef7f6SDag-Erling Smørgrav link_command=$compile_command$compile_rpath 10392b7579f77SDag-Erling Smørgrav 10393b7579f77SDag-Erling Smørgrav # We have no uninstalled library dependencies, so finalize right now. 10394b7579f77SDag-Erling Smørgrav exit_status=0 10395b7579f77SDag-Erling Smørgrav func_show_eval "$link_command" 'exit_status=$?' 10396b7579f77SDag-Erling Smørgrav 10397b7579f77SDag-Erling Smørgrav if test -n "$postlink_cmds"; then 10398b7579f77SDag-Erling Smørgrav func_to_tool_file "$output" 10399b7579f77SDag-Erling Smørgrav postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10400b7579f77SDag-Erling Smørgrav func_execute_cmds "$postlink_cmds" 'exit $?' 10401b7579f77SDag-Erling Smørgrav fi 10402b7579f77SDag-Erling Smørgrav 10403b7579f77SDag-Erling Smørgrav # Delete the generated files. 10404f61ef7f6SDag-Erling Smørgrav if test -f "$output_objdir/${outputname}S.$objext"; then 10405f61ef7f6SDag-Erling Smørgrav func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' 10406b7579f77SDag-Erling Smørgrav fi 10407b7579f77SDag-Erling Smørgrav 10408b7579f77SDag-Erling Smørgrav exit $exit_status 10409f61ef7f6SDag-Erling Smørgrav } 10410b7579f77SDag-Erling Smørgrav 10411b7579f77SDag-Erling Smørgrav if test -n "$compile_shlibpath$finalize_shlibpath"; then 10412b7579f77SDag-Erling Smørgrav compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 10413b7579f77SDag-Erling Smørgrav fi 10414b7579f77SDag-Erling Smørgrav if test -n "$finalize_shlibpath"; then 10415b7579f77SDag-Erling Smørgrav finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 10416b7579f77SDag-Erling Smørgrav fi 10417b7579f77SDag-Erling Smørgrav 10418b7579f77SDag-Erling Smørgrav compile_var= 10419b7579f77SDag-Erling Smørgrav finalize_var= 10420b7579f77SDag-Erling Smørgrav if test -n "$runpath_var"; then 10421b7579f77SDag-Erling Smørgrav if test -n "$perm_rpath"; then 10422b7579f77SDag-Erling Smørgrav # We should set the runpath_var. 10423b7579f77SDag-Erling Smørgrav rpath= 10424b7579f77SDag-Erling Smørgrav for dir in $perm_rpath; do 10425b7579f77SDag-Erling Smørgrav func_append rpath "$dir:" 10426b7579f77SDag-Erling Smørgrav done 10427b7579f77SDag-Erling Smørgrav compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 10428b7579f77SDag-Erling Smørgrav fi 10429b7579f77SDag-Erling Smørgrav if test -n "$finalize_perm_rpath"; then 10430b7579f77SDag-Erling Smørgrav # We should set the runpath_var. 10431b7579f77SDag-Erling Smørgrav rpath= 10432b7579f77SDag-Erling Smørgrav for dir in $finalize_perm_rpath; do 10433b7579f77SDag-Erling Smørgrav func_append rpath "$dir:" 10434b7579f77SDag-Erling Smørgrav done 10435b7579f77SDag-Erling Smørgrav finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 10436b7579f77SDag-Erling Smørgrav fi 10437b7579f77SDag-Erling Smørgrav fi 10438b7579f77SDag-Erling Smørgrav 10439f61ef7f6SDag-Erling Smørgrav if test yes = "$no_install"; then 10440b7579f77SDag-Erling Smørgrav # We don't need to create a wrapper script. 10441f61ef7f6SDag-Erling Smørgrav link_command=$compile_var$compile_command$compile_rpath 10442b7579f77SDag-Erling Smørgrav # Replace the output file specification. 10443b7579f77SDag-Erling Smørgrav link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 10444b7579f77SDag-Erling Smørgrav # Delete the old output file. 10445b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $output 10446b7579f77SDag-Erling Smørgrav # Link the executable and exit 10447b7579f77SDag-Erling Smørgrav func_show_eval "$link_command" 'exit $?' 10448b7579f77SDag-Erling Smørgrav 10449b7579f77SDag-Erling Smørgrav if test -n "$postlink_cmds"; then 10450b7579f77SDag-Erling Smørgrav func_to_tool_file "$output" 10451b7579f77SDag-Erling Smørgrav postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 10452b7579f77SDag-Erling Smørgrav func_execute_cmds "$postlink_cmds" 'exit $?' 10453b7579f77SDag-Erling Smørgrav fi 10454b7579f77SDag-Erling Smørgrav 10455b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 10456b7579f77SDag-Erling Smørgrav fi 10457b7579f77SDag-Erling Smørgrav 10458f61ef7f6SDag-Erling Smørgrav case $hardcode_action,$fast_install in 10459f61ef7f6SDag-Erling Smørgrav relink,*) 10460b7579f77SDag-Erling Smørgrav # Fast installation is not supported 10461f61ef7f6SDag-Erling Smørgrav link_command=$compile_var$compile_command$compile_rpath 10462f61ef7f6SDag-Erling Smørgrav relink_command=$finalize_var$finalize_command$finalize_rpath 10463b7579f77SDag-Erling Smørgrav 10464b7579f77SDag-Erling Smørgrav func_warning "this platform does not like uninstalled shared libraries" 10465f61ef7f6SDag-Erling Smørgrav func_warning "'$output' will be relinked during installation" 10466f61ef7f6SDag-Erling Smørgrav ;; 10467f61ef7f6SDag-Erling Smørgrav *,yes) 10468f61ef7f6SDag-Erling Smørgrav link_command=$finalize_var$compile_command$finalize_rpath 10469b7579f77SDag-Erling Smørgrav relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 10470f61ef7f6SDag-Erling Smørgrav ;; 10471f61ef7f6SDag-Erling Smørgrav *,no) 10472f61ef7f6SDag-Erling Smørgrav link_command=$compile_var$compile_command$compile_rpath 10473f61ef7f6SDag-Erling Smørgrav relink_command=$finalize_var$finalize_command$finalize_rpath 10474f61ef7f6SDag-Erling Smørgrav ;; 10475f61ef7f6SDag-Erling Smørgrav *,needless) 10476f61ef7f6SDag-Erling Smørgrav link_command=$finalize_var$compile_command$finalize_rpath 10477b7579f77SDag-Erling Smørgrav relink_command= 10478f61ef7f6SDag-Erling Smørgrav ;; 10479f61ef7f6SDag-Erling Smørgrav esac 10480b7579f77SDag-Erling Smørgrav 10481b7579f77SDag-Erling Smørgrav # Replace the output file specification. 10482b7579f77SDag-Erling Smørgrav link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 10483b7579f77SDag-Erling Smørgrav 10484b7579f77SDag-Erling Smørgrav # Delete the old output files. 10485b7579f77SDag-Erling Smørgrav $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 10486b7579f77SDag-Erling Smørgrav 10487b7579f77SDag-Erling Smørgrav func_show_eval "$link_command" 'exit $?' 10488b7579f77SDag-Erling Smørgrav 10489b7579f77SDag-Erling Smørgrav if test -n "$postlink_cmds"; then 10490b7579f77SDag-Erling Smørgrav func_to_tool_file "$output_objdir/$outputname" 10491b7579f77SDag-Erling Smørgrav 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'` 10492b7579f77SDag-Erling Smørgrav func_execute_cmds "$postlink_cmds" 'exit $?' 10493b7579f77SDag-Erling Smørgrav fi 10494b7579f77SDag-Erling Smørgrav 10495b7579f77SDag-Erling Smørgrav # Now create the wrapper script. 10496b7579f77SDag-Erling Smørgrav func_verbose "creating $output" 10497b7579f77SDag-Erling Smørgrav 10498b7579f77SDag-Erling Smørgrav # Quote the relink command for shipping. 10499b7579f77SDag-Erling Smørgrav if test -n "$relink_command"; then 10500b7579f77SDag-Erling Smørgrav # Preserve any variables that may affect compiler behavior 10501b7579f77SDag-Erling Smørgrav for var in $variables_saved_for_relink; do 10502b7579f77SDag-Erling Smørgrav if eval test -z \"\${$var+set}\"; then 10503b7579f77SDag-Erling Smørgrav relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10504b7579f77SDag-Erling Smørgrav elif eval var_value=\$$var; test -z "$var_value"; then 10505b7579f77SDag-Erling Smørgrav relink_command="$var=; export $var; $relink_command" 10506b7579f77SDag-Erling Smørgrav else 10507*46d2f618SCy Schubert func_quote_for_eval "$var_value" 10508*46d2f618SCy Schubert relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10509b7579f77SDag-Erling Smørgrav fi 10510b7579f77SDag-Erling Smørgrav done 10511*46d2f618SCy Schubert relink_command="(cd `pwd`; $relink_command)" 10512*46d2f618SCy Schubert relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10513b7579f77SDag-Erling Smørgrav fi 10514b7579f77SDag-Erling Smørgrav 10515b7579f77SDag-Erling Smørgrav # Only actually do things if not in dry run mode. 10516b7579f77SDag-Erling Smørgrav $opt_dry_run || { 10517b7579f77SDag-Erling Smørgrav # win32 will think the script is a binary if it has 10518b7579f77SDag-Erling Smørgrav # a .exe suffix, so we strip it off here. 10519b7579f77SDag-Erling Smørgrav case $output in 10520b7579f77SDag-Erling Smørgrav *.exe) func_stripname '' '.exe' "$output" 10521b7579f77SDag-Erling Smørgrav output=$func_stripname_result ;; 10522b7579f77SDag-Erling Smørgrav esac 10523b7579f77SDag-Erling Smørgrav # test for cygwin because mv fails w/o .exe extensions 10524b7579f77SDag-Erling Smørgrav case $host in 10525b7579f77SDag-Erling Smørgrav *cygwin*) 10526b7579f77SDag-Erling Smørgrav exeext=.exe 10527b7579f77SDag-Erling Smørgrav func_stripname '' '.exe' "$outputname" 10528b7579f77SDag-Erling Smørgrav outputname=$func_stripname_result ;; 10529b7579f77SDag-Erling Smørgrav *) exeext= ;; 10530b7579f77SDag-Erling Smørgrav esac 10531b7579f77SDag-Erling Smørgrav case $host in 10532b7579f77SDag-Erling Smørgrav *cygwin* | *mingw* ) 10533b7579f77SDag-Erling Smørgrav func_dirname_and_basename "$output" "" "." 10534b7579f77SDag-Erling Smørgrav output_name=$func_basename_result 10535b7579f77SDag-Erling Smørgrav output_path=$func_dirname_result 10536f61ef7f6SDag-Erling Smørgrav cwrappersource=$output_path/$objdir/lt-$output_name.c 10537f61ef7f6SDag-Erling Smørgrav cwrapper=$output_path/$output_name.exe 10538b7579f77SDag-Erling Smørgrav $RM $cwrappersource $cwrapper 10539b7579f77SDag-Erling Smørgrav trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 10540b7579f77SDag-Erling Smørgrav 10541b7579f77SDag-Erling Smørgrav func_emit_cwrapperexe_src > $cwrappersource 10542b7579f77SDag-Erling Smørgrav 10543b7579f77SDag-Erling Smørgrav # The wrapper executable is built using the $host compiler, 10544b7579f77SDag-Erling Smørgrav # because it contains $host paths and files. If cross- 10545b7579f77SDag-Erling Smørgrav # compiling, it, like the target executable, must be 10546b7579f77SDag-Erling Smørgrav # executed on the $host or under an emulation environment. 10547b7579f77SDag-Erling Smørgrav $opt_dry_run || { 10548b7579f77SDag-Erling Smørgrav $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 10549b7579f77SDag-Erling Smørgrav $STRIP $cwrapper 10550b7579f77SDag-Erling Smørgrav } 10551b7579f77SDag-Erling Smørgrav 10552b7579f77SDag-Erling Smørgrav # Now, create the wrapper script for func_source use: 10553b7579f77SDag-Erling Smørgrav func_ltwrapper_scriptname $cwrapper 10554b7579f77SDag-Erling Smørgrav $RM $func_ltwrapper_scriptname_result 10555b7579f77SDag-Erling Smørgrav trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 10556b7579f77SDag-Erling Smørgrav $opt_dry_run || { 10557b7579f77SDag-Erling Smørgrav # note: this script will not be executed, so do not chmod. 10558b7579f77SDag-Erling Smørgrav if test "x$build" = "x$host"; then 10559b7579f77SDag-Erling Smørgrav $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 10560b7579f77SDag-Erling Smørgrav else 10561b7579f77SDag-Erling Smørgrav func_emit_wrapper no > $func_ltwrapper_scriptname_result 10562b7579f77SDag-Erling Smørgrav fi 10563b7579f77SDag-Erling Smørgrav } 10564b7579f77SDag-Erling Smørgrav ;; 10565b7579f77SDag-Erling Smørgrav * ) 10566b7579f77SDag-Erling Smørgrav $RM $output 10567b7579f77SDag-Erling Smørgrav trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 10568b7579f77SDag-Erling Smørgrav 10569b7579f77SDag-Erling Smørgrav func_emit_wrapper no > $output 10570b7579f77SDag-Erling Smørgrav chmod +x $output 10571b7579f77SDag-Erling Smørgrav ;; 10572b7579f77SDag-Erling Smørgrav esac 10573b7579f77SDag-Erling Smørgrav } 10574b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 10575b7579f77SDag-Erling Smørgrav ;; 10576b7579f77SDag-Erling Smørgrav esac 10577b7579f77SDag-Erling Smørgrav 10578b7579f77SDag-Erling Smørgrav # See if we need to build an old-fashioned archive. 10579b7579f77SDag-Erling Smørgrav for oldlib in $oldlibs; do 10580b7579f77SDag-Erling Smørgrav 10581f61ef7f6SDag-Erling Smørgrav case $build_libtool_libs in 10582f61ef7f6SDag-Erling Smørgrav convenience) 10583b7579f77SDag-Erling Smørgrav oldobjs="$libobjs_save $symfileobj" 10584f61ef7f6SDag-Erling Smørgrav addlibs=$convenience 10585b7579f77SDag-Erling Smørgrav build_libtool_libs=no 10586f61ef7f6SDag-Erling Smørgrav ;; 10587f61ef7f6SDag-Erling Smørgrav module) 10588f61ef7f6SDag-Erling Smørgrav oldobjs=$libobjs_save 10589f61ef7f6SDag-Erling Smørgrav addlibs=$old_convenience 10590b7579f77SDag-Erling Smørgrav build_libtool_libs=no 10591f61ef7f6SDag-Erling Smørgrav ;; 10592f61ef7f6SDag-Erling Smørgrav *) 10593b7579f77SDag-Erling Smørgrav oldobjs="$old_deplibs $non_pic_objects" 10594f61ef7f6SDag-Erling Smørgrav $preload && test -f "$symfileobj" \ 10595f61ef7f6SDag-Erling Smørgrav && func_append oldobjs " $symfileobj" 10596f61ef7f6SDag-Erling Smørgrav addlibs=$old_convenience 10597f61ef7f6SDag-Erling Smørgrav ;; 10598f61ef7f6SDag-Erling Smørgrav esac 10599b7579f77SDag-Erling Smørgrav 10600b7579f77SDag-Erling Smørgrav if test -n "$addlibs"; then 10601f61ef7f6SDag-Erling Smørgrav gentop=$output_objdir/${outputname}x 10602b7579f77SDag-Erling Smørgrav func_append generated " $gentop" 10603b7579f77SDag-Erling Smørgrav 10604b7579f77SDag-Erling Smørgrav func_extract_archives $gentop $addlibs 10605b7579f77SDag-Erling Smørgrav func_append oldobjs " $func_extract_archives_result" 10606b7579f77SDag-Erling Smørgrav fi 10607b7579f77SDag-Erling Smørgrav 10608b7579f77SDag-Erling Smørgrav # Do each command in the archive commands. 10609f61ef7f6SDag-Erling Smørgrav if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then 10610b7579f77SDag-Erling Smørgrav cmds=$old_archive_from_new_cmds 10611b7579f77SDag-Erling Smørgrav else 10612b7579f77SDag-Erling Smørgrav 10613b7579f77SDag-Erling Smørgrav # Add any objects from preloaded convenience libraries 10614b7579f77SDag-Erling Smørgrav if test -n "$dlprefiles"; then 10615f61ef7f6SDag-Erling Smørgrav gentop=$output_objdir/${outputname}x 10616b7579f77SDag-Erling Smørgrav func_append generated " $gentop" 10617b7579f77SDag-Erling Smørgrav 10618b7579f77SDag-Erling Smørgrav func_extract_archives $gentop $dlprefiles 10619b7579f77SDag-Erling Smørgrav func_append oldobjs " $func_extract_archives_result" 10620b7579f77SDag-Erling Smørgrav fi 10621b7579f77SDag-Erling Smørgrav 10622b7579f77SDag-Erling Smørgrav # POSIX demands no paths to be encoded in archives. We have 10623b7579f77SDag-Erling Smørgrav # to avoid creating archives with duplicate basenames if we 10624b7579f77SDag-Erling Smørgrav # might have to extract them afterwards, e.g., when creating a 10625b7579f77SDag-Erling Smørgrav # static archive out of a convenience library, or when linking 10626b7579f77SDag-Erling Smørgrav # the entirety of a libtool archive into another (currently 10627b7579f77SDag-Erling Smørgrav # not supported by libtool). 10628b7579f77SDag-Erling Smørgrav if (for obj in $oldobjs 10629b7579f77SDag-Erling Smørgrav do 10630b7579f77SDag-Erling Smørgrav func_basename "$obj" 10631b7579f77SDag-Erling Smørgrav $ECHO "$func_basename_result" 10632b7579f77SDag-Erling Smørgrav done | sort | sort -uc >/dev/null 2>&1); then 10633b7579f77SDag-Erling Smørgrav : 10634b7579f77SDag-Erling Smørgrav else 10635b7579f77SDag-Erling Smørgrav echo "copying selected object files to avoid basename conflicts..." 10636f61ef7f6SDag-Erling Smørgrav gentop=$output_objdir/${outputname}x 10637b7579f77SDag-Erling Smørgrav func_append generated " $gentop" 10638b7579f77SDag-Erling Smørgrav func_mkdir_p "$gentop" 10639b7579f77SDag-Erling Smørgrav save_oldobjs=$oldobjs 10640b7579f77SDag-Erling Smørgrav oldobjs= 10641b7579f77SDag-Erling Smørgrav counter=1 10642b7579f77SDag-Erling Smørgrav for obj in $save_oldobjs 10643b7579f77SDag-Erling Smørgrav do 10644b7579f77SDag-Erling Smørgrav func_basename "$obj" 10645f61ef7f6SDag-Erling Smørgrav objbase=$func_basename_result 10646b7579f77SDag-Erling Smørgrav case " $oldobjs " in 10647b7579f77SDag-Erling Smørgrav " ") oldobjs=$obj ;; 10648b7579f77SDag-Erling Smørgrav *[\ /]"$objbase "*) 10649b7579f77SDag-Erling Smørgrav while :; do 10650b7579f77SDag-Erling Smørgrav # Make sure we don't pick an alternate name that also 10651b7579f77SDag-Erling Smørgrav # overlaps. 10652b7579f77SDag-Erling Smørgrav newobj=lt$counter-$objbase 10653b7579f77SDag-Erling Smørgrav func_arith $counter + 1 10654b7579f77SDag-Erling Smørgrav counter=$func_arith_result 10655b7579f77SDag-Erling Smørgrav case " $oldobjs " in 10656b7579f77SDag-Erling Smørgrav *[\ /]"$newobj "*) ;; 10657b7579f77SDag-Erling Smørgrav *) if test ! -f "$gentop/$newobj"; then break; fi ;; 10658b7579f77SDag-Erling Smørgrav esac 10659b7579f77SDag-Erling Smørgrav done 10660b7579f77SDag-Erling Smørgrav func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 10661b7579f77SDag-Erling Smørgrav func_append oldobjs " $gentop/$newobj" 10662b7579f77SDag-Erling Smørgrav ;; 10663b7579f77SDag-Erling Smørgrav *) func_append oldobjs " $obj" ;; 10664b7579f77SDag-Erling Smørgrav esac 10665b7579f77SDag-Erling Smørgrav done 10666b7579f77SDag-Erling Smørgrav fi 106678ed2b524SDag-Erling Smørgrav func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 106688ed2b524SDag-Erling Smørgrav tool_oldlib=$func_to_tool_file_result 10669b7579f77SDag-Erling Smørgrav eval cmds=\"$old_archive_cmds\" 10670b7579f77SDag-Erling Smørgrav 10671b7579f77SDag-Erling Smørgrav func_len " $cmds" 10672b7579f77SDag-Erling Smørgrav len=$func_len_result 10673b7579f77SDag-Erling Smørgrav if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 10674b7579f77SDag-Erling Smørgrav cmds=$old_archive_cmds 10675b7579f77SDag-Erling Smørgrav elif test -n "$archiver_list_spec"; then 10676b7579f77SDag-Erling Smørgrav func_verbose "using command file archive linking..." 10677b7579f77SDag-Erling Smørgrav for obj in $oldobjs 10678b7579f77SDag-Erling Smørgrav do 10679b7579f77SDag-Erling Smørgrav func_to_tool_file "$obj" 10680b7579f77SDag-Erling Smørgrav $ECHO "$func_to_tool_file_result" 10681b7579f77SDag-Erling Smørgrav done > $output_objdir/$libname.libcmd 10682b7579f77SDag-Erling Smørgrav func_to_tool_file "$output_objdir/$libname.libcmd" 10683b7579f77SDag-Erling Smørgrav oldobjs=" $archiver_list_spec$func_to_tool_file_result" 10684b7579f77SDag-Erling Smørgrav cmds=$old_archive_cmds 10685b7579f77SDag-Erling Smørgrav else 10686b7579f77SDag-Erling Smørgrav # the command line is too long to link in one step, link in parts 10687b7579f77SDag-Erling Smørgrav func_verbose "using piecewise archive linking..." 10688b7579f77SDag-Erling Smørgrav save_RANLIB=$RANLIB 10689b7579f77SDag-Erling Smørgrav RANLIB=: 10690b7579f77SDag-Erling Smørgrav objlist= 10691b7579f77SDag-Erling Smørgrav concat_cmds= 10692b7579f77SDag-Erling Smørgrav save_oldobjs=$oldobjs 10693b7579f77SDag-Erling Smørgrav oldobjs= 10694b7579f77SDag-Erling Smørgrav # Is there a better way of finding the last object in the list? 10695b7579f77SDag-Erling Smørgrav for obj in $save_oldobjs 10696b7579f77SDag-Erling Smørgrav do 10697b7579f77SDag-Erling Smørgrav last_oldobj=$obj 10698b7579f77SDag-Erling Smørgrav done 10699b7579f77SDag-Erling Smørgrav eval test_cmds=\"$old_archive_cmds\" 10700b7579f77SDag-Erling Smørgrav func_len " $test_cmds" 10701b7579f77SDag-Erling Smørgrav len0=$func_len_result 10702b7579f77SDag-Erling Smørgrav len=$len0 10703b7579f77SDag-Erling Smørgrav for obj in $save_oldobjs 10704b7579f77SDag-Erling Smørgrav do 10705b7579f77SDag-Erling Smørgrav func_len " $obj" 10706b7579f77SDag-Erling Smørgrav func_arith $len + $func_len_result 10707b7579f77SDag-Erling Smørgrav len=$func_arith_result 10708b7579f77SDag-Erling Smørgrav func_append objlist " $obj" 10709b7579f77SDag-Erling Smørgrav if test "$len" -lt "$max_cmd_len"; then 10710b7579f77SDag-Erling Smørgrav : 10711b7579f77SDag-Erling Smørgrav else 10712b7579f77SDag-Erling Smørgrav # the above command should be used before it gets too long 10713b7579f77SDag-Erling Smørgrav oldobjs=$objlist 10714b7579f77SDag-Erling Smørgrav if test "$obj" = "$last_oldobj"; then 10715b7579f77SDag-Erling Smørgrav RANLIB=$save_RANLIB 10716b7579f77SDag-Erling Smørgrav fi 10717b7579f77SDag-Erling Smørgrav test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 10718f61ef7f6SDag-Erling Smørgrav eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" 10719b7579f77SDag-Erling Smørgrav objlist= 10720b7579f77SDag-Erling Smørgrav len=$len0 10721b7579f77SDag-Erling Smørgrav fi 10722b7579f77SDag-Erling Smørgrav done 10723b7579f77SDag-Erling Smørgrav RANLIB=$save_RANLIB 10724b7579f77SDag-Erling Smørgrav oldobjs=$objlist 10725f61ef7f6SDag-Erling Smørgrav if test -z "$oldobjs"; then 10726b7579f77SDag-Erling Smørgrav eval cmds=\"\$concat_cmds\" 10727b7579f77SDag-Erling Smørgrav else 10728b7579f77SDag-Erling Smørgrav eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 10729b7579f77SDag-Erling Smørgrav fi 10730b7579f77SDag-Erling Smørgrav fi 10731b7579f77SDag-Erling Smørgrav fi 10732b7579f77SDag-Erling Smørgrav func_execute_cmds "$cmds" 'exit $?' 10733b7579f77SDag-Erling Smørgrav done 10734b7579f77SDag-Erling Smørgrav 10735b7579f77SDag-Erling Smørgrav test -n "$generated" && \ 10736b7579f77SDag-Erling Smørgrav func_show_eval "${RM}r$generated" 10737b7579f77SDag-Erling Smørgrav 10738b7579f77SDag-Erling Smørgrav # Now create the libtool archive. 10739b7579f77SDag-Erling Smørgrav case $output in 10740b7579f77SDag-Erling Smørgrav *.la) 10741b7579f77SDag-Erling Smørgrav old_library= 10742f61ef7f6SDag-Erling Smørgrav test yes = "$build_old_libs" && old_library=$libname.$libext 10743b7579f77SDag-Erling Smørgrav func_verbose "creating $output" 10744b7579f77SDag-Erling Smørgrav 10745b7579f77SDag-Erling Smørgrav # Preserve any variables that may affect compiler behavior 10746b7579f77SDag-Erling Smørgrav for var in $variables_saved_for_relink; do 10747b7579f77SDag-Erling Smørgrav if eval test -z \"\${$var+set}\"; then 10748b7579f77SDag-Erling Smørgrav relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 10749b7579f77SDag-Erling Smørgrav elif eval var_value=\$$var; test -z "$var_value"; then 10750b7579f77SDag-Erling Smørgrav relink_command="$var=; export $var; $relink_command" 10751b7579f77SDag-Erling Smørgrav else 10752*46d2f618SCy Schubert func_quote_for_eval "$var_value" 10753*46d2f618SCy Schubert relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 10754b7579f77SDag-Erling Smørgrav fi 10755b7579f77SDag-Erling Smørgrav done 10756b7579f77SDag-Erling Smørgrav # Quote the link command for shipping. 10757*46d2f618SCy Schubert relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 10758*46d2f618SCy Schubert relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 10759f61ef7f6SDag-Erling Smørgrav if test yes = "$hardcode_automatic"; then 10760b7579f77SDag-Erling Smørgrav relink_command= 10761b7579f77SDag-Erling Smørgrav fi 10762b7579f77SDag-Erling Smørgrav 10763b7579f77SDag-Erling Smørgrav # Only create the output if not a dry run. 10764b7579f77SDag-Erling Smørgrav $opt_dry_run || { 10765b7579f77SDag-Erling Smørgrav for installed in no yes; do 10766f61ef7f6SDag-Erling Smørgrav if test yes = "$installed"; then 10767b7579f77SDag-Erling Smørgrav if test -z "$install_libdir"; then 10768b7579f77SDag-Erling Smørgrav break 10769b7579f77SDag-Erling Smørgrav fi 10770f61ef7f6SDag-Erling Smørgrav output=$output_objdir/${outputname}i 10771b7579f77SDag-Erling Smørgrav # Replace all uninstalled libtool libraries with the installed ones 10772b7579f77SDag-Erling Smørgrav newdependency_libs= 10773b7579f77SDag-Erling Smørgrav for deplib in $dependency_libs; do 10774b7579f77SDag-Erling Smørgrav case $deplib in 10775b7579f77SDag-Erling Smørgrav *.la) 10776b7579f77SDag-Erling Smørgrav func_basename "$deplib" 10777f61ef7f6SDag-Erling Smørgrav name=$func_basename_result 107788ed2b524SDag-Erling Smørgrav func_resolve_sysroot "$deplib" 10779f61ef7f6SDag-Erling Smørgrav eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 10780b7579f77SDag-Erling Smørgrav test -z "$libdir" && \ 10781f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$deplib' is not a valid libtool archive" 10782b7579f77SDag-Erling Smørgrav func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 10783b7579f77SDag-Erling Smørgrav ;; 10784b7579f77SDag-Erling Smørgrav -L*) 10785b7579f77SDag-Erling Smørgrav func_stripname -L '' "$deplib" 10786b7579f77SDag-Erling Smørgrav func_replace_sysroot "$func_stripname_result" 10787b7579f77SDag-Erling Smørgrav func_append newdependency_libs " -L$func_replace_sysroot_result" 10788b7579f77SDag-Erling Smørgrav ;; 10789b7579f77SDag-Erling Smørgrav -R*) 10790b7579f77SDag-Erling Smørgrav func_stripname -R '' "$deplib" 10791b7579f77SDag-Erling Smørgrav func_replace_sysroot "$func_stripname_result" 10792b7579f77SDag-Erling Smørgrav func_append newdependency_libs " -R$func_replace_sysroot_result" 10793b7579f77SDag-Erling Smørgrav ;; 10794b7579f77SDag-Erling Smørgrav *) func_append newdependency_libs " $deplib" ;; 10795b7579f77SDag-Erling Smørgrav esac 10796b7579f77SDag-Erling Smørgrav done 10797f61ef7f6SDag-Erling Smørgrav dependency_libs=$newdependency_libs 10798b7579f77SDag-Erling Smørgrav newdlfiles= 10799b7579f77SDag-Erling Smørgrav 10800b7579f77SDag-Erling Smørgrav for lib in $dlfiles; do 10801b7579f77SDag-Erling Smørgrav case $lib in 10802b7579f77SDag-Erling Smørgrav *.la) 10803b7579f77SDag-Erling Smørgrav func_basename "$lib" 10804f61ef7f6SDag-Erling Smørgrav name=$func_basename_result 10805f61ef7f6SDag-Erling Smørgrav eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10806b7579f77SDag-Erling Smørgrav test -z "$libdir" && \ 10807f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$lib' is not a valid libtool archive" 10808b7579f77SDag-Erling Smørgrav func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 10809b7579f77SDag-Erling Smørgrav ;; 10810b7579f77SDag-Erling Smørgrav *) func_append newdlfiles " $lib" ;; 10811b7579f77SDag-Erling Smørgrav esac 10812b7579f77SDag-Erling Smørgrav done 10813f61ef7f6SDag-Erling Smørgrav dlfiles=$newdlfiles 10814b7579f77SDag-Erling Smørgrav newdlprefiles= 10815b7579f77SDag-Erling Smørgrav for lib in $dlprefiles; do 10816b7579f77SDag-Erling Smørgrav case $lib in 10817b7579f77SDag-Erling Smørgrav *.la) 10818b7579f77SDag-Erling Smørgrav # Only pass preopened files to the pseudo-archive (for 10819b7579f77SDag-Erling Smørgrav # eventual linking with the app. that links it) if we 10820b7579f77SDag-Erling Smørgrav # didn't already link the preopened objects directly into 10821b7579f77SDag-Erling Smørgrav # the library: 10822b7579f77SDag-Erling Smørgrav func_basename "$lib" 10823f61ef7f6SDag-Erling Smørgrav name=$func_basename_result 10824f61ef7f6SDag-Erling Smørgrav eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 10825b7579f77SDag-Erling Smørgrav test -z "$libdir" && \ 10826f61ef7f6SDag-Erling Smørgrav func_fatal_error "'$lib' is not a valid libtool archive" 10827b7579f77SDag-Erling Smørgrav func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 10828b7579f77SDag-Erling Smørgrav ;; 10829b7579f77SDag-Erling Smørgrav esac 10830b7579f77SDag-Erling Smørgrav done 10831f61ef7f6SDag-Erling Smørgrav dlprefiles=$newdlprefiles 10832b7579f77SDag-Erling Smørgrav else 10833b7579f77SDag-Erling Smørgrav newdlfiles= 10834b7579f77SDag-Erling Smørgrav for lib in $dlfiles; do 10835b7579f77SDag-Erling Smørgrav case $lib in 10836f61ef7f6SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10837b7579f77SDag-Erling Smørgrav *) abs=`pwd`"/$lib" ;; 10838b7579f77SDag-Erling Smørgrav esac 10839b7579f77SDag-Erling Smørgrav func_append newdlfiles " $abs" 10840b7579f77SDag-Erling Smørgrav done 10841f61ef7f6SDag-Erling Smørgrav dlfiles=$newdlfiles 10842b7579f77SDag-Erling Smørgrav newdlprefiles= 10843b7579f77SDag-Erling Smørgrav for lib in $dlprefiles; do 10844b7579f77SDag-Erling Smørgrav case $lib in 10845f61ef7f6SDag-Erling Smørgrav [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; 10846b7579f77SDag-Erling Smørgrav *) abs=`pwd`"/$lib" ;; 10847b7579f77SDag-Erling Smørgrav esac 10848b7579f77SDag-Erling Smørgrav func_append newdlprefiles " $abs" 10849b7579f77SDag-Erling Smørgrav done 10850f61ef7f6SDag-Erling Smørgrav dlprefiles=$newdlprefiles 10851b7579f77SDag-Erling Smørgrav fi 10852b7579f77SDag-Erling Smørgrav $RM $output 10853b7579f77SDag-Erling Smørgrav # place dlname in correct position for cygwin 10854b7579f77SDag-Erling Smørgrav # In fact, it would be nice if we could use this code for all target 10855b7579f77SDag-Erling Smørgrav # systems that can't hard-code library paths into their executables 10856b7579f77SDag-Erling Smørgrav # and that have no shared library path variable independent of PATH, 10857b7579f77SDag-Erling Smørgrav # but it turns out we can't easily determine that from inspecting 10858b7579f77SDag-Erling Smørgrav # libtool variables, so we have to hard-code the OSs to which it 10859b7579f77SDag-Erling Smørgrav # applies here; at the moment, that means platforms that use the PE 10860b7579f77SDag-Erling Smørgrav # object format with DLL files. See the long comment at the top of 10861b7579f77SDag-Erling Smørgrav # tests/bindir.at for full details. 10862b7579f77SDag-Erling Smørgrav tdlname=$dlname 10863b7579f77SDag-Erling Smørgrav case $host,$output,$installed,$module,$dlname in 10864b7579f77SDag-Erling Smørgrav *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 10865b7579f77SDag-Erling Smørgrav # If a -bindir argument was supplied, place the dll there. 10866f61ef7f6SDag-Erling Smørgrav if test -n "$bindir"; then 10867b7579f77SDag-Erling Smørgrav func_relative_path "$install_libdir" "$bindir" 10868f61ef7f6SDag-Erling Smørgrav tdlname=$func_relative_path_result/$dlname 10869b7579f77SDag-Erling Smørgrav else 10870b7579f77SDag-Erling Smørgrav # Otherwise fall back on heuristic. 10871b7579f77SDag-Erling Smørgrav tdlname=../bin/$dlname 10872b7579f77SDag-Erling Smørgrav fi 10873b7579f77SDag-Erling Smørgrav ;; 10874b7579f77SDag-Erling Smørgrav esac 10875b7579f77SDag-Erling Smørgrav $ECHO > $output "\ 10876b7579f77SDag-Erling Smørgrav# $outputname - a libtool library file 10877f61ef7f6SDag-Erling Smørgrav# Generated by $PROGRAM (GNU $PACKAGE) $VERSION 10878b7579f77SDag-Erling Smørgrav# 10879b7579f77SDag-Erling Smørgrav# Please DO NOT delete this file! 10880b7579f77SDag-Erling Smørgrav# It is necessary for linking the library. 10881b7579f77SDag-Erling Smørgrav 10882b7579f77SDag-Erling Smørgrav# The name that we can dlopen(3). 10883b7579f77SDag-Erling Smørgravdlname='$tdlname' 10884b7579f77SDag-Erling Smørgrav 10885b7579f77SDag-Erling Smørgrav# Names of this library. 10886b7579f77SDag-Erling Smørgravlibrary_names='$library_names' 10887b7579f77SDag-Erling Smørgrav 10888b7579f77SDag-Erling Smørgrav# The name of the static archive. 10889b7579f77SDag-Erling Smørgravold_library='$old_library' 10890b7579f77SDag-Erling Smørgrav 10891b7579f77SDag-Erling Smørgrav# Linker flags that cannot go in dependency_libs. 10892b7579f77SDag-Erling Smørgravinherited_linker_flags='$new_inherited_linker_flags' 10893b7579f77SDag-Erling Smørgrav 10894b7579f77SDag-Erling Smørgrav# Libraries that this one depends upon. 10895b7579f77SDag-Erling Smørgravdependency_libs='$dependency_libs' 10896b7579f77SDag-Erling Smørgrav 10897b7579f77SDag-Erling Smørgrav# Names of additional weak libraries provided by this library 10898b7579f77SDag-Erling Smørgravweak_library_names='$weak_libs' 10899b7579f77SDag-Erling Smørgrav 10900b7579f77SDag-Erling Smørgrav# Version information for $libname. 10901b7579f77SDag-Erling Smørgravcurrent=$current 10902b7579f77SDag-Erling Smørgravage=$age 10903b7579f77SDag-Erling Smørgravrevision=$revision 10904b7579f77SDag-Erling Smørgrav 10905b7579f77SDag-Erling Smørgrav# Is this an already installed library? 10906b7579f77SDag-Erling Smørgravinstalled=$installed 10907b7579f77SDag-Erling Smørgrav 10908b7579f77SDag-Erling Smørgrav# Should we warn about portability when linking against -modules? 10909b7579f77SDag-Erling Smørgravshouldnotlink=$module 10910b7579f77SDag-Erling Smørgrav 10911b7579f77SDag-Erling Smørgrav# Files to dlopen/dlpreopen 10912b7579f77SDag-Erling Smørgravdlopen='$dlfiles' 10913b7579f77SDag-Erling Smørgravdlpreopen='$dlprefiles' 10914b7579f77SDag-Erling Smørgrav 10915b7579f77SDag-Erling Smørgrav# Directory that this library needs to be installed in: 10916b7579f77SDag-Erling Smørgravlibdir='$install_libdir'" 10917f61ef7f6SDag-Erling Smørgrav if test no,yes = "$installed,$need_relink"; then 10918b7579f77SDag-Erling Smørgrav $ECHO >> $output "\ 10919b7579f77SDag-Erling Smørgravrelink_command=\"$relink_command\"" 10920b7579f77SDag-Erling Smørgrav fi 10921b7579f77SDag-Erling Smørgrav done 10922b7579f77SDag-Erling Smørgrav } 10923b7579f77SDag-Erling Smørgrav 10924b7579f77SDag-Erling Smørgrav # Do a symbolic link so that the libtool archive can be found in 10925b7579f77SDag-Erling Smørgrav # LD_LIBRARY_PATH before the program is installed. 10926b7579f77SDag-Erling Smørgrav func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 10927b7579f77SDag-Erling Smørgrav ;; 10928b7579f77SDag-Erling Smørgrav esac 10929b7579f77SDag-Erling Smørgrav exit $EXIT_SUCCESS 10930b7579f77SDag-Erling Smørgrav} 10931b7579f77SDag-Erling Smørgrav 10932f61ef7f6SDag-Erling Smørgravif test link = "$opt_mode" || test relink = "$opt_mode"; then 10933b7579f77SDag-Erling Smørgrav func_mode_link ${1+"$@"} 10934f61ef7f6SDag-Erling Smørgravfi 10935b7579f77SDag-Erling Smørgrav 10936b7579f77SDag-Erling Smørgrav 10937b7579f77SDag-Erling Smørgrav# func_mode_uninstall arg... 10938b7579f77SDag-Erling Smørgravfunc_mode_uninstall () 10939b7579f77SDag-Erling Smørgrav{ 10940f61ef7f6SDag-Erling Smørgrav $debug_cmd 10941f61ef7f6SDag-Erling Smørgrav 10942f61ef7f6SDag-Erling Smørgrav RM=$nonopt 10943b7579f77SDag-Erling Smørgrav files= 10944f61ef7f6SDag-Erling Smørgrav rmforce=false 10945b7579f77SDag-Erling Smørgrav exit_status=0 10946b7579f77SDag-Erling Smørgrav 10947b7579f77SDag-Erling Smørgrav # This variable tells wrapper scripts just to set variables rather 10948b7579f77SDag-Erling Smørgrav # than running their programs. 10949f61ef7f6SDag-Erling Smørgrav libtool_install_magic=$magic 10950b7579f77SDag-Erling Smørgrav 10951b7579f77SDag-Erling Smørgrav for arg 10952b7579f77SDag-Erling Smørgrav do 10953b7579f77SDag-Erling Smørgrav case $arg in 10954f61ef7f6SDag-Erling Smørgrav -f) func_append RM " $arg"; rmforce=: ;; 10955b7579f77SDag-Erling Smørgrav -*) func_append RM " $arg" ;; 10956b7579f77SDag-Erling Smørgrav *) func_append files " $arg" ;; 10957b7579f77SDag-Erling Smørgrav esac 10958b7579f77SDag-Erling Smørgrav done 10959b7579f77SDag-Erling Smørgrav 10960b7579f77SDag-Erling Smørgrav test -z "$RM" && \ 10961b7579f77SDag-Erling Smørgrav func_fatal_help "you must specify an RM program" 10962b7579f77SDag-Erling Smørgrav 10963b7579f77SDag-Erling Smørgrav rmdirs= 10964b7579f77SDag-Erling Smørgrav 10965b7579f77SDag-Erling Smørgrav for file in $files; do 10966b7579f77SDag-Erling Smørgrav func_dirname "$file" "" "." 10967f61ef7f6SDag-Erling Smørgrav dir=$func_dirname_result 10968f61ef7f6SDag-Erling Smørgrav if test . = "$dir"; then 10969f61ef7f6SDag-Erling Smørgrav odir=$objdir 10970b7579f77SDag-Erling Smørgrav else 10971f61ef7f6SDag-Erling Smørgrav odir=$dir/$objdir 10972b7579f77SDag-Erling Smørgrav fi 10973b7579f77SDag-Erling Smørgrav func_basename "$file" 10974f61ef7f6SDag-Erling Smørgrav name=$func_basename_result 10975f61ef7f6SDag-Erling Smørgrav test uninstall = "$opt_mode" && odir=$dir 10976b7579f77SDag-Erling Smørgrav 10977b7579f77SDag-Erling Smørgrav # Remember odir for removal later, being careful to avoid duplicates 10978f61ef7f6SDag-Erling Smørgrav if test clean = "$opt_mode"; then 10979b7579f77SDag-Erling Smørgrav case " $rmdirs " in 10980b7579f77SDag-Erling Smørgrav *" $odir "*) ;; 10981b7579f77SDag-Erling Smørgrav *) func_append rmdirs " $odir" ;; 10982b7579f77SDag-Erling Smørgrav esac 10983b7579f77SDag-Erling Smørgrav fi 10984b7579f77SDag-Erling Smørgrav 10985b7579f77SDag-Erling Smørgrav # Don't error if the file doesn't exist and rm -f was used. 10986b7579f77SDag-Erling Smørgrav if { test -L "$file"; } >/dev/null 2>&1 || 10987b7579f77SDag-Erling Smørgrav { test -h "$file"; } >/dev/null 2>&1 || 10988b7579f77SDag-Erling Smørgrav test -f "$file"; then 10989b7579f77SDag-Erling Smørgrav : 10990b7579f77SDag-Erling Smørgrav elif test -d "$file"; then 10991b7579f77SDag-Erling Smørgrav exit_status=1 10992b7579f77SDag-Erling Smørgrav continue 10993f61ef7f6SDag-Erling Smørgrav elif $rmforce; then 10994b7579f77SDag-Erling Smørgrav continue 10995b7579f77SDag-Erling Smørgrav fi 10996b7579f77SDag-Erling Smørgrav 10997f61ef7f6SDag-Erling Smørgrav rmfiles=$file 10998b7579f77SDag-Erling Smørgrav 10999b7579f77SDag-Erling Smørgrav case $name in 11000b7579f77SDag-Erling Smørgrav *.la) 11001b7579f77SDag-Erling Smørgrav # Possibly a libtool archive, so verify it. 11002b7579f77SDag-Erling Smørgrav if func_lalib_p "$file"; then 11003b7579f77SDag-Erling Smørgrav func_source $dir/$name 11004b7579f77SDag-Erling Smørgrav 11005b7579f77SDag-Erling Smørgrav # Delete the libtool libraries and symlinks. 11006b7579f77SDag-Erling Smørgrav for n in $library_names; do 11007b7579f77SDag-Erling Smørgrav func_append rmfiles " $odir/$n" 11008b7579f77SDag-Erling Smørgrav done 11009b7579f77SDag-Erling Smørgrav test -n "$old_library" && func_append rmfiles " $odir/$old_library" 11010b7579f77SDag-Erling Smørgrav 11011f61ef7f6SDag-Erling Smørgrav case $opt_mode in 11012b7579f77SDag-Erling Smørgrav clean) 11013b7579f77SDag-Erling Smørgrav case " $library_names " in 11014b7579f77SDag-Erling Smørgrav *" $dlname "*) ;; 11015b7579f77SDag-Erling Smørgrav *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 11016b7579f77SDag-Erling Smørgrav esac 11017b7579f77SDag-Erling Smørgrav test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 11018b7579f77SDag-Erling Smørgrav ;; 11019b7579f77SDag-Erling Smørgrav uninstall) 11020b7579f77SDag-Erling Smørgrav if test -n "$library_names"; then 11021b7579f77SDag-Erling Smørgrav # Do each command in the postuninstall commands. 11022f61ef7f6SDag-Erling Smørgrav func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' 11023b7579f77SDag-Erling Smørgrav fi 11024b7579f77SDag-Erling Smørgrav 11025b7579f77SDag-Erling Smørgrav if test -n "$old_library"; then 11026b7579f77SDag-Erling Smørgrav # Do each command in the old_postuninstall commands. 11027f61ef7f6SDag-Erling Smørgrav func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' 11028b7579f77SDag-Erling Smørgrav fi 11029b7579f77SDag-Erling Smørgrav # FIXME: should reinstall the best remaining shared library. 11030b7579f77SDag-Erling Smørgrav ;; 11031b7579f77SDag-Erling Smørgrav esac 11032b7579f77SDag-Erling Smørgrav fi 11033b7579f77SDag-Erling Smørgrav ;; 11034b7579f77SDag-Erling Smørgrav 11035b7579f77SDag-Erling Smørgrav *.lo) 11036b7579f77SDag-Erling Smørgrav # Possibly a libtool object, so verify it. 11037b7579f77SDag-Erling Smørgrav if func_lalib_p "$file"; then 11038b7579f77SDag-Erling Smørgrav 11039b7579f77SDag-Erling Smørgrav # Read the .lo file 11040b7579f77SDag-Erling Smørgrav func_source $dir/$name 11041b7579f77SDag-Erling Smørgrav 11042b7579f77SDag-Erling Smørgrav # Add PIC object to the list of files to remove. 11043f61ef7f6SDag-Erling Smørgrav if test -n "$pic_object" && test none != "$pic_object"; then 11044b7579f77SDag-Erling Smørgrav func_append rmfiles " $dir/$pic_object" 11045b7579f77SDag-Erling Smørgrav fi 11046b7579f77SDag-Erling Smørgrav 11047b7579f77SDag-Erling Smørgrav # Add non-PIC object to the list of files to remove. 11048f61ef7f6SDag-Erling Smørgrav if test -n "$non_pic_object" && test none != "$non_pic_object"; then 11049b7579f77SDag-Erling Smørgrav func_append rmfiles " $dir/$non_pic_object" 11050b7579f77SDag-Erling Smørgrav fi 11051b7579f77SDag-Erling Smørgrav fi 11052b7579f77SDag-Erling Smørgrav ;; 11053b7579f77SDag-Erling Smørgrav 11054b7579f77SDag-Erling Smørgrav *) 11055f61ef7f6SDag-Erling Smørgrav if test clean = "$opt_mode"; then 11056b7579f77SDag-Erling Smørgrav noexename=$name 11057b7579f77SDag-Erling Smørgrav case $file in 11058b7579f77SDag-Erling Smørgrav *.exe) 11059b7579f77SDag-Erling Smørgrav func_stripname '' '.exe' "$file" 11060b7579f77SDag-Erling Smørgrav file=$func_stripname_result 11061b7579f77SDag-Erling Smørgrav func_stripname '' '.exe' "$name" 11062b7579f77SDag-Erling Smørgrav noexename=$func_stripname_result 11063b7579f77SDag-Erling Smørgrav # $file with .exe has already been added to rmfiles, 11064b7579f77SDag-Erling Smørgrav # add $file without .exe 11065b7579f77SDag-Erling Smørgrav func_append rmfiles " $file" 11066b7579f77SDag-Erling Smørgrav ;; 11067b7579f77SDag-Erling Smørgrav esac 11068b7579f77SDag-Erling Smørgrav # Do a test to see if this is a libtool program. 11069b7579f77SDag-Erling Smørgrav if func_ltwrapper_p "$file"; then 11070b7579f77SDag-Erling Smørgrav if func_ltwrapper_executable_p "$file"; then 11071b7579f77SDag-Erling Smørgrav func_ltwrapper_scriptname "$file" 11072b7579f77SDag-Erling Smørgrav relink_command= 11073b7579f77SDag-Erling Smørgrav func_source $func_ltwrapper_scriptname_result 11074b7579f77SDag-Erling Smørgrav func_append rmfiles " $func_ltwrapper_scriptname_result" 11075b7579f77SDag-Erling Smørgrav else 11076b7579f77SDag-Erling Smørgrav relink_command= 11077b7579f77SDag-Erling Smørgrav func_source $dir/$noexename 11078b7579f77SDag-Erling Smørgrav fi 11079b7579f77SDag-Erling Smørgrav 11080b7579f77SDag-Erling Smørgrav # note $name still contains .exe if it was in $file originally 11081b7579f77SDag-Erling Smørgrav # as does the version of $file that was added into $rmfiles 11082f61ef7f6SDag-Erling Smørgrav func_append rmfiles " $odir/$name $odir/${name}S.$objext" 11083f61ef7f6SDag-Erling Smørgrav if test yes = "$fast_install" && test -n "$relink_command"; then 11084b7579f77SDag-Erling Smørgrav func_append rmfiles " $odir/lt-$name" 11085b7579f77SDag-Erling Smørgrav fi 11086b7579f77SDag-Erling Smørgrav if test "X$noexename" != "X$name"; then 11087f61ef7f6SDag-Erling Smørgrav func_append rmfiles " $odir/lt-$noexename.c" 11088b7579f77SDag-Erling Smørgrav fi 11089b7579f77SDag-Erling Smørgrav fi 11090b7579f77SDag-Erling Smørgrav fi 11091b7579f77SDag-Erling Smørgrav ;; 11092b7579f77SDag-Erling Smørgrav esac 11093b7579f77SDag-Erling Smørgrav func_show_eval "$RM $rmfiles" 'exit_status=1' 11094b7579f77SDag-Erling Smørgrav done 11095b7579f77SDag-Erling Smørgrav 11096f61ef7f6SDag-Erling Smørgrav # Try to remove the $objdir's in the directories where we deleted files 11097b7579f77SDag-Erling Smørgrav for dir in $rmdirs; do 11098b7579f77SDag-Erling Smørgrav if test -d "$dir"; then 11099b7579f77SDag-Erling Smørgrav func_show_eval "rmdir $dir >/dev/null 2>&1" 11100b7579f77SDag-Erling Smørgrav fi 11101b7579f77SDag-Erling Smørgrav done 11102b7579f77SDag-Erling Smørgrav 11103b7579f77SDag-Erling Smørgrav exit $exit_status 11104b7579f77SDag-Erling Smørgrav} 11105b7579f77SDag-Erling Smørgrav 11106f61ef7f6SDag-Erling Smørgravif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then 11107b7579f77SDag-Erling Smørgrav func_mode_uninstall ${1+"$@"} 11108f61ef7f6SDag-Erling Smørgravfi 11109b7579f77SDag-Erling Smørgrav 11110b7579f77SDag-Erling Smørgravtest -z "$opt_mode" && { 11111f61ef7f6SDag-Erling Smørgrav help=$generic_help 11112b7579f77SDag-Erling Smørgrav func_fatal_help "you must specify a MODE" 11113b7579f77SDag-Erling Smørgrav} 11114b7579f77SDag-Erling Smørgrav 11115b7579f77SDag-Erling Smørgravtest -z "$exec_cmd" && \ 11116f61ef7f6SDag-Erling Smørgrav func_fatal_help "invalid operation mode '$opt_mode'" 11117b7579f77SDag-Erling Smørgrav 11118b7579f77SDag-Erling Smørgravif test -n "$exec_cmd"; then 11119b7579f77SDag-Erling Smørgrav eval exec "$exec_cmd" 11120b7579f77SDag-Erling Smørgrav exit $EXIT_FAILURE 11121b7579f77SDag-Erling Smørgravfi 11122b7579f77SDag-Erling Smørgrav 11123b7579f77SDag-Erling Smørgravexit $exit_status 11124b7579f77SDag-Erling Smørgrav 11125b7579f77SDag-Erling Smørgrav 11126b7579f77SDag-Erling Smørgrav# The TAGs below are defined such that we never get into a situation 11127f61ef7f6SDag-Erling Smørgrav# where we disable both kinds of libraries. Given conflicting 11128b7579f77SDag-Erling Smørgrav# choices, we go for a static library, that is the most portable, 11129b7579f77SDag-Erling Smørgrav# since we can't tell whether shared libraries were disabled because 11130b7579f77SDag-Erling Smørgrav# the user asked for that or because the platform doesn't support 11131b7579f77SDag-Erling Smørgrav# them. This is particularly important on AIX, because we don't 11132b7579f77SDag-Erling Smørgrav# support having both static and shared libraries enabled at the same 11133b7579f77SDag-Erling Smørgrav# time on that platform, so we default to a shared-only configuration. 11134b7579f77SDag-Erling Smørgrav# If a disable-shared tag is given, we'll fallback to a static-only 11135b7579f77SDag-Erling Smørgrav# configuration. But we'll never go from static-only to shared-only. 11136b7579f77SDag-Erling Smørgrav 11137b7579f77SDag-Erling Smørgrav# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 11138b7579f77SDag-Erling Smørgravbuild_libtool_libs=no 11139b7579f77SDag-Erling Smørgravbuild_old_libs=yes 11140b7579f77SDag-Erling Smørgrav# ### END LIBTOOL TAG CONFIG: disable-shared 11141b7579f77SDag-Erling Smørgrav 11142b7579f77SDag-Erling Smørgrav# ### BEGIN LIBTOOL TAG CONFIG: disable-static 11143b7579f77SDag-Erling Smørgravbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 11144b7579f77SDag-Erling Smørgrav# ### END LIBTOOL TAG CONFIG: disable-static 11145b7579f77SDag-Erling Smørgrav 11146b7579f77SDag-Erling Smørgrav# Local Variables: 11147b7579f77SDag-Erling Smørgrav# mode:shell-script 11148b7579f77SDag-Erling Smørgrav# sh-indentation:2 11149b7579f77SDag-Erling Smørgrav# End: 11150