summaryrefslogtreecommitdiff
path: root/guix/build-system
diff options
context:
space:
mode:
Diffstat (limited to 'guix/build-system')
-rw-r--r--guix/build-system/cmake.scm17
-rw-r--r--guix/build-system/glib-or-gtk.scm17
-rw-r--r--guix/build-system/gnu.scm32
-rw-r--r--guix/build-system/haskell.scm140
-rw-r--r--guix/build-system/perl.scm15
-rw-r--r--guix/build-system/python.scm13
-rw-r--r--guix/build-system/ruby.scm15
-rw-r--r--guix/build-system/waf.scm13
8 files changed, 222 insertions, 40 deletions
diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm
index 0425e9fb39..25ac262d5d 100644
--- a/guix/build-system/cmake.scm
+++ b/guix/build-system/cmake.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;;
;;; This file is part of GNU Guix.
@@ -21,11 +21,13 @@
#:use-module (guix store)
#:use-module (guix utils)
#:use-module (guix derivations)
+ #:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix build-system gnu)
#:use-module (guix packages)
#:use-module (ice-9 match)
- #:export (cmake-build
+ #:export (%cmake-build-system-modules
+ cmake-build
cmake-build-system))
;; Commentary:
@@ -35,6 +37,11 @@
;;
;; Code:
+(define %cmake-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build cmake-build-system)
+ ,@%gnu-build-system-modules))
+
(define (default-cmake)
"Return the default CMake package."
@@ -78,6 +85,7 @@
(tests? #t)
(test-target "test")
(parallel-build? #t) (parallel-tests? #f)
+ (validate-runpath? #t)
(patch-shebangs? #t)
(strip-binaries? #t)
(strip-flags ''("--strip-debug"))
@@ -86,9 +94,7 @@
(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)))
+ (imported-modules %cmake-build-system-modules)
(modules '((guix build cmake-build-system)
(guix build utils))))
"Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE
@@ -117,6 +123,7 @@ provides a 'CMakeLists.txt' file as its build system."
#:test-target ,test-target
#:parallel-build? ,parallel-build?
#:parallel-tests? ,parallel-tests?
+ #:validate-runpath? ,validate-runpath?
#:patch-shebangs? ,patch-shebangs?
#:strip-binaries? ,strip-binaries?
#:strip-flags ,strip-flags
diff --git a/guix/build-system/glib-or-gtk.scm b/guix/build-system/glib-or-gtk.scm
index 7a90587136..a1f0a9b8a4 100644
--- a/guix/build-system/glib-or-gtk.scm
+++ b/guix/build-system/glib-or-gtk.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
;;;
@@ -22,11 +22,13 @@
#:use-module (guix store)
#:use-module (guix utils)
#:use-module (guix derivations)
+ #:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix build-system gnu)
#:use-module (guix packages)
#:use-module (ice-9 match)
- #:export (glib-or-gtk-build
+ #:export (%glib-or-gtk-build-system-modules
+ glib-or-gtk-build
glib-or-gtk-build-system))
;; Commentary:
@@ -67,11 +69,10 @@
'((guix build glib-or-gtk-build-system)
(guix build utils)))
-(define %default-imported-modules
+(define %glib-or-gtk-build-system-modules
;; Build-side modules imported and used by default.
- '((guix build gnu-build-system)
- (guix build glib-or-gtk-build-system)
- (guix build utils)))
+ `((guix build glib-or-gtk-build-system)
+ ,@%gnu-build-system-modules))
(define (default-glib)
"Return the default glib package from which we use
@@ -127,6 +128,7 @@
(test-target "check")
(parallel-build? #t)
(parallel-tests? #t)
+ (validate-runpath? #t)
(patch-shebangs? #t)
(strip-binaries? #t)
(strip-flags ''("--strip-debug"))
@@ -136,7 +138,7 @@
%standard-phases))
(glib-or-gtk-wrap-excluded-outputs ''())
(system (%current-system))
- (imported-modules %default-imported-modules)
+ (imported-modules %glib-or-gtk-build-system-modules)
(modules %default-modules)
allowed-references)
"Build SOURCE with INPUTS. See GNU-BUILD for more details."
@@ -175,6 +177,7 @@
#:test-target ,test-target
#:parallel-build? ,parallel-build?
#:parallel-tests? ,parallel-tests?
+ #:validate-runpath? ,validate-runpath?
#:patch-shebangs? ,patch-shebangs?
#:strip-binaries? ,strip-binaries?
#:strip-flags ,strip-flags
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index c91ad2ee0c..da664e5422 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -20,11 +20,13 @@
#:use-module (guix store)
#:use-module (guix utils)
#:use-module (guix derivations)
+ #:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix packages)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
- #:export (gnu-build
+ #:export (%gnu-build-system-modules
+ gnu-build
gnu-build-system
standard-packages
package-with-explicit-inputs
@@ -41,9 +43,16 @@
;;
;; Code:
-(define %default-modules
+(define %gnu-build-system-modules
;; Build-side modules imported and used by default.
'((guix build gnu-build-system)
+ (guix build utils)
+ (guix build gremlin)
+ (guix elf)))
+
+(define %default-modules
+ ;; Modules in scope in the build-side environment.
+ '((guix build gnu-build-system)
(guix build utils)))
(define* (package-with-explicit-inputs p inputs
@@ -182,7 +191,7 @@ runs `make distcheck' and whose result is one or more source tarballs."
(let* ((args (default-keyword-arguments (package-arguments p)
`(#:phases #f
#:modules ,%default-modules
- #:imported-modules ,%default-modules))))
+ #:imported-modules ,%gnu-build-system-modules))))
(substitute-keyword-arguments args
((#:modules modules)
`((guix build gnu-dist)
@@ -196,9 +205,10 @@ runs `make distcheck' and whose result is one or more source tarballs."
;; Add autotools & co. as inputs.
(let ((ref (lambda (module var)
(module-ref (resolve-interface module) var))))
- `(("autoconf" ,(ref '(gnu packages autotools) 'autoconf))
+ `(,@(package-native-inputs p)
+ ("autoconf" ,(ref '(gnu packages autotools) 'autoconf))
("automake" ,(ref '(gnu packages autotools) 'automake))
- ("libtool" ,(ref '(gnu packages autotools) 'libtool) "bin")
+ ("libtool" ,(ref '(gnu packages autotools) 'libtool))
("gettext" ,(ref '(gnu packages gettext) 'gnu-gettext))
("texinfo" ,(ref '(gnu packages texinfo) 'texinfo))))))))
@@ -277,10 +287,11 @@ standard packages used as implicit inputs of the GNU build system."
(strip-flags ''("--strip-debug"))
(strip-directories ''("lib" "lib64" "libexec"
"bin" "sbin"))
+ (validate-runpath? #t)
(phases '%standard-phases)
(locale "en_US.UTF-8")
(system (%current-system))
- (imported-modules %default-modules)
+ (imported-modules %gnu-build-system-modules)
(modules %default-modules)
(substitutable? #t)
allowed-references)
@@ -339,6 +350,7 @@ are allowed to refer to."
#:parallel-tests? ,parallel-tests?
#:patch-shebangs? ,patch-shebangs?
#:strip-binaries? ,strip-binaries?
+ #:validate-runpath? ,validate-runpath?
#:strip-flags ,strip-flags
#:strip-directories ,strip-directories)))
@@ -411,13 +423,12 @@ is one of `host' or `target'."
(strip-flags ''("--strip-debug"))
(strip-directories ''("lib" "lib64" "libexec"
"bin" "sbin"))
+ (validate-runpath? #t)
(phases '%standard-phases)
(locale "en_US.UTF-8")
(system (%current-system))
- (imported-modules '((guix build gnu-build-system)
- (guix build utils)))
- (modules '((guix build gnu-build-system)
- (guix build utils)))
+ (imported-modules %gnu-build-system-modules)
+ (modules %default-modules)
(substitutable? #t)
allowed-references)
"Cross-build NAME for TARGET, where TARGET is a GNU triplet. INPUTS are
@@ -486,6 +497,7 @@ platform."
#:parallel-tests? ,parallel-tests?
#:patch-shebangs? ,patch-shebangs?
#:strip-binaries? ,strip-binaries?
+ #:validate-runpath? ,validate-runpath?
#:strip-flags ,strip-flags
#:strip-directories ,strip-directories))))
diff --git a/guix/build-system/haskell.scm b/guix/build-system/haskell.scm
new file mode 100644
index 0000000000..1cb734631c
--- /dev/null
+++ b/guix/build-system/haskell.scm
@@ -0,0 +1,140 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
+;;;
+;;; 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 haskell)
+ #:use-module (guix store)
+ #:use-module (guix utils)
+ #:use-module (guix packages)
+ #:use-module (guix derivations)
+ #:use-module (guix search-paths)
+ #:use-module (guix build-system)
+ #:use-module (guix build-system gnu)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-26)
+ #:export (%haskell-build-system-modules
+ haskell-build
+ haskell-build-system))
+
+;; Commentary:
+;;
+;; Standard build procedure for Haskell packages using 'Setup.hs'. This is
+;; implemented as an extension of 'gnu-build-system'.
+;;
+;; Code:
+
+(define %haskell-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build haskell-build-system)
+ ,@%gnu-build-system-modules))
+
+(define (default-haskell)
+ "Return the default Haskell package."
+ ;; Lazily resolve the binding to avoid a circular dependency.
+ (let ((haskell (resolve-interface '(gnu packages haskell))))
+ (module-ref haskell 'ghc)))
+
+(define* (lower name
+ #:key source inputs native-inputs outputs system target
+ (haskell (default-haskell))
+ #:allow-other-keys
+ #:rest arguments)
+ "Return a bag for NAME."
+ (define private-keywords
+ '(#:target #:haskell #:inputs #:native-inputs))
+
+ (and (not target) ;XXX: no cross-compilation
+ (bag
+ (name name)
+ (system system)
+ (host-inputs `(,@(if source
+ `(("source" ,source))
+ '())
+ ,@inputs
+
+ ;; Keep the standard inputs of 'gnu-build-system'.
+ ,@(standard-packages)))
+ (build-inputs `(("haskell" ,haskell)
+ ,@native-inputs))
+ (outputs outputs)
+ (build haskell-build)
+ (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (haskell-build store name inputs
+ #:key source
+ (haddock? #t)
+ (haddock-flags ''())
+ (tests? #t)
+ (test-target "test")
+ (configure-flags ''())
+ (phases '(@ (guix build haskell-build-system)
+ %standard-phases))
+ (outputs '("out"))
+ (search-paths '())
+ (system (%current-system))
+ (guile #f)
+ (imported-modules %haskell-build-system-modules)
+ (modules '((guix build haskell-build-system)
+ (guix build utils))))
+ "Build SOURCE using HASKELL, and with INPUTS. This assumes that SOURCE
+provides a 'Setup.hs' file as its build system."
+ (define builder
+ `(begin
+ (use-modules ,@modules)
+ (haskell-build #:name ,name
+ #:source ,(match (assoc-ref inputs "source")
+ (((? derivation? source))
+ (derivation->output-path source))
+ ((source)
+ source)
+ (source
+ source))
+ #:configure-flags ,configure-flags
+ #:haddock-flags ,haddock-flags
+ #:system ,system
+ #:test-target ,test-target
+ #:tests? ,tests?
+ #:haddock? ,haddock?
+ #:phases ,phases
+ #:outputs %outputs
+ #:search-paths ',(map search-path-specification->sexp
+ search-paths)
+ #:inputs %build-inputs)))
+
+ (define guile-for-build
+ (match guile
+ ((? package?)
+ (package-derivation store guile system #:graft? #f))
+ (#f ; the default
+ (let* ((distro (resolve-interface '(gnu packages commencement)))
+ (guile (module-ref distro 'guile-final)))
+ (package-derivation store guile system #:graft? #f)))))
+
+ (build-expression->derivation store name builder
+ #:inputs inputs
+ #:system system
+ #:modules imported-modules
+ #:outputs outputs
+ #:guile-for-build guile-for-build))
+
+(define haskell-build-system
+ (build-system
+ (name 'haskell)
+ (description "The standard Haskell build system")
+ (lower lower)))
+
+;;; haskell.scm ends here
diff --git a/guix/build-system/perl.scm b/guix/build-system/perl.scm
index e0f86438a8..06af1dd20e 100644
--- a/guix/build-system/perl.scm
+++ b/guix/build-system/perl.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -20,11 +20,13 @@
#:use-module (guix store)
#:use-module (guix utils)
#:use-module (guix derivations)
+ #:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix build-system gnu)
#:use-module (guix packages)
#:use-module (ice-9 match)
- #:export (perl-build
+ #:export (%perl-build-system-modules
+ perl-build
perl-build-system))
;; Commentary:
@@ -35,6 +37,11 @@
;;
;; Code:
+(define %perl-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build perl-build-system)
+ ,@%gnu-build-system-modules))
+
(define (default-perl)
"Return the default Perl package."
@@ -83,9 +90,7 @@
(outputs '("out"))
(system (%current-system))
(guile #f)
- (imported-modules '((guix build perl-build-system)
- (guix build gnu-build-system)
- (guix build utils)))
+ (imported-modules %perl-build-system-modules)
(modules '((guix build perl-build-system)
(guix build utils))))
"Build SOURCE using PERL, and with INPUTS. This assumes that SOURCE
diff --git a/guix/build-system/python.scm b/guix/build-system/python.scm
index 37108650d0..e9fffcc62f 100644
--- a/guix/build-system/python.scm
+++ b/guix/build-system/python.scm
@@ -23,11 +23,13 @@
#:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix derivations)
+ #:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix build-system gnu)
#:use-module (ice-9 match)
#:use-module (srfi srfi-26)
- #:export (package-with-python2
+ #:export (%python-build-system-modules
+ package-with-python2
python-build
python-build-system))
@@ -38,6 +40,11 @@
;;
;; Code:
+(define %python-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build python-build-system)
+ ,@%gnu-build-system-modules))
+
(define (default-python)
"Return the default Python package."
;; Lazily resolve the binding to avoid a circular dependency.
@@ -132,9 +139,7 @@ prepended to the name."
(search-paths '())
(system (%current-system))
(guile #f)
- (imported-modules '((guix build python-build-system)
- (guix build gnu-build-system)
- (guix build utils)))
+ (imported-modules %python-build-system-modules)
(modules '((guix build python-build-system)
(guix build utils))))
"Build SOURCE using PYTHON, and with INPUTS. This assumes that SOURCE
diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm
index 08301ec609..e4fda30cf3 100644
--- a/guix/build-system/ruby.scm
+++ b/guix/build-system/ruby.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 David Thompson <davet@gnu.org>
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,12 +22,19 @@
#:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix derivations)
+ #:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix build-system gnu)
#:use-module (ice-9 match)
- #:export (ruby-build
+ #:export (%ruby-build-system-modules
+ ruby-build
ruby-build-system))
+(define %ruby-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build ruby-build-system)
+ ,@%gnu-build-system-modules))
+
(define (default-ruby)
"Return the default Ruby package."
;; Lazily resolve the binding to avoid a circular dependency.
@@ -72,9 +79,7 @@
(search-paths '())
(system (%current-system))
(guile #f)
- (imported-modules '((guix build ruby-build-system)
- (guix build gnu-build-system)
- (guix build utils)))
+ (imported-modules %ruby-build-system-modules)
(modules '((guix build ruby-build-system)
(guix build utils))))
"Build SOURCE using RUBY and INPUTS."
diff --git a/guix/build-system/waf.scm b/guix/build-system/waf.scm
index 494cb957ac..044d2a0829 100644
--- a/guix/build-system/waf.scm
+++ b/guix/build-system/waf.scm
@@ -21,13 +21,15 @@
#:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix derivations)
+ #:use-module (guix search-paths)
#:use-module (guix build-system)
#:use-module (guix build-system gnu)
#:use-module ((guix build-system python)
#:select (default-python default-python2))
#:use-module (ice-9 match)
#:use-module (srfi srfi-26)
- #:export (waf-build
+ #:export (%waf-build-system-modules
+ waf-build
waf-build-system))
;; Commentary:
@@ -38,6 +40,11 @@
;;
;; Code:
+(define %waf-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build waf-build-system)
+ ,@%gnu-build-system-modules))
+
(define* (lower name
#:key source inputs native-inputs outputs system target
(python (default-python))
@@ -75,9 +82,7 @@
(search-paths '())
(system (%current-system))
(guile #f)
- (imported-modules '((guix build waf-build-system)
- (guix build gnu-build-system)
- (guix build utils)))
+ (imported-modules %waf-build-system-modules)
(modules '((guix build waf-build-system)
(guix build utils))))
"Build SOURCE with INPUTS. This assumes that SOURCE provides a 'waf' file