gnu: git: Add inputs for send-email.

* gnu/packages/version-control.scm (package-transitive-propagated-labels*)
  (package-propagated-input-refs): New procedures.
  (git)[inputs]: Add perl-authen-sasl, perl-net-smtp-ssl, and perl-io-socket-ssl.
  [outputs]: Add send-email output.
  [arguments]: Add #:modules argument with srfi-1.  In 'split phase, wrap
  git-send-email.
This commit is contained in:
Eric Bavier 2015-06-27 21:06:53 -05:00
parent c6ee18abb6
commit 58c1806908

View file

@ -60,7 +60,9 @@ (define-module (gnu packages version-control)
#:use-module (gnu packages compression) #:use-module (gnu packages compression)
#:use-module (gnu packages swig) #:use-module (gnu packages swig)
#:use-module (gnu packages tcl) #:use-module (gnu packages tcl)
#:use-module (gnu packages)) #:use-module (gnu packages)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1))
(define-public bazaar (define-public bazaar
(package (package
@ -97,6 +99,23 @@ (define-public bazaar
as well as the classic centralized workflow.") as well as the classic centralized workflow.")
(license gpl2+))) (license gpl2+)))
(define (package-transitive-propagated-labels* package)
"Return a list of the input labels of PACKAGE and its transitive inputs."
(let ((name (package-name package)))
`(,name
,@(map (match-lambda
((label (? package? _) . _)
(string-append name "/" label)))
(package-transitive-propagated-inputs package)))))
(define (package-propagated-input-refs inputs packages)
"Return a list of (assoc-ref INPUTS <package-name>) for each package in
PACKAGES and their propagated inputs."
(map (lambda (l)
`(assoc-ref ,inputs ,l))
(append-map package-transitive-propagated-labels*
packages)))
(define-public git (define-public git
;; Keep in sync with 'git-manpages'! ;; Keep in sync with 'git-manpages'!
(package (package
@ -124,10 +143,16 @@ (define-public git
;; For 'git-svn'. ;; For 'git-svn'.
("subversion" ,subversion) ("subversion" ,subversion)
;; For 'git-send-email'
("perl-authen-sasl" ,perl-authen-sasl)
("perl-net-smtp-ssl" ,perl-net-smtp-ssl)
("perl-io-socket-ssl" ,perl-io-socket-ssl)
;; For 'git gui', 'gitk', and 'git citool'. ;; For 'git gui', 'gitk', and 'git citool'.
("tcl" ,tcl) ("tcl" ,tcl)
("tk" ,tk))) ("tk" ,tk)))
(outputs '("out" ; the core (outputs '("out" ; the core
"send-email" ; for git-send-email
"svn" ; git-svn "svn" ; git-svn
"gui")) ; gitk, git gui "gui")) ; gitk, git gui
(arguments (arguments
@ -141,6 +166,8 @@ (define-public git
(assoc-ref %build-inputs "tk") (assoc-ref %build-inputs "tk")
"/bin/wish8.6")) ; XXX "/bin/wish8.6")) ; XXX
#:modules ((srfi srfi-1)
,@%gnu-build-system-modules)
#:phases #:phases
(alist-cons-after (alist-cons-after
'configure 'patch-makefile-shebangs 'configure 'patch-makefile-shebangs
@ -164,6 +191,7 @@ (define-public git
(lambda* (#:key inputs outputs #:allow-other-keys) (lambda* (#:key inputs outputs #:allow-other-keys)
;; Split the binaries to the various outputs. ;; Split the binaries to the various outputs.
(let* ((out (assoc-ref outputs "out")) (let* ((out (assoc-ref outputs "out"))
(se (assoc-ref outputs "send-email"))
(svn (assoc-ref outputs "svn")) (svn (assoc-ref outputs "svn"))
(gui (assoc-ref outputs "gui")) (gui (assoc-ref outputs "gui"))
(gitk (string-append out "/bin/gitk")) (gitk (string-append out "/bin/gitk"))
@ -172,20 +200,23 @@ (define-public git
(git-gui* (string-append gui "/libexec/git-core/git-gui")) (git-gui* (string-append gui "/libexec/git-core/git-gui"))
(git-cit (string-append out "/libexec/git-core/git-citool")) (git-cit (string-append out "/libexec/git-core/git-citool"))
(git-cit* (string-append gui "/libexec/git-core/git-citool")) (git-cit* (string-append gui "/libexec/git-core/git-citool"))
(git-se (string-append out "/libexec/git-core/git-send-email"))
(git-se* (string-append se "/libexec/git-core/git-send-email"))
(git-svn (string-append out "/libexec/git-core/git-svn")) (git-svn (string-append out "/libexec/git-core/git-svn"))
(git-svn* (string-append svn "/libexec/git-core/git-svn")) (git-svn* (string-append svn "/libexec/git-core/git-svn"))
(git-sm (string-append out (git-sm (string-append out
"/libexec/git-core/git-submodule"))) "/libexec/git-core/git-submodule")))
(mkdir-p (string-append gui "/bin")) (mkdir-p (string-append gui "/bin"))
(mkdir-p (string-append gui "/libexec/git-core")) (mkdir-p (string-append gui "/libexec/git-core"))
(mkdir-p (string-append se "/libexec/git-core"))
(mkdir-p (string-append svn "/libexec/git-core")) (mkdir-p (string-append svn "/libexec/git-core"))
(for-each (lambda (old new) (for-each (lambda (old new)
(copy-file old new) (copy-file old new)
(delete-file old) (delete-file old)
(chmod new #o555)) (chmod new #o555))
(list gitk git-gui git-cit git-svn) (list gitk git-gui git-cit git-se git-svn)
(list gitk* git-gui* git-cit* git-svn*)) (list gitk* git-gui* git-cit* git-se* git-svn*))
;; Tell 'git-svn' where Subversion is. ;; Tell 'git-svn' where Subversion is.
(wrap-program git-svn* (wrap-program git-svn*
@ -202,6 +233,18 @@ (define-public git
(,(string-append (assoc-ref inputs "subversion") (,(string-append (assoc-ref inputs "subversion")
"/lib")))) "/lib"))))
;; Tell 'git-send-email' where perl modules are.
(wrap-program git-se*
`("PERL5LIB" ":" prefix
,(map (lambda (o) (string-append o "/lib/perl5/site_perl"))
(delete-duplicates
(list
,@(package-propagated-input-refs
'inputs
`(,perl-authen-sasl
,perl-net-smtp-ssl
,perl-io-socket-ssl)))))))
;; Tell 'git-submodule' where Perl is. ;; Tell 'git-submodule' where Perl is.
(wrap-program git-sm (wrap-program git-sm
`("PATH" ":" prefix `("PATH" ":" prefix