diff mbox series

[bug#61774] gnu: Add luarocks.

Message ID 20230224224613.25630-1-guix@twilken.net
State New
Headers show
Series [bug#61774] gnu: Add luarocks. | expand

Commit Message

Timo Wilken Feb. 24, 2023, 10:46 p.m. UTC
Luarocks is a package manager for Lua modules.

It is used by the Prosody XMPP server (already packaged in Guix) to
install extensions.

* gnu/packages/lua.scm (luarocks): Add variable.
---
 gnu/packages/lua.scm | 50 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

Comments

Ludovic Courtès March 30, 2023, 9:14 p.m. UTC | #1
Hi,

Timo Wilken <guix@twilken.net> skribis:

> Luarocks is a package manager for Lua modules.
>
> It is used by the Prosody XMPP server (already packaged in Guix) to
> install extensions.
>
> * gnu/packages/lua.scm (luarocks): Add variable.

Could resend the two patches merged as one?

Some comments:

> +                      (substitute* '("GNUmakefile" "src/luarocks/fs/unix.lua"
> +                                     "src/luarocks/core/sysdetect.lua")
> +                        (("/bin/sh")
> +                         (string-append (assoc-ref inputs "bash-minimal")
> +                                        "/bin/sh")))))

Rather (search-input-file inputs "/bin/sh").

> +    (synopsis "A package manager for Lua modules")

I believe ‘guix lint’ will tel you to remove “A”.  :-)

> +    ;; The home page says:
> +    ;; "LuaRocks is free software and uses the same license as Lua."
> +    (license license:x11)))

Please double-check the license in the source (and remove the comment).

> +         (add-after 'install 'patch-unzip
> +           (lambda* (#:key inputs outputs #:allow-other-keys)
> +             (substitute*
> +                 (string-append
> +                  (assoc-ref outputs "out") "/etc/luarocks/config-"
> +                  ,(substring (package-version lua) 0 3) ".lua") ;e.g. "5.2"
> +               (("variables = \\{")
> +                (string-append
> +                 "variables = {\n"
> +                 "   AR = \"" (assoc-ref inputs "binutils") "/bin/ar\";\n"
> +                 "   BUNZIP2 = \"" (assoc-ref inputs "bzip2") "/bin/bunzip2\";\n"
> +                 "   CC = \"" (assoc-ref inputs "gcc") "/bin/gcc\";\n"
> +                 "   CHMOD = \"" (assoc-ref inputs "coreutils") "/bin/chmod\";\n"
> +                 "   CMAKE = \"" (assoc-ref inputs "coreutils") "/bin/cmake\";\n"

These should all use ‘search-input-file’.  However…

> +                 "   CP = \"" (assoc-ref inputs "coreutils") "/bin/cp\";\n"
> +                 "   CURL = \"" (assoc-ref inputs "curl") "/bin/curl\";\n"
> +                 "   CVS = \"" (assoc-ref inputs "cvs") "/bin/cvs\";\n"
> +                 "   FIND = \"" (assoc-ref inputs "findutils") "/bin/find\";\n"
> +                 "   GIT = \"" (assoc-ref inputs "git") "/bin/git\";\n"
> +                 "   GPG = \"" (assoc-ref inputs "gnupg") "/bin/gpg\";\n"

[...]

> +                 "   RSYNC = \"" (assoc-ref inputs "rsync") "/bin/rsync\";\n"
> +                 "   SCP = \"" (assoc-ref inputs "openssh") "/bin/scp\";\n"
> +                 "   SEVENZ = \"" (assoc-ref inputs "p7zip") "/bin/7z\";\n"
> +                 "   SVN = \"" (assoc-ref inputs "subversion") "/bin/svn\";\n"
> +                 "   TAR = \"" (assoc-ref inputs "tar") "/bin/tar\";\n"

Does it really need all these things?  What does ‘guix size luarocks’
say now?

Maybe it’s OK to assume that some of the rarely-used dependencies (say,
CVS, SVN, 7zip) will be picked from $PATH and that it will fail
otherwise?  That would help keep the closure size under control.

> +    (inputs (list lua bash-minimal
> +                  ;; Executables required by luarocks.
> +                  binutils bzip2 coreutils curl cvs findutils gcc git gnupg
> +                  gzip gnu-make mercurial openssh openssl p7zip rsync
> +                  subversion tar unzip wget zip))

Please one per line since there are many of them (you can run ‘guix
style luarocks’).

Could you send an updated patch?

Thanks!

Ludo’.
diff mbox series

Patch

diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index d50890bf1e..3d18e18ca9 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -18,6 +18,7 @@ 
 ;;; Copyright © 2022 Brandon Lucas <br@ndon.dk>
 ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
 ;;; Copyright © 2022 Leo Nikkilä <hello@lnikki.la>
+;;; Copyright © 2023 Timo Wilken <guix@twilken.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,6 +50,7 @@  (define-module (gnu packages lua)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages build-tools)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libevent)
@@ -1126,6 +1128,54 @@  (define-public lua-resty-shell
 shell command executions.")
     (license license:bsd-3)))
 
+(define-public luarocks
+  (package
+    (name "luarocks")
+    (version "3.9.2")
+    (home-page "https://luarocks.org/")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://luarocks.org/releases/luarocks-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1nsfp7cwqcxa8vmkcqkgi5wc0iax0j3gbdfd183kw81cq3nf99mw"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ;upstream has no tests
+       #:phases (modify-phases %standard-phases
+                  (add-before 'build 'patch-bin-sh
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* '("GNUmakefile" "src/luarocks/fs/unix.lua"
+                                     "src/luarocks/core/sysdetect.lua")
+                        (("/bin/sh")
+                         (string-append (assoc-ref inputs "bash-minimal")
+                                        "/bin/sh")))))
+                  (replace 'configure
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (invoke "./configure"
+                                (string-append "--prefix=" out))))))))
+    (inputs (list lua bash-minimal))
+    (native-inputs (list unzip))
+    (synopsis "A package manager for Lua modules")
+    (description
+     "LuaRocks is the package manager for the Lua programming
+language.
+
+It allows you to install Lua modules as self-contained packages called
+@url{https://luarocks.org/en/Types_of_rocks, @emph{rocks}}, which also contain
+version @url{https://luarocks.org/en/Dependencies, dependency} information.
+This information can be used both during installation, so that when one rock
+is requested all rocks it depends on are installed as well, and also
+optionally at run time, so that when a module is required, the correct version
+is loaded.  LuaRocks supports both local and
+@url{http://luarocks.org/en/Rocks_repositories, remote} repositories, and
+multiple local rocks trees.")
+    ;; The home page says:
+    ;; "LuaRocks is free software and uses the same license as Lua."
+    (license license:x11)))
+
 (define-public emilua
   (package
    (name "emilua")