diff options
Diffstat (limited to 'build-aux/compile-as-derivation.scm')
-rw-r--r-- | build-aux/compile-as-derivation.scm | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/build-aux/compile-as-derivation.scm b/build-aux/compile-as-derivation.scm new file mode 100644 index 0000000000..afb134a92a --- /dev/null +++ b/build-aux/compile-as-derivation.scm @@ -0,0 +1,53 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +;; Build Guix using Guix. + +(use-modules (srfi srfi-26)) + +;; Add ~/.config/guix/latest to the search path. +(add-to-load-path + (and=> (or (getenv "XDG_CONFIG_HOME") + (and=> (getenv "HOME") + (cut string-append <> "/.config"))) + (cut string-append <> "/guix/latest"))) + +(use-modules (guix) (guix ui) + (guix git-download) + (ice-9 match)) + +(match (command-line) + ((program source) + (with-error-handling + (with-store store + (let* ((script (string-append source "/build-aux/build-self.scm")) + (build (primitive-load script)) + (git? (git-predicate source))) + (run-with-store store + ;; TODO: Extract #:version and #:commit using Guile-Git. + (mlet* %store-monad ((source (interned-file source "guix-source" + #:select? git? + #:recursive? #t)) + (drv (build source))) + (mbegin %store-monad + (show-what-to-build* (list drv)) + (built-derivations (list drv)) + (with-monad %store-monad + (display (derivation->output-path drv)) + (newline) + (return drv)))))))))) |