Browse Source
Add (guix build-system perl).
Add (guix build-system perl).
* guix/build-system/perl.scm, guix/build/perl-build-system.scm: New files. * Makefile.am (MODULES): Add them. * guix/build-system/gnu.scm (standard-inputs): Make public.version-0.8.3

4 changed files with 167 additions and 1 deletions
-
2Makefile.am
-
2guix/build-system/gnu.scm
-
103guix/build-system/perl.scm
-
61guix/build/perl-build-system.scm
@ -0,0 +1,103 @@ |
|||
;;; GNU Guix --- Functional package management for GNU |
|||
;;; Copyright © 2013 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/>. |
|||
|
|||
(define-module (guix build-system perl) |
|||
#: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 (perl-build |
|||
perl-build-system)) |
|||
|
|||
;; Commentary: |
|||
;; |
|||
;; Standard build procedure for Perl packages using the "makefile |
|||
;; maker"---i.e., "perl Makefile.PL". This is implemented as an extension of |
|||
;; `gnu-build-system'. |
|||
;; |
|||
;; Code: |
|||
|
|||
(define* (perl-build store name source inputs |
|||
#:key |
|||
(perl (@ (gnu packages perl) perl)) |
|||
(tests? #t) |
|||
(make-maker-flags ''()) |
|||
(phases '(@ (guix build perl-build-system) |
|||
%standard-phases)) |
|||
(outputs '("out")) |
|||
(system (%current-system)) |
|||
(guile #f) |
|||
(imported-modules '((guix build perl-build-system) |
|||
(guix build gnu-build-system) |
|||
(guix build utils))) |
|||
(modules '((guix build perl-build-system) |
|||
(guix build gnu-build-system) |
|||
(guix build utils)))) |
|||
"Build SOURCE using PERL, and with INPUTS. This assumes that SOURCE |
|||
provides a `Makefile.PL' file as its build system." |
|||
(define builder |
|||
`(begin |
|||
(use-modules ,@modules) |
|||
(perl-build #:name ,name |
|||
#:source ,(if (and source (derivation-path? source)) |
|||
(derivation-path->output-path source) |
|||
source) |
|||
#:make-maker-flags ,make-maker-flags |
|||
#:system ,system |
|||
#:test-target "test" |
|||
#:tests? ,tests? |
|||
#:outputs %outputs |
|||
#:inputs %build-inputs))) |
|||
|
|||
(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 ((perl (package-derivation store perl system))) |
|||
(build-expression->derivation store name system |
|||
builder |
|||
`(,@(if source |
|||
`(("source" ,source)) |
|||
'()) |
|||
("perl" ,perl) |
|||
,@inputs |
|||
|
|||
;; Keep the standard inputs of |
|||
;; `gnu-build-system'. |
|||
,@(standard-inputs system)) |
|||
|
|||
#:modules imported-modules |
|||
#:outputs outputs |
|||
#:guile-for-build guile-for-build))) |
|||
|
|||
(define perl-build-system |
|||
(build-system (name 'perl) |
|||
(description "The standard Perl build system") |
|||
(build perl-build))) |
|||
|
|||
;;; perl.scm ends here |
@ -0,0 +1,61 @@ |
|||
;;; GNU Guix --- Functional package management for GNU |
|||
;;; Copyright © 2013 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/>. |
|||
|
|||
(define-module (guix build perl-build-system) |
|||
#:use-module ((guix build gnu-build-system) |
|||
#:renamer (symbol-prefix-proc 'gnu:)) |
|||
#:use-module (guix build utils) |
|||
#:use-module (ice-9 match) |
|||
#:export (%standard-phases |
|||
perl-build)) |
|||
|
|||
;; Commentary: |
|||
;; |
|||
;; Builder-side code of the standard Perl package build procedure. |
|||
;; |
|||
;; Code: |
|||
|
|||
(define* (configure #:key outputs (make-maker-flags '()) |
|||
#:allow-other-keys) |
|||
"Configure the given Perl package." |
|||
(let ((out (assoc-ref outputs "out"))) |
|||
(if (file-exists? "Makefile.PL") |
|||
(let ((args `("Makefile.PL" ,(string-append "PREFIX=" out) |
|||
"INSTALLDIRS=site" ,@make-maker-flags))) |
|||
(format #t "running `perl' with arguments ~s~%" args) |
|||
(zero? (apply system* "perl" args))) |
|||
(error "no Makefile.PL found")))) |
|||
|
|||
(define %standard-phases |
|||
;; Everything is as with the GNU Build System except for the `configure' |
|||
;; phase. |
|||
(alist-replace 'configure configure |
|||
gnu:%standard-phases)) |
|||
|
|||
(define* (perl-build #:key inputs (phases %standard-phases) |
|||
#:allow-other-keys #:rest args) |
|||
"Build the given Perl package, applying all of PHASES in order." |
|||
(set-path-environment-variable "PERL5LIB" '("lib/perl5/site_perl") |
|||
(match inputs |
|||
(((_ . path) ...) |
|||
path))) |
|||
(apply gnu:gnu-build |
|||
#:inputs inputs #:phases phases |
|||
args)) |
|||
|
|||
;;; perl-build-system.scm ends here |
Write
Preview
Loading…
Cancel
Save
Reference in new issue