├── .ocamlformat ├── VERSION ├── test ├── dune ├── test.txt └── tester.ml ├── 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 │ ├── conf-m4.1 │ │ └── opam │ ├── fix.20200131 │ │ └── opam │ ├── ppx_derivers.1.2.1 │ │ └── opam │ ├── result.1.5 │ │ └── opam │ ├── integers.0.4.0 │ │ └── opam │ ├── menhir.20200624 │ │ └── opam │ ├── ppx_yojson_conv_lib.v0.14.0 │ │ └── opam │ ├── menhirLib.20200624 │ │ └── opam │ ├── menhirSdk.20200624 │ │ └── opam │ ├── stdio.v0.14.0 │ │ └── opam │ ├── sexplib0.v0.14.0 │ │ └── opam │ ├── stdlib-shims.0.1.0 │ │ └── opam │ ├── fpath.0.7.3 │ │ └── opam │ ├── ocamlbuild.0.14.0 │ │ └── opam │ ├── uchar.0.0.2 │ │ └── opam │ ├── re.1.9.0 │ │ └── opam │ ├── cppo.1.6.6 │ │ └── opam │ ├── luv.0.5.6 │ │ └── opam │ ├── yojson.1.7.0 │ │ └── opam │ ├── base.v0.14.0 │ │ └── opam │ ├── ocaml-migrate-parsetree.1.7.3 │ │ └── opam │ ├── astring.0.8.5 │ │ └── opam │ ├── dune-build-info.2.7.1 │ │ └── opam │ ├── ocamlformat.0.15.0 │ │ └── opam │ ├── odoc.1.5.1 │ │ └── opam │ ├── uucp.13.0.0 │ │ └── opam │ ├── uutf.1.0.2 │ │ └── opam │ ├── dune-configurator.2.7.1 │ │ └── opam │ ├── fmt.0.8.9 │ │ └── opam │ ├── cmdliner.1.0.4 │ │ └── opam │ ├── tyxml.4.4.0 │ │ └── opam │ ├── conf-pkg-config.1.3 │ │ └── opam │ ├── easy-format.1.3.2 │ │ └── opam │ ├── biniou.1.2.1 │ │ └── opam │ ├── uuseg.13.0.0 │ │ └── opam │ ├── topkg.1.0.3 │ │ └── opam │ ├── csexp.1.3.2 │ │ └── opam │ ├── ctypes.0.17.1 │ │ └── opam │ ├── logs.0.7.0 │ │ └── opam │ └── dune.2.7.1 │ │ └── opam ├── .gitignore ├── .gitattributes ├── overrides │ ├── opam__s__ctypes_opam__c__0.17.1_opam_override │ │ └── package.json │ ├── opam__s__conf_pkg_config_opam__c__1.3_opam_override │ │ └── package.json │ ├── opam__s__dune_opam__c__2.7.1_opam_override │ │ ├── package.json │ │ └── files │ │ │ └── build.sh │ ├── 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 ├── bin ├── dune ├── signal.ml └── main.ml ├── nix ├── default.nix ├── sources.nix └── generic.nix ├── .github └── workflows │ ├── print_esy_cache.js │ ├── update_package_version.js │ ├── bundle-release.js │ ├── lint_pr.yml │ ├── publish_to_npm.js │ ├── publish.yml │ └── release-postinstall.js ├── dune-project ├── .gitattributes ├── package.json ├── redemon.opam ├── shell.nix ├── README.md └── LICENSE /.ocamlformat: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 0.4.0 2 | -------------------------------------------------------------------------------- /test/dune: -------------------------------------------------------------------------------- 1 | (executable 2 | (public_name tester) 3 | (name tester)) 4 | -------------------------------------------------------------------------------- /esy.lock/opam/seq.base/files/seq.install: -------------------------------------------------------------------------------- 1 | lib:[ 2 | "META.seq" {"META"} 3 | ] 4 | -------------------------------------------------------------------------------- /test/test.txt: -------------------------------------------------------------------------------- 1 | doing things, should not restart 2 | a 3 | x 4 | c 5 | d 6 | e 7 | f 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _esy 2 | _release 3 | _build 4 | .vscode 5 | node_modules 6 | *.install 7 | .merlin 8 | -------------------------------------------------------------------------------- /esy.lock/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Reset any possible .gitignore, we want all esy.lock to be un-ignored. 3 | !* 4 | -------------------------------------------------------------------------------- /test/tester.ml: -------------------------------------------------------------------------------- 1 | (* let _ = raise (Sys_error "Just die") *) 2 | 3 | let () = print_endline "testing12345" 4 | -------------------------------------------------------------------------------- /bin/dune: -------------------------------------------------------------------------------- 1 | (executable 2 | (public_name redemon) 3 | (name main) 4 | (libraries luv unix cmdliner logs logs.fmt fmt.tty)) 5 | -------------------------------------------------------------------------------- /esy.lock/.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | # Set eol to LF so files aren't converted to CRLF-eol on Windows. 3 | * text eol=lf linguist-generated 4 | -------------------------------------------------------------------------------- /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__ctypes_opam__c__0.17.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "exportedEnv": { 3 | "CAML_LD_LIBRARY_PATH": { 4 | "val": "#{self.lib / 'ctypes' : $CAML_LD_LIBRARY_PATH}", 5 | "scope": "global" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__conf_pkg_config_opam__c__1.3_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "pkg-config", 5 | "--help" 6 | ] 7 | ], 8 | "dependencies": { 9 | "yarn-pkg-config": "esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__dune_opam__c__2.7.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildsInSource": true, 3 | "build": "bash build.sh", 4 | "install": "esy-installer dune.install", 5 | "buildEnv": { 6 | "OCAMLPATH": "#{ $OCAMLFIND_SECONDARY_PREFIX / 'lib' : ocaml.lib : $OCAML_SECONDARY_COMPILER_PREFIX / 'share' / 'ocaml-secondary-compiler' / 'lib' }" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__dune_opam__c__2.7.1_opam_override/files/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SECONDARY_CONF="$OCAMLFIND_SECONDARY_PREFIX/lib/findlib.conf.d/ocaml-secondary-compiler.conf" 4 | 5 | if test -f $SECONDARY_CONF; then 6 | export OCAMLFIND_CONF=$SECONDARY_CONF; 7 | fi 8 | 9 | env -u OCAMLLIB ocaml bootstrap.ml 10 | ./dune.exe build -p dune --profile dune-bootstrap 11 | -------------------------------------------------------------------------------- /nix/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs ? import ./sources.nix {}, doCheck ? false }: 2 | 3 | { 4 | native = pkgs.callPackage ./generic.nix { 5 | inherit doCheck; 6 | }; 7 | 8 | musl64 = 9 | let 10 | pkgsCross = pkgs.pkgsCross.musl64.pkgsStatic; 11 | 12 | in 13 | pkgsCross.callPackage ./generic.nix { 14 | static = true; 15 | inherit doCheck; 16 | ocamlPackages = pkgsCross.ocamlPackages; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /.github/workflows/print_esy_cache.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const os = require("os"); 3 | const path = require("path"); 4 | 5 | const ESY_FOLDER = process.env.ESY__PREFIX 6 | ? process.env.ESY__PREFIX 7 | : path.join(os.homedir(), ".esy"); 8 | const esy3 = fs 9 | .readdirSync(ESY_FOLDER) 10 | .filter(name => name.length > 0 && name[0] === "3") 11 | .sort() 12 | .pop(); 13 | console.log(`::set-output name=esy_cache::${path.join(ESY_FOLDER, esy3, "i")}`); 14 | -------------------------------------------------------------------------------- /bin/signal.ml: -------------------------------------------------------------------------------- 1 | let of_string str = 2 | match String.uppercase_ascii str with 3 | | "SIGABRT" -> Luv.Signal.sigabrt 4 | | "SIGFPE" -> Luv.Signal.sigfpe 5 | | "SIGHUP" -> Luv.Signal.sighup 6 | | "SIGILL" -> Luv.Signal.sigill 7 | | "SIGINT" -> Luv.Signal.sigint 8 | | "SIGKILL" -> Luv.Signal.sigkill 9 | | "SIGSEGV" -> Luv.Signal.sigsegv 10 | | "SIGTERM" -> Luv.Signal.sigterm 11 | | "SIGWINCH" -> Luv.Signal.sigwinch 12 | | s -> failwith (Printf.sprintf "Unsupported signal supplied: %s" s) 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 | -------------------------------------------------------------------------------- /nix/sources.nix: -------------------------------------------------------------------------------- 1 | { ocamlVersion ? "4_11" }: 2 | let 3 | overlays = 4 | builtins.fetchTarball 5 | https://github.com/ulrikstrid/nix-overlays/archive/066d13cfb40f57ee3ce7969039dd87cd66ceed3d.tar.gz; 6 | 7 | in 8 | import "${overlays}/sources.nix" { 9 | overlays = [ 10 | (import overlays) 11 | (self: super: { 12 | ocamlPackages = super.ocaml-ng."ocamlPackages_${ocamlVersion}"; 13 | 14 | pkgsCross.musl64.pkgsStatic = super.pkgsCross.musl64.pkgsStatic.appendOverlays [ 15 | (self: super: { 16 | ocamlPackages = super.ocaml-ng."ocamlPackages_${ocamlVersion}"; 17 | }) 18 | ]; 19 | }) 20 | ]; 21 | } 22 | -------------------------------------------------------------------------------- /dune-project: -------------------------------------------------------------------------------- 1 | (lang dune 1.11) 2 | 3 | (name redemon) 4 | 5 | (version 0.4.0) 6 | 7 | (maintainers "Ulrik Strid") 8 | 9 | (authors "Ulrik Strid") 10 | 11 | (source 12 | (github ulrikstrid/redemon)) 13 | 14 | (homepage https://github.com/ulrikstrid/redemon) 15 | 16 | (documentation https://github.com/ulrikstrid/redemon) 17 | 18 | (generate_opam_files true) 19 | 20 | (using fmt 1.2) 21 | 22 | (package 23 | (name "redemon") 24 | (synopsis "filewatcher built with luv") 25 | (description "A filewatcher leveraging the libuv bindings luv.") 26 | (depends 27 | (ocaml 28 | (>= 4.06.1)) 29 | (dune 30 | (>= 1.11)) 31 | cmdliner 32 | luv 33 | logs 34 | fmt)) 35 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Some settings for the github language statistics 2 | # This also supresses the lock folder from the diffs 3 | esy.lock/* linguist-generated=true 4 | # Tell github that .re and .rei files are Reason 5 | *.re linguist-language=Reason 6 | *.rei linguist-language=Reason 7 | # Tell github that .ml and .mli files are OCaml 8 | *.ml linguist-language=OCaml 9 | *.mli linguist-language=OCaml 10 | 11 | # Declare shell files to have LF endings on checkout 12 | # On Windows, the default git setting for `core.autocrlf` 13 | # means that when checking out code, LF endings get converted 14 | # to CRLF. This causes problems for shell scripts, as bash 15 | # gets choked up on the extra `\r` character. 16 | * text eol=lf 17 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /nix/generic.nix: -------------------------------------------------------------------------------- 1 | { pkgs, stdenv, lib, ocamlPackages, static ? false, doCheck }: 2 | 3 | with ocamlPackages; 4 | 5 | rec { 6 | reenv = buildDunePackage { 7 | pname = "reenv"; 8 | version = "0.3.1-dev"; 9 | 10 | src = lib.filterGitSource { 11 | src = ./..; 12 | dirs = [ "lib" "executable" "test" ]; 13 | files = [ "dune-project" "oidc.opam" ]; 14 | }; 15 | 16 | useDune2 = true; 17 | 18 | propagatedBuildInputs = [ 19 | cmdliner 20 | luv 21 | logs 22 | fmt 23 | ]; 24 | 25 | buildInputs = [ 26 | alcotest 27 | junit 28 | junit_alcotest 29 | ]; 30 | 31 | inherit doCheck; 32 | 33 | meta = { 34 | description = "dotenv-cli written in reason"; 35 | license = stdenv.lib.licenses.bsd3; 36 | }; 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /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.0-only" 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 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "redemon", 3 | "version": "0.4.0", 4 | "scripts": { 5 | "fmt": "dune build @fmt --auto-promote", 6 | "test": "esy x redemon --delay=1000 --verbose --path=.github --paths=bin,test -e ml,txt dune exec tester" 7 | }, 8 | "esy": { 9 | "build": "dune build -p redemon", 10 | "buildDev": "dune build --root=. --promote-install-file", 11 | "release": { 12 | "bin": [ 13 | "redemon" 14 | ] 15 | } 16 | }, 17 | "dependencies": { 18 | "@opam/dune": "^2.6.0", 19 | "@opam/cmdliner": "^1.0.4", 20 | "@opam/luv": "^0.5.6", 21 | "@opam/fmt": "*", 22 | "@opam/logs": "*", 23 | "ocaml": "^4.8.0" 24 | }, 25 | "devDependencies": { 26 | "@opam/ocamlformat": "*", 27 | "@opam/ocaml-lsp-server": "ocaml/ocaml-lsp:ocaml-lsp-server.opam" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /esy.lock/opam/fix.20200131/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | ] 6 | homepage: "https://gitlab.inria.fr/fpottier/fix" 7 | dev-repo: "git+https://gitlab.inria.fr/fpottier/fix.git" 8 | bug-reports: "francois.pottier@inria.fr" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" { >= "4.03" } 14 | "dune" { >= "1.3" } 15 | ] 16 | synopsis: "Facilities for memoization and fixed points" 17 | url { 18 | src: 19 | "https://gitlab.inria.fr/fpottier/fix/repository/20200131/archive.tar.gz" 20 | checksum: [ 21 | "md5=991ff031666c662eaab638d2e0f4ac1d" 22 | "sha512=01c45a1d90b02ec0939e968b185a6a373ac6117e2287b9a26d3db9d71e9569d086cea50da60710fcab5c2ed9d3b4c72b76839c0651e436f1fb39c77dc7c04b5e" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /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: "BSD-3-Clause" 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 | -------------------------------------------------------------------------------- /redemon.opam: -------------------------------------------------------------------------------- 1 | # This file is generated by dune, edit dune-project instead 2 | opam-version: "2.0" 3 | version: "0.4.0" 4 | synopsis: "filewatcher built with luv" 5 | description: "A filewatcher leveraging the libuv bindings luv." 6 | maintainer: ["Ulrik Strid"] 7 | authors: ["Ulrik Strid"] 8 | homepage: "https://github.com/ulrikstrid/redemon" 9 | doc: "https://github.com/ulrikstrid/redemon" 10 | bug-reports: "https://github.com/ulrikstrid/redemon/issues" 11 | depends: [ 12 | "ocaml" {>= "4.06.1"} 13 | "dune" {>= "1.11"} 14 | "cmdliner" 15 | "luv" 16 | "logs" 17 | "fmt" 18 | ] 19 | build: [ 20 | ["dune" "subst"] {pinned} 21 | [ 22 | "dune" 23 | "build" 24 | "-p" 25 | name 26 | "-j" 27 | jobs 28 | "@install" 29 | "@runtest" {with-test} 30 | "@doc" {with-doc} 31 | ] 32 | ] 33 | dev-repo: "git+https://github.com/ulrikstrid/redemon.git" 34 | -------------------------------------------------------------------------------- /esy.lock/opam/result.1.5/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: "BSD-3-Clause" 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/releases/download/1.5/result-1.5.tbz" 21 | checksum: "md5=1b82dec78849680b49ae9a8a365b831b" 22 | } 23 | -------------------------------------------------------------------------------- /esy.lock/opam/integers.0.4.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "yallop@gmail.com" 3 | authors: ["Jeremy Yallop" 4 | "Demi Obenour" 5 | "Stephane Glondu" 6 | "Andreas Hauptmann"] 7 | homepage: "https://github.com/ocamllabs/ocaml-integers" 8 | bug-reports: "https://github.com/ocamllabs/ocaml-integers/issues" 9 | dev-repo: "git+https://github.com/ocamllabs/ocaml-integers.git" 10 | license: "MIT" 11 | 12 | build: [ 13 | ["dune" "subst"] {pinned} 14 | ["dune" "build" "-p" name "-j" jobs] 15 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 16 | ] 17 | 18 | depends: [ 19 | "ocaml" {>= "4.02"} 20 | "dune" 21 | ] 22 | doc: "http://ocamllabs.github.io/ocaml-integers/api.docdir/" 23 | synopsis: "Various signed and unsigned integer types for OCaml" 24 | url { 25 | src: "https://github.com/ocamllabs/ocaml-integers/archive/0.4.0.tar.gz" 26 | checksum: "md5=c1492352e6525048790508c57aad93c3" 27 | } 28 | -------------------------------------------------------------------------------- /esy.lock/opam/menhir.20200624/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 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.02.3"} 15 | "dune" { >= "2.2.0"} 16 | "menhirLib" {= version} 17 | "menhirSdk" {= version} 18 | ] 19 | synopsis: "An LR(1) parser generator" 20 | url { 21 | src: 22 | "https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz" 23 | checksum: [ 24 | "md5=c37ff53a4a69059e1f8223067b91bb8b" 25 | "sha512=68cd165bd65c93fc9b14820a032b6d760674b3e811d8536c2e26e10f9fc5892720564f109484f12f8d08d849c2983c2eaf350d76ab1122a5b8a3c7674ab2bd39" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | let 2 | pkgs = import ./nix/sources.nix { }; 3 | inherit (pkgs) lib; 4 | redemonPkgs = pkgs.recurseIntoAttrs (import ./nix { inherit pkgs; }).native; 5 | redemonDrvs = lib.filterAttrs (_: value: lib.isDerivation value) redemonPkgs; 6 | 7 | filterDrvs = inputs: 8 | lib.filter 9 | (drv: 10 | # we wanna filter our own packages so we don't build them when entering 11 | # the shell. They always have `pname` 12 | !(lib.hasAttr "pname" drv) || 13 | drv.pname == null || 14 | !(lib.any (name: name == drv.pname || name == drv.name) (lib.attrNames redemonDrvs))) 15 | inputs; 16 | in 17 | with pkgs; 18 | 19 | (mkShell { 20 | inputsFrom = lib.attrValues redemonDrvs; 21 | buildInputs = with ocamlPackages; [ merlin ocamlformat utop ocaml-lsp ]; 22 | }).overrideAttrs (o: { 23 | propagatedBuildInputs = filterDrvs o.propagatedBuildInputs; 24 | buildInputs = filterDrvs o.buildInputs; 25 | }) 26 | -------------------------------------------------------------------------------- /esy.lock/opam/ppx_yojson_conv_lib.v0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/ppx_yojson_conv_lib" 5 | bug-reports: "https://github.com/janestreet/ppx_yojson_conv_lib/issues" 6 | dev-repo: "git+https://github.com/janestreet/ppx_yojson_conv_lib.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/ppx_yojson_conv_lib/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.02.3"} 14 | "dune" {>= "2.0.0"} 15 | "yojson" {>= "1.7.0"} 16 | ] 17 | synopsis: "Runtime lib for ppx_yojson_conv" 18 | description: " 19 | Part of the Jane Street's PPX rewriters collection. 20 | " 21 | url { 22 | src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz" 23 | checksum: "md5=e23c5593a7211ad4fb09e26e9a74698a" 24 | } 25 | -------------------------------------------------------------------------------- /esy.lock/opam/menhirLib.20200624/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 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" { >= "4.02.3" } 15 | "dune" { >= "2.0.0" } 16 | ] 17 | conflicts: [ 18 | "menhir" { != version } 19 | ] 20 | synopsis: "Runtime support library for parsers generated by Menhir" 21 | url { 22 | src: 23 | "https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz" 24 | checksum: [ 25 | "md5=c37ff53a4a69059e1f8223067b91bb8b" 26 | "sha512=68cd165bd65c93fc9b14820a032b6d760674b3e811d8536c2e26e10f9fc5892720564f109484f12f8d08d849c2983c2eaf350d76ab1122a5b8a3c7674ab2bd39" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /esy.lock/opam/menhirSdk.20200624/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 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" { >= "4.02.3" } 15 | "dune" { >= "2.0.0" } 16 | ] 17 | conflicts: [ 18 | "menhir" { != version } 19 | ] 20 | synopsis: "Compile-time library for auxiliary tools related to Menhir" 21 | url { 22 | src: 23 | "https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz" 24 | checksum: [ 25 | "md5=c37ff53a4a69059e1f8223067b91bb8b" 26 | "sha512=68cd165bd65c93fc9b14820a032b6d760674b3e811d8536c2e26e10f9fc5892720564f109484f12f8d08d849c2983c2eaf350d76ab1122a5b8a3c7674ab2bd39" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /esy.lock/opam/stdio.v0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/stdio" 5 | bug-reports: "https://github.com/janestreet/stdio/issues" 6 | dev-repo: "git+https://github.com/janestreet/stdio.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/stdio/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.04.2"} 14 | "base" {>= "v0.14" & < "v0.15"} 15 | "dune" {>= "2.0.0"} 16 | ] 17 | synopsis: "Standard IO library for OCaml" 18 | description: " 19 | Stdio implements simple input/output functionalities for OCaml. 20 | 21 | It re-exports the input/output functions of the OCaml standard 22 | libraries using a more consistent API. 23 | " 24 | url { 25 | src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/stdio-v0.14.0.tar.gz" 26 | checksum: "md5=4cbdf15f0be88c3258aaeff9e04e00e9" 27 | } 28 | -------------------------------------------------------------------------------- /esy.lock/opam/sexplib0.v0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/sexplib0" 5 | bug-reports: "https://github.com/janestreet/sexplib0/issues" 6 | dev-repo: "git+https://github.com/janestreet/sexplib0.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/sexplib0/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.04.2"} 14 | "dune" {>= "2.0.0"} 15 | ] 16 | synopsis: "Library containing the definition of S-expressions and some base converters" 17 | description: " 18 | Part of Jane Street's Core library 19 | The Core suite of libraries is an industrial strength alternative to 20 | OCaml's standard library that was developed by Jane Street, the 21 | largest industrial user of OCaml. 22 | " 23 | url { 24 | src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/sexplib0-v0.14.0.tar.gz" 25 | checksum: "md5=37aff0af8f8f6f759249475684aebdc4" 26 | } 27 | -------------------------------------------------------------------------------- /.github/workflows/update_package_version.js: -------------------------------------------------------------------------------- 1 | const Child_process = require("child_process"); 2 | const Fs = require("fs"); 3 | const Path = require("path"); 4 | 5 | const version = Fs.readFileSync(Path.resolve("VERSION"), { encoding: "utf8" }) 6 | .toString() 7 | .trim(); 8 | 9 | const updateEsyVersion = (file, version) => { 10 | const packageJson = Fs.readFileSync(file, { encoding: "utf-8" }); 11 | const updatedPackageJson = { 12 | ...JSON.parse(packageJson), 13 | version, 14 | }; 15 | 16 | Fs.writeFileSync(file, JSON.stringify(updatedPackageJson, null, 2) + "\n"); 17 | }; 18 | 19 | const updateDuneVersion = (version) => { 20 | const duneProjectPath = Path.resolve("dune-project"); 21 | const duneProject = Fs.readFileSync(duneProjectPath, { encoding: "utf-8" }); 22 | 23 | const nextDuneProject = duneProject.replace( 24 | /\(version [0-9\.]+\)/g, 25 | `(version ${version})` 26 | ); 27 | Fs.writeFileSync(duneProjectPath, nextDuneProject); 28 | Child_process.execSync("dune build --auto-promote"); 29 | }; 30 | 31 | updateEsyVersion("package.json", version); 32 | updateDuneVersion(version); 33 | -------------------------------------------------------------------------------- /esy.lock/opam/stdlib-shims.0.1.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "The stdlib-shims programmers" 3 | authors: "The stdlib-shims programmers" 4 | homepage: "https://github.com/ocaml/stdlib-shims" 5 | doc: "https://ocaml.github.io/stdlib-shims/" 6 | dev-repo: "git+https://github.com/ocaml/stdlib-shims.git" 7 | bug-reports: "https://github.com/ocaml/stdlib-shims/issues" 8 | tags: ["stdlib" "compatibility" "org:ocaml"] 9 | license: ["typeof OCaml system"] 10 | depends: [ 11 | "ocaml" {>="4.02.3"} 12 | "dune" 13 | ("dune" {>= "2.7.0"} | "dune" & "ocaml" {<"4.12.0~~"}) 14 | ] 15 | build: [ "dune" "build" "-p" name "-j" jobs ] 16 | synopsis: "Backport some of the new stdlib features to older compiler" 17 | description: """ 18 | Backport some of the new stdlib features to older compiler, 19 | such as the Stdlib module. 20 | 21 | This allows projects that require compatibility with older compiler to 22 | use these new features in their code. 23 | """ 24 | url { 25 | src: 26 | "https://github.com/ocaml/stdlib-shims/releases/download/0.1.0/stdlib-shims-0.1.0.tbz" 27 | checksum: "md5=12b5704eed70c6bff5ac39a16db1425d" 28 | } 29 | -------------------------------------------------------------------------------- /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/fpath.0.7.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["The fpath programmers"] 4 | homepage: "https://erratique.ch/software/fpath" 5 | doc: "https://erratique.ch/software/fpath/doc" 6 | dev-repo: "git+https://erratique.ch/repos/fpath.git" 7 | bug-reports: "https://github.com/dbuenzli/fpath/issues" 8 | tags: [ "file" "system" "path" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.03.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build & >= "0.9.0"} 15 | "astring" 16 | ] 17 | build: [[ 18 | "ocaml" "pkg/pkg.ml" "build" 19 | "--dev-pkg=true" {dev} ]] 20 | 21 | synopsis: """File system paths for OCaml""" 22 | description: """\ 23 | 24 | Fpath is an OCaml module for handling file system paths with POSIX or 25 | Windows conventions. Fpath processes paths without accessing the file 26 | system and is independent from any system library. 27 | 28 | Fpath depends on [Astring][astring] and is distributed under the ISC 29 | license. 30 | 31 | [astring]: http://erratique.ch/software/astring 32 | """ 33 | url { 34 | archive: "https://erratique.ch/software/fpath/releases/fpath-0.7.3.tbz" 35 | checksum: "0740b530e8fed5b0adc5eee8463cfc2f" 36 | } 37 | -------------------------------------------------------------------------------- /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.1-only with OCaml-LGPL-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-only with OCaml-LGPL-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/luv.0.5.6/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | 3 | synopsis: "Binding to libuv: cross-platform asynchronous I/O" 4 | 5 | version: "0.5.6" 6 | license: "MIT" 7 | homepage: "https://github.com/aantron/luv" 8 | doc: "https://aantron.github.io/luv" 9 | bug-reports: "https://github.com/aantron/luv/issues" 10 | 11 | authors: "Anton Bachin " 12 | maintainer: "Anton Bachin " 13 | dev-repo: "git+https://github.com/aantron/luv.git" 14 | 15 | depends: [ 16 | "base-unix" {build} 17 | "ctypes" {>= "0.13.0"} 18 | "dune" {>= "2.0.0"} 19 | "ocaml" {>= "4.02.0"} 20 | "result" 21 | 22 | "alcotest" {with-test & >= "0.8.1"} 23 | "base-unix" {with-test} 24 | ] 25 | 26 | build: [ 27 | ["dune" "build" "-p" name "-j" jobs] 28 | ] 29 | 30 | description: "Luv is a binding to libuv, the cross-platform C library that does 31 | asynchronous I/O in Node.js and runs its main loop. 32 | 33 | Besides asynchronous I/O, libuv also supports multiprocessing and 34 | multithreading. Multiple event loops can be run in different threads. libuv also 35 | exposes a lot of other functionality, amounting to a full OS API, and an 36 | alternative to the standard module Unix." 37 | 38 | url { 39 | src: "https://github.com/aantron/luv/releases/download/0.5.6/luv-0.5.6.tar.gz" 40 | checksum: "md5=fb78fd1b179f5c9585e79b5a1c5ff644" 41 | } 42 | -------------------------------------------------------------------------------- /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/base.v0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/base" 5 | bug-reports: "https://github.com/janestreet/base/issues" 6 | dev-repo: "git+https://github.com/janestreet/base.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/base/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.07.0" & < "4.12"} 14 | "sexplib0" {>= "v0.14" & < "v0.15"} 15 | "dune" {>= "2.0.0"} 16 | "dune-configurator" 17 | ] 18 | synopsis: "Full standard library replacement for OCaml" 19 | description: " 20 | Full standard library replacement for OCaml 21 | 22 | Base is a complete and portable alternative to the OCaml standard 23 | library. It provides all standard functionalities one would expect 24 | from a language standard library. It uses consistent conventions 25 | across all of its module. 26 | 27 | Base aims to be usable in any context. As a result system dependent 28 | features such as I/O are not offered by Base. They are instead 29 | provided by companion libraries such as stdio: 30 | 31 | https://github.com/janestreet/stdio 32 | " 33 | url { 34 | src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/base-v0.14.0.tar.gz" 35 | checksum: "md5=5a00382c724e97b6768aaa27481dd3cc" 36 | } 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # redemon 2 | 3 | ## Basic usage 4 | 5 | Runs `echo "Hello World!"` whenever a file in the directory `foo` changes. 6 | 7 | ```sh 8 | redemon --path=foo echo "Hello World!" 9 | ``` 10 | 11 | ## Manual 12 | 13 | ``` 14 | REDEMON(1) Redemon Manual REDEMON(1) 15 | 16 | 17 | 18 | NAME 19 | redemon - A filewatcher built with luv 20 | 21 | SYNOPSIS 22 | redemon [OPTION]... COMMAND [ARGS]... 23 | 24 | ARGUMENTS 25 | ARGS 26 | args to send to COMMAND 27 | 28 | COMMAND (required) 29 | Command to run 30 | 31 | OPTIONS 32 | --delay=DELAY (absent=100) 33 | Time in ms to wait before restarting 34 | 35 | -e EXT, --extensions=EXT 36 | File extensions that should trigger changes 37 | 38 | --help[=FMT] (default=auto) 39 | Show this help in format FMT. The value FMT must be one of `auto', 40 | `pager', `groff' or `plain'. With `auto', the format is `pager` or 41 | `plain' whenever the TERM env var is `dumb' or undefined. 42 | 43 | -p PATH, --path=PATH 44 | Path to watch, repeatable 45 | 46 | --paths=PATHS 47 | Paths to watch as comma separated list 48 | 49 | --signal=SIGNAL (absent=SIGTERM) 50 | Signal sent to process when exiting 51 | 52 | -v, --verbose 53 | Verbose logging 54 | 55 | Redemon REDEMON(1) 56 | ``` 57 | -------------------------------------------------------------------------------- /esy.lock/opam/ocaml-migrate-parsetree.1.7.3/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" & < "4.12"} 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.7.3/ocaml-migrate-parsetree-v1.7.3.tbz" 33 | checksum: [ 34 | "sha256=6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55" 35 | "sha512=fe9c74a244d160d973d8ca62e356edad4c872fc46471ddc668f854456d3979576895d446d49da2aee61c65b441b72c573225b0b254ab2eac4a0fb4debdbce9d4" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /esy.lock/opam/astring.0.8.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["The astring programmers"] 4 | homepage: "https://erratique.ch/software/astring" 5 | doc: "https://erratique.ch/software/astring/doc" 6 | dev-repo: "git+http://erratique.ch/repos/astring.git" 7 | bug-reports: "https://github.com/dbuenzli/astring/issues" 8 | tags: [ "string" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.05.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} ] 15 | build: [[ "ocaml" "pkg/pkg.ml" "build" "--pinned" "%{pinned}%" ]] 16 | 17 | synopsis: """Alternative String module for OCaml""" 18 | description: """\ 19 | 20 | Astring exposes an alternative `String` module for OCaml. This module 21 | tries to balance minimality and expressiveness for basic, index-free, 22 | string processing and provides types and functions for substrings, 23 | string sets and string maps. 24 | 25 | Remaining compatible with the OCaml `String` module is a non-goal. The 26 | `String` module exposed by Astring has exception safe functions, 27 | removes deprecated and rarely used functions, alters some signatures 28 | and names, adds a few missing functions and fully exploits OCaml's 29 | newfound string immutability. 30 | 31 | Astring depends only on the OCaml standard library. It is distributed 32 | under the ISC license. 33 | """ 34 | url { 35 | archive: "https://erratique.ch/software/astring/releases/astring-0.8.5.tbz" 36 | checksum: "e148907c24157d1df43bec89b58b3ec8" 37 | } 38 | -------------------------------------------------------------------------------- /esy.lock/opam/dune-build-info.2.7.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Embed build informations inside executable" 3 | description: """ 4 | The build-info library allows to access information about how the 5 | executable was built, such as the version of the project at which it 6 | was built or the list of statically linked libraries with their 7 | versions. It supports reporting the version from the version control 8 | system during development to get an precise reference of when the 9 | executable was built. 10 | """ 11 | maintainer: ["Jane Street Group, LLC "] 12 | authors: ["Jane Street Group, LLC "] 13 | license: "MIT" 14 | homepage: "https://github.com/ocaml/dune" 15 | doc: "https://dune.readthedocs.io/" 16 | bug-reports: "https://github.com/ocaml/dune/issues" 17 | depends: [ 18 | "dune" {>= "2.7"} 19 | "odoc" {with-doc} 20 | ] 21 | dev-repo: "git+https://github.com/ocaml/dune.git" 22 | build: [ 23 | ["dune" "subst"] {dev} 24 | [ 25 | "dune" 26 | "build" 27 | "-p" 28 | name 29 | "-j" 30 | jobs 31 | "@install" 32 | "@doc" {with-doc} 33 | ] 34 | ] 35 | x-commit-hash: "5472766b2448308a7160dfd0fca1ec711e124a5c" 36 | url { 37 | src: "https://github.com/ocaml/dune/releases/download/2.7.1/dune-2.7.1.tbz" 38 | checksum: [ 39 | "sha256=c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d" 40 | "sha512=2b4b311824471dac8196181d7c7267f96b1b73f35341b72019f169cf6d42a19254e90bdfba2d3ecb138ad318e2e2431dd0ec6c38d9efe1da382ec95f5d9e959b" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /esy.lock/opam/ocamlformat.0.15.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "OCamlFormat Team " 3 | authors: "Josh Berdine " 4 | homepage: "https://github.com/ocaml-ppx/ocamlformat" 5 | bug-reports: "https://github.com/ocaml-ppx/ocamlformat/issues" 6 | dev-repo: "git+https://github.com/ocaml-ppx/ocamlformat.git" 7 | license: "MIT" 8 | build: [ 9 | ["ocaml" "tools/gen_version.mlt" "lib/Version.ml" version] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.06" & < "4.12"} 15 | "alcotest" {with-test} 16 | "base" {>= "v0.12.0" & < "v0.15"} 17 | "base-unix" 18 | "cmdliner" 19 | "dune" {>= "2.2.0"} 20 | "fix" 21 | "fpath" 22 | "menhir" 23 | "ocaml-migrate-parsetree" {>= "1.7.3" & < "2.0.0"} 24 | "ocp-indent" {with-test} 25 | "odoc" {>= "1.4.2"} 26 | "re" 27 | "stdio" {< "v0.15"} 28 | "uuseg" {>= "10.0.0"} 29 | "uutf" {>= "1.0.1"} 30 | ] 31 | synopsis: "Auto-formatter for OCaml code" 32 | description: "OCamlFormat is a tool to automatically format OCaml code in a uniform style." 33 | x-commit-hash: "e9e70f4d3aea202ec8ea4afd7ccb828b36822799" 34 | url { 35 | src: 36 | "https://github.com/ocaml-ppx/ocamlformat/releases/download/0.15.0/ocamlformat-0.15.0.tbz" 37 | checksum: [ 38 | "sha256=263b4a8907e1b820ae0c1db55183ac3a44c4eaa05e8f1a144baa1a9bcadf2005" 39 | "sha512=2bc0b826567fa71201031a730568b822938c66c56da47b05b8896b68439da3d0a8b9bc552fa5cacab95bf9192a1b6e583655fd90095aa686daa91cd2bdf4725a" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /esy.lock/opam/odoc.1.5.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | 3 | homepage: "http://github.com/ocaml/odoc" 4 | doc: "https://ocaml.github.io/odoc/" 5 | bug-reports: "https://github.com/ocaml/odoc/issues" 6 | license: "ISC" 7 | 8 | authors: [ 9 | "Thomas Refis " 10 | "David Sheets " 11 | "Leo White " 12 | "Anton Bachin " 13 | "Jon Ludlam " 14 | ] 15 | maintainer: "Jon Ludlam " 16 | dev-repo: "git+https://github.com/ocaml/odoc.git" 17 | 18 | synopsis: "OCaml documentation generator" 19 | description: """ 20 | Odoc is a documentation generator for OCaml. It reads doc comments, 21 | delimited with `(** ... *)`, and outputs HTML. 22 | """ 23 | 24 | depends: [ 25 | "astring" 26 | "cmdliner" 27 | "cppo" {build} 28 | "dune" 29 | "fpath" 30 | "ocaml" {>= "4.02.0" & < "4.12"} 31 | "result" 32 | "tyxml" {>= "4.3.0"} 33 | 34 | "alcotest" {dev & >= "0.8.3"} 35 | "markup" {dev & >= "0.8.0"} 36 | "ocamlfind" {dev} 37 | "sexplib" {dev & >= "113.33.00"} 38 | 39 | "bisect_ppx" {with-test & >= "1.3.0"} 40 | ] 41 | 42 | build: [ 43 | ["dune" "subst"] {pinned} 44 | ["dune" "build" "-p" name "-j" jobs] 45 | ] 46 | url { 47 | src: "https://github.com/ocaml/odoc/releases/download/1.5.1/odoc-1.5.1.tbz" 48 | checksum: [ 49 | "sha256=ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f" 50 | "sha512=b2d12277d61e1e52354128d459d2ad49bea24a4d46db89790769c2843c4b00beaee3ea7d0215211079174c0bd893de6bf52dcbb71e46622728be7491d91058b2" 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /esy.lock/opam/uucp.13.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: [ "The uucp programmers" ] 4 | homepage: "https://erratique.ch/software/uucp" 5 | doc: "https://erratique.ch/software/uucp/doc/Uucp" 6 | dev-repo: "git+https://erratique.ch/repos/uucp.git" 7 | bug-reports: "https://github.com/dbuenzli/uucp/issues" 8 | tags: [ "unicode" "text" "character" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.03.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "uucd" {with-test} # dev really 16 | "uunf" {with-test} 17 | "uutf" {with-test} 18 | ] 19 | depopts: [ "uunf" "uutf" "cmdliner" ] 20 | conflicts: [ "uutf" {< "1.0.1"} 21 | "cmdliner" {< "1.0.0"} ] 22 | build: [[ 23 | "ocaml" "pkg/pkg.ml" "build" 24 | "--dev-pkg" "%{pinned}%" 25 | "--with-uutf" "%{uutf:installed}%" 26 | "--with-uunf" "%{uunf:installed}%" 27 | "--with-cmdliner" "%{cmdliner:installed}%" 28 | ]] 29 | 30 | synopsis: """Unicode character properties for OCaml""" 31 | description: """\ 32 | 33 | Uucp is an OCaml library providing efficient access to a selection of 34 | character properties of the [Unicode character database][1]. 35 | 36 | Uucp is independent from any Unicode text data structure and has no 37 | dependencies. It is distributed under the ISC license. 38 | 39 | [1]: http://www.unicode.org/reports/tr44/ 40 | """ 41 | url { 42 | archive: "https://erratique.ch/software/uucp/releases/uucp-13.0.0.tbz" 43 | checksum: "07e706249ddb2d02f0fa298804d3c739" 44 | } 45 | -------------------------------------------------------------------------------- /esy.lock/opam/uutf.1.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/uutf" 5 | doc: "http://erratique.ch/software/uutf/doc/Uutf" 6 | dev-repo: "git+http://erratique.ch/repos/uutf.git" 7 | bug-reports: "https://github.com/dbuenzli/uutf/issues" 8 | tags: [ "unicode" "text" "utf-8" "utf-16" "codec" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "uchar" 16 | ] 17 | depopts: ["cmdliner"] 18 | conflicts: ["cmdliner" { < "0.9.6"} ] 19 | build: [[ 20 | "ocaml" "pkg/pkg.ml" "build" 21 | "--pinned" "%{pinned}%" 22 | "--with-cmdliner" "%{cmdliner:installed}%" ]] 23 | synopsis: """Non-blocking streaming Unicode codec for OCaml""" 24 | description: """\ 25 | 26 | Uutf is a non-blocking streaming codec to decode and encode the UTF-8, 27 | UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficiently 28 | work character by character without blocking on IO. Decoders perform 29 | character position tracking and support newline normalization. 30 | 31 | Functions are also provided to fold over the characters of UTF encoded 32 | OCaml string values and to directly encode characters in OCaml 33 | Buffer.t values. 34 | 35 | Uutf has no dependency and is distributed under the ISC license. 36 | """ 37 | url { 38 | archive: "http://erratique.ch/software/uutf/releases/uutf-1.0.2.tbz" 39 | checksum: "a7c542405a39630c689a82bd7ef2292c" 40 | } 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, Ulrik Strid 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /esy.lock/opam/dune-configurator.2.7.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Helper library for gathering system configuration" 3 | description: """ 4 | dune-configurator is a small library that helps writing OCaml scripts that 5 | test features available on the system, in order to generate config.h 6 | files for instance. 7 | Among other things, dune-configurator allows one to: 8 | - test if a C program compiles 9 | - query pkg-config 10 | - import #define from OCaml header files 11 | - generate config.h file 12 | """ 13 | maintainer: ["Jane Street Group, LLC "] 14 | authors: ["Jane Street Group, LLC "] 15 | license: "MIT" 16 | homepage: "https://github.com/ocaml/dune" 17 | doc: "https://dune.readthedocs.io/" 18 | bug-reports: "https://github.com/ocaml/dune/issues" 19 | depends: [ 20 | "dune" {>= "2.7"} 21 | "ocaml" {>= "4.03.0"} 22 | "result" 23 | "csexp" {>= "1.3.0"} 24 | "odoc" {with-doc} 25 | ] 26 | dev-repo: "git+https://github.com/ocaml/dune.git" 27 | build: [ 28 | ["dune" "subst"] {dev} 29 | [ 30 | "dune" 31 | "build" 32 | "-p" 33 | name 34 | "-j" 35 | jobs 36 | "@install" 37 | "@doc" {with-doc} 38 | ] 39 | ] 40 | x-commit-hash: "5472766b2448308a7160dfd0fca1ec711e124a5c" 41 | url { 42 | src: "https://github.com/ocaml/dune/releases/download/2.7.1/dune-2.7.1.tbz" 43 | checksum: [ 44 | "sha256=c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d" 45 | "sha512=2b4b311824471dac8196181d7c7267f96b1b73f35341b72019f169cf6d42a19254e90bdfba2d3ecb138ad318e2e2431dd0ec6c38d9efe1da382ec95f5d9e959b" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /esy.lock/opam/fmt.0.8.9/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: [ "The fmt programmers" ] 4 | homepage: "https://erratique.ch/software/fmt" 5 | doc: "https://erratique.ch/software/fmt" 6 | dev-repo: "git+https://erratique.ch/repos/fmt.git" 7 | bug-reports: "https://github.com/dbuenzli/fmt/issues" 8 | tags: [ "string" "format" "pretty-print" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.05.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build & >= "0.9.0"} 15 | # Can be removed once ocaml >= 4.07 16 | "seq" 17 | "stdlib-shims" 18 | ] 19 | depopts: [ "base-unix" "cmdliner" ] 20 | conflicts: [ "cmdliner" {< "0.9.8"} ] 21 | build: [[ 22 | "ocaml" "pkg/pkg.ml" "build" 23 | "--dev-pkg" "%{pinned}%" 24 | "--with-base-unix" "%{base-unix:installed}%" 25 | "--with-cmdliner" "%{cmdliner:installed}%" ]] 26 | 27 | synopsis: """OCaml Format pretty-printer combinators""" 28 | description: """\ 29 | 30 | Fmt exposes combinators to devise `Format` pretty-printing functions. 31 | 32 | Fmt depends only on the OCaml standard library. The optional `Fmt_tty` 33 | library that allows to setup formatters for terminal color output 34 | depends on the Unix library. The optional `Fmt_cli` library that 35 | provides command line support for Fmt depends on [`Cmdliner`][cmdliner]. 36 | 37 | Fmt is distributed under the ISC license. 38 | 39 | [cmdliner]: http://erratique.ch/software/cmdliner 40 | """ 41 | url { 42 | archive: "https://erratique.ch/software/fmt/releases/fmt-0.8.9.tbz" 43 | checksum: "4001b51cde90ea4fd99a4a5033ecf411" 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 | depopts: ["graphics"] 51 | -------------------------------------------------------------------------------- /esy.lock/opam/tyxml.4.4.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "dev@ocsigen.org" 3 | homepage: "https://github.com/ocsigen/tyxml/" 4 | bug-reports: "https://github.com/ocsigen/tyxml/issues" 5 | doc: "https://ocsigen.org/tyxml/manual/" 6 | dev-repo: "git+https://github.com/ocsigen/tyxml.git" 7 | license: "LGPL-2.1 with OCaml linking exception" 8 | 9 | build: [ 10 | ["dune" "subst"] {pinned} 11 | ["dune" "build" "-p" name "-j" jobs] 12 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 13 | ] 14 | 15 | depends: [ 16 | "ocaml" {>= "4.02"} 17 | "dune" 18 | "alcotest" {with-test} 19 | "seq" 20 | "uutf" {>= "1.0.0"} 21 | "re" {>= "1.5.0"} 22 | ] 23 | 24 | synopsis:"TyXML is a library for building correct HTML and SVG documents" 25 | description:""" 26 | TyXML provides a set of convenient combinators that uses the OCaml 27 | type system to ensure the validity of the generated documents. TyXML 28 | can be used with any representation of HTML and SVG: the textual one, 29 | provided directly by this package, or DOM trees (`js_of_ocaml-tyxml`) 30 | virtual DOM (`virtual-dom`) and reactive or replicated trees 31 | (`eliom`). You can also create your own representation and use it to 32 | instantiate a new set of combinators. 33 | 34 | ```ocaml 35 | open Tyxml 36 | let to_ocaml = Html.(a ~a:[a_href "ocaml.org"] [txt "OCaml!"]) 37 | ``` 38 | """ 39 | authors: "The ocsigen team" 40 | url { 41 | src: 42 | "https://github.com/ocsigen/tyxml/releases/download/4.4.0/tyxml-4.4.0.tbz" 43 | checksum: [ 44 | "sha256=516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530" 45 | "sha512=d5f2187f8410524cec7a14b28e8950837070eb0b6571b015dd06076c2841eb7ccaffa86d5d2307eaf1950ee62f9fb926477dac01c870d9c1a2f525853cb44d0c" 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /esy.lock/opam/conf-pkg-config.1.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "unixjunkie@sdf.org" 3 | authors: ["Francois Berenger"] 4 | homepage: "http://www.freedesktop.org/wiki/Software/pkg-config/" 5 | bug-reports: "https://github.com/ocaml/opam-repository/issues" 6 | license: "GPL-1.0-or-later" 7 | build: [ 8 | ["pkg-config" "--help"] 9 | ] 10 | install: [ 11 | ["ln" "-s" "/usr/local/bin/pkgconf" "%{bin}%/pkg-config"] {os = "openbsd"} 12 | ] 13 | remove: [ 14 | ["rm" "-f" "%{bin}%/pkg-config"] {os = "openbsd"} 15 | ] 16 | post-messages: [ 17 | "conf-pkg-config: A symlink to /usr/local/bin/pkgconf has been installed in the OPAM bin directory (%{bin}%) on your PATH as 'pkg-config'. This is necessary for correct operation." {os = "openbsd"} 18 | ] 19 | depexts: [ 20 | ["pkg-config"] {os-family = "debian"} 21 | ["pkgconf"] {os-distribution = "arch"} 22 | ["pkgconfig"] {os-distribution = "fedora"} 23 | ["pkgconfig"] {os-distribution = "centos" & os-version <= "7"} 24 | ["pkgconfig"] {os-distribution = "mageia"} 25 | ["pkgconfig"] {os-distribution = "rhel" & os-version <= "7"} 26 | ["pkgconfig"] {os-distribution = "ol"} 27 | ["pkgconf"] {os-distribution = "alpine"} 28 | ["pkgconfig"] {os-distribution = "nixos"} 29 | ["devel/pkgconf"] {os = "openbsd"} 30 | ["pkg-config"] {os = "macos" & os-distribution = "homebrew"} 31 | ["pkgconfig"] {os = "macos" & os-distribution = "macports"} 32 | ["pkgconf"] {os = "freebsd"} 33 | ["pkgconf-pkg-config"] {os-distribution = "rhel" & os-version >= "8"} 34 | ["pkgconf-pkg-config"] {os-distribution = "centos" & os-version >= "8"} 35 | ["pkg-config"] {os-distribution = "cygwinports"} 36 | ] 37 | synopsis: "Virtual package relying on pkg-config installation" 38 | description: """ 39 | This package can only install if the pkg-config package is installed 40 | on the system.""" 41 | flags: conf 42 | -------------------------------------------------------------------------------- /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/uuseg.13.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["The uuseg programmers"] 4 | homepage: "https://erratique.ch/software/uuseg" 5 | doc: "https://erratique.ch/software/uuseg" 6 | dev-repo: "git+https://erratique.ch/repos/uuseg.git" 7 | bug-reports: "https://github.com/dbuenzli/uuseg/issues" 8 | tags: [ "segmentation" "text" "unicode" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ "ocaml" {>= "4.03.0"} 11 | "ocamlfind" {build} 12 | "ocamlbuild" {build} 13 | "topkg" {build} 14 | "uucp" {>= "13.0.0" & < "14.0.0"} ] 15 | depopts: [ "uutf" 16 | "cmdliner" 17 | "uutf" {with-test} 18 | "cmdliner" {with-test} ] 19 | conflicts: [ "uutf" {< "1.0.0"} ] 20 | build: [[ 21 | "ocaml" "pkg/pkg.ml" "build" 22 | "--pinned" "%{pinned}%" 23 | "--with-uutf" "%{uutf:installed}%" 24 | "--with-cmdliner" "%{cmdliner:installed}%" ]] 25 | 26 | synopsis: """Unicode text segmentation for OCaml""" 27 | description: """\ 28 | 29 | Uuseg is an OCaml library for segmenting Unicode text. It implements 30 | the locale independent [Unicode text segmentation algorithms][1] to 31 | detect grapheme cluster, word and sentence boundaries and the 32 | [Unicode line breaking algorithm][2] to detect line break 33 | opportunities. 34 | 35 | The library is independent from any IO mechanism or Unicode text data 36 | structure and it can process text without a complete in-memory 37 | representation. 38 | 39 | Uuseg depends on [Uucp](http://erratique.ch/software/uucp) and 40 | optionally on [Uutf](http://erratique.ch/software/uutf) for support on 41 | OCaml UTF-X encoded strings. It is distributed under the ISC license. 42 | 43 | [1]: http://www.unicode.org/reports/tr29/ 44 | [2]: http://www.unicode.org/reports/tr14/ 45 | """ 46 | url { 47 | archive: "https://erratique.ch/software/uuseg/releases/uuseg-13.0.0.tbz" 48 | checksum: "a07a97fff61da604614ea8da0547ef6a" 49 | } 50 | -------------------------------------------------------------------------------- /esy.lock/opam/topkg.1.0.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/topkg" 5 | doc: "http://erratique.ch/software/topkg/doc" 6 | license: "ISC" 7 | dev-repo: "git+http://erratique.ch/repos/topkg.git" 8 | bug-reports: "https://github.com/dbuenzli/topkg/issues" 9 | tags: ["packaging" "ocamlbuild" "org:erratique"] 10 | depends: [ 11 | "ocaml" {>= "4.03.0"} 12 | "ocamlfind" {build & >= "1.6.1"} 13 | "ocamlbuild" ] 14 | build: [[ 15 | "ocaml" "pkg/pkg.ml" "build" 16 | "--pkg-name" name 17 | "--dev-pkg" "%{pinned}%" ]] 18 | synopsis: """The transitory OCaml software packager""" 19 | description: """\ 20 | 21 | Topkg is a packager for distributing OCaml software. It provides an 22 | API to describe the files a package installs in a given build 23 | configuration and to specify information about the package's 24 | distribution, creation and publication procedures. 25 | 26 | The optional topkg-care package provides the `topkg` command line tool 27 | which helps with various aspects of a package's life cycle: creating 28 | and linting a distribution, releasing it on the WWW, publish its 29 | documentation, add it to the OCaml opam repository, etc. 30 | 31 | Topkg is distributed under the ISC license and has **no** 32 | dependencies. This is what your packages will need as a *build* 33 | dependency. 34 | 35 | Topkg-care is distributed under the ISC license it depends on 36 | [fmt][fmt], [logs][logs], [bos][bos], [cmdliner][cmdliner], 37 | [webbrowser][webbrowser] and `opam-format`. 38 | 39 | [fmt]: http://erratique.ch/software/fmt 40 | [logs]: http://erratique.ch/software/logs 41 | [bos]: http://erratique.ch/software/bos 42 | [cmdliner]: http://erratique.ch/software/cmdliner 43 | [webbrowser]: http://erratique.ch/software/webbrowser 44 | """ 45 | url { 46 | archive: "http://erratique.ch/software/topkg/releases/topkg-1.0.3.tbz" 47 | checksum: "e285f7a296d77ee7d831ba9a6bfb396f" 48 | } 49 | -------------------------------------------------------------------------------- /esy.lock/opam/csexp.1.3.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Parsing and printing of S-expressions in Canonical form" 3 | description: """ 4 | 5 | This library provides minimal support for Canonical S-expressions 6 | [1]. Canonical S-expressions are a binary encoding of S-expressions 7 | that is super simple and well suited for communication between 8 | programs. 9 | 10 | This library only provides a few helpers for simple applications. If 11 | you need more advanced support, such as parsing from more fancy input 12 | sources, you should consider copying the code of this library given 13 | how simple parsing S-expressions in canonical form is. 14 | 15 | To avoid a dependency on a particular S-expression library, the only 16 | module of this library is parameterised by the type of S-expressions. 17 | 18 | [1] https://en.wikipedia.org/wiki/Canonical_S-expressions 19 | """ 20 | maintainer: ["Jeremie Dimino "] 21 | authors: [ 22 | "Quentin Hocquet " 23 | "Jane Street Group, LLC " 24 | "Jeremie Dimino " 25 | ] 26 | license: "MIT" 27 | homepage: "https://github.com/ocaml-dune/csexp" 28 | doc: "https://ocaml-dune.github.io/csexp/" 29 | bug-reports: "https://github.com/ocaml-dune/csexp/issues" 30 | depends: [ 31 | "dune" {>= "1.11"} 32 | "ocaml" {>= "4.02.3"} 33 | "result" {>= "1.5"} 34 | ] 35 | dev-repo: "git+https://github.com/ocaml-dune/csexp.git" 36 | build: [ 37 | ["dune" "subst"] {pinned} 38 | [ 39 | "dune" 40 | "build" 41 | "-p" 42 | name 43 | "-j" 44 | jobs 45 | "@install" 46 | # "@runtest" {with-test & ocaml:version >= "4.04"} 47 | "@doc" {with-doc} 48 | ] 49 | ] 50 | x-commit-hash: "19a2e7bc171a707059c73d78dd18e4e3ff03ac9b" 51 | url { 52 | src: 53 | "https://github.com/ocaml-dune/csexp/releases/download/1.3.2/csexp-1.3.2.tbz" 54 | checksum: [ 55 | "sha256=f21f427b277f07e8bfd050e00c640a5893c1bf4b689147640fa383255dcf1c4a" 56 | "sha512=ff1bd6a7c6bb3a73ca9ab0506c9ec1f357657deaa9ecc7eb32955817d9b0f266d976af3e2b8fc34c621cb0caf1fde55f9a609dd184e2054f500bf09afeb83026" 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /esy.lock/opam/ctypes.0.17.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "yallop@gmail.com" 3 | homepage: "https://github.com/ocamllabs/ocaml-ctypes" 4 | doc: "http://ocamllabs.github.io/ocaml-ctypes" 5 | dev-repo: "git+http://github.com/ocamllabs/ocaml-ctypes.git" 6 | bug-reports: "http://github.com/ocamllabs/ocaml-ctypes/issues" 7 | license: "MIT" 8 | build: [ 9 | [make "XEN=%{mirage-xen:enable}%" "libffi.config"] 10 | {ctypes-foreign:installed} 11 | ["touch" "libffi.config"] {!ctypes-foreign:installed} 12 | [make "XEN=%{mirage-xen:enable}%" "ctypes-base" "ctypes-stubs"] 13 | [make "XEN=%{mirage-xen:enable}%" "ctypes-foreign"] 14 | {ctypes-foreign:installed} 15 | [make "test"] {with-test} 16 | ] 17 | install: [ 18 | [make "install" "XEN=%{mirage-xen:enable}%"] 19 | ] 20 | depends: [ 21 | "ocaml" {>= "4.02.3"} 22 | "integers" { >= "0.3.0" } 23 | "ocamlfind" {build} 24 | "conf-pkg-config" {build} 25 | "lwt" {with-test & >= "3.2.0"} 26 | "ctypes-foreign" {with-test} 27 | "ounit" {with-test} 28 | "conf-ncurses" {with-test} 29 | ] 30 | depopts: [ 31 | "ctypes-foreign" 32 | "mirage-xen" 33 | ] 34 | tags: ["org:ocamllabs" "org:mirage"] 35 | synopsis: "Combinators for binding to C libraries without writing any C" 36 | description: """ 37 | ctypes is a library for binding to C libraries using pure OCaml. The primary 38 | aim is to make writing C extensions as straightforward as possible. 39 | 40 | The core of ctypes is a set of combinators for describing the structure of C 41 | types -- numeric types, arrays, pointers, structs, unions and functions. You 42 | can use these combinators to describe the types of the functions that you want 43 | to call, then bind directly to those functions -- all without writing or 44 | generating any C! 45 | 46 | To install the optional `ctypes.foreign` interface (which uses `libffi` to 47 | provide dynamic access to foreign libraries), you will need to also install 48 | the `ctypes-foreign` optional dependency: 49 | 50 | opam install ctypes ctypes-foreign 51 | 52 | This will make the `ctypes.foreign` ocamlfind subpackage available.""" 53 | authors: "yallop@gmail.com" 54 | url { 55 | src: "https://github.com/ocamllabs/ocaml-ctypes/archive/0.17.1.tar.gz" 56 | checksum: "md5=508ea062105518c14fd516aa2ea9db5e" 57 | } 58 | -------------------------------------------------------------------------------- /esy.lock/opam/logs.0.7.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["The logs programmers"] 4 | homepage: "https://erratique.ch/software/logs" 5 | doc: "https://erratique.ch/software/logs/doc" 6 | dev-repo: "git+https://erratique.ch/repos/logs.git" 7 | bug-reports: "https://github.com/dbuenzli/logs/issues" 8 | tags: [ "log" "system" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.03.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "mtime" {with-test} ] 16 | depopts: [ 17 | "js_of_ocaml" 18 | "fmt" 19 | "cmdliner" 20 | "lwt" 21 | "base-threads" 22 | ] 23 | conflicts: [ 24 | "js_of_ocaml" { < "3.3.0" } ] 25 | 26 | build: [[ 27 | "ocaml" "pkg/pkg.ml" "build" 28 | "--pinned" "%{pinned}%" 29 | "--with-js_of_ocaml" "%{js_of_ocaml:installed}%" 30 | "--with-fmt" "%{fmt:installed}%" 31 | "--with-cmdliner" "%{cmdliner:installed}%" 32 | "--with-lwt" "%{lwt:installed}%" 33 | "--with-base-threads" "%{base-threads:installed}%" 34 | ]] 35 | 36 | synopsis: """Logging infrastructure for OCaml""" 37 | description: """\ 38 | 39 | Logs provides a logging infrastructure for OCaml. Logging is performed 40 | on sources whose reporting level can be set independently. Log message 41 | report is decoupled from logging and is handled by a reporter. 42 | 43 | A few optional log reporters are distributed with the base library and 44 | the API easily allows to implement your own. 45 | 46 | `Logs` has no dependencies. The optional `Logs_fmt` reporter on OCaml 47 | formatters depends on [Fmt][fmt]. The optional `Logs_browser` 48 | reporter that reports to the web browser console depends on 49 | [js_of_ocaml][jsoo]. The optional `Logs_cli` library that provides 50 | command line support for controlling Logs depends on 51 | [`Cmdliner`][cmdliner]. The optional `Logs_lwt` library that provides 52 | Lwt logging functions depends on [`Lwt`][lwt] 53 | 54 | Logs and its reporters are distributed under the ISC license. 55 | 56 | [fmt]: http://erratique.ch/software/fmt 57 | [jsoo]: http://ocsigen.org/js_of_ocaml/ 58 | [cmdliner]: http://erratique.ch/software/cmdliner 59 | [lwt]: http://ocsigen.org/lwt/ 60 | """ 61 | url { 62 | archive: "https://erratique.ch/software/logs/releases/logs-0.7.0.tbz" 63 | checksum: "2bf021ca13331775e33cf34ab60246f7" 64 | } 65 | -------------------------------------------------------------------------------- /esy.lock/opam/dune.2.7.1/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, has very low-overhead, and supports parallel builds on 10 | all platforms. It has no system dependencies; all you need to build 11 | dune or packages using dune is OCaml. You don't need 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 | conflicts: [ 29 | "dune-configurator" {< "2.3.0"} 30 | "odoc" {< "1.3.0"} 31 | "dune-release" {< "1.3.0"} 32 | "js_of_ocaml-compiler" {< "3.6.0"} 33 | "jbuilder" {= "transition"} 34 | ] 35 | dev-repo: "git+https://github.com/ocaml/dune.git" 36 | build: [ 37 | # opam 2 sets OPAM_SWITCH_PREFIX, so we don't need a hardcoded path 38 | ["ocaml" "configure.ml" "--libdir" lib] {opam-version < "2"} 39 | ["ocaml" "bootstrap.ml" "-j" jobs] 40 | ["./dune.exe" "build" "-p" name "--profile" "dune-bootstrap" "-j" jobs] 41 | ] 42 | depends: [ 43 | # Please keep the lower bound in sync with .github/workflows/workflow.yml, 44 | # dune-project and min_ocaml_version in bootstrap.ml 45 | ("ocaml" {>= "4.08"} | ("ocaml" {< "4.08~~"} & "ocamlfind-secondary")) 46 | "base-unix" 47 | "base-threads" 48 | ] 49 | x-commit-hash: "5472766b2448308a7160dfd0fca1ec711e124a5c" 50 | url { 51 | src: "https://github.com/ocaml/dune/releases/download/2.7.1/dune-2.7.1.tbz" 52 | checksum: [ 53 | "sha256=c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d" 54 | "sha512=2b4b311824471dac8196181d7c7267f96b1b73f35341b72019f169cf6d42a19254e90bdfba2d3ecb138ad318e2e2431dd0ec6c38d9efe1da382ec95f5d9e959b" 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /.github/workflows/bundle-release.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | 4 | console.log("Creating package.json"); 5 | 6 | // From the project root pwd 7 | const mainPackageJsonPath = fs.existsSync("esy.json") 8 | ? "esy.json" 9 | : "package.json"; 10 | 11 | const exists = fs.existsSync(mainPackageJsonPath); 12 | if (!exists) { 13 | console.error("No package.json or esy.json at " + mainPackageJsonPath); 14 | process.exit(1); 15 | } 16 | // Now require from this script's location. 17 | const mainPackageJson = require(path.join("..", "..", mainPackageJsonPath)); 18 | const bins = Array.isArray(mainPackageJson.esy.release.bin) 19 | ? mainPackageJson.esy.release.bin.reduce( 20 | (acc, curr) => Object.assign({ [curr]: "bin/" + curr }, acc), 21 | {} 22 | ) 23 | : Object.keys(mainPackageJson.esy.release.bin).reduce( 24 | (acc, currKey) => 25 | Object.assign( 26 | { [currKey]: "bin/" + mainPackageJson.esy.release.bin[currKey] }, 27 | acc 28 | ), 29 | {} 30 | ); 31 | 32 | const rewritePrefix = 33 | mainPackageJson.esy && 34 | mainPackageJson.esy.release && 35 | mainPackageJson.esy.release.rewritePrefix; 36 | 37 | const packageJson = JSON.stringify( 38 | { 39 | name: mainPackageJson.name, 40 | version: mainPackageJson.version, 41 | license: mainPackageJson.license, 42 | description: mainPackageJson.description, 43 | repository: mainPackageJson.repository, 44 | scripts: { 45 | postinstall: rewritePrefix 46 | ? "ESY_RELEASE_REWRITE_PREFIX=true node ./postinstall.js" 47 | : "node ./postinstall.js", 48 | }, 49 | bin: bins, 50 | files: [ 51 | "_export/", 52 | "bin/", 53 | "postinstall.js", 54 | "esyInstallRelease.js", 55 | "platform-linux/", 56 | "platform-darwin/", 57 | "platform-windows-x64/", 58 | ], 59 | }, 60 | null, 61 | 2 62 | ); 63 | 64 | fs.writeFileSync( 65 | path.join(__dirname, "..", "..", "_release", "package.json"), 66 | packageJson, 67 | { 68 | encoding: "utf8", 69 | } 70 | ); 71 | 72 | try { 73 | console.log("Copying LICENSE"); 74 | fs.copyFileSync( 75 | path.join(__dirname, "..", "..", "LICENSE"), 76 | path.join(__dirname, "..", "..", "_release", "LICENSE") 77 | ); 78 | } catch (e) { 79 | console.warn("No LICENSE found"); 80 | } 81 | 82 | console.log("Copying README.md"); 83 | fs.copyFileSync( 84 | path.join(__dirname, "..", "..", "README.md"), 85 | path.join(__dirname, "..", "..", "_release", "README.md") 86 | ); 87 | 88 | console.log("Copying postinstall.js"); 89 | fs.copyFileSync( 90 | path.join(__dirname, "release-postinstall.js"), 91 | path.join(__dirname, "..", "..", "_release", "postinstall.js") 92 | ); 93 | 94 | console.log("Creating placeholder files"); 95 | const placeholderFile = `:; echo "You need to have postinstall enabled"; exit $? 96 | @ECHO OFF 97 | ECHO You need to have postinstall enabled`; 98 | fs.mkdirSync(path.join(__dirname, "..", "..", "_release", "bin")); 99 | 100 | Object.keys(bins).forEach((name) => { 101 | if (bins[name]) { 102 | const binPath = path.join(__dirname, "..", "..", "_release", bins[name]); 103 | fs.writeFileSync(binPath, placeholderFile); 104 | fs.chmodSync(binPath, 0777); 105 | } else { 106 | console.log("bins[name] name=" + name + " was empty. Weird."); 107 | console.log(bins); 108 | } 109 | }); 110 | -------------------------------------------------------------------------------- /.github/workflows/lint_pr.yml: -------------------------------------------------------------------------------- 1 | name: Validate Pull Request 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ${{ matrix.os }} 8 | strategy: 9 | matrix: 10 | os: [ubuntu-latest, macOS-latest, windows-latest] 11 | steps: 12 | # Steps needed for esy 13 | - uses: actions/setup-node@v1 14 | with: 15 | node-version: 12 16 | - uses: actions/checkout@v1 17 | - name: Install esy 18 | run: npm install -g esy 19 | # Install and build 20 | - name: Try to restore install cache 21 | uses: actions/cache@v1 22 | with: 23 | path: ~/.esy/source 24 | key: source-${{ matrix.os }}-${{ hashFiles('**/index.json') }} 25 | # restore keys are not used for install sources because esy cleanup does not remove those. 26 | # Therefore the esy/source directory would grow infinitely 27 | - name: Install dependencies 28 | run: esy install 29 | - name: Print esy cache 30 | id: print_esy_cache 31 | run: node .github/workflows/print_esy_cache.js 32 | - name: Try to restore dependencies cache 33 | id: deps-cache 34 | uses: actions/cache@v1 35 | with: 36 | path: ${{ steps.print_esy_cache.outputs.esy_cache }} 37 | key: ${{ matrix.os }}-4.09-${{ hashFiles('**/index.json') }} 38 | - name: Build 39 | run: esy build 40 | lint: 41 | name: lint lockdir 42 | runs-on: macos-latest 43 | steps: 44 | # Steps needed for esy 45 | - uses: actions/setup-node@v1 46 | with: 47 | node-version: 12 48 | - uses: actions/checkout@v1 49 | - name: Install esy 50 | run: npm install -g esy 51 | # Install and build 52 | - name: Try to restore install cache 53 | uses: actions/cache@v1 54 | with: 55 | path: ~/.esy/source 56 | key: source-${{ matrix.os }}-${{ hashFiles('**/index.json') }} 57 | # restore keys are not used for install sources because esy cleanup does not remove those. 58 | # Therefore the esy/source directory would grow infinitely 59 | - name: Update lockdir 60 | run: | 61 | esy install 62 | git add esy.lock 63 | - name: Print esy cache 64 | id: print_esy_cache 65 | run: node .github/workflows/print_esy_cache.js 66 | - name: Try to restore dependencies cache 67 | id: deps-cache 68 | uses: actions/cache@v1 69 | with: 70 | path: ${{ steps.print_esy_cache.outputs.esy_cache }} 71 | key: build-${{ matrix.os }}-${{ hashFiles('**/index.json') }} 72 | restore-keys: build-${{ matrix.os }}- 73 | - name: Generate opam files 74 | run: | 75 | esy dune build @check 76 | git add *opam 77 | - name: format sources files 78 | run: | 79 | esy fmt 80 | git add "*.ml" 81 | - name: Update version in packages 82 | run: | 83 | node .github/workflows/update_package_version.js 84 | git add "*.json" 85 | - name: Check that lock directory are up-to-date. 86 | run: git diff --exit-code --cached 87 | - name: Push if it is not 88 | if: failure() 89 | run: | 90 | git remote set-url --push origin https://$GITHUB_ACTOR:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY 91 | git config user.name "Github Runner" 92 | git config user.email "runner@runner.github.com" 93 | git commit -am "Update lockdir" 94 | git status 95 | git push origin HEAD:$GITHUB_HEAD_REF 96 | env: 97 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 98 | - name: Display status should be clean 99 | run: git status 100 | if: success() 101 | - uses: actions/github-script@0.3.0 102 | if: failure() 103 | with: 104 | github-token: ${{secrets.GITHUB_TOKEN}} 105 | script: | 106 | github.issues.createComment({ 107 | issue_number: context.issue.number, 108 | owner: context.repo.owner, 109 | repo: context.repo.repo, 110 | body: `I have updated your lock dirs and formatted the code. @${context.actor} please pull the last commit before pushing any more changes.` 111 | }); 112 | -------------------------------------------------------------------------------- /.github/workflows/publish_to_npm.js: -------------------------------------------------------------------------------- 1 | const cp = require("child_process"); 2 | const fs = require("fs"); 3 | const Path = require("path"); 4 | 5 | const getNameAndVersion = (package) => { 6 | const packageJson = fs.readFileSync(`${package}.json`, { encoding: "utf8" }); 7 | const packageData = JSON.parse(packageJson); 8 | const version = fs 9 | .readFileSync(Path.resolve("VERSION"), { encoding: "utf8" }) 10 | .toString() 11 | .trim(); 12 | 13 | return { package, name: packageData.name, version }; 14 | }; 15 | 16 | const preparePackage = (packageData) => { 17 | const package = packageData.package; 18 | console.log(`Preparing package ${package}`); 19 | 20 | const packageJson = fs.readFileSync(`${package}.json`, { encoding: "utf8" }); 21 | const updatedPackageJson = JSON.parse(packageJson); 22 | updatedPackageJson.version = packageData.version; 23 | 24 | fs.writeFileSync( 25 | Path.join(package, "package.json"), 26 | JSON.stringify(updatedPackageJson, null, 2) 27 | ); 28 | fs.writeFileSync( 29 | Path.join(package, "dune-project"), 30 | `(lang dune 1.11) 31 | ` 32 | ); 33 | 34 | fs.copyFileSync(`${package}.opam`, Path.join(package, `${package}.opam`)); 35 | fs.copyFileSync(`LICENSE`, Path.join(package, "LICENSE")); 36 | fs.copyFileSync(`README.md`, Path.join(package, "README.md")); 37 | 38 | return package; 39 | }; 40 | 41 | const deleteFolderRecursive = (path) => { 42 | if (fs.existsSync(path)) { 43 | fs.readdirSync(path).forEach((file, index) => { 44 | const curPath = Path.join(path, file); 45 | if (fs.lstatSync(curPath).isDirectory()) { 46 | // recurse 47 | deleteFolderRecursive(curPath); 48 | } else { 49 | // delete file 50 | fs.unlinkSync(curPath); 51 | } 52 | }); 53 | fs.rmdirSync(path); 54 | } 55 | }; 56 | 57 | const cleanPackage = (package) => { 58 | console.log(`Cleaning package ${package}`); 59 | 60 | fs.unlinkSync(Path.join(package, "package.json")); 61 | fs.unlinkSync(Path.join(package, `${package}.opam`)); 62 | try { 63 | fs.unlinkSync(Path.join(package, `${package}.install`)); 64 | } catch (e) { 65 | console.warn(`Could not remove ${package}.install in ${package}`); 66 | } 67 | fs.unlinkSync(Path.join(package, "LICENSE")); 68 | fs.unlinkSync(Path.join(package, "README.md")); 69 | try { 70 | fs.unlinkSync(Path.join(package, "dune-project")); 71 | } catch (e) { 72 | console.warn("Could not remove dune-file in ", package); 73 | } 74 | deleteFolderRecursive(Path.join(package, "_esy")); 75 | deleteFolderRecursive(Path.join(package, "esy.lock")); 76 | deleteFolderRecursive(Path.join(package, "node_modules")); 77 | }; 78 | 79 | const buildAndPublishPackage = (package) => { 80 | console.log(`Building package ${package}`); 81 | const cwd = Path.resolve(package); 82 | try { 83 | cp.execSync("esy install", { cwd, encoding: "utf8" }); 84 | cp.execSync("esy build", { cwd, encoding: "utf8" }); 85 | } catch (e) { 86 | console.warn(e); 87 | return; 88 | } 89 | console.log(`Publishing package ${package}`); 90 | cp.execSync("npm publish --access public", { 91 | cwd, 92 | encoding: "utf8", 93 | }); 94 | }; 95 | 96 | const filterPackage = (packageInfo) => { 97 | try { 98 | const remoteVersion = cp 99 | .execSync(`npm view ${packageInfo.name} version`, { encoding: "utf8" }) 100 | .toString() 101 | .trim(); 102 | 103 | console.log({ ...packageInfo, remoteVersion }); 104 | 105 | return remoteVersion !== packageInfo.version; 106 | } catch (e) { 107 | return true; 108 | } 109 | }; 110 | 111 | const packages = fs 112 | .readdirSync(".", { encoding: "utf8" }) 113 | .filter((file) => file.includes(".json") && file.includes("morph")) 114 | .map((file) => file.replace(".json", "")); 115 | 116 | packages 117 | .map(getNameAndVersion) 118 | .filter(filterPackage) 119 | .map((packageData) => { 120 | preparePackage(packageData); 121 | return packageData; 122 | }) 123 | .map((packageData) => { 124 | buildAndPublishPackage(packageData.package); 125 | return packageData; 126 | }) 127 | .map((packageData) => { 128 | cleanPackage(packageData.package); 129 | return packageData; 130 | }) 131 | .forEach((packageData) => 132 | console.log( 133 | `Successfully published ${packageData.name}@${packageData.version}` 134 | ) 135 | ); 136 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish packages to npm 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build-platform: 10 | runs-on: ${{ matrix.os }} 11 | strategy: 12 | matrix: 13 | os: [ubuntu-latest, macOS-latest, windows-latest] 14 | steps: 15 | # Steps needed for esy 16 | - uses: actions/setup-node@v1 17 | with: 18 | node-version: 12 19 | - uses: actions/checkout@v1 20 | - name: Install esy 21 | run: npm install -g esy 22 | 23 | # Install and build 24 | - name: Try to restore install cache 25 | uses: actions/cache@v1 26 | with: 27 | path: ~/.esy/source 28 | key: source-${{ matrix.os }}-${{ hashFiles('**/index.json') }} 29 | # restore keys are not used for install sources because esy cleanup does not remove those. 30 | # Therefore the esy/source directory would grow infinitely 31 | - name: Install dependencies 32 | run: esy install 33 | - name: Print esy cache 34 | id: print_esy_cache 35 | run: node .github/workflows/print_esy_cache.js 36 | - name: Try to restore dependencies cache 37 | id: deps-cache 38 | uses: actions/cache@v1 39 | with: 40 | path: ${{ steps.print_esy_cache.outputs.esy_cache }} 41 | key: build-${{ matrix.os }}-${{ hashFiles('**/index.json') }} 42 | restore-keys: build-${{ matrix.os }}- 43 | - name: Build 44 | run: esy build 45 | 46 | # Create the NPM package for this platform 47 | - name: Create npm package 48 | run: esy npm-release 49 | - uses: actions/upload-artifact@v2 50 | with: 51 | name: ${{ matrix.os }} 52 | path: _release/ 53 | prepare-publish: 54 | name: Prepare publish to npm 55 | needs: build-platform 56 | runs-on: ubuntu-latest 57 | steps: 58 | - uses: actions/setup-node@v1 59 | with: 60 | node-version: 12 61 | registry-url: https://registry.npmjs.org/ 62 | - uses: actions/checkout@v1 63 | with: 64 | fetch-depth: 1 65 | ref: ${{ github.ref }} 66 | submodules: true 67 | # Download platform artifacts 68 | - name: Download Linux release 69 | uses: actions/download-artifact@v1 70 | with: 71 | name: ubuntu-latest 72 | - name: Download Windows release 73 | uses: actions/download-artifact@v1 74 | with: 75 | name: windows-latest 76 | - name: Download macOS release 77 | uses: actions/download-artifact@v1 78 | with: 79 | name: macOS-latest 80 | # Move artifacts in place 81 | - name: Move artifacts 82 | run: | 83 | mkdir -p _release/platform-linux 84 | mkdir -p _release/platform-windows-x64 85 | mkdir -p _release/platform-darwin 86 | cp -a ubuntu-latest/. _release/platform-linux 87 | cp -a windows-latest/. _release/platform-windows-x64 88 | cp -a macOS-latest/. _release/platform-darwin 89 | - name: Prepare package 90 | run: node .github/workflows/bundle-release.js 91 | # Create a npm package that can easily be published and tested 92 | - name: npm pack 93 | run: npm pack . 94 | working-directory: _release 95 | - name: move package 96 | run: mv _release/*.tgz redemon.tgz 97 | # Upload artifacts 98 | - uses: actions/upload-artifact@v2 99 | with: 100 | name: release 101 | path: _release/ 102 | - uses: actions/upload-artifact@v2 103 | with: 104 | name: release-tarball 105 | path: redemon.tgz 106 | #- name: Publish packages 107 | # run: node .github/workflows/publish_to_npm.js 108 | # env: 109 | # NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} 110 | test-platform: 111 | name: Test installing ${{ matrix.os }} 112 | needs: prepare-publish 113 | runs-on: ${{ matrix.os }} 114 | strategy: 115 | matrix: 116 | os: [ubuntu-latest, macOS-latest, windows-latest] 117 | steps: 118 | - uses: actions/setup-node@v1 119 | with: 120 | node-version: 12 121 | - name: Download Linux release 122 | uses: actions/download-artifact@v1 123 | with: 124 | name: release-tarball 125 | - name: test install 126 | run: npm -g install ./release-tarball/redemon.tgz 127 | - name: test binary 128 | run: npx redemon --help 129 | -------------------------------------------------------------------------------- /.github/workflows/release-postinstall.js: -------------------------------------------------------------------------------- 1 | /** 2 | * release-postinstall.js 3 | * 4 | * XXX: We want to keep this script installable at least with node 4.x. 5 | * 6 | * This script is bundled with the `npm` package and executed on release. 7 | * Since we have a 'fat' NPM package (with all platform binaries bundled), 8 | * this postinstall script extracts them and puts the current platform's 9 | * bits in the right place. 10 | */ 11 | 12 | var path = require("path"); 13 | var cp = require("child_process"); 14 | var fs = require("fs"); 15 | var os = require("os"); 16 | var platform = process.platform; 17 | 18 | var packageJson = require("./package.json"); 19 | var binariesToCopy = Object.keys(packageJson.bin) 20 | .map(function (name) { 21 | return packageJson.bin[name]; 22 | }) 23 | .concat(["esyInstallRelease.js"]); 24 | var foldersToCopy = ["bin", "_export"]; 25 | 26 | function copyRecursive(srcDir, dstDir) { 27 | var results = []; 28 | var list = fs.readdirSync(srcDir); 29 | var src, dst; 30 | list.forEach(function (file) { 31 | src = path.join(srcDir, file); 32 | dst = path.join(dstDir, file); 33 | 34 | var stat = fs.statSync(src); 35 | if (stat && stat.isDirectory()) { 36 | try { 37 | fs.mkdirSync(dst); 38 | } catch (e) { 39 | console.log("directory already exists: " + dst); 40 | console.error(e); 41 | } 42 | results = results.concat(copyRecursive(src, dst)); 43 | } else { 44 | try { 45 | fs.writeFileSync(dst, fs.readFileSync(src)); 46 | } catch (e) { 47 | console.log("could't copy file: " + dst); 48 | console.error(e); 49 | } 50 | results.push(src); 51 | } 52 | }); 53 | return results; 54 | } 55 | 56 | /** 57 | * Since os.arch returns node binary's target arch, not 58 | * the system arch. 59 | * Credits: https://github.com/feross/arch/blob/af080ff61346315559451715c5393d8e86a6d33c/index.js#L10-L58 60 | */ 61 | 62 | function arch() { 63 | /** 64 | * The running binary is 64-bit, so the OS is clearly 64-bit. 65 | */ 66 | if (process.arch === "x64") { 67 | return "x64"; 68 | } 69 | 70 | /** 71 | * All recent versions of Mac OS are 64-bit. 72 | */ 73 | if (process.platform === "darwin") { 74 | return "x64"; 75 | } 76 | 77 | /** 78 | * On Windows, the most reliable way to detect a 64-bit OS from within a 32-bit 79 | * app is based on the presence of a WOW64 file: %SystemRoot%\SysNative. 80 | * See: https://twitter.com/feross/status/776949077208510464 81 | */ 82 | if (process.platform === "win32") { 83 | var useEnv = false; 84 | try { 85 | useEnv = !!( 86 | process.env.SYSTEMROOT && fs.statSync(process.env.SYSTEMROOT) 87 | ); 88 | } catch (err) {} 89 | 90 | var sysRoot = useEnv ? process.env.SYSTEMROOT : "C:\\Windows"; 91 | 92 | // If %SystemRoot%\SysNative exists, we are in a WOW64 FS Redirected application. 93 | var isWOW64 = false; 94 | try { 95 | isWOW64 = !!fs.statSync(path.join(sysRoot, "sysnative")); 96 | } catch (err) {} 97 | 98 | return isWOW64 ? "x64" : "x86"; 99 | } 100 | 101 | /** 102 | * On Linux, use the `getconf` command to get the architecture. 103 | */ 104 | if (process.platform === "linux") { 105 | var output = cp.execSync("getconf LONG_BIT", { encoding: "utf8" }); 106 | return output === "64\n" ? "x64" : "x86"; 107 | } 108 | 109 | /** 110 | * If none of the above, assume the architecture is 32-bit. 111 | */ 112 | return "x86"; 113 | } 114 | 115 | // implementing it b/c we don't want to depend on fs.copyFileSync which appears 116 | // only in node@8.x 117 | function copyFileSync(sourcePath, destPath) { 118 | var data; 119 | try { 120 | data = fs.readFileSync(sourcePath); 121 | } catch (e) { 122 | console.log("Couldn't find " + sourcePath + " trying with .exe"); 123 | data = fs.readFileSync(sourcePath + ".exe"); 124 | sourcePath = sourcePath + ".exe"; 125 | } 126 | var stat = fs.statSync(sourcePath); 127 | fs.writeFileSync(destPath, data); 128 | fs.chmodSync(destPath, stat.mode); 129 | } 130 | 131 | var copyPlatformBinaries = (platformPath) => { 132 | var platformBuildPath = path.join(__dirname, "platform-" + platformPath); 133 | 134 | foldersToCopy.forEach((folderPath) => { 135 | var sourcePath = path.join(platformBuildPath, folderPath); 136 | var destPath = path.join(__dirname, folderPath); 137 | 138 | copyRecursive(sourcePath, destPath); 139 | }); 140 | 141 | binariesToCopy.forEach((binaryPath) => { 142 | var sourcePath = path.join(platformBuildPath, binaryPath); 143 | var destPath = path.join(__dirname, binaryPath); 144 | if (fs.existsSync(destPath)) { 145 | fs.unlinkSync(destPath); 146 | } 147 | copyFileSync(sourcePath, destPath); 148 | fs.chmodSync(destPath, 0777); 149 | }); 150 | }; 151 | 152 | try { 153 | fs.mkdirSync("_export"); 154 | } catch (e) { 155 | console.log("Could not create _export folder"); 156 | } 157 | 158 | switch (platform) { 159 | case "win32": 160 | if (arch() !== "x64") { 161 | console.warn("error: x86 is currently not supported on Windows"); 162 | process.exit(1); 163 | } 164 | 165 | copyPlatformBinaries("windows-x64"); 166 | break; 167 | case "linux": 168 | case "darwin": 169 | copyPlatformBinaries(platform); 170 | break; 171 | default: 172 | console.warn("error: no release built for the " + platform + " platform"); 173 | process.exit(1); 174 | } 175 | 176 | require("./esyInstallRelease"); 177 | -------------------------------------------------------------------------------- /bin/main.ml: -------------------------------------------------------------------------------- 1 | let init_logger verbose = 2 | let () = Fmt_tty.setup_std_outputs () in 3 | let () = 4 | if verbose then Logs.set_level ~all:true (Some Logs.Info) 5 | else Logs.set_level ~all:true (Some Logs.Error) 6 | in 7 | Logs.set_reporter (Logs_fmt.reporter ()) 8 | 9 | let redirect = 10 | Luv.Process. 11 | [ 12 | inherit_fd ~fd:stdout ~from_parent_fd:stdout (); 13 | inherit_fd ~fd:stderr ~from_parent_fd:stderr (); 14 | inherit_fd ~fd:stdin ~from_parent_fd:stdin (); 15 | ] 16 | 17 | let timer : Luv.Timer.t option ref = ref None 18 | 19 | let rec listen_for_rs restart_program = 20 | let open Luv.File in 21 | let buf = Luv.Buffer.create 2 in 22 | read stdin [ buf ] (function 23 | | Error e -> 24 | Logs.err (fun m -> m "Error reading stdin %s" (Luv.Error.strerror e)); 25 | () 26 | | Ok _a -> 27 | let s = Luv.Buffer.to_string buf in 28 | let () = 29 | if s = "rs" then ( 30 | Logs.info (fun m -> m {|Got "rs" from stdin, restarting|}); 31 | restart_program ()) 32 | else () 33 | in 34 | listen_for_rs restart_program) 35 | 36 | let debounce delay fn = 37 | match !timer with 38 | | Some ti -> 39 | Logs.info (fun m -> 40 | m "Waiting... next run in %ims" (Luv.Timer.get_due_in ti)) 41 | | None -> ( 42 | let ti : Luv.Timer.t = Result.get_ok (Luv.Timer.init ()) in 43 | timer := Some ti; 44 | match 45 | Luv.Timer.start ti delay (fun () -> 46 | timer := None; 47 | fn ()) 48 | with 49 | | Ok () -> Logs.info (fun m -> m "Started timer, running in %ims" delay) 50 | | Error _ -> Logs.err (fun m -> m "Error in timer")) 51 | 52 | let redemon path paths extensions delay verbose signal command args = 53 | let exit_signal = Signal.of_string signal in 54 | let () = init_logger verbose in 55 | let extensions_provided = List.length extensions <> 0 in 56 | let paths = path @ paths in 57 | Logs.info (fun m -> m "Verbose mode enabled"); 58 | let child = ref (Error `UNKNOWN) in 59 | let rec start_program () = 60 | let on_exit _ ~exit_status:_ ~term_signal = 61 | if term_signal = Luv.Signal.sigkill then start_program () 62 | else child := Error `UNKNOWN 63 | in 64 | child := Luv.Process.spawn ~on_exit ~redirect command (command :: args) 65 | in 66 | let stop_program () = 67 | match !child with 68 | | Ok c -> ( 69 | match Luv.Process.kill c exit_signal with 70 | | Ok () -> child := Error `UNKNOWN 71 | | Error e -> 72 | Logs.err (fun m -> 73 | m "Error when stopping program \n %s" (Luv.Error.strerror e))) 74 | | Error e -> 75 | if e = `UNKNOWN then start_program () 76 | else 77 | Logs.err (fun m -> 78 | m "Error when stopping program \n %s" (Luv.Error.strerror e)) 79 | in 80 | let restart_program () = debounce delay stop_program in 81 | let () = listen_for_rs stop_program in 82 | let () = 83 | List.iter 84 | (fun path -> 85 | match Luv.FS_event.init () with 86 | | Error e -> 87 | Logs.err (fun m -> 88 | m "Error starting watcher: %s" (Luv.Error.strerror e)) 89 | | Ok watcher -> 90 | Luv.FS_event.start ~recursive:true ~watch_entry:true watcher path 91 | (function 92 | | Error e -> 93 | Logs.err (fun m -> 94 | m "Error watching %s: %s" path (Luv.Error.strerror e)); 95 | ignore (Luv.FS_event.stop watcher); 96 | Luv.Handle.close watcher stop_program 97 | | Ok (file, events) -> 98 | if List.mem `RENAME events then 99 | Logs.info (fun m -> m "Renamed %s" file); 100 | if List.mem `CHANGE events then 101 | Logs.info (fun m -> m "Changed %s" file); 102 | 103 | if extensions_provided then ( 104 | let file_extension = Filename.extension file in 105 | let is_file_extension e = 106 | String.equal ("." ^ e) file_extension 107 | in 108 | if List.exists is_file_extension extensions then 109 | restart_program ()) 110 | else if not extensions_provided then restart_program ())) 111 | paths 112 | in 113 | start_program (); 114 | ignore (Luv.Loop.run () : bool) 115 | 116 | open Cmdliner 117 | 118 | let command = 119 | let doc = "Command to run" in 120 | Arg.( 121 | required 122 | & pos ~rev:false 0 (some string) None 123 | & info [] ~docv:"COMMAND" ~doc) 124 | 125 | let args = 126 | let doc = "args to send to COMMAND" in 127 | Arg.(value & pos_right ~rev:false 0 string [] & info [] ~docv:"ARGS" ~doc) 128 | 129 | let path = 130 | let doc = "Path to watch, repeatable" in 131 | Arg.(value & opt_all file [] & info [ "p"; "path" ] ~docv:"PATH" ~doc) 132 | 133 | let paths = 134 | let doc = "Paths to watch as comma separated list" in 135 | Arg.(value & opt (list file) [] & info [ "paths" ] ~docv:"PATHS" ~doc) 136 | 137 | let extensions = 138 | let doc = "File extensions that should trigger changes" in 139 | Arg.( 140 | value & opt (list string) [] & info [ "e"; "extensions" ] ~docv:"EXT" ~doc) 141 | 142 | let delay = 143 | let doc = "Time in ms to wait before restarting" in 144 | Arg.(value & opt int 100 & info [ "delay" ] ~docv:"DELAY" ~doc) 145 | 146 | let signal = 147 | let doc = "Signal sent to process when exiting" in 148 | Arg.(value & opt string "SIGTERM" & info [ "signal" ] ~docv:"SIGNAL" ~doc) 149 | 150 | let verbose = 151 | let doc = "Verbose logging" in 152 | Arg.(value & flag & info [ "v"; "verbose" ] ~doc) 153 | 154 | let _ = 155 | let term = 156 | Term.( 157 | const redemon $ path $ paths $ extensions $ delay $ verbose $ signal 158 | $ command $ args) 159 | in 160 | let doc = "A filewatcher built with luv" in 161 | let info = Term.info ~doc "redemon" in 162 | Term.eval (term, info) 163 | -------------------------------------------------------------------------------- /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": "1dd12273ceb3b046eaa8d77315c94517", 3 | "root": "redemon@link-dev:./package.json", 4 | "node": { 5 | "yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9": { 6 | "id": 7 | "yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9", 8 | "name": "yarn-pkg-config", 9 | "version": 10 | "github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79", 11 | "source": { 12 | "type": "install", 13 | "source": [ 14 | "github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79" 15 | ] 16 | }, 17 | "overrides": [], 18 | "dependencies": [], 19 | "devDependencies": [] 20 | }, 21 | "redemon@link-dev:./package.json": { 22 | "id": "redemon@link-dev:./package.json", 23 | "name": "redemon", 24 | "version": "link-dev:./package.json", 25 | "source": { 26 | "type": "link-dev", 27 | "path": ".", 28 | "manifest": "package.json" 29 | }, 30 | "overrides": [], 31 | "dependencies": [ 32 | "ocaml@4.11.1000@d41d8cd9", "@opam/luv@opam:0.5.6@3194d0f5", 33 | "@opam/logs@opam:0.7.0@1d03143e", "@opam/fmt@opam:0.8.9@e0843a5b", 34 | "@opam/dune@opam:2.7.1@f5f493bc", 35 | "@opam/cmdliner@opam:1.0.4@93208aac" 36 | ], 37 | "devDependencies": [ 38 | "@opam/ocamlformat@opam:0.15.0@8e036963", 39 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#a66d82aff86b162423b1657b38f7c4dcc5867ff1@d41d8cd9" 40 | ] 41 | }, 42 | "ocaml@4.11.1000@d41d8cd9": { 43 | "id": "ocaml@4.11.1000@d41d8cd9", 44 | "name": "ocaml", 45 | "version": "4.11.1000", 46 | "source": { 47 | "type": "install", 48 | "source": [ 49 | "archive:https://registry.npmjs.org/ocaml/-/ocaml-4.11.1000.tgz#sha1:a46c81076f3ed073de0d90351addc8a0bb87825f" 50 | ] 51 | }, 52 | "overrides": [], 53 | "dependencies": [], 54 | "devDependencies": [] 55 | }, 56 | "@opam/yojson@opam:1.7.0@7056d985": { 57 | "id": "@opam/yojson@opam:1.7.0@7056d985", 58 | "name": "@opam/yojson", 59 | "version": "opam:1.7.0", 60 | "source": { 61 | "type": "install", 62 | "source": [ 63 | "archive:https://opam.ocaml.org/cache/md5/b8/b89d39ca3f8c532abe5f547ad3b8f84d#md5:b89d39ca3f8c532abe5f547ad3b8f84d", 64 | "archive:https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz#md5:b89d39ca3f8c532abe5f547ad3b8f84d" 65 | ], 66 | "opam": { 67 | "name": "yojson", 68 | "version": "1.7.0", 69 | "path": "esy.lock/opam/yojson.1.7.0" 70 | } 71 | }, 72 | "overrides": [], 73 | "dependencies": [ 74 | "ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 75 | "@opam/dune@opam:2.7.1@f5f493bc", "@opam/cppo@opam:1.6.6@f4f83858", 76 | "@opam/biniou@opam:1.2.1@d7570399", 77 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 78 | ], 79 | "devDependencies": [ 80 | "ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 81 | "@opam/dune@opam:2.7.1@f5f493bc", "@opam/biniou@opam:1.2.1@d7570399" 82 | ] 83 | }, 84 | "@opam/uutf@opam:1.0.2@4440868f": { 85 | "id": "@opam/uutf@opam:1.0.2@4440868f", 86 | "name": "@opam/uutf", 87 | "version": "opam:1.0.2", 88 | "source": { 89 | "type": "install", 90 | "source": [ 91 | "archive:https://opam.ocaml.org/cache/md5/a7/a7c542405a39630c689a82bd7ef2292c#md5:a7c542405a39630c689a82bd7ef2292c", 92 | "archive:http://erratique.ch/software/uutf/releases/uutf-1.0.2.tbz#md5:a7c542405a39630c689a82bd7ef2292c" 93 | ], 94 | "opam": { 95 | "name": "uutf", 96 | "version": "1.0.2", 97 | "path": "esy.lock/opam/uutf.1.0.2" 98 | } 99 | }, 100 | "overrides": [], 101 | "dependencies": [ 102 | "ocaml@4.11.1000@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea", 103 | "@opam/topkg@opam:1.0.3@e4e10f1c", 104 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 105 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 106 | "@opam/cmdliner@opam:1.0.4@93208aac", 107 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 108 | ], 109 | "devDependencies": [ 110 | "ocaml@4.11.1000@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea" 111 | ] 112 | }, 113 | "@opam/uuseg@opam:13.0.0@f60712a7": { 114 | "id": "@opam/uuseg@opam:13.0.0@f60712a7", 115 | "name": "@opam/uuseg", 116 | "version": "opam:13.0.0", 117 | "source": { 118 | "type": "install", 119 | "source": [ 120 | "archive:https://opam.ocaml.org/cache/md5/a0/a07a97fff61da604614ea8da0547ef6a#md5:a07a97fff61da604614ea8da0547ef6a", 121 | "archive:https://erratique.ch/software/uuseg/releases/uuseg-13.0.0.tbz#md5:a07a97fff61da604614ea8da0547ef6a" 122 | ], 123 | "opam": { 124 | "name": "uuseg", 125 | "version": "13.0.0", 126 | "path": "esy.lock/opam/uuseg.13.0.0" 127 | } 128 | }, 129 | "overrides": [], 130 | "dependencies": [ 131 | "ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 132 | "@opam/uucp@opam:13.0.0@e9b515e0", "@opam/topkg@opam:1.0.3@e4e10f1c", 133 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 134 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 135 | "@opam/cmdliner@opam:1.0.4@93208aac", 136 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 137 | ], 138 | "devDependencies": [ 139 | "ocaml@4.11.1000@d41d8cd9", "@opam/uucp@opam:13.0.0@e9b515e0" 140 | ] 141 | }, 142 | "@opam/uucp@opam:13.0.0@e9b515e0": { 143 | "id": "@opam/uucp@opam:13.0.0@e9b515e0", 144 | "name": "@opam/uucp", 145 | "version": "opam:13.0.0", 146 | "source": { 147 | "type": "install", 148 | "source": [ 149 | "archive:https://opam.ocaml.org/cache/md5/07/07e706249ddb2d02f0fa298804d3c739#md5:07e706249ddb2d02f0fa298804d3c739", 150 | "archive:https://erratique.ch/software/uucp/releases/uucp-13.0.0.tbz#md5:07e706249ddb2d02f0fa298804d3c739" 151 | ], 152 | "opam": { 153 | "name": "uucp", 154 | "version": "13.0.0", 155 | "path": "esy.lock/opam/uucp.13.0.0" 156 | } 157 | }, 158 | "overrides": [], 159 | "dependencies": [ 160 | "ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 161 | "@opam/topkg@opam:1.0.3@e4e10f1c", 162 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 163 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 164 | "@opam/cmdliner@opam:1.0.4@93208aac", 165 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 166 | ], 167 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 168 | }, 169 | "@opam/uchar@opam:0.0.2@c8218eea": { 170 | "id": "@opam/uchar@opam:0.0.2@c8218eea", 171 | "name": "@opam/uchar", 172 | "version": "opam:0.0.2", 173 | "source": { 174 | "type": "install", 175 | "source": [ 176 | "archive:https://opam.ocaml.org/cache/md5/c9/c9ba2c738d264c420c642f7bb1cf4a36#md5:c9ba2c738d264c420c642f7bb1cf4a36", 177 | "archive:https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz#md5:c9ba2c738d264c420c642f7bb1cf4a36" 178 | ], 179 | "opam": { 180 | "name": "uchar", 181 | "version": "0.0.2", 182 | "path": "esy.lock/opam/uchar.0.0.2" 183 | } 184 | }, 185 | "overrides": [], 186 | "dependencies": [ 187 | "ocaml@4.11.1000@d41d8cd9", "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 188 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 189 | ], 190 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 191 | }, 192 | "@opam/tyxml@opam:4.4.0@1dca5713": { 193 | "id": "@opam/tyxml@opam:4.4.0@1dca5713", 194 | "name": "@opam/tyxml", 195 | "version": "opam:4.4.0", 196 | "source": { 197 | "type": "install", 198 | "source": [ 199 | "archive:https://opam.ocaml.org/cache/sha256/51/516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530#sha256:516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530", 200 | "archive:https://github.com/ocsigen/tyxml/releases/download/4.4.0/tyxml-4.4.0.tbz#sha256:516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530" 201 | ], 202 | "opam": { 203 | "name": "tyxml", 204 | "version": "4.4.0", 205 | "path": "esy.lock/opam/tyxml.4.4.0" 206 | } 207 | }, 208 | "overrides": [], 209 | "dependencies": [ 210 | "ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 211 | "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.9.0@d4d5e13d", 212 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 213 | ], 214 | "devDependencies": [ 215 | "ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 216 | "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.9.0@d4d5e13d", 217 | "@opam/dune@opam:2.7.1@f5f493bc" 218 | ] 219 | }, 220 | "@opam/topkg@opam:1.0.3@e4e10f1c": { 221 | "id": "@opam/topkg@opam:1.0.3@e4e10f1c", 222 | "name": "@opam/topkg", 223 | "version": "opam:1.0.3", 224 | "source": { 225 | "type": "install", 226 | "source": [ 227 | "archive:https://opam.ocaml.org/cache/md5/e2/e285f7a296d77ee7d831ba9a6bfb396f#md5:e285f7a296d77ee7d831ba9a6bfb396f", 228 | "archive:http://erratique.ch/software/topkg/releases/topkg-1.0.3.tbz#md5:e285f7a296d77ee7d831ba9a6bfb396f" 229 | ], 230 | "opam": { 231 | "name": "topkg", 232 | "version": "1.0.3", 233 | "path": "esy.lock/opam/topkg.1.0.3" 234 | } 235 | }, 236 | "overrides": [], 237 | "dependencies": [ 238 | "ocaml@4.11.1000@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 239 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 240 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 241 | ], 242 | "devDependencies": [ 243 | "ocaml@4.11.1000@d41d8cd9", "@opam/ocamlbuild@opam:0.14.0@6ac75d03" 244 | ] 245 | }, 246 | "@opam/stdlib-shims@opam:0.1.0@8c116481": { 247 | "id": "@opam/stdlib-shims@opam:0.1.0@8c116481", 248 | "name": "@opam/stdlib-shims", 249 | "version": "opam:0.1.0", 250 | "source": { 251 | "type": "install", 252 | "source": [ 253 | "archive:https://opam.ocaml.org/cache/md5/12/12b5704eed70c6bff5ac39a16db1425d#md5:12b5704eed70c6bff5ac39a16db1425d", 254 | "archive:https://github.com/ocaml/stdlib-shims/releases/download/0.1.0/stdlib-shims-0.1.0.tbz#md5:12b5704eed70c6bff5ac39a16db1425d" 255 | ], 256 | "opam": { 257 | "name": "stdlib-shims", 258 | "version": "0.1.0", 259 | "path": "esy.lock/opam/stdlib-shims.0.1.0" 260 | } 261 | }, 262 | "overrides": [], 263 | "dependencies": [ 264 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 265 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 266 | ], 267 | "devDependencies": [ 268 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 269 | ] 270 | }, 271 | "@opam/stdio@opam:v0.14.0@a624e254": { 272 | "id": "@opam/stdio@opam:v0.14.0@a624e254", 273 | "name": "@opam/stdio", 274 | "version": "opam:v0.14.0", 275 | "source": { 276 | "type": "install", 277 | "source": [ 278 | "archive:https://opam.ocaml.org/cache/md5/4c/4cbdf15f0be88c3258aaeff9e04e00e9#md5:4cbdf15f0be88c3258aaeff9e04e00e9", 279 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/stdio-v0.14.0.tar.gz#md5:4cbdf15f0be88c3258aaeff9e04e00e9" 280 | ], 281 | "opam": { 282 | "name": "stdio", 283 | "version": "v0.14.0", 284 | "path": "esy.lock/opam/stdio.v0.14.0" 285 | } 286 | }, 287 | "overrides": [], 288 | "dependencies": [ 289 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 290 | "@opam/base@opam:v0.14.0@8bc55fce", 291 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 292 | ], 293 | "devDependencies": [ 294 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 295 | "@opam/base@opam:v0.14.0@8bc55fce" 296 | ] 297 | }, 298 | "@opam/sexplib0@opam:v0.14.0@ddeb6438": { 299 | "id": "@opam/sexplib0@opam:v0.14.0@ddeb6438", 300 | "name": "@opam/sexplib0", 301 | "version": "opam:v0.14.0", 302 | "source": { 303 | "type": "install", 304 | "source": [ 305 | "archive:https://opam.ocaml.org/cache/md5/37/37aff0af8f8f6f759249475684aebdc4#md5:37aff0af8f8f6f759249475684aebdc4", 306 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/sexplib0-v0.14.0.tar.gz#md5:37aff0af8f8f6f759249475684aebdc4" 307 | ], 308 | "opam": { 309 | "name": "sexplib0", 310 | "version": "v0.14.0", 311 | "path": "esy.lock/opam/sexplib0.v0.14.0" 312 | } 313 | }, 314 | "overrides": [], 315 | "dependencies": [ 316 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 317 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 318 | ], 319 | "devDependencies": [ 320 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 321 | ] 322 | }, 323 | "@opam/seq@opam:base@d8d7de1d": { 324 | "id": "@opam/seq@opam:base@d8d7de1d", 325 | "name": "@opam/seq", 326 | "version": "opam:base", 327 | "source": { 328 | "type": "install", 329 | "source": [ "no-source:" ], 330 | "opam": { 331 | "name": "seq", 332 | "version": "base", 333 | "path": "esy.lock/opam/seq.base" 334 | } 335 | }, 336 | "overrides": [], 337 | "dependencies": [ 338 | "ocaml@4.11.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" 339 | ], 340 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 341 | }, 342 | "@opam/result@opam:1.5@6b753c82": { 343 | "id": "@opam/result@opam:1.5@6b753c82", 344 | "name": "@opam/result", 345 | "version": "opam:1.5", 346 | "source": { 347 | "type": "install", 348 | "source": [ 349 | "archive:https://opam.ocaml.org/cache/md5/1b/1b82dec78849680b49ae9a8a365b831b#md5:1b82dec78849680b49ae9a8a365b831b", 350 | "archive:https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz#md5:1b82dec78849680b49ae9a8a365b831b" 351 | ], 352 | "opam": { 353 | "name": "result", 354 | "version": "1.5", 355 | "path": "esy.lock/opam/result.1.5" 356 | } 357 | }, 358 | "overrides": [], 359 | "dependencies": [ 360 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 361 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 362 | ], 363 | "devDependencies": [ 364 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 365 | ] 366 | }, 367 | "@opam/re@opam:1.9.0@d4d5e13d": { 368 | "id": "@opam/re@opam:1.9.0@d4d5e13d", 369 | "name": "@opam/re", 370 | "version": "opam:1.9.0", 371 | "source": { 372 | "type": "install", 373 | "source": [ 374 | "archive:https://opam.ocaml.org/cache/md5/bd/bddaed4f386a22cace7850c9c7dac296#md5:bddaed4f386a22cace7850c9c7dac296", 375 | "archive:https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz#md5:bddaed4f386a22cace7850c9c7dac296" 376 | ], 377 | "opam": { 378 | "name": "re", 379 | "version": "1.9.0", 380 | "path": "esy.lock/opam/re.1.9.0" 381 | } 382 | }, 383 | "overrides": [], 384 | "dependencies": [ 385 | "ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", 386 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 387 | ], 388 | "devDependencies": [ 389 | "ocaml@4.11.1000@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", 390 | "@opam/dune@opam:2.7.1@f5f493bc" 391 | ] 392 | }, 393 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6": { 394 | "id": "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 395 | "name": "@opam/ppx_yojson_conv_lib", 396 | "version": "opam:v0.14.0", 397 | "source": { 398 | "type": "install", 399 | "source": [ 400 | "archive:https://opam.ocaml.org/cache/md5/e2/e23c5593a7211ad4fb09e26e9a74698a#md5:e23c5593a7211ad4fb09e26e9a74698a", 401 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz#md5:e23c5593a7211ad4fb09e26e9a74698a" 402 | ], 403 | "opam": { 404 | "name": "ppx_yojson_conv_lib", 405 | "version": "v0.14.0", 406 | "path": "esy.lock/opam/ppx_yojson_conv_lib.v0.14.0" 407 | } 408 | }, 409 | "overrides": [], 410 | "dependencies": [ 411 | "ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 412 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 413 | ], 414 | "devDependencies": [ 415 | "ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 416 | "@opam/dune@opam:2.7.1@f5f493bc" 417 | ] 418 | }, 419 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45": { 420 | "id": "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 421 | "name": "@opam/ppx_derivers", 422 | "version": "opam:1.2.1", 423 | "source": { 424 | "type": "install", 425 | "source": [ 426 | "archive:https://opam.ocaml.org/cache/md5/5d/5dc2bf130c1db3c731fe0fffc5648b41#md5:5dc2bf130c1db3c731fe0fffc5648b41", 427 | "archive:https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz#md5:5dc2bf130c1db3c731fe0fffc5648b41" 428 | ], 429 | "opam": { 430 | "name": "ppx_derivers", 431 | "version": "1.2.1", 432 | "path": "esy.lock/opam/ppx_derivers.1.2.1" 433 | } 434 | }, 435 | "overrides": [], 436 | "dependencies": [ 437 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 438 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 439 | ], 440 | "devDependencies": [ 441 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 442 | ] 443 | }, 444 | "@opam/odoc@opam:1.5.1@52a58c0b": { 445 | "id": "@opam/odoc@opam:1.5.1@52a58c0b", 446 | "name": "@opam/odoc", 447 | "version": "opam:1.5.1", 448 | "source": { 449 | "type": "install", 450 | "source": [ 451 | "archive:https://opam.ocaml.org/cache/sha256/ea/ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f#sha256:ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f", 452 | "archive:https://github.com/ocaml/odoc/releases/download/1.5.1/odoc-1.5.1.tbz#sha256:ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f" 453 | ], 454 | "opam": { 455 | "name": "odoc", 456 | "version": "1.5.1", 457 | "path": "esy.lock/opam/odoc.1.5.1" 458 | } 459 | }, 460 | "overrides": [], 461 | "dependencies": [ 462 | "ocaml@4.11.1000@d41d8cd9", "@opam/tyxml@opam:4.4.0@1dca5713", 463 | "@opam/result@opam:1.5@6b753c82", "@opam/fpath@opam:0.7.3@674d8125", 464 | "@opam/dune@opam:2.7.1@f5f493bc", "@opam/cppo@opam:1.6.6@f4f83858", 465 | "@opam/cmdliner@opam:1.0.4@93208aac", 466 | "@opam/astring@opam:0.8.5@1300cee8", 467 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 468 | ], 469 | "devDependencies": [ 470 | "ocaml@4.11.1000@d41d8cd9", "@opam/tyxml@opam:4.4.0@1dca5713", 471 | "@opam/result@opam:1.5@6b753c82", "@opam/fpath@opam:0.7.3@674d8125", 472 | "@opam/dune@opam:2.7.1@f5f493bc", 473 | "@opam/cmdliner@opam:1.0.4@93208aac", 474 | "@opam/astring@opam:0.8.5@1300cee8" 475 | ] 476 | }, 477 | "@opam/ocamlformat@opam:0.15.0@8e036963": { 478 | "id": "@opam/ocamlformat@opam:0.15.0@8e036963", 479 | "name": "@opam/ocamlformat", 480 | "version": "opam:0.15.0", 481 | "source": { 482 | "type": "install", 483 | "source": [ 484 | "archive:https://opam.ocaml.org/cache/sha256/26/263b4a8907e1b820ae0c1db55183ac3a44c4eaa05e8f1a144baa1a9bcadf2005#sha256:263b4a8907e1b820ae0c1db55183ac3a44c4eaa05e8f1a144baa1a9bcadf2005", 485 | "archive:https://github.com/ocaml-ppx/ocamlformat/releases/download/0.15.0/ocamlformat-0.15.0.tbz#sha256:263b4a8907e1b820ae0c1db55183ac3a44c4eaa05e8f1a144baa1a9bcadf2005" 486 | ], 487 | "opam": { 488 | "name": "ocamlformat", 489 | "version": "0.15.0", 490 | "path": "esy.lock/opam/ocamlformat.0.15.0" 491 | } 492 | }, 493 | "overrides": [], 494 | "dependencies": [ 495 | "ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 496 | "@opam/uuseg@opam:13.0.0@f60712a7", 497 | "@opam/stdio@opam:v0.14.0@a624e254", "@opam/re@opam:1.9.0@d4d5e13d", 498 | "@opam/odoc@opam:1.5.1@52a58c0b", 499 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 500 | "@opam/menhir@opam:20200624@8629ff13", 501 | "@opam/fpath@opam:0.7.3@674d8125", 502 | "@opam/fix@opam:20200131@0ecd2f01", "@opam/dune@opam:2.7.1@f5f493bc", 503 | "@opam/cmdliner@opam:1.0.4@93208aac", 504 | "@opam/base-unix@opam:base@87d0b2eb", 505 | "@opam/base@opam:v0.14.0@8bc55fce", 506 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 507 | ], 508 | "devDependencies": [ 509 | "ocaml@4.11.1000@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 510 | "@opam/uuseg@opam:13.0.0@f60712a7", 511 | "@opam/stdio@opam:v0.14.0@a624e254", "@opam/re@opam:1.9.0@d4d5e13d", 512 | "@opam/odoc@opam:1.5.1@52a58c0b", 513 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 514 | "@opam/menhir@opam:20200624@8629ff13", 515 | "@opam/fpath@opam:0.7.3@674d8125", 516 | "@opam/fix@opam:20200131@0ecd2f01", "@opam/dune@opam:2.7.1@f5f493bc", 517 | "@opam/cmdliner@opam:1.0.4@93208aac", 518 | "@opam/base-unix@opam:base@87d0b2eb", 519 | "@opam/base@opam:v0.14.0@8bc55fce" 520 | ] 521 | }, 522 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9": { 523 | "id": "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 524 | "name": "@opam/ocamlfind", 525 | "version": "opam:1.8.1", 526 | "source": { 527 | "type": "install", 528 | "source": [ 529 | "archive:https://opam.ocaml.org/cache/md5/18/18ca650982c15536616dea0e422cbd8c#md5:18ca650982c15536616dea0e422cbd8c", 530 | "archive:http://download2.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c", 531 | "archive:http://download.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c" 532 | ], 533 | "opam": { 534 | "name": "ocamlfind", 535 | "version": "1.8.1", 536 | "path": "esy.lock/opam/ocamlfind.1.8.1" 537 | } 538 | }, 539 | "overrides": [ 540 | { 541 | "opamoverride": 542 | "esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.1_opam_override" 543 | } 544 | ], 545 | "dependencies": [ 546 | "ocaml@4.11.1000@d41d8cd9", "@opam/conf-m4@opam:1@3b2b148a", 547 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 548 | ], 549 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 550 | }, 551 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03": { 552 | "id": "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 553 | "name": "@opam/ocamlbuild", 554 | "version": "opam:0.14.0", 555 | "source": { 556 | "type": "install", 557 | "source": [ 558 | "archive:https://opam.ocaml.org/cache/sha256/87/87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78", 559 | "archive:https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78" 560 | ], 561 | "opam": { 562 | "name": "ocamlbuild", 563 | "version": "0.14.0", 564 | "path": "esy.lock/opam/ocamlbuild.0.14.0" 565 | } 566 | }, 567 | "overrides": [ 568 | { 569 | "opamoverride": 570 | "esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override" 571 | } 572 | ], 573 | "dependencies": [ 574 | "ocaml@4.11.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" 575 | ], 576 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 577 | }, 578 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47": { 579 | "id": "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 580 | "name": "@opam/ocaml-migrate-parsetree", 581 | "version": "opam:1.7.3", 582 | "source": { 583 | "type": "install", 584 | "source": [ 585 | "archive:https://opam.ocaml.org/cache/sha256/6d/6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55#sha256:6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55", 586 | "archive:https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.7.3/ocaml-migrate-parsetree-v1.7.3.tbz#sha256:6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55" 587 | ], 588 | "opam": { 589 | "name": "ocaml-migrate-parsetree", 590 | "version": "1.7.3", 591 | "path": "esy.lock/opam/ocaml-migrate-parsetree.1.7.3" 592 | } 593 | }, 594 | "overrides": [], 595 | "dependencies": [ 596 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 597 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 598 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 599 | ], 600 | "devDependencies": [ 601 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 602 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 603 | "@opam/dune@opam:2.7.1@f5f493bc" 604 | ] 605 | }, 606 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#a66d82aff86b162423b1657b38f7c4dcc5867ff1@d41d8cd9": { 607 | "id": 608 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#a66d82aff86b162423b1657b38f7c4dcc5867ff1@d41d8cd9", 609 | "name": "@opam/ocaml-lsp-server", 610 | "version": 611 | "github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#a66d82aff86b162423b1657b38f7c4dcc5867ff1", 612 | "source": { 613 | "type": "install", 614 | "source": [ 615 | "github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#a66d82aff86b162423b1657b38f7c4dcc5867ff1" 616 | ] 617 | }, 618 | "overrides": [], 619 | "dependencies": [ 620 | "ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 621 | "@opam/stdlib-shims@opam:0.1.0@8c116481", 622 | "@opam/result@opam:1.5@6b753c82", 623 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 624 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 625 | "@opam/menhir@opam:20200624@8629ff13", 626 | "@opam/dune-build-info@opam:2.7.1@da03d61d", 627 | "@opam/dune@opam:2.7.1@f5f493bc", "@opam/csexp@opam:1.3.2@5cea14af", 628 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 629 | ], 630 | "devDependencies": [ 631 | "ocaml@4.11.1000@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 632 | "@opam/stdlib-shims@opam:0.1.0@8c116481", 633 | "@opam/result@opam:1.5@6b753c82", 634 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 635 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 636 | "@opam/menhir@opam:20200624@8629ff13", 637 | "@opam/dune-build-info@opam:2.7.1@da03d61d", 638 | "@opam/dune@opam:2.7.1@f5f493bc", "@opam/csexp@opam:1.3.2@5cea14af" 639 | ] 640 | }, 641 | "@opam/menhirSdk@opam:20200624@2a05b5a7": { 642 | "id": "@opam/menhirSdk@opam:20200624@2a05b5a7", 643 | "name": "@opam/menhirSdk", 644 | "version": "opam:20200624", 645 | "source": { 646 | "type": "install", 647 | "source": [ 648 | "archive:https://opam.ocaml.org/cache/md5/c3/c37ff53a4a69059e1f8223067b91bb8b#md5:c37ff53a4a69059e1f8223067b91bb8b", 649 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz#md5:c37ff53a4a69059e1f8223067b91bb8b" 650 | ], 651 | "opam": { 652 | "name": "menhirSdk", 653 | "version": "20200624", 654 | "path": "esy.lock/opam/menhirSdk.20200624" 655 | } 656 | }, 657 | "overrides": [], 658 | "dependencies": [ 659 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 660 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 661 | ], 662 | "devDependencies": [ 663 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 664 | ] 665 | }, 666 | "@opam/menhirLib@opam:20200624@8bdd2b0e": { 667 | "id": "@opam/menhirLib@opam:20200624@8bdd2b0e", 668 | "name": "@opam/menhirLib", 669 | "version": "opam:20200624", 670 | "source": { 671 | "type": "install", 672 | "source": [ 673 | "archive:https://opam.ocaml.org/cache/md5/c3/c37ff53a4a69059e1f8223067b91bb8b#md5:c37ff53a4a69059e1f8223067b91bb8b", 674 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz#md5:c37ff53a4a69059e1f8223067b91bb8b" 675 | ], 676 | "opam": { 677 | "name": "menhirLib", 678 | "version": "20200624", 679 | "path": "esy.lock/opam/menhirLib.20200624" 680 | } 681 | }, 682 | "overrides": [], 683 | "dependencies": [ 684 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 685 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 686 | ], 687 | "devDependencies": [ 688 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 689 | ] 690 | }, 691 | "@opam/menhir@opam:20200624@8629ff13": { 692 | "id": "@opam/menhir@opam:20200624@8629ff13", 693 | "name": "@opam/menhir", 694 | "version": "opam:20200624", 695 | "source": { 696 | "type": "install", 697 | "source": [ 698 | "archive:https://opam.ocaml.org/cache/md5/c3/c37ff53a4a69059e1f8223067b91bb8b#md5:c37ff53a4a69059e1f8223067b91bb8b", 699 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz#md5:c37ff53a4a69059e1f8223067b91bb8b" 700 | ], 701 | "opam": { 702 | "name": "menhir", 703 | "version": "20200624", 704 | "path": "esy.lock/opam/menhir.20200624" 705 | } 706 | }, 707 | "overrides": [], 708 | "dependencies": [ 709 | "ocaml@4.11.1000@d41d8cd9", "@opam/menhirSdk@opam:20200624@2a05b5a7", 710 | "@opam/menhirLib@opam:20200624@8bdd2b0e", 711 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 712 | ], 713 | "devDependencies": [ 714 | "ocaml@4.11.1000@d41d8cd9", "@opam/menhirSdk@opam:20200624@2a05b5a7", 715 | "@opam/menhirLib@opam:20200624@8bdd2b0e", 716 | "@opam/dune@opam:2.7.1@f5f493bc" 717 | ] 718 | }, 719 | "@opam/luv@opam:0.5.6@3194d0f5": { 720 | "id": "@opam/luv@opam:0.5.6@3194d0f5", 721 | "name": "@opam/luv", 722 | "version": "opam:0.5.6", 723 | "source": { 724 | "type": "install", 725 | "source": [ 726 | "archive:https://opam.ocaml.org/cache/md5/fb/fb78fd1b179f5c9585e79b5a1c5ff644#md5:fb78fd1b179f5c9585e79b5a1c5ff644", 727 | "archive:https://github.com/aantron/luv/releases/download/0.5.6/luv-0.5.6.tar.gz#md5:fb78fd1b179f5c9585e79b5a1c5ff644" 728 | ], 729 | "opam": { 730 | "name": "luv", 731 | "version": "0.5.6", 732 | "path": "esy.lock/opam/luv.0.5.6" 733 | } 734 | }, 735 | "overrides": [], 736 | "dependencies": [ 737 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 738 | "@opam/dune@opam:2.7.1@f5f493bc", 739 | "@opam/ctypes@opam:0.17.1@b90ad4de", 740 | "@opam/base-unix@opam:base@87d0b2eb", 741 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 742 | ], 743 | "devDependencies": [ 744 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 745 | "@opam/dune@opam:2.7.1@f5f493bc", 746 | "@opam/ctypes@opam:0.17.1@b90ad4de", 747 | "@opam/base-unix@opam:base@87d0b2eb" 748 | ] 749 | }, 750 | "@opam/logs@opam:0.7.0@1d03143e": { 751 | "id": "@opam/logs@opam:0.7.0@1d03143e", 752 | "name": "@opam/logs", 753 | "version": "opam:0.7.0", 754 | "source": { 755 | "type": "install", 756 | "source": [ 757 | "archive:https://opam.ocaml.org/cache/md5/2b/2bf021ca13331775e33cf34ab60246f7#md5:2bf021ca13331775e33cf34ab60246f7", 758 | "archive:https://erratique.ch/software/logs/releases/logs-0.7.0.tbz#md5:2bf021ca13331775e33cf34ab60246f7" 759 | ], 760 | "opam": { 761 | "name": "logs", 762 | "version": "0.7.0", 763 | "path": "esy.lock/opam/logs.0.7.0" 764 | } 765 | }, 766 | "overrides": [], 767 | "dependencies": [ 768 | "ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c", 769 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 770 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 771 | "@opam/fmt@opam:0.8.9@e0843a5b", 772 | "@opam/cmdliner@opam:1.0.4@93208aac", 773 | "@opam/base-threads@opam:base@36803084", 774 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 775 | ], 776 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 777 | }, 778 | "@opam/integers@opam:0.4.0@f7acfaeb": { 779 | "id": "@opam/integers@opam:0.4.0@f7acfaeb", 780 | "name": "@opam/integers", 781 | "version": "opam:0.4.0", 782 | "source": { 783 | "type": "install", 784 | "source": [ 785 | "archive:https://opam.ocaml.org/cache/md5/c1/c1492352e6525048790508c57aad93c3#md5:c1492352e6525048790508c57aad93c3", 786 | "archive:https://github.com/ocamllabs/ocaml-integers/archive/0.4.0.tar.gz#md5:c1492352e6525048790508c57aad93c3" 787 | ], 788 | "opam": { 789 | "name": "integers", 790 | "version": "0.4.0", 791 | "path": "esy.lock/opam/integers.0.4.0" 792 | } 793 | }, 794 | "overrides": [], 795 | "dependencies": [ 796 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 797 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 798 | ], 799 | "devDependencies": [ 800 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 801 | ] 802 | }, 803 | "@opam/fpath@opam:0.7.3@674d8125": { 804 | "id": "@opam/fpath@opam:0.7.3@674d8125", 805 | "name": "@opam/fpath", 806 | "version": "opam:0.7.3", 807 | "source": { 808 | "type": "install", 809 | "source": [ 810 | "archive:https://opam.ocaml.org/cache/md5/07/0740b530e8fed5b0adc5eee8463cfc2f#md5:0740b530e8fed5b0adc5eee8463cfc2f", 811 | "archive:https://erratique.ch/software/fpath/releases/fpath-0.7.3.tbz#md5:0740b530e8fed5b0adc5eee8463cfc2f" 812 | ], 813 | "opam": { 814 | "name": "fpath", 815 | "version": "0.7.3", 816 | "path": "esy.lock/opam/fpath.0.7.3" 817 | } 818 | }, 819 | "overrides": [], 820 | "dependencies": [ 821 | "ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c", 822 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 823 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 824 | "@opam/astring@opam:0.8.5@1300cee8", 825 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 826 | ], 827 | "devDependencies": [ 828 | "ocaml@4.11.1000@d41d8cd9", "@opam/astring@opam:0.8.5@1300cee8" 829 | ] 830 | }, 831 | "@opam/fmt@opam:0.8.9@e0843a5b": { 832 | "id": "@opam/fmt@opam:0.8.9@e0843a5b", 833 | "name": "@opam/fmt", 834 | "version": "opam:0.8.9", 835 | "source": { 836 | "type": "install", 837 | "source": [ 838 | "archive:https://opam.ocaml.org/cache/md5/40/4001b51cde90ea4fd99a4a5033ecf411#md5:4001b51cde90ea4fd99a4a5033ecf411", 839 | "archive:https://erratique.ch/software/fmt/releases/fmt-0.8.9.tbz#md5:4001b51cde90ea4fd99a4a5033ecf411" 840 | ], 841 | "opam": { 842 | "name": "fmt", 843 | "version": "0.8.9", 844 | "path": "esy.lock/opam/fmt.0.8.9" 845 | } 846 | }, 847 | "overrides": [], 848 | "dependencies": [ 849 | "ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c", 850 | "@opam/stdlib-shims@opam:0.1.0@8c116481", 851 | "@opam/seq@opam:base@d8d7de1d", 852 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 853 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 854 | "@opam/cmdliner@opam:1.0.4@93208aac", 855 | "@opam/base-unix@opam:base@87d0b2eb", 856 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 857 | ], 858 | "devDependencies": [ 859 | "ocaml@4.11.1000@d41d8cd9", "@opam/stdlib-shims@opam:0.1.0@8c116481", 860 | "@opam/seq@opam:base@d8d7de1d" 861 | ] 862 | }, 863 | "@opam/fix@opam:20200131@0ecd2f01": { 864 | "id": "@opam/fix@opam:20200131@0ecd2f01", 865 | "name": "@opam/fix", 866 | "version": "opam:20200131", 867 | "source": { 868 | "type": "install", 869 | "source": [ 870 | "archive:https://opam.ocaml.org/cache/md5/99/991ff031666c662eaab638d2e0f4ac1d#md5:991ff031666c662eaab638d2e0f4ac1d", 871 | "archive:https://gitlab.inria.fr/fpottier/fix/repository/20200131/archive.tar.gz#md5:991ff031666c662eaab638d2e0f4ac1d" 872 | ], 873 | "opam": { 874 | "name": "fix", 875 | "version": "20200131", 876 | "path": "esy.lock/opam/fix.20200131" 877 | } 878 | }, 879 | "overrides": [], 880 | "dependencies": [ 881 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 882 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 883 | ], 884 | "devDependencies": [ 885 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 886 | ] 887 | }, 888 | "@opam/easy-format@opam:1.3.2@0484b3c4": { 889 | "id": "@opam/easy-format@opam:1.3.2@0484b3c4", 890 | "name": "@opam/easy-format", 891 | "version": "opam:1.3.2", 892 | "source": { 893 | "type": "install", 894 | "source": [ 895 | "archive:https://opam.ocaml.org/cache/sha256/34/3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926", 896 | "archive:https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926" 897 | ], 898 | "opam": { 899 | "name": "easy-format", 900 | "version": "1.3.2", 901 | "path": "esy.lock/opam/easy-format.1.3.2" 902 | } 903 | }, 904 | "overrides": [], 905 | "dependencies": [ 906 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 907 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 908 | ], 909 | "devDependencies": [ 910 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc" 911 | ] 912 | }, 913 | "@opam/dune-configurator@opam:2.7.1@96307faa": { 914 | "id": "@opam/dune-configurator@opam:2.7.1@96307faa", 915 | "name": "@opam/dune-configurator", 916 | "version": "opam:2.7.1", 917 | "source": { 918 | "type": "install", 919 | "source": [ 920 | "archive:https://opam.ocaml.org/cache/sha256/c3/c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d#sha256:c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d", 921 | "archive:https://github.com/ocaml/dune/releases/download/2.7.1/dune-2.7.1.tbz#sha256:c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d" 922 | ], 923 | "opam": { 924 | "name": "dune-configurator", 925 | "version": "2.7.1", 926 | "path": "esy.lock/opam/dune-configurator.2.7.1" 927 | } 928 | }, 929 | "overrides": [], 930 | "dependencies": [ 931 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 932 | "@opam/dune@opam:2.7.1@f5f493bc", "@opam/csexp@opam:1.3.2@5cea14af", 933 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 934 | ], 935 | "devDependencies": [ 936 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 937 | "@opam/dune@opam:2.7.1@f5f493bc", "@opam/csexp@opam:1.3.2@5cea14af" 938 | ] 939 | }, 940 | "@opam/dune-build-info@opam:2.7.1@da03d61d": { 941 | "id": "@opam/dune-build-info@opam:2.7.1@da03d61d", 942 | "name": "@opam/dune-build-info", 943 | "version": "opam:2.7.1", 944 | "source": { 945 | "type": "install", 946 | "source": [ 947 | "archive:https://opam.ocaml.org/cache/sha256/c3/c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d#sha256:c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d", 948 | "archive:https://github.com/ocaml/dune/releases/download/2.7.1/dune-2.7.1.tbz#sha256:c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d" 949 | ], 950 | "opam": { 951 | "name": "dune-build-info", 952 | "version": "2.7.1", 953 | "path": "esy.lock/opam/dune-build-info.2.7.1" 954 | } 955 | }, 956 | "overrides": [], 957 | "dependencies": [ 958 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 959 | ], 960 | "devDependencies": [ "@opam/dune@opam:2.7.1@f5f493bc" ] 961 | }, 962 | "@opam/dune@opam:2.7.1@f5f493bc": { 963 | "id": "@opam/dune@opam:2.7.1@f5f493bc", 964 | "name": "@opam/dune", 965 | "version": "opam:2.7.1", 966 | "source": { 967 | "type": "install", 968 | "source": [ 969 | "archive:https://opam.ocaml.org/cache/sha256/c3/c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d#sha256:c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d", 970 | "archive:https://github.com/ocaml/dune/releases/download/2.7.1/dune-2.7.1.tbz#sha256:c3528f2f8b3a2e3fe18e166fc823e6caeee8b7c78ade6b6fe4d2fa978070925d" 971 | ], 972 | "opam": { 973 | "name": "dune", 974 | "version": "2.7.1", 975 | "path": "esy.lock/opam/dune.2.7.1" 976 | } 977 | }, 978 | "overrides": [ 979 | { 980 | "opamoverride": 981 | "esy.lock/overrides/opam__s__dune_opam__c__2.7.1_opam_override" 982 | } 983 | ], 984 | "dependencies": [ 985 | "ocaml@4.11.1000@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb", 986 | "@opam/base-threads@opam:base@36803084", 987 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 988 | ], 989 | "devDependencies": [ 990 | "ocaml@4.11.1000@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb", 991 | "@opam/base-threads@opam:base@36803084" 992 | ] 993 | }, 994 | "@opam/ctypes@opam:0.17.1@b90ad4de": { 995 | "id": "@opam/ctypes@opam:0.17.1@b90ad4de", 996 | "name": "@opam/ctypes", 997 | "version": "opam:0.17.1", 998 | "source": { 999 | "type": "install", 1000 | "source": [ 1001 | "archive:https://opam.ocaml.org/cache/md5/50/508ea062105518c14fd516aa2ea9db5e#md5:508ea062105518c14fd516aa2ea9db5e", 1002 | "archive:https://github.com/ocamllabs/ocaml-ctypes/archive/0.17.1.tar.gz#md5:508ea062105518c14fd516aa2ea9db5e" 1003 | ], 1004 | "opam": { 1005 | "name": "ctypes", 1006 | "version": "0.17.1", 1007 | "path": "esy.lock/opam/ctypes.0.17.1" 1008 | } 1009 | }, 1010 | "overrides": [ 1011 | { 1012 | "opamoverride": 1013 | "esy.lock/overrides/opam__s__ctypes_opam__c__0.17.1_opam_override" 1014 | } 1015 | ], 1016 | "dependencies": [ 1017 | "ocaml@4.11.1000@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 1018 | "@opam/integers@opam:0.4.0@f7acfaeb", 1019 | "@opam/conf-pkg-config@opam:1.3@93481236", 1020 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1021 | ], 1022 | "devDependencies": [ 1023 | "ocaml@4.11.1000@d41d8cd9", "@opam/integers@opam:0.4.0@f7acfaeb" 1024 | ] 1025 | }, 1026 | "@opam/csexp@opam:1.3.2@5cea14af": { 1027 | "id": "@opam/csexp@opam:1.3.2@5cea14af", 1028 | "name": "@opam/csexp", 1029 | "version": "opam:1.3.2", 1030 | "source": { 1031 | "type": "install", 1032 | "source": [ 1033 | "archive:https://opam.ocaml.org/cache/sha256/f2/f21f427b277f07e8bfd050e00c640a5893c1bf4b689147640fa383255dcf1c4a#sha256:f21f427b277f07e8bfd050e00c640a5893c1bf4b689147640fa383255dcf1c4a", 1034 | "archive:https://github.com/ocaml-dune/csexp/releases/download/1.3.2/csexp-1.3.2.tbz#sha256:f21f427b277f07e8bfd050e00c640a5893c1bf4b689147640fa383255dcf1c4a" 1035 | ], 1036 | "opam": { 1037 | "name": "csexp", 1038 | "version": "1.3.2", 1039 | "path": "esy.lock/opam/csexp.1.3.2" 1040 | } 1041 | }, 1042 | "overrides": [], 1043 | "dependencies": [ 1044 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 1045 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1046 | ], 1047 | "devDependencies": [ 1048 | "ocaml@4.11.1000@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 1049 | "@opam/dune@opam:2.7.1@f5f493bc" 1050 | ] 1051 | }, 1052 | "@opam/cppo@opam:1.6.6@f4f83858": { 1053 | "id": "@opam/cppo@opam:1.6.6@f4f83858", 1054 | "name": "@opam/cppo", 1055 | "version": "opam:1.6.6", 1056 | "source": { 1057 | "type": "install", 1058 | "source": [ 1059 | "archive:https://opam.ocaml.org/cache/sha256/e7/e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0#sha256:e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0", 1060 | "archive:https://github.com/ocaml-community/cppo/releases/download/v1.6.6/cppo-v1.6.6.tbz#sha256:e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0" 1061 | ], 1062 | "opam": { 1063 | "name": "cppo", 1064 | "version": "1.6.6", 1065 | "path": "esy.lock/opam/cppo.1.6.6" 1066 | } 1067 | }, 1068 | "overrides": [], 1069 | "dependencies": [ 1070 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 1071 | "@opam/base-unix@opam:base@87d0b2eb", 1072 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1073 | ], 1074 | "devDependencies": [ 1075 | "ocaml@4.11.1000@d41d8cd9", "@opam/dune@opam:2.7.1@f5f493bc", 1076 | "@opam/base-unix@opam:base@87d0b2eb" 1077 | ] 1078 | }, 1079 | "@opam/conf-pkg-config@opam:1.3@93481236": { 1080 | "id": "@opam/conf-pkg-config@opam:1.3@93481236", 1081 | "name": "@opam/conf-pkg-config", 1082 | "version": "opam:1.3", 1083 | "source": { 1084 | "type": "install", 1085 | "source": [ "no-source:" ], 1086 | "opam": { 1087 | "name": "conf-pkg-config", 1088 | "version": "1.3", 1089 | "path": "esy.lock/opam/conf-pkg-config.1.3" 1090 | } 1091 | }, 1092 | "overrides": [ 1093 | { 1094 | "opamoverride": 1095 | "esy.lock/overrides/opam__s__conf_pkg_config_opam__c__1.3_opam_override" 1096 | } 1097 | ], 1098 | "dependencies": [ 1099 | "yarn-pkg-config@github:esy-ocaml/yarn-pkg-config#db3a0b63883606dd57c54a7158d560d6cba8cd79@d41d8cd9", 1100 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1101 | ], 1102 | "devDependencies": [] 1103 | }, 1104 | "@opam/conf-m4@opam:1@3b2b148a": { 1105 | "id": "@opam/conf-m4@opam:1@3b2b148a", 1106 | "name": "@opam/conf-m4", 1107 | "version": "opam:1", 1108 | "source": { 1109 | "type": "install", 1110 | "source": [ "no-source:" ], 1111 | "opam": { 1112 | "name": "conf-m4", 1113 | "version": "1", 1114 | "path": "esy.lock/opam/conf-m4.1" 1115 | } 1116 | }, 1117 | "overrides": [], 1118 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 1119 | "devDependencies": [] 1120 | }, 1121 | "@opam/cmdliner@opam:1.0.4@93208aac": { 1122 | "id": "@opam/cmdliner@opam:1.0.4@93208aac", 1123 | "name": "@opam/cmdliner", 1124 | "version": "opam:1.0.4", 1125 | "source": { 1126 | "type": "install", 1127 | "source": [ 1128 | "archive:https://opam.ocaml.org/cache/md5/fe/fe2213d0bc63b1e10a2d0aa66d2fc8d9#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9", 1129 | "archive:http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9" 1130 | ], 1131 | "opam": { 1132 | "name": "cmdliner", 1133 | "version": "1.0.4", 1134 | "path": "esy.lock/opam/cmdliner.1.0.4" 1135 | } 1136 | }, 1137 | "overrides": [], 1138 | "dependencies": [ 1139 | "ocaml@4.11.1000@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1140 | ], 1141 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 1142 | }, 1143 | "@opam/biniou@opam:1.2.1@d7570399": { 1144 | "id": "@opam/biniou@opam:1.2.1@d7570399", 1145 | "name": "@opam/biniou", 1146 | "version": "opam:1.2.1", 1147 | "source": { 1148 | "type": "install", 1149 | "source": [ 1150 | "archive:https://opam.ocaml.org/cache/sha256/35/35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335", 1151 | "archive:https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335" 1152 | ], 1153 | "opam": { 1154 | "name": "biniou", 1155 | "version": "1.2.1", 1156 | "path": "esy.lock/opam/biniou.1.2.1" 1157 | } 1158 | }, 1159 | "overrides": [], 1160 | "dependencies": [ 1161 | "ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 1162 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1163 | ], 1164 | "devDependencies": [ 1165 | "ocaml@4.11.1000@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 1166 | "@opam/dune@opam:2.7.1@f5f493bc" 1167 | ] 1168 | }, 1169 | "@opam/base-unix@opam:base@87d0b2eb": { 1170 | "id": "@opam/base-unix@opam:base@87d0b2eb", 1171 | "name": "@opam/base-unix", 1172 | "version": "opam:base", 1173 | "source": { 1174 | "type": "install", 1175 | "source": [ "no-source:" ], 1176 | "opam": { 1177 | "name": "base-unix", 1178 | "version": "base", 1179 | "path": "esy.lock/opam/base-unix.base" 1180 | } 1181 | }, 1182 | "overrides": [], 1183 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 1184 | "devDependencies": [] 1185 | }, 1186 | "@opam/base-threads@opam:base@36803084": { 1187 | "id": "@opam/base-threads@opam:base@36803084", 1188 | "name": "@opam/base-threads", 1189 | "version": "opam:base", 1190 | "source": { 1191 | "type": "install", 1192 | "source": [ "no-source:" ], 1193 | "opam": { 1194 | "name": "base-threads", 1195 | "version": "base", 1196 | "path": "esy.lock/opam/base-threads.base" 1197 | } 1198 | }, 1199 | "overrides": [], 1200 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 1201 | "devDependencies": [] 1202 | }, 1203 | "@opam/base@opam:v0.14.0@8bc55fce": { 1204 | "id": "@opam/base@opam:v0.14.0@8bc55fce", 1205 | "name": "@opam/base", 1206 | "version": "opam:v0.14.0", 1207 | "source": { 1208 | "type": "install", 1209 | "source": [ 1210 | "archive:https://opam.ocaml.org/cache/md5/5a/5a00382c724e97b6768aaa27481dd3cc#md5:5a00382c724e97b6768aaa27481dd3cc", 1211 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/base-v0.14.0.tar.gz#md5:5a00382c724e97b6768aaa27481dd3cc" 1212 | ], 1213 | "opam": { 1214 | "name": "base", 1215 | "version": "v0.14.0", 1216 | "path": "esy.lock/opam/base.v0.14.0" 1217 | } 1218 | }, 1219 | "overrides": [], 1220 | "dependencies": [ 1221 | "ocaml@4.11.1000@d41d8cd9", "@opam/sexplib0@opam:v0.14.0@ddeb6438", 1222 | "@opam/dune-configurator@opam:2.7.1@96307faa", 1223 | "@opam/dune@opam:2.7.1@f5f493bc", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1224 | ], 1225 | "devDependencies": [ 1226 | "ocaml@4.11.1000@d41d8cd9", "@opam/sexplib0@opam:v0.14.0@ddeb6438", 1227 | "@opam/dune-configurator@opam:2.7.1@96307faa", 1228 | "@opam/dune@opam:2.7.1@f5f493bc" 1229 | ] 1230 | }, 1231 | "@opam/astring@opam:0.8.5@1300cee8": { 1232 | "id": "@opam/astring@opam:0.8.5@1300cee8", 1233 | "name": "@opam/astring", 1234 | "version": "opam:0.8.5", 1235 | "source": { 1236 | "type": "install", 1237 | "source": [ 1238 | "archive:https://opam.ocaml.org/cache/md5/e1/e148907c24157d1df43bec89b58b3ec8#md5:e148907c24157d1df43bec89b58b3ec8", 1239 | "archive:https://erratique.ch/software/astring/releases/astring-0.8.5.tbz#md5:e148907c24157d1df43bec89b58b3ec8" 1240 | ], 1241 | "opam": { 1242 | "name": "astring", 1243 | "version": "0.8.5", 1244 | "path": "esy.lock/opam/astring.0.8.5" 1245 | } 1246 | }, 1247 | "overrides": [], 1248 | "dependencies": [ 1249 | "ocaml@4.11.1000@d41d8cd9", "@opam/topkg@opam:1.0.3@e4e10f1c", 1250 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 1251 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 1252 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1253 | ], 1254 | "devDependencies": [ "ocaml@4.11.1000@d41d8cd9" ] 1255 | }, 1256 | "@esy-ocaml/substs@0.0.1@d41d8cd9": { 1257 | "id": "@esy-ocaml/substs@0.0.1@d41d8cd9", 1258 | "name": "@esy-ocaml/substs", 1259 | "version": "0.0.1", 1260 | "source": { 1261 | "type": "install", 1262 | "source": [ 1263 | "archive:https://registry.npmjs.org/@esy-ocaml/substs/-/substs-0.0.1.tgz#sha1:59ebdbbaedcda123fc7ed8fb2b302b7d819e9a46" 1264 | ] 1265 | }, 1266 | "overrides": [], 1267 | "dependencies": [], 1268 | "devDependencies": [] 1269 | } 1270 | } 1271 | } --------------------------------------------------------------------------------