From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Lepiller Subject: [PATCH 09/10] gnu: Add ocaml-js-build-tools. Date: Fri, 27 Jan 2017 23:12:27 +0100 Message-ID: <20170127221228.4370-10-julien@lepiller.eu> References: <20170127221228.4370-1-julien@lepiller.eu> Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:42276) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cXElb-0000u2-7H for guix-devel@gnu.org; Fri, 27 Jan 2017 17:13:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cXElY-0004ah-KH for guix-devel@gnu.org; Fri, 27 Jan 2017 17:13:11 -0500 Received: from dau94-h03-89-91-205-84.dsl.sta.abo.bbox.fr ([89.91.205.84]:33193 helo=skaro.lepiller.eu) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cXElY-0004aY-62 for guix-devel@gnu.org; Fri, 27 Jan 2017 17:13:08 -0500 Received: from localhost (localhost [127.0.0.1]) by skaro.lepiller.eu (Postfix) with ESMTP id 2E2057F80C for ; Fri, 27 Jan 2017 23:13:06 +0100 (CET) Received: from skaro.lepiller.eu ([127.0.0.1]) by localhost (lepiller.eu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id EewkvSvUB1dA for ; Fri, 27 Jan 2017 23:12:58 +0100 (CET) Received: from localhost.localdomain (128-79-116-134.hfc.dyn.abo.bbox.fr [128.79.116.134]) by skaro.lepiller.eu (Postfix) with ESMTPSA id 7C30F81236 for ; Fri, 27 Jan 2017 23:12:40 +0100 (CET) In-Reply-To: <20170127221228.4370-1-julien@lepiller.eu> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org * 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