premake/tests/actions/vstudio/vc200x/test_linker_block.lua

282 lines
5.4 KiB
Lua

--
-- tests/actions/vstudio/vc200x/test_linker_block.lua
-- Validate generation of VCLinkerTool blocks in Visual Studio 200x C/C++ projects.
-- Copyright (c) 2009-2013 Jason Perkins and the Premake project
--
local suite = test.declare("vs200x_linker_block")
local vc200x = premake.vstudio.vc200x
--
-- Setup/teardown
--
local sln, prj
function suite.setup()
_ACTION = "vs2008"
io.esc = premake.vstudio.vs2005.esc
sln, prj = test.createsolution()
end
local function prepare()
local cfg = test.getconfig(prj, "Debug")
vc200x.VCLinkerTool(cfg)
end
--
-- Verify the basic structure of the console app linker block.
--
function suite.onConsoleApp()
kind "ConsoleApp"
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.exe"
LinkIncremental="2"
GenerateDebugInformation="false"
SubSystem="1"
EntryPointSymbol="mainCRTStartup"
TargetMachine="1"
/>
]]
end
--
-- Verify the basic structure of windowed app linker block.
--
function suite.onWindowedApp()
kind "WindowedApp"
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.exe"
LinkIncremental="2"
GenerateDebugInformation="false"
SubSystem="2"
EntryPointSymbol="mainCRTStartup"
TargetMachine="1"
/>
]]
end
--
-- Verify the basic structure of shared library linker block.
--
function suite.onSharedLib()
kind "SharedLib"
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.dll"
LinkIncremental="2"
GenerateDebugInformation="false"
SubSystem="2"
ImportLibrary="MyProject.lib"
TargetMachine="1"
/>
]]
end
--
-- Verify the basic structure of static library linker block.
--
function suite.onStaticLib()
kind "StaticLib"
prepare()
test.capture [[
<Tool
Name="VCLibrarianTool"
OutputFile="$(OutDir)\MyProject.lib"
/>
]]
end
--
-- Verify the handling of the Symbols flag.
--
function suite.onSymbolsFlag()
flags "Symbols"
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
ProgramDataBaseFileName="$(OutDir)\MyProject.pdb"
]]
end
--
-- Verify the handling of the C7 debug information format.
--
function suite.onC7DebugFormat()
flags "Symbols"
debugformat "C7"
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
EntryPointSymbol="mainCRTStartup"
TargetMachine="1"
/>
]]
end
--
-- If a module definition file is present, make sure it is specified.
--
function suite.onModuleDefinitionFile()
files { "MyProject.def" }
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.exe"
LinkIncremental="2"
ModuleDefinitionFile="MyProject.def"
]]
end
--
-- Verify handling of the NoIncrementalLink flag.
--
function suite.onNoIncrementalLink()
flags { "NoIncrementalLink" }
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.exe"
LinkIncremental="1"
]]
end
--
-- Verify that link options are specified.
--
function suite.additionalOptionsUsed_onStaticLib()
kind "StaticLib"
linkoptions { "/ltcg", "/lZ" }
prepare()
test.capture [[
<Tool
Name="VCLibrarianTool"
AdditionalOptions="/ltcg /lZ"
OutputFile="$(OutDir)\MyProject.lib"
/>
]]
end
--
-- Links to system libraries should appear in the list, properly decorated.
--
function suite.includesSystemLibs()
links { "GL", "GLU" }
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
AdditionalDependencies="GL.lib GLU.lib"
]]
end
--
-- Links to sibling projects should not appear in the list; Visual Studio
-- will link to those automatically.
--
function suite.excludesSiblings()
links { "MyProject2" }
project ("MyProject2")
kind "StaticLib"
language "C++"
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\MyProject.exe"
]]
end
--
-- If the NoImplicitLinking flag is set, sibling projects should
-- then be added to the list.
--
function suite.includesSiblings_onNoImplicitLink()
flags { "NoImplicitLink" }
links { "MyProject2" }
project ("MyProject2")
kind "StaticLib"
language "C++"
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
LinkLibraryDependencies="false"
AdditionalDependencies="MyProject2.lib"
]]
end
--
-- Libraries with spaces in the name must be wrapped in quotes.
--
function suite.wrapsWithQuotes_onSpaceInLibraryName()
links { "My Lib" }
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
AdditionalDependencies="&quot;My Lib.lib&quot;"
]]
end
--
-- Managed assembly references should not be listed in additional dependencies.
--
function suite.ignoresAssemblyReferences()
links { "kernel32", "System.dll", "System.Data.dll" }
prepare()
test.capture [[
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib"
]]
end