diff --git a/Makefile.am b/Makefile.am index 381a615f2e..c2a17ea6a0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,6 +23,7 @@ MODULES = \ guix/derivations.scm \ guix/build-system.scm \ guix/build-system/gnu.scm \ + guix/build-system/trivial.scm \ guix/http.scm \ guix/store.scm \ guix/build/gnu-build-system.scm \ diff --git a/guix/build-system/trivial.scm b/guix/build-system/trivial.scm new file mode 100644 index 0000000000..1134ae988c --- /dev/null +++ b/guix/build-system/trivial.scm @@ -0,0 +1,39 @@ +;;; Guix --- Nix package management from Guile. -*- coding: utf-8 -*- +;;; Copyright (C) 2012 Ludovic Courtès +;;; +;;; This file is part of Guix. +;;; +;;; 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. +;;; +;;; 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 Guix. If not, see . + +(define-module (guix build-system trivial) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix derivations) + #:use-module (guix build-system) + #:export (trivial-build-system)) + +(define* (trivial-build store name source inputs + #:key outputs system builder (modules '())) + "Run build expression BUILDER, an expression, for SYSTEM. SOURCE is +ignored." + (build-expression->derivation store name system builder inputs + #:outputs outputs + #:modules modules)) + +(define trivial-build-system + (build-system (name 'trivial) + (description + "Trivial build system, to run arbitrary Scheme build expressions") + (build trivial-build) + (cross-build trivial-build))) diff --git a/guix/packages.scm b/guix/packages.scm index 1394f980f7..ea5302e60b 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -261,7 +261,7 @@ recursively." (cache package system (apply builder store (package-full-name package) - (package-source-derivation store source) + (and source (package-source-derivation store source)) inputs #:outputs outputs #:system system (if (procedure? args) diff --git a/tests/packages.scm b/tests/packages.scm index d804e0ce83..48a4a38fea 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -22,6 +22,7 @@ #:use-module (guix utils) #:use-module (guix derivations) #:use-module (guix packages) + #:use-module (guix build-system trivial) #:use-module (guix build-system gnu) #:use-module (distro) #:use-module (distro base) @@ -62,7 +63,24 @@ ("d" ,d) ("d/x" "something.drv")) (pk 'x (package-transitive-inputs e)))))) -(test-skip (if (not %store) 1 0)) +(test-skip (if (not %store) 2 0)) + +(test-assert "trivial" + (let* ((p (package (inherit (dummy-package "trivial")) + (build-system trivial-build-system) + (source #f) + (arguments + '(#:builder + (begin + (mkdir %output) + (call-with-output-file (string-append %output "/test") + (lambda (p) + (display '(hello guix) p)))))))) + (d (package-derivation %store p))) + (and (build-derivations %store (list d)) + (let ((p (pk 'drv d (derivation-path->output-path d)))) + (equal? '(hello guix) + (call-with-input-file (string-append p "/test") read)))))) (test-assert "GNU Hello" (and (package? hello)