unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Julien Lepiller <julien@lepiller.eu>
To: guix-devel@gnu.org
Subject: [PATCH 09/10] gnu: Add ocaml-js-build-tools.
Date: Fri, 27 Jan 2017 23:12:27 +0100	[thread overview]
Message-ID: <20170127221228.4370-10-julien@lepiller.eu> (raw)
In-Reply-To: <20170127221228.4370-1-julien@lepiller.eu>

* 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): Add it.
---
 gnu/local.mk                                       |  1 +
 gnu/packages/ocaml.scm                             | 50 ++++++++++++++++++++++
 .../patches/ocaml-janestreet-fix-libdir.patch      | 39 +++++++++++++++++
 3 files changed, 90 insertions(+)
 create mode 100644 gnu/packages/patches/ocaml-janestreet-fix-libdir.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 2e3548342..8555e403f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -775,6 +775,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/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 ba0f5cd4c..9b323975f 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")
@@ -1942,3 +1971,24 @@ 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 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 packages contains tools to help building Jane Street
+Packages, but can be used for other purposes.  It contains:
+@enumerate
+@item an oasis2opam-install tool to produce a .install file from the oasis build log
+@item an js_build_tools ocamlbuild plugin with various goodies
+@end enumerate")
+    (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..4ba2a7510
--- /dev/null
+++ b/gnu/packages/patches/ocaml-janestreet-fix-libdir.patch
@@ -0,0 +1,39 @@
+This patch adds a --libdir option to opam-installer so it installs the plugin
+in the specified directory rather than in the default one (ocaml's directory in
+the store, which is forbidden).
+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

  parent reply	other threads:[~2017-01-27 22:13 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-27 22:12 [PATCH 00/10] ocaml patches v2 Julien Lepiller
2017-01-27 22:12 ` [PATCH 01/10] gnu: Add ocaml-base64 Julien Lepiller
2017-01-27 22:12 ` [PATCH 02/10] gnu: Add ocamlify Julien Lepiller
2017-01-27 22:12 ` [PATCH 03/10] gnu: Add omake Julien Lepiller
2017-01-27 22:12 ` [PATCH 04/10] gnu: Add ocaml-batteries Julien Lepiller
2017-01-27 22:12 ` [PATCH 05/10] gnu: Add ocaml-pcre Julien Lepiller
2017-01-27 22:12 ` [PATCH 06/10] gnu: Add ocaml-expect Julien Lepiller
2017-01-27 22:12 ` [PATCH 07/10] gnu: Add ocaml-fileutils Julien Lepiller
2017-01-27 22:12 ` [PATCH 08/10] gnu: Add ocaml-oasis Julien Lepiller
2017-01-27 22:12 ` Julien Lepiller [this message]
2017-01-30  9:19   ` [PATCH 09/10] gnu: Add ocaml-js-build-tools Ludovic Courtès
2017-01-30  9:22   ` Ludovic Courtès
2017-01-30 21:08     ` Julien Lepiller
2017-01-30 22:23       ` Ludovic Courtès
2017-01-30 22:48         ` Julien Lepiller
2017-01-31  9:22           ` Ludovic Courtès
2017-01-27 22:12 ` [PATCH 10/10] gnu: Add ocaml-bin-prot Julien Lepiller
2017-01-30  9:23 ` [PATCH 00/10] ocaml patches v2 Ludovic Courtès
  -- strict thread matches above, loose matches on Subject: below --
2017-01-18 20:27 [PATCH 00/10] ocaml patches Julien Lepiller
2017-01-18 20:28 ` [PATCH 09/10] gnu: Add ocaml-js-build-tools Julien Lepiller
2017-01-18 22:21   ` Marius Bakke
2017-01-20 13:28     ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170127221228.4370-10-julien@lepiller.eu \
    --to=julien@lepiller.eu \
    --cc=guix-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).