├── hello-jsoo-esy.opam
├── dune-project
├── esy.lock
├── opam
│ ├── seq.base
│ │ ├── files
│ │ │ ├── seq.install
│ │ │ └── META.seq
│ │ └── opam
│ ├── ocamlfind.1.8.1
│ │ ├── files
│ │ │ ├── ocaml-stub
│ │ │ └── ocamlfind.install
│ │ └── opam
│ ├── base-unix.base
│ │ └── opam
│ ├── base-threads.base
│ │ └── opam
│ ├── jbuilder.transition
│ │ └── opam
│ ├── conf-m4.1
│ │ └── opam
│ ├── ppx_derivers.1.2.1
│ │ └── opam
│ ├── result.1.4
│ │ └── opam
│ ├── atdgen-runtime.2.0.0
│ │ └── opam
│ ├── js_of_ocaml-ppx.3.4.0
│ │ └── opam
│ ├── js_of_ocaml-compiler.3.4.0
│ │ └── opam
│ ├── js_of_ocaml.3.4.0
│ │ └── opam
│ ├── ppx_tools_versioned.5.2.3
│ │ └── opam
│ ├── menhir.20190626
│ │ └── opam
│ ├── atd.2.0.0
│ │ └── opam
│ ├── merlin-extend.0.5
│ │ └── opam
│ ├── ocamlbuild.0.14.0
│ │ └── opam
│ ├── uchar.0.0.2
│ │ └── opam
│ ├── re.1.9.0
│ │ └── opam
│ ├── cppo.1.6.6
│ │ └── opam
│ ├── yojson.1.7.0
│ │ └── opam
│ ├── ocaml-migrate-parsetree.1.4.0
│ │ └── opam
│ ├── atdgen.2.0.0
│ │ └── opam
│ ├── cmdliner.1.0.4
│ │ └── opam
│ ├── easy-format.1.3.2
│ │ └── opam
│ ├── biniou.1.2.1
│ │ └── opam
│ └── dune.1.11.3
│ │ └── opam
├── .gitignore
├── .gitattributes
├── overrides
│ ├── opam__s__dune_opam__c__1.11.3_opam_override
│ │ └── package.json
│ ├── opam__s__ocamlbuild_opam__c__0.14.0_opam_override
│ │ ├── package.json
│ │ └── files
│ │ │ └── ocamlbuild-0.14.0.patch
│ └── opam__s__ocamlfind_opam__c__1.8.1_opam_override
│ │ ├── package.json
│ │ └── files
│ │ └── findlib-1.8.1.patch
└── index.json
├── .gitignore
├── src
├── dune
├── index.html
└── Hello.re
├── package.json
├── webpack.config.js
├── esy.json
├── LICENSE
└── README.md
/hello-jsoo-esy.opam:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/dune-project:
--------------------------------------------------------------------------------
1 | (lang dune 1.11)
2 |
--------------------------------------------------------------------------------
/esy.lock/opam/seq.base/files/seq.install:
--------------------------------------------------------------------------------
1 | lib:[
2 | "META.seq" {"META"}
3 | ]
4 |
--------------------------------------------------------------------------------
/esy.lock/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Reset any possible .gitignore, we want all esy.lock to be un-ignored.
3 | !*
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .merlin
2 | node_modules
3 | _esy
4 | _release
5 | *.byte
6 | *.native
7 | *.install
8 | build
9 |
--------------------------------------------------------------------------------
/esy.lock/.gitattributes:
--------------------------------------------------------------------------------
1 |
2 | # Set eol to LF so files aren't converted to CRLF-eol on Windows.
3 | * text eol=lf
4 |
--------------------------------------------------------------------------------
/src/dune:
--------------------------------------------------------------------------------
1 | (executable
2 | (name Hello)
3 | (public_name Hello.exe)
4 | (libraries jsoo-is-sorted)
5 | (preprocess (pps js_of_ocaml-ppx))
6 | )
7 |
--------------------------------------------------------------------------------
/esy.lock/opam/ocamlfind.1.8.1/files/ocaml-stub:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | BINDIR=$(dirname "$(command -v ocamlc)")
4 | "$BINDIR/ocaml" -I "$OCAML_TOPLEVEL_PATH" "$@"
5 |
--------------------------------------------------------------------------------
/esy.lock/opam/seq.base/files/META.seq:
--------------------------------------------------------------------------------
1 | name="seq"
2 | version="[distributed with OCaml 4.07 or above]"
3 | description="dummy backward-compatibility package for iterators"
4 | requires=""
5 |
--------------------------------------------------------------------------------
/esy.lock/opam/base-unix.base/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "https://github.com/ocaml/opam-repository/issues"
3 | description: """
4 | Unix library distributed with the OCaml compiler
5 | """
6 |
7 |
--------------------------------------------------------------------------------
/esy.lock/opam/base-threads.base/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "https://github.com/ocaml/opam-repository/issues"
3 | description: """
4 | Threads library distributed with the OCaml compiler
5 | """
6 |
7 |
--------------------------------------------------------------------------------
/esy.lock/opam/ocamlfind.1.8.1/files/ocamlfind.install:
--------------------------------------------------------------------------------
1 | bin: [
2 | "src/findlib/ocamlfind" {"ocamlfind"}
3 | "?src/findlib/ocamlfind_opt" {"ocamlfind"}
4 | "?tools/safe_camlp4"
5 | ]
6 | toplevel: ["src/findlib/topfind"]
7 |
--------------------------------------------------------------------------------
/esy.lock/overrides/opam__s__dune_opam__c__1.11.3_opam_override/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": [
3 | [
4 | "ocaml",
5 | "bootstrap.ml"
6 | ],
7 | [
8 | "./boot.exe",
9 | "--release",
10 | "-j",
11 | "4"
12 | ]
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Hello jsoo esy
6 |
7 |
8 |
9 | Hello js_of_ocaml!
10 | Open the browser console to see some examples of printed values
11 |
12 |
13 |
--------------------------------------------------------------------------------
/esy.lock/opam/seq.base/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: " "
3 | authors: " "
4 | homepage: " "
5 | depends: [
6 | "ocaml" {>= "4.07.0"}
7 | ]
8 | dev-repo: "git+https://github.com/ocaml/ocaml.git"
9 | bug-reports: "https://caml.inria.fr/mantis/main_page.php"
10 | synopsis:
11 | "Compatibility package for OCaml's standard iterator type starting from 4.07."
12 | extra-files: [
13 | ["seq.install" "md5=026b31e1df290373198373d5aaa26e42"]
14 | ["META.seq" "md5=b33c8a1a6c7ed797816ce27df4855107"]
15 | ]
16 |
--------------------------------------------------------------------------------
/esy.lock/opam/jbuilder.transition/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "opensource@janestreet.com"
3 | authors: ["Jane Street Group, LLC "]
4 | homepage: "https://github.com/ocaml/dune"
5 | bug-reports: "https://github.com/ocaml/dune/issues"
6 | dev-repo: "git+https://github.com/ocaml/dune.git"
7 | license: "MIT"
8 | depends: ["ocaml" "dune"]
9 | post-messages: [
10 | "Jbuilder has been renamed and the jbuilder package is now a transition \
11 | package. Use the dune package instead."
12 | ]
13 | synopsis:
14 | "This is a transition package, jbuilder is now named dune. Use the dune"
15 | description: "package instead."
16 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hello-jsoo-esy",
3 | "version": "0.1.0",
4 | "scripts": {
5 | "build": "esy",
6 | "start": "esy build:watch",
7 | "clean": "esy dune clean",
8 | "test": "echo \"Error: no test specified\" && exit 1",
9 | "webpack": "webpack -w",
10 | "webpack:production": "NODE_ENV=production webpack",
11 | "server": "webpack-dev-server"
12 | },
13 | "license": "MIT",
14 | "devDependencies": {
15 | "html-webpack-plugin": "^3.2.0",
16 | "webpack": "^4.0.1",
17 | "webpack-cli": "^3.1.1",
18 | "webpack-dev-server": "^3.1.8"
19 | },
20 | "dependencies": {
21 | "jsoo-is-sorted": "^0.0.4"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": [
3 | [
4 | "bash",
5 | "-c",
6 | "#{os == 'windows' ? 'patch -p1 < ocamlbuild-0.14.0.patch' : 'true'}"
7 | ],
8 | [
9 | "make",
10 | "-f",
11 | "configure.make",
12 | "all",
13 | "OCAMLBUILD_PREFIX=#{self.install}",
14 | "OCAMLBUILD_BINDIR=#{self.bin}",
15 | "OCAMLBUILD_LIBDIR=#{self.lib}",
16 | "OCAMLBUILD_MANDIR=#{self.man}",
17 | "OCAMLBUILD_NATIVE=true",
18 | "OCAMLBUILD_NATIVE_TOOLS=true"
19 | ],
20 | [
21 | "make",
22 | "check-if-preinstalled",
23 | "all",
24 | "#{os == 'windows' ? 'install' : 'opam-install'}"
25 | ]
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const HtmlWebpackPlugin = require('html-webpack-plugin');
3 | const outputDir = path.join(__dirname, 'build/');
4 |
5 | const isProd = process.env.NODE_ENV === 'production';
6 |
7 | module.exports = {
8 | entry: './_esy/default/build/default/src/Hello.bc.js',
9 | mode: isProd ? 'production' : 'development',
10 | output: {
11 | path: outputDir,
12 | filename: 'Index.js'
13 | },
14 | node: {
15 | fs: 'empty',
16 | child_process: 'empty'
17 | },
18 | plugins: [
19 | new HtmlWebpackPlugin({
20 | template: 'src/index.html',
21 | inject: false
22 | })
23 | ],
24 | devServer: {
25 | compress: true,
26 | contentBase: outputDir,
27 | port: process.env.PORT || 8000,
28 | historyApiFallback: true
29 | }
30 | };
31 |
--------------------------------------------------------------------------------
/esy.lock/opam/conf-m4.1/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "tim@gfxmonk.net"
3 | homepage: "http://www.gnu.org/software/m4/m4.html"
4 | bug-reports: "https://github.com/ocaml/opam-repository/issues"
5 | authors: "GNU Project"
6 | license: "GPL-3"
7 | build: [["sh" "-exc" "echo | m4"]]
8 | depexts: [
9 | ["m4"] {os-family = "debian"}
10 | ["m4"] {os-distribution = "fedora"}
11 | ["m4"] {os-distribution = "rhel"}
12 | ["m4"] {os-distribution = "centos"}
13 | ["m4"] {os-distribution = "alpine"}
14 | ["m4"] {os-distribution = "nixos"}
15 | ["m4"] {os-family = "suse"}
16 | ["m4"] {os-distribution = "ol"}
17 | ["m4"] {os-distribution = "arch"}
18 | ]
19 | synopsis: "Virtual package relying on m4"
20 | description:
21 | "This package can only install if the m4 binary is installed on the system."
22 | flags: conf
23 |
--------------------------------------------------------------------------------
/esy.lock/opam/ppx_derivers.1.2.1/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "jeremie@dimino.org"
3 | authors: ["Jérémie Dimino"]
4 | license: "BSD3"
5 | homepage: "https://github.com/ocaml-ppx/ppx_derivers"
6 | bug-reports: "https://github.com/ocaml-ppx/ppx_derivers/issues"
7 | dev-repo: "git://github.com/ocaml-ppx/ppx_derivers.git"
8 | build: [
9 | ["dune" "build" "-p" name "-j" jobs]
10 | ]
11 | depends: [
12 | "ocaml"
13 | "dune"
14 | ]
15 | synopsis: "Shared [@@deriving] plugin registry"
16 | description: """
17 | Ppx_derivers is a tiny package whose sole purpose is to allow
18 | ppx_deriving and ppx_type_conv to inter-operate gracefully when linked
19 | as part of the same ocaml-migrate-parsetree driver."""
20 | url {
21 | src: "https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz"
22 | checksum: "md5=5dc2bf130c1db3c731fe0fffc5648b41"
23 | }
24 |
--------------------------------------------------------------------------------
/esy.lock/opam/result.1.4/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "opensource@janestreet.com"
3 | authors: ["Jane Street Group, LLC "]
4 | homepage: "https://github.com/janestreet/result"
5 | dev-repo: "git+https://github.com/janestreet/result.git"
6 | bug-reports: "https://github.com/janestreet/result/issues"
7 | license: "BSD3"
8 | build: [["dune" "build" "-p" name "-j" jobs]]
9 | depends: [
10 | "ocaml"
11 | "dune" {>= "1.0"}
12 | ]
13 | synopsis: "Compatibility Result module"
14 | description: """
15 | Projects that want to use the new result type defined in OCaml >= 4.03
16 | while staying compatible with older version of OCaml should use the
17 | Result module defined in this library."""
18 | url {
19 | src:
20 | "https://github.com/janestreet/result/archive/1.4.tar.gz"
21 | checksum: "md5=d3162dbc501a2af65c8c71e0866541da"
22 | }
23 |
--------------------------------------------------------------------------------
/esy.lock/opam/atdgen-runtime.2.0.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "martin@mjambon.com"
3 | authors: ["Martin Jambon"]
4 |
5 | homepage: "https://github.com/mjambon/atd"
6 | bug-reports: "https://github.com/mjambon/atd/issues"
7 | dev-repo: "git://github.com/mjambon/atd.git"
8 |
9 | build: [
10 | ["jbuilder" "subst" "-p" name] {pinned}
11 | ["jbuilder" "build" "-p" name "-j" jobs]
12 | ]
13 |
14 | # Restore when https://github.com/mjambon/atd/issues/121 is resolved.
15 | # build-test: [
16 | # ["jbuilder" "runtest" "-p" name]
17 | # ]
18 |
19 | depends: [
20 | "ocaml" {>= "4.02.3"}
21 | "jbuilder" {build}
22 | "biniou" {>= "1.0.6"}
23 | "yojson" {>= "1.2.1"}
24 | ]
25 | synopsis: "Runtime library for code generated by atdgen."
26 | url {
27 | src: "https://github.com/mjambon/atd/releases/download/2.0.0/atd-2.0.0.tbz"
28 | checksum: "md5=14e47609397c524ea0eae7c3f14f7ccf"
29 | }
30 |
--------------------------------------------------------------------------------
/esy.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hello-jsoo-esy",
3 | "version": "0.1.0",
4 | "description": "Jsoo workflow with Reason and Esy",
5 | "license": "MIT",
6 | "esy": {
7 | "build": "refmterr dune build --force ./src/Hello.bc.js",
8 | "NOTE": "Optional release Section. Customizes result of `esy release`",
9 | "release": {
10 | "releasedBinaries": [ "Hello.exe" ],
11 | "deleteFromBinaryRelease": [ "*esy_ocaml_*", "*refmterr-*", "ocaml-*" ]
12 | }
13 | },
14 | "scripts": {
15 | "build:watch": "refmterr dune build ./src/Hello.bc.js -w",
16 | "build:prod": "refmterr dune build --profile=prod -f ./src/Hello.bc.js"
17 | },
18 | "dependencies": {
19 | "@esy-ocaml/reason": "*",
20 | "@opam/dune": "*",
21 | "@opam/js_of_ocaml": "~3.4.0",
22 | "@opam/js_of_ocaml-ppx": "~3.4.0",
23 | "jsoo-is-sorted-esy": "^0.0.4",
24 | "ocaml": "~4.8.0",
25 | "refmterr": "*"
26 | },
27 | "devDependencies": { "ocaml": "~4.8.0" }
28 | }
29 |
--------------------------------------------------------------------------------
/esy.lock/opam/js_of_ocaml-ppx.3.4.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "dev@ocsigen.org"
3 | authors: "Ocsigen team"
4 | bug-reports: "https://github.com/ocsigen/js_of_ocaml/issues"
5 | homepage: "http://ocsigen.org/js_of_ocaml"
6 | dev-repo: "git+https://github.com/ocsigen/js_of_ocaml.git"
7 | synopsis: "Compiler from OCaml bytecode to Javascript"
8 | description: """
9 | Js_of_ocaml is a compiler from OCaml bytecode to JavaScript.
10 | It makes it possible to run pure OCaml programs in JavaScript
11 | environment like browsers and Node.js
12 | """
13 |
14 | build: [["dune" "build" "-p" name "-j" jobs]]
15 |
16 | depends: [
17 | "ocaml" {>= "4.02.0"}
18 | "dune" {>= "1.2"}
19 | "ocaml-migrate-parsetree"
20 | "ppx_tools_versioned"
21 | "js_of_ocaml" {>= "3.0"}
22 | ]
23 | conflicts: [
24 | "ppx_tools_versioned" {<="5.0beta0"}
25 | ]
26 |
27 | url {
28 | src: "https://github.com/ocsigen/js_of_ocaml/archive/3.4.0.tar.gz"
29 | checksum: "md5=42f914d0410787d65668d2822fdab1a1"
30 | }
31 |
--------------------------------------------------------------------------------
/esy.lock/opam/js_of_ocaml-compiler.3.4.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "dev@ocsigen.org"
3 | authors: "Ocsigen team"
4 | bug-reports: "https://github.com/ocsigen/js_of_ocaml/issues"
5 | homepage: "http://ocsigen.org/js_of_ocaml"
6 | dev-repo: "git+https://github.com/ocsigen/js_of_ocaml.git"
7 | synopsis: "Compiler from OCaml bytecode to Javascript"
8 | description: """
9 | Js_of_ocaml is a compiler from OCaml bytecode to JavaScript.
10 | It makes it possible to run pure OCaml programs in JavaScript
11 | environment like browsers and Node.js
12 | """
13 |
14 | build: [["dune" "build" "-p" name "-j" jobs]]
15 |
16 | depends: [
17 | "ocaml" {>= "4.02.0"}
18 | "dune" {>= "1.2"}
19 | "ppx_expect" {with-test & >= "0.12.0"}
20 | "cmdliner"
21 | "cppo" {>= "1.1.0"}
22 | "ocamlfind"
23 | "yojson"
24 | ]
25 | conflicts: [
26 | "ocamlfind" {< "1.5.1"}
27 | "js_of_ocaml" {< "3.0"}
28 | ]
29 |
30 | url {
31 | src: "https://github.com/ocsigen/js_of_ocaml/archive/3.4.0.tar.gz"
32 | checksum: "md5=42f914d0410787d65668d2822fdab1a1"
33 | }
34 |
--------------------------------------------------------------------------------
/esy.lock/opam/js_of_ocaml.3.4.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "dev@ocsigen.org"
3 | authors: "Ocsigen team"
4 | bug-reports: "https://github.com/ocsigen/js_of_ocaml/issues"
5 | homepage: "http://ocsigen.org/js_of_ocaml"
6 | dev-repo: "git+https://github.com/ocsigen/js_of_ocaml.git"
7 | synopsis: "Compiler from OCaml bytecode to Javascript"
8 | description: """
9 | Js_of_ocaml is a compiler from OCaml bytecode to JavaScript.
10 | It makes it possible to run pure OCaml programs in JavaScript
11 | environment like browsers and Node.js
12 | """
13 |
14 | name: "js_of_ocaml"
15 |
16 | build: [["dune" "build" "-p" name "-j" jobs]]
17 |
18 | depends: [
19 | "ocaml" {>= "4.02.0" & < "4.09.0"}
20 | "dune" {>= "1.2"}
21 | "ocaml-migrate-parsetree"
22 | "ppx_tools_versioned"
23 | "uchar"
24 | "js_of_ocaml-compiler"
25 | ]
26 | conflicts: [
27 | "ppx_tools_versioned" {<= "5.0beta0"}
28 | ]
29 |
30 | url {
31 | src: "https://github.com/ocsigen/js_of_ocaml/archive/3.4.0.tar.gz"
32 | checksum: "md5=42f914d0410787d65668d2822fdab1a1"
33 | }
34 |
--------------------------------------------------------------------------------
/esy.lock/opam/ppx_tools_versioned.5.2.3/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "frederic.bour@lakaban.net"
3 | authors: [
4 | "Frédéric Bour "
5 | "Alain Frisch "
6 | ]
7 | license: "MIT"
8 | homepage: "https://github.com/ocaml-ppx/ppx_tools_versioned"
9 | bug-reports: "https://github.com/ocaml-ppx/ppx_tools_versioned/issues"
10 | dev-repo: "git://github.com/ocaml-ppx/ppx_tools_versioned.git"
11 | tags: [ "syntax" ]
12 | build: [
13 | ["dune" "subst"] {pinned}
14 | ["dune" "build" "-p" name "-j" jobs]
15 | ["dune" "runtest" "-p" name "-j" jobs] {with-test}
16 | ]
17 | depends: [
18 | "ocaml" {>= "4.02.0"}
19 | "dune" {>= "1.0"}
20 | "ocaml-migrate-parsetree" {>= "1.4.0"}
21 | ]
22 | synopsis: "A variant of ppx_tools based on ocaml-migrate-parsetree"
23 | url {
24 | src:
25 | "https://github.com/ocaml-ppx/ppx_tools_versioned/archive/5.2.3.tar.gz"
26 | checksum: [
27 | "md5=b1455e5a4a1bcd9ddbfcf712ccbd4262"
28 | "sha512=af20aa0031b9c638537bcdb52c75de95f316ae8fd455a38672a60da5c7c6895cca9dbecd5d56a88c3c40979c6a673a047d986b5b41e1e84b528b7df5d905b9b1"
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Javier Chávarri
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/esy.lock/opam/menhir.20190626/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "francois.pottier@inria.fr"
3 | authors: [
4 | "François Pottier "
5 | "Yann Régis-Gianas "
6 | ]
7 | homepage: "http://gitlab.inria.fr/fpottier/menhir"
8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git"
9 | bug-reports: "menhir@inria.fr"
10 | build: [
11 | [make "-f" "Makefile" "PREFIX=%{prefix}%" "USE_OCAMLFIND=true" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"]
12 | ]
13 | install: [
14 | [make "-f" "Makefile" "install" "PREFIX=%{prefix}%" "docdir=%{doc}%/menhir" "libdir=%{lib}%/menhir" "mandir=%{man}%/man1"]
15 | ]
16 | depends: [
17 | "ocaml" {>= "4.02"}
18 | "ocamlfind" {build}
19 | "ocamlbuild" {build}
20 | ]
21 | synopsis: "An LR(1) parser generator"
22 | url {
23 | src:
24 | "https://gitlab.inria.fr/fpottier/menhir/repository/20190626/archive.tar.gz"
25 | checksum: [
26 | "md5=783961f8d124449a1a335cc8e50f013f"
27 | "sha512=bacc5161682130d894a6476fb79363aa73e5582543265a0c23c9a1f9d974007c04853dc8f6faa2b8bd2e82b2323b8604dcc4cb74308af667698079b394dfd492"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/esy.lock/opam/atd.2.0.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "martin@mjambon.com"
3 | authors: ["Martin Jambon"]
4 |
5 | homepage: "https://github.com/mjambon/atd"
6 | bug-reports: "https://github.com/mjambon/atd/issues"
7 | dev-repo: "git://github.com/mjambon/atd.git"
8 |
9 | build: [
10 | ["jbuilder" "subst" "-p" name] {pinned}
11 | ["jbuilder" "build" "-p" name "-j" jobs]
12 | ]
13 |
14 | # Restore when https://github.com/mjambon/atd/issues/121 is resolved.
15 | # build-test: [
16 | # ["jbuilder" "runtest" "-p" name]
17 | # ]
18 |
19 | depends: [
20 | "ocaml" {>= "4.03.0"}
21 | "jbuilder" {build}
22 | "menhir" {build}
23 | "easy-format"
24 | ]
25 | synopsis: "Parser for the ATD data format description language"
26 | description: """
27 | ATD is the OCaml library providing a parser for the ATD language and
28 | various utilities. ATD stands for Adjustable Type Definitions in
29 | reference to its main property of supporting annotations that allow a
30 | good fit with a variety of data formats."""
31 | url {
32 | src: "https://github.com/mjambon/atd/releases/download/2.0.0/atd-2.0.0.tbz"
33 | checksum: "md5=14e47609397c524ea0eae7c3f14f7ccf"
34 | }
35 |
--------------------------------------------------------------------------------
/esy.lock/opam/merlin-extend.0.5/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "Frederic Bour "
3 | authors: "Frederic Bour "
4 | homepage: "https://github.com/let-def/merlin-extend"
5 | bug-reports: "https://github.com/let-def/merlin-extend"
6 | license: "MIT"
7 | dev-repo: "git+https://github.com/let-def/merlin-extend.git"
8 | build: [
9 | ["dune" "subst"] {pinned}
10 | ["dune" "build" "-p" name "-j" jobs]
11 | ]
12 | depends: [
13 | "dune" {>= "1.0"}
14 | "cppo" {build}
15 | "ocaml" {>= "4.02.3"}
16 | ]
17 | synopsis: "A protocol to provide custom frontend to Merlin"
18 | description: """
19 | This protocol allows to replace the OCaml frontend of Merlin.
20 | It extends what used to be done with the `-pp' flag to handle a few more cases."""
21 | doc: "https://let-def.github.io/merlin-extend"
22 | url {
23 | src:
24 | "https://github.com/let-def/merlin-extend/releases/download/v0.5/merlin-extend-v0.5.tbz"
25 | checksum: [
26 | "sha256=ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227"
27 | "sha512=55c5a3637337abb8ca8db679128a81ca8ccce567bc214d55b2e6444dc0e905b74c64d629bdea2457d0fe4be5306414feefcdbc4d4761fdafd59aa107550936b6"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.1_opam_override/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": [
3 | [
4 | "bash",
5 | "-c",
6 | "#{os == 'windows' ? 'patch -p1 < findlib-1.8.1.patch' : 'true'}"
7 | ],
8 | [
9 | "./configure",
10 | "-bindir",
11 | "#{self.bin}",
12 | "-sitelib",
13 | "#{self.lib}",
14 | "-mandir",
15 | "#{self.man}",
16 | "-config",
17 | "#{self.lib}/findlib.conf",
18 | "-no-custom",
19 | "-no-topfind"
20 | ],
21 | [
22 | "make",
23 | "all"
24 | ],
25 | [
26 | "make",
27 | "opt"
28 | ]
29 | ],
30 | "install": [
31 | [
32 | "make",
33 | "install"
34 | ],
35 | [
36 | "install",
37 | "-m",
38 | "0755",
39 | "ocaml-stub",
40 | "#{self.bin}/ocaml"
41 | ],
42 | [
43 | "mkdir",
44 | "-p",
45 | "#{self.toplevel}"
46 | ],
47 | [
48 | "install",
49 | "-m",
50 | "0644",
51 | "src/findlib/topfind",
52 | "#{self.toplevel}/topfind"
53 | ]
54 | ],
55 | "exportedEnv": {
56 | "OCAML_TOPLEVEL_PATH": {
57 | "val": "#{self.toplevel}",
58 | "scope": "global"
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/esy.lock/opam/ocamlbuild.0.14.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "Gabriel Scherer "
3 | authors: ["Nicolas Pouillard" "Berke Durak"]
4 | homepage: "https://github.com/ocaml/ocamlbuild/"
5 | bug-reports: "https://github.com/ocaml/ocamlbuild/issues"
6 | license: "LGPL-2 with OCaml linking exception"
7 | doc: "https://github.com/ocaml/ocamlbuild/blob/master/manual/manual.adoc"
8 | dev-repo: "git+https://github.com/ocaml/ocamlbuild.git"
9 | build: [
10 | [
11 | make
12 | "-f"
13 | "configure.make"
14 | "all"
15 | "OCAMLBUILD_PREFIX=%{prefix}%"
16 | "OCAMLBUILD_BINDIR=%{bin}%"
17 | "OCAMLBUILD_LIBDIR=%{lib}%"
18 | "OCAMLBUILD_MANDIR=%{man}%"
19 | "OCAML_NATIVE=%{ocaml:native}%"
20 | "OCAML_NATIVE_TOOLS=%{ocaml:native}%"
21 | ]
22 | [make "check-if-preinstalled" "all" "opam-install"]
23 | ]
24 | conflicts: [
25 | "base-ocamlbuild"
26 | "ocamlfind" {< "1.6.2"}
27 | ]
28 | synopsis:
29 | "OCamlbuild is a build system with builtin rules to easily build most OCaml projects."
30 | depends: [
31 | "ocaml" {>= "4.03"}
32 | ]
33 | url {
34 | src: "https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz"
35 | checksum: "sha256=87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78"
36 | }
37 |
--------------------------------------------------------------------------------
/esy.lock/opam/uchar.0.0.2/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "Daniel Bünzli "
3 | authors: ["Daniel Bünzli "]
4 | homepage: "http://ocaml.org"
5 | doc: "https://ocaml.github.io/uchar/"
6 | dev-repo: "git+https://github.com/ocaml/uchar.git"
7 | bug-reports: "https://github.com/ocaml/uchar/issues"
8 | tags: [ "text" "character" "unicode" "compatibility" "org:ocaml.org" ]
9 | license: "typeof OCaml system"
10 | depends: [
11 | "ocaml" {>= "3.12.0"}
12 | "ocamlbuild" {build}
13 | ]
14 | build: [
15 | ["ocaml" "pkg/git.ml"]
16 | [
17 | "ocaml"
18 | "pkg/build.ml"
19 | "native=%{ocaml:native}%"
20 | "native-dynlink=%{ocaml:native-dynlink}%"
21 | ]
22 | ]
23 | synopsis: "Compatibility library for OCaml's Uchar module"
24 | description: """
25 | The `uchar` package provides a compatibility library for the
26 | [`Uchar`][1] module introduced in OCaml 4.03.
27 |
28 | The `uchar` package is distributed under the license of the OCaml
29 | compiler. See [LICENSE](LICENSE) for details.
30 |
31 | [1]: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Uchar.html"""
32 | url {
33 | src:
34 | "https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz"
35 | checksum: "md5=c9ba2c738d264c420c642f7bb1cf4a36"
36 | }
37 |
--------------------------------------------------------------------------------
/esy.lock/opam/re.1.9.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 |
3 | maintainer: "rudi.grinberg@gmail.com"
4 | authors: [
5 | "Jerome Vouillon"
6 | "Thomas Gazagnaire"
7 | "Anil Madhavapeddy"
8 | "Rudi Grinberg"
9 | "Gabriel Radanne"
10 | ]
11 | license: "LGPL-2.0 with OCaml linking exception"
12 | homepage: "https://github.com/ocaml/ocaml-re"
13 | bug-reports: "https://github.com/ocaml/ocaml-re/issues"
14 | dev-repo: "git+https://github.com/ocaml/ocaml-re.git"
15 |
16 | build: [
17 | ["dune" "subst"] {pinned}
18 | ["dune" "build" "-p" name "-j" jobs]
19 | ["dune" "runtest" "-p" name "-j" jobs] {with-test}
20 | ]
21 |
22 | depends: [
23 | "ocaml" {>= "4.02"}
24 | "dune"
25 | "ounit" {with-test}
26 | "seq"
27 | ]
28 |
29 | synopsis: "RE is a regular expression library for OCaml"
30 | description: """
31 | Pure OCaml regular expressions with:
32 | * Perl-style regular expressions (module Re.Perl)
33 | * Posix extended regular expressions (module Re.Posix)
34 | * Emacs-style regular expressions (module Re.Emacs)
35 | * Shell-style file globbing (module Re.Glob)
36 | * Compatibility layer for OCaml's built-in Str module (module Re.Str)
37 | """
38 | url {
39 | src:
40 | "https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz"
41 | checksum: "md5=bddaed4f386a22cace7850c9c7dac296"
42 | }
43 |
--------------------------------------------------------------------------------
/esy.lock/opam/cppo.1.6.6/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "martin@mjambon.com"
3 | authors: "Martin Jambon"
4 | license: "BSD-3-Clause"
5 | homepage: "http://mjambon.com/cppo.html"
6 | doc: "https://ocaml-community.github.io/cppo/"
7 | bug-reports: "https://github.com/ocaml-community/cppo/issues"
8 | depends: [
9 | "ocaml" {>= "4.03"}
10 | "dune" {>= "1.0"}
11 | "base-unix"
12 | ]
13 | build: [
14 | ["dune" "subst"] {pinned}
15 | ["dune" "build" "-p" name "-j" jobs]
16 | ["dune" "runtest" "-p" name "-j" jobs] {with-test}
17 | ]
18 | dev-repo: "git+https://github.com/ocaml-community/cppo.git"
19 | synopsis: "Code preprocessor like cpp for OCaml"
20 | description: """
21 | Cppo is an equivalent of the C preprocessor for OCaml programs.
22 | It allows the definition of simple macros and file inclusion.
23 |
24 | Cppo is:
25 |
26 | * more OCaml-friendly than cpp
27 | * easy to learn without consulting a manual
28 | * reasonably fast
29 | * simple to install and to maintain
30 | """
31 | url {
32 | src: "https://github.com/ocaml-community/cppo/releases/download/v1.6.6/cppo-v1.6.6.tbz"
33 | checksum: [
34 | "sha256=e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0"
35 | "sha512=44ecf9d225d9e45490a2feac0bde04865ca398dba6c3579e3370fcd1ea255707b8883590852af8b2df87123801062b9f3acce2455c092deabf431f9c4fb8d8eb"
36 | ]
37 | }
38 |
--------------------------------------------------------------------------------
/esy.lock/opam/yojson.1.7.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "martin@mjambon.com"
3 | authors: ["Martin Jambon"]
4 | homepage: "https://github.com/ocaml-community/yojson"
5 | bug-reports: "https://github.com/ocaml-community/yojson/issues"
6 | dev-repo: "git+https://github.com/ocaml-community/yojson.git"
7 | doc: "https://ocaml-community.github.io/yojson/"
8 | build: [
9 | ["dune" "subst"] {pinned}
10 | ["dune" "build" "-p" name "-j" jobs]
11 | ]
12 | run-test: [["dune" "runtest" "-p" name "-j" jobs]]
13 | depends: [
14 | "ocaml" {>= "4.02.3"}
15 | "dune"
16 | "cppo" {build}
17 | "easy-format"
18 | "biniou" {>= "1.2.0"}
19 | "alcotest" {with-test & >= "0.8.5"}
20 | ]
21 | synopsis:
22 | "Yojson is an optimized parsing and printing library for the JSON format"
23 | description: """
24 | Yojson is an optimized parsing and printing library for the JSON format.
25 |
26 | It addresses a few shortcomings of json-wheel including 2x speedup,
27 | polymorphic variants and optional syntax for tuples and variants.
28 |
29 | ydump is a pretty-printing command-line program provided with the
30 | yojson package.
31 |
32 | The program atdgen can be used to derive OCaml-JSON serializers and
33 | deserializers from type definitions."""
34 | url {
35 | src:
36 | "https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz"
37 | checksum: "md5=b89d39ca3f8c532abe5f547ad3b8f84d"
38 | }
39 |
--------------------------------------------------------------------------------
/esy.lock/opam/ocaml-migrate-parsetree.1.4.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "frederic.bour@lakaban.net"
3 | authors: [
4 | "Frédéric Bour "
5 | "Jérémie Dimino "
6 | ]
7 | license: "LGPL-2.1 with OCaml linking exception"
8 | homepage: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree"
9 | bug-reports: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/issues"
10 | dev-repo: "git+https://github.com/ocaml-ppx/ocaml-migrate-parsetree.git"
11 | doc: "https://ocaml-ppx.github.io/ocaml-migrate-parsetree/"
12 | tags: [ "syntax" "org:ocamllabs" ]
13 | build: [
14 | ["dune" "build" "-p" name "-j" jobs]
15 | ]
16 | depends: [
17 | "result"
18 | "ppx_derivers"
19 | "dune" {>= "1.9.0"}
20 | "ocaml" {>= "4.02.3"}
21 | ]
22 | synopsis: "Convert OCaml parsetrees between different versions"
23 | description: """
24 | Convert OCaml parsetrees between different versions
25 |
26 | This library converts parsetrees, outcometree and ast mappers between
27 | different OCaml versions. High-level functions help making PPX
28 | rewriters independent of a compiler version.
29 | """
30 | url {
31 | src:
32 | "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.4.0/ocaml-migrate-parsetree-v1.4.0.tbz"
33 | checksum: [
34 | "sha256=231fbdc205187b3ee266b535d9cfe44b599067b2f6e97883c782ea7bb577d3b8"
35 | "sha512=61ee91d2d146cc2d2ff2d5dc4ef5dea4dc4d3c8dbd8b4c9586d64b6ad7302327ab35547aa0a5b0103c3f07b66b13d416a1bee6d4d117293cd3cabe44113ec6d4"
36 | ]
37 | }
38 |
--------------------------------------------------------------------------------
/esy.lock/opam/atdgen.2.0.0/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "martin@mjambon.com"
3 | authors: ["Martin Jambon"]
4 |
5 | homepage: "https://github.com/mjambon/atd"
6 | bug-reports: "https://github.com/mjambon/atd/issues"
7 | dev-repo: "git://github.com/mjambon/atd.git"
8 |
9 | build: [
10 | ["jbuilder" "subst" "-p" name] {pinned}
11 | ["jbuilder" "build" "-p" name "-j" jobs]
12 | ]
13 |
14 | # Restore when https://github.com/mjambon/atd/issues/121 is resolved.
15 | # build-test: [
16 | # ["jbuilder" "runtest" "-p" name]
17 | # ]
18 |
19 | depends: [
20 | "ocaml" {>= "4.03.0"}
21 | "jbuilder" {build}
22 | "atd" {>= "2.0.0"}
23 | "atdgen-runtime" {>= "2.0.0"}
24 | "biniou" {>= "1.0.6"}
25 | "yojson" {>= "1.2.1"}
26 | ]
27 | synopsis:
28 | "Generates efficient JSON serializers, deserializers and validators"
29 | description: """
30 | Atdgen is a command-line program that takes as input type definitions in the
31 | ATD syntax and produces OCaml code suitable for data serialization and
32 | deserialization.
33 |
34 | Two data formats are currently supported, these are biniou and JSON.
35 | Atdgen-biniou and Atdgen-json will refer to Atdgen used in one context or the
36 | other.
37 |
38 | Atdgen was designed with efficiency and durability in mind. Software authors
39 | are encouraged to use Atdgen directly and to write tools that may reuse part of
40 | Atdgen’s source code."""
41 | url {
42 | src: "https://github.com/mjambon/atd/releases/download/2.0.0/atd-2.0.0.tbz"
43 | checksum: "md5=14e47609397c524ea0eae7c3f14f7ccf"
44 | }
45 |
--------------------------------------------------------------------------------
/esy.lock/opam/cmdliner.1.0.4/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | maintainer: "Daniel Bünzli "
3 | authors: ["Daniel Bünzli "]
4 | homepage: "http://erratique.ch/software/cmdliner"
5 | doc: "http://erratique.ch/software/cmdliner/doc/Cmdliner"
6 | dev-repo: "git+http://erratique.ch/repos/cmdliner.git"
7 | bug-reports: "https://github.com/dbuenzli/cmdliner/issues"
8 | tags: [ "cli" "system" "declarative" "org:erratique" ]
9 | license: "ISC"
10 | depends:[ "ocaml" {>= "4.03.0"} ]
11 | build: [[ make "all" "PREFIX=%{prefix}%" ]]
12 | install:
13 | [[make "install" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ]
14 | [make "install-doc" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ]]
15 |
16 | synopsis: """Declarative definition of command line interfaces for OCaml"""
17 | description: """\
18 |
19 | Cmdliner allows the declarative definition of command line interfaces
20 | for OCaml.
21 |
22 | It provides a simple and compositional mechanism to convert command
23 | line arguments to OCaml values and pass them to your functions. The
24 | module automatically handles syntax errors, help messages and UNIX man
25 | page generation. It supports programs with single or multiple commands
26 | and respects most of the [POSIX][1] and [GNU][2] conventions.
27 |
28 | Cmdliner has no dependencies and is distributed under the ISC license.
29 |
30 | [1]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html
31 | [2]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html
32 | """
33 | url {
34 | archive: "http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz"
35 | checksum: "fe2213d0bc63b1e10a2d0aa66d2fc8d9"
36 | }
37 |
--------------------------------------------------------------------------------
/esy.lock/opam/ocamlfind.1.8.1/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | synopsis: "A library manager for OCaml"
3 | maintainer: "Thomas Gazagnaire "
4 | authors: "Gerd Stolpmann "
5 | homepage: "http://projects.camlcity.org/projects/findlib.html"
6 | bug-reports: "https://gitlab.camlcity.org/gerd/lib-findlib/issues"
7 | dev-repo: "git+https://gitlab.camlcity.org/gerd/lib-findlib.git"
8 | description: """
9 | Findlib is a library manager for OCaml. It provides a convention how
10 | to store libraries, and a file format ("META") to describe the
11 | properties of libraries. There is also a tool (ocamlfind) for
12 | interpreting the META files, so that it is very easy to use libraries
13 | in programs and scripts.
14 | """
15 | build: [
16 | [
17 | "./configure"
18 | "-bindir"
19 | bin
20 | "-sitelib"
21 | lib
22 | "-mandir"
23 | man
24 | "-config"
25 | "%{lib}%/findlib.conf"
26 | "-no-custom"
27 | "-no-camlp4" {!ocaml:preinstalled & ocaml:version >= "4.02.0"}
28 | "-no-topfind" {ocaml:preinstalled}
29 | ]
30 | [make "all"]
31 | [make "opt"] {ocaml:native}
32 | ]
33 | install: [
34 | [make "install"]
35 | ["install" "-m" "0755" "ocaml-stub" "%{bin}%/ocaml"] {ocaml:preinstalled}
36 | ]
37 | depends: [
38 | "ocaml" {>= "4.00.0"}
39 | "conf-m4" {build}
40 | ]
41 | extra-files: [
42 | ["ocamlfind.install" "md5=06f2c282ab52d93aa6adeeadd82a2543"]
43 | ["ocaml-stub" "md5=181f259c9e0bad9ef523e7d4abfdf87a"]
44 | ]
45 | url {
46 | src: "http://download.camlcity.org/download/findlib-1.8.1.tar.gz"
47 | checksum: "md5=18ca650982c15536616dea0e422cbd8c"
48 | mirrors: "http://download2.camlcity.org/download/findlib-1.8.1.tar.gz"
49 | }
50 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # hello-jsoo-esy
2 |
3 | A project that includes the minimum configuration for a [js_of_ocaml](http://ocsigen.org/js_of_ocaml/) project using Reason and [Esy](https://github.com/esy-ocaml/esy).
4 |
5 | It also includes an example showing how to integrate existing js_of_ocaml bindings: [`jsoo-is-sorted`](https://github.com/jchavarri/jsoo-is-sorted).
6 |
7 | ## Usage
8 |
9 | You need Esy, you can install the beta using [npm](https://nodejs.org/en/download/):
10 |
11 | ```sh
12 | npm install -g esy
13 | ```
14 |
15 | Install the project dependencies and build the project:
16 |
17 | ```sh
18 | esy # ocaml dependencies
19 | yarn # js dependencies (can use npm too)
20 | ```
21 |
22 | ```sh
23 | esy build:watch
24 | # in another tab
25 | yarn webpack
26 | ```
27 |
28 | After you see the webpack compilation succeed (the `yarn webpack` step), open up `build/index.html` (no server needed!). Then modify `Hello.re` file in `src` and refresh the page to see the changes.
29 |
30 | ## Run Project with Server
31 |
32 | To run with the webpack development server run `yarn server` and view in the browser at http://localhost:8000. Running in this environment provides hot reloading and support for routing; just edit and save the file and the browser will automatically refresh.
33 |
34 | To use a port other than 8000 set the `PORT` environment variable (`PORT=8080 yarn server`).
35 |
36 | ## Build for Production
37 |
38 | ```sh
39 | yarn clean
40 | esy build:prod # without sourcemaps, minified
41 | yarn webpack:production
42 | ```
43 |
44 | This will replace the development artifact `build/Index.js` for an optimized version as well as copy `src/index.html` into `build/`. You can then deploy the contents of the `build` directory (`index.html` and `Index.js`).
45 |
--------------------------------------------------------------------------------
/esy.lock/opam/easy-format.1.3.2/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | build: [
3 | ["dune" "subst"] {pinned}
4 | ["dune" "build" "-p" name "-j" jobs]
5 | ["dune" "runtest" "-p" name "-j" jobs] {with-test}
6 | ["dune" "build" "-p" name "@doc"] {with-doc}
7 | ]
8 | maintainer: ["martin@mjambon.com" "rudi.grinberg@gmail.com"]
9 | authors: ["Martin Jambon"]
10 | bug-reports: "https://github.com/mjambon/easy-format/issues"
11 | homepage: "https://github.com/mjambon/easy-format"
12 | doc: "https://mjambon.github.io/easy-format/"
13 | license: "BSD-3-Clause"
14 | dev-repo: "git+https://github.com/mjambon/easy-format.git"
15 | synopsis:
16 | "High-level and functional interface to the Format module of the OCaml standard library"
17 | description: """
18 |
19 | This module offers a high-level and functional interface to the Format module of
20 | the OCaml standard library. It is a pretty-printing facility, i.e. it takes as
21 | input some code represented as a tree and formats this code into the most
22 | visually satisfying result, breaking and indenting lines of code where
23 | appropriate.
24 |
25 | Input data must be first modelled and converted into a tree using 3 kinds of
26 | nodes:
27 |
28 | * atoms
29 | * lists
30 | * labelled nodes
31 |
32 | Atoms represent any text that is guaranteed to be printed as-is. Lists can model
33 | any sequence of items such as arrays of data or lists of definitions that are
34 | labelled with something like "int main", "let x =" or "x:"."""
35 | depends: [
36 | "dune" {>= "1.10"}
37 | "ocaml" {>= "4.02.3"}
38 | ]
39 | url {
40 | src:
41 | "https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz"
42 | checksum: [
43 | "sha256=3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926"
44 | "sha512=e39377a2ff020ceb9ac29e8515a89d9bdbc91dfcfa871c4e3baafa56753fac2896768e5d9822a050dc1e2ade43c8967afb69391a386c0a8ecd4e1f774e236135"
45 | ]
46 | }
47 |
--------------------------------------------------------------------------------
/esy.lock/opam/biniou.1.2.1/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | build: [
3 | ["dune" "subst"] {pinned}
4 | ["dune" "build" "-p" name "-j" jobs]
5 | ["dune" "runtest" "-p" name "-j" jobs] {with-test}
6 | ["dune" "build" "-p" name "@doc"] {with-doc}
7 | ]
8 | maintainer: ["martin@mjambon.com"]
9 | authors: ["Martin Jambon"]
10 | bug-reports: "https://github.com/mjambon/biniou/issues"
11 | homepage: "https://github.com/mjambon/biniou"
12 | doc: "https://mjambon.github.io/biniou/"
13 | license: "BSD-3-Clause"
14 | dev-repo: "git+https://github.com/mjambon/biniou.git"
15 | synopsis:
16 | "Binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve"
17 | description: """
18 |
19 | Biniou (pronounced "be new") is a binary data format designed for speed, safety,
20 | ease of use and backward compatibility as protocols evolve. Biniou is vastly
21 | equivalent to JSON in terms of functionality but allows implementations several
22 | times faster (4 times faster than yojson), with 25-35% space savings.
23 |
24 | Biniou data can be decoded into human-readable form without knowledge of type
25 | definitions except for field and variant names which are represented by 31-bit
26 | hashes. A program named bdump is provided for routine visualization of biniou
27 | data files.
28 |
29 | The program atdgen is used to derive OCaml-Biniou serializers and deserializers
30 | from type definitions.
31 |
32 | Biniou format specification: mjambon.github.io/atdgen-doc/biniou-format.txt"""
33 | depends: [
34 | "easy-format"
35 | "dune" {>= "1.10"}
36 | "ocaml" {>= "4.02.3"}
37 | ]
38 | url {
39 | src:
40 | "https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz"
41 | checksum: [
42 | "sha256=35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335"
43 | "sha512=82670cc77bf3e869ee26e5fbe5a5affa45a22bc8b6c4bd7e85473912780e0111baca59b34a2c14feae3543ce6e239d7fddaeab24b686a65bfe642cdb91d27ebf"
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/esy.lock/opam/dune.1.11.3/opam:
--------------------------------------------------------------------------------
1 | opam-version: "2.0"
2 | synopsis: "Fast, portable and opinionated build system"
3 | description: """
4 |
5 | dune is a build system that was designed to simplify the release of
6 | Jane Street packages. It reads metadata from "dune" files following a
7 | very simple s-expression syntax.
8 |
9 | dune is fast, it has very low-overhead and support parallel builds on
10 | all platforms. It has no system dependencies, all you need to build
11 | dune and packages using dune is OCaml. You don't need or make or bash
12 | as long as the packages themselves don't use bash explicitly.
13 |
14 | dune supports multi-package development by simply dropping multiple
15 | repositories into the same directory.
16 |
17 | It also supports multi-context builds, such as building against
18 | several opam roots/switches simultaneously. This helps maintaining
19 | packages across several versions of OCaml and gives cross-compilation
20 | for free.
21 | """
22 | maintainer: ["Jane Street Group, LLC "]
23 | authors: ["Jane Street Group, LLC "]
24 | license: "MIT"
25 | homepage: "https://github.com/ocaml/dune"
26 | doc: "https://dune.readthedocs.io/"
27 | bug-reports: "https://github.com/ocaml/dune/issues"
28 | depends: [
29 | "ocaml" {>= "4.02"}
30 | "base-unix"
31 | "base-threads"
32 | ]
33 | conflicts: [
34 | "jbuilder" {!= "transition"}
35 | "odoc" {< "1.3.0"}
36 | "dune-release" {< "1.3.0"}
37 | ]
38 | dev-repo: "git+https://github.com/ocaml/dune.git"
39 | build: [
40 | # opam 2 sets OPAM_SWITCH_PREFIX, so we don't need a hardcoded path
41 | ["ocaml" "configure.ml" "--libdir" lib] {opam-version < "2"}
42 | ["ocaml" "bootstrap.ml"]
43 | ["./boot.exe" "--release" "--subst"] {pinned}
44 | ["./boot.exe" "--release" "-j" jobs]
45 | ]
46 | url {
47 | src:
48 | "https://github.com/ocaml/dune/releases/download/1.11.3/dune-build-info-1.11.3.tbz"
49 | checksum: [
50 | "sha256=c83a63e7e8245611b0e11d6adea07c6484dc1b4efffacb176315cd6674d4bbd2"
51 | "sha512=2c1532b91d223e6ea0628c5f5174792c1bb4113a464f6d8b878b3c58be1136beb84ba2d9883a330fa20e550367588aa923ba06ffb9b615a098a21374a9377e81"
52 | ]
53 | }
54 |
--------------------------------------------------------------------------------
/src/Hello.re:
--------------------------------------------------------------------------------
1 | let oneArgument = (a: int) => a + 100;
2 |
3 | module Js = Js_of_ocaml.Js;
4 |
5 | /* Making Reason functions available in JavaScript */
6 | Js.Unsafe.global##.jsOneArgument := Js.wrap_callback(oneArgument);
7 |
8 | /* This will go to console.log */
9 | print_string("Hello from Js_of_ocaml!\n");
10 |
11 | let sayHi = () => print_string("Hi again!\n");
12 |
13 | sayHi();
14 |
15 | /* Using JavaScript functions from Reason */
16 | let log = (title, data) =>
17 | Js.Unsafe.fun_call(
18 | Js.Unsafe.js_expr("console.log"),
19 | [|title |> Js.string |> Js.Unsafe.inject, data |> Js.Unsafe.inject|],
20 | );
21 |
22 | /* Compiled to nested array with [0, value1, [0, value2, [0, value3, 0]]] */
23 | let list = [1, 2, 3, 4, 5];
24 | /* Compiled to array but with an additional `0` added at the first position*/
25 | let array = [|6, 7, 8, 9|];
26 |
27 | /* Reason strings get compiled to an object `{c, l, t}`. `c` is the string itself, `l` the length */
28 | let string = "hey";
29 | /* Compiled to 1 or 0 */
30 | let bool = true;
31 | /* Compiled to a number (no transformation) */
32 | let int = 2;
33 | /* Compiled to a number (no transformation) */
34 | let float = 13.3;
35 | /* Compiled to an array with an additional `0` added at the first position */
36 | let tuple = (13, 22);
37 |
38 | let func = a => if (a) {2} else {4};
39 |
40 | /* Defining JavaScript object types */
41 | type obj = {
42 | .
43 | "x": Js.readonly_prop(Js.t(Js.js_string)),
44 | "y": Js.prop(int),
45 | "z": Js.optdef_prop(int),
46 | };
47 |
48 | /* Declaring JavaScript objects (optional annotation) */
49 | let obj: obj = [%js
50 | {
51 | val x = Js.string("2"); /* read-only prop */
52 | val mutable y = 4; /* read/write prop */
53 | [@jsoo.optdef] val z = Js.undefined /* optdef prop */
54 | }
55 | ];
56 |
57 | /* Mutating objects */
58 | obj##.y := 2;
59 | /* Reading object properties */
60 | let dataProp = obj##.x;
61 |
62 | /* Another way of creating objects */
63 | let optInj = (prop, opt) =>
64 | switch (opt) {
65 | | Some(s) => [|(prop, Js.Unsafe.inject(s))|]
66 | | None => [||]
67 | };
68 | let create = (~x:option(string)=?, ~y:option(int)=?, ~z:option(int)=?, ()) =>
69 | optInj("x", x)
70 | |> Array.append(optInj("y", y))
71 | |> Array.append(optInj("z", z));
72 | let obj2 =
73 | Js.Unsafe.obj(create(~x="2", ~y=2, ()));
74 |
75 | type record = {
76 | one: bool,
77 | two: string,
78 | three: int
79 | };
80 | let someRecord = {
81 | one: true,
82 | two: "foo",
83 | three: 1021
84 | };
85 |
86 | log("list", list);
87 | log("array", array);
88 | log("string", string);
89 | log("bool", bool);
90 | log("int", int);
91 | log("float", float);
92 | log("tuple", tuple);
93 | log("function", func);
94 | log("obj", obj);
95 | log("obj property", dataProp);
96 | log("obj2", obj2);
97 | log("record", someRecord);
98 |
99 | /* Using a JavaScript library */
100 | log("isSorted", IsSorted.isSorted);
101 |
102 | let isSorted2 = IsSorted.isSorted([|20, 3, 124|]);
103 | log("isSorted2", isSorted2);
104 |
--------------------------------------------------------------------------------
/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.1_opam_override/files/findlib-1.8.1.patch:
--------------------------------------------------------------------------------
1 | --- ./Makefile
2 | +++ ./Makefile
3 | @@ -57,16 +57,16 @@
4 | cat findlib.conf.in | \
5 | $(SH) tools/patch '@SITELIB@' '$(OCAML_SITELIB)' >findlib.conf
6 | if ./tools/cmd_from_same_dir ocamlc; then \
7 | - echo 'ocamlc="ocamlc.opt"' >>findlib.conf; \
8 | + echo 'ocamlc="ocamlc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \
9 | fi
10 | if ./tools/cmd_from_same_dir ocamlopt; then \
11 | - echo 'ocamlopt="ocamlopt.opt"' >>findlib.conf; \
12 | + echo 'ocamlopt="ocamlopt.opt$(EXEC_SUFFIX)"' >>findlib.conf; \
13 | fi
14 | if ./tools/cmd_from_same_dir ocamldep; then \
15 | - echo 'ocamldep="ocamldep.opt"' >>findlib.conf; \
16 | + echo 'ocamldep="ocamldep.opt$(EXEC_SUFFIX)"' >>findlib.conf; \
17 | fi
18 | if ./tools/cmd_from_same_dir ocamldoc; then \
19 | - echo 'ocamldoc="ocamldoc.opt"' >>findlib.conf; \
20 | + echo 'ocamldoc="ocamldoc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \
21 | fi
22 |
23 | .PHONY: install-doc
24 | --- ./src/findlib/findlib_config.mlp
25 | +++ ./src/findlib/findlib_config.mlp
26 | @@ -24,3 +24,5 @@
27 | | "MacOS" -> "" (* don't know *)
28 | | _ -> failwith "Unknown Sys.os_type"
29 | ;;
30 | +
31 | +let exec_suffix = "@EXEC_SUFFIX@";;
32 | --- ./src/findlib/findlib.ml
33 | +++ ./src/findlib/findlib.ml
34 | @@ -28,15 +28,20 @@
35 | let conf_ldconf = ref "";;
36 | let conf_ignore_dups_in = ref ([] : string list);;
37 |
38 | -let ocamlc_default = "ocamlc";;
39 | -let ocamlopt_default = "ocamlopt";;
40 | -let ocamlcp_default = "ocamlcp";;
41 | -let ocamloptp_default = "ocamloptp";;
42 | -let ocamlmklib_default = "ocamlmklib";;
43 | -let ocamlmktop_default = "ocamlmktop";;
44 | -let ocamldep_default = "ocamldep";;
45 | -let ocamlbrowser_default = "ocamlbrowser";;
46 | -let ocamldoc_default = "ocamldoc";;
47 | +let add_exec str =
48 | + match Findlib_config.exec_suffix with
49 | + | "" -> str
50 | + | a -> str ^ a ;;
51 | +let ocamlc_default = add_exec "ocamlc";;
52 | +let ocamlopt_default = add_exec "ocamlopt";;
53 | +let ocamlcp_default = add_exec "ocamlcp";;
54 | +let ocamloptp_default = add_exec "ocamloptp";;
55 | +let ocamlmklib_default = add_exec "ocamlmklib";;
56 | +let ocamlmktop_default = add_exec "ocamlmktop";;
57 | +let ocamldep_default = add_exec "ocamldep";;
58 | +let ocamlbrowser_default = add_exec "ocamlbrowser";;
59 | +let ocamldoc_default = add_exec "ocamldoc";;
60 | +
61 |
62 |
63 | let init_manually
64 | --- ./src/findlib/fl_package_base.ml
65 | +++ ./src/findlib/fl_package_base.ml
66 | @@ -133,7 +133,15 @@
67 | List.find (fun def -> def.def_var = "exists_if") p.package_defs in
68 | let files = Fl_split.in_words def.def_value in
69 | List.exists
70 | - (fun file -> Sys.file_exists (Filename.concat d' file))
71 | + (fun file ->
72 | + let fln = Filename.concat d' file in
73 | + let e = Sys.file_exists fln in
74 | + (* necessary for ppx executables *)
75 | + if e || Sys.os_type <> "Win32" || Filename.check_suffix fln ".exe" then
76 | + e
77 | + else
78 | + Sys.file_exists (fln ^ ".exe")
79 | + )
80 | files
81 | with Not_found -> true in
82 |
83 | --- ./src/findlib/fl_split.ml
84 | +++ ./src/findlib/fl_split.ml
85 | @@ -126,10 +126,17 @@
86 | | '/' | '\\' -> true
87 | | _ -> false in
88 | let norm_dir_win() =
89 | - if l >= 1 && s.[0] = '/' then
90 | - Buffer.add_char b '\\' else Buffer.add_char b s.[0];
91 | - if l >= 2 && s.[1] = '/' then
92 | - Buffer.add_char b '\\' else Buffer.add_char b s.[1];
93 | + if l >= 1 then (
94 | + if s.[0] = '/' then
95 | + Buffer.add_char b '\\'
96 | + else
97 | + Buffer.add_char b s.[0] ;
98 | + if l >= 2 then
99 | + if s.[1] = '/' then
100 | + Buffer.add_char b '\\'
101 | + else
102 | + Buffer.add_char b s.[1];
103 | + );
104 | for k = 2 to l - 1 do
105 | let c = s.[k] in
106 | if is_slash c then (
107 | --- ./src/findlib/frontend.ml
108 | +++ ./src/findlib/frontend.ml
109 | @@ -31,10 +31,18 @@
110 | else
111 | Sys_error (arg ^ ": " ^ Unix.error_message code)
112 |
113 | +let is_win = Sys.os_type = "Win32"
114 | +
115 | +let () =
116 | + match Findlib_config.system with
117 | + | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" ->
118 | + (try set_binary_mode_out stdout true with _ -> ());
119 | + (try set_binary_mode_out stderr true with _ -> ());
120 | + | _ -> ()
121 |
122 | let slashify s =
123 | match Findlib_config.system with
124 | - | "mingw" | "mingw64" | "cygwin" ->
125 | + | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" ->
126 | let b = Buffer.create 80 in
127 | String.iter
128 | (function
129 | @@ -49,7 +57,7 @@
130 |
131 | let out_path ?(prefix="") s =
132 | match Findlib_config.system with
133 | - | "mingw" | "mingw64" | "cygwin" ->
134 | + | "win32" | "win64" | "mingw" | "mingw64" | "cygwin" ->
135 | let u = slashify s in
136 | prefix ^
137 | (if String.contains u ' ' then
138 | @@ -273,11 +281,9 @@
139 |
140 |
141 | let identify_dir d =
142 | - match Sys.os_type with
143 | - | "Win32" ->
144 | - failwith "identify_dir" (* not available *)
145 | - | _ ->
146 | - let s = Unix.stat d in
147 | + if is_win then
148 | + failwith "identify_dir"; (* not available *)
149 | + let s = Unix.stat d in
150 | (s.Unix.st_dev, s.Unix.st_ino)
151 | ;;
152 |
153 | @@ -459,6 +465,96 @@
154 | )
155 | packages
156 |
157 | +let rewrite_cmd s =
158 | + if s = "" || not is_win then
159 | + s
160 | + else
161 | + let s =
162 | + let l = String.length s in
163 | + let b = Buffer.create l in
164 | + for i = 0 to pred l do
165 | + match s.[i] with
166 | + | '/' -> Buffer.add_char b '\\'
167 | + | x -> Buffer.add_char b x
168 | + done;
169 | + Buffer.contents b
170 | + in
171 | + if (Filename.is_implicit s && String.contains s '\\' = false) ||
172 | + Filename.check_suffix (String.lowercase s) ".exe" then
173 | + s
174 | + else
175 | + let s' = s ^ ".exe" in
176 | + if Sys.file_exists s' then
177 | + s'
178 | + else
179 | + s
180 | +
181 | +let rewrite_cmd s =
182 | + if s = "" || not is_win then s else
183 | + let s =
184 | + let l = String.length s in
185 | + let b = Buffer.create l in
186 | + for i = 0 to pred l do
187 | + match s.[i] with
188 | + | '/' -> Buffer.add_char b '\\'
189 | + | x -> Buffer.add_char b x
190 | + done;
191 | + Buffer.contents b
192 | + in
193 | + if (Filename.is_implicit s && String.contains s '\\' = false) ||
194 | + Filename.check_suffix (String.lowercase s) ".exe" then
195 | + s
196 | + else
197 | + let s' = s ^ ".exe" in
198 | + if Sys.file_exists s' then
199 | + s'
200 | + else
201 | + s
202 | +
203 | +let rewrite_pp cmd =
204 | + if not is_win then cmd else
205 | + let module T = struct exception Keep end in
206 | + let is_whitespace = function
207 | + | ' ' | '\011' | '\012' | '\n' | '\r' | '\t' -> true
208 | + | _ -> false in
209 | + (* characters that triggers special behaviour (cmd.exe, not unix shell) *)
210 | + let is_unsafe_char = function
211 | + | '(' | ')' | '%' | '!' | '^' | '<' | '>' | '&' -> true
212 | + | _ -> false in
213 | + let len = String.length cmd in
214 | + let buf = Buffer.create (len + 4) in
215 | + let buf_cmd = Buffer.create len in
216 | + let rec iter_ws i =
217 | + if i >= len then () else
218 | + let cur = cmd.[i] in
219 | + if is_whitespace cur then (
220 | + Buffer.add_char buf cur;
221 | + iter_ws (succ i)
222 | + )
223 | + else
224 | + iter_cmd i
225 | + and iter_cmd i =
226 | + if i >= len then add_buf_cmd () else
227 | + let cur = cmd.[i] in
228 | + if is_unsafe_char cur || cur = '"' || cur = '\'' then
229 | + raise T.Keep;
230 | + if is_whitespace cur then (
231 | + add_buf_cmd ();
232 | + Buffer.add_substring buf cmd i (len - i)
233 | + )
234 | + else (
235 | + Buffer.add_char buf_cmd cur;
236 | + iter_cmd (succ i)
237 | + )
238 | + and add_buf_cmd () =
239 | + if Buffer.length buf_cmd > 0 then
240 | + Buffer.add_string buf (rewrite_cmd (Buffer.contents buf_cmd))
241 | + in
242 | + try
243 | + iter_ws 0;
244 | + Buffer.contents buf
245 | + with
246 | + | T.Keep -> cmd
247 |
248 | let process_pp_spec syntax_preds packages pp_opts =
249 | (* Returns: pp_command *)
250 | @@ -549,7 +645,7 @@
251 | None -> []
252 | | Some cmd ->
253 | ["-pp";
254 | - cmd ^ " " ^
255 | + (rewrite_cmd cmd) ^ " " ^
256 | String.concat " " (List.map Filename.quote pp_i_options) ^ " " ^
257 | String.concat " " (List.map Filename.quote pp_archives) ^ " " ^
258 | String.concat " " (List.map Filename.quote pp_opts)]
259 | @@ -625,9 +721,11 @@
260 | in
261 | try
262 | let preprocessor =
263 | + rewrite_cmd (
264 | resolve_path
265 | ~base ~explicit:true
266 | - (package_property predicates pname "ppx") in
267 | + (package_property predicates pname "ppx") )
268 | + in
269 | ["-ppx"; String.concat " " (preprocessor :: options)]
270 | with Not_found -> []
271 | )
272 | @@ -895,6 +993,14 @@
273 | switch (e.g. -L instead of -L )
274 | *)
275 |
276 | +(* We may need to remove files on which we do not have complete control.
277 | + On Windows, removing a read-only file fails so try to change the
278 | + mode of the file first. *)
279 | +let remove_file fname =
280 | + try Sys.remove fname
281 | + with Sys_error _ when is_win ->
282 | + (try Unix.chmod fname 0o666 with Unix.Unix_error _ -> ());
283 | + Sys.remove fname
284 |
285 | let ocamlc which () =
286 |
287 | @@ -1022,9 +1128,12 @@
288 |
289 | "-intf",
290 | Arg.String (fun s -> pass_files := !pass_files @ [ Intf(slashify s) ]);
291 | -
292 | +
293 | "-pp",
294 | - Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" s);
295 | + Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" (rewrite_pp s));
296 | +
297 | + "-ppx",
298 | + Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s));
299 |
300 | "-thread",
301 | Arg.Unit (fun _ -> threads := threads_default);
302 | @@ -1237,7 +1346,7 @@
303 | with
304 | any ->
305 | close_out initl;
306 | - Sys.remove initl_file_name;
307 | + remove_file initl_file_name;
308 | raise any
309 | end;
310 |
311 | @@ -1245,9 +1354,9 @@
312 | at_exit
313 | (fun () ->
314 | let tr f x = try f x with _ -> () in
315 | - tr Sys.remove initl_file_name;
316 | - tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmi");
317 | - tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmo");
318 | + tr remove_file initl_file_name;
319 | + tr remove_file (Filename.chop_extension initl_file_name ^ ".cmi");
320 | + tr remove_file (Filename.chop_extension initl_file_name ^ ".cmo");
321 | );
322 |
323 | let exclude_list = [ stdlibdir; threads_dir; vmthreads_dir ] in
324 | @@ -1493,7 +1602,9 @@
325 | [ "-v", Arg.Unit (fun () -> verbose := Verbose);
326 | "-pp", Arg.String (fun s ->
327 | pp_specified := true;
328 | - options := !options @ ["-pp"; s]);
329 | + options := !options @ ["-pp"; rewrite_pp s]);
330 | + "-ppx", Arg.String (fun s ->
331 | + options := !options @ ["-ppx"; rewrite_pp s]);
332 | ]
333 | )
334 | )
335 | @@ -1672,7 +1783,9 @@
336 | Arg.String (fun s -> add_spec_fn "-I" (slashify (resolve_path s)));
337 |
338 | "-pp", Arg.String (fun s -> pp_specified := true;
339 | - add_spec_fn "-pp" s);
340 | + add_spec_fn "-pp" (rewrite_pp s));
341 | + "-ppx", Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s));
342 | +
343 | ]
344 | )
345 | )
346 | @@ -1830,7 +1943,10 @@
347 | output_string ch_out append;
348 | close_out ch_out;
349 | close_in ch_in;
350 | - Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime;
351 | + (try Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime
352 | + with Unix.Unix_error(e,_,_) ->
353 | + prerr_endline("Warning: setting utimes for " ^ outpath
354 | + ^ ": " ^ Unix.error_message e));
355 |
356 | prerr_endline("Installed " ^ outpath);
357 | with
358 | @@ -1882,6 +1998,8 @@
359 | Unix.openfile (Filename.concat dir owner_file) [Unix.O_RDONLY] 0 in
360 | let f =
361 | Unix.in_channel_of_descr fd in
362 | + if is_win then
363 | + set_binary_mode_in f false;
364 | try
365 | let line = input_line f in
366 | let is_my_file = (line = pkg) in
367 | @@ -2208,7 +2326,7 @@
368 | let lines = read_ldconf !ldconf in
369 | let dlldir_norm = Fl_split.norm_dir dlldir in
370 | let dlldir_norm_lc = string_lowercase_ascii dlldir_norm in
371 | - let ci_filesys = (Sys.os_type = "Win32") in
372 | + let ci_filesys = is_win in
373 | let check_dir d =
374 | let d' = Fl_split.norm_dir d in
375 | (d' = dlldir_norm) ||
376 | @@ -2356,7 +2474,7 @@
377 | List.iter
378 | (fun file ->
379 | let absfile = Filename.concat dlldir file in
380 | - Sys.remove absfile;
381 | + remove_file absfile;
382 | prerr_endline ("Removed " ^ absfile)
383 | )
384 | dll_files
385 | @@ -2365,7 +2483,7 @@
386 | (* Remove the files from the package directory: *)
387 | if Sys.file_exists pkgdir then begin
388 | let files = Sys.readdir pkgdir in
389 | - Array.iter (fun f -> Sys.remove (Filename.concat pkgdir f)) files;
390 | + Array.iter (fun f -> remove_file (Filename.concat pkgdir f)) files;
391 | Unix.rmdir pkgdir;
392 | prerr_endline ("Removed " ^ pkgdir)
393 | end
394 | @@ -2415,7 +2533,9 @@
395 |
396 |
397 | let print_configuration() =
398 | + let sl = slashify in
399 | let dir s =
400 | + let s = sl s in
401 | if Sys.file_exists s then
402 | s
403 | else
404 | @@ -2453,27 +2573,27 @@
405 | if md = "" then "the corresponding package directories" else dir md
406 | );
407 | Printf.printf "The standard library is assumed to reside in:\n %s\n"
408 | - (Findlib.ocaml_stdlib());
409 | + (sl (Findlib.ocaml_stdlib()));
410 | Printf.printf "The ld.conf file can be found here:\n %s\n"
411 | - (Findlib.ocaml_ldconf());
412 | + (sl (Findlib.ocaml_ldconf()));
413 | flush stdout
414 | | Some "conf" ->
415 | - print_endline (Findlib.config_file())
416 | + print_endline (sl (Findlib.config_file()))
417 | | Some "path" ->
418 | - List.iter print_endline (Findlib.search_path())
419 | + List.iter ( fun x -> print_endline (sl x)) (Findlib.search_path())
420 | | Some "destdir" ->
421 | - print_endline (Findlib.default_location())
422 | + print_endline ( sl (Findlib.default_location()))
423 | | Some "metadir" ->
424 | - print_endline (Findlib.meta_directory())
425 | + print_endline ( sl (Findlib.meta_directory()))
426 | | Some "metapath" ->
427 | let mdir = Findlib.meta_directory() in
428 | let ddir = Findlib.default_location() in
429 | - print_endline
430 | - (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META")
431 | + print_endline ( sl
432 | + (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META"))
433 | | Some "stdlib" ->
434 | - print_endline (Findlib.ocaml_stdlib())
435 | + print_endline ( sl (Findlib.ocaml_stdlib()))
436 | | Some "ldconf" ->
437 | - print_endline (Findlib.ocaml_ldconf())
438 | + print_endline ( sl (Findlib.ocaml_ldconf()))
439 | | _ ->
440 | assert false
441 | ;;
442 | @@ -2481,7 +2601,7 @@
443 |
444 | let ocamlcall pkg cmd =
445 | let dir = package_directory pkg in
446 | - let path = Filename.concat dir cmd in
447 | + let path = rewrite_cmd (Filename.concat dir cmd) in
448 | begin
449 | try Unix.access path [ Unix.X_OK ]
450 | with
451 | @@ -2647,6 +2767,10 @@
452 | | Sys_error f ->
453 | prerr_endline ("ocamlfind: " ^ f);
454 | exit 2
455 | + | Unix.Unix_error (e, fn, f) ->
456 | + prerr_endline ("ocamlfind: " ^ fn ^ " " ^ f
457 | + ^ ": " ^ Unix.error_message e);
458 | + exit 2
459 | | Findlib.No_such_package(pkg,info) ->
460 | prerr_endline ("ocamlfind: Package `" ^ pkg ^ "' not found" ^
461 | (if info <> "" then " - " ^ info else ""));
462 | --- ./src/findlib/Makefile
463 | +++ ./src/findlib/Makefile
464 | @@ -90,6 +90,7 @@
465 | cat findlib_config.mlp | \
466 | $(SH) $(TOP)/tools/patch '@CONFIGFILE@' '$(OCAMLFIND_CONF)' | \
467 | $(SH) $(TOP)/tools/patch '@STDLIB@' '$(OCAML_CORE_STDLIB)' | \
468 | + $(SH) $(TOP)/tools/patch '@EXEC_SUFFIX@' '$(EXEC_SUFFIX)' | \
469 | sed -e 's;@AUTOLINK@;$(OCAML_AUTOLINK);g' \
470 | -e 's;@SYSTEM@;$(SYSTEM);g' \
471 | >findlib_config.ml
472 |
--------------------------------------------------------------------------------
/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override/files/ocamlbuild-0.14.0.patch:
--------------------------------------------------------------------------------
1 | --- ./Makefile
2 | +++ ./Makefile
3 | @@ -213,7 +213,7 @@
4 | rm -f man/ocamlbuild.1
5 |
6 | man/options_man.byte: src/ocamlbuild_pack.cmo
7 | - $(OCAMLC) $^ -I src man/options_man.ml -o man/options_man.byte
8 | + $(OCAMLC) -I +unix unix.cma $^ -I src man/options_man.ml -o man/options_man.byte
9 |
10 | clean::
11 | rm -f man/options_man.cm*
12 | --- ./src/command.ml
13 | +++ ./src/command.ml
14 | @@ -148,9 +148,10 @@
15 | let self = string_of_command_spec_with_calls call_with_tags call_with_target resolve_virtuals in
16 | let b = Buffer.create 256 in
17 | (* The best way to prevent bash from switching to its windows-style
18 | - * quote-handling is to prepend an empty string before the command name. *)
19 | + * quote-handling is to prepend an empty string before the command name.
20 | + * space seems to work, too - and the ouput is nicer *)
21 | if Sys.os_type = "Win32" then
22 | - Buffer.add_string b "''";
23 | + Buffer.add_char b ' ';
24 | let first = ref true in
25 | let put_space () =
26 | if !first then
27 | @@ -260,7 +261,7 @@
28 |
29 | let execute_many ?(quiet=false) ?(pretend=false) cmds =
30 | add_parallel_stat (List.length cmds);
31 | - let degraded = !*My_unix.is_degraded || Sys.os_type = "Win32" in
32 | + let degraded = !*My_unix.is_degraded in
33 | let jobs = !jobs in
34 | if jobs < 0 then invalid_arg "jobs < 0";
35 | let max_jobs = if jobs = 0 then None else Some jobs in
36 | --- ./src/findlib.ml
37 | +++ ./src/findlib.ml
38 | @@ -66,9 +66,6 @@
39 | (fun command -> lexer & Lexing.from_string & run_and_read command)
40 | command
41 |
42 | -let run_and_read command =
43 | - Printf.ksprintf run_and_read command
44 | -
45 | let rec query name =
46 | try
47 | Hashtbl.find packages name
48 | @@ -135,7 +132,8 @@
49 | with Not_found -> s
50 |
51 | let list () =
52 | - List.map before_space (split_nl & run_and_read "%s list" ocamlfind)
53 | + let cmd = Shell.quote_filename_if_needed ocamlfind ^ " list" in
54 | + List.map before_space (split_nl & run_and_read cmd)
55 |
56 | (* The closure algorithm is easy because the dependencies are already closed
57 | and sorted for each package. We only have to make the union. We could also
58 | --- ./src/main.ml
59 | +++ ./src/main.ml
60 | @@ -162,6 +162,9 @@
61 | Tags.mem "traverse" tags
62 | || List.exists (Pathname.is_prefix path_name) !Options.include_dirs
63 | || List.exists (Pathname.is_prefix path_name) target_dirs)
64 | + && ((* beware: !Options.build_dir is an absolute directory *)
65 | + Pathname.normalize !Options.build_dir
66 | + <> Pathname.normalize (Pathname.pwd/path_name))
67 | end
68 | end
69 | end
70 | --- ./src/my_std.ml
71 | +++ ./src/my_std.ml
72 | @@ -271,13 +271,107 @@
73 | try Array.iter (fun x -> if x = basename then raise Exit) a; false
74 | with Exit -> true
75 |
76 | +let command_plain = function
77 | +| [| |] -> 0
78 | +| margv ->
79 | + let rec waitpid a b =
80 | + match Unix.waitpid a b with
81 | + | exception (Unix.Unix_error(Unix.EINTR,_,_)) -> waitpid a b
82 | + | x -> x
83 | + in
84 | + let pid = Unix.(create_process margv.(0) margv stdin stdout stderr) in
85 | + let pid', process_status = waitpid [] pid in
86 | + assert (pid = pid');
87 | + match process_status with
88 | + | Unix.WEXITED n -> n
89 | + | Unix.WSIGNALED _ -> 2 (* like OCaml's uncaught exceptions *)
90 | + | Unix.WSTOPPED _ -> 127
91 | +
92 | +(* can't use Lexers because of circular dependency *)
93 | +let split_path_win str =
94 | + let rec aux pos =
95 | + try
96 | + let i = String.index_from str pos ';' in
97 | + let len = i - pos in
98 | + if len = 0 then
99 | + aux (succ i)
100 | + else
101 | + String.sub str pos (i - pos) :: aux (succ i)
102 | + with Not_found | Invalid_argument _ ->
103 | + let len = String.length str - pos in
104 | + if len = 0 then [] else [String.sub str pos len]
105 | + in
106 | + aux 0
107 | +
108 | +let windows_shell = lazy begin
109 | + let rec iter = function
110 | + | [] -> [| "bash.exe" ; "--norc" ; "--noprofile" |]
111 | + | hd::tl ->
112 | + let dash = Filename.concat hd "dash.exe" in
113 | + if Sys.file_exists dash then [|dash|] else
114 | + let bash = Filename.concat hd "bash.exe" in
115 | + if Sys.file_exists bash = false then iter tl else
116 | + (* if sh.exe and bash.exe exist in the same dir, choose sh.exe *)
117 | + let sh = Filename.concat hd "sh.exe" in
118 | + if Sys.file_exists sh then [|sh|] else [|bash ; "--norc" ; "--noprofile"|]
119 | + in
120 | + split_path_win (try Sys.getenv "PATH" with Not_found -> "") |> iter
121 | +end
122 | +
123 | +let prep_windows_cmd cmd =
124 | + (* workaround known ocaml bug, remove later *)
125 | + if String.contains cmd '\t' && String.contains cmd ' ' = false then
126 | + " " ^ cmd
127 | + else
128 | + cmd
129 | +
130 | +let run_with_shell = function
131 | +| "" -> 0
132 | +| cmd ->
133 | + let cmd = prep_windows_cmd cmd in
134 | + let shell = Lazy.force windows_shell in
135 | + let qlen = Filename.quote cmd |> String.length in
136 | + (* old versions of dash had problems with bs *)
137 | + try
138 | + if qlen < 7_900 then
139 | + command_plain (Array.append shell [| "-ec" ; cmd |])
140 | + else begin
141 | + (* it can still work, if the called command is a cygwin tool *)
142 | + let ch_closed = ref false in
143 | + let file_deleted = ref false in
144 | + let fln,ch =
145 | + Filename.open_temp_file
146 | + ~mode:[Open_binary]
147 | + "ocamlbuildtmp"
148 | + ".sh"
149 | + in
150 | + try
151 | + let f_slash = String.map ( fun x -> if x = '\\' then '/' else x ) fln in
152 | + output_string ch cmd;
153 | + ch_closed:= true;
154 | + close_out ch;
155 | + let ret = command_plain (Array.append shell [| "-e" ; f_slash |]) in
156 | + file_deleted:= true;
157 | + Sys.remove fln;
158 | + ret
159 | + with
160 | + | x ->
161 | + if !ch_closed = false then
162 | + close_out_noerr ch;
163 | + if !file_deleted = false then
164 | + (try Sys.remove fln with _ -> ());
165 | + raise x
166 | + end
167 | + with
168 | + | (Unix.Unix_error _) as x ->
169 | + (* Sys.command doesn't raise an exception, so run_with_shell also won't
170 | + raise *)
171 | + Printexc.to_string x ^ ":" ^ cmd |> prerr_endline;
172 | + 1
173 | +
174 | let sys_command =
175 | - match Sys.os_type with
176 | - | "Win32" -> fun cmd ->
177 | - if cmd = "" then 0 else
178 | - let cmd = "bash --norc -c " ^ Filename.quote cmd in
179 | - Sys.command cmd
180 | - | _ -> fun cmd -> if cmd = "" then 0 else Sys.command cmd
181 | + if Sys.win32 then run_with_shell
182 | + else fun cmd -> if cmd = "" then 0 else Sys.command cmd
183 |
184 | (* FIXME warning fix and use Filename.concat *)
185 | let filename_concat x y =
186 | --- ./src/my_std.mli
187 | +++ ./src/my_std.mli
188 | @@ -69,3 +69,6 @@
189 |
190 | val split_ocaml_version : (int * int * int * string) option
191 | (** (major, minor, patchlevel, rest) *)
192 | +
193 | +val windows_shell : string array Lazy.t
194 | +val prep_windows_cmd : string -> string
195 | --- ./src/ocamlbuild_executor.ml
196 | +++ ./src/ocamlbuild_executor.ml
197 | @@ -34,6 +34,8 @@
198 | job_stdin : out_channel;
199 | job_stderr : in_channel;
200 | job_buffer : Buffer.t;
201 | + job_pid : int;
202 | + job_tmp_file: string option;
203 | mutable job_dying : bool;
204 | };;
205 |
206 | @@ -76,6 +78,61 @@
207 | in
208 | loop 0
209 | ;;
210 | +
211 | +let open_process_full_win cmd env =
212 | + let (in_read, in_write) = Unix.pipe () in
213 | + let (out_read, out_write) = Unix.pipe () in
214 | + let (err_read, err_write) = Unix.pipe () in
215 | + Unix.set_close_on_exec in_read;
216 | + Unix.set_close_on_exec out_write;
217 | + Unix.set_close_on_exec err_read;
218 | + let inchan = Unix.in_channel_of_descr in_read in
219 | + let outchan = Unix.out_channel_of_descr out_write in
220 | + let errchan = Unix.in_channel_of_descr err_read in
221 | + let shell = Lazy.force Ocamlbuild_pack.My_std.windows_shell in
222 | + let test_cmd =
223 | + String.concat " " (List.map Filename.quote (Array.to_list shell)) ^
224 | + "-ec " ^
225 | + Filename.quote (Ocamlbuild_pack.My_std.prep_windows_cmd cmd) in
226 | + let argv,tmp_file =
227 | + if String.length test_cmd < 7_900 then
228 | + Array.append
229 | + shell
230 | + [| "-ec" ; Ocamlbuild_pack.My_std.prep_windows_cmd cmd |],None
231 | + else
232 | + let fln,ch = Filename.open_temp_file ~mode:[Open_binary] "ocamlbuild" ".sh" in
233 | + output_string ch (Ocamlbuild_pack.My_std.prep_windows_cmd cmd);
234 | + close_out ch;
235 | + let fln' = String.map (function '\\' -> '/' | c -> c) fln in
236 | + Array.append
237 | + shell
238 | + [| "-c" ; fln' |], Some fln in
239 | + let pid =
240 | + Unix.create_process_env argv.(0) argv env out_read in_write err_write in
241 | + Unix.close out_read;
242 | + Unix.close in_write;
243 | + Unix.close err_write;
244 | + (pid, inchan, outchan, errchan,tmp_file)
245 | +
246 | +let close_process_full_win (pid,inchan, outchan, errchan, tmp_file) =
247 | + let delete tmp_file =
248 | + match tmp_file with
249 | + | None -> ()
250 | + | Some x -> try Sys.remove x with Sys_error _ -> () in
251 | + let tmp_file_deleted = ref false in
252 | + try
253 | + close_in inchan;
254 | + close_out outchan;
255 | + close_in errchan;
256 | + let res = snd(Unix.waitpid [] pid) in
257 | + tmp_file_deleted := true;
258 | + delete tmp_file;
259 | + res
260 | + with
261 | + | x when tmp_file <> None && !tmp_file_deleted = false ->
262 | + delete tmp_file;
263 | + raise x
264 | +
265 | (* ***)
266 | (*** execute *)
267 | (* XXX: Add test for non reentrancy *)
268 | @@ -130,10 +187,16 @@
269 | (*** add_job *)
270 | let add_job cmd rest result id =
271 | (*display begin fun oc -> fp oc "Job %a is %s\n%!" print_job_id id cmd; end;*)
272 | - let (stdout', stdin', stderr') = open_process_full cmd env in
273 | + let (pid,stdout', stdin', stderr', tmp_file) =
274 | + if Sys.win32 then open_process_full_win cmd env else
275 | + let a,b,c = open_process_full cmd env in
276 | + -1,a,b,c,None
277 | + in
278 | incr jobs_active;
279 | - set_nonblock (doi stdout');
280 | - set_nonblock (doi stderr');
281 | + if not Sys.win32 then (
282 | + set_nonblock (doi stdout');
283 | + set_nonblock (doi stderr');
284 | + );
285 | let job =
286 | { job_id = id;
287 | job_command = cmd;
288 | @@ -143,7 +206,9 @@
289 | job_stdin = stdin';
290 | job_stderr = stderr';
291 | job_buffer = Buffer.create 1024;
292 | - job_dying = false }
293 | + job_dying = false;
294 | + job_tmp_file = tmp_file;
295 | + job_pid = pid }
296 | in
297 | outputs := FDM.add (doi stdout') job (FDM.add (doi stderr') job !outputs);
298 | jobs := JS.add job !jobs;
299 | @@ -199,6 +264,7 @@
300 | try
301 | read fd u 0 (Bytes.length u)
302 | with
303 | + | Unix.Unix_error(Unix.EPIPE,_,_) when Sys.win32 -> 0
304 | | Unix.Unix_error(e,_,_) ->
305 | let msg = error_message e in
306 | display (fun oc -> fp oc
307 | @@ -241,14 +307,19 @@
308 | decr jobs_active;
309 |
310 | (* PR#5371: we would get EAGAIN below otherwise *)
311 | - clear_nonblock (doi job.job_stdout);
312 | - clear_nonblock (doi job.job_stderr);
313 | -
314 | + if not Sys.win32 then (
315 | + clear_nonblock (doi job.job_stdout);
316 | + clear_nonblock (doi job.job_stderr);
317 | + );
318 | do_read ~loop:true (doi job.job_stdout) job;
319 | do_read ~loop:true (doi job.job_stderr) job;
320 | outputs := FDM.remove (doi job.job_stdout) (FDM.remove (doi job.job_stderr) !outputs);
321 | jobs := JS.remove job !jobs;
322 | - let status = close_process_full (job.job_stdout, job.job_stdin, job.job_stderr) in
323 | + let status =
324 | + if Sys.win32 then
325 | + close_process_full_win (job.job_pid, job.job_stdout, job.job_stdin, job.job_stderr, job.job_tmp_file)
326 | + else
327 | + close_process_full (job.job_stdout, job.job_stdin, job.job_stderr) in
328 |
329 | let shown = ref false in
330 |
331 | --- ./src/ocamlbuild_unix_plugin.ml
332 | +++ ./src/ocamlbuild_unix_plugin.ml
333 | @@ -48,12 +48,22 @@
334 | end
335 |
336 | let run_and_open s kont =
337 | + let s_orig = s in
338 | + let s =
339 | + (* Be consistent! My_unix.run_and_open uses My_std.sys_command and
340 | + sys_command uses bash. *)
341 | + if Sys.win32 = false then s else
342 | + let l = match Lazy.force My_std.windows_shell |> Array.to_list with
343 | + | hd::tl -> (Filename.quote hd)::tl
344 | + | _ -> assert false in
345 | + "\"" ^ (String.concat " " l) ^ " -ec " ^ Filename.quote (" " ^ s) ^ "\""
346 | + in
347 | let ic = Unix.open_process_in s in
348 | let close () =
349 | match Unix.close_process_in ic with
350 | | Unix.WEXITED 0 -> ()
351 | | Unix.WEXITED _ | Unix.WSIGNALED _ | Unix.WSTOPPED _ ->
352 | - failwith (Printf.sprintf "Error while running: %s" s) in
353 | + failwith (Printf.sprintf "Error while running: %s" s_orig) in
354 | let res = try
355 | kont ic
356 | with e -> (close (); raise e)
357 | --- ./src/options.ml
358 | +++ ./src/options.ml
359 | @@ -174,11 +174,24 @@
360 | build_dir := Filename.concat (Sys.getcwd ()) s
361 | else
362 | build_dir := s
363 | +
364 | +let slashify =
365 | + if Sys.win32 then fun p -> String.map (function '\\' -> '/' | x -> x) p
366 | + else fun p ->p
367 | +
368 | +let sb () =
369 | + match Sys.os_type with
370 | + | "Win32" ->
371 | + (try set_binary_mode_out stdout true with _ -> ());
372 | + | _ -> ()
373 | +
374 | +
375 | let spec = ref (
376 | let print_version () =
377 | + sb ();
378 | Printf.printf "ocamlbuild %s\n%!" Ocamlbuild_config.version; raise Exit_OK
379 | in
380 | - let print_vnum () = print_endline Ocamlbuild_config.version; raise Exit_OK in
381 | + let print_vnum () = sb (); print_endline Ocamlbuild_config.version; raise Exit_OK in
382 | Arg.align
383 | [
384 | "-version", Unit print_version , " Display the version";
385 | @@ -257,8 +270,8 @@
386 | "-build-dir", String set_build_dir, " Set build directory (implies no-links)";
387 | "-install-lib-dir", Set_string Ocamlbuild_where.libdir, " Set the install library directory";
388 | "-install-bin-dir", Set_string Ocamlbuild_where.bindir, " Set the install binary directory";
389 | - "-where", Unit (fun () -> print_endline !Ocamlbuild_where.libdir; raise Exit_OK), " Display the install library directory";
390 | - "-which", String (fun cmd -> print_endline (find_tool cmd); raise Exit_OK), " Display path to the tool command";
391 | + "-where", Unit (fun () -> sb (); print_endline (slashify !Ocamlbuild_where.libdir); raise Exit_OK), " Display the install library directory";
392 | + "-which", String (fun cmd -> sb (); print_endline (slashify (find_tool cmd)); raise Exit_OK), " Display path to the tool command";
393 | "-ocamlc", set_cmd ocamlc, " Set the OCaml bytecode compiler";
394 | "-plugin-ocamlc", set_cmd plugin_ocamlc, " Set the OCaml bytecode compiler \
395 | used when building myocamlbuild.ml (only)";
396 | --- ./src/pathname.ml
397 | +++ ./src/pathname.ml
398 | @@ -84,6 +84,26 @@
399 | | x :: xs -> x :: normalize_list xs
400 |
401 | let normalize x =
402 | + let x =
403 | + if Sys.win32 = false then
404 | + x
405 | + else
406 | + let len = String.length x in
407 | + let b = Bytes.create len in
408 | + for i = 0 to pred len do
409 | + match x.[i] with
410 | + | '\\' -> Bytes.set b i '/'
411 | + | c -> Bytes.set b i c
412 | + done;
413 | + if len > 1 then (
414 | + let c1 = Bytes.get b 0 in
415 | + let c2 = Bytes.get b 1 in
416 | + if c2 = ':' && c1 >= 'a' && c1 <= 'z' &&
417 | + ( len = 2 || Bytes.get b 2 = '/') then
418 | + Bytes.set b 0 (Char.uppercase_ascii c1)
419 | + );
420 | + Bytes.unsafe_to_string b
421 | + in
422 | if Glob.eval not_normal_form_re x then
423 | let root, paths = split x in
424 | join root (normalize_list paths)
425 | --- ./src/shell.ml
426 | +++ ./src/shell.ml
427 | @@ -24,12 +24,26 @@
428 | | 'a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '-' | '/' | '_' | ':' | '@' | '+' | ',' -> loop (pos + 1)
429 | | _ -> false in
430 | loop 0
431 | +
432 | +let generic_quote quotequote s =
433 | + let l = String.length s in
434 | + let b = Buffer.create (l + 20) in
435 | + Buffer.add_char b '\'';
436 | + for i = 0 to l - 1 do
437 | + if s.[i] = '\''
438 | + then Buffer.add_string b quotequote
439 | + else Buffer.add_char b s.[i]
440 | + done;
441 | + Buffer.add_char b '\'';
442 | + Buffer.contents b
443 | +let unix_quote = generic_quote "'\\''"
444 | +
445 | let quote_filename_if_needed s =
446 | if is_simple_filename s then s
447 | (* We should probably be using [Filename.unix_quote] except that function
448 | * isn't exported. Users on Windows will have to live with not being able to
449 | * install OCaml into c:\o'caml. Too bad. *)
450 | - else if Sys.os_type = "Win32" then Printf.sprintf "'%s'" s
451 | + else if Sys.os_type = "Win32" then unix_quote s
452 | else Filename.quote s
453 | let chdir dir =
454 | reset_filesys_cache ();
455 | @@ -37,7 +51,7 @@
456 | let run args target =
457 | reset_readdir_cache ();
458 | let cmd = String.concat " " (List.map quote_filename_if_needed args) in
459 | - if !*My_unix.is_degraded || Sys.os_type = "Win32" then
460 | + if !*My_unix.is_degraded then
461 | begin
462 | Log.event cmd target Tags.empty;
463 | let st = sys_command cmd in
464 |
--------------------------------------------------------------------------------
/esy.lock/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "checksum": "22d5ad43a697718502ad5e0974db9a1f",
3 | "root": "hello-jsoo-esy@link-dev:./esy.json",
4 | "node": {
5 | "refmterr@3.2.2@d41d8cd9": {
6 | "id": "refmterr@3.2.2@d41d8cd9",
7 | "name": "refmterr",
8 | "version": "3.2.2",
9 | "source": {
10 | "type": "install",
11 | "source": [
12 | "archive:https://registry.npmjs.org/refmterr/-/refmterr-3.2.2.tgz#sha1:b7d6c5df6a37633ec82d339dc609b1867e54e55e"
13 | ]
14 | },
15 | "overrides": [],
16 | "dependencies": [
17 | "ocaml@4.8.1000@d41d8cd9", "@reason-native/pastel@0.2.1@d41d8cd9",
18 | "@reason-native/console@0.1.0@d41d8cd9",
19 | "@opam/re@opam:1.9.0@fc2ceb05", "@opam/dune@opam:1.11.3@9894df55",
20 | "@opam/atdgen@opam:2.0.0@5d912e07",
21 | "@esy-ocaml/reason@3.5.0@d41d8cd9"
22 | ],
23 | "devDependencies": []
24 | },
25 | "ocaml@4.8.1000@d41d8cd9": {
26 | "id": "ocaml@4.8.1000@d41d8cd9",
27 | "name": "ocaml",
28 | "version": "4.8.1000",
29 | "source": {
30 | "type": "install",
31 | "source": [
32 | "archive:https://registry.npmjs.org/ocaml/-/ocaml-4.8.1000.tgz#sha1:abc435b5d4ddea2acba8b2df7efb81e2d1690db1"
33 | ]
34 | },
35 | "overrides": [],
36 | "dependencies": [],
37 | "devDependencies": []
38 | },
39 | "jsoo-is-sorted-esy@0.0.4@d41d8cd9": {
40 | "id": "jsoo-is-sorted-esy@0.0.4@d41d8cd9",
41 | "name": "jsoo-is-sorted-esy",
42 | "version": "0.0.4",
43 | "source": {
44 | "type": "install",
45 | "source": [
46 | "archive:https://registry.npmjs.org/jsoo-is-sorted-esy/-/jsoo-is-sorted-esy-0.0.4.tgz#sha1:9b4e40bc2e7d358143b863be2b8e48a5e3cc0111"
47 | ]
48 | },
49 | "overrides": [],
50 | "dependencies": [
51 | "refmterr@3.2.2@d41d8cd9", "ocaml@4.8.1000@d41d8cd9",
52 | "@opam/gen_js_api@github:LexiFi/gen_js_api:gen_js_api.opam#0743a4a@d41d8cd9",
53 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/reason@3.5.0@d41d8cd9"
54 | ],
55 | "devDependencies": []
56 | },
57 | "hello-jsoo-esy@link-dev:./esy.json": {
58 | "id": "hello-jsoo-esy@link-dev:./esy.json",
59 | "name": "hello-jsoo-esy",
60 | "version": "link-dev:./esy.json",
61 | "source": { "type": "link-dev", "path": ".", "manifest": "esy.json" },
62 | "overrides": [],
63 | "dependencies": [
64 | "refmterr@3.2.2@d41d8cd9", "ocaml@4.8.1000@d41d8cd9",
65 | "jsoo-is-sorted-esy@0.0.4@d41d8cd9",
66 | "@opam/js_of_ocaml-ppx@opam:3.4.0@9743829e",
67 | "@opam/js_of_ocaml@opam:3.4.0@d8a98a2c",
68 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/reason@3.5.0@d41d8cd9"
69 | ],
70 | "devDependencies": [ "ocaml@4.8.1000@d41d8cd9" ]
71 | },
72 | "@reason-native/pastel@0.2.1@d41d8cd9": {
73 | "id": "@reason-native/pastel@0.2.1@d41d8cd9",
74 | "name": "@reason-native/pastel",
75 | "version": "0.2.1",
76 | "source": {
77 | "type": "install",
78 | "source": [
79 | "archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.2.1.tgz#sha1:c790b51e963ac94a0de141be0a8e4d077905978b"
80 | ]
81 | },
82 | "overrides": [],
83 | "dependencies": [
84 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
85 | "@esy-ocaml/reason@3.5.0@d41d8cd9"
86 | ],
87 | "devDependencies": []
88 | },
89 | "@reason-native/console@0.1.0@d41d8cd9": {
90 | "id": "@reason-native/console@0.1.0@d41d8cd9",
91 | "name": "@reason-native/console",
92 | "version": "0.1.0",
93 | "source": {
94 | "type": "install",
95 | "source": [
96 | "archive:https://registry.npmjs.org/@reason-native/console/-/console-0.1.0.tgz#sha1:3b56f0e9e1be8464329793df29020aa90e71c22c"
97 | ]
98 | },
99 | "overrides": [],
100 | "dependencies": [
101 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
102 | "@esy-ocaml/reason@3.5.0@d41d8cd9"
103 | ],
104 | "devDependencies": []
105 | },
106 | "@opam/yojson@opam:1.7.0@7056d985": {
107 | "id": "@opam/yojson@opam:1.7.0@7056d985",
108 | "name": "@opam/yojson",
109 | "version": "opam:1.7.0",
110 | "source": {
111 | "type": "install",
112 | "source": [
113 | "archive:https://opam.ocaml.org/cache/md5/b8/b89d39ca3f8c532abe5f547ad3b8f84d#md5:b89d39ca3f8c532abe5f547ad3b8f84d",
114 | "archive:https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz#md5:b89d39ca3f8c532abe5f547ad3b8f84d"
115 | ],
116 | "opam": {
117 | "name": "yojson",
118 | "version": "1.7.0",
119 | "path": "esy.lock/opam/yojson.1.7.0"
120 | }
121 | },
122 | "overrides": [],
123 | "dependencies": [
124 | "ocaml@4.8.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4",
125 | "@opam/dune@opam:1.11.3@9894df55", "@opam/cppo@opam:1.6.6@f4f83858",
126 | "@opam/biniou@opam:1.2.1@d7570399",
127 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
128 | ],
129 | "devDependencies": [
130 | "ocaml@4.8.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4",
131 | "@opam/dune@opam:1.11.3@9894df55", "@opam/biniou@opam:1.2.1@d7570399"
132 | ]
133 | },
134 | "@opam/uchar@opam:0.0.2@c8218eea": {
135 | "id": "@opam/uchar@opam:0.0.2@c8218eea",
136 | "name": "@opam/uchar",
137 | "version": "opam:0.0.2",
138 | "source": {
139 | "type": "install",
140 | "source": [
141 | "archive:https://opam.ocaml.org/cache/md5/c9/c9ba2c738d264c420c642f7bb1cf4a36#md5:c9ba2c738d264c420c642f7bb1cf4a36",
142 | "archive:https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz#md5:c9ba2c738d264c420c642f7bb1cf4a36"
143 | ],
144 | "opam": {
145 | "name": "uchar",
146 | "version": "0.0.2",
147 | "path": "esy.lock/opam/uchar.0.0.2"
148 | }
149 | },
150 | "overrides": [],
151 | "dependencies": [
152 | "ocaml@4.8.1000@d41d8cd9", "@opam/ocamlbuild@opam:0.14.0@427a2331",
153 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
154 | ],
155 | "devDependencies": [ "ocaml@4.8.1000@d41d8cd9" ]
156 | },
157 | "@opam/seq@opam:base@d8d7de1d": {
158 | "id": "@opam/seq@opam:base@d8d7de1d",
159 | "name": "@opam/seq",
160 | "version": "opam:base",
161 | "source": {
162 | "type": "install",
163 | "source": [ "no-source:" ],
164 | "opam": {
165 | "name": "seq",
166 | "version": "base",
167 | "path": "esy.lock/opam/seq.base"
168 | }
169 | },
170 | "overrides": [],
171 | "dependencies": [
172 | "ocaml@4.8.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9"
173 | ],
174 | "devDependencies": [ "ocaml@4.8.1000@d41d8cd9" ]
175 | },
176 | "@opam/result@opam:1.4@6fb665c3": {
177 | "id": "@opam/result@opam:1.4@6fb665c3",
178 | "name": "@opam/result",
179 | "version": "opam:1.4",
180 | "source": {
181 | "type": "install",
182 | "source": [
183 | "archive:https://opam.ocaml.org/cache/md5/d3/d3162dbc501a2af65c8c71e0866541da#md5:d3162dbc501a2af65c8c71e0866541da",
184 | "archive:https://github.com/janestreet/result/archive/1.4.tar.gz#md5:d3162dbc501a2af65c8c71e0866541da"
185 | ],
186 | "opam": {
187 | "name": "result",
188 | "version": "1.4",
189 | "path": "esy.lock/opam/result.1.4"
190 | }
191 | },
192 | "overrides": [],
193 | "dependencies": [
194 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
195 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
196 | ],
197 | "devDependencies": [
198 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55"
199 | ]
200 | },
201 | "@opam/re@opam:1.9.0@fc2ceb05": {
202 | "id": "@opam/re@opam:1.9.0@fc2ceb05",
203 | "name": "@opam/re",
204 | "version": "opam:1.9.0",
205 | "source": {
206 | "type": "install",
207 | "source": [
208 | "archive:https://opam.ocaml.org/cache/md5/bd/bddaed4f386a22cace7850c9c7dac296#md5:bddaed4f386a22cace7850c9c7dac296",
209 | "archive:https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz#md5:bddaed4f386a22cace7850c9c7dac296"
210 | ],
211 | "opam": {
212 | "name": "re",
213 | "version": "1.9.0",
214 | "path": "esy.lock/opam/re.1.9.0"
215 | }
216 | },
217 | "overrides": [],
218 | "dependencies": [
219 | "ocaml@4.8.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d",
220 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/substs@0.0.1@d41d8cd9"
221 | ],
222 | "devDependencies": [
223 | "ocaml@4.8.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d",
224 | "@opam/dune@opam:1.11.3@9894df55"
225 | ]
226 | },
227 | "@opam/ppx_tools_versioned@opam:5.2.3@4994ec80": {
228 | "id": "@opam/ppx_tools_versioned@opam:5.2.3@4994ec80",
229 | "name": "@opam/ppx_tools_versioned",
230 | "version": "opam:5.2.3",
231 | "source": {
232 | "type": "install",
233 | "source": [
234 | "archive:https://opam.ocaml.org/cache/md5/b1/b1455e5a4a1bcd9ddbfcf712ccbd4262#md5:b1455e5a4a1bcd9ddbfcf712ccbd4262",
235 | "archive:https://github.com/ocaml-ppx/ppx_tools_versioned/archive/5.2.3.tar.gz#md5:b1455e5a4a1bcd9ddbfcf712ccbd4262"
236 | ],
237 | "opam": {
238 | "name": "ppx_tools_versioned",
239 | "version": "5.2.3",
240 | "path": "esy.lock/opam/ppx_tools_versioned.5.2.3"
241 | }
242 | },
243 | "overrides": [],
244 | "dependencies": [
245 | "ocaml@4.8.1000@d41d8cd9",
246 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
247 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/substs@0.0.1@d41d8cd9"
248 | ],
249 | "devDependencies": [
250 | "ocaml@4.8.1000@d41d8cd9",
251 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
252 | "@opam/dune@opam:1.11.3@9894df55"
253 | ]
254 | },
255 | "@opam/ppx_derivers@opam:1.2.1@aee9c3db": {
256 | "id": "@opam/ppx_derivers@opam:1.2.1@aee9c3db",
257 | "name": "@opam/ppx_derivers",
258 | "version": "opam:1.2.1",
259 | "source": {
260 | "type": "install",
261 | "source": [
262 | "archive:https://opam.ocaml.org/cache/md5/5d/5dc2bf130c1db3c731fe0fffc5648b41#md5:5dc2bf130c1db3c731fe0fffc5648b41",
263 | "archive:https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz#md5:5dc2bf130c1db3c731fe0fffc5648b41"
264 | ],
265 | "opam": {
266 | "name": "ppx_derivers",
267 | "version": "1.2.1",
268 | "path": "esy.lock/opam/ppx_derivers.1.2.1"
269 | }
270 | },
271 | "overrides": [],
272 | "dependencies": [
273 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
274 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
275 | ],
276 | "devDependencies": [
277 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55"
278 | ]
279 | },
280 | "@opam/ocamlfind@opam:1.8.1@c65fe06a": {
281 | "id": "@opam/ocamlfind@opam:1.8.1@c65fe06a",
282 | "name": "@opam/ocamlfind",
283 | "version": "opam:1.8.1",
284 | "source": {
285 | "type": "install",
286 | "source": [
287 | "archive:https://opam.ocaml.org/cache/md5/18/18ca650982c15536616dea0e422cbd8c#md5:18ca650982c15536616dea0e422cbd8c",
288 | "archive:http://download2.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c",
289 | "archive:http://download.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c"
290 | ],
291 | "opam": {
292 | "name": "ocamlfind",
293 | "version": "1.8.1",
294 | "path": "esy.lock/opam/ocamlfind.1.8.1"
295 | }
296 | },
297 | "overrides": [
298 | {
299 | "opamoverride":
300 | "esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.1_opam_override"
301 | }
302 | ],
303 | "dependencies": [
304 | "ocaml@4.8.1000@d41d8cd9", "@opam/conf-m4@opam:1@da6f4f44",
305 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
306 | ],
307 | "devDependencies": [ "ocaml@4.8.1000@d41d8cd9" ]
308 | },
309 | "@opam/ocamlbuild@opam:0.14.0@427a2331": {
310 | "id": "@opam/ocamlbuild@opam:0.14.0@427a2331",
311 | "name": "@opam/ocamlbuild",
312 | "version": "opam:0.14.0",
313 | "source": {
314 | "type": "install",
315 | "source": [
316 | "archive:https://opam.ocaml.org/cache/sha256/87/87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78",
317 | "archive:https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78"
318 | ],
319 | "opam": {
320 | "name": "ocamlbuild",
321 | "version": "0.14.0",
322 | "path": "esy.lock/opam/ocamlbuild.0.14.0"
323 | }
324 | },
325 | "overrides": [
326 | {
327 | "opamoverride":
328 | "esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override"
329 | }
330 | ],
331 | "dependencies": [
332 | "ocaml@4.8.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9"
333 | ],
334 | "devDependencies": [ "ocaml@4.8.1000@d41d8cd9" ]
335 | },
336 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334": {
337 | "id": "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
338 | "name": "@opam/ocaml-migrate-parsetree",
339 | "version": "opam:1.4.0",
340 | "source": {
341 | "type": "install",
342 | "source": [
343 | "archive:https://opam.ocaml.org/cache/sha256/23/231fbdc205187b3ee266b535d9cfe44b599067b2f6e97883c782ea7bb577d3b8#sha256:231fbdc205187b3ee266b535d9cfe44b599067b2f6e97883c782ea7bb577d3b8",
344 | "archive:https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.4.0/ocaml-migrate-parsetree-v1.4.0.tbz#sha256:231fbdc205187b3ee266b535d9cfe44b599067b2f6e97883c782ea7bb577d3b8"
345 | ],
346 | "opam": {
347 | "name": "ocaml-migrate-parsetree",
348 | "version": "1.4.0",
349 | "path": "esy.lock/opam/ocaml-migrate-parsetree.1.4.0"
350 | }
351 | },
352 | "overrides": [],
353 | "dependencies": [
354 | "ocaml@4.8.1000@d41d8cd9", "@opam/result@opam:1.4@6fb665c3",
355 | "@opam/ppx_derivers@opam:1.2.1@aee9c3db",
356 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/substs@0.0.1@d41d8cd9"
357 | ],
358 | "devDependencies": [
359 | "ocaml@4.8.1000@d41d8cd9", "@opam/result@opam:1.4@6fb665c3",
360 | "@opam/ppx_derivers@opam:1.2.1@aee9c3db",
361 | "@opam/dune@opam:1.11.3@9894df55"
362 | ]
363 | },
364 | "@opam/merlin-extend@opam:0.5@a5dd7d4b": {
365 | "id": "@opam/merlin-extend@opam:0.5@a5dd7d4b",
366 | "name": "@opam/merlin-extend",
367 | "version": "opam:0.5",
368 | "source": {
369 | "type": "install",
370 | "source": [
371 | "archive:https://opam.ocaml.org/cache/sha256/ca/ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227#sha256:ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227",
372 | "archive:https://github.com/let-def/merlin-extend/releases/download/v0.5/merlin-extend-v0.5.tbz#sha256:ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227"
373 | ],
374 | "opam": {
375 | "name": "merlin-extend",
376 | "version": "0.5",
377 | "path": "esy.lock/opam/merlin-extend.0.5"
378 | }
379 | },
380 | "overrides": [],
381 | "dependencies": [
382 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
383 | "@opam/cppo@opam:1.6.6@f4f83858", "@esy-ocaml/substs@0.0.1@d41d8cd9"
384 | ],
385 | "devDependencies": [
386 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55"
387 | ]
388 | },
389 | "@opam/menhir@opam:20190626@bbeb8953": {
390 | "id": "@opam/menhir@opam:20190626@bbeb8953",
391 | "name": "@opam/menhir",
392 | "version": "opam:20190626",
393 | "source": {
394 | "type": "install",
395 | "source": [
396 | "archive:https://opam.ocaml.org/cache/md5/78/783961f8d124449a1a335cc8e50f013f#md5:783961f8d124449a1a335cc8e50f013f",
397 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20190626/archive.tar.gz#md5:783961f8d124449a1a335cc8e50f013f"
398 | ],
399 | "opam": {
400 | "name": "menhir",
401 | "version": "20190626",
402 | "path": "esy.lock/opam/menhir.20190626"
403 | }
404 | },
405 | "overrides": [],
406 | "dependencies": [
407 | "ocaml@4.8.1000@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@c65fe06a",
408 | "@opam/ocamlbuild@opam:0.14.0@427a2331",
409 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
410 | ],
411 | "devDependencies": [ "ocaml@4.8.1000@d41d8cd9" ]
412 | },
413 | "@opam/js_of_ocaml-ppx@opam:3.4.0@9743829e": {
414 | "id": "@opam/js_of_ocaml-ppx@opam:3.4.0@9743829e",
415 | "name": "@opam/js_of_ocaml-ppx",
416 | "version": "opam:3.4.0",
417 | "source": {
418 | "type": "install",
419 | "source": [
420 | "archive:https://opam.ocaml.org/cache/md5/42/42f914d0410787d65668d2822fdab1a1#md5:42f914d0410787d65668d2822fdab1a1",
421 | "archive:https://github.com/ocsigen/js_of_ocaml/archive/3.4.0.tar.gz#md5:42f914d0410787d65668d2822fdab1a1"
422 | ],
423 | "opam": {
424 | "name": "js_of_ocaml-ppx",
425 | "version": "3.4.0",
426 | "path": "esy.lock/opam/js_of_ocaml-ppx.3.4.0"
427 | }
428 | },
429 | "overrides": [],
430 | "dependencies": [
431 | "ocaml@4.8.1000@d41d8cd9",
432 | "@opam/ppx_tools_versioned@opam:5.2.3@4994ec80",
433 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
434 | "@opam/js_of_ocaml@opam:3.4.0@d8a98a2c",
435 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/substs@0.0.1@d41d8cd9"
436 | ],
437 | "devDependencies": [
438 | "ocaml@4.8.1000@d41d8cd9",
439 | "@opam/ppx_tools_versioned@opam:5.2.3@4994ec80",
440 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
441 | "@opam/js_of_ocaml@opam:3.4.0@d8a98a2c",
442 | "@opam/dune@opam:1.11.3@9894df55"
443 | ]
444 | },
445 | "@opam/js_of_ocaml-compiler@opam:3.4.0@d2f7c406": {
446 | "id": "@opam/js_of_ocaml-compiler@opam:3.4.0@d2f7c406",
447 | "name": "@opam/js_of_ocaml-compiler",
448 | "version": "opam:3.4.0",
449 | "source": {
450 | "type": "install",
451 | "source": [
452 | "archive:https://opam.ocaml.org/cache/md5/42/42f914d0410787d65668d2822fdab1a1#md5:42f914d0410787d65668d2822fdab1a1",
453 | "archive:https://github.com/ocsigen/js_of_ocaml/archive/3.4.0.tar.gz#md5:42f914d0410787d65668d2822fdab1a1"
454 | ],
455 | "opam": {
456 | "name": "js_of_ocaml-compiler",
457 | "version": "3.4.0",
458 | "path": "esy.lock/opam/js_of_ocaml-compiler.3.4.0"
459 | }
460 | },
461 | "overrides": [],
462 | "dependencies": [
463 | "ocaml@4.8.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985",
464 | "@opam/ocamlfind@opam:1.8.1@c65fe06a",
465 | "@opam/dune@opam:1.11.3@9894df55", "@opam/cppo@opam:1.6.6@f4f83858",
466 | "@opam/cmdliner@opam:1.0.4@93208aac",
467 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
468 | ],
469 | "devDependencies": [
470 | "ocaml@4.8.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985",
471 | "@opam/ocamlfind@opam:1.8.1@c65fe06a",
472 | "@opam/dune@opam:1.11.3@9894df55", "@opam/cppo@opam:1.6.6@f4f83858",
473 | "@opam/cmdliner@opam:1.0.4@93208aac"
474 | ]
475 | },
476 | "@opam/js_of_ocaml@opam:3.4.0@d8a98a2c": {
477 | "id": "@opam/js_of_ocaml@opam:3.4.0@d8a98a2c",
478 | "name": "@opam/js_of_ocaml",
479 | "version": "opam:3.4.0",
480 | "source": {
481 | "type": "install",
482 | "source": [
483 | "archive:https://opam.ocaml.org/cache/md5/42/42f914d0410787d65668d2822fdab1a1#md5:42f914d0410787d65668d2822fdab1a1",
484 | "archive:https://github.com/ocsigen/js_of_ocaml/archive/3.4.0.tar.gz#md5:42f914d0410787d65668d2822fdab1a1"
485 | ],
486 | "opam": {
487 | "name": "js_of_ocaml",
488 | "version": "3.4.0",
489 | "path": "esy.lock/opam/js_of_ocaml.3.4.0"
490 | }
491 | },
492 | "overrides": [],
493 | "dependencies": [
494 | "ocaml@4.8.1000@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea",
495 | "@opam/ppx_tools_versioned@opam:5.2.3@4994ec80",
496 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
497 | "@opam/js_of_ocaml-compiler@opam:3.4.0@d2f7c406",
498 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/substs@0.0.1@d41d8cd9"
499 | ],
500 | "devDependencies": [
501 | "ocaml@4.8.1000@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea",
502 | "@opam/ppx_tools_versioned@opam:5.2.3@4994ec80",
503 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
504 | "@opam/js_of_ocaml-compiler@opam:3.4.0@d2f7c406",
505 | "@opam/dune@opam:1.11.3@9894df55"
506 | ]
507 | },
508 | "@opam/jbuilder@opam:transition@58bdfe0a": {
509 | "id": "@opam/jbuilder@opam:transition@58bdfe0a",
510 | "name": "@opam/jbuilder",
511 | "version": "opam:transition",
512 | "source": {
513 | "type": "install",
514 | "source": [ "no-source:" ],
515 | "opam": {
516 | "name": "jbuilder",
517 | "version": "transition",
518 | "path": "esy.lock/opam/jbuilder.transition"
519 | }
520 | },
521 | "overrides": [],
522 | "dependencies": [
523 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
524 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
525 | ],
526 | "devDependencies": [
527 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55"
528 | ]
529 | },
530 | "@opam/gen_js_api@github:LexiFi/gen_js_api:gen_js_api.opam#0743a4a@d41d8cd9": {
531 | "id":
532 | "@opam/gen_js_api@github:LexiFi/gen_js_api:gen_js_api.opam#0743a4a@d41d8cd9",
533 | "name": "@opam/gen_js_api",
534 | "version": "github:LexiFi/gen_js_api:gen_js_api.opam#0743a4a",
535 | "source": {
536 | "type": "install",
537 | "source": [ "github:LexiFi/gen_js_api:gen_js_api.opam#0743a4a" ]
538 | },
539 | "overrides": [],
540 | "dependencies": [
541 | "ocaml@4.8.1000@d41d8cd9",
542 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
543 | "@opam/js_of_ocaml@opam:3.4.0@d8a98a2c",
544 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/substs@0.0.1@d41d8cd9"
545 | ],
546 | "devDependencies": [
547 | "ocaml@4.8.1000@d41d8cd9",
548 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
549 | "@opam/js_of_ocaml@opam:3.4.0@d8a98a2c"
550 | ]
551 | },
552 | "@opam/easy-format@opam:1.3.2@0484b3c4": {
553 | "id": "@opam/easy-format@opam:1.3.2@0484b3c4",
554 | "name": "@opam/easy-format",
555 | "version": "opam:1.3.2",
556 | "source": {
557 | "type": "install",
558 | "source": [
559 | "archive:https://opam.ocaml.org/cache/sha256/34/3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926",
560 | "archive:https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926"
561 | ],
562 | "opam": {
563 | "name": "easy-format",
564 | "version": "1.3.2",
565 | "path": "esy.lock/opam/easy-format.1.3.2"
566 | }
567 | },
568 | "overrides": [],
569 | "dependencies": [
570 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
571 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
572 | ],
573 | "devDependencies": [
574 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55"
575 | ]
576 | },
577 | "@opam/dune@opam:1.11.3@9894df55": {
578 | "id": "@opam/dune@opam:1.11.3@9894df55",
579 | "name": "@opam/dune",
580 | "version": "opam:1.11.3",
581 | "source": {
582 | "type": "install",
583 | "source": [
584 | "archive:https://opam.ocaml.org/cache/sha256/c8/c83a63e7e8245611b0e11d6adea07c6484dc1b4efffacb176315cd6674d4bbd2#sha256:c83a63e7e8245611b0e11d6adea07c6484dc1b4efffacb176315cd6674d4bbd2",
585 | "archive:https://github.com/ocaml/dune/releases/download/1.11.3/dune-build-info-1.11.3.tbz#sha256:c83a63e7e8245611b0e11d6adea07c6484dc1b4efffacb176315cd6674d4bbd2"
586 | ],
587 | "opam": {
588 | "name": "dune",
589 | "version": "1.11.3",
590 | "path": "esy.lock/opam/dune.1.11.3"
591 | }
592 | },
593 | "overrides": [
594 | {
595 | "opamoverride":
596 | "esy.lock/overrides/opam__s__dune_opam__c__1.11.3_opam_override"
597 | }
598 | ],
599 | "dependencies": [
600 | "ocaml@4.8.1000@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb",
601 | "@opam/base-threads@opam:base@36803084",
602 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
603 | ],
604 | "devDependencies": [
605 | "ocaml@4.8.1000@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb",
606 | "@opam/base-threads@opam:base@36803084"
607 | ]
608 | },
609 | "@opam/cppo@opam:1.6.6@f4f83858": {
610 | "id": "@opam/cppo@opam:1.6.6@f4f83858",
611 | "name": "@opam/cppo",
612 | "version": "opam:1.6.6",
613 | "source": {
614 | "type": "install",
615 | "source": [
616 | "archive:https://opam.ocaml.org/cache/sha256/e7/e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0#sha256:e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0",
617 | "archive:https://github.com/ocaml-community/cppo/releases/download/v1.6.6/cppo-v1.6.6.tbz#sha256:e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0"
618 | ],
619 | "opam": {
620 | "name": "cppo",
621 | "version": "1.6.6",
622 | "path": "esy.lock/opam/cppo.1.6.6"
623 | }
624 | },
625 | "overrides": [],
626 | "dependencies": [
627 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
628 | "@opam/base-unix@opam:base@87d0b2eb",
629 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
630 | ],
631 | "devDependencies": [
632 | "ocaml@4.8.1000@d41d8cd9", "@opam/dune@opam:1.11.3@9894df55",
633 | "@opam/base-unix@opam:base@87d0b2eb"
634 | ]
635 | },
636 | "@opam/conf-m4@opam:1@da6f4f44": {
637 | "id": "@opam/conf-m4@opam:1@da6f4f44",
638 | "name": "@opam/conf-m4",
639 | "version": "opam:1",
640 | "source": {
641 | "type": "install",
642 | "source": [ "no-source:" ],
643 | "opam": {
644 | "name": "conf-m4",
645 | "version": "1",
646 | "path": "esy.lock/opam/conf-m4.1"
647 | }
648 | },
649 | "overrides": [],
650 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ],
651 | "devDependencies": []
652 | },
653 | "@opam/cmdliner@opam:1.0.4@93208aac": {
654 | "id": "@opam/cmdliner@opam:1.0.4@93208aac",
655 | "name": "@opam/cmdliner",
656 | "version": "opam:1.0.4",
657 | "source": {
658 | "type": "install",
659 | "source": [
660 | "archive:https://opam.ocaml.org/cache/md5/fe/fe2213d0bc63b1e10a2d0aa66d2fc8d9#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9",
661 | "archive:http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9"
662 | ],
663 | "opam": {
664 | "name": "cmdliner",
665 | "version": "1.0.4",
666 | "path": "esy.lock/opam/cmdliner.1.0.4"
667 | }
668 | },
669 | "overrides": [],
670 | "dependencies": [
671 | "ocaml@4.8.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9"
672 | ],
673 | "devDependencies": [ "ocaml@4.8.1000@d41d8cd9" ]
674 | },
675 | "@opam/biniou@opam:1.2.1@d7570399": {
676 | "id": "@opam/biniou@opam:1.2.1@d7570399",
677 | "name": "@opam/biniou",
678 | "version": "opam:1.2.1",
679 | "source": {
680 | "type": "install",
681 | "source": [
682 | "archive:https://opam.ocaml.org/cache/sha256/35/35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335",
683 | "archive:https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335"
684 | ],
685 | "opam": {
686 | "name": "biniou",
687 | "version": "1.2.1",
688 | "path": "esy.lock/opam/biniou.1.2.1"
689 | }
690 | },
691 | "overrides": [],
692 | "dependencies": [
693 | "ocaml@4.8.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4",
694 | "@opam/dune@opam:1.11.3@9894df55", "@esy-ocaml/substs@0.0.1@d41d8cd9"
695 | ],
696 | "devDependencies": [
697 | "ocaml@4.8.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4",
698 | "@opam/dune@opam:1.11.3@9894df55"
699 | ]
700 | },
701 | "@opam/base-unix@opam:base@87d0b2eb": {
702 | "id": "@opam/base-unix@opam:base@87d0b2eb",
703 | "name": "@opam/base-unix",
704 | "version": "opam:base",
705 | "source": {
706 | "type": "install",
707 | "source": [ "no-source:" ],
708 | "opam": {
709 | "name": "base-unix",
710 | "version": "base",
711 | "path": "esy.lock/opam/base-unix.base"
712 | }
713 | },
714 | "overrides": [],
715 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ],
716 | "devDependencies": []
717 | },
718 | "@opam/base-threads@opam:base@36803084": {
719 | "id": "@opam/base-threads@opam:base@36803084",
720 | "name": "@opam/base-threads",
721 | "version": "opam:base",
722 | "source": {
723 | "type": "install",
724 | "source": [ "no-source:" ],
725 | "opam": {
726 | "name": "base-threads",
727 | "version": "base",
728 | "path": "esy.lock/opam/base-threads.base"
729 | }
730 | },
731 | "overrides": [],
732 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ],
733 | "devDependencies": []
734 | },
735 | "@opam/atdgen-runtime@opam:2.0.0@8a75c3bb": {
736 | "id": "@opam/atdgen-runtime@opam:2.0.0@8a75c3bb",
737 | "name": "@opam/atdgen-runtime",
738 | "version": "opam:2.0.0",
739 | "source": {
740 | "type": "install",
741 | "source": [
742 | "archive:https://opam.ocaml.org/cache/md5/14/14e47609397c524ea0eae7c3f14f7ccf#md5:14e47609397c524ea0eae7c3f14f7ccf",
743 | "archive:https://github.com/mjambon/atd/releases/download/2.0.0/atd-2.0.0.tbz#md5:14e47609397c524ea0eae7c3f14f7ccf"
744 | ],
745 | "opam": {
746 | "name": "atdgen-runtime",
747 | "version": "2.0.0",
748 | "path": "esy.lock/opam/atdgen-runtime.2.0.0"
749 | }
750 | },
751 | "overrides": [],
752 | "dependencies": [
753 | "ocaml@4.8.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985",
754 | "@opam/jbuilder@opam:transition@58bdfe0a",
755 | "@opam/biniou@opam:1.2.1@d7570399",
756 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
757 | ],
758 | "devDependencies": [
759 | "ocaml@4.8.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985",
760 | "@opam/biniou@opam:1.2.1@d7570399"
761 | ]
762 | },
763 | "@opam/atdgen@opam:2.0.0@5d912e07": {
764 | "id": "@opam/atdgen@opam:2.0.0@5d912e07",
765 | "name": "@opam/atdgen",
766 | "version": "opam:2.0.0",
767 | "source": {
768 | "type": "install",
769 | "source": [
770 | "archive:https://opam.ocaml.org/cache/md5/14/14e47609397c524ea0eae7c3f14f7ccf#md5:14e47609397c524ea0eae7c3f14f7ccf",
771 | "archive:https://github.com/mjambon/atd/releases/download/2.0.0/atd-2.0.0.tbz#md5:14e47609397c524ea0eae7c3f14f7ccf"
772 | ],
773 | "opam": {
774 | "name": "atdgen",
775 | "version": "2.0.0",
776 | "path": "esy.lock/opam/atdgen.2.0.0"
777 | }
778 | },
779 | "overrides": [],
780 | "dependencies": [
781 | "ocaml@4.8.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985",
782 | "@opam/jbuilder@opam:transition@58bdfe0a",
783 | "@opam/biniou@opam:1.2.1@d7570399",
784 | "@opam/atdgen-runtime@opam:2.0.0@8a75c3bb",
785 | "@opam/atd@opam:2.0.0@087614b7", "@esy-ocaml/substs@0.0.1@d41d8cd9"
786 | ],
787 | "devDependencies": [
788 | "ocaml@4.8.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985",
789 | "@opam/biniou@opam:1.2.1@d7570399",
790 | "@opam/atdgen-runtime@opam:2.0.0@8a75c3bb",
791 | "@opam/atd@opam:2.0.0@087614b7"
792 | ]
793 | },
794 | "@opam/atd@opam:2.0.0@087614b7": {
795 | "id": "@opam/atd@opam:2.0.0@087614b7",
796 | "name": "@opam/atd",
797 | "version": "opam:2.0.0",
798 | "source": {
799 | "type": "install",
800 | "source": [
801 | "archive:https://opam.ocaml.org/cache/md5/14/14e47609397c524ea0eae7c3f14f7ccf#md5:14e47609397c524ea0eae7c3f14f7ccf",
802 | "archive:https://github.com/mjambon/atd/releases/download/2.0.0/atd-2.0.0.tbz#md5:14e47609397c524ea0eae7c3f14f7ccf"
803 | ],
804 | "opam": {
805 | "name": "atd",
806 | "version": "2.0.0",
807 | "path": "esy.lock/opam/atd.2.0.0"
808 | }
809 | },
810 | "overrides": [],
811 | "dependencies": [
812 | "ocaml@4.8.1000@d41d8cd9", "@opam/menhir@opam:20190626@bbeb8953",
813 | "@opam/jbuilder@opam:transition@58bdfe0a",
814 | "@opam/easy-format@opam:1.3.2@0484b3c4",
815 | "@esy-ocaml/substs@0.0.1@d41d8cd9"
816 | ],
817 | "devDependencies": [
818 | "ocaml@4.8.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4"
819 | ]
820 | },
821 | "@esy-ocaml/substs@0.0.1@d41d8cd9": {
822 | "id": "@esy-ocaml/substs@0.0.1@d41d8cd9",
823 | "name": "@esy-ocaml/substs",
824 | "version": "0.0.1",
825 | "source": {
826 | "type": "install",
827 | "source": [
828 | "archive:https://registry.npmjs.org/@esy-ocaml/substs/-/substs-0.0.1.tgz#sha1:59ebdbbaedcda123fc7ed8fb2b302b7d819e9a46"
829 | ]
830 | },
831 | "overrides": [],
832 | "dependencies": [],
833 | "devDependencies": []
834 | },
835 | "@esy-ocaml/reason@3.5.0@d41d8cd9": {
836 | "id": "@esy-ocaml/reason@3.5.0@d41d8cd9",
837 | "name": "@esy-ocaml/reason",
838 | "version": "3.5.0",
839 | "source": {
840 | "type": "install",
841 | "source": [
842 | "archive:https://registry.npmjs.org/@esy-ocaml/reason/-/reason-3.5.0.tgz#sha1:f276b991ef0dfe4d559b68e554661f8b2bc618bf"
843 | ]
844 | },
845 | "overrides": [],
846 | "dependencies": [
847 | "ocaml@4.8.1000@d41d8cd9", "@opam/result@opam:1.4@6fb665c3",
848 | "@opam/ocamlfind@opam:1.8.1@c65fe06a",
849 | "@opam/ocaml-migrate-parsetree@opam:1.4.0@7f2e4334",
850 | "@opam/merlin-extend@opam:0.5@a5dd7d4b",
851 | "@opam/menhir@opam:20190626@bbeb8953",
852 | "@opam/dune@opam:1.11.3@9894df55"
853 | ],
854 | "devDependencies": []
855 | }
856 | }
857 | }
--------------------------------------------------------------------------------