diff options
Diffstat (limited to 'guix/nongnu/packages/game-development.scm')
-rw-r--r-- | guix/nongnu/packages/game-development.scm | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/guix/nongnu/packages/game-development.scm b/guix/nongnu/packages/game-development.scm new file mode 100644 index 0000000..0974af5 --- /dev/null +++ b/guix/nongnu/packages/game-development.scm @@ -0,0 +1,302 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz> +;;; +;;; This file is not part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (nongnu packages game-development) + #:use-module (ice-9 match) + #:use-module ((nonguix licenses) :prefix license:) + #:use-module (guix packages) + #:use-module (nonguix build-system binary) + #:use-module (guix build-system gnu) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix utils) + #:use-module (gnu packages audio) + #:use-module (gnu packages base) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gl) + #:use-module (gnu packages gtk) + #:use-module (gnu packages linux) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages sdl) + #:use-module (gnu packages video) + #:use-module (gnu packages xiph) + #:use-module (gnu packages xorg)) + +(define nvidia-cg-toolkit-version "3.1") +(define nvidia-cg-toolkit-date "April2012") + +(define nvidia-cg-toolkit-i686-archive + (origin + (method url-fetch) + (uri + (string-append "http://developer.download.nvidia.com/cg/Cg_" + nvidia-cg-toolkit-version + "/Cg-" nvidia-cg-toolkit-version "_" nvidia-cg-toolkit-date "_" + "x86" ".tgz")) + (sha256 + (base32 "0yc8n6vpqyb6qhcv5kwvr3h21ya271fi930fvd98hlkg8cg5kwyf")))) + +(define nvidia-cg-toolkit-x86_64-archive + (origin + (method url-fetch) + (uri + (string-append "http://developer.download.nvidia.com/cg/Cg_" + nvidia-cg-toolkit-version + "/Cg-" nvidia-cg-toolkit-version "_" nvidia-cg-toolkit-date "_" + "x86_64" ".tgz")) + (sha256 + (base32 "0y4qms4lm9xiix93g45337rx5nrp0y3gb0x0avyv7l9qrkk03zz8")))) + +(define (lib) + (if (string=? (or (%current-target-system) (%current-system)) "x86_64-linux") + "lib64" "lib")) + +(define-public nvidia-cg-toolkit + (package + (name "nvidia-cg-toolkit") + (version nvidia-cg-toolkit-version) + (source #f) + (build-system binary-build-system) + (arguments + `(#:strip-binaries? #f ; Fails with "allocated section `.dynstr' not in segment". + #:patchelf-plan + `(("bin/cgc" + ("glibc" "out")) + ("bin/cginfo" + ("gcc:lib" "glibc")) + ("bin/cgfxcat" + ("out" "glibc" "glu" "mesa" "libice" "libsm" + "libxmu" "libxt" "libxi" "libxext" "libx11")) + (,,(string-append (lib) "/libCg.so") + ("glibc")) + (,,(string-append (lib) "/libCgGL.so") + ("out" "glibc"))) + #:install-plan + `(("bin" "./") + (,,(lib) "lib") + ("include" "./") + ("local/" "share/")) + #:phases + (modify-phases %standard-phases + (replace 'unpack + (lambda* (#:key inputs #:allow-other-keys) + (let ((archive (assoc-ref inputs "nvidia-cg-toolkit-archive"))) + (invoke "tar" "xf" archive) + (chdir "usr") + #t)))))) + (native-inputs + `(("nvidia-cg-toolkit-archive" + ,(match (or (%current-target-system) (%current-system)) + ("x86_64-linux" nvidia-cg-toolkit-x86_64-archive) + (_ nvidia-cg-toolkit-i686-archive))))) + (inputs + `(("gcc:lib" ,gcc "lib") + ("glibc" ,glibc) + ("glu" ,glu) + ("libice" ,libice) + ("libsm" ,libsm) + ("libxmu" ,libxmu) + ("libxt" ,libxt) + ("libxi" ,libxi) + ("libxext" ,libxext) + ("libx11" ,libx11))) + (home-page "https://developer.nvidia.com/cg-toolkit") + (synopsis "High-level shading language") + (description "NVIDIA introduced programmable shading with Cg, which +supported dozens of different OpenGL and DirectX profile targets. It allowed +developers to incorporate interactive effects within 3D applications and share +them among other Cg applications, across graphics APIs, and most operating +systems as well as balance effect complexities with client GPU capabilities. + +The Cg Toolkit is a legacy NVIDIA toolkit no longer under active development +or support. It is not recommended using it in new development projects +because future hardware features may not be supported. Going forward, new +development should opt for GLSL rather than Cg.") + (supported-systems '("i686-linux" "x86_64-linux")) + (license (license:nonfree "file://share/Cg/docs/license.txt")))) + +(define-public libsteam + (package + (name "libsteam") + (version "2013") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/ValveSoftware/source-sdk-" + version + "/raw/master/sp/src/lib/public/linux32/libsteam_api.so")) + (sha256 + (base32 + "1ivxvikm8i6mmmqvib8j5m7g5n1cdlki2sf4v7g13c7xba7aj438")))) + (build-system binary-build-system) + (supported-systems '("i686-linux" "x86_64-linux")) + (arguments + `(#:system "i686-linux" + #:validate-runpath? #f ; TODO: Why doesn't it pass? + #:patchelf-plan + `(("libsteam_api.so" + ("gcc:lib"))) + #:install-plan + `(("." ("steam") "lib/")) + #:phases + (modify-phases %standard-phases + (replace 'unpack + (lambda* (#:key inputs #:allow-other-keys) + (copy-file (assoc-ref inputs "source") "libsteam_api.so") + (chmod "libsteam_api.so" #o644) + #t)) + (add-after 'install 'symlink + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (symlink (string-append out "/lib/libsteam_api.so") + (string-append out "/lib/libsteam_api.so.1"))) + #t))))) + (inputs + `(("gcc:lib" ,gcc "lib"))) + (home-page "https://developer.valvesoftware.com/wiki/SDK2013_GettingStarted") + (synopsis "Redistribution binary needed by some video games") + (description "") + (license (license:nonfree + "https://raw.githubusercontent.com/ValveSoftware/source-sdk-2013/master/LICENSE")))) + +(define-public eduke32 + ;; There are no official releases. + (let ((commit "188e14622cfe5c6f63b04b989b350bf2a29a893c") + (revision "1") + (duke-nukem-3d-directory "share/dukenukem3d")) + (package + (name "eduke32") + (version (git-version "0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://voidpoint.io/terminx/eduke32.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0wy4bppiw4q2hn0v38msrjyvj2hzfvigakc23c2wqfnbl7rm0hrz")) + ;; Unbundle libxmp. + (modules '((guix build utils))) + (snippet + '(begin (delete-file-recursively "source/libxmp-lite") #t)))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f + ;; Add glu to rpath so that SDL can dlopen it. + #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath=" + (assoc-ref %build-inputs "glu") "/lib")) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'unbundle-libxmp + (lambda _ + (substitute* "GNUmakefile" + (("-I\\$\\(libxmplite_inc\\)") + (string-append "-I" (assoc-ref %build-inputs "libxmp") "/include")) + (("^ *audiolib_deps \\+= libxmplite.*$") "") + (("-logg") "-logg -lxmp")) + (with-directory-excursion "source/audiolib/src" + (for-each (lambda (file) (substitute* file (("libxmp-lite/") ""))) + '("multivoc.cpp" "xmp.cpp"))) + #t)) + (delete 'configure) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (glu (assoc-ref inputs "glu")) + (eduke (string-append out "/bin/eduke32")) + (eduke-real (string-append out "/bin/.eduke32-real"))) + ;; TODO: Install custom .desktop file? Need icon. + ;; See https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=eduke32. + (install-file "eduke32" (string-append out "/bin")) + (install-file "mapster32" (string-append out "/bin")) + (install-file "package/common/buildlic.txt" + (string-append out "/share/licenses")) + ;; Wrap program: + ;; - Make sure current directory is writable, else eduke32 will segfault. + ;; - Add ../share/dukenukem3d to the dir search list. + ;; TODO: Skip store duke3d.grp When ~/.config/eduke32/duke3d.grp is found. + (rename-file eduke eduke-real) + (call-with-output-file eduke + (lambda (p) + (format p "\ +#!~a +mkdir -p ~~/.config/eduke32 +cd ~~/.config/eduke32 +exec -a \"$0\" ~a\ + -g \"${0%/*}\"/../~a/*.grp\ + -g \"${0%/*}\"/../~a/*.zip\ + -g \"${0%/*}\"/../~a/*.map\ + -g \"${0%/*}\"/../~a/*.con\ + -g \"${0%/*}\"/../~a/*.def\ + \"$@\"~%" + (which "bash") eduke-real + ,duke-nukem-3d-directory + ,duke-nukem-3d-directory + ,duke-nukem-3d-directory + ,duke-nukem-3d-directory + ,duke-nukem-3d-directory))) + (chmod eduke #o755))))))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer))) + ("alsa-lib" ,alsa-lib) + ("glu" ,glu) + ("libvorbis" ,libvorbis) + ("libvpx" ,libvpx) + ("libxmp" ,libxmp) + ("flac" ,flac) + ("gtk+" ,gtk+-2))) + (synopsis "Engine of the classic PC first person shooter Duke Nukem 3D") + (description "EDuke32 is a free homebrew game engine and source port of the +classic PC first person shooter Duke Nukem 3D—Duke3D for short. A thousands +of features and upgrades were added for regular players and additional editing +capabilities and scripting extensions for homebrew developers and mod +creators. EDuke32 is open source but non-free software. + +This package does not contain any game file. You can either install packages +with game files or or put @file{.grp} game files manually in +@file{~/.config/eduke32/}.") + (home-page "https://eduke32.com/") + (license (license:nonfree + "https://eduke32.com/buildlic.txt"))))) + +(define-public fury + (package + (inherit eduke32) + (name "fury") + (arguments + (substitute-keyword-arguments (package-arguments eduke32) + ((#:make-flags flags ''()) `(cons* "FURY=1" ,flags)) + ((#:phases phases '%standard-phases) + `(modify-phases ,phases + (replace 'install + (lambda _ + (let* ((out (assoc-ref %outputs "out"))) + (install-file "fury" (string-append out "/bin")) + (install-file "mapster32" (string-append out "/bin")) + (install-file "package/common/buildlic.txt" + (string-append out "/share/licenses"))) + #t)))))) + (synopsis "Game engine for the first-person shooter Ion Fury") + (description + (string-append + "This is the @code{eduke32} engine built with support for the Ion Fury +game. Game data is not provided. Run @command{fury} with the option +@option{-j} to specify the directory containing @file{fury.grp}.")))) |