Subject: [core-updates PATCH 02/20] gnu: Add lutok.

From: Maxim Cournoyer <[email-masked]>
Date: Thu, 22 Feb 2024 11:10:01 -0500

* gnu/packages/lua.scm (lutok): New variable.

Change-Id: I595b26c601c8ca8c997c86e8f8eb17fbe363a038
---

 gnu/packages/lua.scm | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 1cde6bd66c..07c803d27e 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2022 Leo Nikkilä <[email-masked]>
 ;;; Copyright © 2023 Yovan Naumovski <[email-masked]>
 ;;; Copyright © 2023 Valter Nazianzeno <[email-masked]>
+;;; Copyright © 2024 Maxim Cournoyer <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,9 +49,11 @@ (define-module (gnu packages lua)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gperf)
@@ -898,6 +901,44 @@ (define-public lua5.2-bitop
 (define-public lua5.1-bitop
   (make-lua-bitop "lua5.1-bitop" lua-5.1))
 
+(define-public lutok
+  (package
+    (name "lutok")
+    (version "0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/freebsd/lutok")
+                    (commit (string-append name "-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0a2vc2wy5hasw69h1mz768ywx6c4ccl9jzzd4ixddwba3z3ha03b"))))
+    (build-system gnu-build-system)
+    ;; Disable the test suite to avoid a circular dependency on kyua.
+    (arguments (list #:tests? #f))
+    (native-inputs (list autoconf automake libtool pkg-config))
+    (inputs (list atf))
+    (propagated-inputs (list lua-5.2))  ;included in c_gate.hpp
+    (home-page "https://github.com/freebsd/lutok")
+    (synopsis "Lightweight C++ API for Lua")
+    (description "Lutok is a lightweight C++ API library for Lua.
+
+Lutok provides thin C++ wrappers around the Lua C API to ease the interaction
+between C++ and Lua.  These wrappers make intensive use of @acronym{RAII,
+Resource Acquisition is Initialization} to prevent resource leakage, expose
+C++-friendly data types, report errors by means of exceptions and ensure that
+the Lua stack is always left untouched in the face of errors.  The library
+also provides a small subset of miscellaneous utility functions built on top
+of the wrappers.
+
+Lutok focuses on providing a clean and safe C++ interface; the drawback is
+that it is not suitable for performance-critical environments.  In order to
+implement error-safe C++ wrappers on top of a Lua C binary library, Lutok adds
+several layers or abstraction and error checking that go against the original
+spirit of the Lua C API and thus degrade performance.")
+    (license license:bsd-3)))
+
 (define-public selene
   (package
     (name "selene")
-- 
2.41.0