From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39679) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cyPBN-0005YZ-Hz for guix-patches@gnu.org; Wed, 12 Apr 2017 16:48:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cyPBK-00038l-Sx for guix-patches@gnu.org; Wed, 12 Apr 2017 16:48:05 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:46627) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cyPBK-00038e-Oi for guix-patches@gnu.org; Wed, 12 Apr 2017 16:48:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1cyPBK-0005Yk-Is for guix-patches@gnu.org; Wed, 12 Apr 2017 16:48:02 -0400 Subject: bug#26468: [PATCH 2/2] gnu: Add teeworlds. Resent-Message-ID: From: Ricardo Wurmus Date: Wed, 12 Apr 2017 22:47:01 +0200 Message-Id: <20170412204701.22146-2-rekado@elephly.net> In-Reply-To: <20170412204701.22146-1-rekado@elephly.net> References: <20170412204701.22146-1-rekado@elephly.net> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 26468@debbugs.gnu.org Cc: Ricardo Wurmus * gnu/packages/games.scm (teeworlds): New variable. * gnu/packages/patches/teeworlds-use-latest-wavpack.patch: New file. * gnu/local.mk (dist_patch_DATA): Add patch. --- gnu/local.mk | 1 + gnu/packages/games.scm | 89 ++++++++++++++++++++++ .../patches/teeworlds-use-latest-wavpack.patch | 84 ++++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 gnu/packages/patches/teeworlds-use-latest-wavpack.patch diff --git a/gnu/local.mk b/gnu/local.mk index 4ef3f22b7..38b95c3bb 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -955,6 +955,7 @@ dist_patch_DATA = \ %D%/packages/patches/tcsh-fix-autotest.patch \ %D%/packages/patches/tcsh-fix-out-of-bounds-read.patch \ %D%/packages/patches/teensy-loader-cli-help.patch \ + %D%/packages/patches/teeworlds-use-latest-wavpack.patch \ %D%/packages/patches/texlive-texmf-CVE-2016-10243.patch \ %D%/packages/patches/texi2html-document-encoding.patch \ %D%/packages/patches/texi2html-i18n.patch \ diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 710b2746c..a956f0ca4 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -56,6 +56,7 @@ #:use-module (gnu packages autotools) #:use-module (gnu packages backup) #:use-module (gnu packages base) + #:use-module (gnu packages build-tools) #:use-module (gnu packages admin) #:use-module (gnu packages audio) #:use-module (gnu packages avahi) @@ -3649,3 +3650,91 @@ small robot living in the nano world, repair its maker.") ;; kiki-the-nano-bot/kiki-the-nano-bot_1.0.2+dfsg1-4_copyright> ;; for a statement from the author. (license license:public-domain))) + +(define-public teeworlds + (package + (name "teeworlds") + (version "0.6.4") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/teeworlds/teeworlds/" + "archive/" version "-release.tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "1mqhp6xjl75l49050cid36wxyjn1qr0vjx1c709dfg1lkvmgs6l3")) + (modules '((guix build utils))) + (snippet + '(begin + (for-each delete-file-recursively + '("src/engine/external/wavpack/" + "src/engine/external/zlib/")) + #t)) + (patches + (search-patches "teeworlds-use-latest-wavpack.patch")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; no tests included + #:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + ;; Embed path to assets. + (substitute* "src/engine/shared/storage.cpp" + (("#define DATA_DIR.*") + (string-append "#define DATA_DIR \"" + (assoc-ref outputs "out") + "/share/teeworlds/data" + "\""))) + + ;; Bam expects all files to have a recent time stamp. + (for-each (lambda (file) + (utime file 1 1)) + (find-files ".")) + + ;; Do not use bundled libraries. + (substitute* "bam.lua" + (("if config.zlib.value == 1 then") + "if true then") + (("wavpack = .*") + "wavpack = {} +settings.link.libs:Add(\"wavpack\")\n")) + (substitute* "src/engine/client/sound.cpp" + (("#include ") + "#include ")) + #t)) + (replace 'build + (lambda _ + (zero? (system* "bam" "-a" "-v" "release")))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (data (string-append out "/share/teeworlds/data"))) + (mkdir-p bin) + (mkdir-p data) + (for-each (lambda (file) + (install-file file bin)) + '("teeworlds" "teeworlds_srv")) + (copy-recursively "data" data) + #t)))))) + ;; FIXME: teeworlds bundles the sources of "pnglite", a two-file PNG + ;; library without a build system. + (inputs + `(("freetype" ,freetype) + ("glu" ,glu) + ("mesa" ,mesa) + ("sdl-union" ,(sdl-union (list sdl + sdl-mixer + sdl-image))) + ("wavpack" ,wavpack) + ("zlib" ,zlib))) + (native-inputs + `(("bam" ,bam) + ("python" ,python-2))) + (home-page "https://www.teeworlds.com") + (synopsis "2D retro multiplayer shooter game") + (description "Teeworlds is an online multiplayer game. Battle with up to +16 players in a variety of game modes, including Team Deathmatch and Capture +The Flag. You can even design your own maps!") + (license license:bsd-3))) diff --git a/gnu/packages/patches/teeworlds-use-latest-wavpack.patch b/gnu/packages/patches/teeworlds-use-latest-wavpack.patch new file mode 100644 index 000000000..e9fd99108 --- /dev/null +++ b/gnu/packages/patches/teeworlds-use-latest-wavpack.patch @@ -0,0 +1,84 @@ +Downloaded from https://anonscm.debian.org/cgit/pkg-games/teeworlds.git/plain/debian/patches/new-wavpack.patch. + +This patch lets us build teeworlds with wavpack 5.1.0. + +--- a/src/engine/client/sound.cpp ++++ b/src/engine/client/sound.cpp +@@ -328,17 +328,14 @@ void CSound::RateConvert(int SampleID) + pSample->m_NumFrames = NumFrames; + } + +-int CSound::ReadData(void *pBuffer, int Size) +-{ +- return io_read(ms_File, pBuffer, Size); +-} +- + int CSound::LoadWV(const char *pFilename) + { + CSample *pSample; + int SampleID = -1; + char aError[100]; + WavpackContext *pContext; ++ char aWholePath[1024]; ++ IOHANDLE File; + + // don't waste memory on sound when we are stress testing + if(g_Config.m_DbgStress) +@@ -351,19 +348,23 @@ int CSound::LoadWV(const char *pFilename + if(!m_pStorage) + return -1; + +- ms_File = m_pStorage->OpenFile(pFilename, IOFLAG_READ, IStorage::TYPE_ALL); +- if(!ms_File) ++ File = m_pStorage->OpenFile(pFilename, IOFLAG_READ, IStorage::TYPE_ALL, aWholePath, sizeof(aWholePath)); ++ if(!File) + { + dbg_msg("sound/wv", "failed to open file. filename='%s'", pFilename); + return -1; + } ++ else ++ { ++ io_close(File); ++ } + + SampleID = AllocID(); + if(SampleID < 0) + return -1; + pSample = &m_aSamples[SampleID]; + +- pContext = WavpackOpenFileInput(ReadData, aError); ++ pContext = WavpackOpenFileInput(aWholePath, aError, OPEN_2CH_MAX, 0); + if (pContext) + { + int m_aSamples = WavpackGetNumSamples(pContext); +@@ -419,9 +420,6 @@ int CSound::LoadWV(const char *pFilename + dbg_msg("sound/wv", "failed to open %s: %s", pFilename, aError); + } + +- io_close(ms_File); +- ms_File = NULL; +- + if(g_Config.m_Debug) + dbg_msg("sound/wv", "loaded %s", pFilename); + +@@ -527,7 +525,5 @@ void CSound::StopAll() + lock_unlock(m_SoundLock); + } + +-IOHANDLE CSound::ms_File = 0; +- + IEngineSound *CreateEngineSound() { return new CSound; } + +--- a/src/engine/client/sound.h ++++ b/src/engine/client/sound.h +@@ -21,10 +21,6 @@ public: + + static void RateConvert(int SampleID); + +- // TODO: Refactor: clean this mess up +- static IOHANDLE ms_File; +- static int ReadData(void *pBuffer, int Size); +- + virtual bool IsSoundEnabled() { return m_SoundEnabled != 0; } + + virtual int LoadWV(const char *pFilename); -- 2.12.2