annotate ltmain.sh @ 1739:c414850f206f

Add support for -boot flag, which allows in-tree execution of Ur/Web The boot flag rewrites most hardcoded paths to point to the build directory, and also forces static compilation. This is convenient for developing Ur/Web, or if you cannot 'sudo make install' Ur/Web. The following changes were made: * Header files were moved to include/urweb instead of include; this lets FFI users point their C_INCLUDE_PATH at this directory at write <urweb/urweb.h>. For internal Ur/Web executables, we simply pass -I$PATH/include/urweb as normal. * Differentiate between LIB and SRCLIB; SRCLIB is Ur and JavaScript source files, while LIB is compiled products from libtool. For in-tree compilation these live in different places. * No longer reference Config for paths; instead use Settings; these settings can be changed dynamically by Compiler.enableBoot () (TODO: add a disableBoot function.) * config.h is now generated directly in include/urweb/config.h, for consistency's sake (especially since it gets installed along with the rest of the headers!) * All of the autotools build products got updated. * The linkStatic field in protocols now only contains the name of the build product, and not the absolute path. Future users have to be careful not to reference the Settings files to early, lest they get an old version (this was the source of two bugs during development of this patch.)
author Edward Z. Yang <ezyang@mit.edu>
date Wed, 02 May 2012 17:17:57 -0400
parents 252e05bf199d
children 40557fb08e98
rev   line source
adam@1459 1
adam@1599 2 # libtool (GNU libtool) 2.4.2
adamc@1133 3 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
adamc@1133 4
adam@1459 5 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
adam@1599 6 # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
adamc@1133 7 # This is free software; see the source for copying conditions. There is NO
adamc@1133 8 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
adamc@1133 9
adamc@1133 10 # GNU Libtool is free software; you can redistribute it and/or modify
adamc@1133 11 # it under the terms of the GNU General Public License as published by
adamc@1133 12 # the Free Software Foundation; either version 2 of the License, or
adamc@1133 13 # (at your option) any later version.
adamc@1133 14 #
adamc@1133 15 # As a special exception to the GNU General Public License,
adamc@1133 16 # if you distribute this file as part of a program or library that
adamc@1133 17 # is built using GNU Libtool, you may include this file under the
adamc@1133 18 # same distribution terms that you use for the rest of that program.
adamc@1133 19 #
adamc@1133 20 # GNU Libtool is distributed in the hope that it will be useful, but
adamc@1133 21 # WITHOUT ANY WARRANTY; without even the implied warranty of
adamc@1133 22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
adamc@1133 23 # General Public License for more details.
adamc@1133 24 #
adamc@1133 25 # You should have received a copy of the GNU General Public License
adamc@1133 26 # along with GNU Libtool; see the file COPYING. If not, a copy
adamc@1133 27 # can be downloaded from http://www.gnu.org/licenses/gpl.html,
adamc@1133 28 # or obtained by writing to the Free Software Foundation, Inc.,
adamc@1133 29 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
adamc@1133 30
adamc@1133 31 # Usage: $progname [OPTION]... [MODE-ARG]...
adamc@1133 32 #
adamc@1133 33 # Provide generalized library-building support services.
adamc@1133 34 #
adam@1459 35 # --config show all configuration variables
adam@1459 36 # --debug enable verbose shell tracing
adam@1459 37 # -n, --dry-run display commands without modifying any files
adam@1459 38 # --features display basic configuration information and exit
adam@1459 39 # --mode=MODE use operation mode MODE
adam@1459 40 # --preserve-dup-deps don't remove duplicate dependency libraries
adam@1459 41 # --quiet, --silent don't print informational messages
adam@1459 42 # --no-quiet, --no-silent
adam@1459 43 # print informational messages (default)
adam@1599 44 # --no-warn don't display warning messages
adam@1459 45 # --tag=TAG use configuration variables from tag TAG
adam@1459 46 # -v, --verbose print more informational messages than default
adam@1459 47 # --no-verbose don't print the extra informational messages
adam@1459 48 # --version print version information
adam@1459 49 # -h, --help, --help-all print short, long, or detailed help message
adamc@1133 50 #
adamc@1133 51 # MODE must be one of the following:
adamc@1133 52 #
adam@1459 53 # clean remove files from the build directory
adam@1459 54 # compile compile a source file into a libtool object
adam@1459 55 # execute automatically set library path, then run a program
adam@1459 56 # finish complete the installation of libtool libraries
adam@1459 57 # install install libraries or executables
adam@1459 58 # link create a library or an executable
adam@1459 59 # uninstall remove libraries from an installed directory
adamc@1133 60 #
adam@1459 61 # MODE-ARGS vary depending on the MODE. When passed as first option,
adam@1459 62 # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
adamc@1133 63 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
adamc@1133 64 #
adamc@1133 65 # When reporting a bug, please describe a test case to reproduce it and
adamc@1133 66 # include the following information:
adamc@1133 67 #
adam@1459 68 # host-triplet: $host
adam@1459 69 # shell: $SHELL
adam@1459 70 # compiler: $LTCC
adam@1459 71 # compiler flags: $LTCFLAGS
adam@1459 72 # linker: $LD (gnu? $with_gnu_ld)
adam@1599 73 # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1
adam@1459 74 # automake: $automake_version
adam@1459 75 # autoconf: $autoconf_version
adamc@1133 76 #
adamc@1133 77 # Report bugs to <bug-libtool@gnu.org>.
adam@1459 78 # GNU libtool home page: <http://www.gnu.org/software/libtool/>.
adam@1459 79 # General help using GNU software: <http://www.gnu.org/gethelp/>.
adam@1459 80
adam@1459 81 PROGRAM=libtool
adamc@1133 82 PACKAGE=libtool
adam@1599 83 VERSION="2.4.2 Debian-2.4.2-1"
adamc@1133 84 TIMESTAMP=""
adam@1599 85 package_revision=1.3337
adamc@1133 86
adamc@1133 87 # Be Bourne compatible
adamc@1133 88 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
adamc@1133 89 emulate sh
adamc@1133 90 NULLCMD=:
adamc@1133 91 # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
adamc@1133 92 # is contrary to our usage. Disable this feature.
adamc@1133 93 alias -g '${1+"$@"}'='"$@"'
adamc@1133 94 setopt NO_GLOB_SUBST
adamc@1133 95 else
adamc@1133 96 case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
adamc@1133 97 fi
adamc@1133 98 BIN_SH=xpg4; export BIN_SH # for Tru64
adamc@1133 99 DUALCASE=1; export DUALCASE # for MKS sh
adamc@1133 100
adam@1459 101 # A function that is used when there is no print builtin or printf.
adam@1459 102 func_fallback_echo ()
adam@1459 103 {
adam@1459 104 eval 'cat <<_LTECHO_EOF
adam@1459 105 $1
adam@1459 106 _LTECHO_EOF'
adam@1459 107 }
adam@1459 108
adamc@1133 109 # NLS nuisances: We save the old values to restore during execute mode.
adamc@1133 110 lt_user_locale=
adamc@1133 111 lt_safe_locale=
adamc@1133 112 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
adamc@1133 113 do
adamc@1133 114 eval "if test \"\${$lt_var+set}\" = set; then
adamc@1133 115 save_$lt_var=\$$lt_var
adamc@1133 116 $lt_var=C
adamc@1133 117 export $lt_var
adamc@1133 118 lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
adamc@1133 119 lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
adamc@1133 120 fi"
adamc@1133 121 done
adam@1459 122 LC_ALL=C
adam@1459 123 LANGUAGE=C
adam@1459 124 export LANGUAGE LC_ALL
adamc@1133 125
adamc@1133 126 $lt_unset CDPATH
adamc@1133 127
adamc@1133 128
adam@1459 129 # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
adam@1459 130 # is ksh but when the shell is invoked as "sh" and the current value of
adam@1459 131 # the _XPG environment variable is not equal to 1 (one), the special
adam@1459 132 # positional parameter $0, within a function call, is the name of the
adam@1459 133 # function.
adam@1459 134 progpath="$0"
adamc@1133 135
adamc@1133 136
adamc@1133 137
adamc@1133 138 : ${CP="cp -f"}
adam@1459 139 test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
adamc@1133 140 : ${MAKE="make"}
adamc@1133 141 : ${MKDIR="mkdir"}
adamc@1133 142 : ${MV="mv -f"}
adamc@1133 143 : ${RM="rm -f"}
adamc@1133 144 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
adamc@1133 145 : ${Xsed="$SED -e 1s/^X//"}
adamc@1133 146
adamc@1133 147 # Global variables:
adamc@1133 148 EXIT_SUCCESS=0
adamc@1133 149 EXIT_FAILURE=1
adamc@1133 150 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
adamc@1133 151 EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
adamc@1133 152
adamc@1133 153 exit_status=$EXIT_SUCCESS
adamc@1133 154
adamc@1133 155 # Make sure IFS has a sensible default
adamc@1133 156 lt_nl='
adamc@1133 157 '
adamc@1133 158 IFS=" $lt_nl"
adamc@1133 159
adamc@1133 160 dirname="s,/[^/]*$,,"
adamc@1133 161 basename="s,^.*/,,"
adamc@1133 162
adam@1459 163 # func_dirname file append nondir_replacement
adam@1459 164 # Compute the dirname of FILE. If nonempty, add APPEND to the result,
adam@1459 165 # otherwise set result to NONDIR_REPLACEMENT.
adam@1459 166 func_dirname ()
adam@1459 167 {
adam@1459 168 func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
adam@1459 169 if test "X$func_dirname_result" = "X${1}"; then
adam@1459 170 func_dirname_result="${3}"
adam@1459 171 else
adam@1459 172 func_dirname_result="$func_dirname_result${2}"
adam@1459 173 fi
adam@1459 174 } # func_dirname may be replaced by extended shell implementation
adam@1459 175
adam@1459 176
adam@1459 177 # func_basename file
adam@1459 178 func_basename ()
adam@1459 179 {
adam@1459 180 func_basename_result=`$ECHO "${1}" | $SED "$basename"`
adam@1459 181 } # func_basename may be replaced by extended shell implementation
adam@1459 182
adam@1459 183
adamc@1133 184 # func_dirname_and_basename file append nondir_replacement
adamc@1133 185 # perform func_basename and func_dirname in a single function
adamc@1133 186 # call:
adamc@1133 187 # dirname: Compute the dirname of FILE. If nonempty,
adamc@1133 188 # add APPEND to the result, otherwise set result
adamc@1133 189 # to NONDIR_REPLACEMENT.
adamc@1133 190 # value returned in "$func_dirname_result"
adamc@1133 191 # basename: Compute filename of FILE.
adamc@1133 192 # value retuned in "$func_basename_result"
adamc@1133 193 # Implementation must be kept synchronized with func_dirname
adamc@1133 194 # and func_basename. For efficiency, we do not delegate to
adamc@1133 195 # those functions but instead duplicate the functionality here.
adamc@1133 196 func_dirname_and_basename ()
adamc@1133 197 {
adam@1459 198 # Extract subdirectory from the argument.
adam@1459 199 func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
adam@1459 200 if test "X$func_dirname_result" = "X${1}"; then
adam@1459 201 func_dirname_result="${3}"
adam@1459 202 else
adam@1459 203 func_dirname_result="$func_dirname_result${2}"
adam@1459 204 fi
adam@1459 205 func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
adam@1459 206 } # func_dirname_and_basename may be replaced by extended shell implementation
adam@1459 207
adam@1459 208
adam@1459 209 # func_stripname prefix suffix name
adam@1459 210 # strip PREFIX and SUFFIX off of NAME.
adam@1459 211 # PREFIX and SUFFIX must not contain globbing or regex special
adam@1459 212 # characters, hashes, percent signs, but SUFFIX may contain a leading
adam@1459 213 # dot (in which case that matches only a dot).
adam@1459 214 # func_strip_suffix prefix name
adam@1459 215 func_stripname ()
adam@1459 216 {
adam@1459 217 case ${2} in
adam@1459 218 .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
adam@1459 219 *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
adam@1459 220 esac
adam@1459 221 } # func_stripname may be replaced by extended shell implementation
adam@1459 222
adam@1459 223
adam@1459 224 # These SED scripts presuppose an absolute path with a trailing slash.
adam@1459 225 pathcar='s,^/\([^/]*\).*$,\1,'
adam@1459 226 pathcdr='s,^/[^/]*,,'
adam@1459 227 removedotparts=':dotsl
adam@1459 228 s@/\./@/@g
adam@1459 229 t dotsl
adam@1459 230 s,/\.$,/,'
adam@1459 231 collapseslashes='s@/\{1,\}@/@g'
adam@1459 232 finalslash='s,/*$,/,'
adam@1459 233
adam@1459 234 # func_normal_abspath PATH
adam@1459 235 # Remove doubled-up and trailing slashes, "." path components,
adam@1459 236 # and cancel out any ".." path components in PATH after making
adam@1459 237 # it an absolute path.
adam@1459 238 # value returned in "$func_normal_abspath_result"
adam@1459 239 func_normal_abspath ()
adam@1459 240 {
adam@1459 241 # Start from root dir and reassemble the path.
adam@1459 242 func_normal_abspath_result=
adam@1459 243 func_normal_abspath_tpath=$1
adam@1459 244 func_normal_abspath_altnamespace=
adam@1459 245 case $func_normal_abspath_tpath in
adam@1459 246 "")
adam@1459 247 # Empty path, that just means $cwd.
adam@1459 248 func_stripname '' '/' "`pwd`"
adam@1459 249 func_normal_abspath_result=$func_stripname_result
adam@1459 250 return
adam@1459 251 ;;
adam@1459 252 # The next three entries are used to spot a run of precisely
adam@1459 253 # two leading slashes without using negated character classes;
adam@1459 254 # we take advantage of case's first-match behaviour.
adam@1459 255 ///*)
adam@1459 256 # Unusual form of absolute path, do nothing.
adam@1459 257 ;;
adam@1459 258 //*)
adam@1459 259 # Not necessarily an ordinary path; POSIX reserves leading '//'
adam@1459 260 # and for example Cygwin uses it to access remote file shares
adam@1459 261 # over CIFS/SMB, so we conserve a leading double slash if found.
adam@1459 262 func_normal_abspath_altnamespace=/
adam@1459 263 ;;
adam@1459 264 /*)
adam@1459 265 # Absolute path, do nothing.
adam@1459 266 ;;
adam@1459 267 *)
adam@1459 268 # Relative path, prepend $cwd.
adam@1459 269 func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
adam@1459 270 ;;
adam@1459 271 esac
adam@1459 272 # Cancel out all the simple stuff to save iterations. We also want
adam@1459 273 # the path to end with a slash for ease of parsing, so make sure
adam@1459 274 # there is one (and only one) here.
adam@1459 275 func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
adam@1459 276 -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
adam@1459 277 while :; do
adam@1459 278 # Processed it all yet?
adam@1459 279 if test "$func_normal_abspath_tpath" = / ; then
adam@1459 280 # If we ascended to the root using ".." the result may be empty now.
adam@1459 281 if test -z "$func_normal_abspath_result" ; then
adam@1459 282 func_normal_abspath_result=/
adam@1459 283 fi
adam@1459 284 break
adam@1459 285 fi
adam@1459 286 func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
adam@1459 287 -e "$pathcar"`
adam@1459 288 func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
adam@1459 289 -e "$pathcdr"`
adam@1459 290 # Figure out what to do with it
adam@1459 291 case $func_normal_abspath_tcomponent in
adam@1459 292 "")
adam@1459 293 # Trailing empty path component, ignore it.
adam@1459 294 ;;
adam@1459 295 ..)
adam@1459 296 # Parent dir; strip last assembled component from result.
adam@1459 297 func_dirname "$func_normal_abspath_result"
adam@1459 298 func_normal_abspath_result=$func_dirname_result
adam@1459 299 ;;
adam@1459 300 *)
adam@1459 301 # Actual path component, append it.
adam@1459 302 func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
adam@1459 303 ;;
adam@1459 304 esac
adam@1459 305 done
adam@1459 306 # Restore leading double-slash if one was found on entry.
adam@1459 307 func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
adam@1459 308 }
adam@1459 309
adam@1459 310 # func_relative_path SRCDIR DSTDIR
adam@1459 311 # generates a relative path from SRCDIR to DSTDIR, with a trailing
adam@1459 312 # slash if non-empty, suitable for immediately appending a filename
adam@1459 313 # without needing to append a separator.
adam@1459 314 # value returned in "$func_relative_path_result"
adam@1459 315 func_relative_path ()
adam@1459 316 {
adam@1459 317 func_relative_path_result=
adam@1459 318 func_normal_abspath "$1"
adam@1459 319 func_relative_path_tlibdir=$func_normal_abspath_result
adam@1459 320 func_normal_abspath "$2"
adam@1459 321 func_relative_path_tbindir=$func_normal_abspath_result
adam@1459 322
adam@1459 323 # Ascend the tree starting from libdir
adam@1459 324 while :; do
adam@1459 325 # check if we have found a prefix of bindir
adam@1459 326 case $func_relative_path_tbindir in
adam@1459 327 $func_relative_path_tlibdir)
adam@1459 328 # found an exact match
adam@1459 329 func_relative_path_tcancelled=
adam@1459 330 break
adam@1459 331 ;;
adam@1459 332 $func_relative_path_tlibdir*)
adam@1459 333 # found a matching prefix
adam@1459 334 func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
adam@1459 335 func_relative_path_tcancelled=$func_stripname_result
adam@1459 336 if test -z "$func_relative_path_result"; then
adam@1459 337 func_relative_path_result=.
adam@1459 338 fi
adam@1459 339 break
adam@1459 340 ;;
adam@1459 341 *)
adam@1459 342 func_dirname $func_relative_path_tlibdir
adam@1459 343 func_relative_path_tlibdir=${func_dirname_result}
adam@1459 344 if test "x$func_relative_path_tlibdir" = x ; then
adam@1459 345 # Have to descend all the way to the root!
adam@1459 346 func_relative_path_result=../$func_relative_path_result
adam@1459 347 func_relative_path_tcancelled=$func_relative_path_tbindir
adam@1459 348 break
adam@1459 349 fi
adam@1459 350 func_relative_path_result=../$func_relative_path_result
adam@1459 351 ;;
adam@1459 352 esac
adam@1459 353 done
adam@1459 354
adam@1459 355 # Now calculate path; take care to avoid doubling-up slashes.
adam@1459 356 func_stripname '' '/' "$func_relative_path_result"
adam@1459 357 func_relative_path_result=$func_stripname_result
adam@1459 358 func_stripname '/' '/' "$func_relative_path_tcancelled"
adam@1459 359 if test "x$func_stripname_result" != x ; then
adam@1459 360 func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
adamc@1133 361 fi
adam@1459 362
adam@1459 363 # Normalisation. If bindir is libdir, return empty string,
adam@1459 364 # else relative path ending with a slash; either way, target
adam@1459 365 # file name can be directly appended.
adam@1459 366 if test ! -z "$func_relative_path_result"; then
adam@1459 367 func_stripname './' '' "$func_relative_path_result/"
adam@1459 368 func_relative_path_result=$func_stripname_result
adam@1459 369 fi
adam@1459 370 }
adamc@1133 371
adamc@1133 372 # The name of this program:
adamc@1133 373 func_dirname_and_basename "$progpath"
adamc@1133 374 progname=$func_basename_result
adamc@1133 375
adamc@1133 376 # Make sure we have an absolute path for reexecution:
adamc@1133 377 case $progpath in
adamc@1133 378 [\\/]*|[A-Za-z]:\\*) ;;
adamc@1133 379 *[\\/]*)
adamc@1133 380 progdir=$func_dirname_result
adamc@1133 381 progdir=`cd "$progdir" && pwd`
adamc@1133 382 progpath="$progdir/$progname"
adamc@1133 383 ;;
adamc@1133 384 *)
adamc@1133 385 save_IFS="$IFS"
adam@1599 386 IFS=${PATH_SEPARATOR-:}
adamc@1133 387 for progdir in $PATH; do
adamc@1133 388 IFS="$save_IFS"
adamc@1133 389 test -x "$progdir/$progname" && break
adamc@1133 390 done
adamc@1133 391 IFS="$save_IFS"
adamc@1133 392 test -n "$progdir" || progdir=`pwd`
adamc@1133 393 progpath="$progdir/$progname"
adamc@1133 394 ;;
adamc@1133 395 esac
adamc@1133 396
adamc@1133 397 # Sed substitution that helps us do robust quoting. It backslashifies
adamc@1133 398 # metacharacters that are still active within double-quoted strings.
adamc@1133 399 Xsed="${SED}"' -e 1s/^X//'
adamc@1133 400 sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
adamc@1133 401
adamc@1133 402 # Same as above, but do not quote variable references.
adamc@1133 403 double_quote_subst='s/\(["`\\]\)/\\\1/g'
adamc@1133 404
adam@1459 405 # Sed substitution that turns a string into a regex matching for the
adam@1459 406 # string literally.
adam@1459 407 sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
adam@1459 408
adam@1459 409 # Sed substitution that converts a w32 file name or path
adam@1459 410 # which contains forward slashes, into one that contains
adam@1459 411 # (escaped) backslashes. A very naive implementation.
adam@1459 412 lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
adam@1459 413
adamc@1133 414 # Re-`\' parameter expansions in output of double_quote_subst that were
adamc@1133 415 # `\'-ed in input to the same. If an odd number of `\' preceded a '$'
adamc@1133 416 # in input to double_quote_subst, that '$' was protected from expansion.
adamc@1133 417 # Since each input `\' is now two `\'s, look for any number of runs of
adamc@1133 418 # four `\'s followed by two `\'s and then a '$'. `\' that '$'.
adamc@1133 419 bs='\\'
adamc@1133 420 bs2='\\\\'
adamc@1133 421 bs4='\\\\\\\\'
adamc@1133 422 dollar='\$'
adamc@1133 423 sed_double_backslash="\
adamc@1133 424 s/$bs4/&\\
adamc@1133 425 /g
adamc@1133 426 s/^$bs2$dollar/$bs&/
adamc@1133 427 s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
adamc@1133 428 s/\n//g"
adamc@1133 429
adamc@1133 430 # Standard options:
adamc@1133 431 opt_dry_run=false
adamc@1133 432 opt_help=false
adamc@1133 433 opt_quiet=false
adamc@1133 434 opt_verbose=false
adamc@1133 435 opt_warning=:
adamc@1133 436
adamc@1133 437 # func_echo arg...
adamc@1133 438 # Echo program name prefixed message, along with the current mode
adamc@1133 439 # name if it has been set yet.
adamc@1133 440 func_echo ()
adamc@1133 441 {
adam@1459 442 $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
adamc@1133 443 }
adamc@1133 444
adamc@1133 445 # func_verbose arg...
adamc@1133 446 # Echo program name prefixed message in verbose mode only.
adamc@1133 447 func_verbose ()
adamc@1133 448 {
adamc@1133 449 $opt_verbose && func_echo ${1+"$@"}
adamc@1133 450
adamc@1133 451 # A bug in bash halts the script if the last line of a function
adamc@1133 452 # fails when set -e is in force, so we need another command to
adamc@1133 453 # work around that:
adamc@1133 454 :
adamc@1133 455 }
adamc@1133 456
adam@1459 457 # func_echo_all arg...
adam@1459 458 # Invoke $ECHO with all args, space-separated.
adam@1459 459 func_echo_all ()
adam@1459 460 {
adam@1459 461 $ECHO "$*"
adam@1459 462 }
adam@1459 463
adamc@1133 464 # func_error arg...
adamc@1133 465 # Echo program name prefixed message to standard error.
adamc@1133 466 func_error ()
adamc@1133 467 {
adam@1459 468 $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
adamc@1133 469 }
adamc@1133 470
adamc@1133 471 # func_warning arg...
adamc@1133 472 # Echo program name prefixed warning message to standard error.
adamc@1133 473 func_warning ()
adamc@1133 474 {
adam@1459 475 $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
adamc@1133 476
adamc@1133 477 # bash bug again:
adamc@1133 478 :
adamc@1133 479 }
adamc@1133 480
adamc@1133 481 # func_fatal_error arg...
adamc@1133 482 # Echo program name prefixed message to standard error, and exit.
adamc@1133 483 func_fatal_error ()
adamc@1133 484 {
adamc@1133 485 func_error ${1+"$@"}
adamc@1133 486 exit $EXIT_FAILURE
adamc@1133 487 }
adamc@1133 488
adamc@1133 489 # func_fatal_help arg...
adamc@1133 490 # Echo program name prefixed message to standard error, followed by
adamc@1133 491 # a help hint, and exit.
adamc@1133 492 func_fatal_help ()
adamc@1133 493 {
adamc@1133 494 func_error ${1+"$@"}
adamc@1133 495 func_fatal_error "$help"
adamc@1133 496 }
adamc@1133 497 help="Try \`$progname --help' for more information." ## default
adamc@1133 498
adamc@1133 499
adamc@1133 500 # func_grep expression filename
adamc@1133 501 # Check whether EXPRESSION matches any line of FILENAME, without output.
adamc@1133 502 func_grep ()
adamc@1133 503 {
adamc@1133 504 $GREP "$1" "$2" >/dev/null 2>&1
adamc@1133 505 }
adamc@1133 506
adamc@1133 507
adamc@1133 508 # func_mkdir_p directory-path
adamc@1133 509 # Make sure the entire path to DIRECTORY-PATH is available.
adamc@1133 510 func_mkdir_p ()
adamc@1133 511 {
adamc@1133 512 my_directory_path="$1"
adamc@1133 513 my_dir_list=
adamc@1133 514
adamc@1133 515 if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
adamc@1133 516
adamc@1133 517 # Protect directory names starting with `-'
adamc@1133 518 case $my_directory_path in
adamc@1133 519 -*) my_directory_path="./$my_directory_path" ;;
adamc@1133 520 esac
adamc@1133 521
adamc@1133 522 # While some portion of DIR does not yet exist...
adamc@1133 523 while test ! -d "$my_directory_path"; do
adamc@1133 524 # ...make a list in topmost first order. Use a colon delimited
adamc@1133 525 # list incase some portion of path contains whitespace.
adamc@1133 526 my_dir_list="$my_directory_path:$my_dir_list"
adamc@1133 527
adamc@1133 528 # If the last portion added has no slash in it, the list is done
adamc@1133 529 case $my_directory_path in */*) ;; *) break ;; esac
adamc@1133 530
adamc@1133 531 # ...otherwise throw away the child directory and loop
adam@1459 532 my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
adamc@1133 533 done
adam@1459 534 my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
adamc@1133 535
adamc@1133 536 save_mkdir_p_IFS="$IFS"; IFS=':'
adamc@1133 537 for my_dir in $my_dir_list; do
adamc@1133 538 IFS="$save_mkdir_p_IFS"
adamc@1133 539 # mkdir can fail with a `File exist' error if two processes
adamc@1133 540 # try to create one of the directories concurrently. Don't
adamc@1133 541 # stop in that case!
adamc@1133 542 $MKDIR "$my_dir" 2>/dev/null || :
adamc@1133 543 done
adamc@1133 544 IFS="$save_mkdir_p_IFS"
adamc@1133 545
adamc@1133 546 # Bail out if we (or some other process) failed to create a directory.
adamc@1133 547 test -d "$my_directory_path" || \
adamc@1133 548 func_fatal_error "Failed to create \`$1'"
adamc@1133 549 fi
adamc@1133 550 }
adamc@1133 551
adamc@1133 552
adamc@1133 553 # func_mktempdir [string]
adamc@1133 554 # Make a temporary directory that won't clash with other running
adamc@1133 555 # libtool processes, and avoids race conditions if possible. If
adamc@1133 556 # given, STRING is the basename for that directory.
adamc@1133 557 func_mktempdir ()
adamc@1133 558 {
adamc@1133 559 my_template="${TMPDIR-/tmp}/${1-$progname}"
adamc@1133 560
adamc@1133 561 if test "$opt_dry_run" = ":"; then
adamc@1133 562 # Return a directory name, but don't create it in dry-run mode
adamc@1133 563 my_tmpdir="${my_template}-$$"
adamc@1133 564 else
adamc@1133 565
adamc@1133 566 # If mktemp works, use that first and foremost
adamc@1133 567 my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
adamc@1133 568
adamc@1133 569 if test ! -d "$my_tmpdir"; then
adamc@1133 570 # Failing that, at least try and use $RANDOM to avoid a race
adamc@1133 571 my_tmpdir="${my_template}-${RANDOM-0}$$"
adamc@1133 572
adamc@1133 573 save_mktempdir_umask=`umask`
adamc@1133 574 umask 0077
adamc@1133 575 $MKDIR "$my_tmpdir"
adamc@1133 576 umask $save_mktempdir_umask
adamc@1133 577 fi
adamc@1133 578
adamc@1133 579 # If we're not in dry-run mode, bomb out on failure
adamc@1133 580 test -d "$my_tmpdir" || \
adamc@1133 581 func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
adamc@1133 582 fi
adamc@1133 583
adam@1459 584 $ECHO "$my_tmpdir"
adamc@1133 585 }
adamc@1133 586
adamc@1133 587
adamc@1133 588 # func_quote_for_eval arg
adamc@1133 589 # Aesthetically quote ARG to be evaled later.
adamc@1133 590 # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
adamc@1133 591 # is double-quoted, suitable for a subsequent eval, whereas
adamc@1133 592 # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
adamc@1133 593 # which are still active within double quotes backslashified.
adamc@1133 594 func_quote_for_eval ()
adamc@1133 595 {
adamc@1133 596 case $1 in
adamc@1133 597 *[\\\`\"\$]*)
adam@1459 598 func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
adamc@1133 599 *)
adamc@1133 600 func_quote_for_eval_unquoted_result="$1" ;;
adamc@1133 601 esac
adamc@1133 602
adamc@1133 603 case $func_quote_for_eval_unquoted_result in
adamc@1133 604 # Double-quote args containing shell metacharacters to delay
adamc@1133 605 # word splitting, command substitution and and variable
adamc@1133 606 # expansion for a subsequent eval.
adamc@1133 607 # Many Bourne shells cannot handle close brackets correctly
adamc@1133 608 # in scan sets, so we specify it separately.
adamc@1133 609 *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
adamc@1133 610 func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
adamc@1133 611 ;;
adamc@1133 612 *)
adamc@1133 613 func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
adamc@1133 614 esac
adamc@1133 615 }
adamc@1133 616
adamc@1133 617
adamc@1133 618 # func_quote_for_expand arg
adamc@1133 619 # Aesthetically quote ARG to be evaled later; same as above,
adamc@1133 620 # but do not quote variable references.
adamc@1133 621 func_quote_for_expand ()
adamc@1133 622 {
adamc@1133 623 case $1 in
adamc@1133 624 *[\\\`\"]*)
adam@1459 625 my_arg=`$ECHO "$1" | $SED \
adamc@1133 626 -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
adamc@1133 627 *)
adamc@1133 628 my_arg="$1" ;;
adamc@1133 629 esac
adamc@1133 630
adamc@1133 631 case $my_arg in
adamc@1133 632 # Double-quote args containing shell metacharacters to delay
adamc@1133 633 # word splitting and command substitution for a subsequent eval.
adamc@1133 634 # Many Bourne shells cannot handle close brackets correctly
adamc@1133 635 # in scan sets, so we specify it separately.
adamc@1133 636 *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
adamc@1133 637 my_arg="\"$my_arg\""
adamc@1133 638 ;;
adamc@1133 639 esac
adamc@1133 640
adamc@1133 641 func_quote_for_expand_result="$my_arg"
adamc@1133 642 }
adamc@1133 643
adamc@1133 644
adamc@1133 645 # func_show_eval cmd [fail_exp]
adamc@1133 646 # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
adamc@1133 647 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
adamc@1133 648 # is given, then evaluate it.
adamc@1133 649 func_show_eval ()
adamc@1133 650 {
adamc@1133 651 my_cmd="$1"
adamc@1133 652 my_fail_exp="${2-:}"
adamc@1133 653
adamc@1133 654 ${opt_silent-false} || {
adamc@1133 655 func_quote_for_expand "$my_cmd"
adamc@1133 656 eval "func_echo $func_quote_for_expand_result"
adamc@1133 657 }
adamc@1133 658
adamc@1133 659 if ${opt_dry_run-false}; then :; else
adamc@1133 660 eval "$my_cmd"
adamc@1133 661 my_status=$?
adamc@1133 662 if test "$my_status" -eq 0; then :; else
adamc@1133 663 eval "(exit $my_status); $my_fail_exp"
adamc@1133 664 fi
adamc@1133 665 fi
adamc@1133 666 }
adamc@1133 667
adamc@1133 668
adamc@1133 669 # func_show_eval_locale cmd [fail_exp]
adamc@1133 670 # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
adamc@1133 671 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
adamc@1133 672 # is given, then evaluate it. Use the saved locale for evaluation.
adamc@1133 673 func_show_eval_locale ()
adamc@1133 674 {
adamc@1133 675 my_cmd="$1"
adamc@1133 676 my_fail_exp="${2-:}"
adamc@1133 677
adamc@1133 678 ${opt_silent-false} || {
adamc@1133 679 func_quote_for_expand "$my_cmd"
adamc@1133 680 eval "func_echo $func_quote_for_expand_result"
adamc@1133 681 }
adamc@1133 682
adamc@1133 683 if ${opt_dry_run-false}; then :; else
adamc@1133 684 eval "$lt_user_locale
adamc@1133 685 $my_cmd"
adamc@1133 686 my_status=$?
adamc@1133 687 eval "$lt_safe_locale"
adamc@1133 688 if test "$my_status" -eq 0; then :; else
adamc@1133 689 eval "(exit $my_status); $my_fail_exp"
adamc@1133 690 fi
adamc@1133 691 fi
adamc@1133 692 }
adamc@1133 693
adam@1459 694 # func_tr_sh
adam@1459 695 # Turn $1 into a string suitable for a shell variable name.
adam@1459 696 # Result is stored in $func_tr_sh_result. All characters
adam@1459 697 # not in the set a-zA-Z0-9_ are replaced with '_'. Further,
adam@1459 698 # if $1 begins with a digit, a '_' is prepended as well.
adam@1459 699 func_tr_sh ()
adam@1459 700 {
adam@1459 701 case $1 in
adam@1459 702 [0-9]* | *[!a-zA-Z0-9_]*)
adam@1459 703 func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
adam@1459 704 ;;
adam@1459 705 * )
adam@1459 706 func_tr_sh_result=$1
adam@1459 707 ;;
adam@1459 708 esac
adam@1459 709 }
adamc@1133 710
adamc@1133 711
adamc@1133 712 # func_version
adamc@1133 713 # Echo version message to standard output and exit.
adamc@1133 714 func_version ()
adamc@1133 715 {
adam@1459 716 $opt_debug
adam@1459 717
adam@1459 718 $SED -n '/(C)/!b go
adam@1459 719 :more
adam@1459 720 /\./!{
adam@1459 721 N
adam@1459 722 s/\n# / /
adam@1459 723 b more
adam@1459 724 }
adam@1459 725 :go
adam@1459 726 /^# '$PROGRAM' (GNU /,/# warranty; / {
adamc@1133 727 s/^# //
adamc@1133 728 s/^# *$//
adamc@1133 729 s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
adamc@1133 730 p
adamc@1133 731 }' < "$progpath"
adamc@1133 732 exit $?
adamc@1133 733 }
adamc@1133 734
adamc@1133 735 # func_usage
adamc@1133 736 # Echo short help message to standard output and exit.
adamc@1133 737 func_usage ()
adamc@1133 738 {
adam@1459 739 $opt_debug
adam@1459 740
adam@1459 741 $SED -n '/^# Usage:/,/^# *.*--help/ {
adamc@1133 742 s/^# //
adamc@1133 743 s/^# *$//
adamc@1133 744 s/\$progname/'$progname'/
adamc@1133 745 p
adamc@1133 746 }' < "$progpath"
adam@1459 747 echo
adamc@1133 748 $ECHO "run \`$progname --help | more' for full usage"
adamc@1133 749 exit $?
adamc@1133 750 }
adamc@1133 751
adam@1459 752 # func_help [NOEXIT]
adam@1459 753 # Echo long help message to standard output and exit,
adam@1459 754 # unless 'noexit' is passed as argument.
adamc@1133 755 func_help ()
adamc@1133 756 {
adam@1459 757 $opt_debug
adam@1459 758
adamc@1133 759 $SED -n '/^# Usage:/,/# Report bugs to/ {
adam@1459 760 :print
adamc@1133 761 s/^# //
adamc@1133 762 s/^# *$//
adamc@1133 763 s*\$progname*'$progname'*
adamc@1133 764 s*\$host*'"$host"'*
adamc@1133 765 s*\$SHELL*'"$SHELL"'*
adamc@1133 766 s*\$LTCC*'"$LTCC"'*
adamc@1133 767 s*\$LTCFLAGS*'"$LTCFLAGS"'*
adamc@1133 768 s*\$LD*'"$LD"'*
adamc@1133 769 s/\$with_gnu_ld/'"$with_gnu_ld"'/
adam@1599 770 s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
adam@1599 771 s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
adamc@1133 772 p
adam@1459 773 d
adam@1459 774 }
adam@1459 775 /^# .* home page:/b print
adam@1459 776 /^# General help using/b print
adam@1459 777 ' < "$progpath"
adam@1459 778 ret=$?
adam@1459 779 if test -z "$1"; then
adam@1459 780 exit $ret
adam@1459 781 fi
adamc@1133 782 }
adamc@1133 783
adamc@1133 784 # func_missing_arg argname
adamc@1133 785 # Echo program name prefixed message to standard error and set global
adamc@1133 786 # exit_cmd.
adamc@1133 787 func_missing_arg ()
adamc@1133 788 {
adam@1459 789 $opt_debug
adam@1459 790
adam@1459 791 func_error "missing argument for $1."
adamc@1133 792 exit_cmd=exit
adamc@1133 793 }
adamc@1133 794
adam@1459 795
adam@1459 796 # func_split_short_opt shortopt
adam@1459 797 # Set func_split_short_opt_name and func_split_short_opt_arg shell
adam@1459 798 # variables after splitting SHORTOPT after the 2nd character.
adam@1459 799 func_split_short_opt ()
adam@1459 800 {
adam@1459 801 my_sed_short_opt='1s/^\(..\).*$/\1/;q'
adam@1459 802 my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
adam@1459 803
adam@1459 804 func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
adam@1459 805 func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
adam@1459 806 } # func_split_short_opt may be replaced by extended shell implementation
adam@1459 807
adam@1459 808
adam@1459 809 # func_split_long_opt longopt
adam@1459 810 # Set func_split_long_opt_name and func_split_long_opt_arg shell
adam@1459 811 # variables after splitting LONGOPT at the `=' sign.
adam@1459 812 func_split_long_opt ()
adam@1459 813 {
adam@1459 814 my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
adam@1459 815 my_sed_long_arg='1s/^--[^=]*=//'
adam@1459 816
adam@1459 817 func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
adam@1459 818 func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
adam@1459 819 } # func_split_long_opt may be replaced by extended shell implementation
adam@1459 820
adamc@1133 821 exit_cmd=:
adamc@1133 822
adamc@1133 823
adamc@1133 824
adamc@1133 825
adamc@1133 826
adamc@1133 827 magic="%%%MAGIC variable%%%"
adamc@1133 828 magic_exe="%%%MAGIC EXE variable%%%"
adamc@1133 829
adamc@1133 830 # Global variables.
adamc@1133 831 nonopt=
adamc@1133 832 preserve_args=
adamc@1133 833 lo2o="s/\\.lo\$/.${objext}/"
adamc@1133 834 o2lo="s/\\.${objext}\$/.lo/"
adamc@1133 835 extracted_archives=
adamc@1133 836 extracted_serial=0
adamc@1133 837
adamc@1133 838 # If this variable is set in any of the actions, the command in it
adamc@1133 839 # will be execed at the end. This prevents here-documents from being
adamc@1133 840 # left over by shells.
adamc@1133 841 exec_cmd=
adamc@1133 842
adam@1459 843 # func_append var value
adam@1459 844 # Append VALUE to the end of shell variable VAR.
adam@1459 845 func_append ()
adam@1459 846 {
adam@1459 847 eval "${1}=\$${1}\${2}"
adam@1459 848 } # func_append may be replaced by extended shell implementation
adam@1459 849
adam@1459 850 # func_append_quoted var value
adam@1459 851 # Quote VALUE and append to the end of shell variable VAR, separated
adam@1459 852 # by a space.
adam@1459 853 func_append_quoted ()
adam@1459 854 {
adam@1459 855 func_quote_for_eval "${2}"
adam@1459 856 eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
adam@1459 857 } # func_append_quoted may be replaced by extended shell implementation
adam@1459 858
adam@1459 859
adam@1459 860 # func_arith arithmetic-term...
adam@1459 861 func_arith ()
adam@1459 862 {
adam@1459 863 func_arith_result=`expr "${@}"`
adam@1459 864 } # func_arith may be replaced by extended shell implementation
adam@1459 865
adam@1459 866
adam@1459 867 # func_len string
adam@1459 868 # STRING may not start with a hyphen.
adam@1459 869 func_len ()
adam@1459 870 {
adam@1459 871 func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
adam@1459 872 } # func_len may be replaced by extended shell implementation
adam@1459 873
adam@1459 874
adam@1459 875 # func_lo2o object
adam@1459 876 func_lo2o ()
adam@1459 877 {
adam@1459 878 func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
adam@1459 879 } # func_lo2o may be replaced by extended shell implementation
adam@1459 880
adam@1459 881
adam@1459 882 # func_xform libobj-or-source
adam@1459 883 func_xform ()
adam@1459 884 {
adam@1459 885 func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
adam@1459 886 } # func_xform may be replaced by extended shell implementation
adam@1459 887
adam@1459 888
adamc@1133 889 # func_fatal_configuration arg...
adamc@1133 890 # Echo program name prefixed message to standard error, followed by
adamc@1133 891 # a configuration failure hint, and exit.
adamc@1133 892 func_fatal_configuration ()
adamc@1133 893 {
adamc@1133 894 func_error ${1+"$@"}
adamc@1133 895 func_error "See the $PACKAGE documentation for more information."
adamc@1133 896 func_fatal_error "Fatal configuration error."
adamc@1133 897 }
adamc@1133 898
adamc@1133 899
adamc@1133 900 # func_config
adamc@1133 901 # Display the configuration for all the tags in this script.
adamc@1133 902 func_config ()
adamc@1133 903 {
adamc@1133 904 re_begincf='^# ### BEGIN LIBTOOL'
adamc@1133 905 re_endcf='^# ### END LIBTOOL'
adamc@1133 906
adamc@1133 907 # Default configuration.
adamc@1133 908 $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
adamc@1133 909
adamc@1133 910 # Now print the configurations for the tags.
adamc@1133 911 for tagname in $taglist; do
adamc@1133 912 $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
adamc@1133 913 done
adamc@1133 914
adamc@1133 915 exit $?
adamc@1133 916 }
adamc@1133 917
adamc@1133 918 # func_features
adamc@1133 919 # Display the features supported by this script.
adamc@1133 920 func_features ()
adamc@1133 921 {
adam@1459 922 echo "host: $host"
adamc@1133 923 if test "$build_libtool_libs" = yes; then
adam@1459 924 echo "enable shared libraries"
adamc@1133 925 else
adam@1459 926 echo "disable shared libraries"
adamc@1133 927 fi
adamc@1133 928 if test "$build_old_libs" = yes; then
adam@1459 929 echo "enable static libraries"
adamc@1133 930 else
adam@1459 931 echo "disable static libraries"
adamc@1133 932 fi
adamc@1133 933
adamc@1133 934 exit $?
adamc@1133 935 }
adamc@1133 936
adamc@1133 937 # func_enable_tag tagname
adamc@1133 938 # Verify that TAGNAME is valid, and either flag an error and exit, or
adamc@1133 939 # enable the TAGNAME tag. We also add TAGNAME to the global $taglist
adamc@1133 940 # variable here.
adamc@1133 941 func_enable_tag ()
adamc@1133 942 {
adamc@1133 943 # Global variable:
adamc@1133 944 tagname="$1"
adamc@1133 945
adamc@1133 946 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
adamc@1133 947 re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
adamc@1133 948 sed_extractcf="/$re_begincf/,/$re_endcf/p"
adamc@1133 949
adamc@1133 950 # Validate tagname.
adamc@1133 951 case $tagname in
adamc@1133 952 *[!-_A-Za-z0-9,/]*)
adamc@1133 953 func_fatal_error "invalid tag name: $tagname"
adamc@1133 954 ;;
adamc@1133 955 esac
adamc@1133 956
adamc@1133 957 # Don't test for the "default" C tag, as we know it's
adamc@1133 958 # there but not specially marked.
adamc@1133 959 case $tagname in
adamc@1133 960 CC) ;;
adamc@1133 961 *)
adamc@1133 962 if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
adamc@1133 963 taglist="$taglist $tagname"
adamc@1133 964
adamc@1133 965 # Evaluate the configuration. Be careful to quote the path
adamc@1133 966 # and the sed script, to avoid splitting on whitespace, but
adamc@1133 967 # also don't use non-portable quotes within backquotes within
adamc@1133 968 # quotes we have to do it in 2 steps:
adamc@1133 969 extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
adamc@1133 970 eval "$extractedcf"
adamc@1133 971 else
adamc@1133 972 func_error "ignoring unknown tag $tagname"
adamc@1133 973 fi
adamc@1133 974 ;;
adamc@1133 975 esac
adamc@1133 976 }
adamc@1133 977
adamc@1133 978 # func_check_version_match
adamc@1133 979 # Ensure that we are using m4 macros, and libtool script from the same
adamc@1133 980 # release of libtool.
adamc@1133 981 func_check_version_match ()
adamc@1133 982 {
adamc@1133 983 if test "$package_revision" != "$macro_revision"; then
adamc@1133 984 if test "$VERSION" != "$macro_version"; then
adamc@1133 985 if test -z "$macro_version"; then
adamc@1133 986 cat >&2 <<_LT_EOF
adamc@1133 987 $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
adamc@1133 988 $progname: definition of this LT_INIT comes from an older release.
adamc@1133 989 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
adamc@1133 990 $progname: and run autoconf again.
adamc@1133 991 _LT_EOF
adamc@1133 992 else
adamc@1133 993 cat >&2 <<_LT_EOF
adamc@1133 994 $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
adamc@1133 995 $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
adamc@1133 996 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
adamc@1133 997 $progname: and run autoconf again.
adamc@1133 998 _LT_EOF
adamc@1133 999 fi
adamc@1133 1000 else
adamc@1133 1001 cat >&2 <<_LT_EOF
adamc@1133 1002 $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
adamc@1133 1003 $progname: but the definition of this LT_INIT comes from revision $macro_revision.
adamc@1133 1004 $progname: You should recreate aclocal.m4 with macros from revision $package_revision
adamc@1133 1005 $progname: of $PACKAGE $VERSION and run autoconf again.
adamc@1133 1006 _LT_EOF
adamc@1133 1007 fi
adamc@1133 1008
adamc@1133 1009 exit $EXIT_MISMATCH
adamc@1133 1010 fi
adamc@1133 1011 }
adamc@1133 1012
adamc@1133 1013
adam@1459 1014 # Shorthand for --mode=foo, only valid as the first argument
adam@1459 1015 case $1 in
adam@1459 1016 clean|clea|cle|cl)
adam@1459 1017 shift; set dummy --mode clean ${1+"$@"}; shift
adam@1459 1018 ;;
adam@1459 1019 compile|compil|compi|comp|com|co|c)
adam@1459 1020 shift; set dummy --mode compile ${1+"$@"}; shift
adam@1459 1021 ;;
adam@1459 1022 execute|execut|execu|exec|exe|ex|e)
adam@1459 1023 shift; set dummy --mode execute ${1+"$@"}; shift
adam@1459 1024 ;;
adam@1459 1025 finish|finis|fini|fin|fi|f)
adam@1459 1026 shift; set dummy --mode finish ${1+"$@"}; shift
adam@1459 1027 ;;
adam@1459 1028 install|instal|insta|inst|ins|in|i)
adam@1459 1029 shift; set dummy --mode install ${1+"$@"}; shift
adam@1459 1030 ;;
adam@1459 1031 link|lin|li|l)
adam@1459 1032 shift; set dummy --mode link ${1+"$@"}; shift
adam@1459 1033 ;;
adam@1459 1034 uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
adam@1459 1035 shift; set dummy --mode uninstall ${1+"$@"}; shift
adam@1459 1036 ;;
adam@1459 1037 esac
adam@1459 1038
adam@1459 1039
adam@1459 1040
adam@1459 1041 # Option defaults:
adam@1459 1042 opt_debug=:
adam@1459 1043 opt_dry_run=false
adam@1459 1044 opt_config=false
adam@1459 1045 opt_preserve_dup_deps=false
adam@1459 1046 opt_features=false
adam@1459 1047 opt_finish=false
adam@1459 1048 opt_help=false
adam@1459 1049 opt_help_all=false
adam@1459 1050 opt_silent=:
adam@1599 1051 opt_warning=:
adam@1459 1052 opt_verbose=:
adam@1459 1053 opt_silent=false
adam@1459 1054 opt_verbose=false
adam@1459 1055
adam@1459 1056
adam@1459 1057 # Parse options once, thoroughly. This comes as soon as possible in the
adam@1459 1058 # script to make things like `--version' happen as quickly as we can.
adam@1459 1059 {
adam@1459 1060 # this just eases exit handling
adam@1459 1061 while test $# -gt 0; do
adam@1459 1062 opt="$1"
adam@1459 1063 shift
adam@1459 1064 case $opt in
adam@1459 1065 --debug|-x) opt_debug='set -x'
adam@1459 1066 func_echo "enabling shell trace mode"
adam@1459 1067 $opt_debug
adam@1459 1068 ;;
adam@1459 1069 --dry-run|--dryrun|-n)
adam@1459 1070 opt_dry_run=:
adam@1459 1071 ;;
adam@1459 1072 --config)
adam@1459 1073 opt_config=:
adam@1459 1074 func_config
adam@1459 1075 ;;
adam@1459 1076 --dlopen|-dlopen)
adam@1459 1077 optarg="$1"
adam@1459 1078 opt_dlopen="${opt_dlopen+$opt_dlopen
adam@1459 1079 }$optarg"
adam@1459 1080 shift
adam@1459 1081 ;;
adam@1459 1082 --preserve-dup-deps)
adam@1459 1083 opt_preserve_dup_deps=:
adam@1459 1084 ;;
adam@1459 1085 --features)
adam@1459 1086 opt_features=:
adam@1459 1087 func_features
adam@1459 1088 ;;
adam@1459 1089 --finish)
adam@1459 1090 opt_finish=:
adam@1459 1091 set dummy --mode finish ${1+"$@"}; shift
adam@1459 1092 ;;
adam@1459 1093 --help)
adam@1459 1094 opt_help=:
adam@1459 1095 ;;
adam@1459 1096 --help-all)
adam@1459 1097 opt_help_all=:
adam@1459 1098 opt_help=': help-all'
adam@1459 1099 ;;
adam@1459 1100 --mode)
adam@1459 1101 test $# = 0 && func_missing_arg $opt && break
adam@1459 1102 optarg="$1"
adam@1459 1103 opt_mode="$optarg"
adam@1459 1104 case $optarg in
adam@1459 1105 # Valid mode arguments:
adam@1459 1106 clean|compile|execute|finish|install|link|relink|uninstall) ;;
adam@1459 1107
adam@1459 1108 # Catch anything else as an error
adam@1459 1109 *) func_error "invalid argument for $opt"
adam@1459 1110 exit_cmd=exit
adam@1459 1111 break
adam@1459 1112 ;;
adam@1459 1113 esac
adam@1459 1114 shift
adam@1459 1115 ;;
adam@1459 1116 --no-silent|--no-quiet)
adam@1459 1117 opt_silent=false
adam@1459 1118 func_append preserve_args " $opt"
adam@1459 1119 ;;
adam@1599 1120 --no-warning|--no-warn)
adam@1599 1121 opt_warning=false
adam@1599 1122 func_append preserve_args " $opt"
adam@1599 1123 ;;
adam@1459 1124 --no-verbose)
adam@1459 1125 opt_verbose=false
adam@1459 1126 func_append preserve_args " $opt"
adam@1459 1127 ;;
adam@1459 1128 --silent|--quiet)
adam@1459 1129 opt_silent=:
adam@1459 1130 func_append preserve_args " $opt"
adam@1459 1131 opt_verbose=false
adam@1459 1132 ;;
adam@1459 1133 --verbose|-v)
adam@1459 1134 opt_verbose=:
adam@1459 1135 func_append preserve_args " $opt"
adam@1459 1136 opt_silent=false
adam@1459 1137 ;;
adam@1459 1138 --tag)
adam@1459 1139 test $# = 0 && func_missing_arg $opt && break
adam@1459 1140 optarg="$1"
adam@1459 1141 opt_tag="$optarg"
adam@1459 1142 func_append preserve_args " $opt $optarg"
adam@1459 1143 func_enable_tag "$optarg"
adam@1459 1144 shift
adam@1459 1145 ;;
adam@1459 1146
adam@1459 1147 -\?|-h) func_usage ;;
adam@1459 1148 --help) func_help ;;
adam@1459 1149 --version) func_version ;;
adam@1459 1150
adam@1459 1151 # Separate optargs to long options:
adam@1459 1152 --*=*)
adam@1459 1153 func_split_long_opt "$opt"
adam@1459 1154 set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
adam@1459 1155 shift
adam@1459 1156 ;;
adam@1459 1157
adam@1459 1158 # Separate non-argument short options:
adam@1459 1159 -\?*|-h*|-n*|-v*)
adam@1459 1160 func_split_short_opt "$opt"
adam@1459 1161 set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
adam@1459 1162 shift
adam@1459 1163 ;;
adam@1459 1164
adam@1459 1165 --) break ;;
adam@1459 1166 -*) func_fatal_help "unrecognized option \`$opt'" ;;
adam@1459 1167 *) set dummy "$opt" ${1+"$@"}; shift; break ;;
adam@1459 1168 esac
adam@1459 1169 done
adam@1459 1170
adam@1459 1171 # Validate options:
adam@1459 1172
adam@1459 1173 # save first non-option argument
adam@1459 1174 if test "$#" -gt 0; then
adam@1459 1175 nonopt="$opt"
adam@1459 1176 shift
adam@1459 1177 fi
adam@1459 1178
adam@1459 1179 # preserve --debug
adam@1459 1180 test "$opt_debug" = : || func_append preserve_args " --debug"
adam@1459 1181
adam@1459 1182 case $host in
adam@1459 1183 *cygwin* | *mingw* | *pw32* | *cegcc*)
adam@1459 1184 # don't eliminate duplications in $postdeps and $predeps
adam@1459 1185 opt_duplicate_compiler_generated_deps=:
adam@1459 1186 ;;
adam@1459 1187 *)
adam@1459 1188 opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
adam@1459 1189 ;;
adam@1459 1190 esac
adam@1459 1191
adam@1459 1192 $opt_help || {
adam@1459 1193 # Sanity checks first:
adam@1459 1194 func_check_version_match
adam@1459 1195
adam@1459 1196 if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
adam@1459 1197 func_fatal_configuration "not configured to build any kind of library"
adam@1459 1198 fi
adam@1459 1199
adam@1459 1200 # Darwin sucks
adam@1459 1201 eval std_shrext=\"$shrext_cmds\"
adam@1459 1202
adam@1459 1203 # Only execute mode is allowed to have -dlopen flags.
adam@1459 1204 if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
adam@1459 1205 func_error "unrecognized option \`-dlopen'"
adam@1459 1206 $ECHO "$help" 1>&2
adam@1459 1207 exit $EXIT_FAILURE
adam@1459 1208 fi
adam@1459 1209
adam@1459 1210 # Change the help message to a mode-specific one.
adam@1459 1211 generic_help="$help"
adam@1459 1212 help="Try \`$progname --help --mode=$opt_mode' for more information."
adam@1459 1213 }
adam@1459 1214
adam@1459 1215
adam@1459 1216 # Bail if the options were screwed
adam@1459 1217 $exit_cmd $EXIT_FAILURE
adam@1459 1218 }
adam@1459 1219
adam@1459 1220
adam@1459 1221
adam@1459 1222
adamc@1133 1223 ## ----------- ##
adamc@1133 1224 ## Main. ##
adamc@1133 1225 ## ----------- ##
adamc@1133 1226
adamc@1133 1227 # func_lalib_p file
adamc@1133 1228 # True iff FILE is a libtool `.la' library or `.lo' object file.
adamc@1133 1229 # This function is only a basic sanity check; it will hardly flush out
adamc@1133 1230 # determined imposters.
adamc@1133 1231 func_lalib_p ()
adamc@1133 1232 {
adamc@1133 1233 test -f "$1" &&
adamc@1133 1234 $SED -e 4q "$1" 2>/dev/null \
adamc@1133 1235 | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
adamc@1133 1236 }
adamc@1133 1237
adamc@1133 1238 # func_lalib_unsafe_p file
adamc@1133 1239 # True iff FILE is a libtool `.la' library or `.lo' object file.
adamc@1133 1240 # This function implements the same check as func_lalib_p without
adamc@1133 1241 # resorting to external programs. To this end, it redirects stdin and
adamc@1133 1242 # closes it afterwards, without saving the original file descriptor.
adamc@1133 1243 # As a safety measure, use it only where a negative result would be
adamc@1133 1244 # fatal anyway. Works if `file' does not exist.
adamc@1133 1245 func_lalib_unsafe_p ()
adamc@1133 1246 {
adamc@1133 1247 lalib_p=no
adamc@1133 1248 if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
adamc@1133 1249 for lalib_p_l in 1 2 3 4
adamc@1133 1250 do
adamc@1133 1251 read lalib_p_line
adamc@1133 1252 case "$lalib_p_line" in
adamc@1133 1253 \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
adamc@1133 1254 esac
adamc@1133 1255 done
adamc@1133 1256 exec 0<&5 5<&-
adamc@1133 1257 fi
adamc@1133 1258 test "$lalib_p" = yes
adamc@1133 1259 }
adamc@1133 1260
adamc@1133 1261 # func_ltwrapper_script_p file
adamc@1133 1262 # True iff FILE is a libtool wrapper script
adamc@1133 1263 # This function is only a basic sanity check; it will hardly flush out
adamc@1133 1264 # determined imposters.
adamc@1133 1265 func_ltwrapper_script_p ()
adamc@1133 1266 {
adamc@1133 1267 func_lalib_p "$1"
adamc@1133 1268 }
adamc@1133 1269
adamc@1133 1270 # func_ltwrapper_executable_p file
adamc@1133 1271 # True iff FILE is a libtool wrapper executable
adamc@1133 1272 # This function is only a basic sanity check; it will hardly flush out
adamc@1133 1273 # determined imposters.
adamc@1133 1274 func_ltwrapper_executable_p ()
adamc@1133 1275 {
adamc@1133 1276 func_ltwrapper_exec_suffix=
adamc@1133 1277 case $1 in
adamc@1133 1278 *.exe) ;;
adamc@1133 1279 *) func_ltwrapper_exec_suffix=.exe ;;
adamc@1133 1280 esac
adamc@1133 1281 $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
adamc@1133 1282 }
adamc@1133 1283
adamc@1133 1284 # func_ltwrapper_scriptname file
adamc@1133 1285 # Assumes file is an ltwrapper_executable
adamc@1133 1286 # uses $file to determine the appropriate filename for a
adamc@1133 1287 # temporary ltwrapper_script.
adamc@1133 1288 func_ltwrapper_scriptname ()
adamc@1133 1289 {
adam@1459 1290 func_dirname_and_basename "$1" "" "."
adam@1459 1291 func_stripname '' '.exe' "$func_basename_result"
adam@1459 1292 func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
adamc@1133 1293 }
adamc@1133 1294
adamc@1133 1295 # func_ltwrapper_p file
adamc@1133 1296 # True iff FILE is a libtool wrapper script or wrapper executable
adamc@1133 1297 # This function is only a basic sanity check; it will hardly flush out
adamc@1133 1298 # determined imposters.
adamc@1133 1299 func_ltwrapper_p ()
adamc@1133 1300 {
adamc@1133 1301 func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
adamc@1133 1302 }
adamc@1133 1303
adamc@1133 1304
adamc@1133 1305 # func_execute_cmds commands fail_cmd
adamc@1133 1306 # Execute tilde-delimited COMMANDS.
adamc@1133 1307 # If FAIL_CMD is given, eval that upon failure.
adamc@1133 1308 # FAIL_CMD may read-access the current command in variable CMD!
adamc@1133 1309 func_execute_cmds ()
adamc@1133 1310 {
adamc@1133 1311 $opt_debug
adamc@1133 1312 save_ifs=$IFS; IFS='~'
adamc@1133 1313 for cmd in $1; do
adamc@1133 1314 IFS=$save_ifs
adamc@1133 1315 eval cmd=\"$cmd\"
adamc@1133 1316 func_show_eval "$cmd" "${2-:}"
adamc@1133 1317 done
adamc@1133 1318 IFS=$save_ifs
adamc@1133 1319 }
adamc@1133 1320
adamc@1133 1321
adamc@1133 1322 # func_source file
adamc@1133 1323 # Source FILE, adding directory component if necessary.
adamc@1133 1324 # Note that it is not necessary on cygwin/mingw to append a dot to
adamc@1133 1325 # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
adamc@1133 1326 # behavior happens only for exec(3), not for open(2)! Also, sourcing
adamc@1133 1327 # `FILE.' does not work on cygwin managed mounts.
adamc@1133 1328 func_source ()
adamc@1133 1329 {
adamc@1133 1330 $opt_debug
adamc@1133 1331 case $1 in
adamc@1133 1332 */* | *\\*) . "$1" ;;
adamc@1133 1333 *) . "./$1" ;;
adamc@1133 1334 esac
adamc@1133 1335 }
adamc@1133 1336
adamc@1133 1337
adam@1459 1338 # func_resolve_sysroot PATH
adam@1459 1339 # Replace a leading = in PATH with a sysroot. Store the result into
adam@1459 1340 # func_resolve_sysroot_result
adam@1459 1341 func_resolve_sysroot ()
adam@1459 1342 {
adam@1459 1343 func_resolve_sysroot_result=$1
adam@1459 1344 case $func_resolve_sysroot_result in
adam@1459 1345 =*)
adam@1459 1346 func_stripname '=' '' "$func_resolve_sysroot_result"
adam@1459 1347 func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
adam@1459 1348 ;;
adam@1459 1349 esac
adam@1459 1350 }
adam@1459 1351
adam@1459 1352 # func_replace_sysroot PATH
adam@1459 1353 # If PATH begins with the sysroot, replace it with = and
adam@1459 1354 # store the result into func_replace_sysroot_result.
adam@1459 1355 func_replace_sysroot ()
adam@1459 1356 {
adam@1459 1357 case "$lt_sysroot:$1" in
adam@1459 1358 ?*:"$lt_sysroot"*)
adam@1459 1359 func_stripname "$lt_sysroot" '' "$1"
adam@1459 1360 func_replace_sysroot_result="=$func_stripname_result"
adam@1459 1361 ;;
adam@1459 1362 *)
adam@1459 1363 # Including no sysroot.
adam@1459 1364 func_replace_sysroot_result=$1
adam@1459 1365 ;;
adam@1459 1366 esac
adam@1459 1367 }
adam@1459 1368
adamc@1133 1369 # func_infer_tag arg
adamc@1133 1370 # Infer tagged configuration to use if any are available and
adamc@1133 1371 # if one wasn't chosen via the "--tag" command line option.
adamc@1133 1372 # Only attempt this if the compiler in the base compile
adamc@1133 1373 # command doesn't match the default compiler.
adamc@1133 1374 # arg is usually of the form 'gcc ...'
adamc@1133 1375 func_infer_tag ()
adamc@1133 1376 {
adamc@1133 1377 $opt_debug
adamc@1133 1378 if test -n "$available_tags" && test -z "$tagname"; then
adamc@1133 1379 CC_quoted=
adamc@1133 1380 for arg in $CC; do
adam@1459 1381 func_append_quoted CC_quoted "$arg"
adamc@1133 1382 done
adam@1459 1383 CC_expanded=`func_echo_all $CC`
adam@1459 1384 CC_quoted_expanded=`func_echo_all $CC_quoted`
adamc@1133 1385 case $@ in
adamc@1133 1386 # Blanks in the command may have been stripped by the calling shell,
adamc@1133 1387 # but not from the CC environment variable when configure was run.
adam@1459 1388 " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
adam@1459 1389 " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
adamc@1133 1390 # Blanks at the start of $base_compile will cause this to fail
adamc@1133 1391 # if we don't check for them as well.
adamc@1133 1392 *)
adamc@1133 1393 for z in $available_tags; do
adamc@1133 1394 if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
adamc@1133 1395 # Evaluate the configuration.
adamc@1133 1396 eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
adamc@1133 1397 CC_quoted=
adamc@1133 1398 for arg in $CC; do
adamc@1133 1399 # Double-quote args containing other shell metacharacters.
adam@1459 1400 func_append_quoted CC_quoted "$arg"
adamc@1133 1401 done
adam@1459 1402 CC_expanded=`func_echo_all $CC`
adam@1459 1403 CC_quoted_expanded=`func_echo_all $CC_quoted`
adamc@1133 1404 case "$@ " in
adam@1459 1405 " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
adam@1459 1406 " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
adamc@1133 1407 # The compiler in the base compile command matches
adamc@1133 1408 # the one in the tagged configuration.
adamc@1133 1409 # Assume this is the tagged configuration we want.
adamc@1133 1410 tagname=$z
adamc@1133 1411 break
adamc@1133 1412 ;;
adamc@1133 1413 esac
adamc@1133 1414 fi
adamc@1133 1415 done
adamc@1133 1416 # If $tagname still isn't set, then no tagged configuration
adamc@1133 1417 # was found and let the user know that the "--tag" command
adamc@1133 1418 # line option must be used.
adamc@1133 1419 if test -z "$tagname"; then
adamc@1133 1420 func_echo "unable to infer tagged configuration"
adamc@1133 1421 func_fatal_error "specify a tag with \`--tag'"
adamc@1133 1422 # else
adamc@1133 1423 # func_verbose "using $tagname tagged configuration"
adamc@1133 1424 fi
adamc@1133 1425 ;;
adamc@1133 1426 esac
adamc@1133 1427 fi
adamc@1133 1428 }
adamc@1133 1429
adamc@1133 1430
adamc@1133 1431
adamc@1133 1432 # func_write_libtool_object output_name pic_name nonpic_name
adamc@1133 1433 # Create a libtool object file (analogous to a ".la" file),
adamc@1133 1434 # but don't create it if we're doing a dry run.
adamc@1133 1435 func_write_libtool_object ()
adamc@1133 1436 {
adamc@1133 1437 write_libobj=${1}
adamc@1133 1438 if test "$build_libtool_libs" = yes; then
adamc@1133 1439 write_lobj=\'${2}\'
adamc@1133 1440 else
adamc@1133 1441 write_lobj=none
adamc@1133 1442 fi
adamc@1133 1443
adamc@1133 1444 if test "$build_old_libs" = yes; then
adamc@1133 1445 write_oldobj=\'${3}\'
adamc@1133 1446 else
adamc@1133 1447 write_oldobj=none
adamc@1133 1448 fi
adamc@1133 1449
adamc@1133 1450 $opt_dry_run || {
adamc@1133 1451 cat >${write_libobj}T <<EOF
adamc@1133 1452 # $write_libobj - a libtool object file
adamc@1133 1453 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
adamc@1133 1454 #
adamc@1133 1455 # Please DO NOT delete this file!
adamc@1133 1456 # It is necessary for linking the library.
adamc@1133 1457
adamc@1133 1458 # Name of the PIC object.
adamc@1133 1459 pic_object=$write_lobj
adamc@1133 1460
adamc@1133 1461 # Name of the non-PIC object
adamc@1133 1462 non_pic_object=$write_oldobj
adamc@1133 1463
adamc@1133 1464 EOF
adamc@1133 1465 $MV "${write_libobj}T" "${write_libobj}"
adamc@1133 1466 }
adamc@1133 1467 }
adamc@1133 1468
adam@1459 1469
adam@1459 1470 ##################################################
adam@1459 1471 # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
adam@1459 1472 ##################################################
adam@1459 1473
adam@1459 1474 # func_convert_core_file_wine_to_w32 ARG
adam@1459 1475 # Helper function used by file name conversion functions when $build is *nix,
adam@1459 1476 # and $host is mingw, cygwin, or some other w32 environment. Relies on a
adam@1459 1477 # correctly configured wine environment available, with the winepath program
adam@1459 1478 # in $build's $PATH.
adam@1459 1479 #
adam@1459 1480 # ARG is the $build file name to be converted to w32 format.
adam@1459 1481 # Result is available in $func_convert_core_file_wine_to_w32_result, and will
adam@1459 1482 # be empty on error (or when ARG is empty)
adam@1459 1483 func_convert_core_file_wine_to_w32 ()
adam@1459 1484 {
adam@1459 1485 $opt_debug
adam@1459 1486 func_convert_core_file_wine_to_w32_result="$1"
adam@1459 1487 if test -n "$1"; then
adam@1459 1488 # Unfortunately, winepath does not exit with a non-zero error code, so we
adam@1459 1489 # are forced to check the contents of stdout. On the other hand, if the
adam@1459 1490 # command is not found, the shell will set an exit code of 127 and print
adam@1459 1491 # *an error message* to stdout. So we must check for both error code of
adam@1459 1492 # zero AND non-empty stdout, which explains the odd construction:
adam@1459 1493 func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
adam@1459 1494 if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
adam@1459 1495 func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
adam@1459 1496 $SED -e "$lt_sed_naive_backslashify"`
adam@1459 1497 else
adam@1459 1498 func_convert_core_file_wine_to_w32_result=
adam@1459 1499 fi
adam@1459 1500 fi
adam@1459 1501 }
adam@1459 1502 # end: func_convert_core_file_wine_to_w32
adam@1459 1503
adam@1459 1504
adam@1459 1505 # func_convert_core_path_wine_to_w32 ARG
adam@1459 1506 # Helper function used by path conversion functions when $build is *nix, and
adam@1459 1507 # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
adam@1459 1508 # configured wine environment available, with the winepath program in $build's
adam@1459 1509 # $PATH. Assumes ARG has no leading or trailing path separator characters.
adam@1459 1510 #
adam@1459 1511 # ARG is path to be converted from $build format to win32.
adam@1459 1512 # Result is available in $func_convert_core_path_wine_to_w32_result.
adam@1459 1513 # Unconvertible file (directory) names in ARG are skipped; if no directory names
adam@1459 1514 # are convertible, then the result may be empty.
adam@1459 1515 func_convert_core_path_wine_to_w32 ()
adam@1459 1516 {
adam@1459 1517 $opt_debug
adam@1459 1518 # unfortunately, winepath doesn't convert paths, only file names
adam@1459 1519 func_convert_core_path_wine_to_w32_result=""
adam@1459 1520 if test -n "$1"; then
adam@1459 1521 oldIFS=$IFS
adam@1459 1522 IFS=:
adam@1459 1523 for func_convert_core_path_wine_to_w32_f in $1; do
adam@1459 1524 IFS=$oldIFS
adam@1459 1525 func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
adam@1459 1526 if test -n "$func_convert_core_file_wine_to_w32_result" ; then
adam@1459 1527 if test -z "$func_convert_core_path_wine_to_w32_result"; then
adam@1459 1528 func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
adam@1459 1529 else
adam@1459 1530 func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
adam@1459 1531 fi
adam@1459 1532 fi
adam@1459 1533 done
adam@1459 1534 IFS=$oldIFS
adam@1459 1535 fi
adam@1459 1536 }
adam@1459 1537 # end: func_convert_core_path_wine_to_w32
adam@1459 1538
adam@1459 1539
adam@1459 1540 # func_cygpath ARGS...
adam@1459 1541 # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
adam@1459 1542 # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
adam@1459 1543 # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
adam@1459 1544 # (2), returns the Cygwin file name or path in func_cygpath_result (input
adam@1459 1545 # file name or path is assumed to be in w32 format, as previously converted
adam@1459 1546 # from $build's *nix or MSYS format). In case (3), returns the w32 file name
adam@1459 1547 # or path in func_cygpath_result (input file name or path is assumed to be in
adam@1459 1548 # Cygwin format). Returns an empty string on error.
adam@1459 1549 #
adam@1459 1550 # ARGS are passed to cygpath, with the last one being the file name or path to
adam@1459 1551 # be converted.
adam@1459 1552 #
adam@1459 1553 # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
adam@1459 1554 # environment variable; do not put it in $PATH.
adam@1459 1555 func_cygpath ()
adam@1459 1556 {
adam@1459 1557 $opt_debug
adam@1459 1558 if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
adam@1459 1559 func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
adam@1459 1560 if test "$?" -ne 0; then
adam@1459 1561 # on failure, ensure result is empty
adam@1459 1562 func_cygpath_result=
adam@1459 1563 fi
adam@1459 1564 else
adam@1459 1565 func_cygpath_result=
adam@1459 1566 func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
adam@1459 1567 fi
adam@1459 1568 }
adam@1459 1569 #end: func_cygpath
adam@1459 1570
adam@1459 1571
adam@1459 1572 # func_convert_core_msys_to_w32 ARG
adam@1459 1573 # Convert file name or path ARG from MSYS format to w32 format. Return
adam@1459 1574 # result in func_convert_core_msys_to_w32_result.
adam@1459 1575 func_convert_core_msys_to_w32 ()
adam@1459 1576 {
adam@1459 1577 $opt_debug
adam@1459 1578 # awkward: cmd appends spaces to result
adam@1459 1579 func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
adam@1459 1580 $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
adam@1459 1581 }
adam@1459 1582 #end: func_convert_core_msys_to_w32
adam@1459 1583
adam@1459 1584
adam@1459 1585 # func_convert_file_check ARG1 ARG2
adam@1459 1586 # Verify that ARG1 (a file name in $build format) was converted to $host
adam@1459 1587 # format in ARG2. Otherwise, emit an error message, but continue (resetting
adam@1459 1588 # func_to_host_file_result to ARG1).
adam@1459 1589 func_convert_file_check ()
adam@1459 1590 {
adam@1459 1591 $opt_debug
adam@1459 1592 if test -z "$2" && test -n "$1" ; then
adam@1459 1593 func_error "Could not determine host file name corresponding to"
adam@1459 1594 func_error " \`$1'"
adam@1459 1595 func_error "Continuing, but uninstalled executables may not work."
adam@1459 1596 # Fallback:
adam@1459 1597 func_to_host_file_result="$1"
adam@1459 1598 fi
adam@1459 1599 }
adam@1459 1600 # end func_convert_file_check
adam@1459 1601
adam@1459 1602
adam@1459 1603 # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
adam@1459 1604 # Verify that FROM_PATH (a path in $build format) was converted to $host
adam@1459 1605 # format in TO_PATH. Otherwise, emit an error message, but continue, resetting
adam@1459 1606 # func_to_host_file_result to a simplistic fallback value (see below).
adam@1459 1607 func_convert_path_check ()
adam@1459 1608 {
adam@1459 1609 $opt_debug
adam@1459 1610 if test -z "$4" && test -n "$3"; then
adam@1459 1611 func_error "Could not determine the host path corresponding to"
adam@1459 1612 func_error " \`$3'"
adam@1459 1613 func_error "Continuing, but uninstalled executables may not work."
adam@1459 1614 # Fallback. This is a deliberately simplistic "conversion" and
adam@1459 1615 # should not be "improved". See libtool.info.
adam@1459 1616 if test "x$1" != "x$2"; then
adam@1459 1617 lt_replace_pathsep_chars="s|$1|$2|g"
adam@1459 1618 func_to_host_path_result=`echo "$3" |
adam@1459 1619 $SED -e "$lt_replace_pathsep_chars"`
adam@1459 1620 else
adam@1459 1621 func_to_host_path_result="$3"
adam@1459 1622 fi
adam@1459 1623 fi
adam@1459 1624 }
adam@1459 1625 # end func_convert_path_check
adam@1459 1626
adam@1459 1627
adam@1459 1628 # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
adam@1459 1629 # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
adam@1459 1630 # and appending REPL if ORIG matches BACKPAT.
adam@1459 1631 func_convert_path_front_back_pathsep ()
adam@1459 1632 {
adam@1459 1633 $opt_debug
adam@1459 1634 case $4 in
adam@1459 1635 $1 ) func_to_host_path_result="$3$func_to_host_path_result"
adam@1459 1636 ;;
adam@1459 1637 esac
adam@1459 1638 case $4 in
adam@1459 1639 $2 ) func_append func_to_host_path_result "$3"
adam@1459 1640 ;;
adam@1459 1641 esac
adam@1459 1642 }
adam@1459 1643 # end func_convert_path_front_back_pathsep
adam@1459 1644
adam@1459 1645
adam@1459 1646 ##################################################
adam@1459 1647 # $build to $host FILE NAME CONVERSION FUNCTIONS #
adam@1459 1648 ##################################################
adam@1459 1649 # invoked via `$to_host_file_cmd ARG'
adam@1459 1650 #
adam@1459 1651 # In each case, ARG is the path to be converted from $build to $host format.
adam@1459 1652 # Result will be available in $func_to_host_file_result.
adam@1459 1653
adam@1459 1654
adam@1459 1655 # func_to_host_file ARG
adam@1459 1656 # Converts the file name ARG from $build format to $host format. Return result
adam@1459 1657 # in func_to_host_file_result.
adam@1459 1658 func_to_host_file ()
adam@1459 1659 {
adam@1459 1660 $opt_debug
adam@1459 1661 $to_host_file_cmd "$1"
adam@1459 1662 }
adam@1459 1663 # end func_to_host_file
adam@1459 1664
adam@1459 1665
adam@1459 1666 # func_to_tool_file ARG LAZY
adam@1459 1667 # converts the file name ARG from $build format to toolchain format. Return
adam@1459 1668 # result in func_to_tool_file_result. If the conversion in use is listed
adam@1459 1669 # in (the comma separated) LAZY, no conversion takes place.
adam@1459 1670 func_to_tool_file ()
adam@1459 1671 {
adam@1459 1672 $opt_debug
adam@1459 1673 case ,$2, in
adam@1459 1674 *,"$to_tool_file_cmd",*)
adam@1459 1675 func_to_tool_file_result=$1
adam@1459 1676 ;;
adam@1459 1677 *)
adam@1459 1678 $to_tool_file_cmd "$1"
adam@1459 1679 func_to_tool_file_result=$func_to_host_file_result
adam@1459 1680 ;;
adam@1459 1681 esac
adam@1459 1682 }
adam@1459 1683 # end func_to_tool_file
adam@1459 1684
adam@1459 1685
adam@1459 1686 # func_convert_file_noop ARG
adam@1459 1687 # Copy ARG to func_to_host_file_result.
adam@1459 1688 func_convert_file_noop ()
adam@1459 1689 {
adam@1459 1690 func_to_host_file_result="$1"
adam@1459 1691 }
adam@1459 1692 # end func_convert_file_noop
adam@1459 1693
adam@1459 1694
adam@1459 1695 # func_convert_file_msys_to_w32 ARG
adam@1459 1696 # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
adam@1459 1697 # conversion to w32 is not available inside the cwrapper. Returns result in
adam@1459 1698 # func_to_host_file_result.
adam@1459 1699 func_convert_file_msys_to_w32 ()
adam@1459 1700 {
adam@1459 1701 $opt_debug
adam@1459 1702 func_to_host_file_result="$1"
adam@1459 1703 if test -n "$1"; then
adam@1459 1704 func_convert_core_msys_to_w32 "$1"
adam@1459 1705 func_to_host_file_result="$func_convert_core_msys_to_w32_result"
adam@1459 1706 fi
adam@1459 1707 func_convert_file_check "$1" "$func_to_host_file_result"
adam@1459 1708 }
adam@1459 1709 # end func_convert_file_msys_to_w32
adam@1459 1710
adam@1459 1711
adam@1459 1712 # func_convert_file_cygwin_to_w32 ARG
adam@1459 1713 # Convert file name ARG from Cygwin to w32 format. Returns result in
adam@1459 1714 # func_to_host_file_result.
adam@1459 1715 func_convert_file_cygwin_to_w32 ()
adam@1459 1716 {
adam@1459 1717 $opt_debug
adam@1459 1718 func_to_host_file_result="$1"
adam@1459 1719 if test -n "$1"; then
adam@1459 1720 # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
adam@1459 1721 # LT_CYGPATH in this case.
adam@1459 1722 func_to_host_file_result=`cygpath -m "$1"`
adam@1459 1723 fi
adam@1459 1724 func_convert_file_check "$1" "$func_to_host_file_result"
adam@1459 1725 }
adam@1459 1726 # end func_convert_file_cygwin_to_w32
adam@1459 1727
adam@1459 1728
adam@1459 1729 # func_convert_file_nix_to_w32 ARG
adam@1459 1730 # Convert file name ARG from *nix to w32 format. Requires a wine environment
adam@1459 1731 # and a working winepath. Returns result in func_to_host_file_result.
adam@1459 1732 func_convert_file_nix_to_w32 ()
adam@1459 1733 {
adam@1459 1734 $opt_debug
adam@1459 1735 func_to_host_file_result="$1"
adam@1459 1736 if test -n "$1"; then
adam@1459 1737 func_convert_core_file_wine_to_w32 "$1"
adam@1459 1738 func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
adam@1459 1739 fi
adam@1459 1740 func_convert_file_check "$1" "$func_to_host_file_result"
adam@1459 1741 }
adam@1459 1742 # end func_convert_file_nix_to_w32
adam@1459 1743
adam@1459 1744
adam@1459 1745 # func_convert_file_msys_to_cygwin ARG
adam@1459 1746 # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
adam@1459 1747 # Returns result in func_to_host_file_result.
adam@1459 1748 func_convert_file_msys_to_cygwin ()
adam@1459 1749 {
adam@1459 1750 $opt_debug
adam@1459 1751 func_to_host_file_result="$1"
adam@1459 1752 if test -n "$1"; then
adam@1459 1753 func_convert_core_msys_to_w32 "$1"
adam@1459 1754 func_cygpath -u "$func_convert_core_msys_to_w32_result"
adam@1459 1755 func_to_host_file_result="$func_cygpath_result"
adam@1459 1756 fi
adam@1459 1757 func_convert_file_check "$1" "$func_to_host_file_result"
adam@1459 1758 }
adam@1459 1759 # end func_convert_file_msys_to_cygwin
adam@1459 1760
adam@1459 1761
adam@1459 1762 # func_convert_file_nix_to_cygwin ARG
adam@1459 1763 # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
adam@1459 1764 # in a wine environment, working winepath, and LT_CYGPATH set. Returns result
adam@1459 1765 # in func_to_host_file_result.
adam@1459 1766 func_convert_file_nix_to_cygwin ()
adam@1459 1767 {
adam@1459 1768 $opt_debug
adam@1459 1769 func_to_host_file_result="$1"
adam@1459 1770 if test -n "$1"; then
adam@1459 1771 # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
adam@1459 1772 func_convert_core_file_wine_to_w32 "$1"
adam@1459 1773 func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
adam@1459 1774 func_to_host_file_result="$func_cygpath_result"
adam@1459 1775 fi
adam@1459 1776 func_convert_file_check "$1" "$func_to_host_file_result"
adam@1459 1777 }
adam@1459 1778 # end func_convert_file_nix_to_cygwin
adam@1459 1779
adam@1459 1780
adam@1459 1781 #############################################
adam@1459 1782 # $build to $host PATH CONVERSION FUNCTIONS #
adam@1459 1783 #############################################
adam@1459 1784 # invoked via `$to_host_path_cmd ARG'
adam@1459 1785 #
adam@1459 1786 # In each case, ARG is the path to be converted from $build to $host format.
adam@1459 1787 # The result will be available in $func_to_host_path_result.
adam@1459 1788 #
adam@1459 1789 # Path separators are also converted from $build format to $host format. If
adam@1459 1790 # ARG begins or ends with a path separator character, it is preserved (but
adam@1459 1791 # converted to $host format) on output.
adam@1459 1792 #
adam@1459 1793 # All path conversion functions are named using the following convention:
adam@1459 1794 # file name conversion function : func_convert_file_X_to_Y ()
adam@1459 1795 # path conversion function : func_convert_path_X_to_Y ()
adam@1459 1796 # where, for any given $build/$host combination the 'X_to_Y' value is the
adam@1459 1797 # same. If conversion functions are added for new $build/$host combinations,
adam@1459 1798 # the two new functions must follow this pattern, or func_init_to_host_path_cmd
adam@1459 1799 # will break.
adam@1459 1800
adam@1459 1801
adam@1459 1802 # func_init_to_host_path_cmd
adam@1459 1803 # Ensures that function "pointer" variable $to_host_path_cmd is set to the
adam@1459 1804 # appropriate value, based on the value of $to_host_file_cmd.
adam@1459 1805 to_host_path_cmd=
adam@1459 1806 func_init_to_host_path_cmd ()
adam@1459 1807 {
adam@1459 1808 $opt_debug
adam@1459 1809 if test -z "$to_host_path_cmd"; then
adam@1459 1810 func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
adam@1459 1811 to_host_path_cmd="func_convert_path_${func_stripname_result}"
adam@1459 1812 fi
adam@1459 1813 }
adam@1459 1814
adam@1459 1815
adam@1459 1816 # func_to_host_path ARG
adam@1459 1817 # Converts the path ARG from $build format to $host format. Return result
adam@1459 1818 # in func_to_host_path_result.
adam@1459 1819 func_to_host_path ()
adam@1459 1820 {
adam@1459 1821 $opt_debug
adam@1459 1822 func_init_to_host_path_cmd
adam@1459 1823 $to_host_path_cmd "$1"
adam@1459 1824 }
adam@1459 1825 # end func_to_host_path
adam@1459 1826
adam@1459 1827
adam@1459 1828 # func_convert_path_noop ARG
adam@1459 1829 # Copy ARG to func_to_host_path_result.
adam@1459 1830 func_convert_path_noop ()
adam@1459 1831 {
adam@1459 1832 func_to_host_path_result="$1"
adam@1459 1833 }
adam@1459 1834 # end func_convert_path_noop
adam@1459 1835
adam@1459 1836
adam@1459 1837 # func_convert_path_msys_to_w32 ARG
adam@1459 1838 # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
adam@1459 1839 # conversion to w32 is not available inside the cwrapper. Returns result in
adam@1459 1840 # func_to_host_path_result.
adam@1459 1841 func_convert_path_msys_to_w32 ()
adam@1459 1842 {
adam@1459 1843 $opt_debug
adam@1459 1844 func_to_host_path_result="$1"
adam@1459 1845 if test -n "$1"; then
adam@1459 1846 # Remove leading and trailing path separator characters from ARG. MSYS
adam@1459 1847 # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
adam@1459 1848 # and winepath ignores them completely.
adam@1459 1849 func_stripname : : "$1"
adam@1459 1850 func_to_host_path_tmp1=$func_stripname_result
adam@1459 1851 func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
adam@1459 1852 func_to_host_path_result="$func_convert_core_msys_to_w32_result"
adam@1459 1853 func_convert_path_check : ";" \
adam@1459 1854 "$func_to_host_path_tmp1" "$func_to_host_path_result"
adam@1459 1855 func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
adam@1459 1856 fi
adam@1459 1857 }
adam@1459 1858 # end func_convert_path_msys_to_w32
adam@1459 1859
adam@1459 1860
adam@1459 1861 # func_convert_path_cygwin_to_w32 ARG
adam@1459 1862 # Convert path ARG from Cygwin to w32 format. Returns result in
adam@1459 1863 # func_to_host_file_result.
adam@1459 1864 func_convert_path_cygwin_to_w32 ()
adam@1459 1865 {
adam@1459 1866 $opt_debug
adam@1459 1867 func_to_host_path_result="$1"
adam@1459 1868 if test -n "$1"; then
adam@1459 1869 # See func_convert_path_msys_to_w32:
adam@1459 1870 func_stripname : : "$1"
adam@1459 1871 func_to_host_path_tmp1=$func_stripname_result
adam@1459 1872 func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
adam@1459 1873 func_convert_path_check : ";" \
adam@1459 1874 "$func_to_host_path_tmp1" "$func_to_host_path_result"
adam@1459 1875 func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
adam@1459 1876 fi
adam@1459 1877 }
adam@1459 1878 # end func_convert_path_cygwin_to_w32
adam@1459 1879
adam@1459 1880
adam@1459 1881 # func_convert_path_nix_to_w32 ARG
adam@1459 1882 # Convert path ARG from *nix to w32 format. Requires a wine environment and
adam@1459 1883 # a working winepath. Returns result in func_to_host_file_result.
adam@1459 1884 func_convert_path_nix_to_w32 ()
adam@1459 1885 {
adam@1459 1886 $opt_debug
adam@1459 1887 func_to_host_path_result="$1"
adam@1459 1888 if test -n "$1"; then
adam@1459 1889 # See func_convert_path_msys_to_w32:
adam@1459 1890 func_stripname : : "$1"
adam@1459 1891 func_to_host_path_tmp1=$func_stripname_result
adam@1459 1892 func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
adam@1459 1893 func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
adam@1459 1894 func_convert_path_check : ";" \
adam@1459 1895 "$func_to_host_path_tmp1" "$func_to_host_path_result"
adam@1459 1896 func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
adam@1459 1897 fi
adam@1459 1898 }
adam@1459 1899 # end func_convert_path_nix_to_w32
adam@1459 1900
adam@1459 1901
adam@1459 1902 # func_convert_path_msys_to_cygwin ARG
adam@1459 1903 # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
adam@1459 1904 # Returns result in func_to_host_file_result.
adam@1459 1905 func_convert_path_msys_to_cygwin ()
adam@1459 1906 {
adam@1459 1907 $opt_debug
adam@1459 1908 func_to_host_path_result="$1"
adam@1459 1909 if test -n "$1"; then
adam@1459 1910 # See func_convert_path_msys_to_w32:
adam@1459 1911 func_stripname : : "$1"
adam@1459 1912 func_to_host_path_tmp1=$func_stripname_result
adam@1459 1913 func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
adam@1459 1914 func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
adam@1459 1915 func_to_host_path_result="$func_cygpath_result"
adam@1459 1916 func_convert_path_check : : \
adam@1459 1917 "$func_to_host_path_tmp1" "$func_to_host_path_result"
adam@1459 1918 func_convert_path_front_back_pathsep ":*" "*:" : "$1"
adam@1459 1919 fi
adam@1459 1920 }
adam@1459 1921 # end func_convert_path_msys_to_cygwin
adam@1459 1922
adam@1459 1923
adam@1459 1924 # func_convert_path_nix_to_cygwin ARG
adam@1459 1925 # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
adam@1459 1926 # a wine environment, working winepath, and LT_CYGPATH set. Returns result in
adam@1459 1927 # func_to_host_file_result.
adam@1459 1928 func_convert_path_nix_to_cygwin ()
adam@1459 1929 {
adam@1459 1930 $opt_debug
adam@1459 1931 func_to_host_path_result="$1"
adam@1459 1932 if test -n "$1"; then
adam@1459 1933 # Remove leading and trailing path separator characters from
adam@1459 1934 # ARG. msys behavior is inconsistent here, cygpath turns them
adam@1459 1935 # into '.;' and ';.', and winepath ignores them completely.
adam@1459 1936 func_stripname : : "$1"
adam@1459 1937 func_to_host_path_tmp1=$func_stripname_result
adam@1459 1938 func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
adam@1459 1939 func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
adam@1459 1940 func_to_host_path_result="$func_cygpath_result"
adam@1459 1941 func_convert_path_check : : \
adam@1459 1942 "$func_to_host_path_tmp1" "$func_to_host_path_result"
adam@1459 1943 func_convert_path_front_back_pathsep ":*" "*:" : "$1"
adam@1459 1944 fi
adam@1459 1945 }
adam@1459 1946 # end func_convert_path_nix_to_cygwin
adam@1459 1947
adam@1459 1948
adamc@1133 1949 # func_mode_compile arg...
adamc@1133 1950 func_mode_compile ()
adamc@1133 1951 {
adamc@1133 1952 $opt_debug
adamc@1133 1953 # Get the compilation command and the source file.
adamc@1133 1954 base_compile=
adamc@1133 1955 srcfile="$nonopt" # always keep a non-empty value in "srcfile"
adamc@1133 1956 suppress_opt=yes
adamc@1133 1957 suppress_output=
adamc@1133 1958 arg_mode=normal
adamc@1133 1959 libobj=
adamc@1133 1960 later=
adamc@1133 1961 pie_flag=
adamc@1133 1962
adamc@1133 1963 for arg
adamc@1133 1964 do
adamc@1133 1965 case $arg_mode in
adamc@1133 1966 arg )
adamc@1133 1967 # do not "continue". Instead, add this to base_compile
adamc@1133 1968 lastarg="$arg"
adamc@1133 1969 arg_mode=normal
adamc@1133 1970 ;;
adamc@1133 1971
adamc@1133 1972 target )
adamc@1133 1973 libobj="$arg"
adamc@1133 1974 arg_mode=normal
adamc@1133 1975 continue
adamc@1133 1976 ;;
adamc@1133 1977
adamc@1133 1978 normal )
adamc@1133 1979 # Accept any command-line options.
adamc@1133 1980 case $arg in
adamc@1133 1981 -o)
adamc@1133 1982 test -n "$libobj" && \
adamc@1133 1983 func_fatal_error "you cannot specify \`-o' more than once"
adamc@1133 1984 arg_mode=target
adamc@1133 1985 continue
adamc@1133 1986 ;;
adamc@1133 1987
adamc@1133 1988 -pie | -fpie | -fPIE)
adam@1459 1989 func_append pie_flag " $arg"
adamc@1133 1990 continue
adamc@1133 1991 ;;
adamc@1133 1992
adamc@1133 1993 -shared | -static | -prefer-pic | -prefer-non-pic)
adam@1459 1994 func_append later " $arg"
adamc@1133 1995 continue
adamc@1133 1996 ;;
adamc@1133 1997
adamc@1133 1998 -no-suppress)
adamc@1133 1999 suppress_opt=no
adamc@1133 2000 continue
adamc@1133 2001 ;;
adamc@1133 2002
adamc@1133 2003 -Xcompiler)
adamc@1133 2004 arg_mode=arg # the next one goes into the "base_compile" arg list
adamc@1133 2005 continue # The current "srcfile" will either be retained or
adamc@1133 2006 ;; # replaced later. I would guess that would be a bug.
adamc@1133 2007
adamc@1133 2008 -Wc,*)
adamc@1133 2009 func_stripname '-Wc,' '' "$arg"
adamc@1133 2010 args=$func_stripname_result
adamc@1133 2011 lastarg=
adamc@1133 2012 save_ifs="$IFS"; IFS=','
adamc@1133 2013 for arg in $args; do
adamc@1133 2014 IFS="$save_ifs"
adam@1459 2015 func_append_quoted lastarg "$arg"
adamc@1133 2016 done
adamc@1133 2017 IFS="$save_ifs"
adamc@1133 2018 func_stripname ' ' '' "$lastarg"
adamc@1133 2019 lastarg=$func_stripname_result
adamc@1133 2020
adamc@1133 2021 # Add the arguments to base_compile.
adam@1459 2022 func_append base_compile " $lastarg"
adamc@1133 2023 continue
adamc@1133 2024 ;;
adamc@1133 2025
adamc@1133 2026 *)
adamc@1133 2027 # Accept the current argument as the source file.
adamc@1133 2028 # The previous "srcfile" becomes the current argument.
adamc@1133 2029 #
adamc@1133 2030 lastarg="$srcfile"
adamc@1133 2031 srcfile="$arg"
adamc@1133 2032 ;;
adamc@1133 2033 esac # case $arg
adamc@1133 2034 ;;
adamc@1133 2035 esac # case $arg_mode
adamc@1133 2036
adamc@1133 2037 # Aesthetically quote the previous argument.
adam@1459 2038 func_append_quoted base_compile "$lastarg"
adamc@1133 2039 done # for arg
adamc@1133 2040
adamc@1133 2041 case $arg_mode in
adamc@1133 2042 arg)
adamc@1133 2043 func_fatal_error "you must specify an argument for -Xcompile"
adamc@1133 2044 ;;
adamc@1133 2045 target)
adamc@1133 2046 func_fatal_error "you must specify a target with \`-o'"
adamc@1133 2047 ;;
adamc@1133 2048 *)
adamc@1133 2049 # Get the name of the library object.
adamc@1133 2050 test -z "$libobj" && {
adamc@1133 2051 func_basename "$srcfile"
adamc@1133 2052 libobj="$func_basename_result"
adamc@1133 2053 }
adamc@1133 2054 ;;
adamc@1133 2055 esac
adamc@1133 2056
adamc@1133 2057 # Recognize several different file suffixes.
adamc@1133 2058 # If the user specifies -o file.o, it is replaced with file.lo
adamc@1133 2059 case $libobj in
adamc@1133 2060 *.[cCFSifmso] | \
adamc@1133 2061 *.ada | *.adb | *.ads | *.asm | \
adamc@1133 2062 *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
adam@1599 2063 *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
adamc@1133 2064 func_xform "$libobj"
adamc@1133 2065 libobj=$func_xform_result
adamc@1133 2066 ;;
adamc@1133 2067 esac
adamc@1133 2068
adamc@1133 2069 case $libobj in
adamc@1133 2070 *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
adamc@1133 2071 *)
adamc@1133 2072 func_fatal_error "cannot determine name of library object from \`$libobj'"
adamc@1133 2073 ;;
adamc@1133 2074 esac
adamc@1133 2075
adamc@1133 2076 func_infer_tag $base_compile
adamc@1133 2077
adamc@1133 2078 for arg in $later; do
adamc@1133 2079 case $arg in
adamc@1133 2080 -shared)
adamc@1133 2081 test "$build_libtool_libs" != yes && \
adamc@1133 2082 func_fatal_configuration "can not build a shared library"
adamc@1133 2083 build_old_libs=no
adamc@1133 2084 continue
adamc@1133 2085 ;;
adamc@1133 2086
adamc@1133 2087 -static)
adamc@1133 2088 build_libtool_libs=no
adamc@1133 2089 build_old_libs=yes
adamc@1133 2090 continue
adamc@1133 2091 ;;
adamc@1133 2092
adamc@1133 2093 -prefer-pic)
adamc@1133 2094 pic_mode=yes
adamc@1133 2095 continue
adamc@1133 2096 ;;
adamc@1133 2097
adamc@1133 2098 -prefer-non-pic)
adamc@1133 2099 pic_mode=no
adamc@1133 2100 continue
adamc@1133 2101 ;;
adamc@1133 2102 esac
adamc@1133 2103 done
adamc@1133 2104
adamc@1133 2105 func_quote_for_eval "$libobj"
adamc@1133 2106 test "X$libobj" != "X$func_quote_for_eval_result" \
adamc@1133 2107 && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
adamc@1133 2108 && func_warning "libobj name \`$libobj' may not contain shell special characters."
adamc@1133 2109 func_dirname_and_basename "$obj" "/" ""
adamc@1133 2110 objname="$func_basename_result"
adamc@1133 2111 xdir="$func_dirname_result"
adamc@1133 2112 lobj=${xdir}$objdir/$objname
adamc@1133 2113
adamc@1133 2114 test -z "$base_compile" && \
adamc@1133 2115 func_fatal_help "you must specify a compilation command"
adamc@1133 2116
adamc@1133 2117 # Delete any leftover library objects.
adamc@1133 2118 if test "$build_old_libs" = yes; then
adamc@1133 2119 removelist="$obj $lobj $libobj ${libobj}T"
adamc@1133 2120 else
adamc@1133 2121 removelist="$lobj $libobj ${libobj}T"
adamc@1133 2122 fi
adamc@1133 2123
adamc@1133 2124 # On Cygwin there's no "real" PIC flag so we must build both object types
adamc@1133 2125 case $host_os in
adamc@1133 2126 cygwin* | mingw* | pw32* | os2* | cegcc*)
adamc@1133 2127 pic_mode=default
adamc@1133 2128 ;;
adamc@1133 2129 esac
adamc@1133 2130 if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
adamc@1133 2131 # non-PIC code in shared libraries is not supported
adamc@1133 2132 pic_mode=default
adamc@1133 2133 fi
adamc@1133 2134
adamc@1133 2135 # Calculate the filename of the output object if compiler does
adamc@1133 2136 # not support -o with -c
adamc@1133 2137 if test "$compiler_c_o" = no; then
adam@1459 2138 output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
adamc@1133 2139 lockfile="$output_obj.lock"
adamc@1133 2140 else
adamc@1133 2141 output_obj=
adamc@1133 2142 need_locks=no
adamc@1133 2143 lockfile=
adamc@1133 2144 fi
adamc@1133 2145
adamc@1133 2146 # Lock this critical section if it is needed
adamc@1133 2147 # We use this script file to make the link, it avoids creating a new file
adamc@1133 2148 if test "$need_locks" = yes; then
adamc@1133 2149 until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
adamc@1133 2150 func_echo "Waiting for $lockfile to be removed"
adamc@1133 2151 sleep 2
adamc@1133 2152 done
adamc@1133 2153 elif test "$need_locks" = warn; then
adamc@1133 2154 if test -f "$lockfile"; then
adamc@1133 2155 $ECHO "\
adamc@1133 2156 *** ERROR, $lockfile exists and contains:
adamc@1133 2157 `cat $lockfile 2>/dev/null`
adamc@1133 2158
adamc@1133 2159 This indicates that another process is trying to use the same
adamc@1133 2160 temporary object file, and libtool could not work around it because
adamc@1133 2161 your compiler does not support \`-c' and \`-o' together. If you
adamc@1133 2162 repeat this compilation, it may succeed, by chance, but you had better
adamc@1133 2163 avoid parallel builds (make -j) in this platform, or get a better
adamc@1133 2164 compiler."
adamc@1133 2165
adamc@1133 2166 $opt_dry_run || $RM $removelist
adamc@1133 2167 exit $EXIT_FAILURE
adamc@1133 2168 fi
adam@1459 2169 func_append removelist " $output_obj"
adamc@1133 2170 $ECHO "$srcfile" > "$lockfile"
adamc@1133 2171 fi
adamc@1133 2172
adamc@1133 2173 $opt_dry_run || $RM $removelist
adam@1459 2174 func_append removelist " $lockfile"
adamc@1133 2175 trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
adamc@1133 2176
adam@1459 2177 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
adam@1459 2178 srcfile=$func_to_tool_file_result
adamc@1133 2179 func_quote_for_eval "$srcfile"
adamc@1133 2180 qsrcfile=$func_quote_for_eval_result
adamc@1133 2181
adamc@1133 2182 # Only build a PIC object if we are building libtool libraries.
adamc@1133 2183 if test "$build_libtool_libs" = yes; then
adamc@1133 2184 # Without this assignment, base_compile gets emptied.
adamc@1133 2185 fbsd_hideous_sh_bug=$base_compile
adamc@1133 2186
adamc@1133 2187 if test "$pic_mode" != no; then
adamc@1133 2188 command="$base_compile $qsrcfile $pic_flag"
adamc@1133 2189 else
adamc@1133 2190 # Don't build PIC code
adamc@1133 2191 command="$base_compile $qsrcfile"
adamc@1133 2192 fi
adamc@1133 2193
adamc@1133 2194 func_mkdir_p "$xdir$objdir"
adamc@1133 2195
adamc@1133 2196 if test -z "$output_obj"; then
adamc@1133 2197 # Place PIC objects in $objdir
adam@1459 2198 func_append command " -o $lobj"
adamc@1133 2199 fi
adamc@1133 2200
adamc@1133 2201 func_show_eval_locale "$command" \
adamc@1133 2202 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
adamc@1133 2203
adamc@1133 2204 if test "$need_locks" = warn &&
adamc@1133 2205 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
adamc@1133 2206 $ECHO "\
adamc@1133 2207 *** ERROR, $lockfile contains:
adamc@1133 2208 `cat $lockfile 2>/dev/null`
adamc@1133 2209
adamc@1133 2210 but it should contain:
adamc@1133 2211 $srcfile
adamc@1133 2212
adamc@1133 2213 This indicates that another process is trying to use the same
adamc@1133 2214 temporary object file, and libtool could not work around it because
adamc@1133 2215 your compiler does not support \`-c' and \`-o' together. If you
adamc@1133 2216 repeat this compilation, it may succeed, by chance, but you had better
adamc@1133 2217 avoid parallel builds (make -j) in this platform, or get a better
adamc@1133 2218 compiler."
adamc@1133 2219
adamc@1133 2220 $opt_dry_run || $RM $removelist
adamc@1133 2221 exit $EXIT_FAILURE
adamc@1133 2222 fi
adamc@1133 2223
adamc@1133 2224 # Just move the object if needed, then go on to compile the next one
adamc@1133 2225 if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
adamc@1133 2226 func_show_eval '$MV "$output_obj" "$lobj"' \
adamc@1133 2227 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
adamc@1133 2228 fi
adamc@1133 2229
adamc@1133 2230 # Allow error messages only from the first compilation.
adamc@1133 2231 if test "$suppress_opt" = yes; then
adamc@1133 2232 suppress_output=' >/dev/null 2>&1'
adamc@1133 2233 fi
adamc@1133 2234 fi
adamc@1133 2235
adamc@1133 2236 # Only build a position-dependent object if we build old libraries.
adamc@1133 2237 if test "$build_old_libs" = yes; then
adamc@1133 2238 if test "$pic_mode" != yes; then
adamc@1133 2239 # Don't build PIC code
adamc@1133 2240 command="$base_compile $qsrcfile$pie_flag"
adamc@1133 2241 else
adamc@1133 2242 command="$base_compile $qsrcfile $pic_flag"
adamc@1133 2243 fi
adamc@1133 2244 if test "$compiler_c_o" = yes; then
adam@1459 2245 func_append command " -o $obj"
adamc@1133 2246 fi
adamc@1133 2247
adamc@1133 2248 # Suppress compiler output if we already did a PIC compilation.
adam@1459 2249 func_append command "$suppress_output"
adamc@1133 2250 func_show_eval_locale "$command" \
adamc@1133 2251 '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
adamc@1133 2252
adamc@1133 2253 if test "$need_locks" = warn &&
adamc@1133 2254 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
adamc@1133 2255 $ECHO "\
adamc@1133 2256 *** ERROR, $lockfile contains:
adamc@1133 2257 `cat $lockfile 2>/dev/null`
adamc@1133 2258
adamc@1133 2259 but it should contain:
adamc@1133 2260 $srcfile
adamc@1133 2261
adamc@1133 2262 This indicates that another process is trying to use the same
adamc@1133 2263 temporary object file, and libtool could not work around it because
adamc@1133 2264 your compiler does not support \`-c' and \`-o' together. If you
adamc@1133 2265 repeat this compilation, it may succeed, by chance, but you had better
adamc@1133 2266 avoid parallel builds (make -j) in this platform, or get a better
adamc@1133 2267 compiler."
adamc@1133 2268
adamc@1133 2269 $opt_dry_run || $RM $removelist
adamc@1133 2270 exit $EXIT_FAILURE
adamc@1133 2271 fi
adamc@1133 2272
adamc@1133 2273 # Just move the object if needed
adamc@1133 2274 if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
adamc@1133 2275 func_show_eval '$MV "$output_obj" "$obj"' \
adamc@1133 2276 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
adamc@1133 2277 fi
adamc@1133 2278 fi
adamc@1133 2279
adamc@1133 2280 $opt_dry_run || {
adamc@1133 2281 func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
adamc@1133 2282
adamc@1133 2283 # Unlock the critical section if it was locked
adamc@1133 2284 if test "$need_locks" != no; then
adamc@1133 2285 removelist=$lockfile
adamc@1133 2286 $RM "$lockfile"
adamc@1133 2287 fi
adamc@1133 2288 }
adamc@1133 2289
adamc@1133 2290 exit $EXIT_SUCCESS
adamc@1133 2291 }
adamc@1133 2292
adamc@1133 2293 $opt_help || {
adam@1459 2294 test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
adamc@1133 2295 }
adamc@1133 2296
adamc@1133 2297 func_mode_help ()
adamc@1133 2298 {
adamc@1133 2299 # We need to display help for each of the modes.
adam@1459 2300 case $opt_mode in
adamc@1133 2301 "")
adamc@1133 2302 # Generic help is extracted from the usage comments
adamc@1133 2303 # at the start of this file.
adamc@1133 2304 func_help
adamc@1133 2305 ;;
adamc@1133 2306
adamc@1133 2307 clean)
adamc@1133 2308 $ECHO \
adamc@1133 2309 "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
adamc@1133 2310
adamc@1133 2311 Remove files from the build directory.
adamc@1133 2312
adamc@1133 2313 RM is the name of the program to use to delete files associated with each FILE
adamc@1133 2314 (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
adamc@1133 2315 to RM.
adamc@1133 2316
adamc@1133 2317 If FILE is a libtool library, object or program, all the files associated
adamc@1133 2318 with it are deleted. Otherwise, only FILE itself is deleted using RM."
adamc@1133 2319 ;;
adamc@1133 2320
adamc@1133 2321 compile)
adamc@1133 2322 $ECHO \
adamc@1133 2323 "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
adamc@1133 2324
adamc@1133 2325 Compile a source file into a libtool library object.
adamc@1133 2326
adamc@1133 2327 This mode accepts the following additional options:
adamc@1133 2328
adamc@1133 2329 -o OUTPUT-FILE set the output file name to OUTPUT-FILE
adamc@1133 2330 -no-suppress do not suppress compiler output for multiple passes
adam@1459 2331 -prefer-pic try to build PIC objects only
adam@1459 2332 -prefer-non-pic try to build non-PIC objects only
adamc@1133 2333 -shared do not build a \`.o' file suitable for static linking
adamc@1133 2334 -static only build a \`.o' file suitable for static linking
adam@1459 2335 -Wc,FLAG pass FLAG directly to the compiler
adamc@1133 2336
adamc@1133 2337 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
adamc@1133 2338 from the given SOURCEFILE.
adamc@1133 2339
adamc@1133 2340 The output file name is determined by removing the directory component from
adamc@1133 2341 SOURCEFILE, then substituting the C source code suffix \`.c' with the
adamc@1133 2342 library object suffix, \`.lo'."
adamc@1133 2343 ;;
adamc@1133 2344
adamc@1133 2345 execute)
adamc@1133 2346 $ECHO \
adamc@1133 2347 "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
adamc@1133 2348
adamc@1133 2349 Automatically set library path, then run a program.
adamc@1133 2350
adamc@1133 2351 This mode accepts the following additional options:
adamc@1133 2352
adamc@1133 2353 -dlopen FILE add the directory containing FILE to the library path
adamc@1133 2354
adamc@1133 2355 This mode sets the library path environment variable according to \`-dlopen'
adamc@1133 2356 flags.
adamc@1133 2357
adamc@1133 2358 If any of the ARGS are libtool executable wrappers, then they are translated
adamc@1133 2359 into their corresponding uninstalled binary, and any of their required library
adamc@1133 2360 directories are added to the library path.
adamc@1133 2361
adamc@1133 2362 Then, COMMAND is executed, with ARGS as arguments."
adamc@1133 2363 ;;
adamc@1133 2364
adamc@1133 2365 finish)
adamc@1133 2366 $ECHO \
adamc@1133 2367 "Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
adamc@1133 2368
adamc@1133 2369 Complete the installation of libtool libraries.
adamc@1133 2370
adamc@1133 2371 Each LIBDIR is a directory that contains libtool libraries.
adamc@1133 2372
adamc@1133 2373 The commands that this mode executes may require superuser privileges. Use
adamc@1133 2374 the \`--dry-run' option if you just want to see what would be executed."
adamc@1133 2375 ;;
adamc@1133 2376
adamc@1133 2377 install)
adamc@1133 2378 $ECHO \
adamc@1133 2379 "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
adamc@1133 2380
adamc@1133 2381 Install executables or libraries.
adamc@1133 2382
adamc@1133 2383 INSTALL-COMMAND is the installation command. The first component should be
adamc@1133 2384 either the \`install' or \`cp' program.
adamc@1133 2385
adamc@1133 2386 The following components of INSTALL-COMMAND are treated specially:
adamc@1133 2387
adam@1459 2388 -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
adamc@1133 2389
adamc@1133 2390 The rest of the components are interpreted as arguments to that command (only
adamc@1133 2391 BSD-compatible install options are recognized)."
adamc@1133 2392 ;;
adamc@1133 2393
adamc@1133 2394 link)
adamc@1133 2395 $ECHO \
adamc@1133 2396 "Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
adamc@1133 2397
adamc@1133 2398 Link object files or libraries together to form another library, or to
adamc@1133 2399 create an executable program.
adamc@1133 2400
adamc@1133 2401 LINK-COMMAND is a command using the C compiler that you would use to create
adamc@1133 2402 a program from several object files.
adamc@1133 2403
adamc@1133 2404 The following components of LINK-COMMAND are treated specially:
adamc@1133 2405
adamc@1133 2406 -all-static do not do any dynamic linking at all
adamc@1133 2407 -avoid-version do not add a version suffix if possible
adam@1459 2408 -bindir BINDIR specify path to binaries directory (for systems where
adam@1459 2409 libraries must be found in the PATH setting at runtime)
adamc@1133 2410 -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
adamc@1133 2411 -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
adamc@1133 2412 -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
adamc@1133 2413 -export-symbols SYMFILE
adamc@1133 2414 try to export only the symbols listed in SYMFILE
adamc@1133 2415 -export-symbols-regex REGEX
adamc@1133 2416 try to export only the symbols matching REGEX
adamc@1133 2417 -LLIBDIR search LIBDIR for required installed libraries
adamc@1133 2418 -lNAME OUTPUT-FILE requires the installed library libNAME
adamc@1133 2419 -module build a library that can dlopened
adamc@1133 2420 -no-fast-install disable the fast-install mode
adamc@1133 2421 -no-install link a not-installable executable
adamc@1133 2422 -no-undefined declare that a library does not refer to external symbols
adamc@1133 2423 -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
adamc@1133 2424 -objectlist FILE Use a list of object files found in FILE to specify objects
adamc@1133 2425 -precious-files-regex REGEX
adamc@1133 2426 don't remove output files matching REGEX
adamc@1133 2427 -release RELEASE specify package release information
adamc@1133 2428 -rpath LIBDIR the created library will eventually be installed in LIBDIR
adamc@1133 2429 -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
adamc@1133 2430 -shared only do dynamic linking of libtool libraries
adamc@1133 2431 -shrext SUFFIX override the standard shared library file extension
adamc@1133 2432 -static do not do any dynamic linking of uninstalled libtool libraries
adamc@1133 2433 -static-libtool-libs
adamc@1133 2434 do not do any dynamic linking of libtool libraries
adamc@1133 2435 -version-info CURRENT[:REVISION[:AGE]]
adamc@1133 2436 specify library version info [each variable defaults to 0]
adamc@1133 2437 -weak LIBNAME declare that the target provides the LIBNAME interface
adam@1459 2438 -Wc,FLAG
adam@1459 2439 -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
adam@1459 2440 -Wl,FLAG
adam@1459 2441 -Xlinker FLAG pass linker-specific FLAG directly to the linker
adam@1459 2442 -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
adamc@1133 2443
adamc@1133 2444 All other options (arguments beginning with \`-') are ignored.
adamc@1133 2445
adamc@1133 2446 Every other argument is treated as a filename. Files ending in \`.la' are
adamc@1133 2447 treated as uninstalled libtool libraries, other files are standard or library
adamc@1133 2448 object files.
adamc@1133 2449
adamc@1133 2450 If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
adamc@1133 2451 only library objects (\`.lo' files) may be specified, and \`-rpath' is
adamc@1133 2452 required, except when creating a convenience library.
adamc@1133 2453
adamc@1133 2454 If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
adamc@1133 2455 using \`ar' and \`ranlib', or on Windows using \`lib'.
adamc@1133 2456
adamc@1133 2457 If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
adamc@1133 2458 is created, otherwise an executable program is created."
adamc@1133 2459 ;;
adamc@1133 2460
adamc@1133 2461 uninstall)
adamc@1133 2462 $ECHO \
adamc@1133 2463 "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
adamc@1133 2464
adamc@1133 2465 Remove libraries from an installation directory.
adamc@1133 2466
adamc@1133 2467 RM is the name of the program to use to delete files associated with each FILE
adamc@1133 2468 (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
adamc@1133 2469 to RM.
adamc@1133 2470
adamc@1133 2471 If FILE is a libtool library, all the files associated with it are deleted.
adamc@1133 2472 Otherwise, only FILE itself is deleted using RM."
adamc@1133 2473 ;;
adamc@1133 2474
adamc@1133 2475 *)
adam@1459 2476 func_fatal_help "invalid operation mode \`$opt_mode'"
adamc@1133 2477 ;;
adamc@1133 2478 esac
adamc@1133 2479
adam@1459 2480 echo
adamc@1133 2481 $ECHO "Try \`$progname --help' for more information about other modes."
adam@1459 2482 }
adam@1459 2483
adam@1459 2484 # Now that we've collected a possible --mode arg, show help if necessary
adam@1459 2485 if $opt_help; then
adam@1459 2486 if test "$opt_help" = :; then
adam@1459 2487 func_mode_help
adam@1459 2488 else
adam@1459 2489 {
adam@1459 2490 func_help noexit
adam@1459 2491 for opt_mode in compile link execute install finish uninstall clean; do
adam@1459 2492 func_mode_help
adam@1459 2493 done
adam@1459 2494 } | sed -n '1p; 2,$s/^Usage:/ or: /p'
adam@1459 2495 {
adam@1459 2496 func_help noexit
adam@1459 2497 for opt_mode in compile link execute install finish uninstall clean; do
adam@1459 2498 echo
adam@1459 2499 func_mode_help
adam@1459 2500 done
adam@1459 2501 } |
adam@1459 2502 sed '1d
adam@1459 2503 /^When reporting/,/^Report/{
adam@1459 2504 H
adam@1459 2505 d
adam@1459 2506 }
adam@1459 2507 $x
adam@1459 2508 /information about other modes/d
adam@1459 2509 /more detailed .*MODE/d
adam@1459 2510 s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
adam@1459 2511 fi
adam@1459 2512 exit $?
adam@1459 2513 fi
adamc@1133 2514
adamc@1133 2515
adamc@1133 2516 # func_mode_execute arg...
adamc@1133 2517 func_mode_execute ()
adamc@1133 2518 {
adamc@1133 2519 $opt_debug
adamc@1133 2520 # The first argument is the command name.
adamc@1133 2521 cmd="$nonopt"
adamc@1133 2522 test -z "$cmd" && \
adamc@1133 2523 func_fatal_help "you must specify a COMMAND"
adamc@1133 2524
adamc@1133 2525 # Handle -dlopen flags immediately.
adam@1459 2526 for file in $opt_dlopen; do
adamc@1133 2527 test -f "$file" \
adamc@1133 2528 || func_fatal_help "\`$file' is not a file"
adamc@1133 2529
adamc@1133 2530 dir=
adamc@1133 2531 case $file in
adamc@1133 2532 *.la)
adam@1459 2533 func_resolve_sysroot "$file"
adam@1459 2534 file=$func_resolve_sysroot_result
adam@1459 2535
adamc@1133 2536 # Check to see that this really is a libtool archive.
adamc@1133 2537 func_lalib_unsafe_p "$file" \
adamc@1133 2538 || func_fatal_help "\`$lib' is not a valid libtool archive"
adamc@1133 2539
adamc@1133 2540 # Read the libtool library.
adamc@1133 2541 dlname=
adamc@1133 2542 library_names=
adamc@1133 2543 func_source "$file"
adamc@1133 2544
adamc@1133 2545 # Skip this library if it cannot be dlopened.
adamc@1133 2546 if test -z "$dlname"; then
adamc@1133 2547 # Warn if it was a shared library.
adamc@1133 2548 test -n "$library_names" && \
adamc@1133 2549 func_warning "\`$file' was not linked with \`-export-dynamic'"
adamc@1133 2550 continue
adamc@1133 2551 fi
adamc@1133 2552
adamc@1133 2553 func_dirname "$file" "" "."
adamc@1133 2554 dir="$func_dirname_result"
adamc@1133 2555
adamc@1133 2556 if test -f "$dir/$objdir/$dlname"; then
adam@1459 2557 func_append dir "/$objdir"
adamc@1133 2558 else
adamc@1133 2559 if test ! -f "$dir/$dlname"; then
adamc@1133 2560 func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
adamc@1133 2561 fi
adamc@1133 2562 fi
adamc@1133 2563 ;;
adamc@1133 2564
adamc@1133 2565 *.lo)
adamc@1133 2566 # Just add the directory containing the .lo file.
adamc@1133 2567 func_dirname "$file" "" "."
adamc@1133 2568 dir="$func_dirname_result"
adamc@1133 2569 ;;
adamc@1133 2570
adamc@1133 2571 *)
adamc@1133 2572 func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
adamc@1133 2573 continue
adamc@1133 2574 ;;
adamc@1133 2575 esac
adamc@1133 2576
adamc@1133 2577 # Get the absolute pathname.
adamc@1133 2578 absdir=`cd "$dir" && pwd`
adamc@1133 2579 test -n "$absdir" && dir="$absdir"
adamc@1133 2580
adamc@1133 2581 # Now add the directory to shlibpath_var.
adamc@1133 2582 if eval "test -z \"\$$shlibpath_var\""; then
adamc@1133 2583 eval "$shlibpath_var=\"\$dir\""
adamc@1133 2584 else
adamc@1133 2585 eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
adamc@1133 2586 fi
adamc@1133 2587 done
adamc@1133 2588
adamc@1133 2589 # This variable tells wrapper scripts just to set shlibpath_var
adamc@1133 2590 # rather than running their programs.
adamc@1133 2591 libtool_execute_magic="$magic"
adamc@1133 2592
adamc@1133 2593 # Check if any of the arguments is a wrapper script.
adamc@1133 2594 args=
adamc@1133 2595 for file
adamc@1133 2596 do
adamc@1133 2597 case $file in
adam@1459 2598 -* | *.la | *.lo ) ;;
adamc@1133 2599 *)
adamc@1133 2600 # Do a test to see if this is really a libtool program.
adamc@1133 2601 if func_ltwrapper_script_p "$file"; then
adamc@1133 2602 func_source "$file"
adamc@1133 2603 # Transform arg to wrapped name.
adamc@1133 2604 file="$progdir/$program"
adamc@1133 2605 elif func_ltwrapper_executable_p "$file"; then
adamc@1133 2606 func_ltwrapper_scriptname "$file"
adamc@1133 2607 func_source "$func_ltwrapper_scriptname_result"
adamc@1133 2608 # Transform arg to wrapped name.
adamc@1133 2609 file="$progdir/$program"
adamc@1133 2610 fi
adamc@1133 2611 ;;
adamc@1133 2612 esac
adamc@1133 2613 # Quote arguments (to preserve shell metacharacters).
adam@1459 2614 func_append_quoted args "$file"
adamc@1133 2615 done
adamc@1133 2616
adamc@1133 2617 if test "X$opt_dry_run" = Xfalse; then
adamc@1133 2618 if test -n "$shlibpath_var"; then
adamc@1133 2619 # Export the shlibpath_var.
adamc@1133 2620 eval "export $shlibpath_var"
adamc@1133 2621 fi
adamc@1133 2622
adamc@1133 2623 # Restore saved environment variables
adamc@1133 2624 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
adamc@1133 2625 do
adamc@1133 2626 eval "if test \"\${save_$lt_var+set}\" = set; then
adamc@1133 2627 $lt_var=\$save_$lt_var; export $lt_var
adamc@1133 2628 else
adamc@1133 2629 $lt_unset $lt_var
adamc@1133 2630 fi"
adamc@1133 2631 done
adamc@1133 2632
adamc@1133 2633 # Now prepare to actually exec the command.
adamc@1133 2634 exec_cmd="\$cmd$args"
adamc@1133 2635 else
adamc@1133 2636 # Display what would be done.
adamc@1133 2637 if test -n "$shlibpath_var"; then
adamc@1133 2638 eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
adam@1459 2639 echo "export $shlibpath_var"
adamc@1133 2640 fi
adamc@1133 2641 $ECHO "$cmd$args"
adamc@1133 2642 exit $EXIT_SUCCESS
adamc@1133 2643 fi
adamc@1133 2644 }
adamc@1133 2645
adam@1459 2646 test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
adamc@1133 2647
adamc@1133 2648
adamc@1133 2649 # func_mode_finish arg...
adamc@1133 2650 func_mode_finish ()
adamc@1133 2651 {
adamc@1133 2652 $opt_debug
adam@1459 2653 libs=
adam@1459 2654 libdirs=
adamc@1133 2655 admincmds=
adamc@1133 2656
adam@1459 2657 for opt in "$nonopt" ${1+"$@"}
adam@1459 2658 do
adam@1459 2659 if test -d "$opt"; then
adam@1459 2660 func_append libdirs " $opt"
adam@1459 2661
adam@1459 2662 elif test -f "$opt"; then
adam@1459 2663 if func_lalib_unsafe_p "$opt"; then
adam@1459 2664 func_append libs " $opt"
adam@1459 2665 else
adam@1459 2666 func_warning "\`$opt' is not a valid libtool archive"
adam@1459 2667 fi
adam@1459 2668
adam@1459 2669 else
adam@1459 2670 func_fatal_error "invalid argument \`$opt'"
adam@1459 2671 fi
adam@1459 2672 done
adam@1459 2673
adam@1459 2674 if test -n "$libs"; then
adam@1459 2675 if test -n "$lt_sysroot"; then
adam@1459 2676 sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
adam@1459 2677 sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
adam@1459 2678 else
adam@1459 2679 sysroot_cmd=
adam@1459 2680 fi
adam@1459 2681
adam@1459 2682 # Remove sysroot references
adam@1459 2683 if $opt_dry_run; then
adam@1459 2684 for lib in $libs; do
adam@1459 2685 echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
adam@1459 2686 done
adam@1459 2687 else
adam@1459 2688 tmpdir=`func_mktempdir`
adam@1459 2689 for lib in $libs; do
adam@1459 2690 sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
adam@1459 2691 > $tmpdir/tmp-la
adam@1459 2692 mv -f $tmpdir/tmp-la $lib
adam@1459 2693 done
adam@1459 2694 ${RM}r "$tmpdir"
adam@1459 2695 fi
adam@1459 2696 fi
adam@1459 2697
adamc@1133 2698 if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
adamc@1133 2699 for libdir in $libdirs; do
adamc@1133 2700 if test -n "$finish_cmds"; then
adamc@1133 2701 # Do each command in the finish commands.
adamc@1133 2702 func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
adamc@1133 2703 '"$cmd"'"'
adamc@1133 2704 fi
adamc@1133 2705 if test -n "$finish_eval"; then
adamc@1133 2706 # Do the single finish_eval.
adamc@1133 2707 eval cmds=\"$finish_eval\"
adam@1459 2708 $opt_dry_run || eval "$cmds" || func_append admincmds "
adamc@1133 2709 $cmds"
adamc@1133 2710 fi
adamc@1133 2711 done
adamc@1133 2712 fi
adamc@1133 2713
adamc@1133 2714 # Exit here if they wanted silent mode.
adamc@1133 2715 $opt_silent && exit $EXIT_SUCCESS
adamc@1133 2716
adam@1459 2717 if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
adam@1459 2718 echo "----------------------------------------------------------------------"
adam@1459 2719 echo "Libraries have been installed in:"
adam@1459 2720 for libdir in $libdirs; do
adam@1459 2721 $ECHO " $libdir"
adam@1459 2722 done
adam@1459 2723 echo
adam@1459 2724 echo "If you ever happen to want to link against installed libraries"
adam@1459 2725 echo "in a given directory, LIBDIR, you must either use libtool, and"
adam@1459 2726 echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
adam@1459 2727 echo "flag during linking and do at least one of the following:"
adam@1459 2728 if test -n "$shlibpath_var"; then
adam@1459 2729 echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
adam@1459 2730 echo " during execution"
adam@1459 2731 fi
adam@1459 2732 if test -n "$runpath_var"; then
adam@1459 2733 echo " - add LIBDIR to the \`$runpath_var' environment variable"
adam@1459 2734 echo " during linking"
adam@1459 2735 fi
adam@1459 2736 if test -n "$hardcode_libdir_flag_spec"; then
adam@1459 2737 libdir=LIBDIR
adam@1459 2738 eval flag=\"$hardcode_libdir_flag_spec\"
adam@1459 2739
adam@1459 2740 $ECHO " - use the \`$flag' linker flag"
adam@1459 2741 fi
adam@1459 2742 if test -n "$admincmds"; then
adam@1459 2743 $ECHO " - have your system administrator run these commands:$admincmds"
adam@1459 2744 fi
adam@1459 2745 if test -f /etc/ld.so.conf; then
adam@1459 2746 echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
adam@1459 2747 fi
adam@1459 2748 echo
adam@1459 2749
adam@1459 2750 echo "See any operating system documentation about shared libraries for"
adam@1459 2751 case $host in
adam@1459 2752 solaris2.[6789]|solaris2.1[0-9])
adam@1459 2753 echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
adam@1459 2754 echo "pages."
adam@1459 2755 ;;
adam@1459 2756 *)
adam@1459 2757 echo "more information, such as the ld(1) and ld.so(8) manual pages."
adam@1459 2758 ;;
adam@1459 2759 esac
adam@1459 2760 echo "----------------------------------------------------------------------"
adamc@1133 2761 fi
adamc@1133 2762 exit $EXIT_SUCCESS
adamc@1133 2763 }
adamc@1133 2764
adam@1459 2765 test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
adamc@1133 2766
adamc@1133 2767
adamc@1133 2768 # func_mode_install arg...
adamc@1133 2769 func_mode_install ()
adamc@1133 2770 {
adamc@1133 2771 $opt_debug
adamc@1133 2772 # There may be an optional sh(1) argument at the beginning of
adamc@1133 2773 # install_prog (especially on Windows NT).
adamc@1133 2774 if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
adamc@1133 2775 # Allow the use of GNU shtool's install command.
adam@1459 2776 case $nonopt in *shtool*) :;; *) false;; esac; then
adamc@1133 2777 # Aesthetically quote it.
adamc@1133 2778 func_quote_for_eval "$nonopt"
adamc@1133 2779 install_prog="$func_quote_for_eval_result "
adamc@1133 2780 arg=$1
adamc@1133 2781 shift
adamc@1133 2782 else
adamc@1133 2783 install_prog=
adamc@1133 2784 arg=$nonopt
adamc@1133 2785 fi
adamc@1133 2786
adamc@1133 2787 # The real first argument should be the name of the installation program.
adamc@1133 2788 # Aesthetically quote it.
adamc@1133 2789 func_quote_for_eval "$arg"
adam@1459 2790 func_append install_prog "$func_quote_for_eval_result"
adam@1459 2791 install_shared_prog=$install_prog
adam@1459 2792 case " $install_prog " in
adam@1459 2793 *[\\\ /]cp\ *) install_cp=: ;;
adam@1459 2794 *) install_cp=false ;;
adam@1459 2795 esac
adamc@1133 2796
adamc@1133 2797 # We need to accept at least all the BSD install flags.
adamc@1133 2798 dest=
adamc@1133 2799 files=
adamc@1133 2800 opts=
adamc@1133 2801 prev=
adamc@1133 2802 install_type=
adamc@1133 2803 isdir=no
adamc@1133 2804 stripme=
adam@1459 2805 no_mode=:
adamc@1133 2806 for arg
adamc@1133 2807 do
adam@1459 2808 arg2=
adamc@1133 2809 if test -n "$dest"; then
adam@1459 2810 func_append files " $dest"
adamc@1133 2811 dest=$arg
adamc@1133 2812 continue
adamc@1133 2813 fi
adamc@1133 2814
adamc@1133 2815 case $arg in
adamc@1133 2816 -d) isdir=yes ;;
adamc@1133 2817 -f)
adam@1459 2818 if $install_cp; then :; else
adam@1459 2819 prev=$arg
adam@1459 2820 fi
adamc@1133 2821 ;;
adamc@1133 2822 -g | -m | -o)
adamc@1133 2823 prev=$arg
adamc@1133 2824 ;;
adamc@1133 2825 -s)
adamc@1133 2826 stripme=" -s"
adamc@1133 2827 continue
adamc@1133 2828 ;;
adamc@1133 2829 -*)
adamc@1133 2830 ;;
adamc@1133 2831 *)
adamc@1133 2832 # If the previous option needed an argument, then skip it.
adamc@1133 2833 if test -n "$prev"; then
adam@1459 2834 if test "x$prev" = x-m && test -n "$install_override_mode"; then
adam@1459 2835 arg2=$install_override_mode
adam@1459 2836 no_mode=false
adam@1459 2837 fi
adamc@1133 2838 prev=
adamc@1133 2839 else
adamc@1133 2840 dest=$arg
adamc@1133 2841 continue
adamc@1133 2842 fi
adamc@1133 2843 ;;
adamc@1133 2844 esac
adamc@1133 2845
adamc@1133 2846 # Aesthetically quote the argument.
adamc@1133 2847 func_quote_for_eval "$arg"
adam@1459 2848 func_append install_prog " $func_quote_for_eval_result"
adam@1459 2849 if test -n "$arg2"; then
adam@1459 2850 func_quote_for_eval "$arg2"
adam@1459 2851 fi
adam@1459 2852 func_append install_shared_prog " $func_quote_for_eval_result"
adamc@1133 2853 done
adamc@1133 2854
adamc@1133 2855 test -z "$install_prog" && \
adamc@1133 2856 func_fatal_help "you must specify an install program"
adamc@1133 2857
adamc@1133 2858 test -n "$prev" && \
adamc@1133 2859 func_fatal_help "the \`$prev' option requires an argument"
adamc@1133 2860
adam@1459 2861 if test -n "$install_override_mode" && $no_mode; then
adam@1459 2862 if $install_cp; then :; else
adam@1459 2863 func_quote_for_eval "$install_override_mode"
adam@1459 2864 func_append install_shared_prog " -m $func_quote_for_eval_result"
adam@1459 2865 fi
adam@1459 2866 fi
adam@1459 2867
adamc@1133 2868 if test -z "$files"; then
adamc@1133 2869 if test -z "$dest"; then
adamc@1133 2870 func_fatal_help "no file or destination specified"
adamc@1133 2871 else
adamc@1133 2872 func_fatal_help "you must specify a destination"
adamc@1133 2873 fi
adamc@1133 2874 fi
adamc@1133 2875
adamc@1133 2876 # Strip any trailing slash from the destination.
adamc@1133 2877 func_stripname '' '/' "$dest"
adamc@1133 2878 dest=$func_stripname_result
adamc@1133 2879
adamc@1133 2880 # Check to see that the destination is a directory.
adamc@1133 2881 test -d "$dest" && isdir=yes
adamc@1133 2882 if test "$isdir" = yes; then
adamc@1133 2883 destdir="$dest"
adamc@1133 2884 destname=
adamc@1133 2885 else
adamc@1133 2886 func_dirname_and_basename "$dest" "" "."
adamc@1133 2887 destdir="$func_dirname_result"
adamc@1133 2888 destname="$func_basename_result"
adamc@1133 2889
adamc@1133 2890 # Not a directory, so check to see that there is only one file specified.
adamc@1133 2891 set dummy $files; shift
adamc@1133 2892 test "$#" -gt 1 && \
adamc@1133 2893 func_fatal_help "\`$dest' is not a directory"
adamc@1133 2894 fi
adamc@1133 2895 case $destdir in
adamc@1133 2896 [\\/]* | [A-Za-z]:[\\/]*) ;;
adamc@1133 2897 *)
adamc@1133 2898 for file in $files; do
adamc@1133 2899 case $file in
adamc@1133 2900 *.lo) ;;
adamc@1133 2901 *)
adamc@1133 2902 func_fatal_help "\`$destdir' must be an absolute directory name"
adamc@1133 2903 ;;
adamc@1133 2904 esac
adamc@1133 2905 done
adamc@1133 2906 ;;
adamc@1133 2907 esac
adamc@1133 2908
adamc@1133 2909 # This variable tells wrapper scripts just to set variables rather
adamc@1133 2910 # than running their programs.
adamc@1133 2911 libtool_install_magic="$magic"
adamc@1133 2912
adamc@1133 2913 staticlibs=
adamc@1133 2914 future_libdirs=
adamc@1133 2915 current_libdirs=
adamc@1133 2916 for file in $files; do
adamc@1133 2917
adamc@1133 2918 # Do each installation.
adamc@1133 2919 case $file in
adamc@1133 2920 *.$libext)
adamc@1133 2921 # Do the static libraries later.
adam@1459 2922 func_append staticlibs " $file"
adamc@1133 2923 ;;
adamc@1133 2924
adamc@1133 2925 *.la)
adam@1459 2926 func_resolve_sysroot "$file"
adam@1459 2927 file=$func_resolve_sysroot_result
adam@1459 2928
adamc@1133 2929 # Check to see that this really is a libtool archive.
adamc@1133 2930 func_lalib_unsafe_p "$file" \
adamc@1133 2931 || func_fatal_help "\`$file' is not a valid libtool archive"
adamc@1133 2932
adamc@1133 2933 library_names=
adamc@1133 2934 old_library=
adamc@1133 2935 relink_command=
adamc@1133 2936 func_source "$file"
adamc@1133 2937
adamc@1133 2938 # Add the libdir to current_libdirs if it is the destination.
adamc@1133 2939 if test "X$destdir" = "X$libdir"; then
adamc@1133 2940 case "$current_libdirs " in
adamc@1133 2941 *" $libdir "*) ;;
adam@1459 2942 *) func_append current_libdirs " $libdir" ;;
adamc@1133 2943 esac
adamc@1133 2944 else
adamc@1133 2945 # Note the libdir as a future libdir.
adamc@1133 2946 case "$future_libdirs " in
adamc@1133 2947 *" $libdir "*) ;;
adam@1459 2948 *) func_append future_libdirs " $libdir" ;;
adamc@1133 2949 esac
adamc@1133 2950 fi
adamc@1133 2951
adamc@1133 2952 func_dirname "$file" "/" ""
adamc@1133 2953 dir="$func_dirname_result"
adam@1459 2954 func_append dir "$objdir"
adamc@1133 2955
adamc@1133 2956 if test -n "$relink_command"; then
adamc@1133 2957 # Determine the prefix the user has applied to our future dir.
adam@1459 2958 inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
adamc@1133 2959
adamc@1133 2960 # Don't allow the user to place us outside of our expected
adamc@1133 2961 # location b/c this prevents finding dependent libraries that
adamc@1133 2962 # are installed to the same prefix.
adamc@1133 2963 # At present, this check doesn't affect windows .dll's that
adamc@1133 2964 # are installed into $libdir/../bin (currently, that works fine)
adamc@1133 2965 # but it's something to keep an eye on.
adamc@1133 2966 test "$inst_prefix_dir" = "$destdir" && \
adamc@1133 2967 func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
adamc@1133 2968
adamc@1133 2969 if test -n "$inst_prefix_dir"; then
adamc@1133 2970 # Stick the inst_prefix_dir data into the link command.
adam@1459 2971 relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
adamc@1133 2972 else
adam@1459 2973 relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
adamc@1133 2974 fi
adamc@1133 2975
adamc@1133 2976 func_warning "relinking \`$file'"
adamc@1133 2977 func_show_eval "$relink_command" \
adamc@1133 2978 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
adamc@1133 2979 fi
adamc@1133 2980
adamc@1133 2981 # See the names of the shared library.
adamc@1133 2982 set dummy $library_names; shift
adamc@1133 2983 if test -n "$1"; then
adamc@1133 2984 realname="$1"
adamc@1133 2985 shift
adamc@1133 2986
adamc@1133 2987 srcname="$realname"
adamc@1133 2988 test -n "$relink_command" && srcname="$realname"T
adamc@1133 2989
adamc@1133 2990 # Install the shared library and build the symlinks.
adam@1459 2991 func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
adamc@1133 2992 'exit $?'
adamc@1133 2993 tstripme="$stripme"
adamc@1133 2994 case $host_os in
adamc@1133 2995 cygwin* | mingw* | pw32* | cegcc*)
adamc@1133 2996 case $realname in
adamc@1133 2997 *.dll.a)
adamc@1133 2998 tstripme=""
adamc@1133 2999 ;;
adamc@1133 3000 esac
adamc@1133 3001 ;;
adamc@1133 3002 esac
adamc@1133 3003 if test -n "$tstripme" && test -n "$striplib"; then
adamc@1133 3004 func_show_eval "$striplib $destdir/$realname" 'exit $?'
adamc@1133 3005 fi
adamc@1133 3006
adamc@1133 3007 if test "$#" -gt 0; then
adamc@1133 3008 # Delete the old symlinks, and create new ones.
adamc@1133 3009 # Try `ln -sf' first, because the `ln' binary might depend on
adamc@1133 3010 # the symlink we replace! Solaris /bin/ln does not understand -f,
adamc@1133 3011 # so we also need to try rm && ln -s.
adamc@1133 3012 for linkname
adamc@1133 3013 do
adamc@1133 3014 test "$linkname" != "$realname" \
adamc@1133 3015 && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
adamc@1133 3016 done
adamc@1133 3017 fi
adamc@1133 3018
adamc@1133 3019 # Do each command in the postinstall commands.
adamc@1133 3020 lib="$destdir/$realname"
adamc@1133 3021 func_execute_cmds "$postinstall_cmds" 'exit $?'
adamc@1133 3022 fi
adamc@1133 3023
adamc@1133 3024 # Install the pseudo-library for information purposes.
adamc@1133 3025 func_basename "$file"
adamc@1133 3026 name="$func_basename_result"
adamc@1133 3027 instname="$dir/$name"i
adamc@1133 3028 func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
adamc@1133 3029
adamc@1133 3030 # Maybe install the static library, too.
adam@1459 3031 test -n "$old_library" && func_append staticlibs " $dir/$old_library"
adamc@1133 3032 ;;
adamc@1133 3033
adamc@1133 3034 *.lo)
adamc@1133 3035 # Install (i.e. copy) a libtool object.
adamc@1133 3036
adamc@1133 3037 # Figure out destination file name, if it wasn't already specified.
adamc@1133 3038 if test -n "$destname"; then
adamc@1133 3039 destfile="$destdir/$destname"
adamc@1133 3040 else
adamc@1133 3041 func_basename "$file"
adamc@1133 3042 destfile="$func_basename_result"
adamc@1133 3043 destfile="$destdir/$destfile"
adamc@1133 3044 fi
adamc@1133 3045
adamc@1133 3046 # Deduce the name of the destination old-style object file.
adamc@1133 3047 case $destfile in
adamc@1133 3048 *.lo)
adamc@1133 3049 func_lo2o "$destfile"
adamc@1133 3050 staticdest=$func_lo2o_result
adamc@1133 3051 ;;
adamc@1133 3052 *.$objext)
adamc@1133 3053 staticdest="$destfile"
adamc@1133 3054 destfile=
adamc@1133 3055 ;;
adamc@1133 3056 *)
adamc@1133 3057 func_fatal_help "cannot copy a libtool object to \`$destfile'"
adamc@1133 3058 ;;
adamc@1133 3059 esac
adamc@1133 3060
adamc@1133 3061 # Install the libtool object if requested.
adamc@1133 3062 test -n "$destfile" && \
adamc@1133 3063 func_show_eval "$install_prog $file $destfile" 'exit $?'
adamc@1133 3064
adamc@1133 3065 # Install the old object if enabled.
adamc@1133 3066 if test "$build_old_libs" = yes; then
adamc@1133 3067 # Deduce the name of the old-style object file.
adamc@1133 3068 func_lo2o "$file"
adamc@1133 3069 staticobj=$func_lo2o_result
adamc@1133 3070 func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
adamc@1133 3071 fi
adamc@1133 3072 exit $EXIT_SUCCESS
adamc@1133 3073 ;;
adamc@1133 3074
adamc@1133 3075 *)
adamc@1133 3076 # Figure out destination file name, if it wasn't already specified.
adamc@1133 3077 if test -n "$destname"; then
adamc@1133 3078 destfile="$destdir/$destname"
adamc@1133 3079 else
adamc@1133 3080 func_basename "$file"
adamc@1133 3081 destfile="$func_basename_result"
adamc@1133 3082 destfile="$destdir/$destfile"
adamc@1133 3083 fi
adamc@1133 3084
adamc@1133 3085 # If the file is missing, and there is a .exe on the end, strip it
adamc@1133 3086 # because it is most likely a libtool script we actually want to
adamc@1133 3087 # install
adamc@1133 3088 stripped_ext=""
adamc@1133 3089 case $file in
adamc@1133 3090 *.exe)
adamc@1133 3091 if test ! -f "$file"; then
adamc@1133 3092 func_stripname '' '.exe' "$file"
adamc@1133 3093 file=$func_stripname_result
adamc@1133 3094 stripped_ext=".exe"
adamc@1133 3095 fi
adamc@1133 3096 ;;
adamc@1133 3097 esac
adamc@1133 3098
adamc@1133 3099 # Do a test to see if this is really a libtool program.
adamc@1133 3100 case $host in
adamc@1133 3101 *cygwin* | *mingw*)
adamc@1133 3102 if func_ltwrapper_executable_p "$file"; then
adamc@1133 3103 func_ltwrapper_scriptname "$file"
adamc@1133 3104 wrapper=$func_ltwrapper_scriptname_result
adamc@1133 3105 else
adamc@1133 3106 func_stripname '' '.exe' "$file"
adamc@1133 3107 wrapper=$func_stripname_result
adamc@1133 3108 fi
adamc@1133 3109 ;;
adamc@1133 3110 *)
adamc@1133 3111 wrapper=$file
adamc@1133 3112 ;;
adamc@1133 3113 esac
adamc@1133 3114 if func_ltwrapper_script_p "$wrapper"; then
adamc@1133 3115 notinst_deplibs=
adamc@1133 3116 relink_command=
adamc@1133 3117
adamc@1133 3118 func_source "$wrapper"
adamc@1133 3119
adamc@1133 3120 # Check the variables that should have been set.
adamc@1133 3121 test -z "$generated_by_libtool_version" && \
adamc@1133 3122 func_fatal_error "invalid libtool wrapper script \`$wrapper'"
adamc@1133 3123
adamc@1133 3124 finalize=yes
adamc@1133 3125 for lib in $notinst_deplibs; do
adamc@1133 3126 # Check to see that each library is installed.
adamc@1133 3127 libdir=
adamc@1133 3128 if test -f "$lib"; then
adamc@1133 3129 func_source "$lib"
adamc@1133 3130 fi
adam@1459 3131 libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
adamc@1133 3132 if test -n "$libdir" && test ! -f "$libfile"; then
adamc@1133 3133 func_warning "\`$lib' has not been installed in \`$libdir'"
adamc@1133 3134 finalize=no
adamc@1133 3135 fi
adamc@1133 3136 done
adamc@1133 3137
adamc@1133 3138 relink_command=
adamc@1133 3139 func_source "$wrapper"
adamc@1133 3140
adamc@1133 3141 outputname=
adamc@1133 3142 if test "$fast_install" = no && test -n "$relink_command"; then
adamc@1133 3143 $opt_dry_run || {
adamc@1133 3144 if test "$finalize" = yes; then
adamc@1133 3145 tmpdir=`func_mktempdir`
adamc@1133 3146 func_basename "$file$stripped_ext"
adamc@1133 3147 file="$func_basename_result"
adamc@1133 3148 outputname="$tmpdir/$file"
adamc@1133 3149 # Replace the output file specification.
adam@1459 3150 relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
adamc@1133 3151
adamc@1133 3152 $opt_silent || {
adamc@1133 3153 func_quote_for_expand "$relink_command"
adamc@1133 3154 eval "func_echo $func_quote_for_expand_result"
adamc@1133 3155 }
adamc@1133 3156 if eval "$relink_command"; then :
adamc@1133 3157 else
adamc@1133 3158 func_error "error: relink \`$file' with the above command before installing it"
adamc@1133 3159 $opt_dry_run || ${RM}r "$tmpdir"
adamc@1133 3160 continue
adamc@1133 3161 fi
adamc@1133 3162 file="$outputname"
adamc@1133 3163 else
adamc@1133 3164 func_warning "cannot relink \`$file'"
adamc@1133 3165 fi
adamc@1133 3166 }
adamc@1133 3167 else
adamc@1133 3168 # Install the binary that we compiled earlier.
adam@1459 3169 file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
adamc@1133 3170 fi
adamc@1133 3171 fi
adamc@1133 3172
adamc@1133 3173 # remove .exe since cygwin /usr/bin/install will append another
adamc@1133 3174 # one anyway
adamc@1133 3175 case $install_prog,$host in
adamc@1133 3176 */usr/bin/install*,*cygwin*)
adamc@1133 3177 case $file:$destfile in
adamc@1133 3178 *.exe:*.exe)
adamc@1133 3179 # this is ok
adamc@1133 3180 ;;
adamc@1133 3181 *.exe:*)
adamc@1133 3182 destfile=$destfile.exe
adamc@1133 3183 ;;
adamc@1133 3184 *:*.exe)
adamc@1133 3185 func_stripname '' '.exe' "$destfile"
adamc@1133 3186 destfile=$func_stripname_result
adamc@1133 3187 ;;
adamc@1133 3188 esac
adamc@1133 3189 ;;
adamc@1133 3190 esac
adamc@1133 3191 func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
adamc@1133 3192 $opt_dry_run || if test -n "$outputname"; then
adamc@1133 3193 ${RM}r "$tmpdir"
adamc@1133 3194 fi
adamc@1133 3195 ;;
adamc@1133 3196 esac
adamc@1133 3197 done
adamc@1133 3198
adamc@1133 3199 for file in $staticlibs; do
adamc@1133 3200 func_basename "$file"
adamc@1133 3201 name="$func_basename_result"
adamc@1133 3202
adamc@1133 3203 # Set up the ranlib parameters.
adamc@1133 3204 oldlib="$destdir/$name"
adam@1599 3205 func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
adam@1599 3206 tool_oldlib=$func_to_tool_file_result
adamc@1133 3207
adamc@1133 3208 func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
adamc@1133 3209
adamc@1133 3210 if test -n "$stripme" && test -n "$old_striplib"; then
adam@1599 3211 func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
adamc@1133 3212 fi
adamc@1133 3213
adamc@1133 3214 # Do each command in the postinstall commands.
adamc@1133 3215 func_execute_cmds "$old_postinstall_cmds" 'exit $?'
adamc@1133 3216 done
adamc@1133 3217
adamc@1133 3218 test -n "$future_libdirs" && \
adamc@1133 3219 func_warning "remember to run \`$progname --finish$future_libdirs'"
adamc@1133 3220
adamc@1133 3221 if test -n "$current_libdirs"; then
adamc@1133 3222 # Maybe just do a dry run.
adamc@1133 3223 $opt_dry_run && current_libdirs=" -n$current_libdirs"
adamc@1133 3224 exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
adamc@1133 3225 else
adamc@1133 3226 exit $EXIT_SUCCESS
adamc@1133 3227 fi
adamc@1133 3228 }
adamc@1133 3229
adam@1459 3230 test "$opt_mode" = install && func_mode_install ${1+"$@"}
adamc@1133 3231
adamc@1133 3232
adamc@1133 3233 # func_generate_dlsyms outputname originator pic_p
adamc@1133 3234 # Extract symbols from dlprefiles and create ${outputname}S.o with
adamc@1133 3235 # a dlpreopen symbol table.
adamc@1133 3236 func_generate_dlsyms ()
adamc@1133 3237 {
adamc@1133 3238 $opt_debug
adamc@1133 3239 my_outputname="$1"
adamc@1133 3240 my_originator="$2"
adamc@1133 3241 my_pic_p="${3-no}"
adamc@1133 3242 my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
adamc@1133 3243 my_dlsyms=
adamc@1133 3244
adamc@1133 3245 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
adamc@1133 3246 if test -n "$NM" && test -n "$global_symbol_pipe"; then
adamc@1133 3247 my_dlsyms="${my_outputname}S.c"
adamc@1133 3248 else
adamc@1133 3249 func_error "not configured to extract global symbols from dlpreopened files"
adamc@1133 3250 fi
adamc@1133 3251 fi
adamc@1133 3252
adamc@1133 3253 if test -n "$my_dlsyms"; then
adamc@1133 3254 case $my_dlsyms in
adamc@1133 3255 "") ;;
adamc@1133 3256 *.c)
adamc@1133 3257 # Discover the nlist of each of the dlfiles.
adamc@1133 3258 nlist="$output_objdir/${my_outputname}.nm"
adamc@1133 3259
adamc@1133 3260 func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
adamc@1133 3261
adamc@1133 3262 # Parse the name list into a source file.
adamc@1133 3263 func_verbose "creating $output_objdir/$my_dlsyms"
adamc@1133 3264
adamc@1133 3265 $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
adamc@1133 3266 /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
adamc@1133 3267 /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
adamc@1133 3268
adamc@1133 3269 #ifdef __cplusplus
adamc@1133 3270 extern \"C\" {
adamc@1133 3271 #endif
adamc@1133 3272
adam@1459 3273 #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
adam@1459 3274 #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
adam@1459 3275 #endif
adam@1459 3276
adam@1459 3277 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
adam@1459 3278 #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
adam@1459 3279 /* DATA imports from DLLs on WIN32 con't be const, because runtime
adam@1459 3280 relocations are performed -- see ld's documentation on pseudo-relocs. */
adam@1459 3281 # define LT_DLSYM_CONST
adam@1459 3282 #elif defined(__osf__)
adam@1459 3283 /* This system does not cope well with relocations in const data. */
adam@1459 3284 # define LT_DLSYM_CONST
adam@1459 3285 #else
adam@1459 3286 # define LT_DLSYM_CONST const
adam@1459 3287 #endif
adam@1459 3288
adamc@1133 3289 /* External symbol declarations for the compiler. */\
adamc@1133 3290 "
adamc@1133 3291
adamc@1133 3292 if test "$dlself" = yes; then
adamc@1133 3293 func_verbose "generating symbol list for \`$output'"
adamc@1133 3294
adamc@1133 3295 $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
adamc@1133 3296
adamc@1133 3297 # Add our own program objects to the symbol list.
adam@1459 3298 progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
adamc@1133 3299 for progfile in $progfiles; do
adam@1459 3300 func_to_tool_file "$progfile" func_convert_file_msys_to_w32
adam@1459 3301 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
adam@1459 3302 $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
adamc@1133 3303 done
adamc@1133 3304
adamc@1133 3305 if test -n "$exclude_expsyms"; then
adamc@1133 3306 $opt_dry_run || {
adamc@1133 3307 eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
adamc@1133 3308 eval '$MV "$nlist"T "$nlist"'
adamc@1133 3309 }
adamc@1133 3310 fi
adamc@1133 3311
adamc@1133 3312 if test -n "$export_symbols_regex"; then
adamc@1133 3313 $opt_dry_run || {
adamc@1133 3314 eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
adamc@1133 3315 eval '$MV "$nlist"T "$nlist"'
adamc@1133 3316 }
adamc@1133 3317 fi
adamc@1133 3318
adamc@1133 3319 # Prepare the list of exported symbols
adamc@1133 3320 if test -z "$export_symbols"; then
adamc@1133 3321 export_symbols="$output_objdir/$outputname.exp"
adamc@1133 3322 $opt_dry_run || {
adamc@1133 3323 $RM $export_symbols
adamc@1133 3324 eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
adamc@1133 3325 case $host in
adamc@1133 3326 *cygwin* | *mingw* | *cegcc* )
adamc@1133 3327 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
adamc@1133 3328 eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
adamc@1133 3329 ;;
adamc@1133 3330 esac
adamc@1133 3331 }
adamc@1133 3332 else
adamc@1133 3333 $opt_dry_run || {
adamc@1133 3334 eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
adamc@1133 3335 eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
adamc@1133 3336 eval '$MV "$nlist"T "$nlist"'
adamc@1133 3337 case $host in
adam@1459 3338 *cygwin* | *mingw* | *cegcc* )
adamc@1133 3339 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
adamc@1133 3340 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
adamc@1133 3341 ;;
adamc@1133 3342 esac
adamc@1133 3343 }
adamc@1133 3344 fi
adamc@1133 3345 fi
adamc@1133 3346
adamc@1133 3347 for dlprefile in $dlprefiles; do
adamc@1133 3348 func_verbose "extracting global C symbols from \`$dlprefile'"
adamc@1133 3349 func_basename "$dlprefile"
adamc@1133 3350 name="$func_basename_result"
adam@1459 3351 case $host in
adam@1459 3352 *cygwin* | *mingw* | *cegcc* )
adam@1459 3353 # if an import library, we need to obtain dlname
adam@1459 3354 if func_win32_import_lib_p "$dlprefile"; then
adam@1459 3355 func_tr_sh "$dlprefile"
adam@1459 3356 eval "curr_lafile=\$libfile_$func_tr_sh_result"
adam@1459 3357 dlprefile_dlbasename=""
adam@1459 3358 if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
adam@1459 3359 # Use subshell, to avoid clobbering current variable values
adam@1459 3360 dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
adam@1459 3361 if test -n "$dlprefile_dlname" ; then
adam@1459 3362 func_basename "$dlprefile_dlname"
adam@1459 3363 dlprefile_dlbasename="$func_basename_result"
adam@1459 3364 else
adam@1459 3365 # no lafile. user explicitly requested -dlpreopen <import library>.
adam@1459 3366 $sharedlib_from_linklib_cmd "$dlprefile"
adam@1459 3367 dlprefile_dlbasename=$sharedlib_from_linklib_result
adam@1459 3368 fi
adam@1459 3369 fi
adam@1459 3370 $opt_dry_run || {
adam@1459 3371 if test -n "$dlprefile_dlbasename" ; then
adam@1459 3372 eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
adam@1459 3373 else
adam@1459 3374 func_warning "Could not compute DLL name from $name"
adam@1459 3375 eval '$ECHO ": $name " >> "$nlist"'
adam@1459 3376 fi
adam@1459 3377 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
adam@1459 3378 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
adam@1459 3379 $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
adam@1459 3380 }
adam@1459 3381 else # not an import lib
adam@1459 3382 $opt_dry_run || {
adam@1459 3383 eval '$ECHO ": $name " >> "$nlist"'
adam@1459 3384 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
adam@1459 3385 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
adam@1459 3386 }
adam@1459 3387 fi
adam@1459 3388 ;;
adam@1459 3389 *)
adam@1459 3390 $opt_dry_run || {
adam@1459 3391 eval '$ECHO ": $name " >> "$nlist"'
adam@1459 3392 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
adam@1459 3393 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
adam@1459 3394 }
adam@1459 3395 ;;
adam@1459 3396 esac
adamc@1133 3397 done
adamc@1133 3398
adamc@1133 3399 $opt_dry_run || {
adamc@1133 3400 # Make sure we have at least an empty file.
adamc@1133 3401 test -f "$nlist" || : > "$nlist"
adamc@1133 3402
adamc@1133 3403 if test -n "$exclude_expsyms"; then
adamc@1133 3404 $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
adamc@1133 3405 $MV "$nlist"T "$nlist"
adamc@1133 3406 fi
adamc@1133 3407
adamc@1133 3408 # Try sorting and uniquifying the output.
adamc@1133 3409 if $GREP -v "^: " < "$nlist" |
adamc@1133 3410 if sort -k 3 </dev/null >/dev/null 2>&1; then
adamc@1133 3411 sort -k 3
adamc@1133 3412 else
adamc@1133 3413 sort +2
adamc@1133 3414 fi |
adamc@1133 3415 uniq > "$nlist"S; then
adamc@1133 3416 :
adamc@1133 3417 else
adamc@1133 3418 $GREP -v "^: " < "$nlist" > "$nlist"S
adamc@1133 3419 fi
adamc@1133 3420
adamc@1133 3421 if test -f "$nlist"S; then
adamc@1133 3422 eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
adamc@1133 3423 else
adam@1459 3424 echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
adamc@1133 3425 fi
adamc@1133 3426
adam@1459 3427 echo >> "$output_objdir/$my_dlsyms" "\
adamc@1133 3428
adamc@1133 3429 /* The mapping between symbol names and symbols. */
adamc@1133 3430 typedef struct {
adamc@1133 3431 const char *name;
adamc@1133 3432 void *address;
adamc@1133 3433 } lt_dlsymlist;
adam@1459 3434 extern LT_DLSYM_CONST lt_dlsymlist
adamc@1133 3435 lt_${my_prefix}_LTX_preloaded_symbols[];
adam@1459 3436 LT_DLSYM_CONST lt_dlsymlist
adamc@1133 3437 lt_${my_prefix}_LTX_preloaded_symbols[] =
adamc@1133 3438 {\
adamc@1133 3439 { \"$my_originator\", (void *) 0 },"
adamc@1133 3440
adamc@1133 3441 case $need_lib_prefix in
adamc@1133 3442 no)
adamc@1133 3443 eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
adamc@1133 3444 ;;
adamc@1133 3445 *)
adamc@1133 3446 eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
adamc@1133 3447 ;;
adamc@1133 3448 esac
adam@1459 3449 echo >> "$output_objdir/$my_dlsyms" "\
adamc@1133 3450 {0, (void *) 0}
adamc@1133 3451 };
adamc@1133 3452
adamc@1133 3453 /* This works around a problem in FreeBSD linker */
adamc@1133 3454 #ifdef FREEBSD_WORKAROUND
adamc@1133 3455 static const void *lt_preloaded_setup() {
adamc@1133 3456 return lt_${my_prefix}_LTX_preloaded_symbols;
adamc@1133 3457 }
adamc@1133 3458 #endif
adamc@1133 3459
adamc@1133 3460 #ifdef __cplusplus
adamc@1133 3461 }
adamc@1133 3462 #endif\
adamc@1133 3463 "
adamc@1133 3464 } # !$opt_dry_run
adamc@1133 3465
adamc@1133 3466 pic_flag_for_symtable=
adamc@1133 3467 case "$compile_command " in
adamc@1133 3468 *" -static "*) ;;
adamc@1133 3469 *)
adamc@1133 3470 case $host in
adamc@1133 3471 # compiling the symbol table file with pic_flag works around
adamc@1133 3472 # a FreeBSD bug that causes programs to crash when -lm is
adamc@1133 3473 # linked before any other PIC object. But we must not use
adamc@1133 3474 # pic_flag when linking with -static. The problem exists in
adamc@1133 3475 # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
adam@1599 3476 *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
adamc@1133 3477 pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
adamc@1133 3478 *-*-hpux*)
adamc@1133 3479 pic_flag_for_symtable=" $pic_flag" ;;
adamc@1133 3480 *)
adamc@1133 3481 if test "X$my_pic_p" != Xno; then
adamc@1133 3482 pic_flag_for_symtable=" $pic_flag"
adamc@1133 3483 fi
adamc@1133 3484 ;;
adamc@1133 3485 esac
adamc@1133 3486 ;;
adamc@1133 3487 esac
adamc@1133 3488 symtab_cflags=
adamc@1133 3489 for arg in $LTCFLAGS; do
adamc@1133 3490 case $arg in
adamc@1133 3491 -pie | -fpie | -fPIE) ;;
adam@1459 3492 *) func_append symtab_cflags " $arg" ;;
adamc@1133 3493 esac
adamc@1133 3494 done
adamc@1133 3495
adamc@1133 3496 # Now compile the dynamic symbol file.
adamc@1133 3497 func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
adamc@1133 3498
adamc@1133 3499 # Clean up the generated files.
adamc@1133 3500 func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
adamc@1133 3501
adamc@1133 3502 # Transform the symbol file into the correct name.
adamc@1133 3503 symfileobj="$output_objdir/${my_outputname}S.$objext"
adamc@1133 3504 case $host in
adamc@1133 3505 *cygwin* | *mingw* | *cegcc* )
adamc@1133 3506 if test -f "$output_objdir/$my_outputname.def"; then
adam@1459 3507 compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
adam@1459 3508 finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
adamc@1133 3509 else
adam@1459 3510 compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
adam@1459 3511 finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
adamc@1133 3512 fi
adamc@1133 3513 ;;
adamc@1133 3514 *)
adam@1459 3515 compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
adam@1459 3516 finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
adamc@1133 3517 ;;
adamc@1133 3518 esac
adamc@1133 3519 ;;
adamc@1133 3520 *)
adamc@1133 3521 func_fatal_error "unknown suffix for \`$my_dlsyms'"
adamc@1133 3522 ;;
adamc@1133 3523 esac
adamc@1133 3524 else
adamc@1133 3525 # We keep going just in case the user didn't refer to
adamc@1133 3526 # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
adamc@1133 3527 # really was required.
adamc@1133 3528
adamc@1133 3529 # Nullify the symbol file.
adam@1459 3530 compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
adam@1459 3531 finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
adamc@1133 3532 fi
adamc@1133 3533 }
adamc@1133 3534
adamc@1133 3535 # func_win32_libid arg
adamc@1133 3536 # return the library type of file 'arg'
adamc@1133 3537 #
adamc@1133 3538 # Need a lot of goo to handle *both* DLLs and import libs
adamc@1133 3539 # Has to be a shell function in order to 'eat' the argument
adamc@1133 3540 # that is supplied when $file_magic_command is called.
adam@1459 3541 # Despite the name, also deal with 64 bit binaries.
adamc@1133 3542 func_win32_libid ()
adamc@1133 3543 {
adamc@1133 3544 $opt_debug
adamc@1133 3545 win32_libid_type="unknown"
adamc@1133 3546 win32_fileres=`file -L $1 2>/dev/null`
adamc@1133 3547 case $win32_fileres in
adamc@1133 3548 *ar\ archive\ import\ library*) # definitely import
adamc@1133 3549 win32_libid_type="x86 archive import"
adamc@1133 3550 ;;
adamc@1133 3551 *ar\ archive*) # could be an import, or static
adam@1459 3552 # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
adamc@1133 3553 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
adam@1459 3554 $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
adam@1459 3555 func_to_tool_file "$1" func_convert_file_msys_to_w32
adam@1459 3556 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
adamc@1133 3557 $SED -n -e '
adamc@1133 3558 1,100{
adamc@1133 3559 / I /{
adamc@1133 3560 s,.*,import,
adamc@1133 3561 p
adamc@1133 3562 q
adamc@1133 3563 }
adamc@1133 3564 }'`
adamc@1133 3565 case $win32_nmres in
adamc@1133 3566 import*) win32_libid_type="x86 archive import";;
adamc@1133 3567 *) win32_libid_type="x86 archive static";;
adamc@1133 3568 esac
adamc@1133 3569 fi
adamc@1133 3570 ;;
adamc@1133 3571 *DLL*)
adamc@1133 3572 win32_libid_type="x86 DLL"
adamc@1133 3573 ;;
adamc@1133 3574 *executable*) # but shell scripts are "executable" too...
adamc@1133 3575 case $win32_fileres in
adamc@1133 3576 *MS\ Windows\ PE\ Intel*)
adamc@1133 3577 win32_libid_type="x86 DLL"
adamc@1133 3578 ;;
adamc@1133 3579 esac
adamc@1133 3580 ;;
adamc@1133 3581 esac
adamc@1133 3582 $ECHO "$win32_libid_type"
adamc@1133 3583 }
adamc@1133 3584
adam@1459 3585 # func_cygming_dll_for_implib ARG
adam@1459 3586 #
adam@1459 3587 # Platform-specific function to extract the
adam@1459 3588 # name of the DLL associated with the specified
adam@1459 3589 # import library ARG.
adam@1459 3590 # Invoked by eval'ing the libtool variable
adam@1459 3591 # $sharedlib_from_linklib_cmd
adam@1459 3592 # Result is available in the variable
adam@1459 3593 # $sharedlib_from_linklib_result
adam@1459 3594 func_cygming_dll_for_implib ()
adam@1459 3595 {
adam@1459 3596 $opt_debug
adam@1459 3597 sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
adam@1459 3598 }
adam@1459 3599
adam@1459 3600 # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
adam@1459 3601 #
adam@1459 3602 # The is the core of a fallback implementation of a
adam@1459 3603 # platform-specific function to extract the name of the
adam@1459 3604 # DLL associated with the specified import library LIBNAME.
adam@1459 3605 #
adam@1459 3606 # SECTION_NAME is either .idata$6 or .idata$7, depending
adam@1459 3607 # on the platform and compiler that created the implib.
adam@1459 3608 #
adam@1459 3609 # Echos the name of the DLL associated with the
adam@1459 3610 # specified import library.
adam@1459 3611 func_cygming_dll_for_implib_fallback_core ()
adam@1459 3612 {
adam@1459 3613 $opt_debug
adam@1459 3614 match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
adam@1459 3615 $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
adam@1459 3616 $SED '/^Contents of section '"$match_literal"':/{
adam@1459 3617 # Place marker at beginning of archive member dllname section
adam@1459 3618 s/.*/====MARK====/
adam@1459 3619 p
adam@1459 3620 d
adam@1459 3621 }
adam@1459 3622 # These lines can sometimes be longer than 43 characters, but
adam@1459 3623 # are always uninteresting
adam@1459 3624 /:[ ]*file format pe[i]\{,1\}-/d
adam@1459 3625 /^In archive [^:]*:/d
adam@1459 3626 # Ensure marker is printed
adam@1459 3627 /^====MARK====/p
adam@1459 3628 # Remove all lines with less than 43 characters
adam@1459 3629 /^.\{43\}/!d
adam@1459 3630 # From remaining lines, remove first 43 characters
adam@1459 3631 s/^.\{43\}//' |
adam@1459 3632 $SED -n '
adam@1459 3633 # Join marker and all lines until next marker into a single line
adam@1459 3634 /^====MARK====/ b para
adam@1459 3635 H
adam@1459 3636 $ b para
adam@1459 3637 b
adam@1459 3638 :para
adam@1459 3639 x
adam@1459 3640 s/\n//g
adam@1459 3641 # Remove the marker
adam@1459 3642 s/^====MARK====//
adam@1459 3643 # Remove trailing dots and whitespace
adam@1459 3644 s/[\. \t]*$//
adam@1459 3645 # Print
adam@1459 3646 /./p' |
adam@1459 3647 # we now have a list, one entry per line, of the stringified
adam@1459 3648 # contents of the appropriate section of all members of the
adam@1459 3649 # archive which possess that section. Heuristic: eliminate
adam@1459 3650 # all those which have a first or second character that is
adam@1459 3651 # a '.' (that is, objdump's representation of an unprintable
adam@1459 3652 # character.) This should work for all archives with less than
adam@1459 3653 # 0x302f exports -- but will fail for DLLs whose name actually
adam@1459 3654 # begins with a literal '.' or a single character followed by
adam@1459 3655 # a '.'.
adam@1459 3656 #
adam@1459 3657 # Of those that remain, print the first one.
adam@1459 3658 $SED -e '/^\./d;/^.\./d;q'
adam@1459 3659 }
adam@1459 3660
adam@1459 3661 # func_cygming_gnu_implib_p ARG
adam@1459 3662 # This predicate returns with zero status (TRUE) if
adam@1459 3663 # ARG is a GNU/binutils-style import library. Returns
adam@1459 3664 # with nonzero status (FALSE) otherwise.
adam@1459 3665 func_cygming_gnu_implib_p ()
adam@1459 3666 {
adam@1459 3667 $opt_debug
adam@1459 3668 func_to_tool_file "$1" func_convert_file_msys_to_w32
adam@1459 3669 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)$'`
adam@1459 3670 test -n "$func_cygming_gnu_implib_tmp"
adam@1459 3671 }
adam@1459 3672
adam@1459 3673 # func_cygming_ms_implib_p ARG
adam@1459 3674 # This predicate returns with zero status (TRUE) if
adam@1459 3675 # ARG is an MS-style import library. Returns
adam@1459 3676 # with nonzero status (FALSE) otherwise.
adam@1459 3677 func_cygming_ms_implib_p ()
adam@1459 3678 {
adam@1459 3679 $opt_debug
adam@1459 3680 func_to_tool_file "$1" func_convert_file_msys_to_w32
adam@1459 3681 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
adam@1459 3682 test -n "$func_cygming_ms_implib_tmp"
adam@1459 3683 }
adam@1459 3684
adam@1459 3685 # func_cygming_dll_for_implib_fallback ARG
adam@1459 3686 # Platform-specific function to extract the
adam@1459 3687 # name of the DLL associated with the specified
adam@1459 3688 # import library ARG.
adam@1459 3689 #
adam@1459 3690 # This fallback implementation is for use when $DLLTOOL
adam@1459 3691 # does not support the --identify-strict option.
adam@1459 3692 # Invoked by eval'ing the libtool variable
adam@1459 3693 # $sharedlib_from_linklib_cmd
adam@1459 3694 # Result is available in the variable
adam@1459 3695 # $sharedlib_from_linklib_result
adam@1459 3696 func_cygming_dll_for_implib_fallback ()
adam@1459 3697 {
adam@1459 3698 $opt_debug
adam@1459 3699 if func_cygming_gnu_implib_p "$1" ; then
adam@1459 3700 # binutils import library
adam@1459 3701 sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
adam@1459 3702 elif func_cygming_ms_implib_p "$1" ; then
adam@1459 3703 # ms-generated import library
adam@1459 3704 sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
adam@1459 3705 else
adam@1459 3706 # unknown
adam@1459 3707 sharedlib_from_linklib_result=""
adam@1459 3708 fi
adam@1459 3709 }
adamc@1133 3710
adamc@1133 3711
adamc@1133 3712 # func_extract_an_archive dir oldlib
adamc@1133 3713 func_extract_an_archive ()
adamc@1133 3714 {
adamc@1133 3715 $opt_debug
adamc@1133 3716 f_ex_an_ar_dir="$1"; shift
adamc@1133 3717 f_ex_an_ar_oldlib="$1"
adam@1459 3718 if test "$lock_old_archive_extraction" = yes; then
adam@1459 3719 lockfile=$f_ex_an_ar_oldlib.lock
adam@1459 3720 until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
adam@1459 3721 func_echo "Waiting for $lockfile to be removed"
adam@1459 3722 sleep 2
adam@1459 3723 done
adam@1459 3724 fi
adam@1459 3725 func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
adam@1459 3726 'stat=$?; rm -f "$lockfile"; exit $stat'
adam@1459 3727 if test "$lock_old_archive_extraction" = yes; then
adam@1459 3728 $opt_dry_run || rm -f "$lockfile"
adam@1459 3729 fi
adamc@1133 3730 if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
adamc@1133 3731 :
adamc@1133 3732 else
adamc@1133 3733 func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
adamc@1133 3734 fi
adamc@1133 3735 }
adamc@1133 3736
adamc@1133 3737
adamc@1133 3738 # func_extract_archives gentop oldlib ...
adamc@1133 3739 func_extract_archives ()
adamc@1133 3740 {
adamc@1133 3741 $opt_debug
adamc@1133 3742 my_gentop="$1"; shift
adamc@1133 3743 my_oldlibs=${1+"$@"}
adamc@1133 3744 my_oldobjs=""
adamc@1133 3745 my_xlib=""
adamc@1133 3746 my_xabs=""
adamc@1133 3747 my_xdir=""
adamc@1133 3748
adamc@1133 3749 for my_xlib in $my_oldlibs; do
adamc@1133 3750 # Extract the objects.
adamc@1133 3751 case $my_xlib in
adamc@1133 3752 [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
adamc@1133 3753 *) my_xabs=`pwd`"/$my_xlib" ;;
adamc@1133 3754 esac
adamc@1133 3755 func_basename "$my_xlib"
adamc@1133 3756 my_xlib="$func_basename_result"
adamc@1133 3757 my_xlib_u=$my_xlib
adamc@1133 3758 while :; do
adamc@1133 3759 case " $extracted_archives " in
adamc@1133 3760 *" $my_xlib_u "*)
adamc@1133 3761 func_arith $extracted_serial + 1
adamc@1133 3762 extracted_serial=$func_arith_result
adamc@1133 3763 my_xlib_u=lt$extracted_serial-$my_xlib ;;
adamc@1133 3764 *) break ;;
adamc@1133 3765 esac
adamc@1133 3766 done
adamc@1133 3767 extracted_archives="$extracted_archives $my_xlib_u"
adamc@1133 3768 my_xdir="$my_gentop/$my_xlib_u"
adamc@1133 3769
adamc@1133 3770 func_mkdir_p "$my_xdir"
adamc@1133 3771
adamc@1133 3772 case $host in
adamc@1133 3773 *-darwin*)
adamc@1133 3774 func_verbose "Extracting $my_xabs"
adamc@1133 3775 # Do not bother doing anything if just a dry run
adamc@1133 3776 $opt_dry_run || {
adamc@1133 3777 darwin_orig_dir=`pwd`
adamc@1133 3778 cd $my_xdir || exit $?
adamc@1133 3779 darwin_archive=$my_xabs
adamc@1133 3780 darwin_curdir=`pwd`
adamc@1133 3781 darwin_base_archive=`basename "$darwin_archive"`
adamc@1133 3782 darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
adamc@1133 3783 if test -n "$darwin_arches"; then
adamc@1133 3784 darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
adamc@1133 3785 darwin_arch=
adamc@1133 3786 func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
adamc@1133 3787 for darwin_arch in $darwin_arches ; do
adamc@1133 3788 func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
adamc@1133 3789 $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
adamc@1133 3790 cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
adamc@1133 3791 func_extract_an_archive "`pwd`" "${darwin_base_archive}"
adamc@1133 3792 cd "$darwin_curdir"
adamc@1133 3793 $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
adamc@1133 3794 done # $darwin_arches
adamc@1133 3795 ## Okay now we've a bunch of thin objects, gotta fatten them up :)
adamc@1133 3796 darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
adamc@1133 3797 darwin_file=
adamc@1133 3798 darwin_files=
adamc@1133 3799 for darwin_file in $darwin_filelist; do
adam@1459 3800 darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
adamc@1133 3801 $LIPO -create -output "$darwin_file" $darwin_files
adamc@1133 3802 done # $darwin_filelist
adamc@1133 3803 $RM -rf unfat-$$
adamc@1133 3804 cd "$darwin_orig_dir"
adamc@1133 3805 else
adamc@1133 3806 cd $darwin_orig_dir
adamc@1133 3807 func_extract_an_archive "$my_xdir" "$my_xabs"
adamc@1133 3808 fi # $darwin_arches
adamc@1133 3809 } # !$opt_dry_run
adamc@1133 3810 ;;
adamc@1133 3811 *)
adamc@1133 3812 func_extract_an_archive "$my_xdir" "$my_xabs"
adamc@1133 3813 ;;
adamc@1133 3814 esac
adam@1459 3815 my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
adamc@1133 3816 done
adamc@1133 3817
adamc@1133 3818 func_extract_archives_result="$my_oldobjs"
adamc@1133 3819 }
adamc@1133 3820
adamc@1133 3821
adamc@1133 3822 # func_emit_wrapper [arg=no]
adamc@1133 3823 #
adamc@1133 3824 # Emit a libtool wrapper script on stdout.
adamc@1133 3825 # Don't directly open a file because we may want to
adamc@1133 3826 # incorporate the script contents within a cygwin/mingw
adamc@1133 3827 # wrapper executable. Must ONLY be called from within
adamc@1133 3828 # func_mode_link because it depends on a number of variables
adamc@1133 3829 # set therein.
adamc@1133 3830 #
adamc@1133 3831 # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
adamc@1133 3832 # variable will take. If 'yes', then the emitted script
adamc@1133 3833 # will assume that the directory in which it is stored is
adamc@1133 3834 # the $objdir directory. This is a cygwin/mingw-specific
adamc@1133 3835 # behavior.
adamc@1133 3836 func_emit_wrapper ()
adamc@1133 3837 {
adam@1459 3838 func_emit_wrapper_arg1=${1-no}
adam@1459 3839
adam@1459 3840 $ECHO "\
adam@1459 3841 #! $SHELL
adam@1459 3842
adam@1459 3843 # $output - temporary wrapper script for $objdir/$outputname
adam@1459 3844 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
adamc@1133 3845 #
adam@1459 3846 # The $output program cannot be directly executed until all the libtool
adam@1459 3847 # libraries that it depends on are installed.
adamc@1133 3848 #
adam@1459 3849 # This wrapper script should never be moved out of the build directory.
adam@1459 3850 # If it is, it will not operate correctly.
adam@1459 3851
adam@1459 3852 # Sed substitution that helps us do robust quoting. It backslashifies
adam@1459 3853 # metacharacters that are still active within double-quoted strings.
adam@1459 3854 sed_quote_subst='$sed_quote_subst'
adam@1459 3855
adam@1459 3856 # Be Bourne compatible
adam@1459 3857 if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
adam@1459 3858 emulate sh
adam@1459 3859 NULLCMD=:
adam@1459 3860 # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
adam@1459 3861 # is contrary to our usage. Disable this feature.
adam@1459 3862 alias -g '\${1+\"\$@\"}'='\"\$@\"'
adam@1459 3863 setopt NO_GLOB_SUBST
adam@1459 3864 else
adam@1459 3865 case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
adam@1459 3866 fi
adam@1459 3867 BIN_SH=xpg4; export BIN_SH # for Tru64
adam@1459 3868 DUALCASE=1; export DUALCASE # for MKS sh
adam@1459 3869
adam@1459 3870 # The HP-UX ksh and POSIX shell print the target directory to stdout
adam@1459 3871 # if CDPATH is set.
adam@1459 3872 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
adam@1459 3873
adam@1459 3874 relink_command=\"$relink_command\"
adam@1459 3875
adam@1459 3876 # This environment variable determines our operation mode.
adam@1459 3877 if test \"\$libtool_install_magic\" = \"$magic\"; then
adam@1459 3878 # install mode needs the following variables:
adam@1459 3879 generated_by_libtool_version='$macro_version'
adam@1459 3880 notinst_deplibs='$notinst_deplibs'
adam@1459 3881 else
adam@1459 3882 # When we are sourced in execute mode, \$file and \$ECHO are already set.
adam@1459 3883 if test \"\$libtool_execute_magic\" != \"$magic\"; then
adam@1459 3884 file=\"\$0\""
adam@1459 3885
adam@1459 3886 qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
adam@1459 3887 $ECHO "\
adam@1459 3888
adam@1459 3889 # A function that is used when there is no print builtin or printf.
adam@1459 3890 func_fallback_echo ()
adam@1459 3891 {
adam@1459 3892 eval 'cat <<_LTECHO_EOF
adam@1459 3893 \$1
adam@1459 3894 _LTECHO_EOF'
adam@1459 3895 }
adam@1459 3896 ECHO=\"$qECHO\"
adam@1459 3897 fi
adam@1459 3898
adam@1459 3899 # Very basic option parsing. These options are (a) specific to
adam@1459 3900 # the libtool wrapper, (b) are identical between the wrapper
adam@1459 3901 # /script/ and the wrapper /executable/ which is used only on
adam@1459 3902 # windows platforms, and (c) all begin with the string "--lt-"
adam@1459 3903 # (application programs are unlikely to have options which match
adam@1459 3904 # this pattern).
adam@1459 3905 #
adam@1459 3906 # There are only two supported options: --lt-debug and
adam@1459 3907 # --lt-dump-script. There is, deliberately, no --lt-help.
adam@1459 3908 #
adam@1459 3909 # The first argument to this parsing function should be the
adam@1459 3910 # script's $0 value, followed by "$@".
adam@1459 3911 lt_option_debug=
adam@1459 3912 func_parse_lt_options ()
adam@1459 3913 {
adam@1459 3914 lt_script_arg0=\$0
adam@1459 3915 shift
adam@1459 3916 for lt_opt
adam@1459 3917 do
adam@1459 3918 case \"\$lt_opt\" in
adam@1459 3919 --lt-debug) lt_option_debug=1 ;;
adam@1459 3920 --lt-dump-script)
adam@1459 3921 lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
adam@1459 3922 test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
adam@1459 3923 lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
adam@1459 3924 cat \"\$lt_dump_D/\$lt_dump_F\"
adam@1459 3925 exit 0
adam@1459 3926 ;;
adam@1459 3927 --lt-*)
adam@1459 3928 \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
adam@1459 3929 exit 1
adam@1459 3930 ;;
adam@1459 3931 esac
adam@1459 3932 done
adam@1459 3933
adam@1459 3934 # Print the debug banner immediately:
adam@1459 3935 if test -n \"\$lt_option_debug\"; then
adam@1459 3936 echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
adam@1459 3937 fi
adam@1459 3938 }
adam@1459 3939
adam@1459 3940 # Used when --lt-debug. Prints its arguments to stdout
adam@1459 3941 # (redirection is the responsibility of the caller)
adam@1459 3942 func_lt_dump_args ()
adam@1459 3943 {
adam@1459 3944 lt_dump_args_N=1;
adam@1459 3945 for lt_arg
adam@1459 3946 do
adam@1459 3947 \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
adam@1459 3948 lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
adam@1459 3949 done
adam@1459 3950 }
adam@1459 3951
adam@1459 3952 # Core function for launching the target application
adam@1459 3953 func_exec_program_core ()
adam@1459 3954 {
adam@1459 3955 "
adam@1459 3956 case $host in
adam@1459 3957 # Backslashes separate directories on plain windows
adam@1459 3958 *-*-mingw | *-*-os2* | *-cegcc*)
adam@1459 3959 $ECHO "\
adam@1459 3960 if test -n \"\$lt_option_debug\"; then
adam@1459 3961 \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
adam@1459 3962 func_lt_dump_args \${1+\"\$@\"} 1>&2
adam@1459 3963 fi
adam@1459 3964 exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
adam@1459 3965 "
adam@1459 3966 ;;
adam@1459 3967
adam@1459 3968 *)
adam@1459 3969 $ECHO "\
adam@1459 3970 if test -n \"\$lt_option_debug\"; then
adam@1459 3971 \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
adam@1459 3972 func_lt_dump_args \${1+\"\$@\"} 1>&2
adam@1459 3973 fi
adam@1459 3974 exec \"\$progdir/\$program\" \${1+\"\$@\"}
adam@1459 3975 "
adam@1459 3976 ;;
adam@1459 3977 esac
adam@1459 3978 $ECHO "\
adam@1459 3979 \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
adam@1459 3980 exit 1
adam@1459 3981 }
adam@1459 3982
adam@1459 3983 # A function to encapsulate launching the target application
adam@1459 3984 # Strips options in the --lt-* namespace from \$@ and
adam@1459 3985 # launches target application with the remaining arguments.
adam@1459 3986 func_exec_program ()
adam@1459 3987 {
adam@1599 3988 case \" \$* \" in
adam@1599 3989 *\\ --lt-*)
adam@1599 3990 for lt_wr_arg
adam@1599 3991 do
adam@1599 3992 case \$lt_wr_arg in
adam@1599 3993 --lt-*) ;;
adam@1599 3994 *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
adam@1599 3995 esac
adam@1599 3996 shift
adam@1599 3997 done ;;
adam@1599 3998 esac
adam@1459 3999 func_exec_program_core \${1+\"\$@\"}
adam@1459 4000 }
adam@1459 4001
adam@1459 4002 # Parse options
adam@1459 4003 func_parse_lt_options \"\$0\" \${1+\"\$@\"}
adam@1459 4004
adam@1459 4005 # Find the directory that this script lives in.
adam@1459 4006 thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
adam@1459 4007 test \"x\$thisdir\" = \"x\$file\" && thisdir=.
adam@1459 4008
adam@1459 4009 # Follow symbolic links until we get to the real thisdir.
adam@1459 4010 file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
adam@1459 4011 while test -n \"\$file\"; do
adam@1459 4012 destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
adam@1459 4013
adam@1459 4014 # If there was a directory component, then change thisdir.
adam@1459 4015 if test \"x\$destdir\" != \"x\$file\"; then
adam@1459 4016 case \"\$destdir\" in
adam@1459 4017 [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
adam@1459 4018 *) thisdir=\"\$thisdir/\$destdir\" ;;
adam@1459 4019 esac
adam@1459 4020 fi
adam@1459 4021
adam@1459 4022 file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
adam@1459 4023 file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
adam@1459 4024 done
adam@1459 4025
adam@1459 4026 # Usually 'no', except on cygwin/mingw when embedded into
adam@1459 4027 # the cwrapper.
adam@1459 4028 WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
adam@1459 4029 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
adam@1459 4030 # special case for '.'
adam@1459 4031 if test \"\$thisdir\" = \".\"; then
adam@1459 4032 thisdir=\`pwd\`
adam@1459 4033 fi
adam@1459 4034 # remove .libs from thisdir
adam@1459 4035 case \"\$thisdir\" in
adam@1459 4036 *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
adam@1459 4037 $objdir ) thisdir=. ;;
adamc@1133 4038 esac
adamc@1133 4039 fi
adam@1459 4040
adam@1459 4041 # Try to get the absolute directory name.
adam@1459 4042 absdir=\`cd \"\$thisdir\" && pwd\`
adam@1459 4043 test -n \"\$absdir\" && thisdir=\"\$absdir\"
adam@1459 4044 "
adam@1459 4045
adam@1459 4046 if test "$fast_install" = yes; then
adam@1459 4047 $ECHO "\
adam@1459 4048 program=lt-'$outputname'$exeext
adam@1459 4049 progdir=\"\$thisdir/$objdir\"
adam@1459 4050
adam@1459 4051 if test ! -f \"\$progdir/\$program\" ||
adam@1459 4052 { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
adam@1459 4053 test \"X\$file\" != \"X\$progdir/\$program\"; }; then
adam@1459 4054
adam@1459 4055 file=\"\$\$-\$program\"
adam@1459 4056
adam@1459 4057 if test ! -d \"\$progdir\"; then
adam@1459 4058 $MKDIR \"\$progdir\"
adam@1459 4059 else
adam@1459 4060 $RM \"\$progdir/\$file\"
adam@1459 4061 fi"
adam@1459 4062
adam@1459 4063 $ECHO "\
adam@1459 4064
adam@1459 4065 # relink executable if necessary
adam@1459 4066 if test -n \"\$relink_command\"; then
adam@1459 4067 if relink_command_output=\`eval \$relink_command 2>&1\`; then :
adam@1459 4068 else
adam@1459 4069 $ECHO \"\$relink_command_output\" >&2
adam@1459 4070 $RM \"\$progdir/\$file\"
adam@1459 4071 exit 1
adam@1459 4072 fi
adam@1459 4073 fi
adam@1459 4074
adam@1459 4075 $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
adam@1459 4076 { $RM \"\$progdir/\$program\";
adam@1459 4077 $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
adam@1459 4078 $RM \"\$progdir/\$file\"
adam@1459 4079 fi"
adam@1459 4080 else
adam@1459 4081 $ECHO "\
adam@1459 4082 program='$outputname'
adam@1459 4083 progdir=\"\$thisdir/$objdir\"
adam@1459 4084 "
adam@1459 4085 fi
adam@1459 4086
adam@1459 4087 $ECHO "\
adam@1459 4088
adam@1459 4089 if test -f \"\$progdir/\$program\"; then"
adam@1459 4090
adam@1459 4091 # fixup the dll searchpath if we need to.
adam@1459 4092 #
adam@1459 4093 # Fix the DLL searchpath if we need to. Do this before prepending
adam@1459 4094 # to shlibpath, because on Windows, both are PATH and uninstalled
adam@1459 4095 # libraries must come first.
adam@1459 4096 if test -n "$dllsearchpath"; then
adam@1459 4097 $ECHO "\
adam@1459 4098 # Add the dll search path components to the executable PATH
adam@1459 4099 PATH=$dllsearchpath:\$PATH
adam@1459 4100 "
adam@1459 4101 fi
adam@1459 4102
adam@1459 4103 # Export our shlibpath_var if we have one.
adam@1459 4104 if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
adam@1459 4105 $ECHO "\
adam@1459 4106 # Add our own library path to $shlibpath_var
adam@1459 4107 $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
adam@1459 4108
adam@1459 4109 # Some systems cannot cope with colon-terminated $shlibpath_var
adam@1459 4110 # The second colon is a workaround for a bug in BeOS R4 sed
adam@1459 4111 $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
adam@1459 4112
adam@1459 4113 export $shlibpath_var
adam@1459 4114 "
adam@1459 4115 fi
adam@1459 4116
adam@1459 4117 $ECHO "\
adam@1459 4118 if test \"\$libtool_execute_magic\" != \"$magic\"; then
adam@1459 4119 # Run the actual program with our arguments.
adam@1459 4120 func_exec_program \${1+\"\$@\"}
adam@1459 4121 fi
adam@1459 4122 else
adam@1459 4123 # The program doesn't exist.
adam@1459 4124 \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
adam@1459 4125 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
adam@1459 4126 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
adam@1459 4127 exit 1
adamc@1133 4128 fi
adam@1459 4129 fi\
adam@1459 4130 "
adam@1459 4131 }
adam@1459 4132
adamc@1133 4133
adamc@1133 4134 # func_emit_cwrapperexe_src
adamc@1133 4135 # emit the source code for a wrapper executable on stdout
adamc@1133 4136 # Must ONLY be called from within func_mode_link because
adamc@1133 4137 # it depends on a number of variable set therein.
adamc@1133 4138 func_emit_cwrapperexe_src ()
adamc@1133 4139 {
adamc@1133 4140 cat <<EOF
adamc@1133 4141
adamc@1133 4142 /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
adamc@1133 4143 Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
adamc@1133 4144
adamc@1133 4145 The $output program cannot be directly executed until all the libtool
adamc@1133 4146 libraries that it depends on are installed.
adamc@1133 4147
adamc@1133 4148 This wrapper executable should never be moved out of the build directory.
adamc@1133 4149 If it is, it will not operate correctly.
adamc@1133 4150 */
adamc@1133 4151 EOF
adamc@1133 4152 cat <<"EOF"
adam@1459 4153 #ifdef _MSC_VER
adam@1459 4154 # define _CRT_SECURE_NO_DEPRECATE 1
adam@1459 4155 #endif
adamc@1133 4156 #include <stdio.h>
adamc@1133 4157 #include <stdlib.h>
adamc@1133 4158 #ifdef _MSC_VER
adamc@1133 4159 # include <direct.h>
adamc@1133 4160 # include <process.h>
adamc@1133 4161 # include <io.h>
adamc@1133 4162 #else
adamc@1133 4163 # include <unistd.h>
adamc@1133 4164 # include <stdint.h>
adamc@1133 4165 # ifdef __CYGWIN__
adamc@1133 4166 # include <io.h>
adamc@1133 4167 # endif
adamc@1133 4168 #endif
adamc@1133 4169 #include <malloc.h>
adamc@1133 4170 #include <stdarg.h>
adamc@1133 4171 #include <assert.h>
adamc@1133 4172 #include <string.h>
adamc@1133 4173 #include <ctype.h>
adamc@1133 4174 #include <errno.h>
adamc@1133 4175 #include <fcntl.h>
adamc@1133 4176 #include <sys/stat.h>
adamc@1133 4177
adam@1459 4178 /* declarations of non-ANSI functions */
adam@1459 4179 #if defined(__MINGW32__)
adam@1459 4180 # ifdef __STRICT_ANSI__
adam@1459 4181 int _putenv (const char *);
adam@1459 4182 # endif
adam@1459 4183 #elif defined(__CYGWIN__)
adam@1459 4184 # ifdef __STRICT_ANSI__
adam@1459 4185 char *realpath (const char *, char *);
adam@1459 4186 int putenv (char *);
adam@1459 4187 int setenv (const char *, const char *, int);
adam@1459 4188 # endif
adam@1459 4189 /* #elif defined (other platforms) ... */
adam@1459 4190 #endif
adam@1459 4191
adam@1459 4192 /* portability defines, excluding path handling macros */
adam@1459 4193 #if defined(_MSC_VER)
adam@1459 4194 # define setmode _setmode
adam@1459 4195 # define stat _stat
adam@1459 4196 # define chmod _chmod
adam@1459 4197 # define getcwd _getcwd
adam@1459 4198 # define putenv _putenv
adam@1459 4199 # define S_IXUSR _S_IEXEC
adam@1459 4200 # ifndef _INTPTR_T_DEFINED
adam@1459 4201 # define _INTPTR_T_DEFINED
adam@1459 4202 # define intptr_t int
adam@1459 4203 # endif
adam@1459 4204 #elif defined(__MINGW32__)
adam@1459 4205 # define setmode _setmode
adam@1459 4206 # define stat _stat
adam@1459 4207 # define chmod _chmod
adam@1459 4208 # define getcwd _getcwd
adam@1459 4209 # define putenv _putenv
adam@1459 4210 #elif defined(__CYGWIN__)
adam@1459 4211 # define HAVE_SETENV
adam@1459 4212 # define FOPEN_WB "wb"
adam@1459 4213 /* #elif defined (other platforms) ... */
adam@1459 4214 #endif
adam@1459 4215
adamc@1133 4216 #if defined(PATH_MAX)
adamc@1133 4217 # define LT_PATHMAX PATH_MAX
adamc@1133 4218 #elif defined(MAXPATHLEN)
adamc@1133 4219 # define LT_PATHMAX MAXPATHLEN
adamc@1133 4220 #else
adamc@1133 4221 # define LT_PATHMAX 1024
adamc@1133 4222 #endif
adamc@1133 4223
adamc@1133 4224 #ifndef S_IXOTH
adamc@1133 4225 # define S_IXOTH 0
adamc@1133 4226 #endif
adamc@1133 4227 #ifndef S_IXGRP
adamc@1133 4228 # define S_IXGRP 0
adamc@1133 4229 #endif
adamc@1133 4230
adam@1459 4231 /* path handling portability macros */
adamc@1133 4232 #ifndef DIR_SEPARATOR
adamc@1133 4233 # define DIR_SEPARATOR '/'
adamc@1133 4234 # define PATH_SEPARATOR ':'
adamc@1133 4235 #endif
adamc@1133 4236
adamc@1133 4237 #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
adamc@1133 4238 defined (__OS2__)
adamc@1133 4239 # define HAVE_DOS_BASED_FILE_SYSTEM
adamc@1133 4240 # define FOPEN_WB "wb"
adamc@1133 4241 # ifndef DIR_SEPARATOR_2
adamc@1133 4242 # define DIR_SEPARATOR_2 '\\'
adamc@1133 4243 # endif
adamc@1133 4244 # ifndef PATH_SEPARATOR_2
adamc@1133 4245 # define PATH_SEPARATOR_2 ';'
adamc@1133 4246 # endif
adamc@1133 4247 #endif
adamc@1133 4248
adamc@1133 4249 #ifndef DIR_SEPARATOR_2
adamc@1133 4250 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
adamc@1133 4251 #else /* DIR_SEPARATOR_2 */
adamc@1133 4252 # define IS_DIR_SEPARATOR(ch) \
adamc@1133 4253 (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
adamc@1133 4254 #endif /* DIR_SEPARATOR_2 */
adamc@1133 4255
adamc@1133 4256 #ifndef PATH_SEPARATOR_2
adamc@1133 4257 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
adamc@1133 4258 #else /* PATH_SEPARATOR_2 */
adamc@1133 4259 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
adamc@1133 4260 #endif /* PATH_SEPARATOR_2 */
adamc@1133 4261
adamc@1133 4262 #ifndef FOPEN_WB
adamc@1133 4263 # define FOPEN_WB "w"
adamc@1133 4264 #endif
adamc@1133 4265 #ifndef _O_BINARY
adamc@1133 4266 # define _O_BINARY 0
adamc@1133 4267 #endif
adamc@1133 4268
adamc@1133 4269 #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
adamc@1133 4270 #define XFREE(stale) do { \
adamc@1133 4271 if (stale) { free ((void *) stale); stale = 0; } \
adamc@1133 4272 } while (0)
adamc@1133 4273
adam@1459 4274 #if defined(LT_DEBUGWRAPPER)
adam@1459 4275 static int lt_debug = 1;
adamc@1133 4276 #else
adam@1459 4277 static int lt_debug = 0;
adamc@1133 4278 #endif
adamc@1133 4279
adam@1459 4280 const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
adamc@1133 4281
adamc@1133 4282 void *xmalloc (size_t num);
adamc@1133 4283 char *xstrdup (const char *string);
adamc@1133 4284 const char *base_name (const char *name);
adamc@1133 4285 char *find_executable (const char *wrapper);
adamc@1133 4286 char *chase_symlinks (const char *pathspec);
adamc@1133 4287 int make_executable (const char *path);
adamc@1133 4288 int check_executable (const char *path);
adamc@1133 4289 char *strendzap (char *str, const char *pat);
adam@1459 4290 void lt_debugprintf (const char *file, int line, const char *fmt, ...);
adam@1459 4291 void lt_fatal (const char *file, int line, const char *message, ...);
adam@1459 4292 static const char *nonnull (const char *s);
adam@1459 4293 static const char *nonempty (const char *s);
adamc@1133 4294 void lt_setenv (const char *name, const char *value);
adamc@1133 4295 char *lt_extend_str (const char *orig_value, const char *add, int to_end);
adamc@1133 4296 void lt_update_exe_path (const char *name, const char *value);
adamc@1133 4297 void lt_update_lib_path (const char *name, const char *value);
adam@1459 4298 char **prepare_spawn (char **argv);
adam@1459 4299 void lt_dump_script (FILE *f);
adamc@1133 4300 EOF
adamc@1133 4301
adamc@1133 4302 cat <<EOF
adam@1459 4303 volatile const char * MAGIC_EXE = "$magic_exe";
adamc@1133 4304 const char * LIB_PATH_VARNAME = "$shlibpath_var";
adamc@1133 4305 EOF
adamc@1133 4306
adamc@1133 4307 if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
adam@1459 4308 func_to_host_path "$temp_rpath"
adamc@1133 4309 cat <<EOF
adam@1459 4310 const char * LIB_PATH_VALUE = "$func_to_host_path_result";
adamc@1133 4311 EOF
adamc@1133 4312 else
adamc@1133 4313 cat <<"EOF"
adamc@1133 4314 const char * LIB_PATH_VALUE = "";
adamc@1133 4315 EOF
adamc@1133 4316 fi
adamc@1133 4317
adamc@1133 4318 if test -n "$dllsearchpath"; then
adam@1459 4319 func_to_host_path "$dllsearchpath:"
adamc@1133 4320 cat <<EOF
adamc@1133 4321 const char * EXE_PATH_VARNAME = "PATH";
adam@1459 4322 const char * EXE_PATH_VALUE = "$func_to_host_path_result";
adamc@1133 4323 EOF
adamc@1133 4324 else
adamc@1133 4325 cat <<"EOF"
adamc@1133 4326 const char * EXE_PATH_VARNAME = "";
adamc@1133 4327 const char * EXE_PATH_VALUE = "";
adamc@1133 4328 EOF
adamc@1133 4329 fi
adamc@1133 4330
adamc@1133 4331 if test "$fast_install" = yes; then
adamc@1133 4332 cat <<EOF
adamc@1133 4333 const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
adamc@1133 4334 EOF
adamc@1133 4335 else
adamc@1133 4336 cat <<EOF
adamc@1133 4337 const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
adamc@1133 4338 EOF
adamc@1133 4339 fi
adamc@1133 4340
adamc@1133 4341
adamc@1133 4342 cat <<"EOF"
adamc@1133 4343
adamc@1133 4344 #define LTWRAPPER_OPTION_PREFIX "--lt-"
adam@1459 4345
adamc@1133 4346 static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
adamc@1133 4347 static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
adam@1459 4348 static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
adamc@1133 4349
adamc@1133 4350 int
adamc@1133 4351 main (int argc, char *argv[])
adamc@1133 4352 {
adamc@1133 4353 char **newargz;
adamc@1133 4354 int newargc;
adamc@1133 4355 char *tmp_pathspec;
adamc@1133 4356 char *actual_cwrapper_path;
adamc@1133 4357 char *actual_cwrapper_name;
adamc@1133 4358 char *target_name;
adamc@1133 4359 char *lt_argv_zero;
adamc@1133 4360 intptr_t rval = 127;
adamc@1133 4361
adamc@1133 4362 int i;
adamc@1133 4363
adamc@1133 4364 program_name = (char *) xstrdup (base_name (argv[0]));
adam@1459 4365 newargz = XMALLOC (char *, argc + 1);
adam@1459 4366
adam@1459 4367 /* very simple arg parsing; don't want to rely on getopt
adam@1459 4368 * also, copy all non cwrapper options to newargz, except
adam@1459 4369 * argz[0], which is handled differently
adam@1459 4370 */
adam@1459 4371 newargc=0;
adamc@1133 4372 for (i = 1; i < argc; i++)
adamc@1133 4373 {
adamc@1133 4374 if (strcmp (argv[i], dumpscript_opt) == 0)
adamc@1133 4375 {
adamc@1133 4376 EOF
adamc@1133 4377 case "$host" in
adamc@1133 4378 *mingw* | *cygwin* )
adamc@1133 4379 # make stdout use "unix" line endings
adamc@1133 4380 echo " setmode(1,_O_BINARY);"
adamc@1133 4381 ;;
adamc@1133 4382 esac
adamc@1133 4383
adamc@1133 4384 cat <<"EOF"
adam@1459 4385 lt_dump_script (stdout);
adamc@1133 4386 return 0;
adamc@1133 4387 }
adam@1459 4388 if (strcmp (argv[i], debug_opt) == 0)
adam@1459 4389 {
adam@1459 4390 lt_debug = 1;
adam@1459 4391 continue;
adam@1459 4392 }
adam@1459 4393 if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
adam@1459 4394 {
adam@1459 4395 /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
adam@1459 4396 namespace, but it is not one of the ones we know about and
adam@1459 4397 have already dealt with, above (inluding dump-script), then
adam@1459 4398 report an error. Otherwise, targets might begin to believe
adam@1459 4399 they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
adam@1459 4400 namespace. The first time any user complains about this, we'll
adam@1459 4401 need to make LTWRAPPER_OPTION_PREFIX a configure-time option
adam@1459 4402 or a configure.ac-settable value.
adam@1459 4403 */
adam@1459 4404 lt_fatal (__FILE__, __LINE__,
adam@1459 4405 "unrecognized %s option: '%s'",
adam@1459 4406 ltwrapper_option_prefix, argv[i]);
adam@1459 4407 }
adam@1459 4408 /* otherwise ... */
adam@1459 4409 newargz[++newargc] = xstrdup (argv[i]);
adamc@1133 4410 }
adam@1459 4411 newargz[++newargc] = NULL;
adam@1459 4412
adam@1459 4413 EOF
adam@1459 4414 cat <<EOF
adam@1459 4415 /* The GNU banner must be the first non-error debug message */
adam@1459 4416 lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
adam@1459 4417 EOF
adam@1459 4418 cat <<"EOF"
adam@1459 4419 lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
adam@1459 4420 lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
adam@1459 4421
adamc@1133 4422 tmp_pathspec = find_executable (argv[0]);
adamc@1133 4423 if (tmp_pathspec == NULL)
adam@1459 4424 lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
adam@1459 4425 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4426 "(main) found exe (before symlink chase) at: %s\n",
adam@1459 4427 tmp_pathspec);
adamc@1133 4428
adamc@1133 4429 actual_cwrapper_path = chase_symlinks (tmp_pathspec);
adam@1459 4430 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4431 "(main) found exe (after symlink chase) at: %s\n",
adam@1459 4432 actual_cwrapper_path);
adamc@1133 4433 XFREE (tmp_pathspec);
adamc@1133 4434
adam@1459 4435 actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
adamc@1133 4436 strendzap (actual_cwrapper_path, actual_cwrapper_name);
adamc@1133 4437
adamc@1133 4438 /* wrapper name transforms */
adamc@1133 4439 strendzap (actual_cwrapper_name, ".exe");
adamc@1133 4440 tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
adamc@1133 4441 XFREE (actual_cwrapper_name);
adamc@1133 4442 actual_cwrapper_name = tmp_pathspec;
adamc@1133 4443 tmp_pathspec = 0;
adamc@1133 4444
adamc@1133 4445 /* target_name transforms -- use actual target program name; might have lt- prefix */
adamc@1133 4446 target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
adamc@1133 4447 strendzap (target_name, ".exe");
adamc@1133 4448 tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
adamc@1133 4449 XFREE (target_name);
adamc@1133 4450 target_name = tmp_pathspec;
adamc@1133 4451 tmp_pathspec = 0;
adamc@1133 4452
adam@1459 4453 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4454 "(main) libtool target name: %s\n",
adam@1459 4455 target_name);
adamc@1133 4456 EOF
adamc@1133 4457
adamc@1133 4458 cat <<EOF
adamc@1133 4459 newargz[0] =
adamc@1133 4460 XMALLOC (char, (strlen (actual_cwrapper_path) +
adamc@1133 4461 strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
adamc@1133 4462 strcpy (newargz[0], actual_cwrapper_path);
adamc@1133 4463 strcat (newargz[0], "$objdir");
adamc@1133 4464 strcat (newargz[0], "/");
adamc@1133 4465 EOF
adamc@1133 4466
adamc@1133 4467 cat <<"EOF"
adamc@1133 4468 /* stop here, and copy so we don't have to do this twice */
adamc@1133 4469 tmp_pathspec = xstrdup (newargz[0]);
adamc@1133 4470
adamc@1133 4471 /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
adamc@1133 4472 strcat (newargz[0], actual_cwrapper_name);
adamc@1133 4473
adamc@1133 4474 /* DO want the lt- prefix here if it exists, so use target_name */
adamc@1133 4475 lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
adamc@1133 4476 XFREE (tmp_pathspec);
adamc@1133 4477 tmp_pathspec = NULL;
adamc@1133 4478 EOF
adamc@1133 4479
adamc@1133 4480 case $host_os in
adamc@1133 4481 mingw*)
adamc@1133 4482 cat <<"EOF"
adamc@1133 4483 {
adamc@1133 4484 char* p;
adamc@1133 4485 while ((p = strchr (newargz[0], '\\')) != NULL)
adamc@1133 4486 {
adamc@1133 4487 *p = '/';
adamc@1133 4488 }
adamc@1133 4489 while ((p = strchr (lt_argv_zero, '\\')) != NULL)
adamc@1133 4490 {
adamc@1133 4491 *p = '/';
adamc@1133 4492 }
adamc@1133 4493 }
adamc@1133 4494 EOF
adamc@1133 4495 ;;
adamc@1133 4496 esac
adamc@1133 4497
adamc@1133 4498 cat <<"EOF"
adamc@1133 4499 XFREE (target_name);
adamc@1133 4500 XFREE (actual_cwrapper_path);
adamc@1133 4501 XFREE (actual_cwrapper_name);
adamc@1133 4502
adamc@1133 4503 lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
adamc@1133 4504 lt_setenv ("DUALCASE", "1"); /* for MSK sh */
adam@1459 4505 /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
adam@1459 4506 be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
adam@1459 4507 because on Windows, both *_VARNAMEs are PATH but uninstalled
adam@1459 4508 libraries must come first. */
adam@1459 4509 lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
adamc@1133 4510 lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
adam@1459 4511
adam@1459 4512 lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
adam@1459 4513 nonnull (lt_argv_zero));
adamc@1133 4514 for (i = 0; i < newargc; i++)
adamc@1133 4515 {
adam@1459 4516 lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
adam@1459 4517 i, nonnull (newargz[i]));
adamc@1133 4518 }
adamc@1133 4519
adamc@1133 4520 EOF
adamc@1133 4521
adamc@1133 4522 case $host_os in
adamc@1133 4523 mingw*)
adamc@1133 4524 cat <<"EOF"
adamc@1133 4525 /* execv doesn't actually work on mingw as expected on unix */
adam@1459 4526 newargz = prepare_spawn (newargz);
adamc@1133 4527 rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
adamc@1133 4528 if (rval == -1)
adamc@1133 4529 {
adamc@1133 4530 /* failed to start process */
adam@1459 4531 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4532 "(main) failed to launch target \"%s\": %s\n",
adam@1459 4533 lt_argv_zero, nonnull (strerror (errno)));
adamc@1133 4534 return 127;
adamc@1133 4535 }
adamc@1133 4536 return rval;
adamc@1133 4537 EOF
adamc@1133 4538 ;;
adamc@1133 4539 *)
adamc@1133 4540 cat <<"EOF"
adamc@1133 4541 execv (lt_argv_zero, newargz);
adamc@1133 4542 return rval; /* =127, but avoids unused variable warning */
adamc@1133 4543 EOF
adamc@1133 4544 ;;
adamc@1133 4545 esac
adamc@1133 4546
adamc@1133 4547 cat <<"EOF"
adamc@1133 4548 }
adamc@1133 4549
adamc@1133 4550 void *
adamc@1133 4551 xmalloc (size_t num)
adamc@1133 4552 {
adamc@1133 4553 void *p = (void *) malloc (num);
adamc@1133 4554 if (!p)
adam@1459 4555 lt_fatal (__FILE__, __LINE__, "memory exhausted");
adamc@1133 4556
adamc@1133 4557 return p;
adamc@1133 4558 }
adamc@1133 4559
adamc@1133 4560 char *
adamc@1133 4561 xstrdup (const char *string)
adamc@1133 4562 {
adamc@1133 4563 return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
adamc@1133 4564 string) : NULL;
adamc@1133 4565 }
adamc@1133 4566
adamc@1133 4567 const char *
adamc@1133 4568 base_name (const char *name)
adamc@1133 4569 {
adamc@1133 4570 const char *base;
adamc@1133 4571
adamc@1133 4572 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
adamc@1133 4573 /* Skip over the disk name in MSDOS pathnames. */
adamc@1133 4574 if (isalpha ((unsigned char) name[0]) && name[1] == ':')
adamc@1133 4575 name += 2;
adamc@1133 4576 #endif
adamc@1133 4577
adamc@1133 4578 for (base = name; *name; name++)
adamc@1133 4579 if (IS_DIR_SEPARATOR (*name))
adamc@1133 4580 base = name + 1;
adamc@1133 4581 return base;
adamc@1133 4582 }
adamc@1133 4583
adamc@1133 4584 int
adamc@1133 4585 check_executable (const char *path)
adamc@1133 4586 {
adamc@1133 4587 struct stat st;
adamc@1133 4588
adam@1459 4589 lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
adam@1459 4590 nonempty (path));
adamc@1133 4591 if ((!path) || (!*path))
adamc@1133 4592 return 0;
adamc@1133 4593
adamc@1133 4594 if ((stat (path, &st) >= 0)
adamc@1133 4595 && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
adamc@1133 4596 return 1;
adamc@1133 4597 else
adamc@1133 4598 return 0;
adamc@1133 4599 }
adamc@1133 4600
adamc@1133 4601 int
adamc@1133 4602 make_executable (const char *path)
adamc@1133 4603 {
adamc@1133 4604 int rval = 0;
adamc@1133 4605 struct stat st;
adamc@1133 4606
adam@1459 4607 lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
adam@1459 4608 nonempty (path));
adamc@1133 4609 if ((!path) || (!*path))
adamc@1133 4610 return 0;
adamc@1133 4611
adamc@1133 4612 if (stat (path, &st) >= 0)
adamc@1133 4613 {
adamc@1133 4614 rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
adamc@1133 4615 }
adamc@1133 4616 return rval;
adamc@1133 4617 }
adamc@1133 4618
adamc@1133 4619 /* Searches for the full path of the wrapper. Returns
adamc@1133 4620 newly allocated full path name if found, NULL otherwise
adamc@1133 4621 Does not chase symlinks, even on platforms that support them.
adamc@1133 4622 */
adamc@1133 4623 char *
adamc@1133 4624 find_executable (const char *wrapper)
adamc@1133 4625 {
adamc@1133 4626 int has_slash = 0;
adamc@1133 4627 const char *p;
adamc@1133 4628 const char *p_next;
adamc@1133 4629 /* static buffer for getcwd */
adamc@1133 4630 char tmp[LT_PATHMAX + 1];
adamc@1133 4631 int tmp_len;
adamc@1133 4632 char *concat_name;
adamc@1133 4633
adam@1459 4634 lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
adam@1459 4635 nonempty (wrapper));
adamc@1133 4636
adamc@1133 4637 if ((wrapper == NULL) || (*wrapper == '\0'))
adamc@1133 4638 return NULL;
adamc@1133 4639
adamc@1133 4640 /* Absolute path? */
adamc@1133 4641 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
adamc@1133 4642 if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
adamc@1133 4643 {
adamc@1133 4644 concat_name = xstrdup (wrapper);
adamc@1133 4645 if (check_executable (concat_name))
adamc@1133 4646 return concat_name;
adamc@1133 4647 XFREE (concat_name);
adamc@1133 4648 }
adamc@1133 4649 else
adamc@1133 4650 {
adamc@1133 4651 #endif
adamc@1133 4652 if (IS_DIR_SEPARATOR (wrapper[0]))
adamc@1133 4653 {
adamc@1133 4654 concat_name = xstrdup (wrapper);
adamc@1133 4655 if (check_executable (concat_name))
adamc@1133 4656 return concat_name;
adamc@1133 4657 XFREE (concat_name);
adamc@1133 4658 }
adamc@1133 4659 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
adamc@1133 4660 }
adamc@1133 4661 #endif
adamc@1133 4662
adamc@1133 4663 for (p = wrapper; *p; p++)
adamc@1133 4664 if (*p == '/')
adamc@1133 4665 {
adamc@1133 4666 has_slash = 1;
adamc@1133 4667 break;
adamc@1133 4668 }
adamc@1133 4669 if (!has_slash)
adamc@1133 4670 {
adamc@1133 4671 /* no slashes; search PATH */
adamc@1133 4672 const char *path = getenv ("PATH");
adamc@1133 4673 if (path != NULL)
adamc@1133 4674 {
adamc@1133 4675 for (p = path; *p; p = p_next)
adamc@1133 4676 {
adamc@1133 4677 const char *q;
adamc@1133 4678 size_t p_len;
adamc@1133 4679 for (q = p; *q; q++)
adamc@1133 4680 if (IS_PATH_SEPARATOR (*q))
adamc@1133 4681 break;
adamc@1133 4682 p_len = q - p;
adamc@1133 4683 p_next = (*q == '\0' ? q : q + 1);
adamc@1133 4684 if (p_len == 0)
adamc@1133 4685 {
adamc@1133 4686 /* empty path: current directory */
adamc@1133 4687 if (getcwd (tmp, LT_PATHMAX) == NULL)
adam@1459 4688 lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
adam@1459 4689 nonnull (strerror (errno)));
adamc@1133 4690 tmp_len = strlen (tmp);
adamc@1133 4691 concat_name =
adamc@1133 4692 XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
adamc@1133 4693 memcpy (concat_name, tmp, tmp_len);
adamc@1133 4694 concat_name[tmp_len] = '/';
adamc@1133 4695 strcpy (concat_name + tmp_len + 1, wrapper);
adamc@1133 4696 }
adamc@1133 4697 else
adamc@1133 4698 {
adamc@1133 4699 concat_name =
adamc@1133 4700 XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
adamc@1133 4701 memcpy (concat_name, p, p_len);
adamc@1133 4702 concat_name[p_len] = '/';
adamc@1133 4703 strcpy (concat_name + p_len + 1, wrapper);
adamc@1133 4704 }
adamc@1133 4705 if (check_executable (concat_name))
adamc@1133 4706 return concat_name;
adamc@1133 4707 XFREE (concat_name);
adamc@1133 4708 }
adamc@1133 4709 }
adamc@1133 4710 /* not found in PATH; assume curdir */
adamc@1133 4711 }
adamc@1133 4712 /* Relative path | not found in path: prepend cwd */
adamc@1133 4713 if (getcwd (tmp, LT_PATHMAX) == NULL)
adam@1459 4714 lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
adam@1459 4715 nonnull (strerror (errno)));
adamc@1133 4716 tmp_len = strlen (tmp);
adamc@1133 4717 concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
adamc@1133 4718 memcpy (concat_name, tmp, tmp_len);
adamc@1133 4719 concat_name[tmp_len] = '/';
adamc@1133 4720 strcpy (concat_name + tmp_len + 1, wrapper);
adamc@1133 4721
adamc@1133 4722 if (check_executable (concat_name))
adamc@1133 4723 return concat_name;
adamc@1133 4724 XFREE (concat_name);
adamc@1133 4725 return NULL;
adamc@1133 4726 }
adamc@1133 4727
adamc@1133 4728 char *
adamc@1133 4729 chase_symlinks (const char *pathspec)
adamc@1133 4730 {
adamc@1133 4731 #ifndef S_ISLNK
adamc@1133 4732 return xstrdup (pathspec);
adamc@1133 4733 #else
adamc@1133 4734 char buf[LT_PATHMAX];
adamc@1133 4735 struct stat s;
adamc@1133 4736 char *tmp_pathspec = xstrdup (pathspec);
adamc@1133 4737 char *p;
adamc@1133 4738 int has_symlinks = 0;
adamc@1133 4739 while (strlen (tmp_pathspec) && !has_symlinks)
adamc@1133 4740 {
adam@1459 4741 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4742 "checking path component for symlinks: %s\n",
adam@1459 4743 tmp_pathspec);
adamc@1133 4744 if (lstat (tmp_pathspec, &s) == 0)
adamc@1133 4745 {
adamc@1133 4746 if (S_ISLNK (s.st_mode) != 0)
adamc@1133 4747 {
adamc@1133 4748 has_symlinks = 1;
adamc@1133 4749 break;
adamc@1133 4750 }
adamc@1133 4751
adamc@1133 4752 /* search backwards for last DIR_SEPARATOR */
adamc@1133 4753 p = tmp_pathspec + strlen (tmp_pathspec) - 1;
adamc@1133 4754 while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
adamc@1133 4755 p--;
adamc@1133 4756 if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
adamc@1133 4757 {
adamc@1133 4758 /* no more DIR_SEPARATORS left */
adamc@1133 4759 break;
adamc@1133 4760 }
adamc@1133 4761 *p = '\0';
adamc@1133 4762 }
adamc@1133 4763 else
adamc@1133 4764 {
adam@1459 4765 lt_fatal (__FILE__, __LINE__,
adam@1459 4766 "error accessing file \"%s\": %s",
adam@1459 4767 tmp_pathspec, nonnull (strerror (errno)));
adamc@1133 4768 }
adamc@1133 4769 }
adamc@1133 4770 XFREE (tmp_pathspec);
adamc@1133 4771
adamc@1133 4772 if (!has_symlinks)
adamc@1133 4773 {
adamc@1133 4774 return xstrdup (pathspec);
adamc@1133 4775 }
adamc@1133 4776
adamc@1133 4777 tmp_pathspec = realpath (pathspec, buf);
adamc@1133 4778 if (tmp_pathspec == 0)
adamc@1133 4779 {
adam@1459 4780 lt_fatal (__FILE__, __LINE__,
adam@1459 4781 "could not follow symlinks for %s", pathspec);
adamc@1133 4782 }
adamc@1133 4783 return xstrdup (tmp_pathspec);
adamc@1133 4784 #endif
adamc@1133 4785 }
adamc@1133 4786
adamc@1133 4787 char *
adamc@1133 4788 strendzap (char *str, const char *pat)
adamc@1133 4789 {
adamc@1133 4790 size_t len, patlen;
adamc@1133 4791
adamc@1133 4792 assert (str != NULL);
adamc@1133 4793 assert (pat != NULL);
adamc@1133 4794
adamc@1133 4795 len = strlen (str);
adamc@1133 4796 patlen = strlen (pat);
adamc@1133 4797
adamc@1133 4798 if (patlen <= len)
adamc@1133 4799 {
adamc@1133 4800 str += len - patlen;
adamc@1133 4801 if (strcmp (str, pat) == 0)
adamc@1133 4802 *str = '\0';
adamc@1133 4803 }
adamc@1133 4804 return str;
adamc@1133 4805 }
adamc@1133 4806
adam@1459 4807 void
adam@1459 4808 lt_debugprintf (const char *file, int line, const char *fmt, ...)
adam@1459 4809 {
adam@1459 4810 va_list args;
adam@1459 4811 if (lt_debug)
adam@1459 4812 {
adam@1459 4813 (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
adam@1459 4814 va_start (args, fmt);
adam@1459 4815 (void) vfprintf (stderr, fmt, args);
adam@1459 4816 va_end (args);
adam@1459 4817 }
adam@1459 4818 }
adam@1459 4819
adamc@1133 4820 static void
adam@1459 4821 lt_error_core (int exit_status, const char *file,
adam@1459 4822 int line, const char *mode,
adamc@1133 4823 const char *message, va_list ap)
adamc@1133 4824 {
adam@1459 4825 fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
adamc@1133 4826 vfprintf (stderr, message, ap);
adamc@1133 4827 fprintf (stderr, ".\n");
adamc@1133 4828
adamc@1133 4829 if (exit_status >= 0)
adamc@1133 4830 exit (exit_status);
adamc@1133 4831 }
adamc@1133 4832
adamc@1133 4833 void
adam@1459 4834 lt_fatal (const char *file, int line, const char *message, ...)
adamc@1133 4835 {
adamc@1133 4836 va_list ap;
adamc@1133 4837 va_start (ap, message);
adam@1459 4838 lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
adamc@1133 4839 va_end (ap);
adamc@1133 4840 }
adamc@1133 4841
adam@1459 4842 static const char *
adam@1459 4843 nonnull (const char *s)
adam@1459 4844 {
adam@1459 4845 return s ? s : "(null)";
adam@1459 4846 }
adam@1459 4847
adam@1459 4848 static const char *
adam@1459 4849 nonempty (const char *s)
adam@1459 4850 {
adam@1459 4851 return (s && !*s) ? "(empty)" : nonnull (s);
adam@1459 4852 }
adam@1459 4853
adamc@1133 4854 void
adamc@1133 4855 lt_setenv (const char *name, const char *value)
adamc@1133 4856 {
adam@1459 4857 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4858 "(lt_setenv) setting '%s' to '%s'\n",
adam@1459 4859 nonnull (name), nonnull (value));
adamc@1133 4860 {
adamc@1133 4861 #ifdef HAVE_SETENV
adamc@1133 4862 /* always make a copy, for consistency with !HAVE_SETENV */
adamc@1133 4863 char *str = xstrdup (value);
adamc@1133 4864 setenv (name, str, 1);
adamc@1133 4865 #else
adamc@1133 4866 int len = strlen (name) + 1 + strlen (value) + 1;
adamc@1133 4867 char *str = XMALLOC (char, len);
adamc@1133 4868 sprintf (str, "%s=%s", name, value);
adamc@1133 4869 if (putenv (str) != EXIT_SUCCESS)
adamc@1133 4870 {
adamc@1133 4871 XFREE (str);
adamc@1133 4872 }
adamc@1133 4873 #endif
adamc@1133 4874 }
adamc@1133 4875 }
adamc@1133 4876
adamc@1133 4877 char *
adamc@1133 4878 lt_extend_str (const char *orig_value, const char *add, int to_end)
adamc@1133 4879 {
adamc@1133 4880 char *new_value;
adamc@1133 4881 if (orig_value && *orig_value)
adamc@1133 4882 {
adamc@1133 4883 int orig_value_len = strlen (orig_value);
adamc@1133 4884 int add_len = strlen (add);
adamc@1133 4885 new_value = XMALLOC (char, add_len + orig_value_len + 1);
adamc@1133 4886 if (to_end)
adamc@1133 4887 {
adamc@1133 4888 strcpy (new_value, orig_value);
adamc@1133 4889 strcpy (new_value + orig_value_len, add);
adamc@1133 4890 }
adamc@1133 4891 else
adamc@1133 4892 {
adamc@1133 4893 strcpy (new_value, add);
adamc@1133 4894 strcpy (new_value + add_len, orig_value);
adamc@1133 4895 }
adamc@1133 4896 }
adamc@1133 4897 else
adamc@1133 4898 {
adamc@1133 4899 new_value = xstrdup (add);
adamc@1133 4900 }
adamc@1133 4901 return new_value;
adamc@1133 4902 }
adamc@1133 4903
adamc@1133 4904 void
adamc@1133 4905 lt_update_exe_path (const char *name, const char *value)
adamc@1133 4906 {
adam@1459 4907 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4908 "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
adam@1459 4909 nonnull (name), nonnull (value));
adamc@1133 4910
adamc@1133 4911 if (name && *name && value && *value)
adamc@1133 4912 {
adamc@1133 4913 char *new_value = lt_extend_str (getenv (name), value, 0);
adamc@1133 4914 /* some systems can't cope with a ':'-terminated path #' */
adamc@1133 4915 int len = strlen (new_value);
adamc@1133 4916 while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
adamc@1133 4917 {
adamc@1133 4918 new_value[len-1] = '\0';
adamc@1133 4919 }
adamc@1133 4920 lt_setenv (name, new_value);
adamc@1133 4921 XFREE (new_value);
adamc@1133 4922 }
adamc@1133 4923 }
adamc@1133 4924
adamc@1133 4925 void
adamc@1133 4926 lt_update_lib_path (const char *name, const char *value)
adamc@1133 4927 {
adam@1459 4928 lt_debugprintf (__FILE__, __LINE__,
adam@1459 4929 "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
adam@1459 4930 nonnull (name), nonnull (value));
adamc@1133 4931
adamc@1133 4932 if (name && *name && value && *value)
adamc@1133 4933 {
adamc@1133 4934 char *new_value = lt_extend_str (getenv (name), value, 0);
adamc@1133 4935 lt_setenv (name, new_value);
adamc@1133 4936 XFREE (new_value);
adamc@1133 4937 }
adamc@1133 4938 }
adamc@1133 4939
adamc@1133 4940 EOF
adam@1459 4941 case $host_os in
adam@1459 4942 mingw*)
adam@1459 4943 cat <<"EOF"
adam@1459 4944
adam@1459 4945 /* Prepares an argument vector before calling spawn().
adam@1459 4946 Note that spawn() does not by itself call the command interpreter
adam@1459 4947 (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
adam@1459 4948 ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
adam@1459 4949 GetVersionEx(&v);
adam@1459 4950 v.dwPlatformId == VER_PLATFORM_WIN32_NT;
adam@1459 4951 }) ? "cmd.exe" : "command.com").
adam@1459 4952 Instead it simply concatenates the arguments, separated by ' ', and calls
adam@1459 4953 CreateProcess(). We must quote the arguments since Win32 CreateProcess()
adam@1459 4954 interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
adam@1459 4955 special way:
adam@1459 4956 - Space and tab are interpreted as delimiters. They are not treated as
adam@1459 4957 delimiters if they are surrounded by double quotes: "...".
adam@1459 4958 - Unescaped double quotes are removed from the input. Their only effect is
adam@1459 4959 that within double quotes, space and tab are treated like normal
adam@1459 4960 characters.
adam@1459 4961 - Backslashes not followed by double quotes are not special.
adam@1459 4962 - But 2*n+1 backslashes followed by a double quote become
adam@1459 4963 n backslashes followed by a double quote (n >= 0):
adam@1459 4964 \" -> "
adam@1459 4965 \\\" -> \"
adam@1459 4966 \\\\\" -> \\"
adam@1459 4967 */
adam@1459 4968 #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"
adam@1459 4969 #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"
adam@1459 4970 char **
adam@1459 4971 prepare_spawn (char **argv)
adam@1459 4972 {
adam@1459 4973 size_t argc;
adam@1459 4974 char **new_argv;
adam@1459 4975 size_t i;
adam@1459 4976
adam@1459 4977 /* Count number of arguments. */
adam@1459 4978 for (argc = 0; argv[argc] != NULL; argc++)
adam@1459 4979 ;
adam@1459 4980
adam@1459 4981 /* Allocate new argument vector. */
adam@1459 4982 new_argv = XMALLOC (char *, argc + 1);
adam@1459 4983
adam@1459 4984 /* Put quoted arguments into the new argument vector. */
adam@1459 4985 for (i = 0; i < argc; i++)
adam@1459 4986 {
adam@1459 4987 const char *string = argv[i];
adam@1459 4988
adam@1459 4989 if (string[0] == '\0')
adam@1459 4990 new_argv[i] = xstrdup ("\"\"");
adam@1459 4991 else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
adam@1459 4992 {
adam@1459 4993 int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
adam@1459 4994 size_t length;
adam@1459 4995 unsigned int backslashes;
adam@1459 4996 const char *s;
adam@1459 4997 char *quoted_string;
adam@1459 4998 char *p;
adam@1459 4999
adam@1459 5000 length = 0;
adam@1459 5001 backslashes = 0;
adam@1459 5002 if (quote_around)
adam@1459 5003 length++;
adam@1459 5004 for (s = string; *s != '\0'; s++)
adam@1459 5005 {
adam@1459 5006 char c = *s;
adam@1459 5007 if (c == '"')
adam@1459 5008 length += backslashes + 1;
adam@1459 5009 length++;
adam@1459 5010 if (c == '\\')
adam@1459 5011 backslashes++;
adam@1459 5012 else
adam@1459 5013 backslashes = 0;
adam@1459 5014 }
adam@1459 5015 if (quote_around)
adam@1459 5016 length += backslashes + 1;
adam@1459 5017
adam@1459 5018 quoted_string = XMALLOC (char, length + 1);
adam@1459 5019
adam@1459 5020 p = quoted_string;
adam@1459 5021 backslashes = 0;
adam@1459 5022 if (quote_around)
adam@1459 5023 *p++ = '"';
adam@1459 5024 for (s = string; *s != '\0'; s++)
adam@1459 5025 {
adam@1459 5026 char c = *s;
adam@1459 5027 if (c == '"')
adam@1459 5028 {
adam@1459 5029 unsigned int j;
adam@1459 5030 for (j = backslashes + 1; j > 0; j--)
adam@1459 5031 *p++ = '\\';
adam@1459 5032 }
adam@1459 5033 *p++ = c;
adam@1459 5034 if (c == '\\')
adam@1459 5035 backslashes++;
adam@1459 5036 else
adam@1459 5037 backslashes = 0;
adam@1459 5038 }
adam@1459 5039 if (quote_around)
adam@1459 5040 {
adam@1459 5041 unsigned int j;
adam@1459 5042 for (j = backslashes; j > 0; j--)
adam@1459 5043 *p++ = '\\';
adam@1459 5044 *p++ = '"';
adam@1459 5045 }
adam@1459 5046 *p = '\0';
adam@1459 5047
adam@1459 5048 new_argv[i] = quoted_string;
adam@1459 5049 }
adam@1459 5050 else
adam@1459 5051 new_argv[i] = (char *) string;
adam@1459 5052 }
adam@1459 5053 new_argv[argc] = NULL;
adam@1459 5054
adam@1459 5055 return new_argv;
adam@1459 5056 }
adam@1459 5057 EOF
adam@1459 5058 ;;
adam@1459 5059 esac
adam@1459 5060
adam@1459 5061 cat <<"EOF"
adam@1459 5062 void lt_dump_script (FILE* f)
adam@1459 5063 {
adam@1459 5064 EOF
adam@1459 5065 func_emit_wrapper yes |
adam@1599 5066 $SED -n -e '
adam@1599 5067 s/^\(.\{79\}\)\(..*\)/\1\
adam@1599 5068 \2/
adam@1599 5069 h
adam@1599 5070 s/\([\\"]\)/\\\1/g
adam@1599 5071 s/$/\\n/
adam@1599 5072 s/\([^\n]*\).*/ fputs ("\1", f);/p
adam@1599 5073 g
adam@1599 5074 D'
adam@1459 5075 cat <<"EOF"
adam@1459 5076 }
adam@1459 5077 EOF
adamc@1133 5078 }
adamc@1133 5079 # end: func_emit_cwrapperexe_src
adamc@1133 5080
adam@1459 5081 # func_win32_import_lib_p ARG
adam@1459 5082 # True if ARG is an import lib, as indicated by $file_magic_cmd
adam@1459 5083 func_win32_import_lib_p ()
adam@1459 5084 {
adam@1459 5085 $opt_debug
adam@1459 5086 case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
adam@1459 5087 *import*) : ;;
adam@1459 5088 *) false ;;
adam@1459 5089 esac
adam@1459 5090 }
adam@1459 5091
adamc@1133 5092 # func_mode_link arg...
adamc@1133 5093 func_mode_link ()
adamc@1133 5094 {
adamc@1133 5095 $opt_debug
adamc@1133 5096 case $host in
adamc@1133 5097 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
adamc@1133 5098 # It is impossible to link a dll without this setting, and
adamc@1133 5099 # we shouldn't force the makefile maintainer to figure out
adamc@1133 5100 # which system we are compiling for in order to pass an extra
adamc@1133 5101 # flag for every libtool invocation.
adamc@1133 5102 # allow_undefined=no
adamc@1133 5103
adamc@1133 5104 # FIXME: Unfortunately, there are problems with the above when trying
adamc@1133 5105 # to make a dll which has undefined symbols, in which case not
adamc@1133 5106 # even a static library is built. For now, we need to specify
adamc@1133 5107 # -no-undefined on the libtool link line when we can be certain
adamc@1133 5108 # that all symbols are satisfied, otherwise we get a static library.
adamc@1133 5109 allow_undefined=yes
adamc@1133 5110 ;;
adamc@1133 5111 *)
adamc@1133 5112 allow_undefined=yes
adamc@1133 5113 ;;
adamc@1133 5114 esac
adamc@1133 5115 libtool_args=$nonopt
adamc@1133 5116 base_compile="$nonopt $@"
adamc@1133 5117 compile_command=$nonopt
adamc@1133 5118 finalize_command=$nonopt
adamc@1133 5119
adamc@1133 5120 compile_rpath=
adamc@1133 5121 finalize_rpath=
adamc@1133 5122 compile_shlibpath=
adamc@1133 5123 finalize_shlibpath=
adamc@1133 5124 convenience=
adamc@1133 5125 old_convenience=
adamc@1133 5126 deplibs=
adamc@1133 5127 old_deplibs=
adamc@1133 5128 compiler_flags=
adamc@1133 5129 linker_flags=
adamc@1133 5130 dllsearchpath=
adamc@1133 5131 lib_search_path=`pwd`
adamc@1133 5132 inst_prefix_dir=
adamc@1133 5133 new_inherited_linker_flags=
adamc@1133 5134
adamc@1133 5135 avoid_version=no
adam@1459 5136 bindir=
adamc@1133 5137 dlfiles=
adamc@1133 5138 dlprefiles=
adamc@1133 5139 dlself=no
adamc@1133 5140 export_dynamic=no
adamc@1133 5141 export_symbols=
adamc@1133 5142 export_symbols_regex=
adamc@1133 5143 generated=
adamc@1133 5144 libobjs=
adamc@1133 5145 ltlibs=
adamc@1133 5146 module=no
adamc@1133 5147 no_install=no
adamc@1133 5148 objs=
adamc@1133 5149 non_pic_objects=
adamc@1133 5150 precious_files_regex=
adamc@1133 5151 prefer_static_libs=no
adamc@1133 5152 preload=no
adamc@1133 5153 prev=
adamc@1133 5154 prevarg=
adamc@1133 5155 release=
adamc@1133 5156 rpath=
adamc@1133 5157 xrpath=
adamc@1133 5158 perm_rpath=
adamc@1133 5159 temp_rpath=
adamc@1133 5160 thread_safe=no
adamc@1133 5161 vinfo=
adamc@1133 5162 vinfo_number=no
adamc@1133 5163 weak_libs=
adamc@1133 5164 single_module="${wl}-single_module"
adamc@1133 5165 func_infer_tag $base_compile
adamc@1133 5166
adamc@1133 5167 # We need to know -static, to get the right output filenames.
adamc@1133 5168 for arg
adamc@1133 5169 do
adamc@1133 5170 case $arg in
adamc@1133 5171 -shared)
adamc@1133 5172 test "$build_libtool_libs" != yes && \
adamc@1133 5173 func_fatal_configuration "can not build a shared library"
adamc@1133 5174 build_old_libs=no
adamc@1133 5175 break
adamc@1133 5176 ;;
adamc@1133 5177 -all-static | -static | -static-libtool-libs)
adamc@1133 5178 case $arg in
adamc@1133 5179 -all-static)
adamc@1133 5180 if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
adamc@1133 5181 func_warning "complete static linking is impossible in this configuration"
adamc@1133 5182 fi
adamc@1133 5183 if test -n "$link_static_flag"; then
adamc@1133 5184 dlopen_self=$dlopen_self_static
adamc@1133 5185 fi
adamc@1133 5186 prefer_static_libs=yes
adamc@1133 5187 ;;
adamc@1133 5188 -static)
adamc@1133 5189 if test -z "$pic_flag" && test -n "$link_static_flag"; then
adamc@1133 5190 dlopen_self=$dlopen_self_static
adamc@1133 5191 fi
adamc@1133 5192 prefer_static_libs=built
adamc@1133 5193 ;;
adamc@1133 5194 -static-libtool-libs)
adamc@1133 5195 if test -z "$pic_flag" && test -n "$link_static_flag"; then
adamc@1133 5196 dlopen_self=$dlopen_self_static
adamc@1133 5197 fi
adamc@1133 5198 prefer_static_libs=yes
adamc@1133 5199 ;;
adamc@1133 5200 esac
adamc@1133 5201 build_libtool_libs=no
adamc@1133 5202 build_old_libs=yes
adamc@1133 5203 break
adamc@1133 5204 ;;
adamc@1133 5205 esac
adamc@1133 5206 done
adamc@1133 5207
adamc@1133 5208 # See if our shared archives depend on static archives.
adamc@1133 5209 test -n "$old_archive_from_new_cmds" && build_old_libs=yes
adamc@1133 5210
adamc@1133 5211 # Go through the arguments, transforming them on the way.
adamc@1133 5212 while test "$#" -gt 0; do
adamc@1133 5213 arg="$1"
adamc@1133 5214 shift
adamc@1133 5215 func_quote_for_eval "$arg"
adamc@1133 5216 qarg=$func_quote_for_eval_unquoted_result
adamc@1133 5217 func_append libtool_args " $func_quote_for_eval_result"
adamc@1133 5218
adamc@1133 5219 # If the previous option needs an argument, assign it.
adamc@1133 5220 if test -n "$prev"; then
adamc@1133 5221 case $prev in
adamc@1133 5222 output)
adamc@1133 5223 func_append compile_command " @OUTPUT@"
adamc@1133 5224 func_append finalize_command " @OUTPUT@"
adamc@1133 5225 ;;
adamc@1133 5226 esac
adamc@1133 5227
adamc@1133 5228 case $prev in
adam@1459 5229 bindir)
adam@1459 5230 bindir="$arg"
adam@1459 5231 prev=
adam@1459 5232 continue
adam@1459 5233 ;;
adamc@1133 5234 dlfiles|dlprefiles)
adamc@1133 5235 if test "$preload" = no; then
adamc@1133 5236 # Add the symbol object into the linking commands.
adamc@1133 5237 func_append compile_command " @SYMFILE@"
adamc@1133 5238 func_append finalize_command " @SYMFILE@"
adamc@1133 5239 preload=yes
adamc@1133 5240 fi
adamc@1133 5241 case $arg in
adamc@1133 5242 *.la | *.lo) ;; # We handle these cases below.
adamc@1133 5243 force)
adamc@1133 5244 if test "$dlself" = no; then
adamc@1133 5245 dlself=needless
adamc@1133 5246 export_dynamic=yes
adamc@1133 5247 fi
adamc@1133 5248 prev=
adamc@1133 5249 continue
adamc@1133 5250 ;;
adamc@1133 5251 self)
adamc@1133 5252 if test "$prev" = dlprefiles; then
adamc@1133 5253 dlself=yes
adamc@1133 5254 elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
adamc@1133 5255 dlself=yes
adamc@1133 5256 else
adamc@1133 5257 dlself=needless
adamc@1133 5258 export_dynamic=yes
adamc@1133 5259 fi
adamc@1133 5260 prev=
adamc@1133 5261 continue
adamc@1133 5262 ;;
adamc@1133 5263 *)
adamc@1133 5264 if test "$prev" = dlfiles; then
adam@1459 5265 func_append dlfiles " $arg"
adamc@1133 5266 else
adam@1459 5267 func_append dlprefiles " $arg"
adamc@1133 5268 fi
adamc@1133 5269 prev=
adamc@1133 5270 continue
adamc@1133 5271 ;;
adamc@1133 5272 esac
adamc@1133 5273 ;;
adamc@1133 5274 expsyms)
adamc@1133 5275 export_symbols="$arg"
adamc@1133 5276 test -f "$arg" \
adamc@1133 5277 || func_fatal_error "symbol file \`$arg' does not exist"
adamc@1133 5278 prev=
adamc@1133 5279 continue
adamc@1133 5280 ;;
adamc@1133 5281 expsyms_regex)
adamc@1133 5282 export_symbols_regex="$arg"
adamc@1133 5283 prev=
adamc@1133 5284 continue
adamc@1133 5285 ;;
adamc@1133 5286 framework)
adamc@1133 5287 case $host in
adamc@1133 5288 *-*-darwin*)
adamc@1133 5289 case "$deplibs " in
adamc@1133 5290 *" $qarg.ltframework "*) ;;
adam@1459 5291 *) func_append deplibs " $qarg.ltframework" # this is fixed later
adamc@1133 5292 ;;
adamc@1133 5293 esac
adamc@1133 5294 ;;
adamc@1133 5295 esac
adamc@1133 5296 prev=
adamc@1133 5297 continue
adamc@1133 5298 ;;
adamc@1133 5299 inst_prefix)
adamc@1133 5300 inst_prefix_dir="$arg"
adamc@1133 5301 prev=
adamc@1133 5302 continue
adamc@1133 5303 ;;
adamc@1133 5304 objectlist)
adamc@1133 5305 if test -f "$arg"; then
adamc@1133 5306 save_arg=$arg
adamc@1133 5307 moreargs=
adamc@1133 5308 for fil in `cat "$save_arg"`
adamc@1133 5309 do
adam@1459 5310 # func_append moreargs " $fil"
adamc@1133 5311 arg=$fil
adamc@1133 5312 # A libtool-controlled object.
adamc@1133 5313
adamc@1133 5314 # Check to see that this really is a libtool object.
adamc@1133 5315 if func_lalib_unsafe_p "$arg"; then
adamc@1133 5316 pic_object=
adamc@1133 5317 non_pic_object=
adamc@1133 5318
adamc@1133 5319 # Read the .lo file
adamc@1133 5320 func_source "$arg"
adamc@1133 5321
adamc@1133 5322 if test -z "$pic_object" ||
adamc@1133 5323 test -z "$non_pic_object" ||
adamc@1133 5324 test "$pic_object" = none &&
adamc@1133 5325 test "$non_pic_object" = none; then
adamc@1133 5326 func_fatal_error "cannot find name of object for \`$arg'"
adamc@1133 5327 fi
adamc@1133 5328
adamc@1133 5329 # Extract subdirectory from the argument.
adamc@1133 5330 func_dirname "$arg" "/" ""
adamc@1133 5331 xdir="$func_dirname_result"
adamc@1133 5332
adamc@1133 5333 if test "$pic_object" != none; then
adamc@1133 5334 # Prepend the subdirectory the object is found in.
adamc@1133 5335 pic_object="$xdir$pic_object"
adamc@1133 5336
adamc@1133 5337 if test "$prev" = dlfiles; then
adamc@1133 5338 if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
adam@1459 5339 func_append dlfiles " $pic_object"
adamc@1133 5340 prev=
adamc@1133 5341 continue
adamc@1133 5342 else
adamc@1133 5343 # If libtool objects are unsupported, then we need to preload.
adamc@1133 5344 prev=dlprefiles
adamc@1133 5345 fi
adamc@1133 5346 fi
adamc@1133 5347
adamc@1133 5348 # CHECK ME: I think I busted this. -Ossama
adamc@1133 5349 if test "$prev" = dlprefiles; then
adamc@1133 5350 # Preload the old-style object.
adam@1459 5351 func_append dlprefiles " $pic_object"
adamc@1133 5352 prev=
adamc@1133 5353 fi
adamc@1133 5354
adamc@1133 5355 # A PIC object.
adamc@1133 5356 func_append libobjs " $pic_object"
adamc@1133 5357 arg="$pic_object"
adamc@1133 5358 fi
adamc@1133 5359
adamc@1133 5360 # Non-PIC object.
adamc@1133 5361 if test "$non_pic_object" != none; then
adamc@1133 5362 # Prepend the subdirectory the object is found in.
adamc@1133 5363 non_pic_object="$xdir$non_pic_object"
adamc@1133 5364
adamc@1133 5365 # A standard non-PIC object
adamc@1133 5366 func_append non_pic_objects " $non_pic_object"
adamc@1133 5367 if test -z "$pic_object" || test "$pic_object" = none ; then
adamc@1133 5368 arg="$non_pic_object"
adamc@1133 5369 fi
adamc@1133 5370 else
adamc@1133 5371 # If the PIC object exists, use it instead.
adamc@1133 5372 # $xdir was prepended to $pic_object above.
adamc@1133 5373 non_pic_object="$pic_object"
adamc@1133 5374 func_append non_pic_objects " $non_pic_object"
adamc@1133 5375 fi
adamc@1133 5376 else
adamc@1133 5377 # Only an error if not doing a dry-run.
adamc@1133 5378 if $opt_dry_run; then
adamc@1133 5379 # Extract subdirectory from the argument.
adamc@1133 5380 func_dirname "$arg" "/" ""
adamc@1133 5381 xdir="$func_dirname_result"
adamc@1133 5382
adamc@1133 5383 func_lo2o "$arg"
adamc@1133 5384 pic_object=$xdir$objdir/$func_lo2o_result
adamc@1133 5385 non_pic_object=$xdir$func_lo2o_result
adamc@1133 5386 func_append libobjs " $pic_object"
adamc@1133 5387 func_append non_pic_objects " $non_pic_object"
adamc@1133 5388 else
adamc@1133 5389 func_fatal_error "\`$arg' is not a valid libtool object"
adamc@1133 5390 fi
adamc@1133 5391 fi
adamc@1133 5392 done
adamc@1133 5393 else
adamc@1133 5394 func_fatal_error "link input file \`$arg' does not exist"
adamc@1133 5395 fi
adamc@1133 5396 arg=$save_arg
adamc@1133 5397 prev=
adamc@1133 5398 continue
adamc@1133 5399 ;;
adamc@1133 5400 precious_regex)
adamc@1133 5401 precious_files_regex="$arg"
adamc@1133 5402 prev=
adamc@1133 5403 continue
adamc@1133 5404 ;;
adamc@1133 5405 release)
adamc@1133 5406 release="-$arg"
adamc@1133 5407 prev=
adamc@1133 5408 continue
adamc@1133 5409 ;;
adamc@1133 5410 rpath | xrpath)
adamc@1133 5411 # We need an absolute path.
adamc@1133 5412 case $arg in
adamc@1133 5413 [\\/]* | [A-Za-z]:[\\/]*) ;;
adamc@1133 5414 *)
adamc@1133 5415 func_fatal_error "only absolute run-paths are allowed"
adamc@1133 5416 ;;
adamc@1133 5417 esac
adamc@1133 5418 if test "$prev" = rpath; then
adamc@1133 5419 case "$rpath " in
adamc@1133 5420 *" $arg "*) ;;
adam@1459 5421 *) func_append rpath " $arg" ;;
adamc@1133 5422 esac
adamc@1133 5423 else
adamc@1133 5424 case "$xrpath " in
adamc@1133 5425 *" $arg "*) ;;
adam@1459 5426 *) func_append xrpath " $arg" ;;
adamc@1133 5427 esac
adamc@1133 5428 fi
adamc@1133 5429 prev=
adamc@1133 5430 continue
adamc@1133 5431 ;;
adamc@1133 5432 shrext)
adamc@1133 5433 shrext_cmds="$arg"
adamc@1133 5434 prev=
adamc@1133 5435 continue
adamc@1133 5436 ;;
adamc@1133 5437 weak)
adam@1459 5438 func_append weak_libs " $arg"
adamc@1133 5439 prev=
adamc@1133 5440 continue
adamc@1133 5441 ;;
adamc@1133 5442 xcclinker)
adam@1459 5443 func_append linker_flags " $qarg"
adam@1459 5444 func_append compiler_flags " $qarg"
adamc@1133 5445 prev=
adamc@1133 5446 func_append compile_command " $qarg"
adamc@1133 5447 func_append finalize_command " $qarg"
adamc@1133 5448 continue
adamc@1133 5449 ;;
adamc@1133 5450 xcompiler)
adam@1459 5451 func_append compiler_flags " $qarg"
adamc@1133 5452 prev=
adamc@1133 5453 func_append compile_command " $qarg"
adamc@1133 5454 func_append finalize_command " $qarg"
adamc@1133 5455 continue
adamc@1133 5456 ;;
adamc@1133 5457 xlinker)
adam@1459 5458 func_append linker_flags " $qarg"
adam@1459 5459 func_append compiler_flags " $wl$qarg"
adamc@1133 5460 prev=
adamc@1133 5461 func_append compile_command " $wl$qarg"
adamc@1133 5462 func_append finalize_command " $wl$qarg"
adamc@1133 5463 continue
adamc@1133 5464 ;;
adamc@1133 5465 *)
adamc@1133 5466 eval "$prev=\"\$arg\""
adamc@1133 5467 prev=
adamc@1133 5468 continue
adamc@1133 5469 ;;
adamc@1133 5470 esac
adamc@1133 5471 fi # test -n "$prev"
adamc@1133 5472
adamc@1133 5473 prevarg="$arg"
adamc@1133 5474
adamc@1133 5475 case $arg in
adamc@1133 5476 -all-static)
adamc@1133 5477 if test -n "$link_static_flag"; then
adamc@1133 5478 # See comment for -static flag below, for more details.
adamc@1133 5479 func_append compile_command " $link_static_flag"
adamc@1133 5480 func_append finalize_command " $link_static_flag"
adamc@1133 5481 fi
adamc@1133 5482 continue
adamc@1133 5483 ;;
adamc@1133 5484
adamc@1133 5485 -allow-undefined)
adamc@1133 5486 # FIXME: remove this flag sometime in the future.
adamc@1133 5487 func_fatal_error "\`-allow-undefined' must not be used because it is the default"
adamc@1133 5488 ;;
adamc@1133 5489
adamc@1133 5490 -avoid-version)
adamc@1133 5491 avoid_version=yes
adamc@1133 5492 continue
adamc@1133 5493 ;;
adamc@1133 5494
adam@1459 5495 -bindir)
adam@1459 5496 prev=bindir
adam@1459 5497 continue
adam@1459 5498 ;;
adam@1459 5499
adamc@1133 5500 -dlopen)
adamc@1133 5501 prev=dlfiles
adamc@1133 5502 continue
adamc@1133 5503 ;;
adamc@1133 5504
adamc@1133 5505 -dlpreopen)
adamc@1133 5506 prev=dlprefiles
adamc@1133 5507 continue
adamc@1133 5508 ;;
adamc@1133 5509
adamc@1133 5510 -export-dynamic)
adamc@1133 5511 export_dynamic=yes
adamc@1133 5512 continue
adamc@1133 5513 ;;
adamc@1133 5514
adamc@1133 5515 -export-symbols | -export-symbols-regex)
adamc@1133 5516 if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
adamc@1133 5517 func_fatal_error "more than one -exported-symbols argument is not allowed"
adamc@1133 5518 fi
adamc@1133 5519 if test "X$arg" = "X-export-symbols"; then
adamc@1133 5520 prev=expsyms
adamc@1133 5521 else
adamc@1133 5522 prev=expsyms_regex
adamc@1133 5523 fi
adamc@1133 5524 continue
adamc@1133 5525 ;;
adamc@1133 5526
adamc@1133 5527 -framework)
adamc@1133 5528 prev=framework
adamc@1133 5529 continue
adamc@1133 5530 ;;
adamc@1133 5531
adamc@1133 5532 -inst-prefix-dir)
adamc@1133 5533 prev=inst_prefix
adamc@1133 5534 continue
adamc@1133 5535 ;;
adamc@1133 5536
adamc@1133 5537 # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
adamc@1133 5538 # so, if we see these flags be careful not to treat them like -L
adamc@1133 5539 -L[A-Z][A-Z]*:*)
adamc@1133 5540 case $with_gcc/$host in
adamc@1133 5541 no/*-*-irix* | /*-*-irix*)
adamc@1133 5542 func_append compile_command " $arg"
adamc@1133 5543 func_append finalize_command " $arg"
adamc@1133 5544 ;;
adamc@1133 5545 esac
adamc@1133 5546 continue
adamc@1133 5547 ;;
adamc@1133 5548
adamc@1133 5549 -L*)
adam@1459 5550 func_stripname "-L" '' "$arg"
adam@1459 5551 if test -z "$func_stripname_result"; then
adamc@1133 5552 if test "$#" -gt 0; then
adamc@1133 5553 func_fatal_error "require no space between \`-L' and \`$1'"
adamc@1133 5554 else
adamc@1133 5555 func_fatal_error "need path for \`-L' option"
adamc@1133 5556 fi
adamc@1133 5557 fi
adam@1459 5558 func_resolve_sysroot "$func_stripname_result"
adam@1459 5559 dir=$func_resolve_sysroot_result
adamc@1133 5560 # We need an absolute path.
adamc@1133 5561 case $dir in
adamc@1133 5562 [\\/]* | [A-Za-z]:[\\/]*) ;;
adamc@1133 5563 *)
adamc@1133 5564 absdir=`cd "$dir" && pwd`
adamc@1133 5565 test -z "$absdir" && \
adamc@1133 5566 func_fatal_error "cannot determine absolute directory name of \`$dir'"
adamc@1133 5567 dir="$absdir"
adamc@1133 5568 ;;
adamc@1133 5569 esac
adamc@1133 5570 case "$deplibs " in
adam@1459 5571 *" -L$dir "* | *" $arg "*)
adam@1459 5572 # Will only happen for absolute or sysroot arguments
adam@1459 5573 ;;
adamc@1133 5574 *)
adam@1459 5575 # Preserve sysroot, but never include relative directories
adam@1459 5576 case $dir in
adam@1459 5577 [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
adam@1459 5578 *) func_append deplibs " -L$dir" ;;
adam@1459 5579 esac
adam@1459 5580 func_append lib_search_path " $dir"
adamc@1133 5581 ;;
adamc@1133 5582 esac
adamc@1133 5583 case $host in
adamc@1133 5584 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
adam@1459 5585 testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
adamc@1133 5586 case :$dllsearchpath: in
adamc@1133 5587 *":$dir:"*) ;;
adamc@1133 5588 ::) dllsearchpath=$dir;;
adam@1459 5589 *) func_append dllsearchpath ":$dir";;
adamc@1133 5590 esac
adamc@1133 5591 case :$dllsearchpath: in
adamc@1133 5592 *":$testbindir:"*) ;;
adamc@1133 5593 ::) dllsearchpath=$testbindir;;
adam@1459 5594 *) func_append dllsearchpath ":$testbindir";;
adamc@1133 5595 esac
adamc@1133 5596 ;;
adamc@1133 5597 esac
adamc@1133 5598 continue
adamc@1133 5599 ;;
adamc@1133 5600
adamc@1133 5601 -l*)
adamc@1133 5602 if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
adamc@1133 5603 case $host in
adam@1459 5604 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
adamc@1133 5605 # These systems don't actually have a C or math library (as such)
adamc@1133 5606 continue
adamc@1133 5607 ;;
adamc@1133 5608 *-*-os2*)
adamc@1133 5609 # These systems don't actually have a C library (as such)
adamc@1133 5610 test "X$arg" = "X-lc" && continue
adamc@1133 5611 ;;
adamc@1133 5612 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
adamc@1133 5613 # Do not include libc due to us having libc/libc_r.
adamc@1133 5614 test "X$arg" = "X-lc" && continue
adamc@1133 5615 ;;
adamc@1133 5616 *-*-rhapsody* | *-*-darwin1.[012])
adamc@1133 5617 # Rhapsody C and math libraries are in the System framework
adam@1459 5618 func_append deplibs " System.ltframework"
adamc@1133 5619 continue
adamc@1133 5620 ;;
adamc@1133 5621 *-*-sco3.2v5* | *-*-sco5v6*)
adamc@1133 5622 # Causes problems with __ctype
adamc@1133 5623 test "X$arg" = "X-lc" && continue
adamc@1133 5624 ;;
adamc@1133 5625 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
adamc@1133 5626 # Compiler inserts libc in the correct place for threads to work
adamc@1133 5627 test "X$arg" = "X-lc" && continue
adamc@1133 5628 ;;
adamc@1133 5629 esac
adamc@1133 5630 elif test "X$arg" = "X-lc_r"; then
adamc@1133 5631 case $host in
adamc@1133 5632 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
adamc@1133 5633 # Do not include libc_r directly, use -pthread flag.
adamc@1133 5634 continue
adamc@1133 5635 ;;
adamc@1133 5636 esac
adamc@1133 5637 fi
adam@1459 5638 func_append deplibs " $arg"
adamc@1133 5639 continue
adamc@1133 5640 ;;
adamc@1133 5641
adamc@1133 5642 -module)
adamc@1133 5643 module=yes
adamc@1133 5644 continue
adamc@1133 5645 ;;
adamc@1133 5646
adamc@1133 5647 # Tru64 UNIX uses -model [arg] to determine the layout of C++
adamc@1133 5648 # classes, name mangling, and exception handling.
adamc@1133 5649 # Darwin uses the -arch flag to determine output architecture.
adam@1459 5650 -model|-arch|-isysroot|--sysroot)
adam@1459 5651 func_append compiler_flags " $arg"
adamc@1133 5652 func_append compile_command " $arg"
adamc@1133 5653 func_append finalize_command " $arg"
adamc@1133 5654 prev=xcompiler
adamc@1133 5655 continue
adamc@1133 5656 ;;
adamc@1133 5657
adam@1599 5658 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
adam@1599 5659 |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
adam@1459 5660 func_append compiler_flags " $arg"
adamc@1133 5661 func_append compile_command " $arg"
adamc@1133 5662 func_append finalize_command " $arg"
adamc@1133 5663 case "$new_inherited_linker_flags " in
adamc@1133 5664 *" $arg "*) ;;
adam@1459 5665 * ) func_append new_inherited_linker_flags " $arg" ;;
adamc@1133 5666 esac
adamc@1133 5667 continue
adamc@1133 5668 ;;
adamc@1133 5669
adamc@1133 5670 -multi_module)
adamc@1133 5671 single_module="${wl}-multi_module"
adamc@1133 5672 continue
adamc@1133 5673 ;;
adamc@1133 5674
adamc@1133 5675 -no-fast-install)
adamc@1133 5676 fast_install=no
adamc@1133 5677 continue
adamc@1133 5678 ;;
adamc@1133 5679
adamc@1133 5680 -no-install)
adamc@1133 5681 case $host in
adamc@1133 5682 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
adamc@1133 5683 # The PATH hackery in wrapper scripts is required on Windows
adamc@1133 5684 # and Darwin in order for the loader to find any dlls it needs.
adamc@1133 5685 func_warning "\`-no-install' is ignored for $host"
adamc@1133 5686 func_warning "assuming \`-no-fast-install' instead"
adamc@1133 5687 fast_install=no
adamc@1133 5688 ;;
adamc@1133 5689 *) no_install=yes ;;
adamc@1133 5690 esac
adamc@1133 5691 continue
adamc@1133 5692 ;;
adamc@1133 5693
adamc@1133 5694 -no-undefined)
adamc@1133 5695 allow_undefined=no
adamc@1133 5696 continue
adamc@1133 5697 ;;
adamc@1133 5698
adamc@1133 5699 -objectlist)
adamc@1133 5700 prev=objectlist
adamc@1133 5701 continue
adamc@1133 5702 ;;
adamc@1133 5703
adamc@1133 5704 -o) prev=output ;;
adamc@1133 5705
adamc@1133 5706 -precious-files-regex)
adamc@1133 5707 prev=precious_regex
adamc@1133 5708 continue
adamc@1133 5709 ;;
adamc@1133 5710
adamc@1133 5711 -release)
adamc@1133 5712 prev=release
adamc@1133 5713 continue
adamc@1133 5714 ;;
adamc@1133 5715
adamc@1133 5716 -rpath)
adamc@1133 5717 prev=rpath
adamc@1133 5718 continue
adamc@1133 5719 ;;
adamc@1133 5720
adamc@1133 5721 -R)
adamc@1133 5722 prev=xrpath
adamc@1133 5723 continue
adamc@1133 5724 ;;
adamc@1133 5725
adamc@1133 5726 -R*)
adamc@1133 5727 func_stripname '-R' '' "$arg"
adamc@1133 5728 dir=$func_stripname_result
adamc@1133 5729 # We need an absolute path.
adamc@1133 5730 case $dir in
adamc@1133 5731 [\\/]* | [A-Za-z]:[\\/]*) ;;
adam@1459 5732 =*)
adam@1459 5733 func_stripname '=' '' "$dir"
adam@1459 5734 dir=$lt_sysroot$func_stripname_result
adam@1459 5735 ;;
adamc@1133 5736 *)
adamc@1133 5737 func_fatal_error "only absolute run-paths are allowed"
adamc@1133 5738 ;;
adamc@1133 5739 esac
adamc@1133 5740 case "$xrpath " in
adamc@1133 5741 *" $dir "*) ;;
adam@1459 5742 *) func_append xrpath " $dir" ;;
adamc@1133 5743 esac
adamc@1133 5744 continue
adamc@1133 5745 ;;
adamc@1133 5746
adamc@1133 5747 -shared)
adamc@1133 5748 # The effects of -shared are defined in a previous loop.
adamc@1133 5749 continue
adamc@1133 5750 ;;
adamc@1133 5751
adamc@1133 5752 -shrext)
adamc@1133 5753 prev=shrext
adamc@1133 5754 continue
adamc@1133 5755 ;;
adamc@1133 5756
adamc@1133 5757 -static | -static-libtool-libs)
adamc@1133 5758 # The effects of -static are defined in a previous loop.
adamc@1133 5759 # We used to do the same as -all-static on platforms that
adamc@1133 5760 # didn't have a PIC flag, but the assumption that the effects
adamc@1133 5761 # would be equivalent was wrong. It would break on at least
adamc@1133 5762 # Digital Unix and AIX.
adamc@1133 5763 continue
adamc@1133 5764 ;;
adamc@1133 5765
adamc@1133 5766 -thread-safe)
adamc@1133 5767 thread_safe=yes
adamc@1133 5768 continue
adamc@1133 5769 ;;
adamc@1133 5770
adamc@1133 5771 -version-info)
adamc@1133 5772 prev=vinfo
adamc@1133 5773 continue
adamc@1133 5774 ;;
adamc@1133 5775
adamc@1133 5776 -version-number)
adamc@1133 5777 prev=vinfo
adamc@1133 5778 vinfo_number=yes
adamc@1133 5779 continue
adamc@1133 5780 ;;
adamc@1133 5781
adamc@1133 5782 -weak)
adamc@1133 5783 prev=weak
adamc@1133 5784 continue
adamc@1133 5785 ;;
adamc@1133 5786
adamc@1133 5787 -Wc,*)
adamc@1133 5788 func_stripname '-Wc,' '' "$arg"
adamc@1133 5789 args=$func_stripname_result
adamc@1133 5790 arg=
adamc@1133 5791 save_ifs="$IFS"; IFS=','
adamc@1133 5792 for flag in $args; do
adamc@1133 5793 IFS="$save_ifs"
adamc@1133 5794 func_quote_for_eval "$flag"
adam@1459 5795 func_append arg " $func_quote_for_eval_result"
adam@1459 5796 func_append compiler_flags " $func_quote_for_eval_result"
adamc@1133 5797 done
adamc@1133 5798 IFS="$save_ifs"
adamc@1133 5799 func_stripname ' ' '' "$arg"
adamc@1133 5800 arg=$func_stripname_result
adamc@1133 5801 ;;
adamc@1133 5802
adamc@1133 5803 -Wl,*)
adamc@1133 5804 func_stripname '-Wl,' '' "$arg"
adamc@1133 5805 args=$func_stripname_result
adamc@1133 5806 arg=
adamc@1133 5807 save_ifs="$IFS"; IFS=','
adamc@1133 5808 for flag in $args; do
adamc@1133 5809 IFS="$save_ifs"
adamc@1133 5810 func_quote_for_eval "$flag"
adam@1459 5811 func_append arg " $wl$func_quote_for_eval_result"
adam@1459 5812 func_append compiler_flags " $wl$func_quote_for_eval_result"
adam@1459 5813 func_append linker_flags " $func_quote_for_eval_result"
adamc@1133 5814 done
adamc@1133 5815 IFS="$save_ifs"
adamc@1133 5816 func_stripname ' ' '' "$arg"
adamc@1133 5817 arg=$func_stripname_result
adamc@1133 5818 ;;
adamc@1133 5819
adamc@1133 5820 -Xcompiler)
adamc@1133 5821 prev=xcompiler
adamc@1133 5822 continue
adamc@1133 5823 ;;
adamc@1133 5824
adamc@1133 5825 -Xlinker)
adamc@1133 5826 prev=xlinker
adamc@1133 5827 continue
adamc@1133 5828 ;;
adamc@1133 5829
adamc@1133 5830 -XCClinker)
adamc@1133 5831 prev=xcclinker
adamc@1133 5832 continue
adamc@1133 5833 ;;
adamc@1133 5834
adamc@1133 5835 # -msg_* for osf cc
adamc@1133 5836 -msg_*)
adamc@1133 5837 func_quote_for_eval "$arg"
adamc@1133 5838 arg="$func_quote_for_eval_result"
adamc@1133 5839 ;;
adamc@1133 5840
adam@1459 5841 # Flags to be passed through unchanged, with rationale:
adam@1459 5842 # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
adam@1459 5843 # -r[0-9][0-9]* specify processor for the SGI compiler
adam@1459 5844 # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
adam@1459 5845 # +DA*, +DD* enable 64-bit mode for the HP compiler
adam@1459 5846 # -q* compiler args for the IBM compiler
adam@1459 5847 # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
adam@1459 5848 # -F/path path to uninstalled frameworks, gcc on darwin
adam@1459 5849 # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
adam@1459 5850 # @file GCC response files
adam@1459 5851 # -tp=* Portland pgcc target processor selection
adam@1459 5852 # --sysroot=* for sysroot support
adam@1459 5853 # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
adamc@1133 5854 -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
adam@1459 5855 -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
adam@1459 5856 -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
adamc@1133 5857 func_quote_for_eval "$arg"
adamc@1133 5858 arg="$func_quote_for_eval_result"
adamc@1133 5859 func_append compile_command " $arg"
adamc@1133 5860 func_append finalize_command " $arg"
adam@1459 5861 func_append compiler_flags " $arg"
adamc@1133 5862 continue
adamc@1133 5863 ;;
adamc@1133 5864
adamc@1133 5865 # Some other compiler flag.
adamc@1133 5866 -* | +*)
adamc@1133 5867 func_quote_for_eval "$arg"
adamc@1133 5868 arg="$func_quote_for_eval_result"
adamc@1133 5869 ;;
adamc@1133 5870
adamc@1133 5871 *.$objext)
adamc@1133 5872 # A standard object.
adam@1459 5873 func_append objs " $arg"
adamc@1133 5874 ;;
adamc@1133 5875
adamc@1133 5876 *.lo)
adamc@1133 5877 # A libtool-controlled object.
adamc@1133 5878
adamc@1133 5879 # Check to see that this really is a libtool object.
adamc@1133 5880 if func_lalib_unsafe_p "$arg"; then
adamc@1133 5881 pic_object=
adamc@1133 5882 non_pic_object=
adamc@1133 5883
adamc@1133 5884 # Read the .lo file
adamc@1133 5885 func_source "$arg"
adamc@1133 5886
adamc@1133 5887 if test -z "$pic_object" ||
adamc@1133 5888 test -z "$non_pic_object" ||
adamc@1133 5889 test "$pic_object" = none &&
adamc@1133 5890 test "$non_pic_object" = none; then
adamc@1133 5891 func_fatal_error "cannot find name of object for \`$arg'"
adamc@1133 5892 fi
adamc@1133 5893
adamc@1133 5894 # Extract subdirectory from the argument.
adamc@1133 5895 func_dirname "$arg" "/" ""
adamc@1133 5896 xdir="$func_dirname_result"
adamc@1133 5897
adamc@1133 5898 if test "$pic_object" != none; then
adamc@1133 5899 # Prepend the subdirectory the object is found in.
adamc@1133 5900 pic_object="$xdir$pic_object"
adamc@1133 5901
adamc@1133 5902 if test "$prev" = dlfiles; then
adamc@1133 5903 if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
adam@1459 5904 func_append dlfiles " $pic_object"
adamc@1133 5905 prev=
adamc@1133 5906 continue
adamc@1133 5907 else
adamc@1133 5908 # If libtool objects are unsupported, then we need to preload.
adamc@1133 5909 prev=dlprefiles
adamc@1133 5910 fi
adamc@1133 5911 fi
adamc@1133 5912
adamc@1133 5913 # CHECK ME: I think I busted this. -Ossama
adamc@1133 5914 if test "$prev" = dlprefiles; then
adamc@1133 5915 # Preload the old-style object.
adam@1459 5916 func_append dlprefiles " $pic_object"
adamc@1133 5917 prev=
adamc@1133 5918 fi
adamc@1133 5919
adamc@1133 5920 # A PIC object.
adamc@1133 5921 func_append libobjs " $pic_object"
adamc@1133 5922 arg="$pic_object"
adamc@1133 5923 fi
adamc@1133 5924
adamc@1133 5925 # Non-PIC object.
adamc@1133 5926 if test "$non_pic_object" != none; then
adamc@1133 5927 # Prepend the subdirectory the object is found in.
adamc@1133 5928 non_pic_object="$xdir$non_pic_object"
adamc@1133 5929
adamc@1133 5930 # A standard non-PIC object
adamc@1133 5931 func_append non_pic_objects " $non_pic_object"
adamc@1133 5932 if test -z "$pic_object" || test "$pic_object" = none ; then
adamc@1133 5933 arg="$non_pic_object"
adamc@1133 5934 fi
adamc@1133 5935 else
adamc@1133 5936 # If the PIC object exists, use it instead.
adamc@1133 5937 # $xdir was prepended to $pic_object above.
adamc@1133 5938 non_pic_object="$pic_object"
adamc@1133 5939 func_append non_pic_objects " $non_pic_object"
adamc@1133 5940 fi
adamc@1133 5941 else
adamc@1133 5942 # Only an error if not doing a dry-run.
adamc@1133 5943 if $opt_dry_run; then
adamc@1133 5944 # Extract subdirectory from the argument.
adamc@1133 5945 func_dirname "$arg" "/" ""
adamc@1133 5946 xdir="$func_dirname_result"
adamc@1133 5947
adamc@1133 5948 func_lo2o "$arg"
adamc@1133 5949 pic_object=$xdir$objdir/$func_lo2o_result
adamc@1133 5950 non_pic_object=$xdir$func_lo2o_result
adamc@1133 5951 func_append libobjs " $pic_object"
adamc@1133 5952 func_append non_pic_objects " $non_pic_object"
adamc@1133 5953 else
adamc@1133 5954 func_fatal_error "\`$arg' is not a valid libtool object"
adamc@1133 5955 fi
adamc@1133 5956 fi
adamc@1133 5957 ;;
adamc@1133 5958
adamc@1133 5959 *.$libext)
adamc@1133 5960 # An archive.
adam@1459 5961 func_append deplibs " $arg"
adam@1459 5962 func_append old_deplibs " $arg"
adamc@1133 5963 continue
adamc@1133 5964 ;;
adamc@1133 5965
adamc@1133 5966 *.la)
adamc@1133 5967 # A libtool-controlled library.
adamc@1133 5968
adam@1459 5969 func_resolve_sysroot "$arg"
adamc@1133 5970 if test "$prev" = dlfiles; then
adamc@1133 5971 # This library was specified with -dlopen.
adam@1459 5972 func_append dlfiles " $func_resolve_sysroot_result"
adamc@1133 5973 prev=
adamc@1133 5974 elif test "$prev" = dlprefiles; then
adamc@1133 5975 # The library was specified with -dlpreopen.
adam@1459 5976 func_append dlprefiles " $func_resolve_sysroot_result"
adamc@1133 5977 prev=
adamc@1133 5978 else
adam@1459 5979 func_append deplibs " $func_resolve_sysroot_result"
adamc@1133 5980 fi
adamc@1133 5981 continue
adamc@1133 5982 ;;
adamc@1133 5983
adamc@1133 5984 # Some other compiler argument.
adamc@1133 5985 *)
adamc@1133 5986 # Unknown arguments in both finalize_command and compile_command need
adamc@1133 5987 # to be aesthetically quoted because they are evaled later.
adamc@1133 5988 func_quote_for_eval "$arg"
adamc@1133 5989 arg="$func_quote_for_eval_result"
adamc@1133 5990 ;;
adamc@1133 5991 esac # arg
adamc@1133 5992
adamc@1133 5993 # Now actually substitute the argument into the commands.
adamc@1133 5994 if test -n "$arg"; then
adamc@1133 5995 func_append compile_command " $arg"
adamc@1133 5996 func_append finalize_command " $arg"
adamc@1133 5997 fi
adamc@1133 5998 done # argument parsing loop
adamc@1133 5999
adamc@1133 6000 test -n "$prev" && \
adamc@1133 6001 func_fatal_help "the \`$prevarg' option requires an argument"
adamc@1133 6002
adamc@1133 6003 if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
adamc@1133 6004 eval arg=\"$export_dynamic_flag_spec\"
adamc@1133 6005 func_append compile_command " $arg"
adamc@1133 6006 func_append finalize_command " $arg"
adamc@1133 6007 fi
adamc@1133 6008
adamc@1133 6009 oldlibs=
adamc@1133 6010 # calculate the name of the file, without its directory
adamc@1133 6011 func_basename "$output"
adamc@1133 6012 outputname="$func_basename_result"
adamc@1133 6013 libobjs_save="$libobjs"
adamc@1133 6014
adamc@1133 6015 if test -n "$shlibpath_var"; then
adamc@1133 6016 # get the directories listed in $shlibpath_var
adam@1459 6017 eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
adamc@1133 6018 else
adamc@1133 6019 shlib_search_path=
adamc@1133 6020 fi
adamc@1133 6021 eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
adamc@1133 6022 eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
adamc@1133 6023
adamc@1133 6024 func_dirname "$output" "/" ""
adamc@1133 6025 output_objdir="$func_dirname_result$objdir"
adam@1459 6026 func_to_tool_file "$output_objdir/"
adam@1459 6027 tool_output_objdir=$func_to_tool_file_result
adamc@1133 6028 # Create the object directory.
adamc@1133 6029 func_mkdir_p "$output_objdir"
adamc@1133 6030
adamc@1133 6031 # Determine the type of output
adamc@1133 6032 case $output in
adamc@1133 6033 "")
adamc@1133 6034 func_fatal_help "you must specify an output file"
adamc@1133 6035 ;;
adamc@1133 6036 *.$libext) linkmode=oldlib ;;
adamc@1133 6037 *.lo | *.$objext) linkmode=obj ;;
adamc@1133 6038 *.la) linkmode=lib ;;
adamc@1133 6039 *) linkmode=prog ;; # Anything else should be a program.
adamc@1133 6040 esac
adamc@1133 6041
adamc@1133 6042 specialdeplibs=
adamc@1133 6043
adamc@1133 6044 libs=
adamc@1133 6045 # Find all interdependent deplibs by searching for libraries
adamc@1133 6046 # that are linked more than once (e.g. -la -lb -la)
adamc@1133 6047 for deplib in $deplibs; do
adam@1459 6048 if $opt_preserve_dup_deps ; then
adamc@1133 6049 case "$libs " in
adam@1459 6050 *" $deplib "*) func_append specialdeplibs " $deplib" ;;
adamc@1133 6051 esac
adamc@1133 6052 fi
adam@1459 6053 func_append libs " $deplib"
adamc@1133 6054 done
adamc@1133 6055
adamc@1133 6056 if test "$linkmode" = lib; then
adamc@1133 6057 libs="$predeps $libs $compiler_lib_search_path $postdeps"
adamc@1133 6058
adamc@1133 6059 # Compute libraries that are listed more than once in $predeps
adamc@1133 6060 # $postdeps and mark them as special (i.e., whose duplicates are
adamc@1133 6061 # not to be eliminated).
adamc@1133 6062 pre_post_deps=
adamc@1133 6063 if $opt_duplicate_compiler_generated_deps; then
adamc@1133 6064 for pre_post_dep in $predeps $postdeps; do
adamc@1133 6065 case "$pre_post_deps " in
adam@1459 6066 *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
adamc@1133 6067 esac
adam@1459 6068 func_append pre_post_deps " $pre_post_dep"
adamc@1133 6069 done
adamc@1133 6070 fi
adamc@1133 6071 pre_post_deps=
adamc@1133 6072 fi
adamc@1133 6073
adamc@1133 6074 deplibs=
adamc@1133 6075 newdependency_libs=
adamc@1133 6076 newlib_search_path=
adamc@1133 6077 need_relink=no # whether we're linking any uninstalled libtool libraries
adamc@1133 6078 notinst_deplibs= # not-installed libtool libraries
adamc@1133 6079 notinst_path= # paths that contain not-installed libtool libraries
adamc@1133 6080
adamc@1133 6081 case $linkmode in
adamc@1133 6082 lib)
adamc@1133 6083 passes="conv dlpreopen link"
adamc@1133 6084 for file in $dlfiles $dlprefiles; do
adamc@1133 6085 case $file in
adamc@1133 6086 *.la) ;;
adamc@1133 6087 *)
adamc@1133 6088 func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
adamc@1133 6089 ;;
adamc@1133 6090 esac
adamc@1133 6091 done
adamc@1133 6092 ;;
adamc@1133 6093 prog)
adamc@1133 6094 compile_deplibs=
adamc@1133 6095 finalize_deplibs=
adamc@1133 6096 alldeplibs=no
adamc@1133 6097 newdlfiles=
adamc@1133 6098 newdlprefiles=
adamc@1133 6099 passes="conv scan dlopen dlpreopen link"
adamc@1133 6100 ;;
adamc@1133 6101 *) passes="conv"
adamc@1133 6102 ;;
adamc@1133 6103 esac
adamc@1133 6104
adamc@1133 6105 for pass in $passes; do
adamc@1133 6106 # The preopen pass in lib mode reverses $deplibs; put it back here
adamc@1133 6107 # so that -L comes before libs that need it for instance...
adamc@1133 6108 if test "$linkmode,$pass" = "lib,link"; then
adamc@1133 6109 ## FIXME: Find the place where the list is rebuilt in the wrong
adamc@1133 6110 ## order, and fix it there properly
adamc@1133 6111 tmp_deplibs=
adamc@1133 6112 for deplib in $deplibs; do
adamc@1133 6113 tmp_deplibs="$deplib $tmp_deplibs"
adamc@1133 6114 done
adamc@1133 6115 deplibs="$tmp_deplibs"
adamc@1133 6116 fi
adamc@1133 6117
adamc@1133 6118 if test "$linkmode,$pass" = "lib,link" ||
adamc@1133 6119 test "$linkmode,$pass" = "prog,scan"; then
adamc@1133 6120 libs="$deplibs"
adamc@1133 6121 deplibs=
adamc@1133 6122 fi
adamc@1133 6123 if test "$linkmode" = prog; then
adamc@1133 6124 case $pass in
adamc@1133 6125 dlopen) libs="$dlfiles" ;;
adamc@1133 6126 dlpreopen) libs="$dlprefiles" ;;
adamc@1133 6127 link)
adamc@1133 6128 libs="$deplibs %DEPLIBS%"
adamc@1133 6129 test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
adamc@1133 6130 ;;
adamc@1133 6131 esac
adamc@1133 6132 fi
adamc@1133 6133 if test "$linkmode,$pass" = "lib,dlpreopen"; then
adamc@1133 6134 # Collect and forward deplibs of preopened libtool libs
adamc@1133 6135 for lib in $dlprefiles; do
adamc@1133 6136 # Ignore non-libtool-libs
adamc@1133 6137 dependency_libs=
adam@1459 6138 func_resolve_sysroot "$lib"
adamc@1133 6139 case $lib in
adam@1459 6140 *.la) func_source "$func_resolve_sysroot_result" ;;
adamc@1133 6141 esac
adamc@1133 6142
adamc@1133 6143 # Collect preopened libtool deplibs, except any this library
adamc@1133 6144 # has declared as weak libs
adamc@1133 6145 for deplib in $dependency_libs; do
adam@1459 6146 func_basename "$deplib"
adam@1459 6147 deplib_base=$func_basename_result
adamc@1133 6148 case " $weak_libs " in
adamc@1133 6149 *" $deplib_base "*) ;;
adam@1459 6150 *) func_append deplibs " $deplib" ;;
adamc@1133 6151 esac
adamc@1133 6152 done
adamc@1133 6153 done
adamc@1133 6154 libs="$dlprefiles"
adamc@1133 6155 fi
adamc@1133 6156 if test "$pass" = dlopen; then
adamc@1133 6157 # Collect dlpreopened libraries
adamc@1133 6158 save_deplibs="$deplibs"
adamc@1133 6159 deplibs=
adamc@1133 6160 fi
adamc@1133 6161
adamc@1133 6162 for deplib in $libs; do
adamc@1133 6163 lib=
adamc@1133 6164 found=no
adamc@1133 6165 case $deplib in
adam@1599 6166 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
adam@1599 6167 |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
adamc@1133 6168 if test "$linkmode,$pass" = "prog,link"; then
adamc@1133 6169 compile_deplibs="$deplib $compile_deplibs"
adamc@1133 6170 finalize_deplibs="$deplib $finalize_deplibs"
adamc@1133 6171 else
adam@1459 6172 func_append compiler_flags " $deplib"
adamc@1133 6173 if test "$linkmode" = lib ; then
adamc@1133 6174 case "$new_inherited_linker_flags " in
adamc@1133 6175 *" $deplib "*) ;;
adam@1459 6176 * ) func_append new_inherited_linker_flags " $deplib" ;;
adamc@1133 6177 esac
adamc@1133 6178 fi
adamc@1133 6179 fi
adamc@1133 6180 continue
adamc@1133 6181 ;;
adamc@1133 6182 -l*)
adamc@1133 6183 if test "$linkmode" != lib && test "$linkmode" != prog; then
adamc@1133 6184 func_warning "\`-l' is ignored for archives/objects"
adamc@1133 6185 continue
adamc@1133 6186 fi
adamc@1133 6187 func_stripname '-l' '' "$deplib"
adamc@1133 6188 name=$func_stripname_result
adamc@1133 6189 if test "$linkmode" = lib; then
adamc@1133 6190 searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
adamc@1133 6191 else
adamc@1133 6192 searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
adamc@1133 6193 fi
adamc@1133 6194 for searchdir in $searchdirs; do
adamc@1133 6195 for search_ext in .la $std_shrext .so .a; do
adamc@1133 6196 # Search the libtool library
adamc@1133 6197 lib="$searchdir/lib${name}${search_ext}"
adamc@1133 6198 if test -f "$lib"; then
adamc@1133 6199 if test "$search_ext" = ".la"; then
adamc@1133 6200 found=yes
adamc@1133 6201 else
adamc@1133 6202 found=no
adamc@1133 6203 fi
adamc@1133 6204 break 2
adamc@1133 6205 fi
adamc@1133 6206 done
adamc@1133 6207 done
adamc@1133 6208 if test "$found" != yes; then
adamc@1133 6209 # deplib doesn't seem to be a libtool library
adamc@1133 6210 if test "$linkmode,$pass" = "prog,link"; then
adamc@1133 6211 compile_deplibs="$deplib $compile_deplibs"
adamc@1133 6212 finalize_deplibs="$deplib $finalize_deplibs"
adamc@1133 6213 else
adamc@1133 6214 deplibs="$deplib $deplibs"
adamc@1133 6215 test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
adamc@1133 6216 fi
adamc@1133 6217 continue
adamc@1133 6218 else # deplib is a libtool library
adamc@1133 6219 # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
adamc@1133 6220 # We need to do some special things here, and not later.
adamc@1133 6221 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
adamc@1133 6222 case " $predeps $postdeps " in
adamc@1133 6223 *" $deplib "*)
adamc@1133 6224 if func_lalib_p "$lib"; then
adamc@1133 6225 library_names=
adamc@1133 6226 old_library=
adamc@1133 6227 func_source "$lib"
adamc@1133 6228 for l in $old_library $library_names; do
adamc@1133 6229 ll="$l"
adamc@1133 6230 done
adamc@1133 6231 if test "X$ll" = "X$old_library" ; then # only static version available
adamc@1133 6232 found=no
adamc@1133 6233 func_dirname "$lib" "" "."
adamc@1133 6234 ladir="$func_dirname_result"
adamc@1133 6235 lib=$ladir/$old_library
adamc@1133 6236 if test "$linkmode,$pass" = "prog,link"; then
adamc@1133 6237 compile_deplibs="$deplib $compile_deplibs"
adamc@1133 6238 finalize_deplibs="$deplib $finalize_deplibs"
adamc@1133 6239 else
adamc@1133 6240 deplibs="$deplib $deplibs"
adamc@1133 6241 test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
adamc@1133 6242 fi
adamc@1133 6243 continue
adamc@1133 6244 fi
adamc@1133 6245 fi
adamc@1133 6246 ;;
adamc@1133 6247 *) ;;
adamc@1133 6248 esac
adamc@1133 6249 fi
adamc@1133 6250 fi
adamc@1133 6251 ;; # -l
adamc@1133 6252 *.ltframework)
adamc@1133 6253 if test "$linkmode,$pass" = "prog,link"; then
adamc@1133 6254 compile_deplibs="$deplib $compile_deplibs"
adamc@1133 6255 finalize_deplibs="$deplib $finalize_deplibs"
adamc@1133 6256 else
adamc@1133 6257 deplibs="$deplib $deplibs"
adamc@1133 6258 if test "$linkmode" = lib ; then
adamc@1133 6259 case "$new_inherited_linker_flags " in
adamc@1133 6260 *" $deplib "*) ;;
adam@1459 6261 * ) func_append new_inherited_linker_flags " $deplib" ;;
adamc@1133 6262 esac
adamc@1133 6263 fi
adamc@1133 6264 fi
adamc@1133 6265 continue
adamc@1133 6266 ;;
adamc@1133 6267 -L*)
adamc@1133 6268 case $linkmode in
adamc@1133 6269 lib)
adamc@1133 6270 deplibs="$deplib $deplibs"
adamc@1133 6271 test "$pass" = conv && continue
adamc@1133 6272 newdependency_libs="$deplib $newdependency_libs"
adamc@1133 6273 func_stripname '-L' '' "$deplib"
adam@1459 6274 func_resolve_sysroot "$func_stripname_result"
adam@1459 6275 func_append newlib_search_path " $func_resolve_sysroot_result"
adamc@1133 6276 ;;
adamc@1133 6277 prog)
adamc@1133 6278 if test "$pass" = conv; then
adamc@1133 6279 deplibs="$deplib $deplibs"
adamc@1133 6280 continue
adamc@1133 6281 fi
adamc@1133 6282 if test "$pass" = scan; then
adamc@1133 6283 deplibs="$deplib $deplibs"
adamc@1133 6284 else
adamc@1133 6285 compile_deplibs="$deplib $compile_deplibs"
adamc@1133 6286 finalize_deplibs="$deplib $finalize_deplibs"
adamc@1133 6287 fi
adamc@1133 6288 func_stripname '-L' '' "$deplib"
adam@1459 6289 func_resolve_sysroot "$func_stripname_result"
adam@1459 6290 func_append newlib_search_path " $func_resolve_sysroot_result"
adamc@1133 6291 ;;
adamc@1133 6292 *)
adamc@1133 6293 func_warning "\`-L' is ignored for archives/objects"
adamc@1133 6294 ;;
adamc@1133 6295 esac # linkmode
adamc@1133 6296 continue
adamc@1133 6297 ;; # -L
adamc@1133 6298 -R*)
adamc@1133 6299 if test "$pass" = link; then
adamc@1133 6300 func_stripname '-R' '' "$deplib"
adam@1459 6301 func_resolve_sysroot "$func_stripname_result"
adam@1459 6302 dir=$func_resolve_sysroot_result
adamc@1133 6303 # Make sure the xrpath contains only unique directories.
adamc@1133 6304 case "$xrpath " in
adamc@1133 6305 *" $dir "*) ;;
adam@1459 6306 *) func_append xrpath " $dir" ;;
adamc@1133 6307 esac
adamc@1133 6308 fi
adamc@1133 6309 deplibs="$deplib $deplibs"
adamc@1133 6310 continue
adamc@1133 6311 ;;
adam@1459 6312 *.la)
adam@1459 6313 func_resolve_sysroot "$deplib"
adam@1459 6314 lib=$func_resolve_sysroot_result
adam@1459 6315 ;;
adamc@1133 6316 *.$libext)
adamc@1133 6317 if test "$pass" = conv; then
adamc@1133 6318 deplibs="$deplib $deplibs"
adamc@1133 6319 continue
adamc@1133 6320 fi
adamc@1133 6321 case $linkmode in
adamc@1133 6322 lib)
adamc@1133 6323 # Linking convenience modules into shared libraries is allowed,
adamc@1133 6324 # but linking other static libraries is non-portable.
adamc@1133 6325 case " $dlpreconveniencelibs " in
adamc@1133 6326 *" $deplib "*) ;;
adamc@1133 6327 *)
adamc@1133 6328 valid_a_lib=no
adamc@1133 6329 case $deplibs_check_method in
adamc@1133 6330 match_pattern*)
adamc@1133 6331 set dummy $deplibs_check_method; shift
adamc@1133 6332 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
adam@1459 6333 if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
adamc@1133 6334 | $EGREP "$match_pattern_regex" > /dev/null; then
adamc@1133 6335 valid_a_lib=yes
adamc@1133 6336 fi
adamc@1133 6337 ;;
adamc@1133 6338 pass_all)
adamc@1133 6339 valid_a_lib=yes
adamc@1133 6340 ;;
adamc@1133 6341 esac
adamc@1133 6342 if test "$valid_a_lib" != yes; then
adam@1459 6343 echo
adamc@1133 6344 $ECHO "*** Warning: Trying to link with static lib archive $deplib."
adam@1459 6345 echo "*** I have the capability to make that library automatically link in when"
adam@1459 6346 echo "*** you link to this library. But I can only do this if you have a"
adam@1459 6347 echo "*** shared version of the library, which you do not appear to have"
adam@1459 6348 echo "*** because the file extensions .$libext of this argument makes me believe"
adam@1459 6349 echo "*** that it is just a static archive that I should not use here."
adamc@1133 6350 else
adam@1459 6351 echo
adamc@1133 6352 $ECHO "*** Warning: Linking the shared library $output against the"
adamc@1133 6353 $ECHO "*** static library $deplib is not portable!"
adamc@1133 6354 deplibs="$deplib $deplibs"
adamc@1133 6355 fi
adamc@1133 6356 ;;
adamc@1133 6357 esac
adamc@1133 6358 continue
adamc@1133 6359 ;;
adamc@1133 6360 prog)
adamc@1133 6361 if test "$pass" != link; then
adamc@1133 6362 deplibs="$deplib $deplibs"
adamc@1133 6363 else
adamc@1133 6364 compile_deplibs="$deplib $compile_deplibs"
adamc@1133 6365 finalize_deplibs="$deplib $finalize_deplibs"
adamc@1133 6366 fi
adamc@1133 6367 continue
adamc@1133 6368 ;;
adamc@1133 6369 esac # linkmode
adamc@1133 6370 ;; # *.$libext
adamc@1133 6371 *.lo | *.$objext)
adamc@1133 6372 if test "$pass" = conv; then
adamc@1133 6373 deplibs="$deplib $deplibs"
adamc@1133 6374 elif test "$linkmode" = prog; then
adamc@1133 6375 if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
adamc@1133 6376 # If there is no dlopen support or we're linking statically,
adamc@1133 6377 # we need to preload.
adam@1459 6378 func_append newdlprefiles " $deplib"
adamc@1133 6379 compile_deplibs="$deplib $compile_deplibs"
adamc@1133 6380 finalize_deplibs="$deplib $finalize_deplibs"
adamc@1133 6381 else
adam@1459 6382 func_append newdlfiles " $deplib"
adamc@1133 6383 fi
adamc@1133 6384 fi
adamc@1133 6385 continue
adamc@1133 6386 ;;
adamc@1133 6387 %DEPLIBS%)
adamc@1133 6388 alldeplibs=yes
adamc@1133 6389 continue
adamc@1133 6390 ;;
adamc@1133 6391 esac # case $deplib
adamc@1133 6392
adamc@1133 6393 if test "$found" = yes || test -f "$lib"; then :
adamc@1133 6394 else
adamc@1133 6395 func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
adamc@1133 6396 fi
adamc@1133 6397
adamc@1133 6398 # Check to see that this really is a libtool archive.
adamc@1133 6399 func_lalib_unsafe_p "$lib" \
adamc@1133 6400 || func_fatal_error "\`$lib' is not a valid libtool archive"
adamc@1133 6401
adamc@1133 6402 func_dirname "$lib" "" "."
adamc@1133 6403 ladir="$func_dirname_result"
adamc@1133 6404
adamc@1133 6405 dlname=
adamc@1133 6406 dlopen=
adamc@1133 6407 dlpreopen=
adamc@1133 6408 libdir=
adamc@1133 6409 library_names=
adamc@1133 6410 old_library=
adamc@1133 6411 inherited_linker_flags=
adamc@1133 6412 # If the library was installed with an old release of libtool,
adamc@1133 6413 # it will not redefine variables installed, or shouldnotlink
adamc@1133 6414 installed=yes
adamc@1133 6415 shouldnotlink=no
adamc@1133 6416 avoidtemprpath=
adamc@1133 6417
adamc@1133 6418
adamc@1133 6419 # Read the .la file
adamc@1133 6420 func_source "$lib"
adamc@1133 6421
adamc@1133 6422 # Convert "-framework foo" to "foo.ltframework"
adamc@1133 6423 if test -n "$inherited_linker_flags"; then
adam@1459 6424 tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
adamc@1133 6425 for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
adamc@1133 6426 case " $new_inherited_linker_flags " in
adamc@1133 6427 *" $tmp_inherited_linker_flag "*) ;;
adam@1459 6428 *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
adamc@1133 6429 esac
adamc@1133 6430 done
adamc@1133 6431 fi
adam@1459 6432 dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
adamc@1133 6433 if test "$linkmode,$pass" = "lib,link" ||
adamc@1133 6434 test "$linkmode,$pass" = "prog,scan" ||
adamc@1133 6435 { test "$linkmode" != prog && test "$linkmode" != lib; }; then
adam@1459 6436 test -n "$dlopen" && func_append dlfiles " $dlopen"
adam@1459 6437 test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
adamc@1133 6438 fi
adamc@1133 6439
adamc@1133 6440 if test "$pass" = conv; then
adamc@1133 6441 # Only check for convenience libraries
adamc@1133 6442 deplibs="$lib $deplibs"
adamc@1133 6443 if test -z "$libdir"; then
adamc@1133 6444 if test -z "$old_library"; then
adamc@1133 6445 func_fatal_error "cannot find name of link library for \`$lib'"
adamc@1133 6446 fi
adamc@1133 6447 # It is a libtool convenience library, so add in its objects.
adam@1459 6448 func_append convenience " $ladir/$objdir/$old_library"
adam@1459 6449 func_append old_convenience " $ladir/$objdir/$old_library"
adamc@1133 6450 tmp_libs=
adamc@1133 6451 for deplib in $dependency_libs; do
adamc@1133 6452 deplibs="$deplib $deplibs"
adam@1459 6453 if $opt_preserve_dup_deps ; then
adamc@1133 6454 case "$tmp_libs " in
adam@1459 6455 *" $deplib "*) func_append specialdeplibs " $deplib" ;;
adamc@1133 6456 esac
adamc@1133 6457 fi
adam@1459 6458 func_append tmp_libs " $deplib"
adamc@1133 6459 done
adamc@1133 6460 elif test "$linkmode" != prog && test "$linkmode" != lib; then
adamc@1133 6461 func_fatal_error "\`$lib' is not a convenience library"
adamc@1133 6462 fi
adamc@1133 6463 continue
adamc@1133 6464 fi # $pass = conv
adamc@1133 6465
adamc@1133 6466
adamc@1133 6467 # Get the name of the library we link against.
adamc@1133 6468 linklib=
adam@1459 6469 if test -n "$old_library" &&
adam@1459 6470 { test "$prefer_static_libs" = yes ||
adam@1459 6471 test "$prefer_static_libs,$installed" = "built,no"; }; then
adam@1459 6472 linklib=$old_library
adam@1459 6473 else
adam@1459 6474 for l in $old_library $library_names; do
adam@1459 6475 linklib="$l"
adam@1459 6476 done
adam@1459 6477 fi
adamc@1133 6478 if test -z "$linklib"; then
adamc@1133 6479 func_fatal_error "cannot find name of link library for \`$lib'"
adamc@1133 6480 fi
adamc@1133 6481
adamc@1133 6482 # This library was specified with -dlopen.
adamc@1133 6483 if test "$pass" = dlopen; then
adamc@1133 6484 if test -z "$libdir"; then
adamc@1133 6485 func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
adamc@1133 6486 fi
adamc@1133 6487 if test -z "$dlname" ||
adamc@1133 6488 test "$dlopen_support" != yes ||
adamc@1133 6489 test "$build_libtool_libs" = no; then
adamc@1133 6490 # If there is no dlname, no dlopen support or we're linking
adamc@1133 6491 # statically, we need to preload. We also need to preload any
adamc@1133 6492 # dependent libraries so libltdl's deplib preloader doesn't
adamc@1133 6493 # bomb out in the load deplibs phase.
adam@1459 6494 func_append dlprefiles " $lib $dependency_libs"
adamc@1133 6495 else
adam@1459 6496 func_append newdlfiles " $lib"
adamc@1133 6497 fi
adamc@1133 6498 continue
adamc@1133 6499 fi # $pass = dlopen
adamc@1133 6500
adamc@1133 6501 # We need an absolute path.
adamc@1133 6502 case $ladir in
adamc@1133 6503 [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
adamc@1133 6504 *)
adamc@1133 6505 abs_ladir=`cd "$ladir" && pwd`
adamc@1133 6506 if test -z "$abs_ladir"; then
adamc@1133 6507 func_warning "cannot determine absolute directory name of \`$ladir'"
adamc@1133 6508 func_warning "passing it literally to the linker, although it might fail"
adamc@1133 6509 abs_ladir="$ladir"
adamc@1133 6510 fi
adamc@1133 6511 ;;
adamc@1133 6512 esac
adamc@1133 6513 func_basename "$lib"
adamc@1133 6514 laname="$func_basename_result"
adamc@1133 6515
adamc@1133 6516 # Find the relevant object directory and library name.
adamc@1133 6517 if test "X$installed" = Xyes; then
adam@1459 6518 if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
adamc@1133 6519 func_warning "library \`$lib' was moved."
adamc@1133 6520 dir="$ladir"
adamc@1133 6521 absdir="$abs_ladir"
adamc@1133 6522 libdir="$abs_ladir"
adamc@1133 6523 else
adam@1459 6524 dir="$lt_sysroot$libdir"
adam@1459 6525 absdir="$lt_sysroot$libdir"
adamc@1133 6526 fi
adamc@1133 6527 test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
adamc@1133 6528 else
adamc@1133 6529 if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
adamc@1133 6530 dir="$ladir"
adamc@1133 6531 absdir="$abs_ladir"
adamc@1133 6532 # Remove this search path later
adam@1459 6533 func_append notinst_path " $abs_ladir"
adamc@1133 6534 else
adamc@1133 6535 dir="$ladir/$objdir"
adamc@1133 6536 absdir="$abs_ladir/$objdir"
adamc@1133 6537 # Remove this search path later
adam@1459 6538 func_append notinst_path " $abs_ladir"
adamc@1133 6539 fi
adamc@1133 6540 fi # $installed = yes
adamc@1133 6541 func_stripname 'lib' '.la' "$laname"
adamc@1133 6542 name=$func_stripname_result
adamc@1133 6543
adamc@1133 6544 # This library was specified with -dlpreopen.
adamc@1133 6545 if test "$pass" = dlpreopen; then
adamc@1133 6546 if test -z "$libdir" && test "$linkmode" = prog; then
adamc@1133 6547 func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
adamc@1133 6548 fi
adam@1459 6549 case "$host" in
adam@1459 6550 # special handling for platforms with PE-DLLs.
adam@1459 6551 *cygwin* | *mingw* | *cegcc* )
adam@1459 6552 # Linker will automatically link against shared library if both
adam@1459 6553 # static and shared are present. Therefore, ensure we extract
adam@1459 6554 # symbols from the import library if a shared library is present
adam@1459 6555 # (otherwise, the dlopen module name will be incorrect). We do
adam@1459 6556 # this by putting the import library name into $newdlprefiles.
adam@1459 6557 # We recover the dlopen module name by 'saving' the la file
adam@1459 6558 # name in a special purpose variable, and (later) extracting the
adam@1459 6559 # dlname from the la file.
adam@1459 6560 if test -n "$dlname"; then
adam@1459 6561 func_tr_sh "$dir/$linklib"
adam@1459 6562 eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
adam@1459 6563 func_append newdlprefiles " $dir/$linklib"
adam@1459 6564 else
adam@1459 6565 func_append newdlprefiles " $dir/$old_library"
adam@1459 6566 # Keep a list of preopened convenience libraries to check
adam@1459 6567 # that they are being used correctly in the link pass.
adam@1459 6568 test -z "$libdir" && \
adam@1459 6569 func_append dlpreconveniencelibs " $dir/$old_library"
adam@1459 6570 fi
adam@1459 6571 ;;
adam@1459 6572 * )
adam@1459 6573 # Prefer using a static library (so that no silly _DYNAMIC symbols
adam@1459 6574 # are required to link).
adam@1459 6575 if test -n "$old_library"; then
adam@1459 6576 func_append newdlprefiles " $dir/$old_library"
adam@1459 6577 # Keep a list of preopened convenience libraries to check
adam@1459 6578 # that they are being used correctly in the link pass.
adam@1459 6579 test -z "$libdir" && \
adam@1459 6580 func_append dlpreconveniencelibs " $dir/$old_library"
adam@1459 6581 # Otherwise, use the dlname, so that lt_dlopen finds it.
adam@1459 6582 elif test -n "$dlname"; then
adam@1459 6583 func_append newdlprefiles " $dir/$dlname"
adam@1459 6584 else
adam@1459 6585 func_append newdlprefiles " $dir/$linklib"
adam@1459 6586 fi
adam@1459 6587 ;;
adam@1459 6588 esac
adamc@1133 6589 fi # $pass = dlpreopen
adamc@1133 6590
adamc@1133 6591 if test -z "$libdir"; then
adamc@1133 6592 # Link the convenience library
adamc@1133 6593 if test "$linkmode" = lib; then
adamc@1133 6594 deplibs="$dir/$old_library $deplibs"
adamc@1133 6595 elif test "$linkmode,$pass" = "prog,link"; then
adamc@1133 6596 compile_deplibs="$dir/$old_library $compile_deplibs"
adamc@1133 6597 finalize_deplibs="$dir/$old_library $finalize_deplibs"
adamc@1133 6598 else
adamc@1133 6599 deplibs="$lib $deplibs" # used for prog,scan pass
adamc@1133 6600 fi
adamc@1133 6601 continue
adamc@1133 6602 fi
adamc@1133 6603
adamc@1133 6604
adamc@1133 6605 if test "$linkmode" = prog && test "$pass" != link; then
adam@1459 6606 func_append newlib_search_path " $ladir"
adamc@1133 6607 deplibs="$lib $deplibs"
adamc@1133 6608
adamc@1133 6609 linkalldeplibs=no
adamc@1133 6610 if test "$link_all_deplibs" != no || test -z "$library_names" ||
adamc@1133 6611 test "$build_libtool_libs" = no; then
adamc@1133 6612 linkalldeplibs=yes
adamc@1133 6613 fi
adamc@1133 6614
adamc@1133 6615 tmp_libs=
adamc@1133 6616 for deplib in $dependency_libs; do
adamc@1133 6617 case $deplib in
adamc@1133 6618 -L*) func_stripname '-L' '' "$deplib"
adam@1459 6619 func_resolve_sysroot "$func_stripname_result"
adam@1459 6620 func_append newlib_search_path " $func_resolve_sysroot_result"
adamc@1133 6621 ;;
adamc@1133 6622 esac
adamc@1133 6623 # Need to link against all dependency_libs?
adamc@1133 6624 if test "$linkalldeplibs" = yes; then
adamc@1133 6625 deplibs="$deplib $deplibs"
adamc@1133 6626 else
adamc@1133 6627 # Need to hardcode shared library paths
adamc@1133 6628 # or/and link against static libraries
adamc@1133 6629 newdependency_libs="$deplib $newdependency_libs"
adamc@1133 6630 fi
adam@1459 6631 if $opt_preserve_dup_deps ; then
adamc@1133 6632 case "$tmp_libs " in
adam@1459 6633 *" $deplib "*) func_append specialdeplibs " $deplib" ;;
adamc@1133 6634 esac
adamc@1133 6635 fi
adam@1459 6636 func_append tmp_libs " $deplib"
adamc@1133 6637 done # for deplib
adamc@1133 6638 continue
adamc@1133 6639 fi # $linkmode = prog...
adamc@1133 6640
adamc@1133 6641 if test "$linkmode,$pass" = "prog,link"; then
adamc@1133 6642 if test -n "$library_names" &&
adamc@1133 6643 { { test "$prefer_static_libs" = no ||
adamc@1133 6644 test "$prefer_static_libs,$installed" = "built,yes"; } ||
adamc@1133 6645 test -z "$old_library"; }; then
adamc@1133 6646 # We need to hardcode the library path
adamc@1133 6647 if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
adamc@1133 6648 # Make sure the rpath contains only unique directories.
adamc@1133 6649 case "$temp_rpath:" in
adamc@1133 6650 *"$absdir:"*) ;;
adam@1459 6651 *) func_append temp_rpath "$absdir:" ;;
adamc@1133 6652 esac
adamc@1133 6653 fi
adamc@1133 6654
adamc@1133 6655 # Hardcode the library path.
adamc@1133 6656 # Skip directories that are in the system default run-time
adamc@1133 6657 # search path.
adamc@1133 6658 case " $sys_lib_dlsearch_path " in
adamc@1133 6659 *" $absdir "*) ;;
adamc@1133 6660 *)
adamc@1133 6661 case "$compile_rpath " in
adamc@1133 6662 *" $absdir "*) ;;
adam@1459 6663 *) func_append compile_rpath " $absdir" ;;
adamc@1133 6664 esac
adamc@1133 6665 ;;
adamc@1133 6666 esac
adamc@1133 6667 case " $sys_lib_dlsearch_path " in
adamc@1133 6668 *" $libdir "*) ;;
adamc@1133 6669 *)
adamc@1133 6670 case "$finalize_rpath " in
adamc@1133 6671 *" $libdir "*) ;;
adam@1459 6672 *) func_append finalize_rpath " $libdir" ;;
adamc@1133 6673 esac
adamc@1133 6674 ;;
adamc@1133 6675 esac
adamc@1133 6676 fi # $linkmode,$pass = prog,link...
adamc@1133 6677
adamc@1133 6678 if test "$alldeplibs" = yes &&
adamc@1133 6679 { test "$deplibs_check_method" = pass_all ||
adamc@1133 6680 { test "$build_libtool_libs" = yes &&
adamc@1133 6681 test -n "$library_names"; }; }; then
adamc@1133 6682 # We only need to search for static libraries
adamc@1133 6683 continue
adamc@1133 6684 fi
adamc@1133 6685 fi
adamc@1133 6686
adamc@1133 6687 link_static=no # Whether the deplib will be linked statically
adamc@1133 6688 use_static_libs=$prefer_static_libs
adamc@1133 6689 if test "$use_static_libs" = built && test "$installed" = yes; then
adamc@1133 6690 use_static_libs=no
adamc@1133 6691 fi
adamc@1133 6692 if test -n "$library_names" &&
adamc@1133 6693 { test "$use_static_libs" = no || test -z "$old_library"; }; then
adamc@1133 6694 case $host in
adamc@1133 6695 *cygwin* | *mingw* | *cegcc*)
adamc@1133 6696 # No point in relinking DLLs because paths are not encoded
adam@1459 6697 func_append notinst_deplibs " $lib"
adamc@1133 6698 need_relink=no
adamc@1133 6699 ;;
adamc@1133 6700 *)
adamc@1133 6701 if test "$installed" = no; then
adam@1459 6702 func_append notinst_deplibs " $lib"
adamc@1133 6703 need_relink=yes
adamc@1133 6704 fi
adamc@1133 6705 ;;
adamc@1133 6706 esac
adamc@1133 6707 # This is a shared library
adamc@1133 6708
adamc@1133 6709 # Warn about portability, can't link against -module's on some
adamc@1133 6710 # systems (darwin). Don't bleat about dlopened modules though!
adamc@1133 6711 dlopenmodule=""
adamc@1133 6712 for dlpremoduletest in $dlprefiles; do
adamc@1133 6713 if test "X$dlpremoduletest" = "X$lib"; then
adamc@1133 6714 dlopenmodule="$dlpremoduletest"
adamc@1133 6715 break
adamc@1133 6716 fi
adamc@1133 6717 done
adamc@1133 6718 if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
adam@1459 6719 echo
adamc@1133 6720 if test "$linkmode" = prog; then
adamc@1133 6721 $ECHO "*** Warning: Linking the executable $output against the loadable module"
adamc@1133 6722 else
adamc@1133 6723 $ECHO "*** Warning: Linking the shared library $output against the loadable module"
adamc@1133 6724 fi
adamc@1133 6725 $ECHO "*** $linklib is not portable!"
adamc@1133 6726 fi
adamc@1133 6727 if test "$linkmode" = lib &&
adamc@1133 6728 test "$hardcode_into_libs" = yes; then
adamc@1133 6729 # Hardcode the library path.
adamc@1133 6730 # Skip directories that are in the system default run-time
adamc@1133 6731 # search path.
adamc@1133 6732 case " $sys_lib_dlsearch_path " in
adamc@1133 6733 *" $absdir "*) ;;
adamc@1133 6734 *)
adamc@1133 6735 case "$compile_rpath " in
adamc@1133 6736 *" $absdir "*) ;;
adam@1459 6737 *) func_append compile_rpath " $absdir" ;;
adamc@1133 6738 esac
adamc@1133 6739 ;;
adamc@1133 6740 esac
adamc@1133 6741 case " $sys_lib_dlsearch_path " in
adamc@1133 6742 *" $libdir "*) ;;
adamc@1133 6743 *)
adamc@1133 6744 case "$finalize_rpath " in
adamc@1133 6745 *" $libdir "*) ;;
adam@1459 6746 *) func_append finalize_rpath " $libdir" ;;
adamc@1133 6747 esac
adamc@1133 6748 ;;
adamc@1133 6749 esac
adamc@1133 6750 fi
adamc@1133 6751
adamc@1133 6752 if test -n "$old_archive_from_expsyms_cmds"; then
adamc@1133 6753 # figure out the soname
adamc@1133 6754 set dummy $library_names
adamc@1133 6755 shift
adamc@1133 6756 realname="$1"
adamc@1133 6757 shift
adamc@1133 6758 libname=`eval "\\$ECHO \"$libname_spec\""`
adamc@1133 6759 # use dlname if we got it. it's perfectly good, no?
adamc@1133 6760 if test -n "$dlname"; then
adamc@1133 6761 soname="$dlname"
adamc@1133 6762 elif test -n "$soname_spec"; then
adamc@1133 6763 # bleh windows
adamc@1133 6764 case $host in
adamc@1133 6765 *cygwin* | mingw* | *cegcc*)
adamc@1133 6766 func_arith $current - $age
adamc@1133 6767 major=$func_arith_result
adamc@1133 6768 versuffix="-$major"
adamc@1133 6769 ;;
adamc@1133 6770 esac
adamc@1133 6771 eval soname=\"$soname_spec\"
adamc@1133 6772 else
adamc@1133 6773 soname="$realname"
adamc@1133 6774 fi
adamc@1133 6775
adamc@1133 6776 # Make a new name for the extract_expsyms_cmds to use
adamc@1133 6777 soroot="$soname"
adamc@1133 6778 func_basename "$soroot"
adamc@1133 6779 soname="$func_basename_result"
adamc@1133 6780 func_stripname 'lib' '.dll' "$soname"
adamc@1133 6781 newlib=libimp-$func_stripname_result.a
adamc@1133 6782
adamc@1133 6783 # If the library has no export list, then create one now
adamc@1133 6784 if test -f "$output_objdir/$soname-def"; then :
adamc@1133 6785 else
adamc@1133 6786 func_verbose "extracting exported symbol list from \`$soname'"
adamc@1133 6787 func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
adamc@1133 6788 fi
adamc@1133 6789
adamc@1133 6790 # Create $newlib
adamc@1133 6791 if test -f "$output_objdir/$newlib"; then :; else
adamc@1133 6792 func_verbose "generating import library for \`$soname'"
adamc@1133 6793 func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
adamc@1133 6794 fi
adamc@1133 6795 # make sure the library variables are pointing to the new library
adamc@1133 6796 dir=$output_objdir
adamc@1133 6797 linklib=$newlib
adamc@1133 6798 fi # test -n "$old_archive_from_expsyms_cmds"
adamc@1133 6799
adam@1459 6800 if test "$linkmode" = prog || test "$opt_mode" != relink; then
adamc@1133 6801 add_shlibpath=
adamc@1133 6802 add_dir=
adamc@1133 6803 add=
adamc@1133 6804 lib_linked=yes
adamc@1133 6805 case $hardcode_action in
adamc@1133 6806 immediate | unsupported)
adamc@1133 6807 if test "$hardcode_direct" = no; then
adamc@1133 6808 add="$dir/$linklib"
adamc@1133 6809 case $host in
adamc@1133 6810 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
adamc@1133 6811 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
adamc@1133 6812 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
adamc@1133 6813 *-*-unixware7*) add_dir="-L$dir" ;;
adamc@1133 6814 *-*-darwin* )
adamc@1133 6815 # if the lib is a (non-dlopened) module then we can not
adamc@1133 6816 # link against it, someone is ignoring the earlier warnings
adamc@1133 6817 if /usr/bin/file -L $add 2> /dev/null |
adamc@1133 6818 $GREP ": [^:]* bundle" >/dev/null ; then
adamc@1133 6819 if test "X$dlopenmodule" != "X$lib"; then
adamc@1133 6820 $ECHO "*** Warning: lib $linklib is a module, not a shared library"
adamc@1133 6821 if test -z "$old_library" ; then
adam@1459 6822 echo
adam@1459 6823 echo "*** And there doesn't seem to be a static archive available"
adam@1459 6824 echo "*** The link will probably fail, sorry"
adamc@1133 6825 else
adamc@1133 6826 add="$dir/$old_library"
adamc@1133 6827 fi
adamc@1133 6828 elif test -n "$old_library"; then
adamc@1133 6829 add="$dir/$old_library"
adamc@1133 6830 fi
adamc@1133 6831 fi
adamc@1133 6832 esac
adamc@1133 6833 elif test "$hardcode_minus_L" = no; then
adamc@1133 6834 case $host in
adamc@1133 6835 *-*-sunos*) add_shlibpath="$dir" ;;
adamc@1133 6836 esac
adamc@1133 6837 add_dir="-L$dir"
adamc@1133 6838 add="-l$name"
adamc@1133 6839 elif test "$hardcode_shlibpath_var" = no; then
adamc@1133 6840 add_shlibpath="$dir"
adamc@1133 6841 add="-l$name"
adamc@1133 6842 else
adamc@1133 6843 lib_linked=no
adamc@1133 6844 fi
adamc@1133 6845 ;;
adamc@1133 6846 relink)
adamc@1133 6847 if test "$hardcode_direct" = yes &&
adamc@1133 6848 test "$hardcode_direct_absolute" = no; then
adamc@1133 6849 add="$dir/$linklib"
adamc@1133 6850 elif test "$hardcode_minus_L" = yes; then
adam@1599 6851 add_dir="-L$absdir"
adamc@1133 6852 # Try looking first in the location we're being installed to.
adamc@1133 6853 if test -n "$inst_prefix_dir"; then
adamc@1133 6854 case $libdir in
adamc@1133 6855 [\\/]*)
adam@1459 6856 func_append add_dir " -L$inst_prefix_dir$libdir"
adamc@1133 6857 ;;
adamc@1133 6858 esac
adamc@1133 6859 fi
adamc@1133 6860 add="-l$name"
adamc@1133 6861 elif test "$hardcode_shlibpath_var" = yes; then
adamc@1133 6862 add_shlibpath="$dir"
adamc@1133 6863 add="-l$name"
adamc@1133 6864 else
adamc@1133 6865 lib_linked=no
adamc@1133 6866 fi
adamc@1133 6867 ;;
adamc@1133 6868 *) lib_linked=no ;;
adamc@1133 6869 esac
adamc@1133 6870
adamc@1133 6871 if test "$lib_linked" != yes; then
adamc@1133 6872 func_fatal_configuration "unsupported hardcode properties"
adamc@1133 6873 fi
adamc@1133 6874
adamc@1133 6875 if test -n "$add_shlibpath"; then
adamc@1133 6876 case :$compile_shlibpath: in
adamc@1133 6877 *":$add_shlibpath:"*) ;;
adam@1459 6878 *) func_append compile_shlibpath "$add_shlibpath:" ;;
adamc@1133 6879 esac
adamc@1133 6880 fi
adamc@1133 6881 if test "$linkmode" = prog; then
adamc@1133 6882 test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
adamc@1133 6883 test -n "$add" && compile_deplibs="$add $compile_deplibs"
adamc@1133 6884 else
adamc@1133 6885 test -n "$add_dir" && deplibs="$add_dir $deplibs"
adamc@1133 6886 test -n "$add" && deplibs="$add $deplibs"
adamc@1133 6887 if test "$hardcode_direct" != yes &&
adamc@1133 6888 test "$hardcode_minus_L" != yes &&
adamc@1133 6889 test "$hardcode_shlibpath_var" = yes; then
adamc@1133 6890 case :$finalize_shlibpath: in
adamc@1133 6891 *":$libdir:"*) ;;
adam@1459 6892 *) func_append finalize_shlibpath "$libdir:" ;;
adamc@1133 6893 esac
adamc@1133 6894 fi
adamc@1133 6895 fi
adamc@1133 6896 fi
adamc@1133 6897
adam@1459 6898 if test "$linkmode" = prog || test "$opt_mode" = relink; then
adamc@1133 6899 add_shlibpath=
adamc@1133 6900 add_dir=
adamc@1133 6901 add=
adamc@1133 6902 # Finalize command for both is simple: just hardcode it.
adamc@1133 6903 if test "$hardcode_direct" = yes &&
adamc@1133 6904 test "$hardcode_direct_absolute" = no; then
adamc@1133 6905 add="$libdir/$linklib"
adamc@1133 6906 elif test "$hardcode_minus_L" = yes; then
adamc@1133 6907 add_dir="-L$libdir"
adamc@1133 6908 add="-l$name"
adamc@1133 6909 elif test "$hardcode_shlibpath_var" = yes; then
adamc@1133 6910 case :$finalize_shlibpath: in
adamc@1133 6911 *":$libdir:"*) ;;
adam@1459 6912 *) func_append finalize_shlibpath "$libdir:" ;;
adamc@1133 6913 esac
adamc@1133 6914 add="-l$name"
adamc@1133 6915 elif test "$hardcode_automatic" = yes; then
adamc@1133 6916 if test -n "$inst_prefix_dir" &&
adamc@1133 6917 test -f "$inst_prefix_dir$libdir/$linklib" ; then
adamc@1133 6918 add="$inst_prefix_dir$libdir/$linklib"
adamc@1133 6919 else
adamc@1133 6920 add="$libdir/$linklib"
adamc@1133 6921 fi
adamc@1133 6922 else
adamc@1133 6923 # We cannot seem to hardcode it, guess we'll fake it.
adamc@1133 6924 add_dir="-L$libdir"
adamc@1133 6925 # Try looking first in the location we're being installed to.
adamc@1133 6926 if test -n "$inst_prefix_dir"; then
adamc@1133 6927 case $libdir in
adamc@1133 6928 [\\/]*)
adam@1459 6929 func_append add_dir " -L$inst_prefix_dir$libdir"
adamc@1133 6930 ;;
adamc@1133 6931 esac
adamc@1133 6932 fi
adamc@1133 6933 add="-l$name"
adamc@1133 6934 fi
adamc@1133 6935
adamc@1133 6936 if test "$linkmode" = prog; then
adamc@1133 6937 test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
adamc@1133 6938 test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
adamc@1133 6939 else
adamc@1133 6940 test -n "$add_dir" && deplibs="$add_dir $deplibs"
adamc@1133 6941 test -n "$add" && deplibs="$add $deplibs"
adamc@1133 6942 fi
adamc@1133 6943 fi
adamc@1133 6944 elif test "$linkmode" = prog; then
adamc@1133 6945 # Here we assume that one of hardcode_direct or hardcode_minus_L
adamc@1133 6946 # is not unsupported. This is valid on all known static and
adamc@1133 6947 # shared platforms.
adamc@1133 6948 if test "$hardcode_direct" != unsupported; then
adamc@1133 6949 test -n "$old_library" && linklib="$old_library"
adamc@1133 6950 compile_deplibs="$dir/$linklib $compile_deplibs"
adamc@1133 6951 finalize_deplibs="$dir/$linklib $finalize_deplibs"
adamc@1133 6952 else
adamc@1133 6953 compile_deplibs="-l$name -L$dir $compile_deplibs"
adamc@1133 6954 finalize_deplibs="-l$name -L$dir $finalize_deplibs"
adamc@1133 6955 fi
adamc@1133 6956 elif test "$build_libtool_libs" = yes; then
adamc@1133 6957 # Not a shared library
adamc@1133 6958 if test "$deplibs_check_method" != pass_all; then
adamc@1133 6959 # We're trying link a shared library against a static one
adamc@1133 6960 # but the system doesn't support it.
adamc@1133 6961
adamc@1133 6962 # Just print a warning and add the library to dependency_libs so
adamc@1133 6963 # that the program can be linked against the static library.
adam@1459 6964 echo
adamc@1133 6965 $ECHO "*** Warning: This system can not link to static lib archive $lib."
adam@1459 6966 echo "*** I have the capability to make that library automatically link in when"
adam@1459 6967 echo "*** you link to this library. But I can only do this if you have a"
adam@1459 6968 echo "*** shared version of the library, which you do not appear to have."
adamc@1133 6969 if test "$module" = yes; then
adam@1459 6970 echo "*** But as you try to build a module library, libtool will still create "
adam@1459 6971 echo "*** a static module, that should work as long as the dlopening application"
adam@1459 6972 echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
adamc@1133 6973 if test -z "$global_symbol_pipe"; then
adam@1459 6974 echo
adam@1459 6975 echo "*** However, this would only work if libtool was able to extract symbol"
adam@1459 6976 echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
adam@1459 6977 echo "*** not find such a program. So, this module is probably useless."
adam@1459 6978 echo "*** \`nm' from GNU binutils and a full rebuild may help."
adamc@1133 6979 fi
adamc@1133 6980 if test "$build_old_libs" = no; then
adamc@1133 6981 build_libtool_libs=module
adamc@1133 6982 build_old_libs=yes
adamc@1133 6983 else
adamc@1133 6984 build_libtool_libs=no
adamc@1133 6985 fi
adamc@1133 6986 fi
adamc@1133 6987 else
adamc@1133 6988 deplibs="$dir/$old_library $deplibs"
adamc@1133 6989 link_static=yes
adamc@1133 6990 fi
adamc@1133 6991 fi # link shared/static library?
adamc@1133 6992
adamc@1133 6993 if test "$linkmode" = lib; then
adamc@1133 6994 if test -n "$dependency_libs" &&
adamc@1133 6995 { test "$hardcode_into_libs" != yes ||
adamc@1133 6996 test "$build_old_libs" = yes ||
adamc@1133 6997 test "$link_static" = yes; }; then
adamc@1133 6998 # Extract -R from dependency_libs
adamc@1133 6999 temp_deplibs=
adamc@1133 7000 for libdir in $dependency_libs; do
adamc@1133 7001 case $libdir in
adamc@1133 7002 -R*) func_stripname '-R' '' "$libdir"
adamc@1133 7003 temp_xrpath=$func_stripname_result
adamc@1133 7004 case " $xrpath " in
adamc@1133 7005 *" $temp_xrpath "*) ;;
adam@1459 7006 *) func_append xrpath " $temp_xrpath";;
adamc@1133 7007 esac;;
adam@1459 7008 *) func_append temp_deplibs " $libdir";;
adamc@1133 7009 esac
adamc@1133 7010 done
adamc@1133 7011 dependency_libs="$temp_deplibs"
adamc@1133 7012 fi
adamc@1133 7013
adam@1459 7014 func_append newlib_search_path " $absdir"
adamc@1133 7015 # Link against this library
adamc@1133 7016 test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
adamc@1133 7017 # ... and its dependency_libs
adamc@1133 7018 tmp_libs=
adamc@1133 7019 for deplib in $dependency_libs; do
adamc@1133 7020 newdependency_libs="$deplib $newdependency_libs"
adam@1459 7021 case $deplib in
adam@1459 7022 -L*) func_stripname '-L' '' "$deplib"
adam@1459 7023 func_resolve_sysroot "$func_stripname_result";;
adam@1459 7024 *) func_resolve_sysroot "$deplib" ;;
adam@1459 7025 esac
adam@1459 7026 if $opt_preserve_dup_deps ; then
adamc@1133 7027 case "$tmp_libs " in
adam@1459 7028 *" $func_resolve_sysroot_result "*)
adam@1459 7029 func_append specialdeplibs " $func_resolve_sysroot_result" ;;
adamc@1133 7030 esac
adamc@1133 7031 fi
adam@1459 7032 func_append tmp_libs " $func_resolve_sysroot_result"
adamc@1133 7033 done
adamc@1133 7034
adamc@1133 7035 if test "$link_all_deplibs" != no; then
adamc@1133 7036 # Add the search paths of all dependency libraries
adamc@1133 7037 for deplib in $dependency_libs; do
adamc@1133 7038 path=
adamc@1133 7039 case $deplib in
adamc@1133 7040 -L*) path="$deplib" ;;
adamc@1133 7041 *.la)
adam@1459 7042 func_resolve_sysroot "$deplib"
adam@1459 7043 deplib=$func_resolve_sysroot_result
adamc@1133 7044 func_dirname "$deplib" "" "."
adam@1459 7045 dir=$func_dirname_result
adamc@1133 7046 # We need an absolute path.
adamc@1133 7047 case $dir in
adamc@1133 7048 [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
adamc@1133 7049 *)
adamc@1133 7050 absdir=`cd "$dir" && pwd`
adamc@1133 7051 if test -z "$absdir"; then
adamc@1133 7052 func_warning "cannot determine absolute directory name of \`$dir'"
adamc@1133 7053 absdir="$dir"
adamc@1133 7054 fi
adamc@1133 7055 ;;
adamc@1133 7056 esac
adamc@1133 7057 if $GREP "^installed=no" $deplib > /dev/null; then
adamc@1133 7058 case $host in
adamc@1133 7059 *-*-darwin*)
adamc@1133 7060 depdepl=
adamc@1133 7061 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
adamc@1133 7062 if test -n "$deplibrary_names" ; then
adamc@1133 7063 for tmp in $deplibrary_names ; do
adamc@1133 7064 depdepl=$tmp
adamc@1133 7065 done
adamc@1133 7066 if test -f "$absdir/$objdir/$depdepl" ; then
adamc@1133 7067 depdepl="$absdir/$objdir/$depdepl"
adamc@1133 7068 darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
adamc@1133 7069 if test -z "$darwin_install_name"; then
adamc@1133 7070 darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
adamc@1133 7071 fi
adam@1459 7072 func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
adam@1459 7073 func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
adamc@1133 7074 path=
adamc@1133 7075 fi
adamc@1133 7076 fi
adamc@1133 7077 ;;
adamc@1133 7078 *)
adamc@1133 7079 path="-L$absdir/$objdir"
adamc@1133 7080 ;;
adamc@1133 7081 esac
adamc@1133 7082 else
adamc@1133 7083 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
adamc@1133 7084 test -z "$libdir" && \
adamc@1133 7085 func_fatal_error "\`$deplib' is not a valid libtool archive"
adamc@1133 7086 test "$absdir" != "$libdir" && \
adamc@1133 7087 func_warning "\`$deplib' seems to be moved"
adamc@1133 7088
adamc@1133 7089 path="-L$absdir"
adamc@1133 7090 fi
adamc@1133 7091 ;;
adamc@1133 7092 esac
adamc@1133 7093 case " $deplibs " in
adamc@1133 7094 *" $path "*) ;;
adamc@1133 7095 *) deplibs="$path $deplibs" ;;
adamc@1133 7096 esac
adamc@1133 7097 done
adamc@1133 7098 fi # link_all_deplibs != no
adamc@1133 7099 fi # linkmode = lib
adamc@1133 7100 done # for deplib in $libs
adamc@1133 7101 if test "$pass" = link; then
adamc@1133 7102 if test "$linkmode" = "prog"; then
adamc@1133 7103 compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
adamc@1133 7104 finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
adamc@1133 7105 else
adam@1459 7106 compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
adamc@1133 7107 fi
adamc@1133 7108 fi
adamc@1133 7109 dependency_libs="$newdependency_libs"
adamc@1133 7110 if test "$pass" = dlpreopen; then
adamc@1133 7111 # Link the dlpreopened libraries before other libraries
adamc@1133 7112 for deplib in $save_deplibs; do
adamc@1133 7113 deplibs="$deplib $deplibs"
adamc@1133 7114 done
adamc@1133 7115 fi
adamc@1133 7116 if test "$pass" != dlopen; then
adamc@1133 7117 if test "$pass" != conv; then
adamc@1133 7118 # Make sure lib_search_path contains only unique directories.
adamc@1133 7119 lib_search_path=
adamc@1133 7120 for dir in $newlib_search_path; do
adamc@1133 7121 case "$lib_search_path " in
adamc@1133 7122 *" $dir "*) ;;
adam@1459 7123 *) func_append lib_search_path " $dir" ;;
adamc@1133 7124 esac
adamc@1133 7125 done
adamc@1133 7126 newlib_search_path=
adamc@1133 7127 fi
adamc@1133 7128
adamc@1133 7129 if test "$linkmode,$pass" != "prog,link"; then
adamc@1133 7130 vars="deplibs"
adamc@1133 7131 else
adamc@1133 7132 vars="compile_deplibs finalize_deplibs"
adamc@1133 7133 fi
adamc@1133 7134 for var in $vars dependency_libs; do
adamc@1133 7135 # Add libraries to $var in reverse order
adamc@1133 7136 eval tmp_libs=\"\$$var\"
adamc@1133 7137 new_libs=
adamc@1133 7138 for deplib in $tmp_libs; do
adamc@1133 7139 # FIXME: Pedantically, this is the right thing to do, so
adamc@1133 7140 # that some nasty dependency loop isn't accidentally
adamc@1133 7141 # broken:
adamc@1133 7142 #new_libs="$deplib $new_libs"
adamc@1133 7143 # Pragmatically, this seems to cause very few problems in
adamc@1133 7144 # practice:
adamc@1133 7145 case $deplib in
adamc@1133 7146 -L*) new_libs="$deplib $new_libs" ;;
adamc@1133 7147 -R*) ;;
adamc@1133 7148 *)
adamc@1133 7149 # And here is the reason: when a library appears more
adamc@1133 7150 # than once as an explicit dependence of a library, or
adamc@1133 7151 # is implicitly linked in more than once by the
adamc@1133 7152 # compiler, it is considered special, and multiple
adamc@1133 7153 # occurrences thereof are not removed. Compare this
adamc@1133 7154 # with having the same library being listed as a
adamc@1133 7155 # dependency of multiple other libraries: in this case,
adamc@1133 7156 # we know (pedantically, we assume) the library does not
adamc@1133 7157 # need to be listed more than once, so we keep only the
adamc@1133 7158 # last copy. This is not always right, but it is rare
adamc@1133 7159 # enough that we require users that really mean to play
adamc@1133 7160 # such unportable linking tricks to link the library
adamc@1133 7161 # using -Wl,-lname, so that libtool does not consider it
adamc@1133 7162 # for duplicate removal.
adamc@1133 7163 case " $specialdeplibs " in
adamc@1133 7164 *" $deplib "*) new_libs="$deplib $new_libs" ;;
adamc@1133 7165 *)
adamc@1133 7166 case " $new_libs " in
adamc@1133 7167 *" $deplib "*) ;;
adamc@1133 7168 *) new_libs="$deplib $new_libs" ;;
adamc@1133 7169 esac
adamc@1133 7170 ;;
adamc@1133 7171 esac
adamc@1133 7172 ;;
adamc@1133 7173 esac
adamc@1133 7174 done
adamc@1133 7175 tmp_libs=
adamc@1133 7176 for deplib in $new_libs; do
adamc@1133 7177 case $deplib in
adamc@1133 7178 -L*)
adamc@1133 7179 case " $tmp_libs " in
adamc@1133 7180 *" $deplib "*) ;;
adam@1459 7181 *) func_append tmp_libs " $deplib" ;;
adamc@1133 7182 esac
adamc@1133 7183 ;;
adam@1459 7184 *) func_append tmp_libs " $deplib" ;;
adamc@1133 7185 esac
adamc@1133 7186 done
adamc@1133 7187 eval $var=\"$tmp_libs\"
adamc@1133 7188 done # for var
adamc@1133 7189 fi
adamc@1133 7190 # Last step: remove runtime libs from dependency_libs
adamc@1133 7191 # (they stay in deplibs)
adamc@1133 7192 tmp_libs=
adamc@1133 7193 for i in $dependency_libs ; do
adamc@1133 7194 case " $predeps $postdeps $compiler_lib_search_path " in
adamc@1133 7195 *" $i "*)
adamc@1133 7196 i=""
adamc@1133 7197 ;;
adamc@1133 7198 esac
adamc@1133 7199 if test -n "$i" ; then
adam@1459 7200 func_append tmp_libs " $i"
adamc@1133 7201 fi
adamc@1133 7202 done
adamc@1133 7203 dependency_libs=$tmp_libs
adamc@1133 7204 done # for pass
adamc@1133 7205 if test "$linkmode" = prog; then
adamc@1133 7206 dlfiles="$newdlfiles"
adamc@1133 7207 fi
adamc@1133 7208 if test "$linkmode" = prog || test "$linkmode" = lib; then
adamc@1133 7209 dlprefiles="$newdlprefiles"
adamc@1133 7210 fi
adamc@1133 7211
adamc@1133 7212 case $linkmode in
adamc@1133 7213 oldlib)
adamc@1133 7214 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
adamc@1133 7215 func_warning "\`-dlopen' is ignored for archives"
adamc@1133 7216 fi
adamc@1133 7217
adamc@1133 7218 case " $deplibs" in
adamc@1133 7219 *\ -l* | *\ -L*)
adamc@1133 7220 func_warning "\`-l' and \`-L' are ignored for archives" ;;
adamc@1133 7221 esac
adamc@1133 7222
adamc@1133 7223 test -n "$rpath" && \
adamc@1133 7224 func_warning "\`-rpath' is ignored for archives"
adamc@1133 7225
adamc@1133 7226 test -n "$xrpath" && \
adamc@1133 7227 func_warning "\`-R' is ignored for archives"
adamc@1133 7228
adamc@1133 7229 test -n "$vinfo" && \
adamc@1133 7230 func_warning "\`-version-info/-version-number' is ignored for archives"
adamc@1133 7231
adamc@1133 7232 test -n "$release" && \
adamc@1133 7233 func_warning "\`-release' is ignored for archives"
adamc@1133 7234
adamc@1133 7235 test -n "$export_symbols$export_symbols_regex" && \
adamc@1133 7236 func_warning "\`-export-symbols' is ignored for archives"
adamc@1133 7237
adamc@1133 7238 # Now set the variables for building old libraries.
adamc@1133 7239 build_libtool_libs=no
adamc@1133 7240 oldlibs="$output"
adam@1459 7241 func_append objs "$old_deplibs"
adamc@1133 7242 ;;
adamc@1133 7243
adamc@1133 7244 lib)
adamc@1133 7245 # Make sure we only generate libraries of the form `libNAME.la'.
adamc@1133 7246 case $outputname in
adamc@1133 7247 lib*)
adamc@1133 7248 func_stripname 'lib' '.la' "$outputname"
adamc@1133 7249 name=$func_stripname_result
adamc@1133 7250 eval shared_ext=\"$shrext_cmds\"
adamc@1133 7251 eval libname=\"$libname_spec\"
adamc@1133 7252 ;;
adamc@1133 7253 *)
adamc@1133 7254 test "$module" = no && \
adamc@1133 7255 func_fatal_help "libtool library \`$output' must begin with \`lib'"
adamc@1133 7256
adamc@1133 7257 if test "$need_lib_prefix" != no; then
adamc@1133 7258 # Add the "lib" prefix for modules if required
adamc@1133 7259 func_stripname '' '.la' "$outputname"
adamc@1133 7260 name=$func_stripname_result
adamc@1133 7261 eval shared_ext=\"$shrext_cmds\"
adamc@1133 7262 eval libname=\"$libname_spec\"
adamc@1133 7263 else
adamc@1133 7264 func_stripname '' '.la' "$outputname"
adamc@1133 7265 libname=$func_stripname_result
adamc@1133 7266 fi
adamc@1133 7267 ;;
adamc@1133 7268 esac
adamc@1133 7269
adamc@1133 7270 if test -n "$objs"; then
adamc@1133 7271 if test "$deplibs_check_method" != pass_all; then
adamc@1133 7272 func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
adamc@1133 7273 else
adam@1459 7274 echo
adamc@1133 7275 $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
adamc@1133 7276 $ECHO "*** objects $objs is not portable!"
adam@1459 7277 func_append libobjs " $objs"
adamc@1133 7278 fi
adamc@1133 7279 fi
adamc@1133 7280
adamc@1133 7281 test "$dlself" != no && \
adamc@1133 7282 func_warning "\`-dlopen self' is ignored for libtool libraries"
adamc@1133 7283
adamc@1133 7284 set dummy $rpath
adamc@1133 7285 shift
adamc@1133 7286 test "$#" -gt 1 && \
adamc@1133 7287 func_warning "ignoring multiple \`-rpath's for a libtool library"
adamc@1133 7288
adamc@1133 7289 install_libdir="$1"
adamc@1133 7290
adamc@1133 7291 oldlibs=
adamc@1133 7292 if test -z "$rpath"; then
adamc@1133 7293 if test "$build_libtool_libs" = yes; then
adamc@1133 7294 # Building a libtool convenience library.
adamc@1133 7295 # Some compilers have problems with a `.al' extension so
adamc@1133 7296 # convenience libraries should have the same extension an
adamc@1133 7297 # archive normally would.
adamc@1133 7298 oldlibs="$output_objdir/$libname.$libext $oldlibs"
adamc@1133 7299 build_libtool_libs=convenience
adamc@1133 7300 build_old_libs=yes
adamc@1133 7301 fi
adamc@1133 7302
adamc@1133 7303 test -n "$vinfo" && \
adamc@1133 7304 func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
adamc@1133 7305
adamc@1133 7306 test -n "$release" && \
adamc@1133 7307 func_warning "\`-release' is ignored for convenience libraries"
adamc@1133 7308 else
adamc@1133 7309
adamc@1133 7310 # Parse the version information argument.
adamc@1133 7311 save_ifs="$IFS"; IFS=':'
adamc@1133 7312 set dummy $vinfo 0 0 0
adamc@1133 7313 shift
adamc@1133 7314 IFS="$save_ifs"
adamc@1133 7315
adamc@1133 7316 test -n "$7" && \
adamc@1133 7317 func_fatal_help "too many parameters to \`-version-info'"
adamc@1133 7318
adamc@1133 7319 # convert absolute version numbers to libtool ages
adamc@1133 7320 # this retains compatibility with .la files and attempts
adamc@1133 7321 # to make the code below a bit more comprehensible
adamc@1133 7322
adamc@1133 7323 case $vinfo_number in
adamc@1133 7324 yes)
adamc@1133 7325 number_major="$1"
adamc@1133 7326 number_minor="$2"
adamc@1133 7327 number_revision="$3"
adamc@1133 7328 #
adamc@1133 7329 # There are really only two kinds -- those that
adamc@1133 7330 # use the current revision as the major version
adamc@1133 7331 # and those that subtract age and use age as
adamc@1133 7332 # a minor version. But, then there is irix
adamc@1133 7333 # which has an extra 1 added just for fun
adamc@1133 7334 #
adamc@1133 7335 case $version_type in
adam@1599 7336 # correct linux to gnu/linux during the next big refactor
adamc@1133 7337 darwin|linux|osf|windows|none)
adamc@1133 7338 func_arith $number_major + $number_minor
adamc@1133 7339 current=$func_arith_result
adamc@1133 7340 age="$number_minor"
adamc@1133 7341 revision="$number_revision"
adamc@1133 7342 ;;
adam@1459 7343 freebsd-aout|freebsd-elf|qnx|sunos)
adamc@1133 7344 current="$number_major"
adamc@1133 7345 revision="$number_minor"
adamc@1133 7346 age="0"
adamc@1133 7347 ;;
adamc@1133 7348 irix|nonstopux)
adamc@1133 7349 func_arith $number_major + $number_minor
adamc@1133 7350 current=$func_arith_result
adamc@1133 7351 age="$number_minor"
adamc@1133 7352 revision="$number_minor"
adamc@1133 7353 lt_irix_increment=no
adamc@1133 7354 ;;
adamc@1133 7355 *)
adamc@1133 7356 func_fatal_configuration "$modename: unknown library version type \`$version_type'"
adamc@1133 7357 ;;
adamc@1133 7358 esac
adamc@1133 7359 ;;
adamc@1133 7360 no)
adamc@1133 7361 current="$1"
adamc@1133 7362 revision="$2"
adamc@1133 7363 age="$3"
adamc@1133 7364 ;;
adamc@1133 7365 esac
adamc@1133 7366
adamc@1133 7367 # Check that each of the things are valid numbers.
adamc@1133 7368 case $current in
adamc@1133 7369 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]) ;;
adamc@1133 7370 *)
adamc@1133 7371 func_error "CURRENT \`$current' must be a nonnegative integer"
adamc@1133 7372 func_fatal_error "\`$vinfo' is not valid version information"
adamc@1133 7373 ;;
adamc@1133 7374 esac
adamc@1133 7375
adamc@1133 7376 case $revision in
adamc@1133 7377 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]) ;;
adamc@1133 7378 *)
adamc@1133 7379 func_error "REVISION \`$revision' must be a nonnegative integer"
adamc@1133 7380 func_fatal_error "\`$vinfo' is not valid version information"
adamc@1133 7381 ;;
adamc@1133 7382 esac
adamc@1133 7383
adamc@1133 7384 case $age in
adamc@1133 7385 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]) ;;
adamc@1133 7386 *)
adamc@1133 7387 func_error "AGE \`$age' must be a nonnegative integer"
adamc@1133 7388 func_fatal_error "\`$vinfo' is not valid version information"
adamc@1133 7389 ;;
adamc@1133 7390 esac
adamc@1133 7391
adamc@1133 7392 if test "$age" -gt "$current"; then
adamc@1133 7393 func_error "AGE \`$age' is greater than the current interface number \`$current'"
adamc@1133 7394 func_fatal_error "\`$vinfo' is not valid version information"
adamc@1133 7395 fi
adamc@1133 7396
adamc@1133 7397 # Calculate the version variables.
adamc@1133 7398 major=
adamc@1133 7399 versuffix=
adamc@1133 7400 verstring=
adamc@1133 7401 case $version_type in
adamc@1133 7402 none) ;;
adamc@1133 7403
adamc@1133 7404 darwin)
adamc@1133 7405 # Like Linux, but with the current version available in
adamc@1133 7406 # verstring for coding it into the library header
adamc@1133 7407 func_arith $current - $age
adamc@1133 7408 major=.$func_arith_result
adamc@1133 7409 versuffix="$major.$age.$revision"
adamc@1133 7410 # Darwin ld doesn't like 0 for these options...
adamc@1133 7411 func_arith $current + 1
adamc@1133 7412 minor_current=$func_arith_result
adamc@1133 7413 xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
adamc@1133 7414 verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
adamc@1133 7415 ;;
adamc@1133 7416
adamc@1133 7417 freebsd-aout)
adamc@1133 7418 major=".$current"
adamc@1133 7419 versuffix=".$current.$revision";
adamc@1133 7420 ;;
adamc@1133 7421
adamc@1133 7422 freebsd-elf)
adamc@1133 7423 major=".$current"
adamc@1133 7424 versuffix=".$current"
adamc@1133 7425 ;;
adamc@1133 7426
adamc@1133 7427 irix | nonstopux)
adamc@1133 7428 if test "X$lt_irix_increment" = "Xno"; then
adamc@1133 7429 func_arith $current - $age
adamc@1133 7430 else
adamc@1133 7431 func_arith $current - $age + 1
adamc@1133 7432 fi
adamc@1133 7433 major=$func_arith_result
adamc@1133 7434
adamc@1133 7435 case $version_type in
adamc@1133 7436 nonstopux) verstring_prefix=nonstopux ;;
adamc@1133 7437 *) verstring_prefix=sgi ;;
adamc@1133 7438 esac
adamc@1133 7439 verstring="$verstring_prefix$major.$revision"
adamc@1133 7440
adamc@1133 7441 # Add in all the interfaces that we are compatible with.
adamc@1133 7442 loop=$revision
adamc@1133 7443 while test "$loop" -ne 0; do
adamc@1133 7444 func_arith $revision - $loop
adamc@1133 7445 iface=$func_arith_result
adamc@1133 7446 func_arith $loop - 1
adamc@1133 7447 loop=$func_arith_result
adamc@1133 7448 verstring="$verstring_prefix$major.$iface:$verstring"
adamc@1133 7449 done
adamc@1133 7450
adamc@1133 7451 # Before this point, $major must not contain `.'.
adamc@1133 7452 major=.$major
adamc@1133 7453 versuffix="$major.$revision"
adamc@1133 7454 ;;
adamc@1133 7455
adam@1599 7456 linux) # correct to gnu/linux during the next big refactor
adamc@1133 7457 func_arith $current - $age
adamc@1133 7458 major=.$func_arith_result
adamc@1133 7459 versuffix="$major.$age.$revision"
adamc@1133 7460 ;;
adamc@1133 7461
adamc@1133 7462 osf)
adamc@1133 7463 func_arith $current - $age
adamc@1133 7464 major=.$func_arith_result
adamc@1133 7465 versuffix=".$current.$age.$revision"
adamc@1133 7466 verstring="$current.$age.$revision"
adamc@1133 7467
adamc@1133 7468 # Add in all the interfaces that we are compatible with.
adamc@1133 7469 loop=$age
adamc@1133 7470 while test "$loop" -ne 0; do
adamc@1133 7471 func_arith $current - $loop
adamc@1133 7472 iface=$func_arith_result
adamc@1133 7473 func_arith $loop - 1
adamc@1133 7474 loop=$func_arith_result
adamc@1133 7475 verstring="$verstring:${iface}.0"
adamc@1133 7476 done
adamc@1133 7477
adamc@1133 7478 # Make executables depend on our current version.
adam@1459 7479 func_append verstring ":${current}.0"
adamc@1133 7480 ;;
adamc@1133 7481
adamc@1133 7482 qnx)
adamc@1133 7483 major=".$current"
adamc@1133 7484 versuffix=".$current"
adamc@1133 7485 ;;
adamc@1133 7486
adamc@1133 7487 sunos)
adamc@1133 7488 major=".$current"
adamc@1133 7489 versuffix=".$current.$revision"
adamc@1133 7490 ;;
adamc@1133 7491
adamc@1133 7492 windows)
adamc@1133 7493 # Use '-' rather than '.', since we only want one
adamc@1133 7494 # extension on DOS 8.3 filesystems.
adamc@1133 7495 func_arith $current - $age
adamc@1133 7496 major=$func_arith_result
adamc@1133 7497 versuffix="-$major"
adamc@1133 7498 ;;
adamc@1133 7499
adamc@1133 7500 *)
adamc@1133 7501 func_fatal_configuration "unknown library version type \`$version_type'"
adamc@1133 7502 ;;
adamc@1133 7503 esac
adamc@1133 7504
adamc@1133 7505 # Clear the version info if we defaulted, and they specified a release.
adamc@1133 7506 if test -z "$vinfo" && test -n "$release"; then
adamc@1133 7507 major=
adamc@1133 7508 case $version_type in
adamc@1133 7509 darwin)
adamc@1133 7510 # we can't check for "0.0" in archive_cmds due to quoting
adamc@1133 7511 # problems, so we reset it completely
adamc@1133 7512 verstring=
adamc@1133 7513 ;;
adamc@1133 7514 *)
adamc@1133 7515 verstring="0.0"
adamc@1133 7516 ;;
adamc@1133 7517 esac
adamc@1133 7518 if test "$need_version" = no; then
adamc@1133 7519 versuffix=
adamc@1133 7520 else
adamc@1133 7521 versuffix=".0.0"
adamc@1133 7522 fi
adamc@1133 7523 fi
adamc@1133 7524
adamc@1133 7525 # Remove version info from name if versioning should be avoided
adamc@1133 7526 if test "$avoid_version" = yes && test "$need_version" = no; then
adamc@1133 7527 major=
adamc@1133 7528 versuffix=
adamc@1133 7529 verstring=""
adamc@1133 7530 fi
adamc@1133 7531
adamc@1133 7532 # Check to see if the archive will have undefined symbols.
adamc@1133 7533 if test "$allow_undefined" = yes; then
adamc@1133 7534 if test "$allow_undefined_flag" = unsupported; then
adamc@1133 7535 func_warning "undefined symbols not allowed in $host shared libraries"
adamc@1133 7536 build_libtool_libs=no
adamc@1133 7537 build_old_libs=yes
adamc@1133 7538 fi
adamc@1133 7539 else
adamc@1133 7540 # Don't allow undefined symbols.
adamc@1133 7541 allow_undefined_flag="$no_undefined_flag"
adamc@1133 7542 fi
adamc@1133 7543
adamc@1133 7544 fi
adamc@1133 7545
adamc@1133 7546 func_generate_dlsyms "$libname" "$libname" "yes"
adam@1459 7547 func_append libobjs " $symfileobj"
adamc@1133 7548 test "X$libobjs" = "X " && libobjs=
adamc@1133 7549
adam@1459 7550 if test "$opt_mode" != relink; then
adamc@1133 7551 # Remove our outputs, but don't remove object files since they
adamc@1133 7552 # may have been created when compiling PIC objects.
adamc@1133 7553 removelist=
adamc@1133 7554 tempremovelist=`$ECHO "$output_objdir/*"`
adamc@1133 7555 for p in $tempremovelist; do
adamc@1133 7556 case $p in
adamc@1133 7557 *.$objext | *.gcno)
adamc@1133 7558 ;;
adamc@1133 7559 $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
adamc@1133 7560 if test "X$precious_files_regex" != "X"; then
adamc@1133 7561 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
adamc@1133 7562 then
adamc@1133 7563 continue
adamc@1133 7564 fi
adamc@1133 7565 fi
adam@1459 7566 func_append removelist " $p"
adamc@1133 7567 ;;
adamc@1133 7568 *) ;;
adamc@1133 7569 esac
adamc@1133 7570 done
adamc@1133 7571 test -n "$removelist" && \
adamc@1133 7572 func_show_eval "${RM}r \$removelist"
adamc@1133 7573 fi
adamc@1133 7574
adamc@1133 7575 # Now set the variables for building old libraries.
adamc@1133 7576 if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
adam@1459 7577 func_append oldlibs " $output_objdir/$libname.$libext"
adamc@1133 7578
adamc@1133 7579 # Transform .lo files to .o files.
adam@1459 7580 oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
adamc@1133 7581 fi
adamc@1133 7582
adamc@1133 7583 # Eliminate all temporary directories.
adamc@1133 7584 #for path in $notinst_path; do
adam@1459 7585 # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
adam@1459 7586 # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
adam@1459 7587 # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
adamc@1133 7588 #done
adamc@1133 7589
adamc@1133 7590 if test -n "$xrpath"; then
adamc@1133 7591 # If the user specified any rpath flags, then add them.
adamc@1133 7592 temp_xrpath=
adamc@1133 7593 for libdir in $xrpath; do
adam@1459 7594 func_replace_sysroot "$libdir"
adam@1459 7595 func_append temp_xrpath " -R$func_replace_sysroot_result"
adamc@1133 7596 case "$finalize_rpath " in
adamc@1133 7597 *" $libdir "*) ;;
adam@1459 7598 *) func_append finalize_rpath " $libdir" ;;
adamc@1133 7599 esac
adamc@1133 7600 done
adamc@1133 7601 if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
adamc@1133 7602 dependency_libs="$temp_xrpath $dependency_libs"
adamc@1133 7603 fi
adamc@1133 7604 fi
adamc@1133 7605
adamc@1133 7606 # Make sure dlfiles contains only unique files that won't be dlpreopened
adamc@1133 7607 old_dlfiles="$dlfiles"
adamc@1133 7608 dlfiles=
adamc@1133 7609 for lib in $old_dlfiles; do
adamc@1133 7610 case " $dlprefiles $dlfiles " in
adamc@1133 7611 *" $lib "*) ;;
adam@1459 7612 *) func_append dlfiles " $lib" ;;
adamc@1133 7613 esac
adamc@1133 7614 done
adamc@1133 7615
adamc@1133 7616 # Make sure dlprefiles contains only unique files
adamc@1133 7617 old_dlprefiles="$dlprefiles"
adamc@1133 7618 dlprefiles=
adamc@1133 7619 for lib in $old_dlprefiles; do
adamc@1133 7620 case "$dlprefiles " in
adamc@1133 7621 *" $lib "*) ;;
adam@1459 7622 *) func_append dlprefiles " $lib" ;;
adamc@1133 7623 esac
adamc@1133 7624 done
adamc@1133 7625
adamc@1133 7626 if test "$build_libtool_libs" = yes; then
adamc@1133 7627 if test -n "$rpath"; then
adamc@1133 7628 case $host in
adam@1459 7629 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
adamc@1133 7630 # these systems don't actually have a c library (as such)!
adamc@1133 7631 ;;
adamc@1133 7632 *-*-rhapsody* | *-*-darwin1.[012])
adamc@1133 7633 # Rhapsody C library is in the System framework
adam@1459 7634 func_append deplibs " System.ltframework"
adamc@1133 7635 ;;
adamc@1133 7636 *-*-netbsd*)
adamc@1133 7637 # Don't link with libc until the a.out ld.so is fixed.
adamc@1133 7638 ;;
adamc@1133 7639 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
adamc@1133 7640 # Do not include libc due to us having libc/libc_r.
adamc@1133 7641 ;;
adamc@1133 7642 *-*-sco3.2v5* | *-*-sco5v6*)
adamc@1133 7643 # Causes problems with __ctype
adamc@1133 7644 ;;
adamc@1133 7645 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
adamc@1133 7646 # Compiler inserts libc in the correct place for threads to work
adamc@1133 7647 ;;
adamc@1133 7648 *)
adamc@1133 7649 # Add libc to deplibs on all other systems if necessary.
adamc@1133 7650 if test "$build_libtool_need_lc" = "yes"; then
adam@1459 7651 func_append deplibs " -lc"
adamc@1133 7652 fi
adamc@1133 7653 ;;
adamc@1133 7654 esac
adamc@1133 7655 fi
adamc@1133 7656
adamc@1133 7657 # Transform deplibs into only deplibs that can be linked in shared.
adamc@1133 7658 name_save=$name
adamc@1133 7659 libname_save=$libname
adamc@1133 7660 release_save=$release
adamc@1133 7661 versuffix_save=$versuffix
adamc@1133 7662 major_save=$major
adamc@1133 7663 # I'm not sure if I'm treating the release correctly. I think
adamc@1133 7664 # release should show up in the -l (ie -lgmp5) so we don't want to
adamc@1133 7665 # add it in twice. Is that correct?
adamc@1133 7666 release=""
adamc@1133 7667 versuffix=""
adamc@1133 7668 major=""
adamc@1133 7669 newdeplibs=
adamc@1133 7670 droppeddeps=no
adamc@1133 7671 case $deplibs_check_method in
adamc@1133 7672 pass_all)
adamc@1133 7673 # Don't check for shared/static. Everything works.
adamc@1133 7674 # This might be a little naive. We might want to check
adamc@1133 7675 # whether the library exists or not. But this is on
adamc@1133 7676 # osf3 & osf4 and I'm not really sure... Just
adamc@1133 7677 # implementing what was already the behavior.
adamc@1133 7678 newdeplibs=$deplibs
adamc@1133 7679 ;;
adamc@1133 7680 test_compile)
adamc@1133 7681 # This code stresses the "libraries are programs" paradigm to its
adamc@1133 7682 # limits. Maybe even breaks it. We compile a program, linking it
adamc@1133 7683 # against the deplibs as a proxy for the library. Then we can check
adamc@1133 7684 # whether they linked in statically or dynamically with ldd.
adamc@1133 7685 $opt_dry_run || $RM conftest.c
adamc@1133 7686 cat > conftest.c <<EOF
adamc@1133 7687 int main() { return 0; }
adamc@1133 7688 EOF
adamc@1133 7689 $opt_dry_run || $RM conftest
adamc@1133 7690 if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
adamc@1133 7691 ldd_output=`ldd conftest`
adamc@1133 7692 for i in $deplibs; do
adamc@1133 7693 case $i in
adamc@1133 7694 -l*)
adamc@1133 7695 func_stripname -l '' "$i"
adamc@1133 7696 name=$func_stripname_result
adamc@1133 7697 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
adamc@1133 7698 case " $predeps $postdeps " in
adamc@1133 7699 *" $i "*)
adam@1459 7700 func_append newdeplibs " $i"
adamc@1133 7701 i=""
adamc@1133 7702 ;;
adamc@1133 7703 esac
adamc@1133 7704 fi
adamc@1133 7705 if test -n "$i" ; then
adamc@1133 7706 libname=`eval "\\$ECHO \"$libname_spec\""`
adamc@1133 7707 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
adamc@1133 7708 set dummy $deplib_matches; shift
adamc@1133 7709 deplib_match=$1
adamc@1133 7710 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
adam@1459 7711 func_append newdeplibs " $i"
adamc@1133 7712 else
adamc@1133 7713 droppeddeps=yes
adam@1459 7714 echo
adamc@1133 7715 $ECHO "*** Warning: dynamic linker does not accept needed library $i."
adam@1459 7716 echo "*** I have the capability to make that library automatically link in when"
adam@1459 7717 echo "*** you link to this library. But I can only do this if you have a"
adam@1459 7718 echo "*** shared version of the library, which I believe you do not have"
adam@1459 7719 echo "*** because a test_compile did reveal that the linker did not use it for"
adam@1459 7720 echo "*** its dynamic dependency list that programs get resolved with at runtime."
adamc@1133 7721 fi
adamc@1133 7722 fi
adamc@1133 7723 ;;
adamc@1133 7724 *)
adam@1459 7725 func_append newdeplibs " $i"
adamc@1133 7726 ;;
adamc@1133 7727 esac
adamc@1133 7728 done
adamc@1133 7729 else
adamc@1133 7730 # Error occurred in the first compile. Let's try to salvage
adamc@1133 7731 # the situation: Compile a separate program for each library.
adamc@1133 7732 for i in $deplibs; do
adamc@1133 7733 case $i in
adamc@1133 7734 -l*)
adamc@1133 7735 func_stripname -l '' "$i"
adamc@1133 7736 name=$func_stripname_result
adamc@1133 7737 $opt_dry_run || $RM conftest
adamc@1133 7738 if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
adamc@1133 7739 ldd_output=`ldd conftest`
adamc@1133 7740 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
adamc@1133 7741 case " $predeps $postdeps " in
adamc@1133 7742 *" $i "*)
adam@1459 7743 func_append newdeplibs " $i"
adamc@1133 7744 i=""
adamc@1133 7745 ;;
adamc@1133 7746 esac
adamc@1133 7747 fi
adamc@1133 7748 if test -n "$i" ; then
adamc@1133 7749 libname=`eval "\\$ECHO \"$libname_spec\""`
adamc@1133 7750 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
adamc@1133 7751 set dummy $deplib_matches; shift
adamc@1133 7752 deplib_match=$1
adamc@1133 7753 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
adam@1459 7754 func_append newdeplibs " $i"
adamc@1133 7755 else
adamc@1133 7756 droppeddeps=yes
adam@1459 7757 echo
adamc@1133 7758 $ECHO "*** Warning: dynamic linker does not accept needed library $i."
adam@1459 7759 echo "*** I have the capability to make that library automatically link in when"
adam@1459 7760 echo "*** you link to this library. But I can only do this if you have a"
adam@1459 7761 echo "*** shared version of the library, which you do not appear to have"
adam@1459 7762 echo "*** because a test_compile did reveal that the linker did not use this one"
adam@1459 7763 echo "*** as a dynamic dependency that programs can get resolved with at runtime."
adamc@1133 7764 fi
adamc@1133 7765 fi
adamc@1133 7766 else
adamc@1133 7767 droppeddeps=yes
adam@1459 7768 echo
adamc@1133 7769 $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
adam@1459 7770 echo "*** make it link in! You will probably need to install it or some"
adam@1459 7771 echo "*** library that it depends on before this library will be fully"
adam@1459 7772 echo "*** functional. Installing it before continuing would be even better."
adamc@1133 7773 fi
adamc@1133 7774 ;;
adamc@1133 7775 *)
adam@1459 7776 func_append newdeplibs " $i"
adamc@1133 7777 ;;
adamc@1133 7778 esac
adamc@1133 7779 done
adamc@1133 7780 fi
adamc@1133 7781 ;;
adamc@1133 7782 file_magic*)
adamc@1133 7783 set dummy $deplibs_check_method; shift
adamc@1133 7784 file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
adamc@1133 7785 for a_deplib in $deplibs; do
adamc@1133 7786 case $a_deplib in
adamc@1133 7787 -l*)
adamc@1133 7788 func_stripname -l '' "$a_deplib"
adamc@1133 7789 name=$func_stripname_result
adamc@1133 7790 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
adamc@1133 7791 case " $predeps $postdeps " in
adamc@1133 7792 *" $a_deplib "*)
adam@1459 7793 func_append newdeplibs " $a_deplib"
adamc@1133 7794 a_deplib=""
adamc@1133 7795 ;;
adamc@1133 7796 esac
adamc@1133 7797 fi
adamc@1133 7798 if test -n "$a_deplib" ; then
adamc@1133 7799 libname=`eval "\\$ECHO \"$libname_spec\""`
adam@1459 7800 if test -n "$file_magic_glob"; then
adam@1459 7801 libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
adam@1459 7802 else
adam@1459 7803 libnameglob=$libname
adam@1459 7804 fi
adam@1459 7805 test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
adamc@1133 7806 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
adam@1459 7807 if test "$want_nocaseglob" = yes; then
adam@1459 7808 shopt -s nocaseglob
adam@1459 7809 potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
adam@1459 7810 $nocaseglob
adam@1459 7811 else
adam@1459 7812 potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
adam@1459 7813 fi
adamc@1133 7814 for potent_lib in $potential_libs; do
adamc@1133 7815 # Follow soft links.
adamc@1133 7816 if ls -lLd "$potent_lib" 2>/dev/null |
adamc@1133 7817 $GREP " -> " >/dev/null; then
adamc@1133 7818 continue
adamc@1133 7819 fi
adamc@1133 7820 # The statement above tries to avoid entering an
adamc@1133 7821 # endless loop below, in case of cyclic links.
adamc@1133 7822 # We might still enter an endless loop, since a link
adamc@1133 7823 # loop can be closed while we follow links,
adamc@1133 7824 # but so what?
adamc@1133 7825 potlib="$potent_lib"
adamc@1133 7826 while test -h "$potlib" 2>/dev/null; do
adamc@1133 7827 potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
adamc@1133 7828 case $potliblink in
adamc@1133 7829 [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
adam@1459 7830 *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
adamc@1133 7831 esac
adamc@1133 7832 done
adamc@1133 7833 if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
adamc@1133 7834 $SED -e 10q |
adamc@1133 7835 $EGREP "$file_magic_regex" > /dev/null; then
adam@1459 7836 func_append newdeplibs " $a_deplib"
adamc@1133 7837 a_deplib=""
adamc@1133 7838 break 2
adamc@1133 7839 fi
adamc@1133 7840 done
adamc@1133 7841 done
adamc@1133 7842 fi
adamc@1133 7843 if test -n "$a_deplib" ; then
adamc@1133 7844 droppeddeps=yes
adam@1459 7845 echo
adamc@1133 7846 $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
adam@1459 7847 echo "*** I have the capability to make that library automatically link in when"
adam@1459 7848 echo "*** you link to this library. But I can only do this if you have a"
adam@1459 7849 echo "*** shared version of the library, which you do not appear to have"
adam@1459 7850 echo "*** because I did check the linker path looking for a file starting"
adamc@1133 7851 if test -z "$potlib" ; then
adamc@1133 7852 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
adamc@1133 7853 else
adamc@1133 7854 $ECHO "*** with $libname and none of the candidates passed a file format test"
adamc@1133 7855 $ECHO "*** using a file magic. Last file checked: $potlib"
adamc@1133 7856 fi
adamc@1133 7857 fi
adamc@1133 7858 ;;
adamc@1133 7859 *)
adamc@1133 7860 # Add a -L argument.
adam@1459 7861 func_append newdeplibs " $a_deplib"
adamc@1133 7862 ;;
adamc@1133 7863 esac
adamc@1133 7864 done # Gone through all deplibs.
adamc@1133 7865 ;;
adamc@1133 7866 match_pattern*)
adamc@1133 7867 set dummy $deplibs_check_method; shift
adamc@1133 7868 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
adamc@1133 7869 for a_deplib in $deplibs; do
adamc@1133 7870 case $a_deplib in
adamc@1133 7871 -l*)
adamc@1133 7872 func_stripname -l '' "$a_deplib"
adamc@1133 7873 name=$func_stripname_result
adamc@1133 7874 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
adamc@1133 7875 case " $predeps $postdeps " in
adamc@1133 7876 *" $a_deplib "*)
adam@1459 7877 func_append newdeplibs " $a_deplib"
adamc@1133 7878 a_deplib=""
adamc@1133 7879 ;;
adamc@1133 7880 esac
adamc@1133 7881 fi
adamc@1133 7882 if test -n "$a_deplib" ; then
adamc@1133 7883 libname=`eval "\\$ECHO \"$libname_spec\""`
adamc@1133 7884 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
adamc@1133 7885 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
adamc@1133 7886 for potent_lib in $potential_libs; do
adamc@1133 7887 potlib="$potent_lib" # see symlink-check above in file_magic test
adam@1459 7888 if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
adamc@1133 7889 $EGREP "$match_pattern_regex" > /dev/null; then
adam@1459 7890 func_append newdeplibs " $a_deplib"
adamc@1133 7891 a_deplib=""
adamc@1133 7892 break 2
adamc@1133 7893 fi
adamc@1133 7894 done
adamc@1133 7895 done
adamc@1133 7896 fi
adamc@1133 7897 if test -n "$a_deplib" ; then
adamc@1133 7898 droppeddeps=yes
adam@1459 7899 echo
adamc@1133 7900 $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
adam@1459 7901 echo "*** I have the capability to make that library automatically link in when"
adam@1459 7902 echo "*** you link to this library. But I can only do this if you have a"
adam@1459 7903 echo "*** shared version of the library, which you do not appear to have"
adam@1459 7904 echo "*** because I did check the linker path looking for a file starting"
adamc@1133 7905 if test -z "$potlib" ; then
adamc@1133 7906 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
adamc@1133 7907 else
adamc@1133 7908 $ECHO "*** with $libname and none of the candidates passed a file format test"
adamc@1133 7909 $ECHO "*** using a regex pattern. Last file checked: $potlib"
adamc@1133 7910 fi
adamc@1133 7911 fi
adamc@1133 7912 ;;
adamc@1133 7913 *)
adamc@1133 7914 # Add a -L argument.
adam@1459 7915 func_append newdeplibs " $a_deplib"
adamc@1133 7916 ;;
adamc@1133 7917 esac
adamc@1133 7918 done # Gone through all deplibs.
adamc@1133 7919 ;;
adamc@1133 7920 none | unknown | *)
adamc@1133 7921 newdeplibs=""
adam@1459 7922 tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
adamc@1133 7923 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
adamc@1133 7924 for i in $predeps $postdeps ; do
adamc@1133 7925 # can't use Xsed below, because $i might contain '/'
adam@1459 7926 tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
adamc@1133 7927 done
adamc@1133 7928 fi
adam@1459 7929 case $tmp_deplibs in
adam@1459 7930 *[!\ \ ]*)
adam@1459 7931 echo
adamc@1133 7932 if test "X$deplibs_check_method" = "Xnone"; then
adam@1459 7933 echo "*** Warning: inter-library dependencies are not supported in this platform."
adamc@1133 7934 else
adam@1459 7935 echo "*** Warning: inter-library dependencies are not known to be supported."
adamc@1133 7936 fi
adam@1459 7937 echo "*** All declared inter-library dependencies are being dropped."
adamc@1133 7938 droppeddeps=yes
adam@1459 7939 ;;
adam@1459 7940 esac
adamc@1133 7941 ;;
adamc@1133 7942 esac
adamc@1133 7943 versuffix=$versuffix_save
adamc@1133 7944 major=$major_save
adamc@1133 7945 release=$release_save
adamc@1133 7946 libname=$libname_save
adamc@1133 7947 name=$name_save
adamc@1133 7948
adamc@1133 7949 case $host in
adamc@1133 7950 *-*-rhapsody* | *-*-darwin1.[012])
adamc@1133 7951 # On Rhapsody replace the C library with the System framework
adam@1459 7952 newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
adamc@1133 7953 ;;
adamc@1133 7954 esac
adamc@1133 7955
adamc@1133 7956 if test "$droppeddeps" = yes; then
adamc@1133 7957 if test "$module" = yes; then
adam@1459 7958 echo
adam@1459 7959 echo "*** Warning: libtool could not satisfy all declared inter-library"
adamc@1133 7960 $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
adam@1459 7961 echo "*** a static module, that should work as long as the dlopening"
adam@1459 7962 echo "*** application is linked with the -dlopen flag."
adamc@1133 7963 if test -z "$global_symbol_pipe"; then
adam@1459 7964 echo
adam@1459 7965 echo "*** However, this would only work if libtool was able to extract symbol"
adam@1459 7966 echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
adam@1459 7967 echo "*** not find such a program. So, this module is probably useless."
adam@1459 7968 echo "*** \`nm' from GNU binutils and a full rebuild may help."
adamc@1133 7969 fi
adamc@1133 7970 if test "$build_old_libs" = no; then
adamc@1133 7971 oldlibs="$output_objdir/$libname.$libext"
adamc@1133 7972 build_libtool_libs=module
adamc@1133 7973 build_old_libs=yes
adamc@1133 7974 else
adamc@1133 7975 build_libtool_libs=no
adamc@1133 7976 fi
adamc@1133 7977 else
adam@1459 7978 echo "*** The inter-library dependencies that have been dropped here will be"
adam@1459 7979 echo "*** automatically added whenever a program is linked with this library"
adam@1459 7980 echo "*** or is declared to -dlopen it."
adamc@1133 7981
adamc@1133 7982 if test "$allow_undefined" = no; then
adam@1459 7983 echo
adam@1459 7984 echo "*** Since this library must not contain undefined symbols,"
adam@1459 7985 echo "*** because either the platform does not support them or"
adam@1459 7986 echo "*** it was explicitly requested with -no-undefined,"
adam@1459 7987 echo "*** libtool will only create a static version of it."
adamc@1133 7988 if test "$build_old_libs" = no; then
adamc@1133 7989 oldlibs="$output_objdir/$libname.$libext"
adamc@1133 7990 build_libtool_libs=module
adamc@1133 7991 build_old_libs=yes
adamc@1133 7992 else
adamc@1133 7993 build_libtool_libs=no
adamc@1133 7994 fi
adamc@1133 7995 fi
adamc@1133 7996 fi
adamc@1133 7997 fi
adamc@1133 7998 # Done checking deplibs!
adamc@1133 7999 deplibs=$newdeplibs
adamc@1133 8000 fi
adamc@1133 8001 # Time to change all our "foo.ltframework" stuff back to "-framework foo"
adamc@1133 8002 case $host in
adamc@1133 8003 *-*-darwin*)
adam@1459 8004 newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
adam@1459 8005 new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
adam@1459 8006 deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
adamc@1133 8007 ;;
adamc@1133 8008 esac
adamc@1133 8009
adamc@1133 8010 # move library search paths that coincide with paths to not yet
adamc@1133 8011 # installed libraries to the beginning of the library search list
adamc@1133 8012 new_libs=
adamc@1133 8013 for path in $notinst_path; do
adamc@1133 8014 case " $new_libs " in
adamc@1133 8015 *" -L$path/$objdir "*) ;;
adamc@1133 8016 *)
adamc@1133 8017 case " $deplibs " in
adamc@1133 8018 *" -L$path/$objdir "*)
adam@1459 8019 func_append new_libs " -L$path/$objdir" ;;
adamc@1133 8020 esac
adamc@1133 8021 ;;
adamc@1133 8022 esac
adamc@1133 8023 done
adamc@1133 8024 for deplib in $deplibs; do
adamc@1133 8025 case $deplib in
adamc@1133 8026 -L*)
adamc@1133 8027 case " $new_libs " in
adamc@1133 8028 *" $deplib "*) ;;
adam@1459 8029 *) func_append new_libs " $deplib" ;;
adamc@1133 8030 esac
adamc@1133 8031 ;;
adam@1459 8032 *) func_append new_libs " $deplib" ;;
adamc@1133 8033 esac
adamc@1133 8034 done
adamc@1133 8035 deplibs="$new_libs"
adamc@1133 8036
adamc@1133 8037 # All the library-specific variables (install_libdir is set above).
adamc@1133 8038 library_names=
adamc@1133 8039 old_library=
adamc@1133 8040 dlname=
adamc@1133 8041
adamc@1133 8042 # Test again, we may have decided not to build it any more
adamc@1133 8043 if test "$build_libtool_libs" = yes; then
adam@1599 8044 # Remove ${wl} instances when linking with ld.
adam@1599 8045 # FIXME: should test the right _cmds variable.
adam@1599 8046 case $archive_cmds in
adam@1599 8047 *\$LD\ *) wl= ;;
adam@1599 8048 esac
adamc@1133 8049 if test "$hardcode_into_libs" = yes; then
adamc@1133 8050 # Hardcode the library paths
adamc@1133 8051 hardcode_libdirs=
adamc@1133 8052 dep_rpath=
adamc@1133 8053 rpath="$finalize_rpath"
adam@1459 8054 test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
adamc@1133 8055 for libdir in $rpath; do
adamc@1133 8056 if test -n "$hardcode_libdir_flag_spec"; then
adamc@1133 8057 if test -n "$hardcode_libdir_separator"; then
adam@1459 8058 func_replace_sysroot "$libdir"
adam@1459 8059 libdir=$func_replace_sysroot_result
adamc@1133 8060 if test -z "$hardcode_libdirs"; then
adamc@1133 8061 hardcode_libdirs="$libdir"
adamc@1133 8062 else
adamc@1133 8063 # Just accumulate the unique libdirs.
adamc@1133 8064 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
adamc@1133 8065 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
adamc@1133 8066 ;;
adamc@1133 8067 *)
adam@1459 8068 func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
adamc@1133 8069 ;;
adamc@1133 8070 esac
adamc@1133 8071 fi
adamc@1133 8072 else
adamc@1133 8073 eval flag=\"$hardcode_libdir_flag_spec\"
adam@1459 8074 func_append dep_rpath " $flag"
adamc@1133 8075 fi
adamc@1133 8076 elif test -n "$runpath_var"; then
adamc@1133 8077 case "$perm_rpath " in
adamc@1133 8078 *" $libdir "*) ;;
adam@1599 8079 *) func_append perm_rpath " $libdir" ;;
adamc@1133 8080 esac
adamc@1133 8081 fi
adamc@1133 8082 done
adamc@1133 8083 # Substitute the hardcoded libdirs into the rpath.
adamc@1133 8084 if test -n "$hardcode_libdir_separator" &&
adamc@1133 8085 test -n "$hardcode_libdirs"; then
adamc@1133 8086 libdir="$hardcode_libdirs"
adam@1599 8087 eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
adamc@1133 8088 fi
adamc@1133 8089 if test -n "$runpath_var" && test -n "$perm_rpath"; then
adamc@1133 8090 # We should set the runpath_var.
adamc@1133 8091 rpath=
adamc@1133 8092 for dir in $perm_rpath; do
adam@1459 8093 func_append rpath "$dir:"
adamc@1133 8094 done
adamc@1133 8095 eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
adamc@1133 8096 fi
adamc@1133 8097 test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
adamc@1133 8098 fi
adamc@1133 8099
adamc@1133 8100 shlibpath="$finalize_shlibpath"
adam@1459 8101 test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
adamc@1133 8102 if test -n "$shlibpath"; then
adamc@1133 8103 eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
adamc@1133 8104 fi
adamc@1133 8105
adamc@1133 8106 # Get the real and link names of the library.
adamc@1133 8107 eval shared_ext=\"$shrext_cmds\"
adamc@1133 8108 eval library_names=\"$library_names_spec\"
adamc@1133 8109 set dummy $library_names
adamc@1133 8110 shift
adamc@1133 8111 realname="$1"
adamc@1133 8112 shift
adamc@1133 8113
adamc@1133 8114 if test -n "$soname_spec"; then
adamc@1133 8115 eval soname=\"$soname_spec\"
adamc@1133 8116 else
adamc@1133 8117 soname="$realname"
adamc@1133 8118 fi
adamc@1133 8119 if test -z "$dlname"; then
adamc@1133 8120 dlname=$soname
adamc@1133 8121 fi
adamc@1133 8122
adamc@1133 8123 lib="$output_objdir/$realname"
adamc@1133 8124 linknames=
adamc@1133 8125 for link
adamc@1133 8126 do
adam@1459 8127 func_append linknames " $link"
adamc@1133 8128 done
adamc@1133 8129
adamc@1133 8130 # Use standard objects if they are pic
adam@1459 8131 test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
adamc@1133 8132 test "X$libobjs" = "X " && libobjs=
adamc@1133 8133
adamc@1133 8134 delfiles=
adamc@1133 8135 if test -n "$export_symbols" && test -n "$include_expsyms"; then
adamc@1133 8136 $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
adamc@1133 8137 export_symbols="$output_objdir/$libname.uexp"
adam@1459 8138 func_append delfiles " $export_symbols"
adamc@1133 8139 fi
adamc@1133 8140
adamc@1133 8141 orig_export_symbols=
adamc@1133 8142 case $host_os in
adamc@1133 8143 cygwin* | mingw* | cegcc*)
adamc@1133 8144 if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
adamc@1133 8145 # exporting using user supplied symfile
adamc@1133 8146 if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
adamc@1133 8147 # and it's NOT already a .def file. Must figure out
adamc@1133 8148 # which of the given symbols are data symbols and tag
adamc@1133 8149 # them as such. So, trigger use of export_symbols_cmds.
adamc@1133 8150 # export_symbols gets reassigned inside the "prepare
adamc@1133 8151 # the list of exported symbols" if statement, so the
adamc@1133 8152 # include_expsyms logic still works.
adamc@1133 8153 orig_export_symbols="$export_symbols"
adamc@1133 8154 export_symbols=
adamc@1133 8155 always_export_symbols=yes
adamc@1133 8156 fi
adamc@1133 8157 fi
adamc@1133 8158 ;;
adamc@1133 8159 esac
adamc@1133 8160
adamc@1133 8161 # Prepare the list of exported symbols
adamc@1133 8162 if test -z "$export_symbols"; then
adamc@1133 8163 if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
adamc@1133 8164 func_verbose "generating symbol list for \`$libname.la'"
adamc@1133 8165 export_symbols="$output_objdir/$libname.exp"
adamc@1133 8166 $opt_dry_run || $RM $export_symbols
adamc@1133 8167 cmds=$export_symbols_cmds
adamc@1133 8168 save_ifs="$IFS"; IFS='~'
adam@1459 8169 for cmd1 in $cmds; do
adamc@1133 8170 IFS="$save_ifs"
adam@1459 8171 # Take the normal branch if the nm_file_list_spec branch
adam@1459 8172 # doesn't work or if tool conversion is not needed.
adam@1459 8173 case $nm_file_list_spec~$to_tool_file_cmd in
adam@1459 8174 *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
adam@1459 8175 try_normal_branch=yes
adam@1459 8176 eval cmd=\"$cmd1\"
adam@1459 8177 func_len " $cmd"
adam@1459 8178 len=$func_len_result
adam@1459 8179 ;;
adam@1459 8180 *)
adam@1459 8181 try_normal_branch=no
adam@1459 8182 ;;
adam@1459 8183 esac
adam@1459 8184 if test "$try_normal_branch" = yes \
adam@1459 8185 && { test "$len" -lt "$max_cmd_len" \
adam@1459 8186 || test "$max_cmd_len" -le -1; }
adam@1459 8187 then
adamc@1133 8188 func_show_eval "$cmd" 'exit $?'
adamc@1133 8189 skipped_export=false
adam@1459 8190 elif test -n "$nm_file_list_spec"; then
adam@1459 8191 func_basename "$output"
adam@1459 8192 output_la=$func_basename_result
adam@1459 8193 save_libobjs=$libobjs
adam@1459 8194 save_output=$output
adam@1459 8195 output=${output_objdir}/${output_la}.nm
adam@1459 8196 func_to_tool_file "$output"
adam@1459 8197 libobjs=$nm_file_list_spec$func_to_tool_file_result
adam@1459 8198 func_append delfiles " $output"
adam@1459 8199 func_verbose "creating $NM input file list: $output"
adam@1459 8200 for obj in $save_libobjs; do
adam@1459 8201 func_to_tool_file "$obj"
adam@1459 8202 $ECHO "$func_to_tool_file_result"
adam@1459 8203 done > "$output"
adam@1459 8204 eval cmd=\"$cmd1\"
adam@1459 8205 func_show_eval "$cmd" 'exit $?'
adam@1459 8206 output=$save_output
adam@1459 8207 libobjs=$save_libobjs
adam@1459 8208 skipped_export=false
adamc@1133 8209 else
adamc@1133 8210 # The command line is too long to execute in one step.
adamc@1133 8211 func_verbose "using reloadable object file for export list..."
adamc@1133 8212 skipped_export=:
adamc@1133 8213 # Break out early, otherwise skipped_export may be
adamc@1133 8214 # set to false by a later but shorter cmd.
adamc@1133 8215 break
adamc@1133 8216 fi
adamc@1133 8217 done
adamc@1133 8218 IFS="$save_ifs"
adamc@1133 8219 if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
adamc@1133 8220 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
adamc@1133 8221 func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
adamc@1133 8222 fi
adamc@1133 8223 fi
adamc@1133 8224 fi
adamc@1133 8225
adamc@1133 8226 if test -n "$export_symbols" && test -n "$include_expsyms"; then
adamc@1133 8227 tmp_export_symbols="$export_symbols"
adamc@1133 8228 test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
adam@1459 8229 $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
adamc@1133 8230 fi
adamc@1133 8231
adamc@1133 8232 if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
adamc@1133 8233 # The given exports_symbols file has to be filtered, so filter it.
adamc@1133 8234 func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
adamc@1133 8235 # FIXME: $output_objdir/$libname.filter potentially contains lots of
adamc@1133 8236 # 's' commands which not all seds can handle. GNU sed should be fine
adamc@1133 8237 # though. Also, the filter scales superlinearly with the number of
adamc@1133 8238 # global variables. join(1) would be nice here, but unfortunately
adamc@1133 8239 # isn't a blessed tool.
adamc@1133 8240 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
adam@1459 8241 func_append delfiles " $export_symbols $output_objdir/$libname.filter"
adamc@1133 8242 export_symbols=$output_objdir/$libname.def
adamc@1133 8243 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
adamc@1133 8244 fi
adamc@1133 8245
adamc@1133 8246 tmp_deplibs=
adamc@1133 8247 for test_deplib in $deplibs; do
adamc@1133 8248 case " $convenience " in
adamc@1133 8249 *" $test_deplib "*) ;;
adamc@1133 8250 *)
adam@1459 8251 func_append tmp_deplibs " $test_deplib"
adamc@1133 8252 ;;
adamc@1133 8253 esac
adamc@1133 8254 done
adamc@1133 8255 deplibs="$tmp_deplibs"
adamc@1133 8256
adamc@1133 8257 if test -n "$convenience"; then
adamc@1133 8258 if test -n "$whole_archive_flag_spec" &&
adamc@1133 8259 test "$compiler_needs_object" = yes &&
adamc@1133 8260 test -z "$libobjs"; then
adamc@1133 8261 # extract the archives, so we have objects to list.
adamc@1133 8262 # TODO: could optimize this to just extract one archive.
adamc@1133 8263 whole_archive_flag_spec=
adamc@1133 8264 fi
adamc@1133 8265 if test -n "$whole_archive_flag_spec"; then
adamc@1133 8266 save_libobjs=$libobjs
adamc@1133 8267 eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
adamc@1133 8268 test "X$libobjs" = "X " && libobjs=
adamc@1133 8269 else
adamc@1133 8270 gentop="$output_objdir/${outputname}x"
adam@1459 8271 func_append generated " $gentop"
adamc@1133 8272
adamc@1133 8273 func_extract_archives $gentop $convenience
adam@1459 8274 func_append libobjs " $func_extract_archives_result"
adamc@1133 8275 test "X$libobjs" = "X " && libobjs=
adamc@1133 8276 fi
adamc@1133 8277 fi
adamc@1133 8278
adamc@1133 8279 if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
adamc@1133 8280 eval flag=\"$thread_safe_flag_spec\"
adam@1459 8281 func_append linker_flags " $flag"
adamc@1133 8282 fi
adamc@1133 8283
adamc@1133 8284 # Make a backup of the uninstalled library when relinking
adam@1459 8285 if test "$opt_mode" = relink; then
adamc@1133 8286 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
adamc@1133 8287 fi
adamc@1133 8288
adamc@1133 8289 # Do each of the archive commands.
adamc@1133 8290 if test "$module" = yes && test -n "$module_cmds" ; then
adamc@1133 8291 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
adamc@1133 8292 eval test_cmds=\"$module_expsym_cmds\"
adamc@1133 8293 cmds=$module_expsym_cmds
adamc@1133 8294 else
adamc@1133 8295 eval test_cmds=\"$module_cmds\"
adamc@1133 8296 cmds=$module_cmds
adamc@1133 8297 fi
adamc@1133 8298 else
adamc@1133 8299 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
adamc@1133 8300 eval test_cmds=\"$archive_expsym_cmds\"
adamc@1133 8301 cmds=$archive_expsym_cmds
adamc@1133 8302 else
adamc@1133 8303 eval test_cmds=\"$archive_cmds\"
adamc@1133 8304 cmds=$archive_cmds
adamc@1133 8305 fi
adamc@1133 8306 fi
adamc@1133 8307
adamc@1133 8308 if test "X$skipped_export" != "X:" &&
adamc@1133 8309 func_len " $test_cmds" &&
adamc@1133 8310 len=$func_len_result &&
adamc@1133 8311 test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
adamc@1133 8312 :
adamc@1133 8313 else
adamc@1133 8314 # The command line is too long to link in one step, link piecewise
adamc@1133 8315 # or, if using GNU ld and skipped_export is not :, use a linker
adamc@1133 8316 # script.
adamc@1133 8317
adamc@1133 8318 # Save the value of $output and $libobjs because we want to
adamc@1133 8319 # use them later. If we have whole_archive_flag_spec, we
adamc@1133 8320 # want to use save_libobjs as it was before
adamc@1133 8321 # whole_archive_flag_spec was expanded, because we can't
adamc@1133 8322 # assume the linker understands whole_archive_flag_spec.
adamc@1133 8323 # This may have to be revisited, in case too many
adamc@1133 8324 # convenience libraries get linked in and end up exceeding
adamc@1133 8325 # the spec.
adamc@1133 8326 if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
adamc@1133 8327 save_libobjs=$libobjs
adamc@1133 8328 fi
adamc@1133 8329 save_output=$output
adam@1459 8330 func_basename "$output"
adam@1459 8331 output_la=$func_basename_result
adamc@1133 8332
adamc@1133 8333 # Clear the reloadable object creation command queue and
adamc@1133 8334 # initialize k to one.
adamc@1133 8335 test_cmds=
adamc@1133 8336 concat_cmds=
adamc@1133 8337 objlist=
adamc@1133 8338 last_robj=
adamc@1133 8339 k=1
adamc@1133 8340
adamc@1133 8341 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
adamc@1133 8342 output=${output_objdir}/${output_la}.lnkscript
adamc@1133 8343 func_verbose "creating GNU ld script: $output"
adam@1459 8344 echo 'INPUT (' > $output
adamc@1133 8345 for obj in $save_libobjs
adamc@1133 8346 do
adam@1459 8347 func_to_tool_file "$obj"
adam@1459 8348 $ECHO "$func_to_tool_file_result" >> $output
adamc@1133 8349 done
adam@1459 8350 echo ')' >> $output
adam@1459 8351 func_append delfiles " $output"
adam@1459 8352 func_to_tool_file "$output"
adam@1459 8353 output=$func_to_tool_file_result
adamc@1133 8354 elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
adamc@1133 8355 output=${output_objdir}/${output_la}.lnk
adamc@1133 8356 func_verbose "creating linker input file list: $output"
adamc@1133 8357 : > $output
adamc@1133 8358 set x $save_libobjs
adamc@1133 8359 shift
adamc@1133 8360 firstobj=
adamc@1133 8361 if test "$compiler_needs_object" = yes; then
adamc@1133 8362 firstobj="$1 "
adamc@1133 8363 shift
adamc@1133 8364 fi
adamc@1133 8365 for obj
adamc@1133 8366 do
adam@1459 8367 func_to_tool_file "$obj"
adam@1459 8368 $ECHO "$func_to_tool_file_result" >> $output
adamc@1133 8369 done
adam@1459 8370 func_append delfiles " $output"
adam@1459 8371 func_to_tool_file "$output"
adam@1459 8372 output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
adamc@1133 8373 else
adamc@1133 8374 if test -n "$save_libobjs"; then
adamc@1133 8375 func_verbose "creating reloadable object files..."
adamc@1133 8376 output=$output_objdir/$output_la-${k}.$objext
adamc@1133 8377 eval test_cmds=\"$reload_cmds\"
adamc@1133 8378 func_len " $test_cmds"
adamc@1133 8379 len0=$func_len_result
adamc@1133 8380 len=$len0
adamc@1133 8381
adamc@1133 8382 # Loop over the list of objects to be linked.
adamc@1133 8383 for obj in $save_libobjs
adamc@1133 8384 do
adamc@1133 8385 func_len " $obj"
adamc@1133 8386 func_arith $len + $func_len_result
adamc@1133 8387 len=$func_arith_result
adamc@1133 8388 if test "X$objlist" = X ||
adamc@1133 8389 test "$len" -lt "$max_cmd_len"; then
adamc@1133 8390 func_append objlist " $obj"
adamc@1133 8391 else
adamc@1133 8392 # The command $test_cmds is almost too long, add a
adamc@1133 8393 # command to the queue.
adamc@1133 8394 if test "$k" -eq 1 ; then
adamc@1133 8395 # The first file doesn't have a previous command to add.
adam@1459 8396 reload_objs=$objlist
adam@1459 8397 eval concat_cmds=\"$reload_cmds\"
adamc@1133 8398 else
adamc@1133 8399 # All subsequent reloadable object files will link in
adamc@1133 8400 # the last one created.
adam@1459 8401 reload_objs="$objlist $last_robj"
adam@1459 8402 eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
adamc@1133 8403 fi
adamc@1133 8404 last_robj=$output_objdir/$output_la-${k}.$objext
adamc@1133 8405 func_arith $k + 1
adamc@1133 8406 k=$func_arith_result
adamc@1133 8407 output=$output_objdir/$output_la-${k}.$objext
adam@1459 8408 objlist=" $obj"
adamc@1133 8409 func_len " $last_robj"
adamc@1133 8410 func_arith $len0 + $func_len_result
adamc@1133 8411 len=$func_arith_result
adamc@1133 8412 fi
adamc@1133 8413 done
adamc@1133 8414 # Handle the remaining objects by creating one last
adamc@1133 8415 # reloadable object file. All subsequent reloadable object
adamc@1133 8416 # files will link in the last one created.
adamc@1133 8417 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
adam@1459 8418 reload_objs="$objlist $last_robj"
adam@1459 8419 eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
adamc@1133 8420 if test -n "$last_robj"; then
adamc@1133 8421 eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
adamc@1133 8422 fi
adam@1459 8423 func_append delfiles " $output"
adamc@1133 8424
adamc@1133 8425 else
adamc@1133 8426 output=
adamc@1133 8427 fi
adamc@1133 8428
adamc@1133 8429 if ${skipped_export-false}; then
adamc@1133 8430 func_verbose "generating symbol list for \`$libname.la'"
adamc@1133 8431 export_symbols="$output_objdir/$libname.exp"
adamc@1133 8432 $opt_dry_run || $RM $export_symbols
adamc@1133 8433 libobjs=$output
adamc@1133 8434 # Append the command to create the export file.
adamc@1133 8435 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
adamc@1133 8436 eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
adamc@1133 8437 if test -n "$last_robj"; then
adamc@1133 8438 eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
adamc@1133 8439 fi
adamc@1133 8440 fi
adamc@1133 8441
adamc@1133 8442 test -n "$save_libobjs" &&
adamc@1133 8443 func_verbose "creating a temporary reloadable object file: $output"
adamc@1133 8444
adamc@1133 8445 # Loop through the commands generated above and execute them.
adamc@1133 8446 save_ifs="$IFS"; IFS='~'
adamc@1133 8447 for cmd in $concat_cmds; do
adamc@1133 8448 IFS="$save_ifs"
adamc@1133 8449 $opt_silent || {
adamc@1133 8450 func_quote_for_expand "$cmd"
adamc@1133 8451 eval "func_echo $func_quote_for_expand_result"
adamc@1133 8452 }
adamc@1133 8453 $opt_dry_run || eval "$cmd" || {
adamc@1133 8454 lt_exit=$?
adamc@1133 8455
adamc@1133 8456 # Restore the uninstalled library and exit
adam@1459 8457 if test "$opt_mode" = relink; then
adamc@1133 8458 ( cd "$output_objdir" && \
adamc@1133 8459 $RM "${realname}T" && \
adamc@1133 8460 $MV "${realname}U" "$realname" )
adamc@1133 8461 fi
adamc@1133 8462
adamc@1133 8463 exit $lt_exit
adamc@1133 8464 }
adamc@1133 8465 done
adamc@1133 8466 IFS="$save_ifs"
adamc@1133 8467
adamc@1133 8468 if test -n "$export_symbols_regex" && ${skipped_export-false}; then
adamc@1133 8469 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
adamc@1133 8470 func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
adamc@1133 8471 fi
adamc@1133 8472 fi
adamc@1133 8473
adamc@1133 8474 if ${skipped_export-false}; then
adamc@1133 8475 if test -n "$export_symbols" && test -n "$include_expsyms"; then
adamc@1133 8476 tmp_export_symbols="$export_symbols"
adamc@1133 8477 test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
adam@1459 8478 $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
adamc@1133 8479 fi
adamc@1133 8480
adamc@1133 8481 if test -n "$orig_export_symbols"; then
adamc@1133 8482 # The given exports_symbols file has to be filtered, so filter it.
adamc@1133 8483 func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
adamc@1133 8484 # FIXME: $output_objdir/$libname.filter potentially contains lots of
adamc@1133 8485 # 's' commands which not all seds can handle. GNU sed should be fine
adamc@1133 8486 # though. Also, the filter scales superlinearly with the number of
adamc@1133 8487 # global variables. join(1) would be nice here, but unfortunately
adamc@1133 8488 # isn't a blessed tool.
adamc@1133 8489 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
adam@1459 8490 func_append delfiles " $export_symbols $output_objdir/$libname.filter"
adamc@1133 8491 export_symbols=$output_objdir/$libname.def
adamc@1133 8492 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
adamc@1133 8493 fi
adamc@1133 8494 fi
adamc@1133 8495
adamc@1133 8496 libobjs=$output
adamc@1133 8497 # Restore the value of output.
adamc@1133 8498 output=$save_output
adamc@1133 8499
adamc@1133 8500 if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
adamc@1133 8501 eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
adamc@1133 8502 test "X$libobjs" = "X " && libobjs=
adamc@1133 8503 fi
adamc@1133 8504 # Expand the library linking commands again to reset the
adamc@1133 8505 # value of $libobjs for piecewise linking.
adamc@1133 8506
adamc@1133 8507 # Do each of the archive commands.
adamc@1133 8508 if test "$module" = yes && test -n "$module_cmds" ; then
adamc@1133 8509 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
adamc@1133 8510 cmds=$module_expsym_cmds
adamc@1133 8511 else
adamc@1133 8512 cmds=$module_cmds
adamc@1133 8513 fi
adamc@1133 8514 else
adamc@1133 8515 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
adamc@1133 8516 cmds=$archive_expsym_cmds
adamc@1133 8517 else
adamc@1133 8518 cmds=$archive_cmds
adamc@1133 8519 fi
adamc@1133 8520 fi
adamc@1133 8521 fi
adamc@1133 8522
adamc@1133 8523 if test -n "$delfiles"; then
adamc@1133 8524 # Append the command to remove temporary files to $cmds.
adamc@1133 8525 eval cmds=\"\$cmds~\$RM $delfiles\"
adamc@1133 8526 fi
adamc@1133 8527
adamc@1133 8528 # Add any objects from preloaded convenience libraries
adamc@1133 8529 if test -n "$dlprefiles"; then
adamc@1133 8530 gentop="$output_objdir/${outputname}x"
adam@1459 8531 func_append generated " $gentop"
adamc@1133 8532
adamc@1133 8533 func_extract_archives $gentop $dlprefiles
adam@1459 8534 func_append libobjs " $func_extract_archives_result"
adamc@1133 8535 test "X$libobjs" = "X " && libobjs=
adamc@1133 8536 fi
adamc@1133 8537
adamc@1133 8538 save_ifs="$IFS"; IFS='~'
adamc@1133 8539 for cmd in $cmds; do
adamc@1133 8540 IFS="$save_ifs"
adamc@1133 8541 eval cmd=\"$cmd\"
adamc@1133 8542 $opt_silent || {
adamc@1133 8543 func_quote_for_expand "$cmd"
adamc@1133 8544 eval "func_echo $func_quote_for_expand_result"
adamc@1133 8545 }
adamc@1133 8546 $opt_dry_run || eval "$cmd" || {
adamc@1133 8547 lt_exit=$?
adamc@1133 8548
adamc@1133 8549 # Restore the uninstalled library and exit
adam@1459 8550 if test "$opt_mode" = relink; then
adamc@1133 8551 ( cd "$output_objdir" && \
adamc@1133 8552 $RM "${realname}T" && \
adamc@1133 8553 $MV "${realname}U" "$realname" )
adamc@1133 8554 fi
adamc@1133 8555
adamc@1133 8556 exit $lt_exit
adamc@1133 8557 }
adamc@1133 8558 done
adamc@1133 8559 IFS="$save_ifs"
adamc@1133 8560
adamc@1133 8561 # Restore the uninstalled library and exit
adam@1459 8562 if test "$opt_mode" = relink; then
adamc@1133 8563 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
adamc@1133 8564
adamc@1133 8565 if test -n "$convenience"; then
adamc@1133 8566 if test -z "$whole_archive_flag_spec"; then
adamc@1133 8567 func_show_eval '${RM}r "$gentop"'
adamc@1133 8568 fi
adamc@1133 8569 fi
adamc@1133 8570
adamc@1133 8571 exit $EXIT_SUCCESS
adamc@1133 8572 fi
adamc@1133 8573
adamc@1133 8574 # Create links to the real library.
adamc@1133 8575 for linkname in $linknames; do
adamc@1133 8576 if test "$realname" != "$linkname"; then
adamc@1133 8577 func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
adamc@1133 8578 fi
adamc@1133 8579 done
adamc@1133 8580
adamc@1133 8581 # If -module or -export-dynamic was specified, set the dlname.
adamc@1133 8582 if test "$module" = yes || test "$export_dynamic" = yes; then
adamc@1133 8583 # On all known operating systems, these are identical.
adamc@1133 8584 dlname="$soname"
adamc@1133 8585 fi
adamc@1133 8586 fi
adamc@1133 8587 ;;
adamc@1133 8588
adamc@1133 8589 obj)
adamc@1133 8590 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
adamc@1133 8591 func_warning "\`-dlopen' is ignored for objects"
adamc@1133 8592 fi
adamc@1133 8593
adamc@1133 8594 case " $deplibs" in
adamc@1133 8595 *\ -l* | *\ -L*)
adamc@1133 8596 func_warning "\`-l' and \`-L' are ignored for objects" ;;
adamc@1133 8597 esac
adamc@1133 8598
adamc@1133 8599 test -n "$rpath" && \
adamc@1133 8600 func_warning "\`-rpath' is ignored for objects"
adamc@1133 8601
adamc@1133 8602 test -n "$xrpath" && \
adamc@1133 8603 func_warning "\`-R' is ignored for objects"
adamc@1133 8604
adamc@1133 8605 test -n "$vinfo" && \
adamc@1133 8606 func_warning "\`-version-info' is ignored for objects"
adamc@1133 8607
adamc@1133 8608 test -n "$release" && \
adamc@1133 8609 func_warning "\`-release' is ignored for objects"
adamc@1133 8610
adamc@1133 8611 case $output in
adamc@1133 8612 *.lo)
adamc@1133 8613 test -n "$objs$old_deplibs" && \
adamc@1133 8614 func_fatal_error "cannot build library object \`$output' from non-libtool objects"
adamc@1133 8615
adamc@1133 8616 libobj=$output
adamc@1133 8617 func_lo2o "$libobj"
adamc@1133 8618 obj=$func_lo2o_result
adamc@1133 8619 ;;
adamc@1133 8620 *)
adamc@1133 8621 libobj=
adamc@1133 8622 obj="$output"
adamc@1133 8623 ;;
adamc@1133 8624 esac
adamc@1133 8625
adamc@1133 8626 # Delete the old objects.
adamc@1133 8627 $opt_dry_run || $RM $obj $libobj
adamc@1133 8628
adamc@1133 8629 # Objects from convenience libraries. This assumes
adamc@1133 8630 # single-version convenience libraries. Whenever we create
adamc@1133 8631 # different ones for PIC/non-PIC, this we'll have to duplicate
adamc@1133 8632 # the extraction.
adamc@1133 8633 reload_conv_objs=
adamc@1133 8634 gentop=
adamc@1133 8635 # reload_cmds runs $LD directly, so let us get rid of
adamc@1133 8636 # -Wl from whole_archive_flag_spec and hope we can get by with
adamc@1133 8637 # turning comma into space..
adamc@1133 8638 wl=
adamc@1133 8639
adamc@1133 8640 if test -n "$convenience"; then
adamc@1133 8641 if test -n "$whole_archive_flag_spec"; then
adamc@1133 8642 eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
adam@1459 8643 reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
adamc@1133 8644 else
adamc@1133 8645 gentop="$output_objdir/${obj}x"
adam@1459 8646 func_append generated " $gentop"
adamc@1133 8647
adamc@1133 8648 func_extract_archives $gentop $convenience
adamc@1133 8649 reload_conv_objs="$reload_objs $func_extract_archives_result"
adamc@1133 8650 fi
adamc@1133 8651 fi
adamc@1133 8652
adam@1459 8653 # If we're not building shared, we need to use non_pic_objs
adam@1459 8654 test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
adam@1459 8655
adamc@1133 8656 # Create the old-style object.
adam@1459 8657 reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
adamc@1133 8658
adamc@1133 8659 output="$obj"
adamc@1133 8660 func_execute_cmds "$reload_cmds" 'exit $?'
adamc@1133 8661
adamc@1133 8662 # Exit if we aren't doing a library object file.
adamc@1133 8663 if test -z "$libobj"; then
adamc@1133 8664 if test -n "$gentop"; then
adamc@1133 8665 func_show_eval '${RM}r "$gentop"'
adamc@1133 8666 fi
adamc@1133 8667
adamc@1133 8668 exit $EXIT_SUCCESS
adamc@1133 8669 fi
adamc@1133 8670
adamc@1133 8671 if test "$build_libtool_libs" != yes; then
adamc@1133 8672 if test -n "$gentop"; then
adamc@1133 8673 func_show_eval '${RM}r "$gentop"'
adamc@1133 8674 fi
adamc@1133 8675
adamc@1133 8676 # Create an invalid libtool object if no PIC, so that we don't
adamc@1133 8677 # accidentally link it into a program.
adamc@1133 8678 # $show "echo timestamp > $libobj"
adamc@1133 8679 # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
adamc@1133 8680 exit $EXIT_SUCCESS
adamc@1133 8681 fi
adamc@1133 8682
adamc@1133 8683 if test -n "$pic_flag" || test "$pic_mode" != default; then
adamc@1133 8684 # Only do commands if we really have different PIC objects.
adamc@1133 8685 reload_objs="$libobjs $reload_conv_objs"
adamc@1133 8686 output="$libobj"
adamc@1133 8687 func_execute_cmds "$reload_cmds" 'exit $?'
adamc@1133 8688 fi
adamc@1133 8689
adamc@1133 8690 if test -n "$gentop"; then
adamc@1133 8691 func_show_eval '${RM}r "$gentop"'
adamc@1133 8692 fi
adamc@1133 8693
adamc@1133 8694 exit $EXIT_SUCCESS
adamc@1133 8695 ;;
adamc@1133 8696
adamc@1133 8697 prog)
adamc@1133 8698 case $host in
adamc@1133 8699 *cygwin*) func_stripname '' '.exe' "$output"
adamc@1133 8700 output=$func_stripname_result.exe;;
adamc@1133 8701 esac
adamc@1133 8702 test -n "$vinfo" && \
adamc@1133 8703 func_warning "\`-version-info' is ignored for programs"
adamc@1133 8704
adamc@1133 8705 test -n "$release" && \
adamc@1133 8706 func_warning "\`-release' is ignored for programs"
adamc@1133 8707
adamc@1133 8708 test "$preload" = yes \
adamc@1133 8709 && test "$dlopen_support" = unknown \
adamc@1133 8710 && test "$dlopen_self" = unknown \
adamc@1133 8711 && test "$dlopen_self_static" = unknown && \
adamc@1133 8712 func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
adamc@1133 8713
adamc@1133 8714 case $host in
adamc@1133 8715 *-*-rhapsody* | *-*-darwin1.[012])
adamc@1133 8716 # On Rhapsody replace the C library is the System framework
adam@1459 8717 compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
adam@1459 8718 finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
adamc@1133 8719 ;;
adamc@1133 8720 esac
adamc@1133 8721
adamc@1133 8722 case $host in
adamc@1133 8723 *-*-darwin*)
adamc@1133 8724 # Don't allow lazy linking, it breaks C++ global constructors
adamc@1133 8725 # But is supposedly fixed on 10.4 or later (yay!).
adamc@1133 8726 if test "$tagname" = CXX ; then
adamc@1133 8727 case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
adamc@1133 8728 10.[0123])
adam@1459 8729 func_append compile_command " ${wl}-bind_at_load"
adam@1459 8730 func_append finalize_command " ${wl}-bind_at_load"
adamc@1133 8731 ;;
adamc@1133 8732 esac
adamc@1133 8733 fi
adamc@1133 8734 # Time to change all our "foo.ltframework" stuff back to "-framework foo"
adam@1459 8735 compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
adam@1459 8736 finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
adamc@1133 8737 ;;
adamc@1133 8738 esac
adamc@1133 8739
adamc@1133 8740
adamc@1133 8741 # move library search paths that coincide with paths to not yet
adamc@1133 8742 # installed libraries to the beginning of the library search list
adamc@1133 8743 new_libs=
adamc@1133 8744 for path in $notinst_path; do
adamc@1133 8745 case " $new_libs " in
adamc@1133 8746 *" -L$path/$objdir "*) ;;
adamc@1133 8747 *)
adamc@1133 8748 case " $compile_deplibs " in
adamc@1133 8749 *" -L$path/$objdir "*)
adam@1459 8750 func_append new_libs " -L$path/$objdir" ;;
adamc@1133 8751 esac
adamc@1133 8752 ;;
adamc@1133 8753 esac
adamc@1133 8754 done
adamc@1133 8755 for deplib in $compile_deplibs; do
adamc@1133 8756 case $deplib in
adamc@1133 8757 -L*)
adamc@1133 8758 case " $new_libs " in
adamc@1133 8759 *" $deplib "*) ;;
adam@1459 8760 *) func_append new_libs " $deplib" ;;
adamc@1133 8761 esac
adamc@1133 8762 ;;
adam@1459 8763 *) func_append new_libs " $deplib" ;;
adamc@1133 8764 esac
adamc@1133 8765 done
adamc@1133 8766 compile_deplibs="$new_libs"
adamc@1133 8767
adamc@1133 8768
adam@1459 8769 func_append compile_command " $compile_deplibs"
adam@1459 8770 func_append finalize_command " $finalize_deplibs"
adamc@1133 8771
adamc@1133 8772 if test -n "$rpath$xrpath"; then
adamc@1133 8773 # If the user specified any rpath flags, then add them.
adamc@1133 8774 for libdir in $rpath $xrpath; do
adamc@1133 8775 # This is the magic to use -rpath.
adamc@1133 8776 case "$finalize_rpath " in
adamc@1133 8777 *" $libdir "*) ;;
adam@1459 8778 *) func_append finalize_rpath " $libdir" ;;
adamc@1133 8779 esac
adamc@1133 8780 done
adamc@1133 8781 fi
adamc@1133 8782
adamc@1133 8783 # Now hardcode the library paths
adamc@1133 8784 rpath=
adamc@1133 8785 hardcode_libdirs=
adamc@1133 8786 for libdir in $compile_rpath $finalize_rpath; do
adamc@1133 8787 if test -n "$hardcode_libdir_flag_spec"; then
adamc@1133 8788 if test -n "$hardcode_libdir_separator"; then
adamc@1133 8789 if test -z "$hardcode_libdirs"; then
adamc@1133 8790 hardcode_libdirs="$libdir"
adamc@1133 8791 else
adamc@1133 8792 # Just accumulate the unique libdirs.
adamc@1133 8793 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
adamc@1133 8794 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
adamc@1133 8795 ;;
adamc@1133 8796 *)
adam@1459 8797 func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
adamc@1133 8798 ;;
adamc@1133 8799 esac
adamc@1133 8800 fi
adamc@1133 8801 else
adamc@1133 8802 eval flag=\"$hardcode_libdir_flag_spec\"
adam@1459 8803 func_append rpath " $flag"
adamc@1133 8804 fi
adamc@1133 8805 elif test -n "$runpath_var"; then
adamc@1133 8806 case "$perm_rpath " in
adamc@1133 8807 *" $libdir "*) ;;
adam@1459 8808 *) func_append perm_rpath " $libdir" ;;
adamc@1133 8809 esac
adamc@1133 8810 fi
adamc@1133 8811 case $host in
adamc@1133 8812 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
adamc@1133 8813 testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
adamc@1133 8814 case :$dllsearchpath: in
adamc@1133 8815 *":$libdir:"*) ;;
adamc@1133 8816 ::) dllsearchpath=$libdir;;
adam@1459 8817 *) func_append dllsearchpath ":$libdir";;
adamc@1133 8818 esac
adamc@1133 8819 case :$dllsearchpath: in
adamc@1133 8820 *":$testbindir:"*) ;;
adamc@1133 8821 ::) dllsearchpath=$testbindir;;
adam@1459 8822 *) func_append dllsearchpath ":$testbindir";;
adamc@1133 8823 esac
adamc@1133 8824 ;;
adamc@1133 8825 esac
adamc@1133 8826 done
adamc@1133 8827 # Substitute the hardcoded libdirs into the rpath.
adamc@1133 8828 if test -n "$hardcode_libdir_separator" &&
adamc@1133 8829 test -n "$hardcode_libdirs"; then
adamc@1133 8830 libdir="$hardcode_libdirs"
adamc@1133 8831 eval rpath=\" $hardcode_libdir_flag_spec\"
adamc@1133 8832 fi
adamc@1133 8833 compile_rpath="$rpath"
adamc@1133 8834
adamc@1133 8835 rpath=
adamc@1133 8836 hardcode_libdirs=
adamc@1133 8837 for libdir in $finalize_rpath; do
adamc@1133 8838 if test -n "$hardcode_libdir_flag_spec"; then
adamc@1133 8839 if test -n "$hardcode_libdir_separator"; then
adamc@1133 8840 if test -z "$hardcode_libdirs"; then
adamc@1133 8841 hardcode_libdirs="$libdir"
adamc@1133 8842 else
adamc@1133 8843 # Just accumulate the unique libdirs.
adamc@1133 8844 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
adamc@1133 8845 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
adamc@1133 8846 ;;
adamc@1133 8847 *)
adam@1459 8848 func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
adamc@1133 8849 ;;
adamc@1133 8850 esac
adamc@1133 8851 fi
adamc@1133 8852 else
adamc@1133 8853 eval flag=\"$hardcode_libdir_flag_spec\"
adam@1459 8854 func_append rpath " $flag"
adamc@1133 8855 fi
adamc@1133 8856 elif test -n "$runpath_var"; then
adamc@1133 8857 case "$finalize_perm_rpath " in
adamc@1133 8858 *" $libdir "*) ;;
adam@1459 8859 *) func_append finalize_perm_rpath " $libdir" ;;
adamc@1133 8860 esac
adamc@1133 8861 fi
adamc@1133 8862 done
adamc@1133 8863 # Substitute the hardcoded libdirs into the rpath.
adamc@1133 8864 if test -n "$hardcode_libdir_separator" &&
adamc@1133 8865 test -n "$hardcode_libdirs"; then
adamc@1133 8866 libdir="$hardcode_libdirs"
adamc@1133 8867 eval rpath=\" $hardcode_libdir_flag_spec\"
adamc@1133 8868 fi
adamc@1133 8869 finalize_rpath="$rpath"
adamc@1133 8870
adamc@1133 8871 if test -n "$libobjs" && test "$build_old_libs" = yes; then
adamc@1133 8872 # Transform all the library objects into standard objects.
adam@1459 8873 compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
adam@1459 8874 finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
adamc@1133 8875 fi
adamc@1133 8876
adamc@1133 8877 func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
adamc@1133 8878
adamc@1133 8879 # template prelinking step
adamc@1133 8880 if test -n "$prelink_cmds"; then
adamc@1133 8881 func_execute_cmds "$prelink_cmds" 'exit $?'
adamc@1133 8882 fi
adamc@1133 8883
adamc@1133 8884 wrappers_required=yes
adamc@1133 8885 case $host in
adam@1459 8886 *cegcc* | *mingw32ce*)
adam@1459 8887 # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
adam@1459 8888 wrappers_required=no
adam@1459 8889 ;;
adamc@1133 8890 *cygwin* | *mingw* )
adamc@1133 8891 if test "$build_libtool_libs" != yes; then
adamc@1133 8892 wrappers_required=no
adamc@1133 8893 fi
adamc@1133 8894 ;;
adamc@1133 8895 *)
adamc@1133 8896 if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
adamc@1133 8897 wrappers_required=no
adamc@1133 8898 fi
adamc@1133 8899 ;;
adamc@1133 8900 esac
adamc@1133 8901 if test "$wrappers_required" = no; then
adamc@1133 8902 # Replace the output file specification.
adam@1459 8903 compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
adamc@1133 8904 link_command="$compile_command$compile_rpath"
adamc@1133 8905
adamc@1133 8906 # We have no uninstalled library dependencies, so finalize right now.
adamc@1133 8907 exit_status=0
adamc@1133 8908 func_show_eval "$link_command" 'exit_status=$?'
adamc@1133 8909
adam@1459 8910 if test -n "$postlink_cmds"; then
adam@1459 8911 func_to_tool_file "$output"
adam@1459 8912 postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
adam@1459 8913 func_execute_cmds "$postlink_cmds" 'exit $?'
adam@1459 8914 fi
adam@1459 8915
adamc@1133 8916 # Delete the generated files.
adamc@1133 8917 if test -f "$output_objdir/${outputname}S.${objext}"; then
adamc@1133 8918 func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
adamc@1133 8919 fi
adamc@1133 8920
adamc@1133 8921 exit $exit_status
adamc@1133 8922 fi
adamc@1133 8923
adamc@1133 8924 if test -n "$compile_shlibpath$finalize_shlibpath"; then
adamc@1133 8925 compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
adamc@1133 8926 fi
adamc@1133 8927 if test -n "$finalize_shlibpath"; then
adamc@1133 8928 finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
adamc@1133 8929 fi
adamc@1133 8930
adamc@1133 8931 compile_var=
adamc@1133 8932 finalize_var=
adamc@1133 8933 if test -n "$runpath_var"; then
adamc@1133 8934 if test -n "$perm_rpath"; then
adamc@1133 8935 # We should set the runpath_var.
adamc@1133 8936 rpath=
adamc@1133 8937 for dir in $perm_rpath; do
adam@1459 8938 func_append rpath "$dir:"
adamc@1133 8939 done
adamc@1133 8940 compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
adamc@1133 8941 fi
adamc@1133 8942 if test -n "$finalize_perm_rpath"; then
adamc@1133 8943 # We should set the runpath_var.
adamc@1133 8944 rpath=
adamc@1133 8945 for dir in $finalize_perm_rpath; do
adam@1459 8946 func_append rpath "$dir:"
adamc@1133 8947 done
adamc@1133 8948 finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
adamc@1133 8949 fi
adamc@1133 8950 fi
adamc@1133 8951
adamc@1133 8952 if test "$no_install" = yes; then
adamc@1133 8953 # We don't need to create a wrapper script.
adamc@1133 8954 link_command="$compile_var$compile_command$compile_rpath"
adamc@1133 8955 # Replace the output file specification.
adam@1459 8956 link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
adamc@1133 8957 # Delete the old output file.
adamc@1133 8958 $opt_dry_run || $RM $output
adamc@1133 8959 # Link the executable and exit
adamc@1133 8960 func_show_eval "$link_command" 'exit $?'
adam@1459 8961
adam@1459 8962 if test -n "$postlink_cmds"; then
adam@1459 8963 func_to_tool_file "$output"
adam@1459 8964 postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
adam@1459 8965 func_execute_cmds "$postlink_cmds" 'exit $?'
adam@1459 8966 fi
adam@1459 8967
adamc@1133 8968 exit $EXIT_SUCCESS
adamc@1133 8969 fi
adamc@1133 8970
adamc@1133 8971 if test "$hardcode_action" = relink; then
adamc@1133 8972 # Fast installation is not supported
adamc@1133 8973 link_command="$compile_var$compile_command$compile_rpath"
adamc@1133 8974 relink_command="$finalize_var$finalize_command$finalize_rpath"
adamc@1133 8975
adamc@1133 8976 func_warning "this platform does not like uninstalled shared libraries"
adamc@1133 8977 func_warning "\`$output' will be relinked during installation"
adamc@1133 8978 else
adamc@1133 8979 if test "$fast_install" != no; then
adamc@1133 8980 link_command="$finalize_var$compile_command$finalize_rpath"
adamc@1133 8981 if test "$fast_install" = yes; then
adam@1459 8982 relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
adamc@1133 8983 else
adamc@1133 8984 # fast_install is set to needless
adamc@1133 8985 relink_command=
adamc@1133 8986 fi
adamc@1133 8987 else
adamc@1133 8988 link_command="$compile_var$compile_command$compile_rpath"
adamc@1133 8989 relink_command="$finalize_var$finalize_command$finalize_rpath"
adamc@1133 8990 fi
adamc@1133 8991 fi
adamc@1133 8992
adamc@1133 8993 # Replace the output file specification.
adam@1459 8994 link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
adamc@1133 8995
adamc@1133 8996 # Delete the old output files.
adamc@1133 8997 $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
adamc@1133 8998
adamc@1133 8999 func_show_eval "$link_command" 'exit $?'
adamc@1133 9000
adam@1459 9001 if test -n "$postlink_cmds"; then
adam@1459 9002 func_to_tool_file "$output_objdir/$outputname"
adam@1459 9003 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'`
adam@1459 9004 func_execute_cmds "$postlink_cmds" 'exit $?'
adam@1459 9005 fi
adam@1459 9006
adamc@1133 9007 # Now create the wrapper script.
adamc@1133 9008 func_verbose "creating $output"
adamc@1133 9009
adamc@1133 9010 # Quote the relink command for shipping.
adamc@1133 9011 if test -n "$relink_command"; then
adamc@1133 9012 # Preserve any variables that may affect compiler behavior
adamc@1133 9013 for var in $variables_saved_for_relink; do
adamc@1133 9014 if eval test -z \"\${$var+set}\"; then
adamc@1133 9015 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
adamc@1133 9016 elif eval var_value=\$$var; test -z "$var_value"; then
adamc@1133 9017 relink_command="$var=; export $var; $relink_command"
adamc@1133 9018 else
adamc@1133 9019 func_quote_for_eval "$var_value"
adamc@1133 9020 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
adamc@1133 9021 fi
adamc@1133 9022 done
adamc@1133 9023 relink_command="(cd `pwd`; $relink_command)"
adam@1459 9024 relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
adamc@1133 9025 fi
adamc@1133 9026
adamc@1133 9027 # Only actually do things if not in dry run mode.
adamc@1133 9028 $opt_dry_run || {
adamc@1133 9029 # win32 will think the script is a binary if it has
adamc@1133 9030 # a .exe suffix, so we strip it off here.
adamc@1133 9031 case $output in
adamc@1133 9032 *.exe) func_stripname '' '.exe' "$output"
adamc@1133 9033 output=$func_stripname_result ;;
adamc@1133 9034 esac
adamc@1133 9035 # test for cygwin because mv fails w/o .exe extensions
adamc@1133 9036 case $host in
adamc@1133 9037 *cygwin*)
adamc@1133 9038 exeext=.exe
adamc@1133 9039 func_stripname '' '.exe' "$outputname"
adamc@1133 9040 outputname=$func_stripname_result ;;
adamc@1133 9041 *) exeext= ;;
adamc@1133 9042 esac
adamc@1133 9043 case $host in
adamc@1133 9044 *cygwin* | *mingw* )
adamc@1133 9045 func_dirname_and_basename "$output" "" "."
adamc@1133 9046 output_name=$func_basename_result
adamc@1133 9047 output_path=$func_dirname_result
adamc@1133 9048 cwrappersource="$output_path/$objdir/lt-$output_name.c"
adamc@1133 9049 cwrapper="$output_path/$output_name.exe"
adamc@1133 9050 $RM $cwrappersource $cwrapper
adamc@1133 9051 trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
adamc@1133 9052
adamc@1133 9053 func_emit_cwrapperexe_src > $cwrappersource
adamc@1133 9054
adamc@1133 9055 # The wrapper executable is built using the $host compiler,
adamc@1133 9056 # because it contains $host paths and files. If cross-
adamc@1133 9057 # compiling, it, like the target executable, must be
adamc@1133 9058 # executed on the $host or under an emulation environment.
adamc@1133 9059 $opt_dry_run || {
adamc@1133 9060 $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
adamc@1133 9061 $STRIP $cwrapper
adamc@1133 9062 }
adamc@1133 9063
adamc@1133 9064 # Now, create the wrapper script for func_source use:
adamc@1133 9065 func_ltwrapper_scriptname $cwrapper
adamc@1133 9066 $RM $func_ltwrapper_scriptname_result
adamc@1133 9067 trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
adamc@1133 9068 $opt_dry_run || {
adamc@1133 9069 # note: this script will not be executed, so do not chmod.
adamc@1133 9070 if test "x$build" = "x$host" ; then
adamc@1133 9071 $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
adamc@1133 9072 else
adamc@1133 9073 func_emit_wrapper no > $func_ltwrapper_scriptname_result
adamc@1133 9074 fi
adamc@1133 9075 }
adamc@1133 9076 ;;
adamc@1133 9077 * )
adamc@1133 9078 $RM $output
adamc@1133 9079 trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
adamc@1133 9080
adamc@1133 9081 func_emit_wrapper no > $output
adamc@1133 9082 chmod +x $output
adamc@1133 9083 ;;
adamc@1133 9084 esac
adamc@1133 9085 }
adamc@1133 9086 exit $EXIT_SUCCESS
adamc@1133 9087 ;;
adamc@1133 9088 esac
adamc@1133 9089
adamc@1133 9090 # See if we need to build an old-fashioned archive.
adamc@1133 9091 for oldlib in $oldlibs; do
adamc@1133 9092
adamc@1133 9093 if test "$build_libtool_libs" = convenience; then
adamc@1133 9094 oldobjs="$libobjs_save $symfileobj"
adamc@1133 9095 addlibs="$convenience"
adamc@1133 9096 build_libtool_libs=no
adamc@1133 9097 else
adamc@1133 9098 if test "$build_libtool_libs" = module; then
adamc@1133 9099 oldobjs="$libobjs_save"
adamc@1133 9100 build_libtool_libs=no
adamc@1133 9101 else
adamc@1133 9102 oldobjs="$old_deplibs $non_pic_objects"
adamc@1133 9103 if test "$preload" = yes && test -f "$symfileobj"; then
adam@1459 9104 func_append oldobjs " $symfileobj"
adamc@1133 9105 fi
adamc@1133 9106 fi
adamc@1133 9107 addlibs="$old_convenience"
adamc@1133 9108 fi
adamc@1133 9109
adamc@1133 9110 if test -n "$addlibs"; then
adamc@1133 9111 gentop="$output_objdir/${outputname}x"
adam@1459 9112 func_append generated " $gentop"
adamc@1133 9113
adamc@1133 9114 func_extract_archives $gentop $addlibs
adam@1459 9115 func_append oldobjs " $func_extract_archives_result"
adamc@1133 9116 fi
adamc@1133 9117
adamc@1133 9118 # Do each command in the archive commands.
adamc@1133 9119 if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
adamc@1133 9120 cmds=$old_archive_from_new_cmds
adamc@1133 9121 else
adamc@1133 9122
adamc@1133 9123 # Add any objects from preloaded convenience libraries
adamc@1133 9124 if test -n "$dlprefiles"; then
adamc@1133 9125 gentop="$output_objdir/${outputname}x"
adam@1459 9126 func_append generated " $gentop"
adamc@1133 9127
adamc@1133 9128 func_extract_archives $gentop $dlprefiles
adam@1459 9129 func_append oldobjs " $func_extract_archives_result"
adamc@1133 9130 fi
adamc@1133 9131
adamc@1133 9132 # POSIX demands no paths to be encoded in archives. We have
adamc@1133 9133 # to avoid creating archives with duplicate basenames if we
adamc@1133 9134 # might have to extract them afterwards, e.g., when creating a
adamc@1133 9135 # static archive out of a convenience library, or when linking
adamc@1133 9136 # the entirety of a libtool archive into another (currently
adamc@1133 9137 # not supported by libtool).
adamc@1133 9138 if (for obj in $oldobjs
adamc@1133 9139 do
adamc@1133 9140 func_basename "$obj"
adamc@1133 9141 $ECHO "$func_basename_result"
adamc@1133 9142 done | sort | sort -uc >/dev/null 2>&1); then
adamc@1133 9143 :
adamc@1133 9144 else
adam@1459 9145 echo "copying selected object files to avoid basename conflicts..."
adamc@1133 9146 gentop="$output_objdir/${outputname}x"
adam@1459 9147 func_append generated " $gentop"
adamc@1133 9148 func_mkdir_p "$gentop"
adamc@1133 9149 save_oldobjs=$oldobjs
adamc@1133 9150 oldobjs=
adamc@1133 9151 counter=1
adamc@1133 9152 for obj in $save_oldobjs
adamc@1133 9153 do
adamc@1133 9154 func_basename "$obj"
adamc@1133 9155 objbase="$func_basename_result"
adamc@1133 9156 case " $oldobjs " in
adamc@1133 9157 " ") oldobjs=$obj ;;
adamc@1133 9158 *[\ /]"$objbase "*)
adamc@1133 9159 while :; do
adamc@1133 9160 # Make sure we don't pick an alternate name that also
adamc@1133 9161 # overlaps.
adamc@1133 9162 newobj=lt$counter-$objbase
adamc@1133 9163 func_arith $counter + 1
adamc@1133 9164 counter=$func_arith_result
adamc@1133 9165 case " $oldobjs " in
adamc@1133 9166 *[\ /]"$newobj "*) ;;
adamc@1133 9167 *) if test ! -f "$gentop/$newobj"; then break; fi ;;
adamc@1133 9168 esac
adamc@1133 9169 done
adamc@1133 9170 func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
adam@1459 9171 func_append oldobjs " $gentop/$newobj"
adamc@1133 9172 ;;
adam@1459 9173 *) func_append oldobjs " $obj" ;;
adamc@1133 9174 esac
adamc@1133 9175 done
adamc@1133 9176 fi
adam@1599 9177 func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
adam@1599 9178 tool_oldlib=$func_to_tool_file_result
adamc@1133 9179 eval cmds=\"$old_archive_cmds\"
adamc@1133 9180
adamc@1133 9181 func_len " $cmds"
adamc@1133 9182 len=$func_len_result
adamc@1133 9183 if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
adamc@1133 9184 cmds=$old_archive_cmds
adam@1459 9185 elif test -n "$archiver_list_spec"; then
adam@1459 9186 func_verbose "using command file archive linking..."
adam@1459 9187 for obj in $oldobjs
adam@1459 9188 do
adam@1459 9189 func_to_tool_file "$obj"
adam@1459 9190 $ECHO "$func_to_tool_file_result"
adam@1459 9191 done > $output_objdir/$libname.libcmd
adam@1459 9192 func_to_tool_file "$output_objdir/$libname.libcmd"
adam@1459 9193 oldobjs=" $archiver_list_spec$func_to_tool_file_result"
adam@1459 9194 cmds=$old_archive_cmds
adamc@1133 9195 else
adamc@1133 9196 # the command line is too long to link in one step, link in parts
adamc@1133 9197 func_verbose "using piecewise archive linking..."
adamc@1133 9198 save_RANLIB=$RANLIB
adamc@1133 9199 RANLIB=:
adamc@1133 9200 objlist=
adamc@1133 9201 concat_cmds=
adamc@1133 9202 save_oldobjs=$oldobjs
adamc@1133 9203 oldobjs=
adamc@1133 9204 # Is there a better way of finding the last object in the list?
adamc@1133 9205 for obj in $save_oldobjs
adamc@1133 9206 do
adamc@1133 9207 last_oldobj=$obj
adamc@1133 9208 done
adamc@1133 9209 eval test_cmds=\"$old_archive_cmds\"
adamc@1133 9210 func_len " $test_cmds"
adamc@1133 9211 len0=$func_len_result
adamc@1133 9212 len=$len0
adamc@1133 9213 for obj in $save_oldobjs
adamc@1133 9214 do
adamc@1133 9215 func_len " $obj"
adamc@1133 9216 func_arith $len + $func_len_result
adamc@1133 9217 len=$func_arith_result
adamc@1133 9218 func_append objlist " $obj"
adamc@1133 9219 if test "$len" -lt "$max_cmd_len"; then
adamc@1133 9220 :
adamc@1133 9221 else
adamc@1133 9222 # the above command should be used before it gets too long
adamc@1133 9223 oldobjs=$objlist
adamc@1133 9224 if test "$obj" = "$last_oldobj" ; then
adamc@1133 9225 RANLIB=$save_RANLIB
adamc@1133 9226 fi
adamc@1133 9227 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
adamc@1133 9228 eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
adamc@1133 9229 objlist=
adamc@1133 9230 len=$len0
adamc@1133 9231 fi
adamc@1133 9232 done
adamc@1133 9233 RANLIB=$save_RANLIB
adamc@1133 9234 oldobjs=$objlist
adamc@1133 9235 if test "X$oldobjs" = "X" ; then
adamc@1133 9236 eval cmds=\"\$concat_cmds\"
adamc@1133 9237 else
adamc@1133 9238 eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
adamc@1133 9239 fi
adamc@1133 9240 fi
adamc@1133 9241 fi
adamc@1133 9242 func_execute_cmds "$cmds" 'exit $?'
adamc@1133 9243 done
adamc@1133 9244
adamc@1133 9245 test -n "$generated" && \
adamc@1133 9246 func_show_eval "${RM}r$generated"
adamc@1133 9247
adamc@1133 9248 # Now create the libtool archive.
adamc@1133 9249 case $output in
adamc@1133 9250 *.la)
adamc@1133 9251 old_library=
adamc@1133 9252 test "$build_old_libs" = yes && old_library="$libname.$libext"
adamc@1133 9253 func_verbose "creating $output"
adamc@1133 9254
adamc@1133 9255 # Preserve any variables that may affect compiler behavior
adamc@1133 9256 for var in $variables_saved_for_relink; do
adamc@1133 9257 if eval test -z \"\${$var+set}\"; then
adamc@1133 9258 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
adamc@1133 9259 elif eval var_value=\$$var; test -z "$var_value"; then
adamc@1133 9260 relink_command="$var=; export $var; $relink_command"
adamc@1133 9261 else
adamc@1133 9262 func_quote_for_eval "$var_value"
adamc@1133 9263 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
adamc@1133 9264 fi
adamc@1133 9265 done
adamc@1133 9266 # Quote the link command for shipping.
adamc@1133 9267 relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
adam@1459 9268 relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
adamc@1133 9269 if test "$hardcode_automatic" = yes ; then
adamc@1133 9270 relink_command=
adamc@1133 9271 fi
adamc@1133 9272
adamc@1133 9273 # Only create the output if not a dry run.
adamc@1133 9274 $opt_dry_run || {
adamc@1133 9275 for installed in no yes; do
adamc@1133 9276 if test "$installed" = yes; then
adamc@1133 9277 if test -z "$install_libdir"; then
adamc@1133 9278 break
adamc@1133 9279 fi
adamc@1133 9280 output="$output_objdir/$outputname"i
adamc@1133 9281 # Replace all uninstalled libtool libraries with the installed ones
adamc@1133 9282 newdependency_libs=
adamc@1133 9283 for deplib in $dependency_libs; do
adamc@1133 9284 case $deplib in
adamc@1133 9285 *.la)
adamc@1133 9286 func_basename "$deplib"
adamc@1133 9287 name="$func_basename_result"
adam@1599 9288 func_resolve_sysroot "$deplib"
adam@1599 9289 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
adamc@1133 9290 test -z "$libdir" && \
adamc@1133 9291 func_fatal_error "\`$deplib' is not a valid libtool archive"
adam@1459 9292 func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
adamc@1133 9293 ;;
adam@1459 9294 -L*)
adam@1459 9295 func_stripname -L '' "$deplib"
adam@1459 9296 func_replace_sysroot "$func_stripname_result"
adam@1459 9297 func_append newdependency_libs " -L$func_replace_sysroot_result"
adam@1459 9298 ;;
adam@1459 9299 -R*)
adam@1459 9300 func_stripname -R '' "$deplib"
adam@1459 9301 func_replace_sysroot "$func_stripname_result"
adam@1459 9302 func_append newdependency_libs " -R$func_replace_sysroot_result"
adam@1459 9303 ;;
adam@1459 9304 *) func_append newdependency_libs " $deplib" ;;
adamc@1133 9305 esac
adamc@1133 9306 done
adamc@1133 9307 dependency_libs="$newdependency_libs"
adamc@1133 9308 newdlfiles=
adamc@1133 9309
adamc@1133 9310 for lib in $dlfiles; do
adamc@1133 9311 case $lib in
adamc@1133 9312 *.la)
adamc@1133 9313 func_basename "$lib"
adamc@1133 9314 name="$func_basename_result"
adamc@1133 9315 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
adamc@1133 9316 test -z "$libdir" && \
adamc@1133 9317 func_fatal_error "\`$lib' is not a valid libtool archive"
adam@1459 9318 func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
adamc@1133 9319 ;;
adam@1459 9320 *) func_append newdlfiles " $lib" ;;
adamc@1133 9321 esac
adamc@1133 9322 done
adamc@1133 9323 dlfiles="$newdlfiles"
adamc@1133 9324 newdlprefiles=
adamc@1133 9325 for lib in $dlprefiles; do
adamc@1133 9326 case $lib in
adamc@1133 9327 *.la)
adamc@1133 9328 # Only pass preopened files to the pseudo-archive (for
adamc@1133 9329 # eventual linking with the app. that links it) if we
adamc@1133 9330 # didn't already link the preopened objects directly into
adamc@1133 9331 # the library:
adamc@1133 9332 func_basename "$lib"
adamc@1133 9333 name="$func_basename_result"
adamc@1133 9334 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
adamc@1133 9335 test -z "$libdir" && \
adamc@1133 9336 func_fatal_error "\`$lib' is not a valid libtool archive"
adam@1459 9337 func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
adamc@1133 9338 ;;
adamc@1133 9339 esac
adamc@1133 9340 done
adamc@1133 9341 dlprefiles="$newdlprefiles"
adamc@1133 9342 else
adamc@1133 9343 newdlfiles=
adamc@1133 9344 for lib in $dlfiles; do
adamc@1133 9345 case $lib in
adamc@1133 9346 [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
adamc@1133 9347 *) abs=`pwd`"/$lib" ;;
adamc@1133 9348 esac
adam@1459 9349 func_append newdlfiles " $abs"
adamc@1133 9350 done
adamc@1133 9351 dlfiles="$newdlfiles"
adamc@1133 9352 newdlprefiles=
adamc@1133 9353 for lib in $dlprefiles; do
adamc@1133 9354 case $lib in
adamc@1133 9355 [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
adamc@1133 9356 *) abs=`pwd`"/$lib" ;;
adamc@1133 9357 esac
adam@1459 9358 func_append newdlprefiles " $abs"
adamc@1133 9359 done
adamc@1133 9360 dlprefiles="$newdlprefiles"
adamc@1133 9361 fi
adamc@1133 9362 $RM $output
adamc@1133 9363 # place dlname in correct position for cygwin
adam@1459 9364 # In fact, it would be nice if we could use this code for all target
adam@1459 9365 # systems that can't hard-code library paths into their executables
adam@1459 9366 # and that have no shared library path variable independent of PATH,
adam@1459 9367 # but it turns out we can't easily determine that from inspecting
adam@1459 9368 # libtool variables, so we have to hard-code the OSs to which it
adam@1459 9369 # applies here; at the moment, that means platforms that use the PE
adam@1459 9370 # object format with DLL files. See the long comment at the top of
adam@1459 9371 # tests/bindir.at for full details.
adamc@1133 9372 tdlname=$dlname
adamc@1133 9373 case $host,$output,$installed,$module,$dlname in
adam@1459 9374 *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
adam@1459 9375 # If a -bindir argument was supplied, place the dll there.
adam@1459 9376 if test "x$bindir" != x ;
adam@1459 9377 then
adam@1459 9378 func_relative_path "$install_libdir" "$bindir"
adam@1459 9379 tdlname=$func_relative_path_result$dlname
adam@1459 9380 else
adam@1459 9381 # Otherwise fall back on heuristic.
adam@1459 9382 tdlname=../bin/$dlname
adam@1459 9383 fi
adam@1459 9384 ;;
adamc@1133 9385 esac
adamc@1133 9386 $ECHO > $output "\
adamc@1133 9387 # $outputname - a libtool library file
adamc@1133 9388 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
adamc@1133 9389 #
adamc@1133 9390 # Please DO NOT delete this file!
adamc@1133 9391 # It is necessary for linking the library.
adamc@1133 9392
adamc@1133 9393 # The name that we can dlopen(3).
adamc@1133 9394 dlname='$tdlname'
adamc@1133 9395
adamc@1133 9396 # Names of this library.
adamc@1133 9397 library_names='$library_names'
adamc@1133 9398
adamc@1133 9399 # The name of the static archive.
adamc@1133 9400 old_library='$old_library'
adamc@1133 9401
adamc@1133 9402 # Linker flags that can not go in dependency_libs.
adamc@1133 9403 inherited_linker_flags='$new_inherited_linker_flags'
adamc@1133 9404
adamc@1133 9405 # Libraries that this one depends upon.
adamc@1133 9406 dependency_libs='$dependency_libs'
adamc@1133 9407
adamc@1133 9408 # Names of additional weak libraries provided by this library
adamc@1133 9409 weak_library_names='$weak_libs'
adamc@1133 9410
adamc@1133 9411 # Version information for $libname.
adamc@1133 9412 current=$current
adamc@1133 9413 age=$age
adamc@1133 9414 revision=$revision
adamc@1133 9415
adamc@1133 9416 # Is this an already installed library?
adamc@1133 9417 installed=$installed
adamc@1133 9418
adamc@1133 9419 # Should we warn about portability when linking against -modules?
adamc@1133 9420 shouldnotlink=$module
adamc@1133 9421
adamc@1133 9422 # Files to dlopen/dlpreopen
adamc@1133 9423 dlopen='$dlfiles'
adamc@1133 9424 dlpreopen='$dlprefiles'
adamc@1133 9425
adamc@1133 9426 # Directory that this library needs to be installed in:
adamc@1133 9427 libdir='$install_libdir'"
adamc@1133 9428 if test "$installed" = no && test "$need_relink" = yes; then
adamc@1133 9429 $ECHO >> $output "\
adamc@1133 9430 relink_command=\"$relink_command\""
adamc@1133 9431 fi
adamc@1133 9432 done
adamc@1133 9433 }
adamc@1133 9434
adamc@1133 9435 # Do a symbolic link so that the libtool archive can be found in
adamc@1133 9436 # LD_LIBRARY_PATH before the program is installed.
adamc@1133 9437 func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
adamc@1133 9438 ;;
adamc@1133 9439 esac
adamc@1133 9440 exit $EXIT_SUCCESS
adamc@1133 9441 }
adamc@1133 9442
adam@1459 9443 { test "$opt_mode" = link || test "$opt_mode" = relink; } &&
adamc@1133 9444 func_mode_link ${1+"$@"}
adamc@1133 9445
adamc@1133 9446
adamc@1133 9447 # func_mode_uninstall arg...
adamc@1133 9448 func_mode_uninstall ()
adamc@1133 9449 {
adamc@1133 9450 $opt_debug
adamc@1133 9451 RM="$nonopt"
adamc@1133 9452 files=
adamc@1133 9453 rmforce=
adamc@1133 9454 exit_status=0
adamc@1133 9455
adamc@1133 9456 # This variable tells wrapper scripts just to set variables rather
adamc@1133 9457 # than running their programs.
adamc@1133 9458 libtool_install_magic="$magic"
adamc@1133 9459
adamc@1133 9460 for arg
adamc@1133 9461 do
adamc@1133 9462 case $arg in
adam@1459 9463 -f) func_append RM " $arg"; rmforce=yes ;;
adam@1459 9464 -*) func_append RM " $arg" ;;
adam@1459 9465 *) func_append files " $arg" ;;
adamc@1133 9466 esac
adamc@1133 9467 done
adamc@1133 9468
adamc@1133 9469 test -z "$RM" && \
adamc@1133 9470 func_fatal_help "you must specify an RM program"
adamc@1133 9471
adamc@1133 9472 rmdirs=
adamc@1133 9473
adamc@1133 9474 for file in $files; do
adamc@1133 9475 func_dirname "$file" "" "."
adamc@1133 9476 dir="$func_dirname_result"
adamc@1133 9477 if test "X$dir" = X.; then
adam@1459 9478 odir="$objdir"
adamc@1133 9479 else
adam@1459 9480 odir="$dir/$objdir"
adamc@1133 9481 fi
adamc@1133 9482 func_basename "$file"
adamc@1133 9483 name="$func_basename_result"
adam@1459 9484 test "$opt_mode" = uninstall && odir="$dir"
adam@1459 9485
adam@1459 9486 # Remember odir for removal later, being careful to avoid duplicates
adam@1459 9487 if test "$opt_mode" = clean; then
adamc@1133 9488 case " $rmdirs " in
adam@1459 9489 *" $odir "*) ;;
adam@1459 9490 *) func_append rmdirs " $odir" ;;
adamc@1133 9491 esac
adamc@1133 9492 fi
adamc@1133 9493
adamc@1133 9494 # Don't error if the file doesn't exist and rm -f was used.
adamc@1133 9495 if { test -L "$file"; } >/dev/null 2>&1 ||
adamc@1133 9496 { test -h "$file"; } >/dev/null 2>&1 ||
adamc@1133 9497 test -f "$file"; then
adamc@1133 9498 :
adamc@1133 9499 elif test -d "$file"; then
adamc@1133 9500 exit_status=1
adamc@1133 9501 continue
adamc@1133 9502 elif test "$rmforce" = yes; then
adamc@1133 9503 continue
adamc@1133 9504 fi
adamc@1133 9505
adamc@1133 9506 rmfiles="$file"
adamc@1133 9507
adamc@1133 9508 case $name in
adamc@1133 9509 *.la)
adamc@1133 9510 # Possibly a libtool archive, so verify it.
adamc@1133 9511 if func_lalib_p "$file"; then
adamc@1133 9512 func_source $dir/$name
adamc@1133 9513
adamc@1133 9514 # Delete the libtool libraries and symlinks.
adamc@1133 9515 for n in $library_names; do
adam@1459 9516 func_append rmfiles " $odir/$n"
adamc@1133 9517 done
adam@1459 9518 test -n "$old_library" && func_append rmfiles " $odir/$old_library"
adam@1459 9519
adam@1459 9520 case "$opt_mode" in
adamc@1133 9521 clean)
adam@1459 9522 case " $library_names " in
adamc@1133 9523 *" $dlname "*) ;;
adam@1459 9524 *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
adamc@1133 9525 esac
adam@1459 9526 test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
adamc@1133 9527 ;;
adamc@1133 9528 uninstall)
adamc@1133 9529 if test -n "$library_names"; then
adamc@1133 9530 # Do each command in the postuninstall commands.
adamc@1133 9531 func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
adamc@1133 9532 fi
adamc@1133 9533
adamc@1133 9534 if test -n "$old_library"; then
adamc@1133 9535 # Do each command in the old_postuninstall commands.
adamc@1133 9536 func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
adamc@1133 9537 fi
adamc@1133 9538 # FIXME: should reinstall the best remaining shared library.
adamc@1133 9539 ;;
adamc@1133 9540 esac
adamc@1133 9541 fi
adamc@1133 9542 ;;
adamc@1133 9543
adamc@1133 9544 *.lo)
adamc@1133 9545 # Possibly a libtool object, so verify it.
adamc@1133 9546 if func_lalib_p "$file"; then
adamc@1133 9547
adamc@1133 9548 # Read the .lo file
adamc@1133 9549 func_source $dir/$name
adamc@1133 9550
adamc@1133 9551 # Add PIC object to the list of files to remove.
adamc@1133 9552 if test -n "$pic_object" &&
adamc@1133 9553 test "$pic_object" != none; then
adam@1459 9554 func_append rmfiles " $dir/$pic_object"
adamc@1133 9555 fi
adamc@1133 9556
adamc@1133 9557 # Add non-PIC object to the list of files to remove.
adamc@1133 9558 if test -n "$non_pic_object" &&
adamc@1133 9559 test "$non_pic_object" != none; then
adam@1459 9560 func_append rmfiles " $dir/$non_pic_object"
adamc@1133 9561 fi
adamc@1133 9562 fi
adamc@1133 9563 ;;
adamc@1133 9564
adamc@1133 9565 *)
adam@1459 9566 if test "$opt_mode" = clean ; then
adamc@1133 9567 noexename=$name
adamc@1133 9568 case $file in
adamc@1133 9569 *.exe)
adamc@1133 9570 func_stripname '' '.exe' "$file"
adamc@1133 9571 file=$func_stripname_result
adamc@1133 9572 func_stripname '' '.exe' "$name"
adamc@1133 9573 noexename=$func_stripname_result
adamc@1133 9574 # $file with .exe has already been added to rmfiles,
adamc@1133 9575 # add $file without .exe
adam@1459 9576 func_append rmfiles " $file"
adamc@1133 9577 ;;
adamc@1133 9578 esac
adamc@1133 9579 # Do a test to see if this is a libtool program.
adamc@1133 9580 if func_ltwrapper_p "$file"; then
adamc@1133 9581 if func_ltwrapper_executable_p "$file"; then
adamc@1133 9582 func_ltwrapper_scriptname "$file"
adamc@1133 9583 relink_command=
adamc@1133 9584 func_source $func_ltwrapper_scriptname_result
adam@1459 9585 func_append rmfiles " $func_ltwrapper_scriptname_result"
adamc@1133 9586 else
adamc@1133 9587 relink_command=
adamc@1133 9588 func_source $dir/$noexename
adamc@1133 9589 fi
adamc@1133 9590
adamc@1133 9591 # note $name still contains .exe if it was in $file originally
adamc@1133 9592 # as does the version of $file that was added into $rmfiles
adam@1459 9593 func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
adamc@1133 9594 if test "$fast_install" = yes && test -n "$relink_command"; then
adam@1459 9595 func_append rmfiles " $odir/lt-$name"
adamc@1133 9596 fi
adamc@1133 9597 if test "X$noexename" != "X$name" ; then
adam@1459 9598 func_append rmfiles " $odir/lt-${noexename}.c"
adamc@1133 9599 fi
adamc@1133 9600 fi
adamc@1133 9601 fi
adamc@1133 9602 ;;
adamc@1133 9603 esac
adamc@1133 9604 func_show_eval "$RM $rmfiles" 'exit_status=1'
adamc@1133 9605 done
adamc@1133 9606
adamc@1133 9607 # Try to remove the ${objdir}s in the directories where we deleted files
adamc@1133 9608 for dir in $rmdirs; do
adamc@1133 9609 if test -d "$dir"; then
adamc@1133 9610 func_show_eval "rmdir $dir >/dev/null 2>&1"
adamc@1133 9611 fi
adamc@1133 9612 done
adamc@1133 9613
adamc@1133 9614 exit $exit_status
adamc@1133 9615 }
adamc@1133 9616
adam@1459 9617 { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
adamc@1133 9618 func_mode_uninstall ${1+"$@"}
adamc@1133 9619
adam@1459 9620 test -z "$opt_mode" && {
adamc@1133 9621 help="$generic_help"
adamc@1133 9622 func_fatal_help "you must specify a MODE"
adamc@1133 9623 }
adamc@1133 9624
adamc@1133 9625 test -z "$exec_cmd" && \
adam@1459 9626 func_fatal_help "invalid operation mode \`$opt_mode'"
adamc@1133 9627
adamc@1133 9628 if test -n "$exec_cmd"; then
adamc@1133 9629 eval exec "$exec_cmd"
adamc@1133 9630 exit $EXIT_FAILURE
adamc@1133 9631 fi
adamc@1133 9632
adamc@1133 9633 exit $exit_status
adamc@1133 9634
adamc@1133 9635
adamc@1133 9636 # The TAGs below are defined such that we never get into a situation
adamc@1133 9637 # in which we disable both kinds of libraries. Given conflicting
adamc@1133 9638 # choices, we go for a static library, that is the most portable,
adamc@1133 9639 # since we can't tell whether shared libraries were disabled because
adamc@1133 9640 # the user asked for that or because the platform doesn't support
adamc@1133 9641 # them. This is particularly important on AIX, because we don't
adamc@1133 9642 # support having both static and shared libraries enabled at the same
adamc@1133 9643 # time on that platform, so we default to a shared-only configuration.
adamc@1133 9644 # If a disable-shared tag is given, we'll fallback to a static-only
adamc@1133 9645 # configuration. But we'll never go from static-only to shared-only.
adamc@1133 9646
adamc@1133 9647 # ### BEGIN LIBTOOL TAG CONFIG: disable-shared
adamc@1133 9648 build_libtool_libs=no
adamc@1133 9649 build_old_libs=yes
adamc@1133 9650 # ### END LIBTOOL TAG CONFIG: disable-shared
adamc@1133 9651
adamc@1133 9652 # ### BEGIN LIBTOOL TAG CONFIG: disable-static
adamc@1133 9653 build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
adamc@1133 9654 # ### END LIBTOOL TAG CONFIG: disable-static
adamc@1133 9655
adamc@1133 9656 # Local Variables:
adamc@1133 9657 # mode:shell-script
adamc@1133 9658 # sh-indentation:2
adamc@1133 9659 # End:
adamc@1133 9660 # vi:sw=2
adamc@1133 9661