Skip to content

Commit

Permalink
Fixed bug 3262 - Premake scripts are not compatible with "Genie" (pre…
Browse files Browse the repository at this point in the history
…make fork)

jfverdon

Genie (https://github.com/bkaradzic/genie) is a well known premake fork which uses internally Lua 5.3 (as opposed to version 5.1 used in premake4).
As there is some Lua's API breaks in Lua 5.2, SDL premake scripts do not works with premake.

The two incompatibilities I noticed were:
* unhandle modes "rt" and "wt" for io.open. Has io.open opens files in text mode by default, the "t" flag is not needed (this flag is not supported in Genie).
* os.execute signature change, the return value is a tuple from Lua 5.2, before it was just the called program exit code.
  • Loading branch information
slouken committed Oct 1, 2016
1 parent 671f2a4 commit 8d8e490
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
2 changes: 1 addition & 1 deletion premake/premake4.lua
Expand Up @@ -121,7 +121,7 @@ if _OPTIONS["help"] == nil then
end

local genFile = baseLoc .. "/SDL-gen.lua"
local file = fileopen(genFile, "wt")
local file = fileopen(genFile, "w")
print("Generating " .. genFile .. "...")
-- begin generating the config header file
startGeneration(premakeConfigHeader, premakeTemplateHeader)
Expand Down
22 changes: 17 additions & 5 deletions premake/util/sdl_check_compile.lua
Expand Up @@ -101,17 +101,29 @@ local function cleanup_build()
os.remove("./premakecheck.stdout")
end

local function os_execute(cmd)
if _ENV then
-- Lua 5.2 or greater
local cmdSuccess, textStatus, returnCode = os.execute(cmd)
return returnCode
else
-- Lua 5.1 or lesser
local returnCode = os.execute(cmd)
return returnCode
end
end

-- Check if a source builds, links, and or/runs, where running depends on
-- linking and linking depends on building. The return from this function is
-- a triple, where the first is a boolean value indicating if it successfully
-- was built, the second is a boolean value indicating if it successfully
-- linked, and the third represents nil if it was not run or run correctly, or
-- the output from the program executed (may be empty for no output).
local function check_build_source(source, link, run)
local file = fileopen("./premakecheck.c", "wt")
local file = fileopen("./premakecheck.c", "w")
file:write(source)
file:close()
local result = os.execute(build_compile_line())
local result = os_execute(build_compile_line())
if not link then
cleanup_build()
if result == 0 then
Expand All @@ -125,13 +137,13 @@ local function check_build_source(source, link, run)
cleanup_build()
return false, false, nil -- no compile, no link, no run
end
result = os.execute(build_link_line())
result = os_execute(build_link_line())
if not run or result ~= 0 then -- have to link to run
cleanup_build()
return true, result == 0, nil -- compile, maybe link, no run
end
result = os.execute(build_run_line())
local output = readfile("./premakecheck.stdout", "rt")
result = os_execute(build_run_line())
local output = readfile("./premakecheck.stdout", "r")
cleanup_build()
return true, true, output -- compile, link, ran
end
Expand Down
4 changes: 2 additions & 2 deletions premake/util/sdl_gen_config.lua
Expand Up @@ -33,8 +33,8 @@ local insertLocation
-- This function begins config header generation given the name of the generated
-- file and the name of the template file to use.
function startGeneration(file, template)
configFile = fileopen(file, "wt")
templateFileContents = readfile(template, "rt")
configFile = fileopen(file, "w")
templateFileContents = readfile(template, "r")
insertLocation = templateFileContents:find(searchKey)
if insertLocation then
configFile:write(templateFileContents:sub(1, insertLocation - 1))
Expand Down

0 comments on commit 8d8e490

Please sign in to comment.