-- Define a namespace for my new action. The second line defines an alias that I
-- can use in this file, saving myself some typing. It will not be visible outside
-- of this file (though I can always define it again).

	premake.example = { }
	local example = premake.example

	
-- The description of the action. Note that only the first three fields are required;
-- you can remove any of the additional fields that are not required by your action.

	newaction 
	{
		-- The trigger is what needs to be typed on the command line to cause 
		-- this action this run (premake4 example)
		trigger = "example",
		
		-- The short name is used when this toolset name needs to be shown to
		-- the user, such as in status or error messages
		shortname = "Super Studio 3000",
		
		-- The description is shown in the help text (premake4 /help)
		description = "An example action that prints simple text files",

		-- Some actions imply a particular operating system: Visual Studio only
		-- runs on Windows, and Xcode only on Mac OS X. If this is the case,
		-- uncomment this line and set it to one of "windows", "linux" or "macosx".
		-- Otherwise, this action will target the current operating system.
		-- os = "macosx",

		-- Which kinds of targets this action supports; remove those you don't.
		valid_kinds = { "ConsoleApp", "WindowedApp", "SharedLib", "StaticLib" },

		-- Which programming languages this actions supports; remove those you don't.
		valid_languages = { "C", "C++", "C#" },

		-- Which compiler sets this action supports; remove those you don't. The set
		-- is specified with the /cc and /dotnet command-line options. You can find
		-- the tool interfaces at src/tools.
		valid_tools     = {
			cc     = { "msc", "gcc", "ow" },
			dotnet = { "mono", "msnet", "pnet" },
		},

		
		-- This function is called during state validation. If your action has some
		-- special requirements you can check them here and error if necessary.
		
		
		oncheckproject = function(prj)
			-- if this_project_is_no_good(prj) then
			--    error("Project " .. prj.name .. " is no good", 0)
			-- end
		end,
		

		-- These functions will get called for each solution and project. The function
		-- premake.generate() creates a file for you in the correct place, taking into
		-- account any location information specified in the script. The sequence "%%"
		-- will be replaced by the solution/project name. The last parameter is the 
		-- function that will actually do the work of generating the file contents.

		onsolution = function(sln)
			premake.generate(sln, "%%.sln.txt", premake.example.solution)
		end,

		onproject = function(prj)
			if premake.isdotnetproject(prj) then
				premake.generate(prj, "%%.csprj.txt", premake.example.project)
			else
				premake.generate(prj, "%%.cprj.txt", premake.example.project)
			end
		end,


		-- These functions are called for each solution, project, and target as part
		-- of the "clean" action. They should remove any files generated by the tools.
		-- premake.clean.file() and premake.clean.directory() are convenience functions
		-- that use the same pattern matching as premake.generate() above.

		oncleansolution = function(sln)
			premake.clean.file(sln, "%%.sln.txt")
		end,
		
		oncleanproject  = function(prj)
			if premake.isdotnetproject(prj) then
				premake.clean.file(prj, "%%.csprj.txt")
			else
				premake.clean.file(prj, "%%.cprj.txt")
			end
		end,
		
		oncleantarget   = function(trg)
			-- 'trg' is the path and base name of the target being cleaned,
			-- like 'bin/debug/MyApplication'. So you might do something like:
			-- os.remove(trg .. ".exe")
		end,
	}

