From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id wHsqDVTK916oVgAA0tVLHw (envelope-from ) for ; Sat, 27 Jun 2020 22:38:12 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id yG3VCFTK914NaQAAbx9fmQ (envelope-from ) for ; Sat, 27 Jun 2020 22:38:12 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 9098C9401CD for ; Sat, 27 Jun 2020 22:38:11 +0000 (UTC) Received: from localhost ([::1]:53608 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpJSb-0007B9-2b for larch@yhetil.org; Sat, 27 Jun 2020 18:38:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34768) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpJSU-0007Ay-GH for guix-patches@gnu.org; Sat, 27 Jun 2020 18:38:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:33219) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jpJSU-0002eJ-6c for guix-patches@gnu.org; Sat, 27 Jun 2020 18:38:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jpJSU-0001I1-2c for guix-patches@gnu.org; Sat, 27 Jun 2020 18:38:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42096] [PATCH] gnu: Add UFO: Alien Invasion. Resent-From: Marius Bakke Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 27 Jun 2020 22:38:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 42096 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 42096@debbugs.gnu.org Cc: Marius Bakke X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.15932974304894 (code B ref -1); Sat, 27 Jun 2020 22:38:01 +0000 Received: (at submit) by debbugs.gnu.org; 27 Jun 2020 22:37:10 +0000 Received: from localhost ([127.0.0.1]:44765 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jpJRX-0001Gi-LZ for submit@debbugs.gnu.org; Sat, 27 Jun 2020 18:37:10 -0400 Received: from lists.gnu.org ([209.51.188.17]:52282) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jpJRU-0001GI-5n for submit@debbugs.gnu.org; Sat, 27 Jun 2020 18:37:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jpJRT-00077H-Ut for guix-patches@gnu.org; Sat, 27 Jun 2020 18:36:59 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34323) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jpJRT-0002al-M6; Sat, 27 Jun 2020 18:36:59 -0400 Received: from ti0006q161-3115.bb.online.no ([88.95.106.80]:42618 helo=localhost) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jpJRT-0007ZZ-2Y; Sat, 27 Jun 2020 18:36:59 -0400 From: Marius Bakke Date: Sun, 28 Jun 2020 00:36:45 +0200 Message-Id: <20200627223645.24610-1-marius@gnu.org> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -1.0 (-) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: 3.99 X-TUID: MnzqgKtx5nCa From: Marius Bakke * gnu/packages/games.scm (%ufoai-commit, %ufoai-revision, %ufoai-version, ufoai-source, ufo2map, ufoai-data, ufoai): New variables. --- gnu/packages/games.scm | 245 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) Guix, This adds a pre-release/development version of a fairly large and complex game. I went with the pre-release because according to the developers it is "mostly complete", and the previous version is four years old and requires heaps of patches to work. I'm fairly confident in the packaging, but unsure about the version identifier, and whether the warning in the description is sufficient. Also, as this game is a mix of GPL2+ and GPL2, I went with the latter, but the data files list both. On second thought, they might also count as a "combined works" and thus become GPL2-only. Finally, maybe it's worth mentioning in the description that it is a clone/reimplementation of the famous (but proprietary) X-COM games. Comments welcome! diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index 98d01940fc..ac0e6cef76 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -2071,6 +2071,251 @@ available, as well as a single-player mode with AI-controlled ships.") (license (list license:expat ; game license:silofl1.1)))) ; fonts +(define %ufoai-commit "a542a87a891f96b1ab2c44d35b2f6f16859a5019") +(define %ufoai-revision "0") +(define %ufoai-version (git-version "2.6.0_dev" %ufoai-revision %ufoai-commit)) +(define ufoai-source + (origin + (method git-fetch) + (uri (git-reference + (url "git://git.code.sf.net/p/ufoai/code") ;HTTPS fails mid-clone + (commit %ufoai-commit))) + (file-name (string-append "ufoai-" %ufoai-version "-checkout")) + (sha256 + (base32 + "024s7b9rcg7iw8i2p72gwnvabk23ljlq0nldws0y4b6hpwzyn1wz")) + (modules '((guix build utils) + (srfi srfi-1) + (ice-9 ftw))) + (snippet + '(begin + ;; Delete ~32MiB of bundled dependencies. + (with-directory-excursion "src/libs" + (for-each delete-file-recursively + (lset-difference equal? (scandir ".") + '("." ".." "gtest" "mumble")))) + + ;; Use relative path to Lua headers. + (substitute* "src/common/scripts_lua.h" + (("\\.\\./libs/lua/") "")) + + ;; Adjust Makefile targets to not depend on 'ufo2map', since we build + ;; it as a separate package. This way we don't need to make the same + ;; adjustments for 'ufoai-data' and 'ufoai' below. + (substitute* "build/maps.mk" + (("\\./ufo2map") "ufo2map") + (("maps: ufo2map") "maps:")) + (substitute* "build/modules/testall.mk" + (("testall: ufo2map") "testall:")) + + ;; If no cURL headers are found, the build system will try to include + ;; the bundled version, even when not required. Prevent that. + (substitute* "build/default.mk" + (("^include src/libs/curl/lib/Makefile\\.inc") + "")) + + ;; While here, improve reproducibility by adding the '-X' flag to the + ;; zip command used to create the map files, in order to prevent time + ;; stamps from making it into the generated archives. + (substitute* "build/data.mk" + (("\\$\\(call ZIP\\)") + "$(call ZIP) -X")) + #t)))) + +(define-public ufo2map + (package + (name "ufo2map") + (version %ufoai-version) + (home-page "https://ufoai.org/") + (source ufoai-source) + (build-system gnu-build-system) + (arguments + '(#:configure-flags '("CC=gcc" "CXX=g++" + "--enable-release" + "--enable-ufo2map" + "--disable-uforadiant" + "--disable-cgame-campaign" + "--disable-cgame-multiplayer" + "--disable-cgame-skirmish" + "--disable-game" + "--disable-memory" + "--disable-testall" + "--disable-ufoded" + "--disable-ufo" + "--disable-ufomodel" + "--disable-ufoslicer") + #:tests? #f ;no tests + #:phases (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key (configure-flags '()) #:allow-other-keys) + ;; The home-made configure script does not understand + ;; some of the default flags of gnu-build-system. + (apply invoke "./configure" configure-flags))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (install-file "ufo2map" (string-append out "/bin")) + (install-file "debian/ufo2map.6" + (string-append out "/share/man/man6")) + #t)))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("libjpeg" ,libjpeg-turbo) + ("libpng" ,libpng) + ("lua" ,lua-5.1) + ("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf))))) + (synopsis "UFO: AI map generator") + (description + "This package provides @command{ufo2map}, a program used to generate +maps for the UFO: Alien Invasion strategy game.") + (license license:gpl2+))) + +(define ufoai-data + (package + (name "ufoai-data") + (version %ufoai-version) + (home-page "https://ufoai.org/") + (source ufoai-source) + (build-system gnu-build-system) + (arguments + '(#:tests? #f + #:configure-flags '("CC=gcc" "CXX=g++") + #:phases (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key outputs (configure-flags '()) #:allow-other-keys) + (apply invoke "./configure" configure-flags))) + (replace 'build + (lambda* (#:key (parallel-build? #t) #:allow-other-keys) + (invoke "make" + "-j" (if parallel-build? + (number->string (parallel-job-count)) + "1") + "maps"))) + (add-after 'build 'pack + (lambda _ + (invoke "make" "pk3"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (for-each (lambda (file) + (install-file file out)) + (find-files "base" "\\.pk3$")) + #t)))))) + (native-inputs + `(("python" ,python-2) + ("ufo2map" ,ufo2map) + ("which" ,which) + ("zip" ,zip))) + (synopsis "UFO: AI data files") + (description + "This package contains maps for UFO: Alien Invasion.") + ;; Most assets are available under either GPL2 or GPL2+. Some use other + ;; licenses, see LICENSES for details. + (license (list license:gpl2+ license:gpl2 license:cc-by3.0 + license:cc-by-sa3.0 license:public-domain)))) + +(define-public ufoai + (package + (name "ufoai") + (version %ufoai-version) + (home-page "https://ufoai.org/") + (source ufoai-source) + (build-system gnu-build-system) + (arguments + `(#:configure-flags + (list (string-append "--prefix=" (assoc-ref %outputs "out")) + (string-append "--datadir=" (assoc-ref %outputs "out") + "/share/games/ufo") + "CC=gcc" "CXX=g++" + "--enable-release" + "--enable-game" + "--disable-ufo2map" + "--disable-dependency-tracking" + + ;; Disable hard links to prevent huge NARs. + "--disable-hardlinkedgame" + "--disable-hardlinkedcgame") + #:phases (modify-phases %standard-phases + (add-after 'unpack 'symlink-data-files + (lambda* (#:key inputs #:allow-other-keys) + (let ((data (assoc-ref inputs "ufoai-data"))) + ;; Symlink the data files to where the build system + ;; expects to find them. Ultimately these files are + ;; copied to $out/share/games/ufoai/base, losing the + ;; symlinks; we could fix that after install, but it + ;; does not make a big difference in practice due to + ;; deduplication. + (with-directory-excursion "base" + (for-each (lambda (file) + (symlink file (basename file))) + (find-files data "\\.pk3$"))) + #t))) + (add-before 'configure 'create-language-files + (lambda _ + (invoke "make" "lang"))) + (replace 'configure + (lambda* (#:key outputs (configure-flags '()) #:allow-other-keys) + (apply invoke "./configure" configure-flags))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (if tests? + (invoke "./testall") + (format #t "test suite not run~%")) + #t)) + (add-after 'install 'install-man-pages + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (man6 (string-append out "/share/man/man6"))) + (install-file "debian/ufo.6" man6) + (install-file "debian/ufoded.6" man6) + #t)))) + + ;; TODO: Some map tests occasionally fail because of randomness issues, + ;; e.g. not enough generated aliens. The test runner also fails early + ;; in the build container with 'failed to shutdown server'? + #:tests? #f)) + (native-inputs + `(("gettext" ,gettext-minimal) + ("pkg-config" ,pkg-config) + ("python" ,python-2) + ("ufo2map" ,ufo2map) + ("ufoai-data" ,ufoai-data))) + (inputs + `(("curl" ,curl) + ("libjpeg" ,libjpeg-turbo) + ("libogg" ,libogg) + ("libpng" ,libpng) + ("libtheora" ,libtheora) + ("libvorbis" ,libvorbis) + ("libxml2" ,libxml2) + ("lua" ,lua-5.1) + ("mesa" ,mesa) + ("minixml" ,minixml) + ("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf))) + ("zlib" ,zlib))) + (synopsis "Turn-based tactical strategy game") + (description + "UFO: Alien Invasion is a tactical strategy game set in the year 2084. +You control a secret organisation charged with defending Earth from a brutal +alien enemy. Build up your bases, prepare your team, and dive head-first into +the fast and flowing turn-based combat. + +Over the long term you will need to conduct research into the alien threat to +figure out their mysterious goals and use their powerful weapons for your own +ends. You will produce unique items and use them in combat against your +enemies. + +You can also use them against your friends with the multiplayer functionality. + +Warning: This is a pre-release version of UFO: AI! Some things may not work +properly.") + + ;; The game code and most assets are GPL2+, but we use GPL2 only here + ;; because some assets do not use the "or later" clause. Many individual + ;; assets use Creative Commons or Public Domain; see the LICENSE file. + (license (delete license:gpl2+ (package-license ufoai-data))))) + (define-public xshogi (package (name "xshogi") -- 2.26.2