Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37533620
en ru br
Репозитории ALT
S:1.6.2.2-alt3
D:1.5.0-alt1
5.1: 1.6.0-alt4
4.1: 1.5.0-alt2
4.0: 1.4.1-alt5
+backports:1.4.1-alt5
3.0: 1.3.2-alt2
www.altlinux.org/Changes

Другие репозитории
Upstream:1.5.0

Группа :: Обучение
Пакет: celestia

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: celestia-1.6.1-alt-lua5.2.patch
Скачать


diff --git a/celestia/configure.in b/celestia/configure.in
index 766cd11..1652787 100644
--- a/celestia/configure.in
+++ b/celestia/configure.in
@@ -408,11 +408,15 @@ AC_ARG_WITH([lua],
 
 if (test "$enable_lua" != "no"); then
 	LUA_VER=0
-	PKG_CHECK_MODULES(LUA, lua5.1 >= 5.1.0, LUA_VER=0x050100, 
-		[ PKG_CHECK_MODULES(LUA, lua >= 5.1.0, LUA_VER=0x050100, 
-		  [ PKG_CHECK_MODULES(LUA, lua50 >= 5.0.0 lua50 < 5.1.0, LUA_VER=0x050000,
-		    [ PKG_CHECK_MODULES(LUA, lua >= 5.0.0 lua < 5.1.0, LUA_VER=0x050000, AC_MSG_RESULT([no])) ] 
-		    ) ] 
+	PKG_CHECK_MODULES(LUA, lua5.2 >= 5.2.0, LUA_VER=0x050200,
+		[ PKG_CHECK_MODULES(LUA, lua >= 5.2.0, LUA_VER=0x050200,
+		  [ PKG_CHECK_MODULES(LUA, lua5.1 >= 5.1.0, LUA_VER=0x050100,
+		    [ PKG_CHECK_MODULES(LUA, lua >= 5.1.0, LUA_VER=0x050100,
+		      [ PKG_CHECK_MODULES(LUA, lua50 >= 5.0.0 lua50 < 5.1.0, LUA_VER=0x050000,
+		        [ PKG_CHECK_MODULES(LUA, lua >= 5.0.0 lua < 5.1.0, LUA_VER=0x050000, AC_MSG_RESULT([no])) ]
+		        ) ]
+		      ) ]
+                    ) ]
 		) ]
 	)
 	if (test "$LUA_VER" = "0x050000"); then
diff --git a/celestia/src/celengine/scriptorbit.cpp b/celestia/src/celengine/scriptorbit.cpp
index a8057b4..ac56bd8 100644
--- a/celestia/src/celengine/scriptorbit.cpp
+++ b/celestia/src/celengine/scriptorbit.cpp
@@ -73,8 +73,7 @@ ScriptedOrbit::initialize(const std::string& moduleName,
 
     if (!moduleName.empty())
     {
-        lua_pushstring(luaState, "require");
-        lua_gettable(luaState, LUA_GLOBALSINDEX);
+        lua_getglobal(luaState, "require");
         if (!lua_isfunction(luaState, -1))
         {
             clog << "Cannot load ScriptedOrbit package: 'require' function is unavailable\n";
@@ -92,8 +91,7 @@ ScriptedOrbit::initialize(const std::string& moduleName,
     }
 
     // Get the orbit generator function
-    lua_pushstring(luaState, funcName.c_str());
-    lua_gettable(luaState, LUA_GLOBALSINDEX);
+    lua_getglobal(luaState, funcName.c_str());
 
     if (lua_isfunction(luaState, -1) == 0)
     {
@@ -157,9 +155,8 @@ ScriptedOrbit::initialize(const std::string& moduleName,
     luaOrbitObjectName = GenerateScriptObjectName();
 
     // Attach the name to the script orbit
-    lua_pushstring(luaState, luaOrbitObjectName.c_str());
     lua_pushvalue(luaState, -2); // dup the orbit object on top of stack
-    lua_settable(luaState, LUA_GLOBALSINDEX);
+    lua_setglobal(luaState, luaOrbitObjectName.c_str());
 
     // Now, call orbit object methods to get the bounding radius
     // and valid time range.
@@ -206,8 +203,7 @@ ScriptedOrbit::computePosition(double tjd) const
 {
     Point3d pos(0.0, 0.0, 0.0);
 
-    lua_pushstring(luaState, luaOrbitObjectName.c_str());
-    lua_gettable(luaState, LUA_GLOBALSINDEX);
+    lua_getglobal(luaState, luaOrbitObjectName.c_str());
     if (lua_istable(luaState, -1))
     {
         lua_pushstring(luaState, "position");
diff --git a/celestia/src/celengine/scriptrotation.cpp b/celestia/src/celengine/scriptrotation.cpp
index 1d03493..a7d70b8 100644
--- a/celestia/src/celengine/scriptrotation.cpp
+++ b/celestia/src/celengine/scriptrotation.cpp
@@ -74,8 +74,7 @@ ScriptedRotation::initialize(const std::string& moduleName,
 
     if (!moduleName.empty())
     {
-        lua_pushstring(luaState, "require");
-        lua_gettable(luaState, LUA_GLOBALSINDEX);
+        lua_getglobal(luaState, "require");
         if (!lua_isfunction(luaState, -1))
         {
             clog << "Cannot load ScriptedRotation package: 'require' function is unavailable\n";
@@ -93,8 +92,7 @@ ScriptedRotation::initialize(const std::string& moduleName,
     }
 
     // Get the rotation generator function
-    lua_pushstring(luaState, funcName.c_str());
-    lua_gettable(luaState, LUA_GLOBALSINDEX);
+    lua_getglobal(luaState, funcName.c_str());
 
     if (lua_isfunction(luaState, -1) == 0)
     {
@@ -131,9 +129,8 @@ ScriptedRotation::initialize(const std::string& moduleName,
     luaRotationObjectName = GenerateScriptObjectName();
 
     // Attach the name to the script rotation
-    lua_pushstring(luaState, luaRotationObjectName.c_str());
     lua_pushvalue(luaState, -2); // dup the rotation object on top of stack
-    lua_settable(luaState, LUA_GLOBALSINDEX);
+    lua_setglobal(luaState, luaRotationObjectName.c_str());
 
     // Get the rest of the rotation parameters; they are all optional.
     period          = SafeGetLuaNumber(luaState, -1, "period", 0.0);
@@ -160,8 +157,7 @@ ScriptedRotation::spin(double tjd) const
 {
     if (tjd != lastTime || !cacheable)
     {
-        lua_pushstring(luaState, luaRotationObjectName.c_str());
-        lua_gettable(luaState, LUA_GLOBALSINDEX);
+        lua_getglobal(luaState, luaRotationObjectName.c_str());
         if (lua_istable(luaState, -1))
         {
             lua_pushstring(luaState, "orientation");
diff --git a/celestia/src/celestia/celx.cpp b/celestia/src/celestia/celx.cpp
index fe58eb7..be3f2fa 100644
--- a/celestia/src/celestia/celx.cpp
+++ b/celestia/src/celestia/celx.cpp
@@ -50,6 +50,10 @@
 #include "celx.h"
 #include "celestiacore.h"
 
+#ifndef lua_open
+#define lua_open()     luaL_newstate()
+#endif
+
 using namespace std;
 
 const char* CelxLua::ClassNames[] =
@@ -293,14 +297,7 @@ void CelxLua::initMaps()
 
 static void getField(lua_State* l, int index, const char* key)
 {
-    // When we move to Lua 5.1, this will be replaced by:
-    // lua_getfield(l, index, key);
-    lua_pushstring(l, key);
-
-    if (index != LUA_GLOBALSINDEX && index != LUA_REGISTRYINDEX)
-        lua_gettable(l, index - 1);
-    else
-        lua_gettable(l, index);
+    lua_getfield(l, index, key);
 }
 
 
@@ -582,8 +579,7 @@ void LuaState::cleanup()
             lua_pop(state,1);
         }
     }
-    lua_pushstring(costate, CleanupCallback);
-    lua_gettable(costate, LUA_GLOBALSINDEX);
+    lua_getglobal(costate, CleanupCallback);
     if (lua_isnil(costate, -1))
     {
         return;
@@ -653,7 +649,11 @@ static int resumeLuaThread(lua_State *L, lua_State *co, int narg)
     //   luaL_error(L, "too many arguments to resume");
     lua_xmove(L, co, narg);
 
+#if LUA_VER >= 0x050200
+    status = lua_resume(co, NULL, narg);
+#else
     status = lua_resume(co, narg);
+#endif
 #if LUA_VER >= 0x050100
     if (status == 0 || status == LUA_YIELD)
 #else
@@ -767,8 +767,7 @@ bool LuaState::charEntered(const char* c_p)
     int stack_top = lua_gettop(costate);
 #endif
     bool result = true;
-    lua_pushstring(costate, KbdCallback);
-    lua_gettable(costate, LUA_GLOBALSINDEX);
+    lua_getglobal(costate, KbdCallback);
     lua_pushstring(costate, c_p);
     timeout = getTime() + 1.0;
     if (lua_pcall(costate, 1, 1, 0) != 0)
@@ -960,8 +959,11 @@ int LuaState::loadScript(istream& in, const string& streamname)
         lua_pushstring(state, streamname.c_str());
         lua_settable(state, LUA_REGISTRYINDEX);
     }
-
+#if LUA_VER >= 0x050200
+    int status = lua_load(state, readStreamChunk, &info, streamname.c_str(), NULL);
+#else
     int status = lua_load(state, readStreamChunk, &info, streamname.c_str());
+#endif
     if (status != 0)
         cout << "Error loading script: " << lua_tostring(state, -1) << '\n';
 
@@ -3100,8 +3102,7 @@ static int celestia_requestkeyboard(lua_State* l)
     if (lua_toboolean(l, 2))
     {
         // Check for existence of charEntered:
-        lua_pushstring(l, KbdCallback);
-        lua_gettable(l, LUA_GLOBALSINDEX);
+        lua_getglobal(l, KbdCallback);
         if (lua_isnil(l, -1))
         {
             Celx_DoError(l, "script requested keyboard, but did not provide callback");
@@ -3430,16 +3431,14 @@ bool LuaState::init(CelestiaCore* appCore)
         return false;
     }
 
-    lua_pushstring(state, "KM_PER_MICROLY");
     lua_pushnumber(state, (lua_Number)KM_PER_LY/1e6);
-    lua_settable(state, LUA_GLOBALSINDEX);
+    lua_setglobal(state, "KM_PER_MICROLY");
 
     loadLuaLibs(state);
 
     // Create the celestia object
-    lua_pushstring(state, "celestia");
     celestia_new(state, appCore);
-    lua_settable(state, LUA_GLOBALSINDEX);
+    lua_setglobal(state, "celestia");
     // add reference to appCore in the registry
     lua_pushstring(state, "celestia-appcore");
     lua_pushlightuserdata(state, static_cast<void*>(appCore));
@@ -3475,7 +3474,7 @@ bool LuaState::init(CelestiaCore* appCore)
 void LuaState::setLuaPath(const string& s)
 {
 #if LUA_VER >= 0x050100
-    lua_getfield(state, LUA_GLOBALSINDEX, "package");
+    lua_getglobal(state, "package");
     lua_pushstring(state, s.c_str());
     lua_setfield(state, -2, "path");
     lua_pop(state, 1);
@@ -3989,7 +3988,7 @@ void LuaState::allowLuaPackageAccess()
     openLuaLibrary(state, LUA_LOADLIBNAME, luaopen_package);
 
     // Disallow loadlib
-    lua_getfield(state, LUA_GLOBALSINDEX, "package");
+    lua_getglobal(state, "package");
     lua_pushnil(state);
     lua_setfield(state, -2, "loadlib");
     lua_pop(state, 1);
diff --git a/celestia/src/celestia/celx_gl.cpp b/celestia/src/celestia/celx_gl.cpp
index e322928..11ea8f4 100644
--- a/celestia/src/celestia/celx_gl.cpp
+++ b/celestia/src/celestia/celx_gl.cpp
@@ -221,7 +221,6 @@ static int gl_PushMatrix(lua_State* l)
 void LoadLuaGraphicsLibrary(lua_State* l)
 {
     CelxLua celx(l);
-    lua_pushstring(l, "gl");
     lua_newtable(l);
     
     celx.registerMethod("Frustum", gl_Frustum);
@@ -259,11 +258,10 @@ void LoadLuaGraphicsLibrary(lua_State* l)
     celx.registerValue("NEAREST", GL_NEAREST);
     celx.registerValue("SRC_ALPHA", GL_SRC_ALPHA);
     celx.registerValue("ONE_MINUS_SRC_ALPHA", GL_ONE_MINUS_SRC_ALPHA);
-    lua_settable(l, LUA_GLOBALSINDEX);
+    lua_setglobal(l, "gl");
     
-    lua_pushstring(l, "glu");
     lua_newtable(l);
     celx.registerMethod("LookAt", glu_LookAt);
     celx.registerMethod("Ortho2D", glu_Ortho2D);
-    lua_settable(l, LUA_GLOBALSINDEX);
+    lua_setglobal(l, "glu");
 }
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin