Commits

Jason Perkins  committed d461598

Add pre- and post-build support to Visual Studio C# projects

  • Participants
  • Parent commits 69afa0e

Comments (0)

Files changed (4)

 * Added debugcommand for Visual Studio (xpol)
 * Bug 1674173: Allow source files to have the same name
 * Added forceinclude() to specify forced include files
+* Visual Studio C# projects now support architectures
+* Visual Studio C# projects now support pre- and post-build commands
 
 
 -------

File src/actions/vstudio/vs2005_csproj.lua

 			cs2005.propertyGroup(cfg)
 			cs2005.debugProps(cfg)
 			cs2005.outputProps(cfg)
-			cs2005.compilerProps(cfg)		
+			cs2005.compilerProps(cfg)
 			_p(1,'</PropertyGroup>')			
 		end
 
 		_p('  </Target>')
 		_p('  -->')
 
+		cs2005.buildEvents(prj)
+
 		_p('</Project>')
 	end
 
 
 
 --
+-- Write out pre- and post-build events, if provided.
+--
+
+	function cs2005.buildEvents(prj)
+		local function output(name, steps)
+			if #steps > 0 then
+				_x(2,'<%sBuildEvent>%s</%sBuildEvent>', name, table.implode(steps, "", "", "\r\n"), name)
+			end
+		end
+
+		if #prj.prebuildcommands > 0 or #prj.postbuildcommands > 0 then
+			_p(1,'<PropertyGroup>')
+			output("Pre", prj.prebuildcommands)			
+			output("Post", prj.postbuildcommands)			
+			_p(1,'</PropertyGroup>')
+		end
+	end
+
+
+--
 -- Write the compiler flags for a particular configuration.
 --
 

File tests/actions/vstudio/cs2005/test_build_events.lua

+--
+-- tests/actions/vstudio/cs2005/test_build_events.lua
+-- Check generation of pre- and post-build commands for C# projects.
+-- Copyright (c) 2012 Jason Perkins and the Premake project
+--
+
+	T.vstudio_cs2005_build_events = {}
+	local suite = T.vstudio_cs2005_build_events
+	local cs2005 = premake.vstudio.cs2005
+
+
+--
+-- Setup 
+--
+
+	local sln, prj, cfg
+	
+	function suite.setup()
+		sln = test.createsolution()
+	end
+	
+	local function prepare(platform)
+		prj = premake.solution.getproject_ng(sln, 1)
+		cs2005.buildEvents(prj)
+	end
+
+
+--
+-- If no build steps are specified, nothing should be written.
+--
+
+	function suite.noOutput_onNoEvents()
+		prepare()
+		test.isemptycapture()
+	end
+
+
+--
+-- If one command set is used and not the other, only the one should be written.
+--
+
+	function suite.onlyOne_onPreBuildOnly()
+		prebuildcommands { "command1" }
+		prepare()
+		test.capture [[
+	<PropertyGroup>
+		<PreBuildEvent>command1</PreBuildEvent>
+	</PropertyGroup>
+		]]
+	end
+
+	function suite.onlyOne_onPostBuildOnly()
+		postbuildcommands { "command1" }
+		prepare()
+		test.capture [[
+	<PropertyGroup>
+		<PostBuildEvent>command1</PostBuildEvent>
+	</PropertyGroup>
+		]]
+	end
+
+	function suite.both_onBoth()
+		prebuildcommands { "command1" }
+		postbuildcommands { "command2" }
+		prepare()
+		test.capture [[
+	<PropertyGroup>
+		<PreBuildEvent>command1</PreBuildEvent>
+		<PostBuildEvent>command2</PostBuildEvent>
+	</PropertyGroup>
+		]]
+	end
+
+
+--
+-- Multiple commands are separated with escaped EOL characters.
+--
+
+	function suite.splits_onMultipleCommands()
+		postbuildcommands { "command1", "command2" }
+		prepare()
+		test.capture [[
+	<PropertyGroup>
+		<PostBuildEvent>command1&#x0D;&#x0A;command2</PostBuildEvent>
+	</PropertyGroup>
+		]]
+	end
+

File tests/premake4.lua

 
 	-- Visual Studio 2005-2010 C# projects
 	dofile("actions/vstudio/cs2005/test_assembly_refs.lua")
+	dofile("actions/vstudio/cs2005/test_build_events.lua")
 	dofile("actions/vstudio/cs2005/test_compiler_props.lua")
 	dofile("actions/vstudio/cs2005/test_debug_props.lua")
 	dofile("actions/vstudio/cs2005/test_files.lua")