[PATCH] gnu: Add task-spooler.

  • Done
  • quality assurance status badge
Details
3 participants
  • Ivan Gankevich
  • Ludovic Courtès
  • Maxime Devos
Owner
unassigned
Submitted by
Ivan Gankevich
Severity
normal

Debbugs page

Ivan Gankevich wrote 4 years ago
(address . guix-patches@gnu.org)(name . Ivan Gankevich)(address . i.gankevich@spbu.ru)
20210721183504.9388-1-i.gankevich@spbu.ru
* gnu/packages/task-runners.scm (task-spooler): New variable.
---
gnu/packages/task-runners.scm | 58 +++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)

Toggle diff (83 lines)
diff --git a/gnu/packages/task-runners.scm b/gnu/packages/task-runners.scm
index 49a07fa3bd..5b47076696 100644
--- a/gnu/packages/task-runners.scm
+++ b/gnu/packages/task-runners.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -19,8 +20,12 @@
(define-module (gnu packages task-runners)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
+ #:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (gnu packages compression)
#:use-module (gnu packages golang)
+ #:use-module (gnu packages mail)
+ #:use-module (guix build-system gnu)
#:use-module (guix build-system go))
(define-public run
@@ -47,3 +52,56 @@
using a Runfile.")
(home-page "https://github.com/TekWizely/run")
(license license:expat)))
+
+(define-public task-spooler
+ (package
+ (name "task-spooler")
+ (version "1.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://vicerveza.homeunix.net/~viric/soft/ts/ts-" version ".tar.gz"))
+ (sha256 (base32 "0y32sm2i2jxs88c307h76449fynk75p9qfw1k11l5ixrn03z67pl"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:make-flags
+ (let ((c-flags "-g -O2"))
+ (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+ "CC=gcc"
+ (string-append "CFLAGS=" c-flags)
+ (string-append "LDFLAGS=" c-flags)))
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure) ;; no configuration script
+ (add-after 'unpack 'rename-and-patch-paths
+ (lambda _
+ ;; Rename "ts" to "tsp" to not interfere with "ts" command
+ ;; from moreutils package.
+ (rename-file "ts.1" "tsp.1");
+ (substitute* '("Makefile" "testbench.sh")
+ (("\\bts\\b") "tsp"))
+ ;; Patch gzip/sendmail/shell paths.
+ (substitute* "execute.c"
+ (("execlp\\(\"gzip\"") (format #f "execlp(\"~a\"" (which "gzip"))))
+ (substitute* "list.c"
+ (("/bin/sh\\b") (which "sh")))
+ (substitute* "env.c"
+ (("execlp\\(\"/bin/sh\"") (format #f "execlp(\"~a\"" (which "sh"))))
+ (substitute* "mail.c"
+ (("execl\\(\"/usr/sbin/sendmail\"")
+ (format #f "execl(\"~a/usr/sbin/sendmail\""
+ (assoc-ref %build-inputs "sendmail"))))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (setenv "PATH" (string-join (list (getenv "PATH") (getcwd)) ":"))
+ (invoke "./testbench.sh")))))))
+ (inputs
+ `(("gzip" ,gzip)
+ ("sendmail" ,sendmail)))
+ (synopsis "UNIX task queue system")
+ (description "Task spooler let users run shell commands asynchronously
+one after the other in a separate process.")
+ (home-page "https://vicerveza.homeunix.net/~viric/soft/ts/")
+ (license license:gpl2+)))
--
2.32.0
Maxime Devos wrote 4 years ago
(name . Ivan Gankevich)(address . i.gankevich@spbu.ru)(address . 49685@debbugs.gnu.org)
e653b01880415556c8f30e0508be89618cecaddd.camel@telenet.be
Ivan Gankevich schreef op wo 21-07-2021 om 21:35 [+0300]:
Toggle quote (17 lines)
> +(define-public task-spooler
> + (package
> + (name "task-spooler")
> + (version "1.0.1")
> + (source
> + (origin
> + (method url-fetch)
> + (uri (string-append
> + "https://vicerveza.homeunix.net/~viric/soft/ts/ts-" version ".tar.gz"))
> + (sha256 (base32 "0y32sm2i2jxs88c307h76449fynk75p9qfw1k11l5ixrn03z67pl"))))
> + (build-system gnu-build-system)
> + (arguments
> + `(#:make-flags
> + (let ((c-flags "-g -O2"))
> + (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
> + "CC=gcc"

This shoul be ,(string-append "CC=" (cc-for-target)), such that the cross-compiler
is used when cross-compililng.

Toggle quote (3 lines)
> + (string-append "CFLAGS=" c-flags)
> + (string-append "LDFLAGS=" c-flags)))

Why are you adding "-g -O2" to LDFLAGS? I understand adding it to CFLAGS,
but I don't see why it would be added to CFLAGS.

Toggle quote (14 lines)
> + #:phases
> + (modify-phases %standard-phases
> + (delete 'configure) ;; no configuration script
> + (add-after 'unpack 'rename-and-patch-paths
> + (lambda _
> + ;; Rename "ts" to "tsp" to not interfere with "ts" command
> + ;; from moreutils package.
> + (rename-file "ts.1" "tsp.1");
> + (substitute* '("Makefile" "testbench.sh")
> + (("\\bts\\b") "tsp"))
> + ;; Patch gzip/sendmail/shell paths.
> + (substitute* "execute.c"
> + (("execlp\\(\"gzip\"") (format #f "execlp(\"~a\"" (which "gzip"))))

This needs to be (search-input-file "bin/gzip") instead of (which "gzip")
for cross-compilation purposes ('which' searches for a native "gzip" in $PATH)
'search-input-file' is not yet defined on 'master' (it's only on 'core-updates'
currently), so you could do something like

(string-append (assoc-ref inputs "gzip") "/bin/gzip")

Toggle quote (3 lines)
> + (substitute* "list.c"
> + (("/bin/sh\\b") (which "sh")))

Ditto (and you need to add "bash-minimal" to "inputs").

Toggle quote (3 lines)
> + (substitute* "env.c"
> + (("execlp\\(\"/bin/sh\"") (format #f "execlp(\"~a\"" (which "sh"))))

Ditto.

Toggle quote (5 lines)
> + (substitute* "mail.c"
> + (("execl\\(\"/usr/sbin/sendmail\"")
> + (format #f "execl(\"~a/usr/sbin/sendmail\""
> + (assoc-ref %build-inputs "sendmail"))))))

If you fix 'sendemail' to install things in "sbin" instead of
"usr/sbin", then you can do (search-input-file inputs "bin/sendmail").

Toggle quote (5 lines)
> + (replace 'check
> + (lambda* (#:key tests? #:allow-other-keys)
> + (when tests?
> + (setenv "PATH" (string-join (list (getenv "PATH") (getcwd)) ":"))

Greetings,
Maxime.
-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYPhuyhccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7lLVAQDttromNVh3RsKLN8QcOj2Fdsz+
C5q40UyLlG0NmyR59QEA1fhdVIZHkp5KJ+6t7NMpEEeoWksTg/v3EmOSGpbSugs=
=R7c/
-----END PGP SIGNATURE-----


Ivan Gankevich wrote 4 years ago
[PATCH] gnu: sendmail: Install executables to $prefix/sbin and $prefix/bin directories.
(address . 49685@debbugs.gnu.org)(name . Ivan Gankevich)(address . i.gankevich@spbu.ru)
20210723181538.8402-1-i.gankevich@spbu.ru
Currently "sendmail" installs executables to $PREFIX/usr/sbin and
$PREFIX/usr/bin directories. This patch changes them to $PREFIX/sbin and
$PREFIX/bin respectively. Also this patch fixes broken symlinks in
$PREFIX/bin and updates package definitions that use old sendmail paths.

* gnu/packages/mail.scm (sendmail): Set new paths.
[arguments]<#:phases>{replace-/usr}: Remove /usr prefix.
[arguments]<#:phases>{post-install}: Fix broken symlinks
[arguments]<#:phases>{configure}: Set paths without /usr prefix.
* gnu/packages/mail.scm (claws-mail): Use new sendmail paths.
* gnu/packages/version-control.scm (python-git-multimail): Use new
sendmail paths.
---
gnu/packages/mail.scm | 28 ++++++++++++++++++++++++----
gnu/packages/version-control.scm | 2 +-
2 files changed, 25 insertions(+), 5 deletions(-)

Toggle diff (79 lines)
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index f0f1540cc9..a76a56694c 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1635,7 +1635,7 @@ compresses it.")
(let* ((mailutils (assoc-ref inputs "mailutils"))
(inc (string-append mailutils "/bin/mu-mh/inc"))
(send-mail (assoc-ref inputs "sendmail"))
- (sendmail (string-append send-mail "/usr/sbin/sendmail")))
+ (sendmail (string-append send-mail "/sbin/sendmail")))
(substitute* "src/common/defs.h"
(("/usr/bin/mh/inc") inc)
(("/usr/sbin/sendmail") sendmail)))))
@@ -2881,6 +2881,13 @@ powerful user customization features.")
(substitute* "devtools/bin/Build"
(("SHELL=/bin/sh") (string-append "SHELL=" (which "sh"))))
#t))
+ (add-before 'build 'replace-/usr
+ (lambda _
+ (substitute*
+ '("devtools/OS/Linux"
+ "cf/ostype/mklinux.m4"
+ "cf/ostype/linux.m4")
+ (("/usr/sbin") "/sbin"))))
(replace 'configure
(lambda _
@@ -2892,6 +2899,11 @@ powerful user customization features.")
(with-output-to-file "devtools/Site/site.config.m4"
(lambda ()
(format #t "
+define(`confEBINDIR', `/sbin')
+define(`confSBINDIR', `/sbin')
+define(`confMBINDIR', `/sbin')
+define(`confUBINDIR', `/bin')
+define(`confLINKS', `')
define(`confCC', `gcc')
define(`confOPTIMIZE', `-g -O2')
define(`confLIBS', `-lresolv')
@@ -2910,13 +2922,21 @@ define(`confINST_DEP', `')
(add-before 'install 'pre-install
(lambda _
(let ((out (assoc-ref %outputs "out")))
- (mkdir-p (string-append out "/usr/bin"))
- (mkdir-p (string-append out "/usr/sbin"))
+ (mkdir-p (string-append out "/bin"))
+ (mkdir-p (string-append out "/sbin"))
(mkdir-p (string-append out "/etc/mail"))
(setenv "DESTDIR" out)
(with-directory-excursion "cf/cf"
(invoke "sh" "Build" "install-cf"))
- #t))))
+ #t)))
+ (add-after 'install 'post-install
+ (lambda _
+ ;; Make symbolic links manually, because build script uses
+ ;; absolute paths for them and ignores DESTDIR.
+ (for-each
+ (lambda (name)
+ (symlink "../sbin/sendmail" (string-append %output "/bin/" name)))
+ '("hoststat" "newaliases" "mailq" "purgestat")))))
;; There is no make check. There are some post installation tests, but those
;; require root privileges
#:tests? #f))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 7c1dbe8b26..814a87904e 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -1036,7 +1036,7 @@ a built-in cache to decrease server I/O pressure.")
"'"))
(("/usr/sbin/sendmail")
(string-append (assoc-ref inputs "sendmail")
- "/usr/sbin/sendmail")))
+ "/sbin/sendmail")))
#t)))))
(inputs
`(("git" ,git)
--
2.32.0
Ivan Gankevich wrote 4 years ago
[PATCH] gnu: Add task-spooler.
(address . 49685@debbugs.gnu.org)(name . Ivan Gankevich)(address . i.gankevich@spbu.ru)
20210723181902.8703-1-i.gankevich@spbu.ru
* gnu/packages/task-runners.scm (task-spooler): New variable.
---
gnu/packages/task-runners.scm | 64 +++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)

Toggle diff (89 lines)
diff --git a/gnu/packages/task-runners.scm b/gnu/packages/task-runners.scm
index 49a07fa3bd..237a6ec1b6 100644
--- a/gnu/packages/task-runners.scm
+++ b/gnu/packages/task-runners.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -19,8 +20,14 @@
(define-module (gnu packages task-runners)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
+ #:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (guix utils)
+ #:use-module (gnu packages bash)
+ #:use-module (gnu packages compression)
#:use-module (gnu packages golang)
+ #:use-module (gnu packages mail)
+ #:use-module (guix build-system gnu)
#:use-module (guix build-system go))
(define-public run
@@ -47,3 +54,60 @@
using a Runfile.")
(home-page "https://github.com/TekWizely/run")
(license license:expat)))
+
+(define-public task-spooler
+ (package
+ (name "task-spooler")
+ (version "1.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://vicerveza.homeunix.net/~viric/soft/ts/ts-" version ".tar.gz"))
+ (sha256 (base32 "0y32sm2i2jxs88c307h76449fynk75p9qfw1k11l5ixrn03z67pl"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:make-flags
+ (let ((c-flags "-g -O2"))
+ (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+ ,(string-append "CC=" (cc-for-target))
+ (string-append "CFLAGS=" c-flags)))
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure) ;; no configuration script
+ (add-after 'unpack 'rename-and-patch-paths
+ (lambda _
+ ;; Rename "ts" to "tsp" to not interfere with "ts" command
+ ;; from moreutils package.
+ (rename-file "ts.1" "tsp.1");
+ (substitute* '("Makefile" "testbench.sh")
+ (("\\bts\\b") "tsp"))
+ ;; Patch gzip/sendmail/shell paths.
+ (substitute* "execute.c"
+ (("execlp\\(\"gzip\"")
+ (format #f "execlp(\"~a/bin/gzip\""
+ (assoc-ref %build-inputs "gzip"))))
+ (substitute* "list.c"
+ (("/bin/sh\\b") (which "sh")))
+ (substitute* "env.c"
+ (("execlp\\(\"/bin/sh\"")
+ (format #f "execlp(\"~a/bin/sh\""
+ (assoc-ref %build-inputs "bash"))))
+ (substitute* "mail.c"
+ (("execl\\(\"/usr/sbin/sendmail\"")
+ (format #f "execl(\"~a/sbin/sendmail\""
+ (assoc-ref %build-inputs "sendmail"))))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (setenv "PATH" (string-join (list (getenv "PATH") (getcwd)) ":"))
+ (invoke "./testbench.sh")))))))
+ (inputs
+ `(("bash" ,bash-minimal)
+ ("gzip" ,gzip)
+ ("sendmail" ,sendmail)))
+ (synopsis "UNIX task queue system")
+ (description "Task spooler let users run shell commands asynchronously
+one after the other in a separate process.")
+ (home-page "https://vicerveza.homeunix.net/~viric/soft/ts/")
+ (license license:gpl2+)))
--
2.32.0
Ivan Gankevich wrote 4 years ago
(name . Maxime Devos)(address . maximedevos@telenet.be)(address . 49685@debbugs.gnu.org)
YPsI/G+zDMlTVoZI@surge
Toggle quote (9 lines)
>> + (arguments
>> + `(#:make-flags
>> + (let ((c-flags "-g -O2"))
>> + (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
>> + "CC=gcc"
>
>This shoul be ,(string-append "CC=" (cc-for-target)), such that the cross-compiler
>is used when cross-compililng.

Fixed!


Toggle quote (6 lines)
>> + (string-append "CFLAGS=" c-flags)
>> + (string-append "LDFLAGS=" c-flags)))
>
>Why are you adding "-g -O2" to LDFLAGS? I understand adding it to CFLAGS,
>but I don't see why it would be added to CFLAGS.

You’re right. Removed LDFLAGS.


Toggle quote (11 lines)
>> + ;; Patch gzip/sendmail/shell paths.
>> + (substitute* "execute.c"
>> + (("execlp\\(\"gzip\"") (format #f "execlp(\"~a\"" (which "gzip"))))
>
>This needs to be (search-input-file "bin/gzip") instead of (which "gzip")
>for cross-compilation purposes ('which' searches for a native "gzip" in $PATH)
>'search-input-file' is not yet defined on 'master' (it's only on 'core-updates'
>currently), so you could do something like
>
> (string-append (assoc-ref inputs "gzip") "/bin/gzip")

Changed “which” to “string-append” here and everywhere else.


Toggle quote (3 lines)
>If you fix 'sendemail' to install things in "sbin" instead of
>"usr/sbin", then you can do (search-input-file inputs "bin/sendmail").

I’ve sent a separate patch that fixes /sbin and /bin directories for “sendmail”.

Thank you for the review, Maxime!
Ludovic Courtès wrote 4 years ago
Re: bug#49685: [PATCH] gnu: Add task-spooler.
(name . Ivan Gankevich)(address . i.gankevich@spbu.ru)(address . 49685-done@debbugs.gnu.org)
87bl65qqbb.fsf_-_@gnu.org
Hi,

Ivan Gankevich <i.gankevich@spbu.ru> skribis:

Toggle quote (13 lines)
> Currently "sendmail" installs executables to $PREFIX/usr/sbin and
> $PREFIX/usr/bin directories. This patch changes them to $PREFIX/sbin and
> $PREFIX/bin respectively. Also this patch fixes broken symlinks in
> $PREFIX/bin and updates package definitions that use old sendmail paths.
>
> * gnu/packages/mail.scm (sendmail): Set new paths.
> [arguments]<#:phases>{replace-/usr}: Remove /usr prefix.
> [arguments]<#:phases>{post-install}: Fix broken symlinks
> [arguments]<#:phases>{configure}: Set paths without /usr prefix.
> * gnu/packages/mail.scm (claws-mail): Use new sendmail paths.
> * gnu/packages/version-control.scm (python-git-multimail): Use new
> sendmail paths.

That’s a much welcome change! Applied.

Toggle quote (2 lines)
> * gnu/packages/task-runners.scm (task-spooler): New variable.

Applied as well.

Thank you!

Ludo’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 49685@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 49685
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help