Rework depedency management in premake lua scripts

This commit is contained in:
Jan
2021-03-03 11:55:37 -08:00
parent 1a45cf2107
commit dc3fef5b0f
29 changed files with 447 additions and 386 deletions

25
tools/scripts/folders.lua Normal file
View File

@ -0,0 +1,25 @@
-- Functions for locating commonly used folders
local _BuildFolder = path.getabsolute("../../build")
function BuildFolder()
return path.getrelative(os.getcwd(), _BuildFolder)
end
local _ThirdPartyFolder = path.getabsolute("../../thirdparty")
function ThirdPartyFolder()
return path.getrelative(os.getcwd(), _ThirdPartyFolder)
end
local _ProjectFolder = path.getabsolute("../../src")
function ProjectFolder()
return path.getrelative(os.getcwd(), _ProjectFolder)
end
local _TestFolder = path.getabsolute("../../test")
function TestFolder()
return path.getrelative(os.getcwd(), _TestFolder)
end
-- Target Directories
TargetDirectoryBin = "%{wks.location}/bin/%{cfg.buildcfg}_%{cfg.platform}"
TargetDirectoryLib = "%{wks.location}/lib/%{cfg.buildcfg}_%{cfg.platform}"
TargetDirectoryTest = "%{wks.location}/lib/%{cfg.buildcfg}_%{cfg.platform}/tests"

View File

@ -0,0 +1,20 @@
-- Functions for including projects
Includes = {}
function Includes:create()
list = {
handles = {}
}
function list:handle(name)
if self.handles[name] == nil then
self.handles[name] = true
return true
end
return false
end
return list
end

48
tools/scripts/linking.lua Normal file
View File

@ -0,0 +1,48 @@
-- Functions for linking projects
Links = {}
function Links:create()
list = {
stack = {},
dependencies = {}
}
function list:linkto(project)
local projectName = project:name()
for i, dependency in ipairs(self.stack) do
if dependency == projectName then
print "Circular dependency detected:"
local dependencyList = projectName
for j = i + 1, #self.stack do
dependencyList = dependencyList .. " -> " .. self.stack[j]
end
dependencyList = dependencyList .. " -> " .. projectName
print(dependencyList)
os.exit(1)
end
end
table.insert(self.stack, projectName)
project:link(self)
table.remove(self.stack)
end
function list:add(name)
for i = 1, #self.dependencies do
if self.dependencies[i] == name then
table.remove(self.dependencies, i)
i = i - 1
end
end
table.insert(self.dependencies, name)
end
function list:linkall()
for i, dependency in ipairs(self.dependencies) do
links(dependency)
end
end
return list
end

View File

View File

@ -0,0 +1,8 @@
-- Platform functions
function ExecutableByOs(name)
if os.host() == "windows" then
return name .. ".exe"
else
return name
end
end