Skip to content
Snippets Groups Projects
Commit 35c63611 authored by dg's avatar dg
Browse files

TE4 will now auto update its engine from te4.org unless the executable file changed (rare)

git-svn-id: http://svn.net-core.org/repos/t-engine4@1117 51575b47-30f0-44d4-a5cc-537603b46e54
parent ac29f7db
No related branches found
No related tags found
No related merge requests found
......@@ -18,11 +18,13 @@
-- darkgod@te4.org
-- Engine Version
engine.version = {0,9,9,"te4"}
engine.version_id = "te4-0.9.9"
engine.version = {0,9,10,"te4",1}
engine.require_c_core = engine.version[5]
engine.version_id = ("%s-%d_%d.%d.%d"):format(engine.version[4], engine.require_c_core, engine.version[1], engine.version[2], engine.version[3])
function engine.version_check(v)
local ev = engine.version
if v[5] ~= core.game.VERSION then return "bad C core" end
if v[4] ~= ev[4] then return "different engine" end
if v[1] > ev[1] then return "newer" end
if v[1] == ev[1] and v[2] > ev[2] then return "newer" end
......
......@@ -237,7 +237,7 @@ Now go and have some fun!]]
end
self.step.do_tooltip = true
-- self:installNewEngine()
self:installNewEngine()
if not self.firstrunchecked then
-- Check first time run for online profile
......@@ -478,11 +478,12 @@ end
function _M:installNewEngine()
if not self.latest_engine_version then return end
print("te4.org told us latest engine is", self.latest_engine_version[4], self.latest_engine_version[5], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3])
if engine.version_check(self.latest_engine_version) == "newer" then
local url = ("http://te4.org/dl/engines/%s-%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3])
local url = ("http://te4.org/dl/engines/%s_%d:%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[5], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3])
local d = DownloadDialog.new(("Downloading: T-Engine 4 %d.%d.%d"):format(self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3]), url, function(di, data)
fs.mkdir("/engines")
local f = fs.open(("/engines/%s-%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3]), "w")
local f = fs.open(("/engines/%s-%d_%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[5], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3]), "w")
for i, v in ipairs(data) do f:write(v) end
f:close()
......
......@@ -26,29 +26,34 @@ local args = {...}
local req_engine = args[1] or "te4"
local req_version = args[2] or "LATEST"
-- List all available engines
local engines = {}
local function tryLoadEngine(ff, dir, teae)
local env = {engine={}}
setfenv(ff, env)
pcall(ff)
if env.engine.version and env.engine.require_c_core == core.game.VERSION then
print("[ENGINE LOADER] available from "..(dir and "dir" or "teae")..": ", env.engine.version[4], env.engine.version[1], env.engine.version[2], env.engine.version[3])
local name = env.engine.version[4]
engines[name] = engines[name] or {}
engines[name][#engines[name]+1] = {env.engine.version[1], env.engine.version[2], env.engine.version[3], name, load_dir=dir, load_teae=teae}
end
end
-- List all available engines
for i, f in ipairs(fs.list("/engines/")) do
if fs.exists("/engines/"..f.."/engine/version.lua") then
local ff, err = loadfile("/engines/"..f.."/engine/version.lua")
if ff and not err then
local env = {engine={}}
setfenv(ff, env)
pcall(ff)
if env.engine.version then
print("[ENGINE LOADER] available from directory: ", env.engine.version[4], env.engine.version[1], env.engine.version[2], env.engine.version[3])
local name = env.engine.version[4]
engines[name] = engines[name] or {}
engines[name][#engines[name]+1] = {env.engine.version[1], env.engine.version[2], env.engine.version[3], name, load_dir="/engines/"..f.."/"}
end
end
if ff and not err then tryLoadEngine(ff, "/engines/"..f.."/", nil) end
else
local _, _, name, vM, vm, vp = f:find("^([a-z0-9-]+)%-(%d+)%.(%d+)%.(%d+).teae$")
local _, _, name, cv, vM, vm, vp = f:find("^([a-z0-9-]+)%-(%d+)_(%d+)%.(%d+)%.(%d+).teae$")
if name then
print("[ENGINE LOADER] available from teae: ", name, vM, vm, vp)
engines[name] = engines[name] or {}
engines[name][#engines[name]+1] = {tonumber(vM), tonumber(vm), tonumber(vp), name, load_teae="/engines/"..f}
local eng_path = fs.getRealPath("/engines/"..f)
fs.mount(eng_path, "/tmp")
local ff, err = loadfile("/tmp/engine/version.lua")
if ff and not err then tryLoadEngine(ff, nil, "/engines/"..f) end
fs.umount(eng_path)
end
end
end
......
......@@ -2098,7 +2098,12 @@ int luaopen_core(lua_State *L)
luaL_openlib(L, "core.display", displaylib, 0);
luaL_openlib(L, "core.mouse", mouselib, 0);
luaL_openlib(L, "core.key", keylib, 0);
luaL_openlib(L, "core.game", gamelib, 0);
lua_pushstring(L, "VERSION");
lua_pushnumber(L, 1);
lua_settable(L, -3);
luaL_openlib(L, "rng", rnglib, 0);
luaL_openlib(L, "line", linelib, 0);
luaL_openlib(L, "fs", fslib, 0);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment