diff options
Diffstat (limited to 'gnu/packages/patches/minetest-subgame-env-var.patch')
-rw-r--r-- | gnu/packages/patches/minetest-subgame-env-var.patch | 92 |
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 + |