Browse Source

guix build: Allow directories to be passed to --with-source.

* guix/scripts/build.scm (package-with-source)[tarball-base-name]: Gracefully
  handle file names that lack an extension.
  Pass #:recursive? #t to 'download-to-store'.
* guix/download.scm (download-to-store): Add #:recursive? parameter and pass
  it to 'add-to-store'.
* doc/guix.texi (Invoking guix build): Add an example of --with-source with a
  directory.
gn-latest-20200428
Ludovic Courtès 6 years ago
parent
commit
a43b55f1a6
  1. 7
      doc/guix.texi
  2. 9
      guix/download.scm
  3. 13
      guix/scripts/build.scm

7
doc/guix.texi

@ -3438,6 +3438,13 @@ candidates:
guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
@end example
@dots{} or to build from a checkout in a pristine environment:
@example
$ git clone git://git.sv.gnu.org/guix.git
$ guix build guix --with-source=./guix
@end example
@item --no-grafts
Do not ``graft'' packages. In practice, this means that package updates
available as grafts are not applied. @xref{Security Updates}, for more

9
guix/download.scm

@ -282,14 +282,15 @@ in the store."
)))))
(define* (download-to-store store url #:optional (name (basename url))
#:key (log (current-error-port)))
#:key (log (current-error-port)) recursive?)
"Download from URL to STORE, either under NAME or URL's basename if
omitted. Write progress reports to LOG."
omitted. Write progress reports to LOG. RECURSIVE? has the same effect as
the same-named parameter of 'add-to-store'."
(define uri
(string->uri url))
(if (or (not uri) (memq (uri-scheme uri) '(file #f)))
(add-to-store store name #f "sha256"
(add-to-store store name recursive? "sha256"
(if uri (uri-path uri) url))
(call-with-temporary-output-file
(lambda (temp port)
@ -298,6 +299,6 @@ omitted. Write progress reports to LOG."
(build:url-fetch url temp #:mirrors %mirrors))))
(close port)
(and result
(add-to-store store name #f "sha256" temp)))))))
(add-to-store store name recursive? "sha256" temp)))))))
;;; download.scm ends here

13
guix/scripts/build.scm

@ -77,19 +77,26 @@ the new package's version number from URI."
;; Return the "base" of FILE-NAME, removing '.tar.gz' or similar
;; extensions.
;; TODO: Factorize.
(cond ((numeric-extension? file-name)
(cond ((not (file-extension file-name))
file-name)
((numeric-extension? file-name)
file-name)
((string=? (file-extension file-name) "tar")
(file-sans-extension file-name))
((file-extension file-name)
(tarball-base-name (file-sans-extension file-name)))
(else
(tarball-base-name (file-sans-extension file-name)))))
file-name)))
(let ((base (tarball-base-name (basename uri))))
(let-values (((name version)
(package-name->name+version base)))
(package (inherit p)
(version (or version (package-version p)))
(source (download-to-store store uri))))))
;; Use #:recursive? #t to allow for directories.
(source (download-to-store store uri
#:recursive? #t))))))
;;;

Loading…
Cancel
Save