Subject: [bug#58295] [PATCH] Add dds-bridge

From: Nicolas Goaziou <[email-masked]>
Date: Tue, 04 Oct 2022 23:56:49 +0200

Hello,

The following patch adds the DDS library for bridge card game
development.

Note: it builds without libomp (but not without boost). I'm not sure it
is really necessary, even though OpenMP is mentioned in the code base.

Regards,
-- 
Nicolas Goaziou
>From af7d1beeebac44c18cac7a37c539043de244215b Mon Sep 17 00:00:00 2001
Message-Id: <[email-masked]>
From: Nicolas Goaziou <[email-masked]>
Date: Tue, 4 Oct 2022 23:51:00 +0200
Subject: [PATCH] gnu: Add dds-bridge.

* gnu/packages/game-development.scm (dds-bridge): New variable.
---
 gnu/packages/game-development.scm | 70 ++++++++++++++++++++++++++++++-
 1 file changed, 69 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 889b435cfb..bda72fe72e 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -17,7 +17,7 @@
 ;;; Copyright © 2019 Pierre Neidhardt <[email-masked]>
 ;;; Copyright © 2019, 2020, 2021 Liliana Marie Prikler <[email-masked]>
 ;;; Copyright © 2019 Jethro Cao <[email-masked]>
-;;; Copyright © 2020, 2021 Nicolas Goaziou <[email-masked]>
+;;; Copyright © 2020-2022 Nicolas Goaziou <[email-masked]>
 ;;; Copyright © 2020 Timotej Lazar <[email-masked]>
 ;;; Copyright © 2020 Giacomo Leidi <[email-masked]>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <[email-masked]>
@@ -74,6 +74,7 @@ (define-module (gnu packages game-development)
   #: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 +86,7 @@ (define-module (gnu packages game-development)
   #: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 +183,72 @@ (define-public bullet
 is used in some video games and movies.")
     (license license:zlib)))
 
+(define-public dds-bridge
+  (package
+    (name "dds-bridge")
+    (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")
+                       (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 libomp))
+    (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")
-- 
2.37.3