Premake: Add include guard to make sure dependencies do not include themselves in an infinite chain when two components depend on each other

This commit is contained in:
Jan 2020-02-07 02:46:24 +01:00
parent 55d5746650
commit f73c27a7dc
21 changed files with 245 additions and 125 deletions

View File

@ -19,6 +19,37 @@ function TestFolder()
return path.getrelative(os.getcwd(), _TestFolder) return path.getrelative(os.getcwd(), _TestFolder)
end end
-- Functions for including projects
References = {
includeList = {},
linkList = {}
}
function References:include(name)
result = self.includeList[name] == nil
if result then
self.includeList[name] = true
end
return result
end
function References:link(name)
result = self.linkList[name] == nil
if result then
self.linkList[name] = true
end
return result
end
function References:reset()
self.includeList = {}
self.linkList = {}
end
-- Target Directories -- Target Directories
TargetDirectoryBin = "%{wks.location}/bin/%{cfg.buildcfg}_%{cfg.platform}" TargetDirectoryBin = "%{wks.location}/bin/%{cfg.buildcfg}_%{cfg.platform}"
TargetDirectoryLib = "%{wks.location}/lib/%{cfg.buildcfg}_%{cfg.platform}" TargetDirectoryLib = "%{wks.location}/lib/%{cfg.buildcfg}_%{cfg.platform}"

View File

@ -1,16 +1,20 @@
Crypto = {} Crypto = {}
function Crypto:include() function Crypto:include()
if References:include("Crypto") then
includedirs { includedirs {
path.join(ProjectFolder(), "Crypto") path.join(ProjectFolder(), "Crypto")
} }
end
end end
function Crypto:link() function Crypto:link()
if References:link("Crypto") then
libtomcrypt:link() libtomcrypt:link()
libtommath:link() libtommath:link()
salsa20:link() salsa20:link()
links "Crypto" links "Crypto"
end
end end
function Crypto:use() function Crypto:use()
@ -18,6 +22,7 @@ function Crypto:use()
end end
function Crypto:project() function Crypto:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "Crypto" project "Crypto"

View File

@ -1,9 +1,11 @@
Linker = {} Linker = {}
function Linker:include() function Linker:include()
if References:include("Linker") then
includedirs { includedirs {
path.join(ProjectFolder(), "Linker") path.join(ProjectFolder(), "Linker")
} }
end
end end
function Linker:link() function Linker:link()
@ -15,6 +17,7 @@ function Linker:use()
end end
function Linker:project() function Linker:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "Linker" project "Linker"

View File

@ -1,20 +1,24 @@
ObjCommon = {} ObjCommon = {}
function ObjCommon:include() function ObjCommon:include()
if References:include("ObjCommon") then
ZoneCommon:include() ZoneCommon:include()
minizip:include() minizip:include()
includedirs { includedirs {
path.join(ProjectFolder(), "ObjCommon") path.join(ProjectFolder(), "ObjCommon")
} }
end
end end
function ObjCommon:link() function ObjCommon:link()
if References:link("ObjCommon") then
Utils:link() Utils:link()
ZoneCommon:link() ZoneCommon:link()
minizip:link() minizip:link()
links { links {
"ObjCommon" "ObjCommon"
} }
end
end end
function ObjCommon:use() function ObjCommon:use()
@ -22,6 +26,7 @@ function ObjCommon:use()
end end
function ObjCommon:project() function ObjCommon:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ObjCommon" project "ObjCommon"

View File

@ -1,14 +1,17 @@
ObjLoading = {} ObjLoading = {}
function ObjLoading:include() function ObjLoading:include()
if References:include("ObjLoading") then
ObjCommon:include() ObjCommon:include()
ZoneCommon:include() ZoneCommon:include()
includedirs { includedirs {
path.join(ProjectFolder(), "ObjLoading") path.join(ProjectFolder(), "ObjLoading")
} }
end
end end
function ObjLoading:link() function ObjLoading:link()
if References:link("ObjLoading") then
Utils:link() Utils:link()
ObjCommon:link() ObjCommon:link()
ZoneCommon:link() ZoneCommon:link()
@ -18,6 +21,7 @@ function ObjLoading:link()
links { links {
"ObjLoading" "ObjLoading"
} }
end
end end
function ObjLoading:use() function ObjLoading:use()
@ -25,6 +29,7 @@ function ObjLoading:use()
end end
function ObjLoading:project() function ObjLoading:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ObjLoading" project "ObjLoading"

View File

@ -1,14 +1,17 @@
ObjWriting = {} ObjWriting = {}
function ObjWriting:include() function ObjWriting:include()
if References:include("ObjWriting") then
ObjCommon:include() ObjCommon:include()
ZoneCommon:include() ZoneCommon:include()
includedirs { includedirs {
path.join(ProjectFolder(), "ObjWriting") path.join(ProjectFolder(), "ObjWriting")
} }
end
end end
function ObjWriting:link() function ObjWriting:link()
if References:link("ObjWriting") then
Utils:link() Utils:link()
ObjCommon:link() ObjCommon:link()
ZoneCommon:link() ZoneCommon:link()
@ -17,6 +20,7 @@ function ObjWriting:link()
links { links {
"ObjWriting" "ObjWriting"
} }
end
end end
function ObjWriting:use() function ObjWriting:use()
@ -24,6 +28,7 @@ function ObjWriting:use()
end end
function ObjWriting:project() function ObjWriting:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ObjWriting" project "ObjWriting"

View File

@ -1,9 +1,11 @@
Unlinker = {} Unlinker = {}
function Unlinker:include() function Unlinker:include()
if References:include("Unlinker") then
includedirs { includedirs {
path.join(ProjectFolder(), "Unlinker") path.join(ProjectFolder(), "Unlinker")
} }
end
end end
function Unlinker:link() function Unlinker:link()
@ -15,6 +17,7 @@ function Unlinker:use()
end end
function Unlinker:project() function Unlinker:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "Unlinker" project "Unlinker"

View File

@ -1,13 +1,17 @@
Utils = {} Utils = {}
function Utils:include() function Utils:include()
if References:include("Utils") then
includedirs { includedirs {
path.join(ProjectFolder(), "Utils") path.join(ProjectFolder(), "Utils")
} }
end
end end
function Utils:link() function Utils:link()
if References:link("Utils") then
links "Utils" links "Utils"
end
end end
function Utils:use() function Utils:use()
@ -15,6 +19,7 @@ function Utils:use()
end end
function Utils:project() function Utils:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "Utils" project "Utils"

View File

@ -108,10 +108,12 @@ function ZoneCode:allWriteFiles()
end end
function ZoneCode:include() function ZoneCode:include()
if References:include("ZoneCode") then
includedirs { includedirs {
path.join(ProjectFolder(), "ZoneCode"), path.join(ProjectFolder(), "ZoneCode"),
"%{wks.location}/src/ZoneCode" "%{wks.location}/src/ZoneCode"
} }
end
end end
function ZoneCode:link() function ZoneCode:link()
@ -123,6 +125,7 @@ function ZoneCode:use()
end end
function ZoneCode:project() function ZoneCode:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ZoneCode" project "ZoneCode"

View File

@ -5,7 +5,9 @@ function ZoneCodeGenerator:include()
end end
function ZoneCodeGenerator:link() function ZoneCodeGenerator:link()
if References:link("ZoneCodeGenerator") then
links "ZoneCodeGenerator" links "ZoneCodeGenerator"
end
end end
function ZoneCodeGenerator:use() function ZoneCodeGenerator:use()
@ -13,6 +15,7 @@ function ZoneCodeGenerator:use()
end end
function ZoneCodeGenerator:project() function ZoneCodeGenerator:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ZoneCodeGenerator" project "ZoneCodeGenerator"

View File

@ -1,17 +1,23 @@
ZoneCommon = {} ZoneCommon = {}
function ZoneCommon:include() function ZoneCommon:include()
if References:include("ZoneCommon") then
Utils:include() Utils:include()
ObjCommon:include()
includedirs { includedirs {
path.join(ProjectFolder(), "ZoneCommon") path.join(ProjectFolder(), "ZoneCommon")
} }
end
end end
function ZoneCommon:link() function ZoneCommon:link()
if References:link("ZoneCommon") then
Utils:link() Utils:link()
ObjCommon:link()
links { links {
"ZoneCommon" "ZoneCommon"
} }
end
end end
function ZoneCommon:use() function ZoneCommon:use()
@ -19,6 +25,7 @@ function ZoneCommon:use()
end end
function ZoneCommon:project() function ZoneCommon:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ZoneCommon" project "ZoneCommon"

View File

@ -1,13 +1,16 @@
ZoneLoading = {} ZoneLoading = {}
function ZoneLoading:include() function ZoneLoading:include()
if References:include("ZoneLoading") then
ZoneCommon:include() ZoneCommon:include()
includedirs { includedirs {
path.join(ProjectFolder(), "ZoneLoading") path.join(ProjectFolder(), "ZoneLoading")
} }
end
end end
function ZoneLoading:link() function ZoneLoading:link()
if References:link("ZoneLoading") then
Crypto:link() Crypto:link()
Utils:link() Utils:link()
ZoneCommon:link() ZoneCommon:link()
@ -15,6 +18,7 @@ function ZoneLoading:link()
links { links {
"ZoneLoading" "ZoneLoading"
} }
end
end end
function ZoneLoading:use() function ZoneLoading:use()
@ -22,6 +26,7 @@ function ZoneLoading:use()
end end
function ZoneLoading:project() function ZoneLoading:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ZoneLoading" project "ZoneLoading"

View File

@ -1,13 +1,16 @@
ZoneWriting = {} ZoneWriting = {}
function ZoneWriting:include() function ZoneWriting:include()
if References:include("ZoneWriting") then
ZoneCommon:include() ZoneCommon:include()
includedirs { includedirs {
path.join(ProjectFolder(), "ZoneWriting") path.join(ProjectFolder(), "ZoneWriting")
} }
end
end end
function ZoneWriting:link() function ZoneWriting:link()
if References:link("ZoneWriting") then
Crypto:link() Crypto:link()
Utils:link() Utils:link()
ZoneCommon:link() ZoneCommon:link()
@ -15,6 +18,7 @@ function ZoneWriting:link()
links { links {
"ZoneWriting" "ZoneWriting"
} }
end
end end
function ZoneWriting:use() function ZoneWriting:use()
@ -22,6 +26,7 @@ function ZoneWriting:use()
end end
function ZoneWriting:project() function ZoneWriting:project()
References:reset()
local folder = ProjectFolder(); local folder = ProjectFolder();
project "ZoneWriting" project "ZoneWriting"

View File

@ -5,7 +5,9 @@ function ZoneCodeGeneratorTests:include()
end end
function ZoneCodeGeneratorTests:link() function ZoneCodeGeneratorTests:link()
links "ZoneCommonTests" if References:link("ZoneCodeGeneratorTests") then
links "ZoneCodeGeneratorTests"
end
end end
function ZoneCodeGeneratorTests:use() function ZoneCodeGeneratorTests:use()
@ -13,6 +15,7 @@ function ZoneCodeGeneratorTests:use()
end end
function ZoneCodeGeneratorTests:project() function ZoneCodeGeneratorTests:project()
References:reset()
local folder = TestFolder(); local folder = TestFolder();
project "ZoneCodeGeneratorTests" project "ZoneCodeGeneratorTests"

View File

@ -5,7 +5,9 @@ function ZoneCommonTests:include()
end end
function ZoneCommonTests:link() function ZoneCommonTests:link()
if References:link("ZoneCommonTests") then
links "ZoneCommonTests" links "ZoneCommonTests"
end
end end
function ZoneCommonTests:use() function ZoneCommonTests:use()
@ -13,6 +15,7 @@ function ZoneCommonTests:use()
end end
function ZoneCommonTests:project() function ZoneCommonTests:project()
References:reset()
local folder = TestFolder(); local folder = TestFolder();
project "ZoneCommonTests" project "ZoneCommonTests"

View File

@ -1,6 +1,7 @@
libtomcrypt = {} libtomcrypt = {}
function libtomcrypt:include() function libtomcrypt:include()
if References:include("libtomcrypt") then
defines{ defines{
"LTM_DESC" "LTM_DESC"
} }
@ -8,10 +9,13 @@ function libtomcrypt:include()
includedirs { includedirs {
path.join(ThirdPartyFolder(), "libtomcrypt/src/headers") path.join(ThirdPartyFolder(), "libtomcrypt/src/headers")
} }
end
end end
function libtomcrypt:link() function libtomcrypt:link()
if References:link("libtomcrypt") then
links "libtomcrypt" links "libtomcrypt"
end
end end
function libtomcrypt:use() function libtomcrypt:use()
@ -19,6 +23,7 @@ function libtomcrypt:use()
end end
function libtomcrypt:project() function libtomcrypt:project()
References:reset()
local folder = ThirdPartyFolder(); local folder = ThirdPartyFolder();
project "libtomcrypt" project "libtomcrypt"

View File

@ -1,13 +1,17 @@
libtommath = {} libtommath = {}
function libtommath:include() function libtommath:include()
if References:include("libtommath") then
includedirs { includedirs {
path.join(ThirdPartyFolder(), "libtommath") path.join(ThirdPartyFolder(), "libtommath")
} }
end
end end
function libtommath:link() function libtommath:link()
if References:link("libtommath") then
links "libtommath" links "libtommath"
end
end end
function libtommath:use() function libtommath:use()
@ -15,6 +19,7 @@ function libtommath:use()
end end
function libtommath:project() function libtommath:project()
References:reset()
local folder = ThirdPartyFolder(); local folder = ThirdPartyFolder();
project "libtommath" project "libtommath"

View File

@ -1,13 +1,17 @@
minilzo = {} minilzo = {}
function minilzo:include() function minilzo:include()
if References:include("minilzo") then
includedirs { includedirs {
path.join(ThirdPartyFolder(), "minilzo") path.join(ThirdPartyFolder(), "minilzo")
} }
end
end end
function minilzo:link() function minilzo:link()
if References:link("minilzo") then
links "minilzo" links "minilzo"
end
end end
function minilzo:use() function minilzo:use()
@ -15,6 +19,7 @@ function minilzo:use()
end end
function minilzo:project() function minilzo:project()
References:reset()
local folder = ThirdPartyFolder(); local folder = ThirdPartyFolder();
project "minilzo" project "minilzo"

View File

@ -1,15 +1,19 @@
minizip = {} minizip = {}
function minizip:include() function minizip:include()
if References:include("minizip") then
zlib:include() zlib:include()
includedirs { includedirs {
path.join(ThirdPartyFolder(), "zlib/contrib/minizip") path.join(ThirdPartyFolder(), "zlib/contrib/minizip")
} }
end
end end
function minizip:link() function minizip:link()
if References:link("minizip") then
zlib:link() zlib:link()
links "minizip" links "minizip"
end
end end
function minizip:use() function minizip:use()
@ -17,6 +21,7 @@ function minizip:use()
end end
function minizip:project() function minizip:project()
References:reset()
local folder = ThirdPartyFolder(); local folder = ThirdPartyFolder();
project "minizip" project "minizip"

View File

@ -1,13 +1,17 @@
salsa20 = {} salsa20 = {}
function salsa20:include() function salsa20:include()
if References:include("salsa20") then
includedirs { includedirs {
path.join(ThirdPartyFolder(), "salsa20") path.join(ThirdPartyFolder(), "salsa20")
} }
end
end end
function salsa20:link() function salsa20:link()
if References:link("salsa20") then
links "salsa20" links "salsa20"
end
end end
function salsa20:use() function salsa20:use()
@ -15,6 +19,7 @@ function salsa20:use()
end end
function salsa20:project() function salsa20:project()
References:reset()
local folder = ThirdPartyFolder(); local folder = ThirdPartyFolder();
project "salsa20" project "salsa20"

6
thirdparty/zlib.lua vendored
View File

@ -1,7 +1,7 @@
zlib = {} zlib = {}
function zlib:include() function zlib:include()
if References:include("zlib") then
defines { defines {
"ZLIB_CONST" "ZLIB_CONST"
} }
@ -9,10 +9,13 @@ function zlib:include()
includedirs { includedirs {
path.join(ThirdPartyFolder(), "zlib") path.join(ThirdPartyFolder(), "zlib")
} }
end
end end
function zlib:link() function zlib:link()
if References:link("zlib") then
links "zlib" links "zlib"
end
end end
function zlib:use() function zlib:use()
@ -20,6 +23,7 @@ function zlib:use()
end end
function zlib:project() function zlib:project()
References:reset()
local folder = ThirdPartyFolder(); local folder = ThirdPartyFolder();
project "zlib" project "zlib"