diff options
Diffstat (limited to 'gnu/packages/game-development.scm')
-rw-r--r-- | gnu/packages/game-development.scm | 405 |
1 files changed, 250 insertions, 155 deletions
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 889b435cfb..da9c63b799 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -17,16 +17,17 @@ ;;; Copyright © 2019 Pierre Neidhardt <[email protected]> ;;; Copyright © 2019, 2020, 2021 Liliana Marie Prikler <[email protected]> ;;; Copyright © 2019 Jethro Cao <[email protected]> -;;; Copyright © 2020, 2021 Nicolas Goaziou <[email protected]> +;;; Copyright © 2020-2023 Nicolas Goaziou <[email protected]> ;;; Copyright © 2020 Timotej Lazar <[email protected]> ;;; Copyright © 2020 Giacomo Leidi <[email protected]> ;;; Copyright © 2021 Alexandru-Sergiu Marton <[email protected]> ;;; Copyright © 2021 Dmitry Polyakov <[email protected]> -;;; Copyright © 2020-2021 James Smith <[email protected]> +;;; Copyright © 2020-2022 James Smith <[email protected]> ;;; Copyright © 2021 Ekaitz Zarraga <[email protected]> ;;; Copyright © 2021 Andy Tai <[email protected]> ;;; Copyright © 2022 Felix Gruber <[email protected]> ;;; Copyright © 2022 Jai Vetrivelan <[email protected]> +;;; Copyright © 2022 dan <[email protected]> ;;; ;;; This file is part of GNU Guix. ;;; @@ -74,6 +75,7 @@ #:use-module (gnu packages freedesktop) #:use-module (gnu packages fribidi) #:use-module (gnu packages dbm) + #:use-module (gnu packages gawk) #:use-module (gnu packages gettext) #:use-module (gnu packages gl) #:use-module (gnu packages glib) @@ -85,6 +87,7 @@ #:use-module (gnu packages guile) #:use-module (gnu packages image) #:use-module (gnu packages linux) + #:use-module (gnu packages llvm) #:use-module (gnu packages lua) #:use-module (gnu packages m4) #:use-module (gnu packages mp3) @@ -181,6 +184,71 @@ is used in some video games and movies.") (license license:zlib))) +(define-public dds + (package + (name "dds") + (version "2.9.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/dds-bridge/dds") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1iv09qic43nvla02lm8zgnkqpjgnc95p8zh3wyifmnmlh1rz02yj")))) + (build-system gnu-build-system) + (arguments + (list #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ + (chdir "src"))) + (replace 'configure + ;; Configuration is done by copying the appropriate + ;; make file in the working directory. There is no + ;; configure script. + (lambda _ + (copy-file "Makefiles/Makefile_linux_shared" + "Makefile"))) + (replace 'check + ;; There is no "check" traget. We must compile + ;; a "dtest" program and apply it on a data set. + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (install-file "libdds.so" "../test") + (with-directory-excursion "../test" + (copy-file "Makefiles/Makefile_linux" + "Makefile") + (substitute* "Makefile" + (("-Werror") "")) + (invoke "make") + (invoke "./dtest" "-f" "../hands/list100.txt"))))) + (replace 'install + ;; "install" target merely moves ".so" file around + ;; the source directory. We install it in the store, + ;; along with all shipped documentation (which cannot + ;; be built from source unfortunately). + (lambda _ + (install-file "libdds.so" + (string-append #$output "/lib")) + (let ((doc (string-append #$output + "/share/doc/" + #$name "-" #$version))) + (install-file "../LICENSE" doc) + (copy-recursively "../doc" doc))))))) + (native-inputs + (list gawk procps)) + (inputs + (list boost)) + (home-page "http://privat.bahnhof.se/wb758135/") + (synopsis "Double dummy solver for the bridge card game") + (description "DDS is a double-dummy solver of bridge hands. It supports +single-threading and multi-threading for improved performance. DDS +offers a wide range of functions, including par-score calculations.") + (license license:asl2.0))) + (define-public deutex (package (name "deutex") @@ -313,9 +381,10 @@ PCM data.") (substitute* (find-files "." "^Makefile\\.in$") (("-Werror") "")) #t))))) - (native-inputs `(("pkgconfig" ,pkg-config))) + (native-inputs (list pkg-config)) (inputs (list bdb glib + gmp guile-3.0 libmicrohttpd ncurses @@ -449,52 +518,45 @@ support.") (define-public slade (package (name "slade") - (version "3.1.13") + (version "3.2.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/sirjuddington/SLADE") (commit version))) - (sha256 (base32 "009yc5m6y074wfalvwbrnv2zsmaf9yhbi8hzgs973di0zqnqv011")) + (sha256 (base32 "11ab38nv190lpvkdba5r2gckdrk4h15pri0zzslz7zy8qzg5fm18")) (file-name (git-file-name name version)))) (build-system cmake-build-system) (arguments - '(#:configure-flags - (list "-DWX_GTK3=ON" "-DNO_WEBVIEW=ON" - (string-append "-DWITH_WXPATH=" - (assoc-ref %build-inputs "wxwidgets") "/bin") - (string-append "-DwxWidgets_LIBRARIES=" - (assoc-ref %build-inputs "wxwidgets") "/lib")) - #:phases - (modify-phases %standard-phases - (add-before 'build 'reset-slade.pk3-timestamps - ;; This is neccessary to make slade reproducible due to - ;; <https://bugs.gnu.org/44741>. TODO: Remove on next core update - ;; cycle. - (lambda _ - (invoke "find" "../source/dist/res" "-exec" "touch" - "--no-dereference" "-t" "197001010000.00" "{}" - "+"))) - (add-after 'install 'wrap-with-x11-gdk-backend - ;; Set GDK_BACKEND to x11 to prevent crash on Wayland. - ;; See https://github.com/sirjuddington/SLADE/issues/1097 for details. - (lambda* (#:key outputs #:allow-other-keys) - (wrap-program - (string-append (assoc-ref outputs "out") - "/bin/slade") - '("GDK_BACKEND" = ("x11")))))) - #:tests? #f)) ;; No test suite. + (list #:configure-flags + #~(list "-DWX_GTK3=ON" "-DNO_WEBVIEW=ON" + (string-append "-DWITH_WXPATH=" + #$(this-package-input "wxwidgets") "/bin") + (string-append "-DwxWidgets_LIBRARIES=" + #$(this-package-input "wxwidgets") "/lib")) + #:phases + #~(modify-phases %standard-phases + (add-after 'install 'wrap-with-x11-gdk-backend + ;; Set GDK_BACKEND to x11 to prevent crash on Wayland. + ;; See https://github.com/sirjuddington/SLADE/issues/1097 for + ;; details. + (lambda _ + (wrap-program (string-append #$output "/bin/slade") + '("GDK_BACKEND" = ("x11")))))) + #:tests? #f)) ;; No test suite. (inputs - `(("bash" ,bash-minimal) - ("curl" ,curl) - ("fluidsynth" ,fluidsynth) - ("freeimage" ,freeimage) - ("ftgl" ,ftgl) - ("glew" ,glew) - ("gtk+" ,gtk+) - ("sfml" ,sfml) - ("wxwidgets" ,wxwidgets-3.1))) + (list bash-minimal + curl + fluidsynth + freeimage + ftgl + glew + gtk+ + lua + mpg123 + sfml + wxwidgets)) (native-inputs (list pkg-config which zip)) (home-page "https://slade.mancubus.net") @@ -550,7 +612,7 @@ clone.") (define-public tsukundere (package (name "tsukundere") - (version "0.4.1") + (version "0.4.3") (source (origin (method git-fetch) (uri (git-reference @@ -559,7 +621,7 @@ clone.") (file-name (git-file-name name version)) (sha256 (base32 - "11glghnff27rqh2s34g51afg93g3f5ryfz9mkyb7qj35ngl8vw5f")))) + "1lq2rs33s6l6y0hwwkv8pppgq2ki0q5kzj11s90yivi8g8g201af")))) (build-system gnu-build-system) (arguments `(#:modules ((ice-9 match) @@ -675,6 +737,34 @@ to ease the development of games and multimedia applications. It is composed of five modules: system, window, graphics, audio and network.") (license license:zlib))) +(define-public csfml + (package + (name "csfml") + (version "2.5.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/SFML/CSFML") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1wj1p798myyavld2xdhvvflb5h4nf1vgxxzs6nh5qad44vj9b3kb")))) + (build-system cmake-build-system) + (arguments + (list #:configure-flags #~(list "-DCSFML_BUILD_DOC=TRUE") + #:tests? #f)) ;no tests + (native-inputs (list doxygen)) + (inputs (list sfml)) + (synopsis "C bindings for the SFML multimedia library") + (description + "CSFML is the official C binding to the SFML libraries. SFML provides a +simple interface to the various computer components, to ease the development of +games and multimedia applications. It is composed of five modules: system, +window, graphics, audio and network.") + (home-page "https://www.sfml-dev.org/download/csfml/") + (license license:zlib))) + (define-public sfxr (package (name "sfxr") @@ -713,7 +803,7 @@ sounds from presets such as \"explosion\" or \"powerup\".") (define-public surgescript (package (name "surgescript") - (version "0.5.5") + (version "0.5.6.1") (source (origin (method git-fetch) @@ -722,15 +812,10 @@ sounds from presets such as \"explosion\" or \"powerup\".") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0xwd4g7n0b0rxkpbyshkzyl472h1y606ghyvf8gv034n3jz2g4jk")))) + (base32 "1p1pxb4iixzq7z14bpy32dx3dhfaaf6mcz4y3g3g09bkdmm1ys6j")))) (build-system cmake-build-system) (arguments - '(#:configure-flags - (let ((share (string-append (assoc-ref %outputs "out") "/share"))) - (list "-DWANT_STATIC=NO" - (string-append "-DICON_PATH=" share "/pixmaps") - (string-append "-DMETAINFO_PATH=" share "/metainfo"))) - #:tests? #f)) + (list #:tests? #f)) ; there are no tests (home-page "https://docs.opensurge2d.org") (synopsis "Scripting language for games") (description "@code{SurgeScript} is a dynamically typed object-oriented @@ -1021,7 +1106,8 @@ the creation of animations, tiled graphics, texture atlases, and more.") (build-system cmake-build-system) (arguments '(#:configure-flags - (list "-DWITH_WEBP_SUPPORT=1") + (list "-DWITH_WEBP_SUPPORT=1" + "-DWITH_DESKTOP_INTEGRATION=1") ;; Tests are unmaintained #:tests? #f)) (native-inputs @@ -1109,93 +1195,61 @@ interface (API).") (define-public python-pygame (package (name "python-pygame") - (version "1.9.4") + (version "2.1.2") (source (origin (method url-fetch) (uri (pypi-uri "pygame" version)) (sha256 (base32 - "1dn0nb86jl7yr8709cncxdr0yrmviqakw7zx3g8jbbwrr60if3bh")))) + "0g6j79naab7583kymf1bgxc5l5c9h5laq887rmvh8vw8iyifrl6n")))) (build-system python-build-system) (arguments - `(#:tests? #f ; tests require pygame to be installed first - #:phases - (modify-phases %standard-phases - ;; Set the paths to the dependencies manually because - ;; the configure script does not allow passing them as - ;; parameters. This also means we can skip the configure - ;; phase. - (add-before 'build 'set-library-paths - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((sdl-ref (assoc-ref inputs "sdl")) - (font-ref (assoc-ref inputs "sdl-ttf")) - (image-ref (assoc-ref inputs "sdl-image")) - (mixer-ref (assoc-ref inputs "sdl-mixer")) - (smpeg-ref (assoc-ref inputs "libsmpeg")) - (png-ref (assoc-ref inputs "libpng")) - (jpeg-ref (assoc-ref inputs "libjpeg")) - (freetype-ref (assoc-ref inputs "freetype")) - (v4l-ref (assoc-ref inputs "v4l-utils")) - (out-ref (assoc-ref outputs "out"))) - (substitute* "Setup.in" - (("SDL = -I/usr/include/SDL") - (string-append "SDL = -I" sdl-ref "/include/SDL -I."))) - (substitute* "Setup.in" - (("FONT = -lSDL_ttf") - (string-append "FONT = -I" font-ref "/include/SDL -L" - font-ref "/lib -lSDL_ttf"))) - (substitute* "Setup.in" - (("IMAGE = -lSDL_image") - (string-append "IMAGE = -I" image-ref "/include/SDL -L" - image-ref "/lib -lSDL_image"))) - (substitute* "Setup.in" - (("MIXER = -lSDL_mixer") - (string-append "MIXER = -I" mixer-ref "/include/SDL -L" - mixer-ref "/lib -lSDL_mixer"))) - (substitute* "Setup.in" - (("SMPEG = -lsmpeg") - (string-append "SMPEG = -I" smpeg-ref "/include/smpeg -L" - smpeg-ref "/lib -lsmpeg"))) - (substitute* "Setup.in" - (("PNG = -lpng") - (string-append "PNG = -I" png-ref "/include -L" - png-ref "/lib -lpng"))) - (substitute* "Setup.in" - (("JPEG = -ljpeg") - (string-append "JPEG = -I" jpeg-ref "/include -L" - jpeg-ref "/lib -ljpeg"))) - - (substitute* "Setup.in" - (("FREETYPE = -lfreetype") - (string-append "FREETYPE = -I" freetype-ref "/include/freetype2 -L" - freetype-ref "/lib -lfreetype"))) - - (substitute* "Setup.in" - (("^pypm") "#pypm")) - ;; Create a path to a header file provided by v4l-utils. - (system* "mkdir" "linux") - (system* "ln" "--symbolic" - (string-append v4l-ref "/include/libv4l1-videodev.h") - "linux/videodev.h") - (system* "ln" "--symbolic" "Setup.in" "Setup"))))))) + (list + #:tests? #f ; tests require pygame to be installed first + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'fix-build-config + (lambda _ + (substitute* "buildconfig/config_unix.py" + (("origincdirs = \\[.*\\]") + "origincdirs = os.environ['C_INCLUDE_PATH'].split(\":\")") + (("ORIGLIBDIRS") "LIBRARY_PATH") + (("incdirs = \\[\\]") "incdirs = origincdirs") + (("libdirs = \\[\\]") "libdirs = origlibdirs")))) + (add-after 'unpack 'fix-sdl2-headers + (lambda _ + (substitute* "buildconfig/config_unix.py" + (("SDL_ttf.h") "SDL2/SDL_ttf.h") + (("SDL_image.h") "SDL2/SDL_image.h") + (("SDL_mixer.h") "SDL2/SDL_mixer.h")) + (substitute* "src_c/imageext.c" + (("SDL_image.h") "SDL2/SDL_image.h")) + (substitute* "src_c/font.h" + (("SDL_ttf.h") "SDL2/SDL_ttf.h")) + (substitute* "src_c/mixer.h" + (("SDL_mixer.h") "SDL2/SDL_mixer.h")) + (substitute* "src_c/_sdl2/mixer.c" + (("SDL_mixer.h") "SDL2/SDL_mixer.h"))))))) + (native-inputs + (list pkg-config)) (inputs - `(("freetype" ,freetype) - ("sdl" ,sdl) - ("sdl-image" ,sdl-image) - ("sdl-mixer" ,sdl-mixer) - ("sdl-ttf" ,sdl-ttf) - ("sdl-gfx" ,sdl-gfx) - ("libjpeg" ,libjpeg-turbo) - ("libpng" ,libpng) - ("libX11" ,libx11) - ("libsmpeg" ,libsmpeg) - ("portmidi" ,portmidi) - ("v4l-utils" ,v4l-utils))) + (list freetype + sdl2 + sdl2-image + sdl2-mixer + sdl2-ttf + sdl2-gfx + libjpeg-turbo + libpng + libx11 + libsmpeg + portmidi + v4l-utils)) (home-page "https://www.pygame.org") (synopsis "SDL wrapper for Python") (description "Pygame is a set of Python modules designed for writing games. -Pygame adds functionality on top of the excellent SDL library. This allows you -to create fully featured games and multimedia programs in the python language.") +It adds functionality on top of the SDL library, allowing you to create games +and multimedia programs in the Python language.") (license (list license:bsd-2 ;; python numeric license as listed by Debian looks like ;; an Expat-style license with a warranty disclaimer for @@ -1210,7 +1264,7 @@ to create fully featured games and multimedia programs in the python language.") (define-public python-pygame-sdl2 (let ((real-version "2.1.0") - (renpy-version "8.0.0")) + (renpy-version "8.0.3")) (package (inherit python-pygame) (name "python-pygame-sdl2") @@ -1220,7 +1274,7 @@ to create fully featured games and multimedia programs in the python language.") (method url-fetch) (uri (string-append "https://www.renpy.org/dl/" renpy-version "/pygame_sdl2-" version ".tar.gz")) - (sha256 (base32 "0majf64pdfba5byjlv41pgsdmwvy09hw3m7143jz3kc1wjd2gaw8")) + (sha256 (base32 "1nq78mybkvshshdjy5bly6nfq6dnwll648ng62fwmksxpni17486")) (modules '((guix build utils))) (snippet '(begin @@ -1261,13 +1315,13 @@ developed mainly for Ren'py.") (define-public python-renpy (package (name "python-renpy") - (version "8.0.0") + (version "8.0.3") (source (origin (method url-fetch) (uri (string-append "https://www.renpy.org/dl/" version "/renpy-" version "-source.tar.bz2")) - (sha256 (base32 "09z3r16j4cxddkb50ghmi4xp0s05s15q4pzdmfajy85ignwqhjdi")) + (sha256 (base32 "1b49y60pi6304fg06lw5gajzrgg9w80swpfkn6pw0lxbr6djgjgn")) (modules '((guix build utils))) (patches (search-patches @@ -1635,7 +1689,7 @@ robust and compatible with many systems and operating systems.") (define-public mygui (package (name "mygui") - (version "3.2.2") + (version "3.4.1") (source (origin (method git-fetch) @@ -1645,7 +1699,7 @@ robust and compatible with many systems and operating systems.") (file-name (git-file-name name version)) (sha256 (base32 - "1wk7jmwm55rhlqqcyvqsxdmwvl70bysl9azh4kd9n57qlmgk3zmw")))) + "1gyd4bzm6qqpqw6is065qs5c729gl6rp989bnkygha6q4s371vz6")))) (build-system cmake-build-system) (arguments '(#:tests? #f ; No test target @@ -1677,10 +1731,8 @@ of use.") (define-public mygui-gl ;; Closure size is reduced by some 800 MiB. - (package - (inherit mygui) + (package/inherit mygui (name "mygui-gl") - (version "3.2.2") (arguments (substitute-keyword-arguments (package-arguments mygui) ((#:configure-flags _) @@ -1721,7 +1773,7 @@ of use.") (list boost doxygen pkg-config)) (inputs (list bullet - ffmpeg + ffmpeg-4 ; https://gitlab.com/OpenMW/openmw/-/issues/6631 libxt lz4 mygui-gl ; OpenMW does not need Ogre. @@ -2001,14 +2053,14 @@ a 2D editor view.") (define-public guile-chickadee (package (name "guile-chickadee") - (version "0.8.0") + (version "0.9.0") (source (origin (method url-fetch) (uri (string-append "https://files.dthompson.us/chickadee/" "chickadee-" version ".tar.gz")) (sha256 (base32 - "1k2dml2z57lnc36wrmwhh7avnpczxgxnshlfhpbk174vg6v609n0")))) + "0b92lld7kj629mvq44vgd8vmf9h7s5gkdawb35vkzlx5q03wjfvk")))) (build-system gnu-build-system) (arguments '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) @@ -2018,6 +2070,8 @@ a 2D editor view.") (inputs (list freetype guile-3.0-latest + libjpeg-turbo + libpng libvorbis mpg123 openal @@ -2337,29 +2391,30 @@ a.k.a. XenoCollide) as described in Game Programming Gems 7.") (define-public ode (package (name "ode") - (version "0.16.2") + (version "0.16.3") (source (origin (method url-fetch) (uri (string-append "https://bitbucket.org/odedevs/ode/downloads/" "ode-" version ".tar.gz")) (sha256 - (base32 "08hgh4gqdk77jcw8b7gq2mwsfg4a5v5y0j7g42bxiqhmn3ffnsmj")) + (base32 "04y40czkh71m1p2r8ddfn5bajvlh7yyfa928jvi8qipwkgsdnhf7")) (modules '((guix build utils))) (snippet '(begin - (delete-file-recursively "libccd") - #t)))) + (delete-file-recursively "libccd"))))) (build-system cmake-build-system) (arguments - `(#:configure-flags '("-DODE_WITH_LIBCCD_SYSTEM=ON") - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'unbundle-libccd - (lambda _ - (substitute* "CMakeLists.txt" - (("configure_file\\(libccd/.*") "")) - #t))))) + (list + ;; XXX: The sole test is failing on i686 due to a rounding error. + #:tests? (not (target-x86-32?)) + #:configure-flags #~(list "-DODE_WITH_LIBCCD_SYSTEM=ON") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'unbundle-libccd + (lambda _ + (substitute* "CMakeLists.txt" + (("configure_file\\(libccd/.*") ""))))))) (inputs (list glu libccd mesa)) (home-page "https://www.ode.org/") @@ -2386,12 +2441,20 @@ computer games, 3D authoring tools and simulation tools.") (commit (string-append "Chipmunk-" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1qmkn01g06p3rnhmbyffmjns6wj5vhgf9cscigk3wzxcpwv1hyxb")))) + (base32 "1qmkn01g06p3rnhmbyffmjns6wj5vhgf9cscigk3wzxcpwv1hyxb")) + (modules '((guix build utils))) + (snippet + #~(begin + ;; This is fixed in the upstream repository but the fix + ;; has not been released. + (substitute* "src/cpHastySpace.c" + (("#include <sys/sysctl.h>") "")))))) (build-system cmake-build-system) (arguments - `(#:tests? #f ;no test - #:configure-flags '("-DBUILD_STATIC=OFF" - "-DBUILD_DEMOS=OFF"))) + (list #:tests? #f ;no test + #:configure-flags + #~(list "-DBUILD_STATIC=OFF" + "-DBUILD_DEMOS=OFF"))) (inputs (list freeglut libxmu libxrandr)) (home-page "https://chipmunk-physics.net/") @@ -2572,7 +2635,7 @@ utilities frequently used in roguelikes.") `(("alsa-lib" ,alsa-lib) ("curl" ,curl) ("freetype" ,freetype) - ("ffmpeg" ,ffmpeg) + ("ffmpeg" ,ffmpeg-4) ("libjpeg" ,libjpeg-turbo) ("libogg" ,libogg) ("libpng" ,libpng) @@ -2773,3 +2836,35 @@ systems where you stream new navigation data in and out as the player progresses the level, or you may regenerate tiles as the world changes.") (home-page "https://github.com/recastnavigation/recastnavigation") (license license:zlib)))) + +(define-public raylib + (package + (name "raylib") + (version "4.2.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/raysan5/raylib/") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "14v5iwxh8grywiyw9agpd2sfpyriq1rwwkd9f2s4iihh0z5j7hk8")))) + (build-system cmake-build-system) + (arguments + (list #:tests? #f)) ;no test + (inputs (list alsa-lib + libx11 + libxrandr + libxi + libxinerama + libxcursor + mesa)) + (native-inputs (list pkg-config)) + (synopsis "C library for videogame programming") + (description + "raylib is a high-level library for video game programming. It aims to + abstract away platform and graphics details, allowing you to focus on + writing your game.") + (home-page "https://www.raylib.com/") + (license license:zlib))) |