From 0ceb7c191d5954658593153d03f043a7f2100cd1 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Mon, 6 Jan 2020 17:43:38 +0100 Subject: gnu: Add UFO: Alien Invasion. * 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(+) (limited to 'gnu/packages/games.scm') diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index f7ebac6d98..c062729f89 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -2159,6 +2159,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 and other assets 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") -- cgit v1.2.3