unofficial mirror of guix-patches@gnu.org 
 help / color / Atom feed
* [bug#42096] [PATCH] gnu: Add UFO: Alien Invasion.
@ 2020-06-27 22:36 Marius Bakke
  2020-06-30 21:05 ` Nicolas Goaziou
  0 siblings, 1 reply; 3+ messages in thread
From: Marius Bakke @ 2020-06-27 22:36 UTC (permalink / raw)
  To: 42096; +Cc: Marius Bakke

From: Marius Bakke <mbakke@fastmail.com>

* 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





^ permalink raw reply	[flat|nested] 3+ messages in thread

* [bug#42096] [PATCH] gnu: Add UFO: Alien Invasion.
  2020-06-27 22:36 [bug#42096] [PATCH] gnu: Add UFO: Alien Invasion Marius Bakke
@ 2020-06-30 21:05 ` Nicolas Goaziou
  2020-07-02 21:31   ` bug#42096: " Marius Bakke
  0 siblings, 1 reply; 3+ messages in thread
From: Nicolas Goaziou @ 2020-06-30 21:05 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 42096

Hello,

Marius Bakke <marius@gnu.org> writes:

> 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!

Nice job! I tried to package it a few weeks ago, but stopped as it was
getting too hairy.

Small note: I see some CC=gcc flags, but I think the trend is to replace
them where cross-compiling matters (which may not be the case here).

I think the version is fine, packaging 2.5.X is a dead-end.

Regards,
-- 
Nicolas Goaziou




^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#42096: [PATCH] gnu: Add UFO: Alien Invasion.
  2020-06-30 21:05 ` Nicolas Goaziou
@ 2020-07-02 21:31   ` Marius Bakke
  0 siblings, 0 replies; 3+ messages in thread
From: Marius Bakke @ 2020-07-02 21:31 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: 42096-done

[-- Attachment #1: Type: text/plain, Size: 1465 bytes --]

Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:

> Hello,
>
> Marius Bakke <marius@gnu.org> writes:
>
>> 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!
>
> Nice job! I tried to package it a few weeks ago, but stopped as it was
> getting too hairy.

Thanks.  :-)

> Small note: I see some CC=gcc flags, but I think the trend is to replace
> them where cross-compiling matters (which may not be the case here).

Right.  It also uses "CXX=g++", which does not have a 'cc-for-target'
companion yet, so I punted on this.  Besides, I expect more changes are
needed in order to actually cross-compile.

> I think the version is fine, packaging 2.5.X is a dead-end.

Thanks for checking, pushed in 0ceb7c191d5954658593153d03f043a7f2100cd1!

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, back to index

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-27 22:36 [bug#42096] [PATCH] gnu: Add UFO: Alien Invasion Marius Bakke
2020-06-30 21:05 ` Nicolas Goaziou
2020-07-02 21:31   ` bug#42096: " Marius Bakke

unofficial mirror of guix-patches@gnu.org 

Archives are clonable:
	git clone --mirror https://yhetil.org/guix-patches/1 guix-patches/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 guix-patches guix-patches/ https://yhetil.org/guix-patches \
		guix-patches@gnu.org
	public-inbox-index guix-patches

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://news.yhetil.org/yhetil.gnu.guix.patches


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git