summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPeter Rosin <peda@lysator.liu.se>2010-09-21 20:59:54 +0200
committerPeter Rosin <peda@lysator.liu.se>2010-09-21 20:59:54 +0200
commit0431dc4403e5c611bc1009f0cf47b20f26407994 (patch)
tree15229db49415c518eceb117175b0b424a0127e31 /lib
parent0a99a243f943f02f97e9fc2df5020d33997a76d0 (diff)
downloadautomake-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-xlib/compile36
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=','