[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD
From: |
Maxime Devos |
Subject: |
[bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH. |
Date: |
Tue, 03 Aug 2021 13:10:25 +0200 |
User-agent: |
Evolution 3.34.2 |
I forgot to attach the patch.
From e999b5ef71d393eddd5767a108a7bd864ff6ec50 Mon Sep 17 00:00:00 2001
From: Maxime Devos <maximedevos@telenet.be>
Date: Sat, 31 Jul 2021 18:08:44 +0200
Subject: [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH.
* gnu/packages/patches/Add-environment-variable-MINETEST_MOD_PATH.patch:
New file.
* gnu/packages/games.scm
(minetest)[source]{patches}: Add it.
(minetest)[native-search-paths]: Add "MINETEST_MOD_PATH".
* gnu/local.mk (dist_patch_DATA): Add the patch.
---
gnu/local.mk | 1 +
gnu/packages/games.scm | 6 +-
...vironment-variable-MINETEST_MOD_PATH.patch | 162 ++++++++++++++++++
3 files changed, 168 insertions(+), 1 deletion(-)
create mode 100644
gnu/packages/patches/Add-environment-variable-MINETEST_MOD_PATH.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index c80a9af78c..d96d4e3dbc 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -801,6 +801,7 @@ dist_patch_DATA =
\
%D%/packages/patches/abseil-cpp-fix-gtest.patch \
%D%/packages/patches/abseil-cpp-fix-strerror_test.patch \
%D%/packages/patches/adb-add-libraries.patch \
+ %D%/packages/patches/Add-environment-variable-MINETEST_MOD_PATH.patch
\
%D%/packages/patches/aegis-constness-error.patch \
%D%/packages/patches/aegis-perl-tempdir1.patch \
%D%/packages/patches/aegis-perl-tempdir2.patch \
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 3e7086b398..6a30c53e32 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -3553,6 +3553,7 @@ match, cannon keep, and grave-itation pit.")
(base32
"062ilb7s377q3hwfhl8q06vvcw2raydz5ljzlzwy2dmyzmdcndb8"))
(modules '((guix build utils)))
+ (patches (search-patches
"Add-environment-variable-MINETEST_MOD_PATH.patch"))
(snippet
'(begin
;; Delete bundled libraries.
@@ -3599,7 +3600,10 @@ match, cannon keep, and grave-itation pit.")
(native-search-paths
(list (search-path-specification
(variable "MINETEST_SUBGAME_PATH")
- (files '("share/minetest/games")))))
+ (files '("share/minetest/games")))
+ (search-path-specification
+ (variable "MINETEST_MOD_PATH")
+ (files '("share/minetest/mods")))))
(native-inputs
`(("pkg-config" ,pkg-config)))
(inputs
diff --git
a/gnu/packages/patches/Add-environment-variable-MINETEST_MOD_PATH.patch
b/gnu/packages/patches/Add-environment-variable-MINETEST_MOD_PATH.patch
new file mode 100644
index 0000000000..8d72c42bf9
--- /dev/null
+++ b/gnu/packages/patches/Add-environment-variable-MINETEST_MOD_PATH.patch
@@ -0,0 +1,162 @@
+From dccaae3aebedb5178201ba818b8264fdb9e5e832 Mon Sep 17 00:00:00 2001
+From: Maxime Devos <maximedevos@telenet.be>
+Date: Tue, 3 Aug 2021 01:00:23 +0200
+Subject: [PATCH] Add environment variable MINETEST_MOD_PATH
+
+This adds an environment variable MINETEST_MOD_PATH.
+When it exists, Minetest will look there for mods
+in addition to ~/.minetest/mods/. Mods can still be
+installed to ~/.minetest/mods/ with the built-in installer.
+---
+ builtin/mainmenu/pkgmgr.lua | 7 +++----
+ doc/menu_lua_api.txt | 8 +++++++-
+ src/content/subgames.cpp | 11 +++++++++++
+ src/script/lua_api/l_mainmenu.cpp | 31 +++++++++++++++++++++++++++++++
+ src/script/lua_api/l_mainmenu.h | 2 ++
+ 5 files changed, 54 insertions(+), 5 deletions(-)
+
+diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua
+index 787936e31..d8fba0ebe 100644
+--- a/builtin/mainmenu/pkgmgr.lua
++++ b/builtin/mainmenu/pkgmgr.lua
+@@ -682,10 +682,9 @@ function pkgmgr.preparemodlist(data)
+ local game_mods = {}
+
+ --read global mods
+- local modpath = core.get_modpath()
+-
+- if modpath ~= nil and
+- modpath ~= "" then
++ local modpaths = core.get_modpaths()
++ --XXX what was ‘modpath ~= ""’ and ‘modpath ~= nil’ for?
++ for _,modpath in ipairs(modpaths) do
+ get_mods(modpath,global_mods)
+ end
+
+diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
+index b3975bc1d..132444b14 100644
+--- a/doc/menu_lua_api.txt
++++ b/doc/menu_lua_api.txt
+@@ -218,7 +218,13 @@ Package - content which is downloadable from the content
db, may or may not be i
+ * returns path to global user data,
+ the directory that contains user-provided mods, worlds, games, and
texture packs.
+ * core.get_modpath() (possible in async calls)
+- * returns path to global modpath
++ * returns path to global modpath, where mods can be installed
++* core.get_modpaths() (possible in async calls)
++ * returns list of paths to global modpaths, where mods have been installed
++
++ The difference with "core.get_modpath" is that no mods should be
installed in these
++ directories by Minetest -- they might be read-only.
++
+ * core.get_clientmodpath() (possible in async calls)
+ * returns path to global client-side modpath
+ * core.get_gamepath() (possible in async calls)
+diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp
+index e9dc609b0..d73f95a1f 100644
+--- a/src/content/subgames.cpp
++++ b/src/content/subgames.cpp
+@@ -61,6 +61,12 @@ std::string getSubgamePathEnv()
+ return subgame_path ? std::string(subgame_path) : "";
+ }
+
++std::string getModPathEnv()
++{
++ char *mod_path = getenv("MINETEST_MOD_PATH");
++ return mod_path ? std::string(mod_path) : "";
++}
++
+ SubgameSpec findSubgame(const std::string &id)
+ {
+ if (id.empty())
+@@ -110,6 +116,11 @@ SubgameSpec findSubgame(const std::string &id)
+ std::set<std::string> mods_paths;
+ if (!user_game)
+ mods_paths.insert(share + DIR_DELIM + "mods");
++
++ Strfnd mod_search_paths(getModPathEnv());
++ while (!mod_search_paths.at_end())
++ mods_paths.insert(mod_search_paths.next(PATH_DELIM));
++
+ if (user != share || user_game)
+ mods_paths.insert(user + DIR_DELIM + "mods");
+
+diff --git a/src/script/lua_api/l_mainmenu.cpp
b/src/script/lua_api/l_mainmenu.cpp
+index 3e9709bde..c1647195f 100644
+--- a/src/script/lua_api/l_mainmenu.cpp
++++ b/src/script/lua_api/l_mainmenu.cpp
+@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software
Foundation, Inc.,
+ #include "lua_api/l_internal.h"
+ #include "common/c_content.h"
+ #include "cpp_api/s_async.h"
++#include "util/strfnd.h"
+ #include "gui/guiEngine.h"
+ #include "gui/guiMainMenu.h"
+ #include "gui/guiKeyChangeMenu.h"
+@@ -502,6 +503,34 @@ int ModApiMainMenu::l_get_modpath(lua_State *L)
+ return 1;
+ }
+
++/******************************************************************************/
++int ModApiMainMenu::l_get_modpaths(lua_State *L)
++{
++ const char *c_modpath = getenv("MINETEST_MOD_PATH");
++ if (c_modpath == NULL)
++ c_modpath = "";
++ int index = 1;
++ lua_newtable(L);
++ // XXX: for some reason, simply writing
++ // Strfnd mod_search_paths (std::string(c_modpath));
++ // leads to a compilation error:
++ //
++ // request for member ‘at_end’ in ‘mod_search_paths’, which is of
++ // non-class type ‘Strfnd(std::__cxx11::string)
++ // {aka BasicStrfnd<char>(std::__cxx11::basic_string<char>)}’
++ std::string modpath = std::string(c_modpath);
++ Strfnd mod_search_paths(modpath);
++ while (!mod_search_paths.at_end()) {
++ std::string component = mod_search_paths.next(PATH_DELIM);
++ lua_pushstring(L, component.c_str());
++ lua_rawseti(L, -2, index);
++ index++;
++ }
++ ModApiMainMenu::l_get_modpath(L);
++ lua_rawseti(L, -2, index);
++ return 1;
++}
++
+
/******************************************************************************/
+ int ModApiMainMenu::l_get_clientmodpath(lua_State *L)
+ {
+@@ -949,6 +978,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
+ API_FCT(get_mapgen_names);
+ API_FCT(get_user_path);
+ API_FCT(get_modpath);
++ API_FCT(get_modpaths);
+ API_FCT(get_clientmodpath);
+ API_FCT(get_gamepath);
+ API_FCT(get_texturepath);
+@@ -983,6 +1013,7 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int
top)
+ API_FCT(get_mapgen_names);
+ API_FCT(get_user_path);
+ API_FCT(get_modpath);
++ API_FCT(get_modpaths);
+ API_FCT(get_clientmodpath);
+ API_FCT(get_gamepath);
+ API_FCT(get_texturepath);
+diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h
+index 33ac9e721..a6a54a2cb 100644
+--- a/src/script/lua_api/l_mainmenu.h
++++ b/src/script/lua_api/l_mainmenu.h
+@@ -112,6 +112,8 @@ class ModApiMainMenu: public ModApiBase
+
+ static int l_get_modpath(lua_State *L);
+
++ static int l_get_modpaths(lua_State *L);
++
+ static int l_get_clientmodpath(lua_State *L);
+
+ static int l_get_gamepath(lua_State *L);
+--
+2.32.0
+
--
2.32.0
signature.asc
Description: This is a digitally signed message part
- [bug#49828] [PATCH 00/20] Add minetest mods, Maxime Devos, 2021/08/02
- [bug#49828] [PATCH 01/20] gnu: minetest: Respect --without-tests., Maxime Devos, 2021/08/02
- [bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH., Maxime Devos, 2021/08/02
- [bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH., Leo Prikler, 2021/08/02
- [bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH., Maxime Devos, 2021/08/02
- [bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH., Leo Prikler, 2021/08/02
- [bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH., Maxime Devos, 2021/08/03
- [bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH.,
Maxime Devos <=
- [bug#49828] [PATCH 02/20] gnu: minetest: Search for mods in MINETEST_MOD_PATH., Leo Prikler, 2021/08/03
[bug#49828] [PATCH 04/20] build-system: Add 'minetest-mod-build-system'., Maxime Devos, 2021/08/02
[bug#49828] [PATCH 03/20] gnu: minetest: New package module., Maxime Devos, 2021/08/02
[bug#49828] [PATCH 09/20] gnu: Add minetest-unifieddyes., Maxime Devos, 2021/08/02
[bug#49828] [PATCH 05/20] build-system: minetest: Don't retain references to "bash-minimal"., Maxime Devos, 2021/08/02
- [bug#49828] [PATCH 05/20] build-system: minetest: Don't retain references to "bash-minimal"., Leo Prikler, 2021/08/03
- [bug#49828] [PATCH 05/20] build-system: minetest: Don't retain references to "bash-minimal"., Maxime Devos, 2021/08/03
- [bug#49828] [PATCH 05/20] build-system: minetest: Don't retain references to "bash-minimal"., Leo Prikler, 2021/08/03
- [bug#49828] [PATCH 05/20] build-system: minetest: Don't retain references to "bash-minimal"., Maxime Devos, 2021/08/05
- [bug#49828] [PATCH 05/20] build-system: minetest: Don't retain references to "bash-minimal"., Leo Prikler, 2021/08/05