aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/ruby.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/ruby.scm')
-rw-r--r--gnu/packages/ruby.scm22
1 files changed, 22 insertions, 0 deletions
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index e1a36aa3db..45d2343cdf 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -3254,3 +3254,25 @@ specific use case.")
files and use the data therein.")
(home-page "http://github.com/halfbyte/afm")
(license license:expat)))
+
+(define-public ruby-ascii85
+ (package
+ (name "ruby-ascii85")
+ (version "1.0.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "Ascii85" version))
+ (sha256
+ (base32
+ "0j95sbxd18kc8rhcnvl1w37kflqpax1r12h1x47gh4xxn3mz4m7q"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (synopsis "Encode and decode Ascii85 binary-to-text encoding")
+ (description
+ "This library provides methods to encode and decode Ascii85
+binary-to-text encoding. The main modern use of Ascii85 is in PostScript and
+@dfn{Portable Document Format} (PDF) file formats.")
+ (home-page "https://github.com/datawraith/ascii85gem")
+ (license license:expat)))
port))) (call-with-output-file "job" (lambda (port) (write '#$job port))) (invoke #+(file-append mcron "/bin/mcron") "--schedule=20" "prologue" "job") (copy-file "job" #$output))) #:options '(#:env-vars (("COLUMNS" . "150"))))) (map validated-file jobs)) (define (shepherd-schedule-action mcron files) "Return a Shepherd action that runs MCRON with '--schedule' for the given files." (shepherd-action (name 'schedule) (documentation "Display jobs that are going to be scheduled.") (procedure #~(lambda* (_ #:optional (n "5")) ;; XXX: This is a global side effect. (setenv "GUILE_AUTO_COMPILE" "0") ;; Run 'mcron' in a pipe so we can explicitly redirect its output to ;; 'current-output-port', which at this stage is bound to the client ;; connection. (let ((pipe (open-pipe* OPEN_READ #$(file-append mcron "/bin/mcron") (string-append "--schedule=" n) #$@files))) (let loop () (match (read-line pipe 'concat) ((? eof-object?) (catch 'system-error (lambda () (zero? (close-pipe pipe))) (lambda args ;; There's a race with the SIGCHLD handler, which ;; could call 'waitpid' before 'close-pipe' above does. If ;; we get ECHILD, that means we lost the race, but that's ;; fine. (or (= ECHILD (system-error-errno args)) (apply throw args))))) (line (display line) (loop))))))))) (define (mcron-shepherd-services config) (match-record config <mcron-configuration> (mcron jobs log? log-file log-format date-format home-service?) (if (eq? jobs '()) '() ;nothing to do (let ((files (job-files mcron jobs))) (list (shepherd-service (provision '(mcron)) (requirement (if home-service? '() '(user-processes))) (modules `((srfi srfi-1) (srfi srfi-26) (ice-9 popen) ;for the 'schedule' action (ice-9 rdelim) (ice-9 match) ((shepherd support) #:hide (mkdir-p)) ;for '%user-log-dir' ,@%default-modules)) (start #~(make-forkexec-constructor (list #$(file-append mcron "/bin/mcron") #$@(if log? `("--log" "--log-format" ,log-format ,@(if date-format (list "--date-format" date-format) '())) '()) #$@files) ;; Disable auto-compilation of the job files and ;; set a sane value for 'PATH'. #:environment-variables (cons* "GUILE_AUTO_COMPILE=0" #$(if home-service? '(environ) '(cons* "PATH=/run/current-system/profile/bin" (remove (cut string-prefix? "PATH=" <>) (environ))))) #:log-file #$log-file)) (stop #~(make-kill-destructor)) (actions (list (shepherd-schedule-action mcron files))))))))) (define mcron-service-type (service-type (name 'mcron) (description "Run the mcron job scheduling daemon.") (extensions (list (service-extension shepherd-root-service-type mcron-shepherd-services) (service-extension profile-service-type (compose list mcron-configuration-mcron)))) (compose concatenate) (extend (lambda (config jobs) (mcron-configuration (inherit config) (home-service? (mcron-configuration-home-service? config)) (jobs (append (mcron-configuration-jobs config) jobs))))) (default-value (mcron-configuration)))) ;empty job list (define-configuration/no-serialization cron-daemon-configuration (cron (package mcron) "The cron package to use.") (monitor-etc? (boolean #f) "Whether to check /etc/crontab for updates.")) (define (cron-daemon-shepherd-services config) (list (shepherd-service (provision '(cron-daemon)) (start #~(make-forkexec-constructor '(#$(file-append (cron-daemon-configuration-cron config) "/sbin/cron") #$@(if (cron-daemon-configuration-monitor-etc? config) '() '("--noetc"))) #:pid-file "/var/run/cron.pid")) (stop #~(make-kill-destructor))))) (define cron-daemon-activation (const #~(mkdir-p "/var/cron/tabs"))) (define (cron-daemon-setuid-programs config) (list (privileged-program (program (file-append (cron-daemon-configuration-cron config) "/sbin/crontab-access"))))) (define cron-daemon-service-type (service-type (name 'cron-daemon) (description "Run the traditional cron daemon.") (extensions (list (service-extension shepherd-root-service-type cron-daemon-shepherd-services) (service-extension activation-service-type cron-daemon-activation) (service-extension privileged-program-service-type cron-daemon-setuid-programs))) (default-value (cron-daemon-configuration)))) ;;; mcron.scm ends here