diff --git a/modules/vstudio/tests/vc2010/test_link.lua b/modules/vstudio/tests/vc2010/test_link.lua
index 9ffc783b4..2b521f765 100644
--- a/modules/vstudio/tests/vc2010/test_link.lua
+++ b/modules/vstudio/tests/vc2010/test_link.lua
@@ -488,6 +488,55 @@
end
+--
+-- When using a non-MSC toolset (e.g. clang or gcc), links with native
+-- extensions (.a, .so) should be passed through as-is without .lib appended.
+--
+
+ function suite.additionalDependencies_dotA_onClangToolset()
+ toolset "clang"
+ links { "mylib.a" }
+ prepare()
+ test.capture [[
+
+ Windows
+ mylib.a;%(AdditionalDependencies)
+ ]]
+ end
+
+ function suite.additionalDependencies_dotSo_onClangToolset()
+ toolset "clang"
+ links { "mylib.so" }
+ prepare()
+ test.capture [[
+
+ Windows
+ mylib.so;%(AdditionalDependencies)
+ ]]
+ end
+
+ function suite.additionalDependencies_dotA_onGccToolset()
+ toolset "gcc"
+ links { "mylib.a" }
+ prepare()
+ test.capture [[
+
+ Windows
+ mylib.a;%(AdditionalDependencies)
+ ]]
+ end
+
+ function suite.additionalDependencies_dotSo_onGccToolset()
+ toolset "gcc"
+ links { "mylib.so" }
+ prepare()
+ test.capture [[
+
+ Windows
+ mylib.so;%(AdditionalDependencies)
+ ]]
+ end
+
--
-- Additional library directories should be specified, relative to the project.
--
diff --git a/src/tools/clang.lua b/src/tools/clang.lua
index 133c1da0c..e95faf2c7 100644
--- a/src/tools/clang.lua
+++ b/src/tools/clang.lua
@@ -402,3 +402,10 @@
function clang.gettooloutputext(tool)
return gcc.gettooloutputext(tool)
end
+
+ function clang.getLibraryExtensions()
+ return {
+ ["a"] = true,
+ ["so"] = true,
+ }
+ end
diff --git a/src/tools/gcc.lua b/src/tools/gcc.lua
index 2300d52f2..681397439 100644
--- a/src/tools/gcc.lua
+++ b/src/tools/gcc.lua
@@ -824,3 +824,10 @@
function gcc.gettooloutputext(tool)
return iif(tool == "rc", ".res", ".o")
end
+
+ function gcc.getLibraryExtensions()
+ return {
+ ["a"] = true,
+ ["so"] = true,
+ }
+ end
diff --git a/src/tools/msc.lua b/src/tools/msc.lua
index 1018a1cea..4e002248d 100644
--- a/src/tools/msc.lua
+++ b/src/tools/msc.lua
@@ -483,10 +483,15 @@
-- Then the system libraries, which come undecorated
local system = config.getlinks(cfg, "system", "fullpath")
+
+ local toolset = config.toolset(cfg)
+ local toolsetExts = toolset and toolset.getLibraryExtensions and toolset.getLibraryExtensions() or {}
+ local libExts = table.merge(p.tools.msc.getLibraryExtensions(), toolsetExts)
+
for i = 1, #system do
-- Add extension if required
local link = system[i]
- if not p.tools.msc.getLibraryExtensions()[link:match("[^.]+$")] then
+ if not libExts[link:match("[^.]+$")] then
link = path.appendextension(link, ".lib")
end