From cfb5cad3e8caa2db97348c44c2391e3b35dfd54f Mon Sep 17 00:00:00 2001 From: Richard Sim Date: Fri, 27 Sep 2024 21:54:56 -0700 Subject: [PATCH 1/4] Check for both file finding and execution errors --- src/base/globals.lua | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/base/globals.lua b/src/base/globals.lua index d46ca00b68..5c12ee2d23 100644 --- a/src/base/globals.lua +++ b/src/base/globals.lua @@ -48,18 +48,25 @@ io._includedFiles = {} function include(fname) - local actualFname, compiled_chunk = premake.findProjectScript(fname) - if not io._includedFiles[actualFname] then - io._includedFiles[actualFname] = true - local success, res = pcall(compiled_chunk) - if success then - -- res is the return value of the script - return res - else - -- res is the error message - local caller = filelineinfo(2) - premake.error(caller .. ": Error executing '" .. fname .. ": " .. res) + local findOK, foundFnameOrErr, compiled_chunk = pcall(function () return premake.findProjectScript(fname) end) + if findOK then + local actualFname = foundFnameOrErr + if not io._includedFiles[actualFname] then + io._includedFiles[actualFname] = true + local callOK, res = pcall(compiled_chunk) + if callOK then + -- res is the return value of the script + return res + else + local err = res + local caller = filelineinfo(2) + premake.error(caller .. ": include(" .. fname .. ") execution error: " .. err) + end end + else + local err = foundFnameOrErr + local caller = filelineinfo(2) + premake.error(caller .. ": include(" .. fname .. ") not found: " .. err) end end From d14bef89d32e95c2d5e48da5eb72b31dd4bca9c8 Mon Sep 17 00:00:00 2001 From: Richard Sim Date: Fri, 27 Sep 2024 21:55:32 -0700 Subject: [PATCH 2/4] Don't include caller information in errors from findProjectScript; it's callers will do that --- src/base/_foundation.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/base/_foundation.lua b/src/base/_foundation.lua index 130be76bae..8def17f6dd 100644 --- a/src/base/_foundation.lua +++ b/src/base/_foundation.lua @@ -245,13 +245,11 @@ local compiled_chunk local res = os.locate(fname, with_ext, p5, p4) if res == nil then - local caller = filelineinfo(3) - premake.error(caller .. ": Cannot find neither " .. table.implode({fname, with_ext, p5, p4}, "", "", " nor ")) + premake.error("Cannot find neither " .. table.implode({fname, with_ext, p5, p4}, "", "", " nor ")) else compiled_chunk, err = loadfile(res) if err ~= nil then - local caller = filelineinfo(3) - premake.error(caller .. ": Error loading '" .. fname .. ": " .. err) + premake.error("Error loading '" .. fname .. ": " .. err) end end return res, compiled_chunk From 85f73013fd1811201a53bf1e1ee74c5c02b6a1ba Mon Sep 17 00:00:00 2001 From: Richard Sim Date: Fri, 27 Sep 2024 21:55:53 -0700 Subject: [PATCH 3/4] Give includeexternal() the same error love that include() has had --- src/base/api.lua | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/base/api.lua b/src/base/api.lua index 9fac4ec049..7255fff0e4 100755 --- a/src/base/api.lua +++ b/src/base/api.lua @@ -81,11 +81,26 @@ --- function includeexternal(fname) - fname, compiled_chunk = p.findProjectScript(fname) - local wasIncludingExternal = api._isIncludingExternal - api._isIncludingExternal = true - compiled_chunk() - api._isIncludingExternal = wasIncludingExternal + local findOK, foundFnameOrErr, compiled_chunk = pcall(function () return p.findProjectScript(fname) end) + if findOK then + local wasIncludingExternal = api._isIncludingExternal + api._isIncludingExternal = true + local callOK, res = pcall(compiled_chunk) + api._isIncludingExternal = wasIncludingExternal + + if callOK then + -- res is the return value of the script + return res + else + local err = res + local caller = filelineinfo(2) + premake.error(caller .. ": includeexternal(" .. fname .. ") execution error: " .. err) + end + else + local err = foundFnameOrErr + local caller = filelineinfo(2) + premake.error(caller .. ": includeexternal(" .. fname .. ") not found: " .. err) + end end p.alias(_G, "includeexternal", "includeExternal") From bba6366f09168152b9af62e9fd76cf689d96b77f Mon Sep 17 00:00:00 2001 From: Richard Sim Date: Fri, 27 Sep 2024 22:38:20 -0700 Subject: [PATCH 4/4] Minor wording update to include/includeexternal error messages --- src/base/api.lua | 2 +- src/base/globals.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base/api.lua b/src/base/api.lua index 7255fff0e4..01d82d2b95 100755 --- a/src/base/api.lua +++ b/src/base/api.lua @@ -99,7 +99,7 @@ else local err = foundFnameOrErr local caller = filelineinfo(2) - premake.error(caller .. ": includeexternal(" .. fname .. ") not found: " .. err) + premake.error(caller .. ": includeexternal(" .. fname .. ") not found or failed to load: " .. err) end end diff --git a/src/base/globals.lua b/src/base/globals.lua index 5c12ee2d23..a4b813ab2c 100644 --- a/src/base/globals.lua +++ b/src/base/globals.lua @@ -66,7 +66,7 @@ else local err = foundFnameOrErr local caller = filelineinfo(2) - premake.error(caller .. ": include(" .. fname .. ") not found: " .. err) + premake.error(caller .. ": include(" .. fname .. ") not found or failed to load: " .. err) end end