build-system: Add package-with-ocaml4.01.
* guix/build-system/ocaml.scm (default-ocaml4.01, default-ocaml4.01-findlib, package-with-explicit-ocaml, package-with-ocaml4.01, strip-ocaml4.01-variant): New variables.
This commit is contained in:
parent
fa01cb5226
commit
c6cfec42b0
|
@ -1,5 +1,6 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
|
||||
;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -15,7 +16,6 @@
|
|||
;;;
|
||||
;;; 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 ocaml)
|
||||
#:use-module (guix store)
|
||||
#:use-module (guix utils)
|
||||
|
@ -25,7 +25,10 @@
|
|||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:export (%ocaml-build-system-modules
|
||||
package-with-ocaml4.01
|
||||
strip-ocaml4.01-variant
|
||||
ocaml-build
|
||||
ocaml-build-system))
|
||||
|
||||
|
@ -71,6 +74,77 @@
|
|||
(let ((module (resolve-interface '(gnu packages ocaml))))
|
||||
(module-ref module 'ocaml-findlib)))
|
||||
|
||||
(define (default-ocaml4.01)
|
||||
(let ((ocaml (resolve-interface '(gnu packages ocaml))))
|
||||
(module-ref ocaml 'ocaml-4.01)))
|
||||
|
||||
(define (default-ocaml4.01-findlib)
|
||||
(let ((module (resolve-interface '(gnu packages ocaml))))
|
||||
(module-ref module 'ocaml4.01-findlib)))
|
||||
|
||||
(define* (package-with-explicit-ocaml ocaml findlib old-prefix new-prefix
|
||||
#:key variant-property)
|
||||
"Return a procedure of one argument, P. The procedure creates a package
|
||||
with the same fields as P, which is assumed to use OCAML-BUILD-SYSTEM, such
|
||||
that it is compiled with OCAML and FINDLIB instead. The inputs are changed
|
||||
recursively accordingly. If the name of P starts with OLD-PREFIX, this is
|
||||
replaced by NEW-PREFIX; otherwise, NEW-PREFIX is prepended to the name.
|
||||
|
||||
When VARIANT-PROPERTY is present, it is used as a key to search for
|
||||
pre-defined variants of this transformation recorded in the 'properties' field
|
||||
of packages. The property value must be the promise of a package. This is a
|
||||
convenient way for package writers to force the transformation to use
|
||||
pre-defined variants."
|
||||
(define package-variant
|
||||
(if variant-property
|
||||
(lambda (package)
|
||||
(assq-ref (package-properties package)
|
||||
variant-property))
|
||||
(const #f)))
|
||||
|
||||
(define (transform p)
|
||||
(cond
|
||||
;; If VARIANT-PROPERTY is present, use that.
|
||||
((package-variant p)
|
||||
=> force)
|
||||
|
||||
;; Otherwise build the new package object graph.
|
||||
((eq? (package-build-system p) ocaml-build-system)
|
||||
(package
|
||||
(inherit p)
|
||||
(location (package-location p))
|
||||
(name (let ((name (package-name p)))
|
||||
(string-append new-prefix
|
||||
(if (string-prefix? old-prefix name)
|
||||
(substring name
|
||||
(string-length old-prefix))
|
||||
name))))
|
||||
(arguments
|
||||
(let ((ocaml (if (promise? ocaml) (force ocaml) ocaml))
|
||||
(findlib (if (promise? findlib) (force findlib) findlib)))
|
||||
(ensure-keyword-arguments (package-arguments p)
|
||||
`(#:ocaml ,ocaml
|
||||
#:findlib ,findlib))))))
|
||||
(else p)))
|
||||
|
||||
(define (cut? p)
|
||||
(or (not (eq? (package-build-system p) ocaml-build-system))
|
||||
(package-variant p)))
|
||||
|
||||
(package-mapping transform cut?))
|
||||
|
||||
(define package-with-ocaml4.01
|
||||
(package-with-explicit-ocaml (delay (default-ocaml4.01))
|
||||
(delay (default-ocaml4.01-findlib))
|
||||
"ocaml-" "ocaml4.01-"
|
||||
#:variant-property 'ocaml4.01-variant))
|
||||
|
||||
(define (strip-ocaml4.01-variant p)
|
||||
"Remove the 'ocaml4.01-variant' property from P."
|
||||
(package
|
||||
(inherit p)
|
||||
(properties (alist-delete 'ocaml4.01-variant (package-properties p)))))
|
||||
|
||||
(define* (lower name
|
||||
#:key source inputs native-inputs outputs system target
|
||||
(ocaml (default-ocaml))
|
||||
|
|
Loading…
Reference in New Issue