diff options
author | Peter Rosin <peda@lysator.liu.se> | 2010-09-21 20:59:54 +0200 |
---|---|---|
committer | Peter Rosin <peda@lysator.liu.se> | 2010-09-21 20:59:54 +0200 |
commit | 0431dc4403e5c611bc1009f0cf47b20f26407994 (patch) | |
tree | 15229db49415c518eceb117175b0b424a0127e31 /lib | |
parent | 0a99a243f943f02f97e9fc2df5020d33997a76d0 (diff) | |
download | automake-0431dc4403e5c611bc1009f0cf47b20f26407994.tar.gz |
compile: implement library search to support MSVC static linking
* lib/compile (func_cl_wrapper): Implement library search and
-static option so that the user can select whether to prefer
dll import libraries or static libraries. This enables MSVC to
link against dlls generated by libtool without requiring libtool
or workarounds such as -lfoo.dll etc. Makes the tests/static.at
test case in libtool pass.
* tests/compile3.test: Don't trip up if there happens to exist
a "foo" library in the library search path.
* tests/compile6.test: New test, verifying the library search.
* tests/Makefile.am (TESTS): Update.
Signed-off-by: Peter Rosin <peda@lysator.liu.se>
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/compile | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/lib/compile b/lib/compile index 77f8f3176..46caccc37 100755 --- a/lib/compile +++ b/lib/compile @@ -1,7 +1,7 @@ #! /bin/sh # Wrapper for compilers which do not understand `-c -o'. -scriptversion=2010-08-31.19; # UTC +scriptversion=2010-09-21.14; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010 Free Software # Foundation, Inc. @@ -80,10 +80,12 @@ func_file_conv () } # func_cl_wrapper cl arg... -# Adjust compile command to suite cl +# Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell + lib_path= + shared=: linker_opts= for arg do @@ -113,13 +115,41 @@ func_cl_wrapper () shift ;; -l*) - set x "$@" "${1#-l}.lib" + lib=${1#-l} + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + set x "$@" "$dir/$lib.dll.lib" + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + set x "$@" "$dir/$lib.lib" + break + fi + done + IFS=$save_IFS + + test "$found" != yes && set x "$@" "$lib.lib" shift ;; -L*) func_file_conv "${1#-L}" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi linker_opts="$linker_opts -LIBPATH:$file" ;; + -static) + shared=false + ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' |