summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Kehayias <john.kehayias@protonmail.com>2023-07-14 11:08:31 -0400
committerJohn Kehayias <john.kehayias@protonmail.com>2023-07-14 11:08:31 -0400
commit09e73683a2c303016fa57bf5d84a8e997d4c0a30 (patch)
treea00e38a0b98f984916849882204e915c2cdfe65d
parent49b0a5ee5f908d8efa8e792f8635f723fd1d26ed (diff)
gnu: godot: Update to 4.1. Rename godot@3 to godot-lts.
* gnu/packages/game-development.scm (godot): Update to 4.1. [source]: Update snippet: remove embree and enet; add amd-fsr, astcenc, basis_universal, brotli, linuxbsd_headers, etcpak, meshoptimizer, msdfgen, noise, openxr, rvo2, spirv-reflect, thorvg, volk, vulkan. [arguments]: Remove #:scons. Update #:scons-flags to unbundle more libraries. [phases]: Remove 'build-headless phase (headless is no longer has a separate build). Add 'fix-dl-open-paths and 'unbundle-xkbcommon phases. In 'install phase, remove headless output. Update 'wrap phase to remove eudev. [outputs]: Remove headless. [inputs]: Add dbus, embree, enet, fontconfig, glslang, libpng, harfbuzz, icu4c, libxkbcommon, openxr, speech-dispatcher, vulkan-loader, zlib. Remove bullet. Rename freetype to freetype-with-brotli. (godot-lts): New variable. godot@3 is the LTS release. * gnu/packages/games.scm (superstarfighter)[native-inputs]: Use it. [inputs]: Use it.
-rw-r--r--gnu/packages/game-development.scm255
-rw-r--r--gnu/packages/games.scm4
2 files changed, 256 insertions, 3 deletions
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index eebe8ecbf4..f97c126441 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -28,6 +28,7 @@
;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
;;; Copyright © 2022 dan <i@dan.games>
+;;; Copyright © 2023 John Kehayias <john.kehayias@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -54,6 +55,7 @@
#:use-module (guix git-download)
#:use-module (guix svn-download)
#:use-module (guix utils)
+ #:use-module (guix build utils)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python)
@@ -86,6 +88,7 @@
#:use-module (gnu packages graphviz)
#:use-module (gnu packages gtk)
#:use-module (gnu packages guile)
+ #:use-module (gnu packages icu4c)
#:use-module (gnu packages image)
#:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
@@ -95,6 +98,7 @@
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages music)
#:use-module (gnu packages ncurses)
+ #:use-module (gnu packages networking)
#:use-module (gnu packages pcre)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages pulseaudio)
@@ -105,12 +109,14 @@
#:use-module (gnu packages readline)
#:use-module (gnu packages qt)
#:use-module (gnu packages sdl)
+ #:use-module (gnu packages speech)
#:use-module (gnu packages sphinx)
#:use-module (gnu packages stb)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages textutils)
#:use-module (gnu packages tls)
#:use-module (gnu packages video)
+ #:use-module (gnu packages vulkan)
#:use-module (gnu packages web)
#:use-module (gnu packages wxwidgets)
#:use-module (gnu packages xdisorg)
@@ -1812,7 +1818,7 @@ games.")
(home-page "https://openmw.org")
(license license:gpl3)))
-(define-public godot
+(define-public godot-lts
(package
(name "godot")
(version "3.4.2")
@@ -1982,6 +1988,253 @@ provide high-quality 3D rendering, it contains an animation editor, and can be
scripted in a Python-like language.")
(license license:expat)))
+(define-public godot
+ (package
+ (name "godot")
+ (version "4.1")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/godotengine/godot")
+ (commit (string-append version "-stable"))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0rc34w4nb1qwmxk7ijcm689kk4gdxrmgzbj4qqz8gkqhysn8mnmz"))
+ (modules '((guix build utils)
+ (ice-9 ftw)
+ (srfi srfi-1)))
+ (snippet
+ '(begin
+ ;; Keep only those bundled files we have not (yet) replaced
+ ;; with Guix versions. Note that some of these may be
+ ;; modified; see "thirdparty/README.md".
+ (with-directory-excursion "thirdparty"
+ (let* ((preserved-files
+ '("README.md"
+ "amd-fsr"
+ "assimp"
+ "astcenc"
+ "basis_universal"
+ ;; TODO: Can unbundle once
+ ;; <https://github.com/godotengine/godot/pull/79101>
+ ;; is merged
+ "brotli"
+ ;; Godot needs ca-certificates.crt, but that is
+ ;; not available in build environment
+ "certs"
+ "cvtt"
+ "linuxbsd_headers"
+ "etc2comp"
+ "etcpak"
+ "fonts"
+ "glad"
+ "jpeg-compressor"
+ "libsimplewebm"
+ "meshoptimizer"
+ "minimp3"
+ "miniupnpc"
+ "minizip"
+ "misc"
+ "msdfgen"
+ "nanosvg"
+ "noise"
+ "oidn"
+ "openxr"
+ "pvrtccompressor"
+ "recastnavigation"
+ "rvo2"
+ "spirv-reflect"
+ "squish"
+ "stb_rect_pack"
+ "thorvg"
+ "tinyexr"
+ "vhacd"
+ "volk"
+ "vulkan"
+ "xatlas")))
+ (for-each delete-file-recursively
+ (lset-difference string=?
+ (scandir ".")
+ (cons* "." ".." preserved-files)))))))))
+ (build-system scons-build-system)
+ (arguments
+ (list
+ #:scons-flags #~`("platform=linuxbsd" "target=editor" "production=yes"
+ ;; XXX: There may be advantages to enabling volk,
+ ;; requiring unbundling and patching to use our input.
+ "use_volk=no"
+ ;; Avoid using many of the bundled libs.
+ ;; Note: These options can be found in the SConstruct file.
+ "builtin_embree=no"
+ "builtin_enet=no"
+ "builtin_freetype=no"
+ "builtin_glslang=no"
+ "builtin_graphite=no"
+ "builtin_harfbuzz=no"
+ "builtin_icu4c=no"
+ "builtin_libogg=no"
+ "builtin_libpng=no"
+ "builtin_libtheora=no"
+ "builtin_libvorbis=no"
+ "builtin_libwebp=no"
+ "builtin_mbedtls=no"
+ "builtin_pcre2=no"
+ "builtin_pcre2_with_jit=no"
+ "builtin_wslay=no"
+ "builtin_zlib=no"
+ "builtin_zstd=no")
+ #:tests? #f ; There are no tests
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'scons-use-env
+ (lambda _
+ ;; Scons does not use the environment variables by default,
+ ;; but this substitution makes it do so.
+ (substitute* "SConstruct"
+ (("env_base = Environment\\(tools=custom_tools\\)")
+ (string-append
+ "env_base = Environment(tools=custom_tools)\n"
+ "env_base = Environment(ENV=os.environ)")))))
+ (add-after 'scons-use-env 'fix-dlopen-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((files '("drivers/alsa/asound-so_wrap.c"
+ "drivers/pulseaudio/pulse-so_wrap.c"
+ "platform/linuxbsd/dbus-so_wrap.c"
+ "platform/linuxbsd/fontconfig-so_wrap.c"
+ "platform/linuxbsd/libudev-so_wrap.c"
+ "platform/linuxbsd/speechd-so_wrap.c"
+ "platform/linuxbsd/x11/display_server_x11.cpp"
+ "platform/linuxbsd/x11/dynwrappers/xcursor-so_wrap.c"
+ "platform/linuxbsd/x11/dynwrappers/xext-so_wrap.c"
+ "platform/linuxbsd/x11/dynwrappers/xinerama-so_wrap.c"
+ "platform/linuxbsd/x11/dynwrappers/xinput2-so_wrap.c"
+ "platform/linuxbsd/x11/dynwrappers/xlib-so_wrap.c"
+ "platform/linuxbsd/x11/dynwrappers/xrandr-so_wrap.c"
+ "platform/linuxbsd/x11/dynwrappers/xrender-so_wrap.c"
+ "platform/linuxbsd/xkbcommon-so_wrap.c"
+ "thirdparty/volk/volk.c"
+ "thirdparty/volk/volk.c"))
+ (libs '("libasound.so.2"
+ "libpulse.so.0"
+ "libdbus-1.so.3"
+ "libfontconfig.so.1"
+ "libudev.so.1"
+ "libspeechd.so.2"
+ "libXrandr.so.2"
+ "libXcursor.so.1"
+ "libXext.so.6"
+ "libXinerama.so.1"
+ "libXi.so.6"
+ "libX11.so.6"
+ "libXrandr.so.2"
+ "libXrender.so.1"
+ "libxkbcommon.so.0"
+ "libvulkan.so.1"
+ "libvulkan.so")))
+ (for-each (lambda (file lib)
+ (substitute* file
+ (((string-append "dlopen\\(\"" lib "\""))
+ (string-append "dlopen(\""
+ (search-input-file
+ inputs (string-append "lib/" lib))
+ "\""))))
+ files libs))
+ (substitute* "thirdparty/glad/gl.c"
+ (("libGL.so") ; for both .so and .so.1
+ (string-append (search-input-file inputs "lib/libGL.so"))))
+ (substitute* "thirdparty/glad/glx.c"
+ (("libGL.so") ; for both .so and .so.1
+ (string-append (search-input-file inputs "lib/libGL.so"))))))
+ (add-after 'fix-dlopen-paths 'unbundle-xkbcommon
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "platform/linuxbsd/xkbcommon-so_wrap.c"
+ (("./thirdparty/linuxbsd_headers/xkbcommon/xkbcommon.h")
+ (string-append
+ (search-input-file inputs "include/xkbcommon/xkbcommon.h")))
+ (("./thirdparty/linuxbsd_headers/xkbcommon/xkbcommon-compose.h")
+ (string-append
+ (search-input-file inputs "include/xkbcommon/xkbcommon-compose.h")))
+ (("./thirdparty/linuxbsd_headers/xkbcommon/xkbcommon-keysyms.h")
+ (string-append
+ (search-input-file inputs "include/xkbcommon/xkbcommon-keysyms.h"))))))
+ (replace 'install
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((zenity (search-input-file inputs "bin/zenity")))
+ ;; Strip build info from filenames.
+ (with-directory-excursion "bin"
+ (for-each
+ (lambda (file)
+ (let ((dest (car (string-split (basename file) #\.))))
+ (rename-file file dest)))
+ (find-files "." "godot.*\\.linuxbsd\\.editor.*"))
+ (install-file "godot" (string-append #$output "/bin")))
+ ;; Tell the editor where to find zenity for OS.alert().
+ ;; TODO: This could be changed in
+ ;; platform/linuxbsd/os_linuxbsd.cpp directly, along with the
+ ;; other alert programs.
+ (wrap-program (string-append #$output "/bin/godot")
+ `("PATH" ":" prefix (,(string-append zenity "/bin")))))))
+ (add-after 'install 'install-godot-desktop
+ (lambda _
+ (let ((applications (string-append #$output "/share/applications"))
+ (icons (string-append #$output "/share/icons/hicolor")))
+ (mkdir-p applications)
+ (copy-file "misc/dist/linux/org.godotengine.Godot.desktop"
+ (string-append applications "/godot.desktop"))
+ (for-each (lambda (icon dest)
+ (mkdir-p (dirname dest))
+ (copy-file icon dest))
+ '("icon.png" "icon.svg")
+ `(,(string-append icons "/256x256/apps/godot.png")
+ ,(string-append icons "/scalable/apps/godot.svg")))))))))
+ (native-inputs
+ (list pkg-config))
+ (inputs
+ (list alsa-lib
+ dbus
+ embree
+ enet
+ eudev
+ fontconfig
+ freetype-with-brotli
+ glew
+ glslang
+ glu
+ libpng
+ harfbuzz
+ icu4c
+ libtheora
+ libvorbis
+ libvpx
+ libwebp
+ libx11
+ libxcursor
+ libxi
+ libxinerama
+ libxkbcommon
+ libxrandr
+ mbedtls-apache
+ mesa
+ openxr
+ opusfile
+ pcre2
+ pulseaudio
+ speech-dispatcher
+ vulkan-loader
+ wslay
+ zenity
+ zlib
+ `(,zstd "lib")))
+ (home-page "https://godotengine.org/")
+ (synopsis "Advanced 2D and 3D game engine")
+ (description
+ "Godot is an advanced multi-platform game engine written in C++. If
+features design tools such as a visual editor, can import 3D models and
+provide high-quality 3D rendering, it contains an animation editor, and can be
+scripted in a Python-like language.")
+ (license license:expat)))
+
(define-public entt
(package
(name "entt")
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index fdd3a0e21e..f0d29f2367 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -2826,9 +2826,9 @@ runnable=true
#:categories '("Game" "ArcadeGame")))
#t)))))
(native-inputs
- `(("godot-headless" ,godot "headless")))
+ `(("godot-headless" ,godot-lts "headless")))
(inputs
- (list godot))
+ (list godot-lts))
(home-page "https://notapixel.itch.io/superstarfighter")
(synopsis "Fast-paced local multiplayer arcade game")
(description "In SuperStarfighter, up to four local players compete in a