diff options
Diffstat (limited to 'guix/build-system')
-rw-r--r-- | guix/build-system/cmake.scm | 124 | ||||
-rw-r--r-- | guix/build-system/gnu.scm | 27 | ||||
-rw-r--r-- | guix/build-system/perl.scm | 7 | ||||
-rw-r--r-- | guix/build-system/trivial.scm | 6 |
4 files changed, 157 insertions, 7 deletions
diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm new file mode 100644 index 0000000000..4e993f3961 --- /dev/null +++ b/guix/build-system/cmake.scm @@ -0,0 +1,124 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com> +;;; +;;; 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/>. + +(define-module (guix build-system cmake) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix derivations) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module (guix packages) + #:use-module (ice-9 match) + #:export (cmake-build + cmake-build-system)) + +;; Commentary: +;; +;; Standard build procedure for packages using CMake. This is implemented as an +;; extension of `gnu-build-system'. +;; +;; Code: + +(define* (cmake-build store name source inputs + #:key (guile #f) + (outputs '("out")) (configure-flags ''()) + (search-paths '()) + (make-flags ''()) + (patches ''()) (patch-flags ''("--batch" "-p1")) + (cmake (@ (gnu packages cmake) cmake)) + (out-of-source? #f) + (tests? #t) + (test-target "test") + (parallel-build? #t) (parallel-tests? #f) + (patch-shebangs? #t) + (strip-binaries? #t) + (strip-flags ''("--strip-debug")) + (strip-directories ''("lib" "lib64" "libexec" + "bin" "sbin")) + (phases '(@ (guix build cmake-build-system) + %standard-phases)) + (system (%current-system)) + (imported-modules '((guix build cmake-build-system) + (guix build gnu-build-system) + (guix build utils))) + (modules '((guix build cmake-build-system) + (guix build gnu-build-system) + (guix build utils)))) + "Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE +provides a 'CMakeLists.txt' file as its build system." + (define builder + `(begin + (use-modules ,@modules) + (cmake-build #:source ,(if (and source (derivation-path? source)) + (derivation-path->output-path source) + source) + #:system ,system + #:outputs %outputs + #:inputs %build-inputs + #:search-paths ',(map search-path-specification->sexp + search-paths) + #:patches ,patches + #:patch-flags ,patch-flags + #:phases ,phases + #:configure-flags ,configure-flags + #:make-flags ,make-flags + #:out-of-source? ,out-of-source? + #:tests? ,tests? + #:test-target ,test-target + #:parallel-build? ,parallel-build? + #:parallel-tests? ,parallel-tests? + #:patch-shebangs? ,patch-shebangs? + #:strip-binaries? ,strip-binaries? + #:strip-flags ,strip-flags + #:strip-directories ,strip-directories))) + + (define guile-for-build + (match guile + ((? package?) + (package-derivation store guile system)) + ((and (? string?) (? derivation-path?)) + guile) + (#f ; the default + (let* ((distro (resolve-interface '(gnu packages base))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system))))) + + (let ((cmake (package-derivation store cmake system))) + (build-expression->derivation store name system + builder + `(,@(if source + `(("source" ,source)) + '()) + ("cmake" ,cmake) + ,@inputs + + ;; Keep the standard inputs of + ;; `gnu-build-system'. + ,@(standard-inputs system)) + + #:modules imported-modules + #:outputs outputs + #:guile-for-build guile-for-build))) + +(define cmake-build-system + (build-system (name 'cmake) + (description "The standard CMake build system") + (build cmake-build))) + +;;; cmake.scm ends here diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm index 8049e7510f..d5ad1e3e01 100644 --- a/guix/build-system/gnu.scm +++ b/guix/build-system/gnu.scm @@ -159,11 +159,12 @@ System: GCC, GNU Make, Bash, Coreutils, etc." (define* (gnu-build store name source inputs #:key (guile #f) - (outputs '("out")) (configure-flags ''()) + (outputs '("out")) + (search-paths '()) + (configure-flags ''()) (make-flags ''()) (patches ''()) (patch-flags ''("--batch" "-p1")) (out-of-source? #f) - (path-exclusions ''()) (tests? #t) (test-target "check") (parallel-build? #t) (parallel-tests? #t) @@ -190,6 +191,21 @@ the builder's environment, from the host. Note that we distinguish between both, because for Guile's own modules like (ice-9 foo), we want to use GUILE's own version of it, rather than import the user's one, which could lead to gratuitous input divergence." + (define implicit-inputs + (and implicit-inputs? + (parameterize ((%store store)) + (standard-inputs system)))) + + (define implicit-search-paths + (if implicit-inputs? + (append-map (match-lambda + ((_ (? package? p) _ ...) + (package-native-search-paths p)) + (_ + '())) + implicit-inputs) + '())) + (define builder `(begin (use-modules ,@modules) @@ -199,13 +215,15 @@ which could lead to gratuitous input divergence." #:system ,system #:outputs %outputs #:inputs %build-inputs + #:search-paths ',(map search-path-specification->sexp + (append implicit-search-paths + search-paths)) #:patches ,patches #:patch-flags ,patch-flags #:phases ,phases #:configure-flags ,configure-flags #:make-flags ,make-flags #:out-of-source? ,out-of-source? - #:path-exclusions ,path-exclusions #:tests? ,tests? #:test-target ,test-target #:parallel-build? ,parallel-build? @@ -233,8 +251,7 @@ which could lead to gratuitous input divergence." '()) ,@inputs ,@(if implicit-inputs? - (parameterize ((%store store)) - (standard-inputs system)) + implicit-inputs '())) #:outputs outputs #:modules imported-modules diff --git a/guix/build-system/perl.scm b/guix/build-system/perl.scm index 537c29e799..c97698e225 100644 --- a/guix/build-system/perl.scm +++ b/guix/build-system/perl.scm @@ -38,6 +38,7 @@ (define* (perl-build store name source inputs #:key (perl (@ (gnu packages perl) perl)) + (search-paths '()) (tests? #t) (make-maker-flags ''()) (phases '(@ (guix build perl-build-system) @@ -53,6 +54,9 @@ (guix build utils)))) "Build SOURCE using PERL, and with INPUTS. This assumes that SOURCE provides a `Makefile.PL' file as its build system." + (define perl-search-paths + (package-native-search-paths perl)) + (define builder `(begin (use-modules ,@modules) @@ -60,6 +64,9 @@ provides a `Makefile.PL' file as its build system." #:source ,(if (and source (derivation-path? source)) (derivation-path->output-path source) source) + #:search-paths ',(map search-path-specification->sexp + (append perl-search-paths + search-paths)) #:make-maker-flags ,make-maker-flags #:system ,system #:test-target "test" diff --git a/guix/build-system/trivial.scm b/guix/build-system/trivial.scm index e5bbeaa91d..2eb15aa2e0 100644 --- a/guix/build-system/trivial.scm +++ b/guix/build-system/trivial.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,7 +26,9 @@ #:export (trivial-build-system)) (define* (trivial-build store name source inputs - #:key outputs guile system builder (modules '())) + #:key + outputs guile system builder (modules '()) + search-paths) "Run build expression BUILDER, an expression, for SYSTEM. SOURCE is ignored." (define guile-for-build |