Subject: [bug#30084] [PATCH] gnu: Add urho3d.

From: Oleg Pykhalov <[email-masked]>
Date: Tue, 23 Jan 2018 16:29:44 +0300

Hello Ludovic,

Thank you for review!

[email-masked] (Ludovic Courtès) writes:

> Hi Oleg,
>
> Oleg Pykhalov <[email-masked]> skribis:
>
>> From 186090075a1ae515bb4893763e7c528568e15939 Mon Sep 17 00:00:00 2001
>> From: Oleg Pykhalov <[email-masked]>
>> Date: Thu, 11 Jan 2018 01:14:41 +0300
>> Subject: [PATCH] gnu: Add urho3d.
>>
>> * gnu/packages/game-development.scm (urho3d): New public variable.
>
> [...]
>
>> +           (lambda* (#:key inputs #:allow-other-keys)
>> +             (substitute* (string-append "../build/Source/ThirdParty"
>> +                                         "/SDL/include/generated/SDL_config.h")
>
> IIUC there’s a bundled copy of SDL, right?  Can we instead build against
> our SDL?

Yes, it's a bundled copy.  We probably can, but how?  The build system
probably configured look for 'Source/ThirdParty/SDL'.  So should we make
a symbolic link like 'Source/ThirdParty/SDL' -> '/gnu/store/…-SDL'?

I'll check this later.  Maybe it will search for a system first SDL and
if not find it use their own.  Also I have a question about SDL in the
following quote.

> Ideally, to be safe from bundling, we should “rm -rf ThirdParty” in a
> snippet.  Is that possible?

Unfortunately no.  The contents of the 'Source/ThirdParty' has much more
than just SDL.  It's too much work for now, but a good TODO.

Source/ThirdParty/SDL

    AngelScript Assimp boost Box2D Bullet Civetweb Detour DetourCrowd
    DetourTileCache FreeType GLEW ik JO kNet LibCpuId LICENSES Lua
    LuaJIT LZ4 MojoShader Mustache nanodbc PugiXml rapidjson Recast SDL
    SQLite StanHull STB toluapp WebP

Actually I wonder will those libraries and the engine overall play nice
with OUR SDL library?  Should we provide a Guix version and bundled
libraries version?

>> +               (((string-append "#define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC"
>> +                                " \"libpulse-simple\\.so\\.0\""))
>> +                (string-append "#define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC \""
>> +                               (assoc-ref inputs "pulseaudio")
>> +                               "/lib/libpulse-simple.so.0"
>> +                               "\"")))
>
> Please use a literal string in the ‘substitute*’ pattern (you can use
> backslashes to split it on several lines.)

OK.  Thanks for notice!

>> +    (description "Lightweight, cross-platform 2D and 3D game engine
>> +implemented in C++.  Inspired by OGRE and Horde3D.")
>
> Full sentences please!  :-)
>
>   https://www.gnu.org/software/guix/manual/html_node/Synopses-and-Descriptions.html

Oh, thanks!

> Could you send an updated path?

From 5a906d8a8a9ff50ed46b5ffc33714b11517e23ca Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <[email-masked]>
Date: Thu, 11 Jan 2018 01:14:41 +0300
Subject: [PATCH] gnu: Add urho3d.

* gnu/packages/game-development.scm (urho3d): New public variable.
---
 gnu/packages/game-development.scm | 51 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 0b08b04f5..3c5eae5cd 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1206,3 +1206,54 @@ related games such as Heretic and Hexen.  It comes with a 3d preview mode and
 a 2D editor view.")
     (home-page "http://eureka-editor.sourceforge.net/")
     (license license:gpl2+)))
+
+(define-public urho3d
+  (package
+    (name "urho3d")
+    (version "1.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/urho3d/Urho3D"
+                                  "/archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1im63n9rx8qq1ks6aq6jrl5ikxg87hqhsy06miqc317hpm1iyav5"))))
+    (build-system cmake-build-system)
+    (inputs `(("libx11" ,libx11)
+              ("libxcursor" ,libxcursor)
+              ("libxext" ,libxext)
+              ("libxi" ,libxi)
+              ("libxinerama" ,libxinerama)
+              ("libxrandr" ,libxrandr)
+              ("libxrender" ,libxrender)
+              ("libxscrnsaver" ,libxscrnsaver)
+              ("mesa" ,mesa)
+              ("alsa-lib" ,alsa-lib)
+              ("pulseaudio" ,pulseaudio)))
+    (arguments
+     '(#:tests?
+       #f ; There are no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'use-full-library-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "../build/Source/ThirdParty\
+/SDL/include/generated/SDL_config.h"
+               (("#define SDL_AUDIO_DRIVER_ALSA_DYNAMIC \"libasound\\.so\\.2\"")
+                (string-append "#define SDL_AUDIO_DRIVER_ALSA_DYNAMIC \""
+                               (assoc-ref inputs "alsa-lib")
+                               "/lib/libasound.so.2"
+                               "\""))
+               (((string-append "#define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC"
+                                " \"libpulse-simple\\.so\\.0\""))
+                (string-append "#define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC \""
+                               (assoc-ref inputs "pulseaudio")
+                               "/lib/libpulse-simple.so.0"
+                               "\"")))
+             #t)))))
+    (home-page "https://urho3d.github.io/")
+    (synopsis "Cross-platform 2D and 3D game engine")
+    (description "This package provides a lightweight, cross-platform 2D and
+3D game engine implemented in C++.  Inspired by OGRE and Horde3D.")
+    (license license:expat)))
-- 
2.15.1

Oleg.