diff options
-rw-r--r-- | gnu/packages/version-control.scm | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 71171e6931..15e6fb6eb3 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -60,7 +60,9 @@ #:use-module (gnu packages compression) #:use-module (gnu packages swig) #: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 (package @@ -97,6 +99,23 @@ changes to project files over time. It supports both a distributed workflow as well as the classic centralized workflow.") (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 ;; Keep in sync with 'git-manpages'! (package @@ -124,10 +143,16 @@ as well as the classic centralized workflow.") ;; For 'git-svn'. ("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'. ("tcl" ,tcl) ("tk" ,tk))) (outputs '("out" ; the core + "send-email" ; for git-send-email "svn" ; git-svn "gui")) ; gitk, git gui (arguments @@ -141,6 +166,8 @@ as well as the classic centralized workflow.") (assoc-ref %build-inputs "tk") "/bin/wish8.6")) ; XXX + #:modules ((srfi srfi-1) + ,@%gnu-build-system-modules) #:phases (alist-cons-after 'configure 'patch-makefile-shebangs @@ -164,6 +191,7 @@ as well as the classic centralized workflow.") (lambda* (#:key inputs outputs #:allow-other-keys) ;; Split the binaries to the various outputs. (let* ((out (assoc-ref outputs "out")) + (se (assoc-ref outputs "send-email")) (svn (assoc-ref outputs "svn")) (gui (assoc-ref outputs "gui")) (gitk (string-append out "/bin/gitk")) @@ -172,20 +200,23 @@ as well as the classic centralized workflow.") (git-gui* (string-append gui "/libexec/git-core/git-gui")) (git-cit (string-append out "/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 svn "/libexec/git-core/git-svn")) (git-sm (string-append out "/libexec/git-core/git-submodule"))) (mkdir-p (string-append gui "/bin")) (mkdir-p (string-append gui "/libexec/git-core")) + (mkdir-p (string-append se "/libexec/git-core")) (mkdir-p (string-append svn "/libexec/git-core")) (for-each (lambda (old new) (copy-file old new) (delete-file old) (chmod new #o555)) - (list gitk git-gui git-cit git-svn) - (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-se* git-svn*)) ;; Tell 'git-svn' where Subversion is. (wrap-program git-svn* @@ -202,6 +233,18 @@ as well as the classic centralized workflow.") (,(string-append (assoc-ref inputs "subversion") "/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. (wrap-program git-sm `("PATH" ":" prefix |