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