summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/genie/src/base/premake.lua
blob: 8aa5ac1b34b5e6e44ab06a8000e9615098b3268b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
--
-- premake.lua
-- High-level processing functions.
-- Copyright (c) 2002-2009 Jason Perkins and the Premake project
--

	premake._filelevelconfig = false

--
-- 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()
		premake.stats.num_generated = premake.stats.num_generated + 1
	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