On this page:
install-emacs-lisp-files-dependencies
9.2

8 Enigma API: Dependencies Subcommand🔗

 (require enigma/subcommands/dependencies)
  package: enigma-app

procedure

(install-emacs-lisp-files-dependencies start-path 
  extra-emacs-flags) 
  
exact-integer? (listof hash?)
  start-path : path-string?
  extra-emacs-flags : (listof string?)
Install dependencies of Emacs Lisp packages found under start-path. Pass extra-emacs-flags as extra flags.

Returns the values that indicate: exact-integer? total installation success and a list of objects that describe properties of installed dependencies.

The source code of this module:

#lang racket/base
 
(require racket/contract/base)
 
(require "../emacs/file/content-guess.rkt")
(require "../emacs/file/context.rkt")
(require "../emacs/package/archives.rkt")
(require "../emacs/path/load-path.rkt")
(require "../emacs/system/run-emacs.rkt")
 
(provide
 (contract-out
  [install-emacs-lisp-files-dependencies
   (-> path-string? (listof string?)
       (values exact-integer? (listof hash?)))]))
 
(define (install-remote-emacs-package package-name extra-emacs-flags)
  (define package-bootstrap-expr
    `(progn
      (setq package-archives (quote ,(get-emacs-package-archives)))
      (package-initialize)
      (package-install (quote ,package-name))))
  (define cmdline-args
    (append (make-emacs-cmdline-args '() extra-emacs-flags)
            `("-batch"
              "--eval" ,(format "~s" package-bootstrap-expr))))
  (eprintf " Installing remote package: ~v\n" package-name)
  (define exit-code (run-emacs cmdline-args))
  (when (= 0 exit-code)
    (eprintf " Install of remote package ~v succeeded\n" package-name))
  exit-code)
 
(define (install-emacs-lisp-files-dependencies start-path extra-emacs-flags)
  (define result-code (make-parameter 0))
  (define-values (emacs-lisp-files _load-path)
    (find-emacs-lisp-context start-path))
  (define refresh-result (refresh-emacs-package-archives extra-emacs-flags))
  (when (> refresh-result 0)
    (result-code refresh-result))
  (define result-hash-rev
    (for/fold ([results '()])
              ([emacs-lisp-file emacs-lisp-files])
      (define version (guess-file-version emacs-lisp-file))
      (define dependencies (guess-file-dependencies emacs-lisp-file))
      (cond
        [(and version (not (null? dependencies)))
         (eprintf " Found dependencies: ~v in file ~a\n"
                  dependencies emacs-lisp-file)
         (define exit-codes
           (for/list ([package-name dependencies])
             (install-remote-emacs-package package-name extra-emacs-flags)))
         (define first-failure-exit-code
           (for/first ([exit-code exit-codes]
                       #:when (> exit-code 0))
             exit-code))
         (define successful? (not first-failure-exit-code))
         (when (not successful?)
           (result-code first-failure-exit-code))
         (define h
           (hash 'dependencies (format "~s" dependencies)
                 'file-path (path->string emacs-lisp-file)
                 'successful? successful?))
         (cons h results)]
        [else results])))
  (define result-hash (reverse result-hash-rev))
  (values (result-code) result-hash))