--
-- premake.lua
-- High-level processing functions.
-- Copyright (c) 2002-2009 Jason Perkins and the Premake project
--


--
-- Open a file for output, and call a function to actually do the writing.
-- Used by the actions to generate solution and project files.
--
-- @param obj
--    A solution or project object; will be based to the callback function.
-- @param filename
--    The output filename; see the docs for premake.project.getfilename()
--    for the expected format.
-- @param callback
--    The function responsible for writing the file, should take a solution
--    or project as a parameters.
--

	function premake.generate(obj, filename, callback)
		filename = premake.project.getfilename(obj, filename)
		printf("Generating %s...", filename)

		local f, err = io.open(filename, "wb")
		if (not f) then
			error(err, 0)
		end

		io.output(f)
		callback(obj)
		f:close()
	end


-- 
-- Finds a valid premake build file in the specified directory
-- Used by both the main genie process, and include commands
--
-- @param dir
--	  The path in which to start looking for the script
-- @param search_upwards
--    When the script was not found in the specified directory, does the
--    script need to look upwards in the file system
--

	function premake.findDefaultScript(dir, search_upwards)
		search_upwards = search_upwards or true

		local last = ""
		while dir ~= last do
			for _, name in ipairs({ "genie.lua", "solution.lua", "premake4.lua" }) do

				local script0 = dir .. "/" .. name
				if (os.isfile(script0)) then
					return dir, name
				end

				local script1 = dir .. "/scripts/" .. name
				if (os.isfile(script1)) then
					return dir .. "/scripts/", name
				end
			end

			last = dir
			dir  = path.getabsolute(dir .. "/..")

			if dir == "." or not search_upwards then break end
		end

		return nil, nil
	end