diff options
author | Timo Wilken | 2023-02-25 14:19:59 +0100 |
---|---|---|
committer | Timo Wilken | 2023-02-25 14:19:59 +0100 |
commit | dc0bbd804f29759db1ae520919f010aa669b83e2 (patch) | |
tree | ad7638f011bb456b852a2ee457b5dc1e119717fc | |
parent | 1fcc1b28bbdb2bdeb0300899baddd075c9f407a8 (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.scm | 102 |
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 |