gnu: Add ocaml-js-build-tools.

* gnu/packages/ocaml.scm (ocaml-js-build-tools): New variable.
This commit is contained in:
Julien Lepiller 2017-01-27 22:58:50 +01:00
parent 5eed45a8d7
commit f95ebba516
No known key found for this signature in database
GPG key ID: 43111F4520086A0C

View file

@ -66,6 +66,46 @@ (define (ocaml-forge-uri name version file-number)
(number->string file-number) "/" name "-" version
".tar.gz"))
;; Janestreet packages are found in a similar way and all need the same patch.
(define (janestreet-origin name version hash)
(origin (method url-fetch)
(uri (string-append "https://ocaml.janestreet.com/ocaml-core/"
(version-major+minor version) "/files/"
name "-" version ".tar.gz"))
(sha256 (base32 hash))
(modules '((guix build utils)))
(snippet
(let ((pattern (string-append "lib/" name)))
`(begin
;; install.ml contains an invalid reference to the ppx file and
;; propagates this error to the generated META file. It
;; looks for it in the "lib" directory, but it is installed in
;; "lib/ocaml/site-lib/package". This substitute does not change
;; this file for non ppx packages.
(substitute* "install.ml"
((,pattern) (string-append "lib/ocaml/site-lib/" ,name)))
;; The standard Makefile would try to install janestreet modules
;; in OCaml's directory in the store, which is read-only.
(substitute* "Makefile"
(("--prefix")
"--libdir $(LIBDIR) --prefix")))))))
;; They also require almost the same set of arguments
(define janestreet-arguments
`(#:use-make? #t
#:make-flags
(list (string-append "CONFIGUREFLAGS=--prefix "
(assoc-ref %outputs "out")
" --enable-tests")
(string-append "LIBDIR="
(assoc-ref %outputs "out")
"/lib/ocaml/site-lib")
;; for ocaml-bin-prot, otherwise ignored
(string-append "OCAML_TOPLEVEL_PATH="
(assoc-ref %build-inputs "findlib")
"/lib/ocaml/site-lib"))
#:phases (modify-phases %standard-phases (delete 'configure))))
(define-public ocaml
(package
(name "ocaml")
@ -1942,3 +1982,25 @@ (define-public ocaml-oasis
system in your OCaml projects. It helps to create standard entry points in your
build system and allows external tools to analyse your project easily.")
(license license:lgpl2.1+))) ; with ocaml static compilation exception
(define-public ocaml-js-build-tools
(package
(name "ocaml-js-build-tools")
(version "113.33.06")
(source (janestreet-origin "js-build-tools" version
"0r8z4fz8iy5y6hkdlkpwf6rk4qigcr3dzyv35585xgg2ahf12zy6"))
(native-inputs
`(("oasis" ,ocaml-oasis)
("opam" ,opam)))
(build-system ocaml-build-system)
(arguments janestreet-arguments)
(home-page "https://github.com/janestreet/js-build-tools")
(synopsis "Collection of tools to help building Jane Street Packages")
(description "This package contains tools to help building Jane Street
packages, but can be used for other purposes. It contains:
@enumerate
@item an @command{oasis2opam-install} tool to produce a @file{.install} file
from the oasis build log
@item a @code{js_build_tools} ocamlbuild plugin with various goodies.
@end enumerate")
(license license:asl2.0)))