summary refs log tree commit diff
path: root/gnu/packages/patches/minetest-subgame-env-var.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/minetest-subgame-env-var.patch')
-rw-r--r--gnu/packages/patches/minetest-subgame-env-var.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/gnu/packages/patches/minetest-subgame-env-var.patch b/gnu/packages/patches/minetest-subgame-env-var.patch
new file mode 100644
index 0000000000..de782284c9
--- /dev/null
+++ b/gnu/packages/patches/minetest-subgame-env-var.patch
@@ -0,0 +1,92 @@
+From fd5eaae2babb322f8a3e2acab55a12e218814c8e Mon Sep 17 00:00:00 2001
+From: David Thompson <dthompson2@worcester.edu>
+Date: Sat, 6 Sep 2014 13:21:46 -0400
+Subject: [PATCH] Search for subgames using $MINETEST_SUBGAME_PATH.
+
+---
+ doc/minetest.6  |  6 ++++++
+ src/subgame.cpp | 30 ++++++++++++++++++++++++++++++
+ 2 files changed, 36 insertions(+)
+
+diff --git a/doc/minetest.6 b/doc/minetest.6
+index d94c12c..ff54520 100644
+--- a/doc/minetest.6
++++ b/doc/minetest.6
+@@ -83,6 +83,12 @@ Set world path
+ Migrate from current map backend to another. Possible values are sqlite3
+ and leveldb. Only works when using --server.
+ 
++.SH ENVIRONMENT VARIABLES
++
++.TP
++MINETEST_SUBGAME_PATH
++Colon delimited list of directories to search for subgames.
++
+ .SH BUGS
+ Please report all bugs to Perttu Ahola <celeron55@gmail.com>.
+ 
+diff --git a/src/subgame.cpp b/src/subgame.cpp
+index f2465c9..e86655b 100644
+--- a/src/subgame.cpp
++++ b/src/subgame.cpp
+@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
+ #include "filesys.h"
+ #include "settings.h"
+ #include "log.h"
++#include "strfnd.h"
+ #ifndef SERVER
+ #include "tile.h" // getImagePath
+ #endif
+@@ -59,6 +60,17 @@ struct GameFindPath
+ 	{}
+ };
+ 
++Strfnd getSubgamePathEnv() {
++  std::string sp;
++  char *subgame_path = getenv("MINETEST_SUBGAME_PATH");
++
++  if(subgame_path) {
++    sp = std::string(subgame_path);
++  }
++
++  return Strfnd(sp);
++}
++
+ SubgameSpec findSubgame(const std::string &id)
+ {
+ 	if(id == "")
+@@ -66,6 +78,17 @@ SubgameSpec findSubgame(const std::string &id)
+ 	std::string share = porting::path_share;
+ 	std::string user = porting::path_user;
+ 	std::vector<GameFindPath> find_paths;
++
++        Strfnd search_paths = getSubgamePathEnv();
++
++        while(!search_paths.atend()) {
++                std::string path = search_paths.next(":");
++                find_paths.push_back(GameFindPath(
++                                       path + DIR_DELIM + id, false));
++                find_paths.push_back(GameFindPath(
++                                       path + DIR_DELIM + id + "_game", false));
++        }
++
+ 	find_paths.push_back(GameFindPath(
+ 			user + DIR_DELIM + "games" + DIR_DELIM + id + "_game", true));
+ 	find_paths.push_back(GameFindPath(
+@@ -129,6 +152,13 @@ std::set<std::string> getAvailableGameIds()
+ 	std::set<std::string> gamespaths;
+ 	gamespaths.insert(porting::path_share + DIR_DELIM + "games");
+ 	gamespaths.insert(porting::path_user + DIR_DELIM + "games");
++
++        Strfnd search_paths = getSubgamePathEnv();
++
++        while(!search_paths.atend()) {
++                gamespaths.insert(search_paths.next(":"));
++        }
++
+ 	for(std::set<std::string>::const_iterator i = gamespaths.begin();
+ 			i != gamespaths.end(); i++){
+ 		std::vector<fs::DirListNode> dirlist = fs::GetDirListing(*i);
+-- 
+2.1.1
+