Julien Lepiller writes: > * gnu/packages/ocaml.scm (ocaml-js-build-tools): New variable. > * gnu/packages/patches/ocaml-janestreet-fix-libdir.patch: New file. > * gnu/local.mk (dist_patch_DATA): New patch. > --- > gnu/local.mk | 1 + > gnu/packages/ocaml.scm | 49 ++++++++++++++++++++++ > .../patches/ocaml-janestreet-fix-libdir.patch | 36 ++++++++++++++++ > 3 files changed, 86 insertions(+) > create mode 100644 gnu/packages/patches/ocaml-janestreet-fix-libdir.patch > > diff --git a/gnu/local.mk b/gnu/local.mk > index 5b919dd86..7b210c7b3 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -778,6 +778,7 @@ dist_patch_DATA = \ > %D%/packages/patches/ocaml-CVE-2015-8869.patch \ > %D%/packages/patches/ocaml-Add-a-.file-directive.patch \ > %D%/packages/patches/ocaml-findlib-make-install.patch \ > + %D%/packages/patches/ocaml-janestreet-fix-libdir.patch \ > %D%/packages/patches/ocaml-omake-fix-non-determinism.patch \ > %D%/packages/patches/ola-readdir-r.patch \ > %D%/packages/patches/openexr-missing-samples.patch \ > diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm > index 35e0d081e..120095118 100644 > --- a/gnu/packages/ocaml.scm > +++ b/gnu/packages/ocaml.scm > @@ -66,6 +66,35 @@ > (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)) > + (patches (search-patches "ocaml-janestreet-fix-libdir.patch")) > + (modules '((guix build utils))) > + (snippet `(substitute* "install.ml" > + (((string-append "lib/" ,name)) > + (string-append "lib/ocaml/site-lib/" ,name)))))) > + > +;; 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") > @@ -1927,3 +1956,23 @@ file (POSIX like) and filename.") > 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 an 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 packages contains tools to help building Jane Street > +Packages. However most of it is general purpose. It contains: The second sentence is difficult to parse. Maybe ", but can also be used for other purposes." > + > +- an oasis2opam-install tool to produce a .install file from the oasis build log > +- an js_build_tools ocamlbuild plugin with various goodies") Please use @enumerate here too. Hopefully someone else can chime in on the helper functions above, if it works I'd say they are fine. LGTM! > + (license license:asl2.0))) > diff --git a/gnu/packages/patches/ocaml-janestreet-fix-libdir.patch b/gnu/packages/patches/ocaml-janestreet-fix-libdir.patch > new file mode 100644 > index 000000000..07cabe3c4 > --- /dev/null > +++ b/gnu/packages/patches/ocaml-janestreet-fix-libdir.patch > @@ -0,0 +1,36 @@ > +diff -aur package.pristine/Makefile package.new/Makefile > +--- package.pristine/Makefile 2016-02-06 01:55:14.650150309 +0100 > ++++ package.new/Makefile 2016-02-06 01:57:56.012174364 +0100 > +@@ -29,26 +29,26 @@ > + ocaml -I js-utils js-utils/gen_install.ml > + > + install: $(NAME).install > +- opam-installer -i --prefix $(PREFIX) $(NAME).install > ++ opam-installer -i --prefix $(PREFIX) --libdir $(LIBDIR) $(NAME).install > + > + uninstall: $(NAME).install > +- opam-installer -u --prefix $(PREFIX) $(NAME).install > ++ opam-installer -u --prefix $(PREFIX) --libdir $(LIBDIR) $(NAME).install > + > + reinstall: $(NAME).install > +- opam-installer -u --prefix $(PREFIX) $(NAME).install &> /dev/null || true > +- opam-installer -i --prefix $(PREFIX) $(NAME).install > ++ opam-installer -u --prefix $(PREFIX) --libdir $(LIBDIR) $(NAME).install &> /dev/null || true > ++ opam-installer -i --prefix $(PREFIX) --libdir $(LIBDIR) $(NAME).install > + > + bin.tar.gz: $(NAME).install > + rm -rf _install > + mkdir _install > +- opam-installer -i --prefix _install $(NAME).install > ++ opam-installer -i --prefix _install --libdir $(LIBDIR) $(NAME).install > + tar czf bin.tar.gz -C _install . > + rm -rf _install > + > + bin.lzo: $(NAME).install > + rm -rf _install > + mkdir _install > +- opam-installer -i --prefix _install $(NAME).install > ++ opam-installer -i --prefix _install --libdir $(LIBDIR) $(NAME).install > + cd _install && lzop -1 -P -o ../bin.lzo `find . -type f` > + rm -rf _install > + > -- > 2.11.0