mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 15:36:20 -05:00
gnu: Add UFO: Alien Invasion.
* gnu/packages/games.scm (%ufoai-commit, %ufoai-revision, %ufoai-version, ufoai-source, ufo2map, ufoai-data, ufoai): New variables.
This commit is contained in:
parent
aea64acce7
commit
0ceb7c191d
1 changed files with 245 additions and 0 deletions
|
@ -2159,6 +2159,251 @@ (define-public superstarfighter
|
|||
(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")
|
||||
|
|
Loading…
Reference in a new issue