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 changed files with 75 additions and 1 deletions
				
			
		|  | @ -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)) | ||||
|  |  | |||
		Reference in a new issue