~ruther/guix-local

f6526eb330c6be9c20cf9486b59d7f9ea84ffda3 — Ludovic Courtès 11 years ago 1b366ee
guix build: Add '--max-jobs' option.

Suggested by Deck Pickard <deck.r.pickard@gmail.com>.

* guix/scripts/build.scm (show-build-options-help): Document
  --max-jobs.
  (set-build-options-from-command-line): Pass #:max-build-jobs.
  (%standard-build-options): Add --max-jobs.
* doc/guix.texi (Invoking guix-daemon): Document the meaning of
  '--max-jobs 0'.
  (Invoking guix build): Document --max-jobs, with a reference to
  "Invoking guix-daemon'.
2 files changed, 22 insertions(+), 3 deletions(-)

M doc/guix.texi
M guix/scripts/build.scm
M doc/guix.texi => doc/guix.texi +9 -1
@@ 596,7 596,9 @@ parallelism---for instance, by running @code{make -j$NIX_BUILD_CORES}.
@item --max-jobs=@var{n}
@itemx -M @var{n}
Allow at most @var{n} build jobs in parallel.  The default value is
@code{1}.
@code{1}.  Setting it to @code{0} means that no builds will be performed
locally; instead, the daemon will offload builds (@pxref{Daemon Offload
Setup}), or simply fail.

@item --debug
Produce debugging output.


@@ 2765,6 2767,12 @@ may be helpful when debugging setup issues with the build daemon.
Allow the use of up to @var{n} CPU cores for the build.  The special
value @code{0} means to use as many CPU cores as available.

@item --max-jobs=@var{n}
@itemx -M @var{n}
Allow at most @var{n} build jobs in parallel.  @xref{Invoking
guix-daemon, @code{--max-jobs}}, for details about this option and the
equivalent @command{guix-daemon} option.

@end table

Behind the scenes, @command{guix build} is essentially an interface to

M guix/scripts/build.scm => guix/scripts/build.scm +13 -2
@@ 119,7 119,9 @@ options handled by 'set-build-options-from-command-line', and listed in
  (display (_ "
      --verbosity=LEVEL  use the given verbosity LEVEL"))
  (display (_ "
  -c, --cores=N          allow the use of up to N CPU cores for the build")))
  -c, --cores=N          allow the use of up to N CPU cores for the build"))
  (display (_ "
  -M, --max-jobs=N       allow at most N build jobs")))

(define (set-build-options-from-command-line store opts)
  "Given OPTS, an alist as returned by 'args-fold' given


@@ 128,6 130,7 @@ options handled by 'set-build-options-from-command-line', and listed in
  (set-build-options store
                     #:keep-failed? (assoc-ref opts 'keep-failed?)
                     #:build-cores (or (assoc-ref opts 'cores) 0)
                     #:max-build-jobs (or (assoc-ref opts 'max-jobs) 1)
                     #:fallback? (assoc-ref opts 'fallback?)
                     #:use-substitutes? (assoc-ref opts 'substitutes?)
                     #:use-build-hook? (assoc-ref opts 'build-hook?)


@@ 192,7 195,15 @@ options handled by 'set-build-options-from-command-line', and listed in
                  (let ((c (false-if-exception (string->number arg))))
                    (if c
                        (apply values (alist-cons 'cores c result) rest)
                        (leave (_ "~a: not a number~%") arg)))))))
                        (leave (_ "not a number: '~a' option argument: ~a~%")
                               name arg)))))
        (option '(#\M "max-jobs") #t #f
                (lambda (opt name arg result . rest)
                  (let ((c (false-if-exception (string->number arg))))
                    (if c
                        (apply values (alist-cons 'max-jobs c result) rest)
                        (leave (_ "not a number: '~a' option argument: ~a~%")
                               name arg)))))))


;;;