diff options
| -rw-r--r-- | meta/recipes-devtools/rpm/rpm/rpm-lua-fix-print.patch | 104 | ||||
| -rw-r--r-- | meta/recipes-devtools/rpm/rpm_5.4.14.bb | 1 |
2 files changed, 105 insertions, 0 deletions
diff --git a/meta/recipes-devtools/rpm/rpm/rpm-lua-fix-print.patch b/meta/recipes-devtools/rpm/rpm/rpm-lua-fix-print.patch new file mode 100644 index 0000000000..7ab49e97e2 --- /dev/null +++ b/meta/recipes-devtools/rpm/rpm/rpm-lua-fix-print.patch | |||
| @@ -0,0 +1,104 @@ | |||
| 1 | Lua 'print' statement is not working properly inside of RPM 5 | ||
| 2 | |||
| 3 | The print statement should capture the output and send it to the script | ||
| 4 | processing engine, and not display it directly to the screen. | ||
| 5 | |||
| 6 | This patch is from: http://rpm5.org/cvs/patchset?cn=17671 | ||
| 7 | |||
| 8 | Upstream-Status: backport (patchset 17671 from rpm5.org) | ||
| 9 | |||
| 10 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> | ||
| 11 | |||
| 12 | Index: rpm-5.4.14/CHANGES | ||
| 13 | =================================================================== | ||
| 14 | --- rpm-5.4.14.orig/CHANGES | ||
| 15 | +++ rpm-5.4.14/CHANGES | ||
| 16 | @@ -1,3 +1,4 @@ | ||
| 17 | + - jbj: lua: fix: resurrect output capture with lua-5.2. | ||
| 18 | - jbj: verify: fix: broken logic for %ghost avoidance (Mark Hatle). | ||
| 19 | |||
| 20 | 5.4.13 -> 5.4.14: | ||
| 21 | Index: rpm-5.4.14/rpmio/rpmlua.c | ||
| 22 | =================================================================== | ||
| 23 | --- rpm-5.4.14.orig/rpmio/rpmlua.c | ||
| 24 | +++ rpm-5.4.14/rpmio/rpmlua.c | ||
| 25 | @@ -175,7 +175,7 @@ rpmlua rpmluaNew(void) | ||
| 26 | }; | ||
| 27 | /*@=readonlytrans =nullassign @*/ | ||
| 28 | /*@observer@*/ /*@unchecked@*/ | ||
| 29 | - const luaL_Reg *lib = lualibs; | ||
| 30 | + const luaL_Reg *lib; | ||
| 31 | char *path_buf; | ||
| 32 | char *path_next; | ||
| 33 | char *path; | ||
| 34 | @@ -190,31 +190,34 @@ rpmlua rpmluaNew(void) | ||
| 35 | |||
| 36 | luaL_openlibs(L); | ||
| 37 | |||
| 38 | - for (; lib->name; lib++) { | ||
| 39 | + for (lib = lualibs; lib->name; lib++) { | ||
| 40 | luaL_requiref(L, lib->name, lib->func, 1); | ||
| 41 | + lua_pop(L, 1); | ||
| 42 | } | ||
| 43 | |||
| 44 | { const char * _lua_path = rpmGetPath(rpmluaPath, NULL); | ||
| 45 | if (_lua_path != NULL) { | ||
| 46 | +#if defined(LUA_GLOBALSINDEX) | ||
| 47 | lua_pushliteral(L, "LUA_PATH"); | ||
| 48 | lua_pushstring(L, _lua_path); | ||
| 49 | + lua_rawset(L, LUA_GLOBALSINDEX); | ||
| 50 | +#else | ||
| 51 | + lua_pushstring(L, _lua_path); | ||
| 52 | + lua_setglobal(L, "LUA_PATH"); | ||
| 53 | +#endif | ||
| 54 | _lua_path = _free(_lua_path); | ||
| 55 | } | ||
| 56 | } | ||
| 57 | |||
| 58 | #if defined(LUA_GLOBALSINDEX) | ||
| 59 | - lua_rawset(L, LUA_GLOBALSINDEX); | ||
| 60 | -#else | ||
| 61 | - lua_pushglobaltable(L); | ||
| 62 | -#endif | ||
| 63 | lua_pushliteral(L, "print"); | ||
| 64 | lua_pushcfunction(L, rpm_print); | ||
| 65 | - | ||
| 66 | -#if defined(LUA_GLOBALSINDEX) | ||
| 67 | lua_rawset(L, LUA_GLOBALSINDEX); | ||
| 68 | #else | ||
| 69 | - lua_pushglobaltable(L); | ||
| 70 | + lua_pushcfunction(L, rpm_print); | ||
| 71 | + lua_setglobal(L, "print"); | ||
| 72 | #endif | ||
| 73 | + | ||
| 74 | rpmluaSetData(lua, "lua", lua); | ||
| 75 | |||
| 76 | /* load all standard RPM Lua script files */ | ||
| 77 | @@ -351,6 +354,9 @@ void rpmluaSetVar(rpmlua _lua, rpmluav v | ||
| 78 | #if defined(LUA_GLOBALSINDEX) | ||
| 79 | if (lua->pushsize == 0) | ||
| 80 | lua_pushvalue(L, LUA_GLOBALSINDEX); | ||
| 81 | +#else | ||
| 82 | + if (lua->pushsize == 0) | ||
| 83 | + lua_pushglobaltable(L); | ||
| 84 | #endif | ||
| 85 | if (pushvar(L, var->keyType, &var->key) != -1) { | ||
| 86 | if (pushvar(L, var->valueType, &var->value) != -1) | ||
| 87 | @@ -1039,14 +1045,15 @@ static int rpm_print (lua_State *L) | ||
| 88 | lua_getglobal(L, "tostring"); | ||
| 89 | for (i = 1; i <= n; i++) { | ||
| 90 | const char *s; | ||
| 91 | + size_t l; | ||
| 92 | lua_pushvalue(L, -1); /* function to be called */ | ||
| 93 | lua_pushvalue(L, i); /* value to print */ | ||
| 94 | lua_call(L, 1, 1); | ||
| 95 | - s = lua_tostring(L, -1); /* get result */ | ||
| 96 | + s = lua_tolstring(L, -1, &l); /* get result */ | ||
| 97 | if (s == NULL) | ||
| 98 | return luaL_error(L, "`tostring' must return a string to `print'"); | ||
| 99 | if (lua->storeprint) { | ||
| 100 | - size_t sl = lua_rawlen(L, -1); | ||
| 101 | + size_t sl = l; | ||
| 102 | if ((size_t)(lua->printbufused+sl+1) > lua->printbufsize) { | ||
| 103 | lua->printbufsize += sl+512; | ||
| 104 | lua->printbuf = (char *) xrealloc(lua->printbuf, lua->printbufsize); | ||
diff --git a/meta/recipes-devtools/rpm/rpm_5.4.14.bb b/meta/recipes-devtools/rpm/rpm_5.4.14.bb index 75b1ae22cc..eac3b8f455 100644 --- a/meta/recipes-devtools/rpm/rpm_5.4.14.bb +++ b/meta/recipes-devtools/rpm/rpm_5.4.14.bb | |||
| @@ -92,6 +92,7 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.14-0.20131024.src.rpm;e | |||
| 92 | file://rpm-realpath.patch \ | 92 | file://rpm-realpath.patch \ |
| 93 | file://0001-using-poptParseArgvString-to-parse-the-_gpg_check_pa.patch \ | 93 | file://0001-using-poptParseArgvString-to-parse-the-_gpg_check_pa.patch \ |
| 94 | file://no-ldflags-in-pkgconfig.patch \ | 94 | file://no-ldflags-in-pkgconfig.patch \ |
| 95 | file://rpm-lua-fix-print.patch \ | ||
| 95 | " | 96 | " |
| 96 | 97 | ||
| 97 | # Uncomment the following line to enable platform score debugging | 98 | # Uncomment the following line to enable platform score debugging |
