summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Wilken2023-02-25 14:19:59 +0100
committerTimo Wilken2023-02-25 14:19:59 +0100
commitdc0bbd804f29759db1ae520919f010aa669b83e2 (patch)
treead7638f011bb456b852a2ee457b5dc1e119717fc
parent1fcc1b28bbdb2bdeb0300899baddd075c9f407a8 (diff)
Initial attempt at packaging Mindustrymindustry
Mindustry uses Gradle for building, which seems very hard to package reproducibly, as it downloads a bunch of stuff when invoked. Nix has packaged it, but apparently not by building from source.
-rw-r--r--tw/packages/games.scm102
1 files changed, 102 insertions, 0 deletions
diff --git a/tw/packages/games.scm b/tw/packages/games.scm
index abe855ad..2d8d7e41 100644
--- a/tw/packages/games.scm
+++ b/tw/packages/games.scm
@@ -2,10 +2,13 @@
#:use-module (guile) ; for `geiser-eval-buffer-and-go' to work properly
#:use-module ((ice-9 string-fun) #:select (string-replace-substring))
#:use-module (gnu packages audio)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages bash)
#:use-module (gnu packages compression)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages guile)
#:use-module (gnu packages image)
+ #:use-module (gnu packages java)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages sdl)
#:use-module (gnu packages textutils)
@@ -19,6 +22,9 @@
#:use-module (guix modules)
#:use-module (guix packages))
+
+;; Simutrans
+
(define-public simutrans-pak128
;; Install paks as propagated-inputs of simutrans, so they go in
;; Simutrans' data directory, where Simutrans expects them.
@@ -166,5 +172,101 @@ directory as assets from the base game, such as music files.")
(simutrans-pak-union "simutrans-with-pak128"
(list simutrans-pak128)))
+
+;; Widelands
+
;; TODO: package Widelands 1.1
;; https://github.com/widelands/widelands/releases/tag/v1.1
+
+
+;; Mindustry
+
+(define-public gradle
+ (package
+ (name "gradle")
+ (version "7.5.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://services.gradle.org/distributions/gradle-"
+ version "-all.zip")) ; *-bin.zip is the binary distribution
+ ;; (sha256 (base32 "1i4fikapjrxha4bpfkdjycj68154da0jkwlj3rch3rfc21mmkf7n")) ; *-bin.zip
+ (sha256 (base32 "06923j2cri0ay3knkqv5csrrwvqri46yhs9c55h1zxk3xl8q576v")))) ; *-all.zip
+ (build-system trivial-build-system)
+ (arguments
+ `(#:builder
+ ,#~(begin)))
+ (home-page "https://gradle.org/")
+ (synopsis "Enterprise-grade Java build tool")
+ (description "Gradle is an open-source build automation tool focused on
+flexibility and performance. Gradle build scripts are written using a Groovy
+or Kotlin DSL.")
+ (license license:asl2.0)))
+
+(define-public mindustry
+ (package
+ (name "mindustry")
+ (version "141.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/Anuken/Mindustry/archive/refs/tags/v" version ".tar.gz"))
+ (sha256 (base32 "03gmg7mgxrlzn1jzz62k14008whaj0gib97svqa0yay8d5swxfpg"))))
+ (build-system trivial-build-system)
+
+ (arguments
+ `(#:modules ,(source-module-closure
+ '((guix build utils)
+ (guix build gnu-build-system)))
+ #:builder
+ ,#~(begin
+ (use-modules (guix build utils)
+ ((guix build gnu-build-system) #:prefix gnu:))
+ ;; Gradle puts stuff in ~/.gradle. Do this now because "unpack" chdir's.
+ (setenv "HOME" (getcwd))
+ ;; Gradle needs JAVA_HOME to be set.
+ (setenv "JAVA_HOME" #$openjdk)
+
+ ;; Unpack source tarball.
+ (set-path-environment-variable
+ "PATH" '("bin" "sbin")
+ '#+(list openjdk bash-minimal sed coreutils tar gzip))
+ ((assq-ref gnu:%standard-phases 'unpack) #:source #$source)
+
+ ;; Patch build scripts to refer to offline gradle dependencies.
+ #|
+ sed -ie "1ipluginManagement { repositories { maven { url '${deps}' } } }; " Mindustry/settings.gradle
+ sed -ie "s#mavenLocal()#mavenLocal(); maven { url '${deps}' }#g" Mindustry/build.gradle
+ sed -ie "s#mavenCentral()#mavenCentral(); maven { url '${deps}' }#g" Arc/build.gradle
+ sed -ie "s#wget.*freetype.* -O #cp ${freetypeSource} #" Arc/extensions/freetype/build.gradle
+ sed -ie "/curl.*glew/{;s#curl -o #cp ${glewSource} #;s# -L http.*\.zip##;}" Arc/backends/backend-sdl/build.gradle
+ sed -ie "/curl.*sdlmingw/{;s#curl -o #cp ${SDLmingwSource} #;s# -L http.*\.tar.gz##;}" Arc/backends/backend-sdl/build.gradle
+ |#
+
+ (let ((maven-url #+mindustry-maven-deps))
+ (substitute* "settings.gradle"
+ (("(^if\\(JavaVersion\\.current)" line) ; match the beginning of the first line
+ (format #f "pluginManagement { repositories { maven { url '~a' } } }\n~a" maven-url line)))
+ (substitute* "build.gradle"
+ (("mavenLocal\\(\\)")
+ "mavenLocal(); maven { url '~a' }" maven-url)))
+
+ ;; Now run the actual build scripts.
+ (invoke "sh" "gradlew" "tools:pack")
+ (invoke "sh" "gradlew" "desktop:dist"))))
+
+ ;; (inputs (list openjdk17)) ; plain `openjdk' ought to work too?
+ ;; (native-inputs (list bash-minimal sed coreutils ; for gradlew
+ ;; tar gzip)) ; for unpack
+ (home-page "https://mindustrygame.github.io/")
+ (synopsis "The automation tower defense RTS game")
+ (description "Mindustry: A sandbox tower-defense game.
+@itemize
+@item Defend your base from waves of powerful enemies.
+@item Build complex designs for processing materials.
+@item Build and fight with other players on multiplayer servers.
+@end itemize
+")
+ (license (list license:gpl3 ; Mindustry itself
+ license:asl2.0)))) ; gradlew build script