unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] Add 'waf-build-system'.
@ 2015-01-28 21:48 Ricardo Wurmus
  2015-02-01 21:08 ` Ludovic Courtès
  0 siblings, 1 reply; 6+ messages in thread
From: Ricardo Wurmus @ 2015-01-28 21:48 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 650 bytes --]

Hi Guix,

attached is a patch to add the waf build system.  Although waf is called
a meta build system, most applications that I've encountered so far (all
related to audio) have the standard build phases as the GNU build
system.

The waf build system is embarrassingly similar to the Python build
system.  Essentially, the phases are run by executing

    python waf $PHASE

instead of

    python setup.py $PHASE

Unlike the Python build system, however, there is a configure phase, and
not everything important happens during the install phase.

I'm using the waf-build-system for packaging LV2, Ardour, JACK2, and
related libraries.

~~ Ricardo


[-- Attachment #2: 0001-Add-waf-build-system.patch --]
[-- Type: text/x-patch, Size: 9869 bytes --]

From adc52a74fb12943fd77c97bf75a2092e839f9024 Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <rekado@elephly.net>
Date: Wed, 28 Jan 2015 22:39:03 +0100
Subject: [PATCH] Add 'waf-build-system'.

* guix/build-system/waf.scm, guix/build/waf-build-system.scm: New files.
* Makefile.am (MODULES): Add them.
---
 Makefile.am                     |   2 +
 guix/build-system/waf.scm       | 128 ++++++++++++++++++++++++++++++++++++++++
 guix/build/waf-build-system.scm |  86 +++++++++++++++++++++++++++
 3 files changed, 216 insertions(+)
 create mode 100644 guix/build-system/waf.scm
 create mode 100644 guix/build/waf-build-system.scm

diff --git a/Makefile.am b/Makefile.am
index 67367d6..6a4a09b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -53,6 +53,7 @@ MODULES =					\
   guix/build-system/gnu.scm			\
   guix/build-system/perl.scm			\
   guix/build-system/python.scm			\
+  guix/build-system/waf.scm			\
   guix/build-system/ruby.scm			\
   guix/build-system/trivial.scm			\
   guix/ftp-client.scm				\
@@ -71,6 +72,7 @@ MODULES =					\
   guix/build/perl-build-system.scm		\
   guix/build/python-build-system.scm		\
   guix/build/ruby-build-system.scm		\
+  guix/build/waf-build-system.scm		\
   guix/build/store-copy.scm			\
   guix/build/utils.scm				\
   guix/build/union.scm				\
diff --git a/guix/build-system/waf.scm b/guix/build-system/waf.scm
new file mode 100644
index 0000000..494cb95
--- /dev/null
+++ b/guix/build-system/waf.scm
@@ -0,0 +1,128 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; 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 waf)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix derivations)
+  #: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
+            waf-build-system))
+
+;; Commentary:
+;;
+;; Standard build procedure for applications using 'waf'.  This is very
+;; similar to the 'python-build-system' and is implemented as an extension of
+;; 'gnu-build-system'.
+;;
+;; Code:
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                (python (default-python))
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME."
+  (define private-keywords
+    '(#:source #:target #:python #: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 `(("python" ,python)
+                         ,@native-inputs))
+         (outputs outputs)
+         (build waf-build) ; only change compared to 'lower' in python.scm
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (waf-build store name inputs
+                       #:key
+                       (tests? #t)
+                       (test-target "check")
+                       (configure-flags ''())
+                       (phases '(@ (guix build waf-build-system)
+                                   %standard-phases))
+                       (outputs '("out"))
+                       (search-paths '())
+                       (system (%current-system))
+                       (guile #f)
+                       (imported-modules '((guix build waf-build-system)
+                                           (guix build gnu-build-system)
+                                           (guix build utils)))
+                       (modules '((guix build waf-build-system)
+                                  (guix build utils))))
+  "Build SOURCE with INPUTS.  This assumes that SOURCE provides a 'waf' file
+as its build system."
+  (define builder
+    `(begin
+       (use-modules ,@modules)
+       (waf-build #:name ,name
+                  #:source ,(match (assoc-ref inputs "source")
+                              (((? derivation? source))
+                               (derivation->output-path source))
+                              ((source)
+                               source)
+                              (source
+                               source))
+                  #:configure-flags ,configure-flags
+                  #:system ,system
+                  #:test-target ,test-target
+                  #:tests? ,tests?
+                  #: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 waf-build-system
+  (build-system
+    (name 'waf)
+    (description "The standard waf build system")
+    (lower lower)))
+
+;;; waf.scm ends here
diff --git a/guix/build/waf-build-system.scm b/guix/build/waf-build-system.scm
new file mode 100644
index 0000000..e64b51a
--- /dev/null
+++ b/guix/build/waf-build-system.scm
@@ -0,0 +1,86 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; 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 waf-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 ftw)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (%standard-phases
+            waf-build))
+
+;; Commentary:
+;;
+;; Builder-side code of the standard waf build procedure.
+;;
+;; Code:
+
+
+(define (call-waf command params)
+  (if (file-exists? "waf")
+      (begin
+         (format #t "running \"python waf\" with command ~s and parameters ~s~%"
+                command params)
+         (zero? (apply system* "python" "waf" command params)))
+      (error "no waf found")))
+
+(define* (configure #:key target native-inputs inputs outputs
+                    (configure-flags '())
+                    #:allow-other-keys)
+  "Build a given waf application."
+  (let* ((prefix (assoc-ref outputs "out"))
+         (flags  `(,(string-append "--prefix=" prefix)
+                   ,@configure-flags)))
+    (call-waf "configure" flags)))
+
+(define* (build #:rest empty)
+  "Build a given waf application."
+  (call-waf "build" '()))
+
+(define* (check #:key tests? test-target #:allow-other-keys)
+  "Run the test suite of a given waf application."
+  (if tests?
+    (call-waf test-target '())
+    #t))
+
+(define* (install #:key outputs inputs (configure-flags '())
+                  #:allow-other-keys)
+  "Install a given waf application."
+  (let* ((out (assoc-ref outputs "out"))
+         (params (append (list (string-append "--prefix=" out))
+                         configure-flags)))
+        (call-waf "install" params)))
+
+(define %standard-phases
+  (alist-replace
+   'configure configure
+   (alist-replace
+    'build build
+    (alist-replace
+     'check check
+     (alist-replace 'install install
+                    gnu:%standard-phases)))))
+
+(define* (waf-build #:key inputs (phases %standard-phases)
+                       #:allow-other-keys #:rest args)
+  "Build the given waf application, applying all of PHASES in order."
+  (apply gnu:gnu-build #:inputs inputs #:phases phases args))
+
+;;; waf-build-system.scm ends here
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add 'waf-build-system'.
  2015-01-28 21:48 [PATCH] Add 'waf-build-system' Ricardo Wurmus
@ 2015-02-01 21:08 ` Ludovic Courtès
  2015-02-03 22:46   ` rekado
  0 siblings, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2015-02-01 21:08 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

Ricardo Wurmus <rekado@elephly.net> skribis:

> attached is a patch to add the waf build system.  Although waf is called
> a meta build system, most applications that I've encountered so far (all
> related to audio) have the standard build phases as the GNU build
> system.
>
> The waf build system is embarrassingly similar to the Python build
> system.  Essentially, the phases are run by executing
>
>     python waf $PHASE
>
> instead of
>
>     python setup.py $PHASE
>
> Unlike the Python build system, however, there is a configure phase, and
> not everything important happens during the install phase.

OK.  Did you find it more appropriate to extend ‘gnu-build-system’
rather than ‘python-build-system’?

> From adc52a74fb12943fd77c97bf75a2092e839f9024 Mon Sep 17 00:00:00 2001
> From: Ricardo Wurmus <rekado@elephly.net>
> Date: Wed, 28 Jan 2015 22:39:03 +0100
> Subject: [PATCH] Add 'waf-build-system'.
>
> * guix/build-system/waf.scm, guix/build/waf-build-system.scm: New files.
> * Makefile.am (MODULES): Add them.

Could you add a few lines to guix.texi, under “Build Systems”?  Other
than that this looks good to me.

Thank you,
Ludo’.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add 'waf-build-system'.
  2015-02-01 21:08 ` Ludovic Courtès
@ 2015-02-03 22:46   ` rekado
  2015-02-04 22:04     ` Ludovic Courtès
  2015-02-05 21:53     ` Ricardo Wurmus
  0 siblings, 2 replies; 6+ messages in thread
From: rekado @ 2015-02-03 22:46 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel


Ludovic Courtès writes:

> Ricardo Wurmus <rekado@elephly.net> skribis:
>
>> Unlike the Python build system, however, there is a configure phase, and
>> not everything important happens during the install phase.
>
> OK.  Did you find it more appropriate to extend ‘gnu-build-system’
> rather than ‘python-build-system’?

The way I see it the waf-build-system is a descendant of the
gnu-build-system in that it has the same phases; it only uses a
different tool (namely the waf script).  The python-build-system on the
other hand concentrates everything in the install "phase".

The waf-build-system looks similar to the python-build-system only
because the waf script needs to be run with a python interpreter, and it
could be either version 2 or 3.  This is why I extended the
gnu-build-system (as a "parent") and imported the default-python
procedures from python-build-system (as a "cousin").

Does this make any sense?

>
>> From adc52a74fb12943fd77c97bf75a2092e839f9024 Mon Sep 17 00:00:00 2001
>> From: Ricardo Wurmus <rekado@elephly.net>
>> Date: Wed, 28 Jan 2015 22:39:03 +0100
>> Subject: [PATCH] Add 'waf-build-system'.
>>
>> * guix/build-system/waf.scm, guix/build/waf-build-system.scm: New files.
>> * Makefile.am (MODULES): Add them.
>
> Could you add a few lines to guix.texi, under “Build Systems”?  Other
> than that this looks good to me.

I'll try and send an updated patch.

~~ Ricardo

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add 'waf-build-system'.
  2015-02-03 22:46   ` rekado
@ 2015-02-04 22:04     ` Ludovic Courtès
  2015-02-05 21:53     ` Ricardo Wurmus
  1 sibling, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2015-02-04 22:04 UTC (permalink / raw)
  To: rekado; +Cc: guix-devel

rekado <rekado@elephly.net> skribis:

> Ludovic Courtès writes:
>
>> Ricardo Wurmus <rekado@elephly.net> skribis:
>>
>>> Unlike the Python build system, however, there is a configure phase, and
>>> not everything important happens during the install phase.
>>
>> OK.  Did you find it more appropriate to extend ‘gnu-build-system’
>> rather than ‘python-build-system’?
>
> The way I see it the waf-build-system is a descendant of the
> gnu-build-system in that it has the same phases; it only uses a
> different tool (namely the waf script).  The python-build-system on the
> other hand concentrates everything in the install "phase".
>
> The waf-build-system looks similar to the python-build-system only
> because the waf script needs to be run with a python interpreter, and it
> could be either version 2 or 3.  This is why I extended the
> gnu-build-system (as a "parent") and imported the default-python
> procedures from python-build-system (as a "cousin").
>
> Does this make any sense?

Yes it does.  Thanks for the explanation!

Ludo’.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add 'waf-build-system'.
  2015-02-03 22:46   ` rekado
  2015-02-04 22:04     ` Ludovic Courtès
@ 2015-02-05 21:53     ` Ricardo Wurmus
  2015-02-07 23:26       ` Ludovic Courtès
  1 sibling, 1 reply; 6+ messages in thread
From: Ricardo Wurmus @ 2015-02-05 21:53 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 620 bytes --]


>>> From adc52a74fb12943fd77c97bf75a2092e839f9024 Mon Sep 17 00:00:00 2001
>>> From: Ricardo Wurmus <rekado@elephly.net>
>>> Date: Wed, 28 Jan 2015 22:39:03 +0100
>>> Subject: [PATCH] Add 'waf-build-system'.
>>>
>>> * guix/build-system/waf.scm, guix/build/waf-build-system.scm: New files.
>>> * Makefile.am (MODULES): Add them.
>>
>> Could you add a few lines to guix.texi, under “Build Systems”?  Other
>> than that this looks good to me.
>
> I'll try and send an updated patch.

Attached is an updated patch that also includes changes to the "Build
Systems" section in guix.texi.

Does this suffice?

~~ Ricardo


[-- Attachment #2: 0001-build-Add-waf-build-system.patch --]
[-- Type: text/x-patch, Size: 10928 bytes --]

From cab477edc91b3959b10825c12609535bcef66895 Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <rekado@elephly.net>
Date: Thu, 5 Feb 2015 22:41:24 +0100
Subject: [PATCH] build: Add 'waf-build-system'.

* guix/build-system/waf.scm,
  guix/build/waf-build-system.scm: New files.
* Makefile.am (MODULES): Add them.
* doc/guix.texi (Build Systems): Document waf-build-system.
---
 Makefile.am                     |   2 +
 doc/guix.texi                   |  12 ++++
 guix/build-system/waf.scm       | 128 ++++++++++++++++++++++++++++++++++++++++
 guix/build/waf-build-system.scm |  86 +++++++++++++++++++++++++++
 4 files changed, 228 insertions(+)
 create mode 100644 guix/build-system/waf.scm
 create mode 100644 guix/build/waf-build-system.scm

diff --git a/Makefile.am b/Makefile.am
index 67367d6..6a4a09b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -53,6 +53,7 @@ MODULES =					\
   guix/build-system/gnu.scm			\
   guix/build-system/perl.scm			\
   guix/build-system/python.scm			\
+  guix/build-system/waf.scm			\
   guix/build-system/ruby.scm			\
   guix/build-system/trivial.scm			\
   guix/ftp-client.scm				\
@@ -71,6 +72,7 @@ MODULES =					\
   guix/build/perl-build-system.scm		\
   guix/build/python-build-system.scm		\
   guix/build/ruby-build-system.scm		\
+  guix/build/waf-build-system.scm		\
   guix/build/store-copy.scm			\
   guix/build/utils.scm				\
   guix/build/union.scm				\
diff --git a/doc/guix.texi b/doc/guix.texi
index b3c7365..70c9c01 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -1899,6 +1899,18 @@ Which Ruby package is used can be specified with the @code{#:ruby}
 parameter.
 @end defvr
 
+@defvr {Scheme Variable} waf-build-system
+This variable is exported by @code{(guix build-system waf)}.  It
+implements a build procedure around the @code{waf} script.  The common
+phases---@code{configure}, @code{build}, and @code{install}---are
+implemented by passing their names as arguments to the @code{waf}
+script.
+
+The @code{waf} script is executed by the Python interpreter.  Which
+Python package is used to run the script can be specified with the
+@code{#:python} parameter.
+@end defvr
+
 Lastly, for packages that do not need anything as sophisticated, a
 ``trivial'' build system is provided.  It is trivial in the sense that
 it provides basically no support: it does not pull any implicit inputs,
diff --git a/guix/build-system/waf.scm b/guix/build-system/waf.scm
new file mode 100644
index 0000000..494cb95
--- /dev/null
+++ b/guix/build-system/waf.scm
@@ -0,0 +1,128 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; 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 waf)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix derivations)
+  #: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
+            waf-build-system))
+
+;; Commentary:
+;;
+;; Standard build procedure for applications using 'waf'.  This is very
+;; similar to the 'python-build-system' and is implemented as an extension of
+;; 'gnu-build-system'.
+;;
+;; Code:
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                (python (default-python))
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME."
+  (define private-keywords
+    '(#:source #:target #:python #: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 `(("python" ,python)
+                         ,@native-inputs))
+         (outputs outputs)
+         (build waf-build) ; only change compared to 'lower' in python.scm
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (waf-build store name inputs
+                       #:key
+                       (tests? #t)
+                       (test-target "check")
+                       (configure-flags ''())
+                       (phases '(@ (guix build waf-build-system)
+                                   %standard-phases))
+                       (outputs '("out"))
+                       (search-paths '())
+                       (system (%current-system))
+                       (guile #f)
+                       (imported-modules '((guix build waf-build-system)
+                                           (guix build gnu-build-system)
+                                           (guix build utils)))
+                       (modules '((guix build waf-build-system)
+                                  (guix build utils))))
+  "Build SOURCE with INPUTS.  This assumes that SOURCE provides a 'waf' file
+as its build system."
+  (define builder
+    `(begin
+       (use-modules ,@modules)
+       (waf-build #:name ,name
+                  #:source ,(match (assoc-ref inputs "source")
+                              (((? derivation? source))
+                               (derivation->output-path source))
+                              ((source)
+                               source)
+                              (source
+                               source))
+                  #:configure-flags ,configure-flags
+                  #:system ,system
+                  #:test-target ,test-target
+                  #:tests? ,tests?
+                  #: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 waf-build-system
+  (build-system
+    (name 'waf)
+    (description "The standard waf build system")
+    (lower lower)))
+
+;;; waf.scm ends here
diff --git a/guix/build/waf-build-system.scm b/guix/build/waf-build-system.scm
new file mode 100644
index 0000000..e64b51a
--- /dev/null
+++ b/guix/build/waf-build-system.scm
@@ -0,0 +1,86 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; 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 waf-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 ftw)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (%standard-phases
+            waf-build))
+
+;; Commentary:
+;;
+;; Builder-side code of the standard waf build procedure.
+;;
+;; Code:
+
+
+(define (call-waf command params)
+  (if (file-exists? "waf")
+      (begin
+         (format #t "running \"python waf\" with command ~s and parameters ~s~%"
+                command params)
+         (zero? (apply system* "python" "waf" command params)))
+      (error "no waf found")))
+
+(define* (configure #:key target native-inputs inputs outputs
+                    (configure-flags '())
+                    #:allow-other-keys)
+  "Build a given waf application."
+  (let* ((prefix (assoc-ref outputs "out"))
+         (flags  `(,(string-append "--prefix=" prefix)
+                   ,@configure-flags)))
+    (call-waf "configure" flags)))
+
+(define* (build #:rest empty)
+  "Build a given waf application."
+  (call-waf "build" '()))
+
+(define* (check #:key tests? test-target #:allow-other-keys)
+  "Run the test suite of a given waf application."
+  (if tests?
+    (call-waf test-target '())
+    #t))
+
+(define* (install #:key outputs inputs (configure-flags '())
+                  #:allow-other-keys)
+  "Install a given waf application."
+  (let* ((out (assoc-ref outputs "out"))
+         (params (append (list (string-append "--prefix=" out))
+                         configure-flags)))
+        (call-waf "install" params)))
+
+(define %standard-phases
+  (alist-replace
+   'configure configure
+   (alist-replace
+    'build build
+    (alist-replace
+     'check check
+     (alist-replace 'install install
+                    gnu:%standard-phases)))))
+
+(define* (waf-build #:key inputs (phases %standard-phases)
+                       #:allow-other-keys #:rest args)
+  "Build the given waf application, applying all of PHASES in order."
+  (apply gnu:gnu-build #:inputs inputs #:phases phases args))
+
+;;; waf-build-system.scm ends here
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add 'waf-build-system'.
  2015-02-05 21:53     ` Ricardo Wurmus
@ 2015-02-07 23:26       ` Ludovic Courtès
  0 siblings, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2015-02-07 23:26 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

Ricardo Wurmus <rekado@elephly.net> skribis:

> Attached is an updated patch that also includes changes to the "Build
> Systems" section in guix.texi.
>
> Does this suffice?
>
> ~~ Ricardo
>
>
> From cab477edc91b3959b10825c12609535bcef66895 Mon Sep 17 00:00:00 2001
> From: Ricardo Wurmus <rekado@elephly.net>
> Date: Thu, 5 Feb 2015 22:41:24 +0100
> Subject: [PATCH] build: Add 'waf-build-system'.
>
> * guix/build-system/waf.scm,
>   guix/build/waf-build-system.scm: New files.
> * Makefile.am (MODULES): Add them.
> * doc/guix.texi (Build Systems): Document waf-build-system.

Yes, OK to push, thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-02-07 23:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-28 21:48 [PATCH] Add 'waf-build-system' Ricardo Wurmus
2015-02-01 21:08 ` Ludovic Courtès
2015-02-03 22:46   ` rekado
2015-02-04 22:04     ` Ludovic Courtès
2015-02-05 21:53     ` Ricardo Wurmus
2015-02-07 23:26       ` Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).