Hi,

I'm currently packaging vagrant and some plugins. For all plugins an additional phase is required, generating a json file, see below. Since this is quite some code, I'd like to put it into some definition or some wrapper. Since it uses (this-package-verion), my attempts failed.

At best, a plugin would then be defined like

  (define-public vagrant-abc (vagrant-plugin-wrapper (package …

Anyhow I'd be happy to when being able to use some function in the phase instead of duplicating the code.

Any ideas? Many thanks in advance

    (arguments
     (list
      #:tests? #f ; tests involve running vagrant and downloading a box
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'install 'install-plugin.json
            (lambda _
              (let* ((plugins.d (string-append
                                 #$output "/share/vagrant-plugins/plugins.d"))
                     (plugin.json (string-append
                                   plugins.d "/" #$name ".json")))
                (mkdir-p plugins.d)
                #$(with-extensions (list guile-json-4)
                    #~(begin
                        (use-modules (json))
                        (call-with-output-file plugin.json
                          (lambda (port)
                            (scm->json
                             '((#$name
                                .
                                (("ruby_version"
                                  . #$(package-version (this-package-input "ruby")))
                                 ("vagrant_version"
                                  . #$(package-version (this-package-input "vagrant")))
                                 ("gem_version" .  "")
                                 ("require" . "")
                                 ("sources" . #()))))
                             port)))))))))))

-- 
Regards
Hartmut Goebel

| Hartmut Goebel          | h.goe...@crazy-compilers.com               |
| www.crazy-compilers.com | compilers which you thought are impossible |




Reply via email to