From 6e206ac7884f59ccda19c7edba8957f4c7bb5a88 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 5 Sep 2014 14:46:44 -0400 Subject: gnu: Add minetest. * gnu/packages/patches/minetest-subgame-env-var.patch: New file. * gnu-system.am (dist_patch_DATA): Add it. * gnu/packages/games.scm (minetest): New variable. --- gnu/packages/games.scm | 74 +++++++++++++++++ .../patches/minetest-subgame-env-var.patch | 92 ++++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 gnu/packages/patches/minetest-subgame-env-var.patch (limited to 'gnu') diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 65e607b26f..c9bb67858e 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -56,6 +56,9 @@ #:use-module (gnu packages pulseaudio) #:use-module (gnu packages linux) #:use-module (gnu packages zip) + #:use-module (gnu packages xiph) + #:use-module (gnu packages curl) + #:use-module (gnu packages lua) #:use-module (guix build-system trivial) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) @@ -659,3 +662,74 @@ for common mesh file formats, and collision detection.") "Game data for the Minetest infinite-world block sandox game.") (home-page "http://minetest.net") (license license:lgpl2.1+))) + +(define-public minetest + (package + (name "minetest") + (version "0.4.10") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/minetest/minetest/archive/" + version ".tar.gz")) + (sha256 + (base32 + "1xxv0g83iqszjgwnbdcbsprqg76cb6jnbsh5qhm7lcwx4wy2y2k2")) + ;; This patch will be included in future upstream releases. + ;; See: https://github.com/minetest/minetest/commit/fd5eaae2babb322f8a3e2acab55a12e218814c8e + (patches (list (search-patch "minetest-subgame-env-var.patch"))))) + (build-system cmake-build-system) + (arguments + '(#:modules ((guix build utils) + (guix build cmake-build-system) + (ice-9 match)) + #:phases (alist-cons-before + 'configure 'set-cpath + (lambda* (#:key inputs #:allow-other-keys) + (use-modules (ice-9 match)) + ;; Adjust the CPATH so that cmake can find irrlicht, + ;; openal, and curl headers. + (set-path-environment-variable "CPATH" + '("include/AL" + "include/irrlicht" + "include/curl" + "include") + (map (match-lambda + ((_ . dir) dir)) + inputs))) + %standard-phases) + #:configure-flags '("-DRUN_IN_PLACE=0" + "-DENABLE_FREETYPE=1" + "-DENABLE_GETTEXT=1") + #:tests? #f)) ; no check target + (native-search-paths + (list (search-path-specification + (variable "MINETEST_SUBGAME_PATH") + (directories '("share/minetest/games"))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("irrlicht" ,irrlicht) + ("libpng" ,libpng) + ("libjpeg-8" ,libjpeg-8) + ("libxxf86vm" ,libxxf86vm) + ("mesa" ,mesa) + ("libogg" ,libogg) + ("libvorbis" ,libvorbis) + ("openal" ,openal) + ("freetype" ,(@ (gnu packages fontutils) freetype)) + ("curl" ,curl) + ("luajit" ,luajit) + ("gettext" ,gnu-gettext) + ("sqlite" ,sqlite))) + (propagated-inputs + `(("minetest-data" ,minetest-data))) + (synopsis "Infinite-world block sandbox game") + (description + "Minetest is a sandbox construction game. Players can create and destroy +various types of blocks in a three-dimensional open world. This allows +forming structures in every possible creation, on multiplayer servers or as a +single player. Mods and texture packs allow players to personalize the game +in different ways.") + (home-page "http://minetest.net") + (license license:lgpl2.1+))) 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 +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 . + +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 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 getAvailableGameIds() + std::set 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::const_iterator i = gamespaths.begin(); + i != gamespaths.end(); i++){ + std::vector dirlist = fs::GetDirListing(*i); +-- +2.1.1 + -- cgit v1.2.3