├── dune-project ├── lib ├── Server.rei ├── GenerateSite.rei ├── Themes.rei ├── dune ├── Server.re ├── GenerateSite.re └── Themes.re ├── logo.gif ├── 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-bigarray.base │ │ └── opam │ ├── base-threads.base │ │ └── opam │ ├── base-bytes.base │ │ └── opam │ ├── camlzip.1.10 │ │ └── opam │ ├── conf-m4.1 │ │ └── opam │ ├── faraday-lwt.0.7.2 │ │ └── opam │ ├── fix.20201120 │ │ └── opam │ ├── mmap.1.1.0 │ │ └── opam │ ├── ppx_derivers.1.2.1 │ │ └── opam │ ├── faraday-lwt-unix.0.7.2 │ │ └── opam │ ├── result.1.5 │ │ └── opam │ ├── lwt_ppx.2.0.1 │ │ └── opam │ ├── bigarray-compat.1.0.0 │ │ └── opam │ ├── conf-zlib.1 │ │ └── opam │ ├── menhir.20201201 │ │ └── opam │ ├── menhirLib.20201201 │ │ └── opam │ ├── menhirSdk.20201201 │ │ └── opam │ ├── ppx_tools_versioned.5.4.0 │ │ └── opam │ ├── dot-merlin-reader.3.4.2 │ │ └── opam │ ├── stdlib-shims.0.1.0 │ │ └── opam │ ├── psq.0.2.0 │ │ └── opam │ ├── hpack.0.2.0 │ │ └── opam │ ├── stringext.1.6.0 │ │ └── opam │ ├── conf-autoconf.0.1 │ │ └── opam │ ├── fpath.0.7.3 │ │ └── opam │ ├── junit.2.0.2 │ │ └── opam │ ├── multipart-form-data.0.3.0 │ │ └── opam │ ├── ocamlbuild.0.14.0 │ │ └── opam │ ├── merlin-extend.0.6 │ │ └── opam │ ├── uchar.0.0.2 │ │ └── opam │ ├── ocaml-syntax-shims.1.0.0 │ │ └── opam │ ├── re.1.9.0 │ │ └── opam │ ├── rresult.0.6.0 │ │ └── opam │ ├── faraday.0.7.2 │ │ └── opam │ ├── cppo.1.6.6 │ │ └── opam │ ├── uri.3.1.0 │ │ └── opam │ ├── yojson.1.7.0 │ │ └── opam │ ├── eqaf.0.7 │ │ └── opam │ ├── base64.3.4.0 │ │ └── opam │ ├── angstrom.0.15.0 │ │ └── opam │ ├── astring.0.8.5 │ │ └── opam │ ├── ocaml-migrate-parsetree.1.8.0 │ │ └── opam │ ├── uutf.1.0.2 │ │ └── opam │ ├── bigstringaf.0.7.0 │ │ └── opam │ ├── dune-configurator.2.7.1 │ │ └── opam │ ├── odoc.1.5.2 │ │ └── opam │ ├── fmt.0.8.9 │ │ └── opam │ ├── cmdliner.1.0.3 │ │ └── opam │ ├── magic-mime.1.1.2 │ │ └── opam │ ├── tyxml.4.4.0 │ │ └── opam │ ├── ocplib-endian.1.1 │ │ └── opam │ ├── atdgen-runtime.2.2.1 │ │ └── opam │ ├── bos.0.2.0 │ │ └── opam │ ├── conf-pkg-config.1.3 │ │ └── opam │ ├── ptime.0.8.5 │ │ └── opam │ ├── easy-format.1.3.2 │ │ └── opam │ ├── atd.2.2.1 │ │ └── opam │ ├── lwt.5.3.0 │ │ └── opam │ ├── biniou.1.2.1 │ │ └── opam │ ├── topkg.1.0.3 │ │ └── opam │ ├── csexp.1.3.2 │ │ └── opam │ ├── ezgzip.0.2.3 │ │ └── opam │ ├── digestif.0.9.0 │ │ └── opam │ ├── atdgen.2.2.1 │ │ └── opam │ ├── logs.0.7.0 │ │ └── opam │ ├── dune.2.7.1 │ │ └── opam │ └── merlin.3.4.2 │ │ └── opam ├── .gitignore ├── .gitattributes └── overrides │ ├── opam__s__conf_zlib_opam__c__1_opam_override │ └── package.json │ ├── opam__s__conf_autoconf_opam__c__0.1_opam_override │ └── package.json │ ├── opam__s__conf_m4_opam__c__1_opam_override │ └── package.json │ ├── opam__s__digestif_opam__c__0.9.0_opam_override │ └── package.json │ ├── opam__s__camlzip_opam__c__1.10_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 ├── .npmignore ├── bin ├── Agave.re └── dune ├── makefile ├── .gitignore ├── CONTRIBUTING.md ├── .github ├── workflows │ ├── print_esy_cache.js │ └── build.yml └── FUNDING.yml ├── agave-generator.opam ├── azure-pipelines.yml ├── package.json ├── README.md └── LICENSE /dune-project: -------------------------------------------------------------------------------- 1 | (lang dune 2.6) 2 | -------------------------------------------------------------------------------- /lib/Server.rei: -------------------------------------------------------------------------------- 1 | let serveFiles: string => string; -------------------------------------------------------------------------------- /logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jottenlips/agave/HEAD/logo.gif -------------------------------------------------------------------------------- /lib/GenerateSite.rei: -------------------------------------------------------------------------------- 1 | /** Converts .md to html*/ 2 | let agave: unit => unit; -------------------------------------------------------------------------------- /esy.lock/opam/seq.base/files/seq.install: -------------------------------------------------------------------------------- 1 | lib:[ 2 | "META.seq" {"META"} 3 | ] 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | esy.lock 2 | bin 3 | .ci 4 | azure-pipelines.yml 5 | _esy 6 | .merlin 7 | _build 8 | junit.xml -------------------------------------------------------------------------------- /esy.lock/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Reset any possible .gitignore, we want all esy.lock to be un-ignored. 3 | !* 4 | -------------------------------------------------------------------------------- /bin/Agave.re: -------------------------------------------------------------------------------- 1 | /* let () = print_endline(Lib.GenerateSite.agave()); */ 2 | 3 | let () = Lib.GenerateSite.agave(); -------------------------------------------------------------------------------- /lib/Themes.rei: -------------------------------------------------------------------------------- 1 | let hasTheme: string => bool; 2 | let getTheme: string => string; 3 | let getThemeCss: string => string; -------------------------------------------------------------------------------- /lib/dune: -------------------------------------------------------------------------------- 1 | (library 2 | (name lib) 3 | (flags 4 | (-w -40 -w +26)) 5 | (libraries pastel.lib bos str omd cmdliner re-web lwt)) 6 | -------------------------------------------------------------------------------- /bin/dune: -------------------------------------------------------------------------------- 1 | (executable 2 | (name Agave) 3 | (public_name Agave) 4 | (modes byte exe) 5 | (libraries console.lib lib lwt re-web)) 6 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | .PHONY: deps 2 | deps: 3 | opam install --deps-only . 4 | 5 | .PHONY: install 6 | install: build 7 | dune install 8 | 9 | .PHONY: build 10 | build: 11 | dune build -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .merlin 2 | node_modules/ 3 | _build 4 | _esy 5 | _release 6 | *.byte 7 | *.native 8 | *.install 9 | public/ 10 | /public 11 | markdown/ 12 | /markdown 13 | 14 | .DS_Store -------------------------------------------------------------------------------- /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/overrides/opam__s__conf_zlib_opam__c__1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "esy-zlib": "esy-packages/esy-zlib#404929fd8b7ed83ed6a528d751840faff957b4b3" 4 | } 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/overrides/opam__s__conf_autoconf_opam__c__0.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ "true" ], 3 | "dependencies": { 4 | "esy-autoconf": "esy-packages/esy-autoconf#fb93edf" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /esy.lock/opam/base-bigarray.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Bigarray 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/overrides/opam__s__conf_m4_opam__c__1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": "true", 3 | "dependencies": { 4 | "esy-m4": "esy-packages/esy-m4#c7cf0ac9221be2b1f9d90e83559ca08397a629e7" 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__digestif_opam__c__0.9.0_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "dune", 5 | "build", 6 | "-p", 7 | "digestif", 8 | "-j", 9 | "4" 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__camlzip_opam__c__1.10_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "exportedEnv": { 3 | "CAML_LD_LIBRARY_PATH": { 4 | "val": "#{self.lib / 'zip' : $CAML_LD_LIBRARY_PATH}", 5 | "scope": "global" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /esy.lock/opam/base-bytes.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: " " 3 | authors: " " 4 | homepage: " " 5 | depends: [ 6 | "ocaml" {>= "4.02.0"} 7 | "ocamlfind" {>= "1.5.3"} 8 | ] 9 | synopsis: "Bytes library distributed with the OCaml compiler" 10 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Follow the code of conduct 2 | 3 | [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](code_of_conduct.md) 4 | 5 | When contributing to this repository, please first discuss the change you wish to make via issue on this repository. 6 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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 | module.exports = exports = core => 14 | core.setOutput('esy_cache', path.join(ESY_FOLDER, esy3, "i")); 15 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /agave-generator.opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | name: "agave" 3 | version: "0.1.2" 4 | synopsis: "Simple static site generator" 5 | description: """ 6 | Simple static site generator 7 | """ 8 | maintainer: "John jottenlips@gmail.com" 9 | authors: "John jottenlips@gmail.com" 10 | license: "MIT" 11 | homepage: "https://github.com/jottenlips/agave" 12 | bug-reports: "https://github.com/jottenlips/agave" 13 | dev-repo: "git://git@github.com:jottenlips/agave.git" 14 | depends: [ "ocaml" "ocamlfind" "bos" "pastel" "omd" "str" "esy-openssl" ] 15 | build: [ 16 | ["./configure" "--prefix=%{prefix}%"] 17 | [make] 18 | ] 19 | install: [make "install"] -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: jottenlips # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | open_collective: # Replace with a single Open Collective username 5 | ko_fi: # johnottenlips # Replace with a single Ko-fi username 6 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 7 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 8 | liberapay: # Replace with a single Liberapay username 9 | issuehunt: # Replace with a single IssueHunt username 10 | otechie: # Replace with a single Otechie username 11 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 12 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /esy.lock/opam/camlzip.1.10/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Cryptosense " 3 | authors: ["Xavier Leroy"] 4 | homepage: "https://github.com/xavierleroy/camlzip" 5 | bug-reports: "https://github.com/xavierleroy/camlzip/issues" 6 | license: "LGPL-2.1-or-later with OCaml-LGPL-linking-exception" 7 | build: [ 8 | [make "all"] 9 | [make "allopt"] 10 | ] 11 | install: [make "install-findlib"] 12 | depends: [ 13 | "ocaml" {>= "4.02.0"} 14 | "ocamlfind" {build} 15 | "conf-zlib" 16 | ] 17 | synopsis: 18 | "Provides easy access to compressed files in ZIP, GZIP and JAR format" 19 | url { 20 | src: "https://github.com/xavierleroy/camlzip/archive/rel110.zip" 21 | checksum: "sha256=a5541cbc38c14467a8abcbdcb54c1d2ed12515c1c4c6da0eb3bdafb44aff7996" 22 | } 23 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /esy.lock/opam/faraday-lwt.0.7.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Spiros Eliopoulos " 3 | authors: [ "Spiros Eliopoulos " ] 4 | license: "BSD-3-clause" 5 | homepage: "https://github.com/inhabitedtype/faraday" 6 | bug-reports: "https://github.com/inhabitedtype/faraday/issues" 7 | dev-repo: "git+https://github.com/inhabitedtype/faraday.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ["dune" "runtest" "-p" name] {with-test} 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.02.0"} 15 | "dune" {>= "1.11"} 16 | "faraday" {>= "0.5.0"} 17 | "lwt" 18 | ] 19 | synopsis: "Lwt support for Faraday" 20 | url { 21 | src: "https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz" 22 | checksum: "md5=61bb83e1a4bed100eb0bd1365878e3a1" 23 | } 24 | -------------------------------------------------------------------------------- /esy.lock/opam/fix.20201120/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/20201120/archive.tar.gz" 20 | checksum: [ 21 | "md5=7eb570b759635fe66f3556d2b1cc88e3" 22 | "sha512=344dcc619f9e8b8a6c998775b6d2dab2ea5253e6a67abe4797f76dc5dd30bc776568abce1e90477422e9db447821579889737e3531c42139708f813e983ea5d4" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /esy.lock/opam/mmap.1.1.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "jeremie@dimino.org" 3 | authors: ["Jérémie Dimino " "Anton Bachin" ] 4 | homepage: "https://github.com/mirage/mmap" 5 | bug-reports: "https://github.com/mirage/mmap/issues" 6 | doc: "https://mirage.github.io/mmap/" 7 | dev-repo: "git+https://github.com/mirage/mmap.git" 8 | license: "LGPL-2.1-only with OCaml-LGPL-linking-exception" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" 14 | "dune" {>= "1.6"} 15 | ] 16 | synopsis: "File mapping functionality" 17 | description: """ 18 | This project provides a Mmap.map_file functions for mapping files in memory. 19 | """ 20 | url { 21 | src: 22 | "https://github.com/mirage/mmap/releases/download/v1.1.0/mmap-v1.1.0.tbz" 23 | checksum: "md5=8c5d5fbc537296dc525867535fb878ba" 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 | -------------------------------------------------------------------------------- /esy.lock/opam/faraday-lwt-unix.0.7.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Spiros Eliopoulos " 3 | authors: [ "Spiros Eliopoulos " ] 4 | license: "BSD-3-clause" 5 | homepage: "https://github.com/inhabitedtype/faraday" 6 | bug-reports: "https://github.com/inhabitedtype/faraday/issues" 7 | dev-repo: "git+https://github.com/inhabitedtype/faraday.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ["dune" "runtest" "-p" name] {with-test} 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.02.0"} 15 | "dune" {>= "1.11"} 16 | "faraday-lwt" 17 | "lwt" {>= "2.7.0"} 18 | "base-unix" 19 | ] 20 | synopsis: "Lwt_unix support for Faraday" 21 | url { 22 | src: "https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz" 23 | checksum: "md5=61bb83e1a4bed100eb0bd1365878e3a1" 24 | } 25 | -------------------------------------------------------------------------------- /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/lwt_ppx.2.0.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | 3 | synopsis: "PPX syntax for Lwt, providing something similar to async/await from JavaScript" 4 | 5 | version: "2.0.1" 6 | license: "MIT" 7 | homepage: "https://github.com/ocsigen/lwt" 8 | doc: "https://ocsigen.org/lwt/dev/api/Ppx_lwt" 9 | bug-reports: "https://github.com/ocsigen/lwt/issues" 10 | 11 | authors: [ 12 | "Gabriel Radanne" 13 | ] 14 | maintainer: [ 15 | "Anton Bachin " 16 | ] 17 | dev-repo: "git+https://github.com/ocsigen/lwt.git" 18 | 19 | depends: [ 20 | "dune" {>= "1.1.0"} 21 | "lwt" 22 | "ocaml" {>= "4.02.0"} 23 | "ocaml-migrate-parsetree" {>= "1.5.0" & < "2.0.0"} 24 | "ppx_tools_versioned" {>= "5.3.0"} 25 | ] 26 | 27 | build: [ 28 | ["dune" "build" "-p" name "-j" jobs] 29 | ] 30 | 31 | url { 32 | src: "https://github.com/ocsigen/lwt/archive/5.2.0.tar.gz" 33 | checksum: "md5=d5783fcff4fbfa7f79c9303776e4d144" 34 | } 35 | -------------------------------------------------------------------------------- /esy.lock/opam/bigarray-compat.1.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Compatibility library to use Stdlib.Bigarray when possible" 3 | maintainer: "Lucas Pluvinage " 4 | authors: "Lucas Pluvinage " 5 | license: "ISC" 6 | homepage: "https://github.com/mirage/bigarray-compat" 7 | bug-reports: "https://github.com/mirage/bigarray-compat/issues" 8 | depends: [ 9 | "ocaml" {>= "4.02.3"} 10 | "dune" {>= "1.0"} 11 | ] 12 | build: [ 13 | ["dune" "subst"] {pinned} 14 | ["dune" "build" "-p" name "-j" jobs] 15 | ] 16 | dev-repo: "git+https://github.com/mirage/bigarray-compat.git" 17 | url { 18 | src: "https://github.com/mirage/bigarray-compat/archive/v1.0.0.tar.gz" 19 | checksum: [ 20 | "md5=1cc7c25382a8900bada34aadfd66632e" 21 | "sha512=c365fee15582aca35d7b05268cde29e54774ad7df7be56762b4aad78ca1409d4326ad3b34af0f1cc2c7b872837290a9cd9ff43b47987c03bba7bba32fe8a030f" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /esy.lock/opam/conf-zlib.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "tim@gfxmonk.net" 3 | homepage: "http://www.zlib.net/" 4 | bug-reports: "https://github.com/ocaml/opam-repository/issues" 5 | authors: ["Jean-loup Gailly" "Mark Adler"] 6 | license: "zlib" 7 | build: ["pkg-config" "zlib"] {os != "macos"} 8 | depends: ["conf-pkg-config" {build}] 9 | depexts: [ 10 | ["zlib-dev"] {os-distribution = "alpine"} 11 | ["zlib1g-dev"] {os-family = "debian"} 12 | ["zlib1g-dev"] {os-family = "ubuntu"} 13 | ["zlib-devel"] {os-distribution = "centos"} 14 | ["zlib-devel"] {os-distribution = "fedora"} 15 | ["zlib-devel"] {os-distribution = "ol"} 16 | ["zlib"] {os-distribution = "nixos"} 17 | ["lzlib"] {os-distribution = "homebrew" & os = "macos"} 18 | ["zlib"] {os-family = "arch"} 19 | ] 20 | synopsis: "Virtual package relying on zlib" 21 | description: 22 | "This package can only install if the zlib library is installed on the system." 23 | flags: conf 24 | -------------------------------------------------------------------------------- /esy.lock/opam/menhir.20201201/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/20201201/archive.tar.gz" 23 | checksum: [ 24 | "md5=ca1047954bfe8c857425dc67eee46272" 25 | "sha512=571e7de852a2ea7d1cbb27fb9fd0b716b6ba1f112d4aedf4548d41f907c9a9b74e1b557a26a7515c2a0e5407de6c2614cea17d51a088d845d4c6ceaec85a0ecb" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /esy.lock/opam/menhirLib.20201201/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/20201201/archive.tar.gz" 24 | checksum: [ 25 | "md5=ca1047954bfe8c857425dc67eee46272" 26 | "sha512=571e7de852a2ea7d1cbb27fb9fd0b716b6ba1f112d4aedf4548d41f907c9a9b74e1b557a26a7515c2a0e5407de6c2614cea17d51a088d845d4c6ceaec85a0ecb" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /esy.lock/opam/menhirSdk.20201201/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/20201201/archive.tar.gz" 24 | checksum: [ 25 | "md5=ca1047954bfe8c857425dc67eee46272" 26 | "sha512=571e7de852a2ea7d1cbb27fb9fd0b716b6ba1f112d4aedf4548d41f907c9a9b74e1b557a26a7515c2a0e5407de6c2614cea17d51a088d845d4c6ceaec85a0ecb" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /esy.lock/opam/ppx_tools_versioned.5.4.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | version: "5.4.0" 3 | maintainer: "frederic.bour@lakaban.net" 4 | authors: [ 5 | "Frédéric Bour " 6 | "Alain Frisch " 7 | ] 8 | license: "MIT" 9 | homepage: "https://github.com/ocaml-ppx/ppx_tools_versioned" 10 | bug-reports: "https://github.com/ocaml-ppx/ppx_tools_versioned/issues" 11 | dev-repo: "git://github.com/ocaml-ppx/ppx_tools_versioned.git" 12 | tags: [ "syntax" ] 13 | build: [ 14 | ["dune" "subst"] {pinned} 15 | ["dune" "build" "-p" name "-j" jobs] 16 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 17 | ] 18 | depends: [ 19 | "ocaml" {>= "4.02.0"} 20 | "dune" {>= "1.0"} 21 | "ocaml-migrate-parsetree" {>= "1.7.0" & < "2.0.0"} 22 | ] 23 | synopsis: "A variant of ppx_tools based on ocaml-migrate-parsetree" 24 | url { 25 | src: "https://github.com/ocaml-ppx/ppx_tools_versioned/archive/5.4.0.tar.gz" 26 | checksum: "md5=3e809a11cae99f57c051d3d0100311f6" 27 | } 28 | -------------------------------------------------------------------------------- /esy.lock/opam/dot-merlin-reader.3.4.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "defree@gmail.com" 3 | authors: "The Merlin team" 4 | synopsis: "Reads config files for merlin" 5 | homepage: "https://github.com/ocaml/merlin" 6 | bug-reports: "https://github.com/ocaml/merlin/issues" 7 | dev-repo: "git+https://github.com/ocaml/merlin.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.02.1" & < "4.12"} 14 | "dune" {>= "1.8.0"} 15 | "yojson" {>= "1.6.0"} 16 | "ocamlfind" {>= "1.6.0"} 17 | "csexp" {>= "1.2.3"} 18 | "result" {>= "1.5"} 19 | ] 20 | x-commit-hash: "c9761a552380838e9f530b5c47c0ea3c47c33565" 21 | url { 22 | src: 23 | "https://github.com/ocaml/merlin/releases/download/v3.4.2/merlin-v3.4.2.tbz" 24 | checksum: [ 25 | "sha256=e1b7b897b11119d92995c558530149fd07bd67a4aaf140f55f3c4ffb5e882a81" 26 | "sha512=7c39c70fc923971c4eca9432061077941498574c0b804efc20af244c1c9ab34c9178d7eb50ab750feaac30696e7ff911a0ccd5fb86341b68485bedae472aa15f" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /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.8.0"} | "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/opam/psq.0.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "David Kaloper Meršinjak " 3 | authors: ["David Kaloper Meršinjak "] 4 | homepage: "https://github.com/pqwy/psq" 5 | doc: "https://pqwy.github.io/psq/doc" 6 | license: "ISC" 7 | dev-repo: "git+https://github.com/pqwy/psq.git" 8 | bug-reports: "https://github.com/pqwy/psq/issues" 9 | synopsis: "Functional Priority Search Queues" 10 | build: [ [ "dune" "subst" ] {pinned} 11 | [ "dune" "build" "-p" name "-j" jobs ] 12 | [ "dune" "runtest" "-p" name ] {with-test & ocaml:version >= "4.07.0"} ] 13 | depends: [ 14 | "ocaml" {>="4.03.0"} 15 | "dune" {>= "1.7"} 16 | "seq" 17 | "qcheck-core" {with-test} 18 | "qcheck-alcotest" {with-test} 19 | "alcotest" {with-test} 20 | ] 21 | description: """ 22 | Typical applications are searches, schedulers and caches. If you ever scratched 23 | your head because that A* didn't look quite right, a PSQ is what you needed. 24 | """ 25 | url { 26 | src: "https://github.com/pqwy/psq/releases/download/v0.2.0/psq-v0.2.0.tbz" 27 | checksum: "md5=b94fb15f8878172bf58446b7d0fb7c1e" 28 | } 29 | -------------------------------------------------------------------------------- /lib/Server.re: -------------------------------------------------------------------------------- 1 | open ReWeb; 2 | 3 | let addIndexToPath = (public, path) => public++ "/"++ path ++ "index.html" 4 | let addPath = (public, path) => public++ "/"++ path 5 | 6 | 7 | let getPage = (public, path, _request) => { 8 | let resp = path |> String.concat("/") |> addIndexToPath(public) |> Response.of_file 9 | resp 10 | } 11 | 12 | let getFile = (public, path, _request) => { 13 | let resp = path |> String.concat("/") |> addPath(public) |> Response.of_file 14 | resp 15 | } 16 | 17 | let server = (public) => { 18 | fun 19 | | (`GET, [...path]) => { 20 | switch (List.find(item => String.contains(item, '.'), path)) { 21 | /* ANY FILE */ 22 | | item => { 23 | let file = getFile(public, [...path]) 24 | file 25 | } 26 | /* Folder, so add index.html */ 27 | | exception Not_found => { 28 | let file = getPage(public, [...path]) 29 | file 30 | } 31 | } 32 | } 33 | | _ => (_ => `Not_found |> Response.of_status |> Lwt.return); 34 | } 35 | 36 | let serveFiles = (path) => { 37 | let fileServer = server(path); 38 | Server.serve(fileServer); 39 | "" 40 | } -------------------------------------------------------------------------------- /esy.lock/opam/hpack.0.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Antonio Nuno Monteiro " 3 | authors: [ "Pieter Goetschalckx <3.14.e.ter@gmail.com>" 4 | "Antonio Nuno Monteiro " ] 5 | license: "BSD-3-Clause" 6 | homepage: "https://github.com/anmonteiro/ocaml-h2" 7 | bug-reports: "https://github.com/anmonteiro/ocaml-h2/issues" 8 | dev-repo: "git+https://github.com/anmonteiro/ocaml-h2.git" 9 | doc: "https://anmonteiro.github.io/ocaml-h2/" 10 | depends: [ 11 | "ocaml" {>= "4.04"} 12 | "dune" 13 | "yojson" {with-test} 14 | "hex" {with-test} 15 | "angstrom" 16 | "faraday" 17 | ] 18 | build: [ 19 | ["dune" "build" "-p" name "-j" jobs] 20 | ] 21 | synopsis: 22 | "An HPACK (Header Compression for HTTP/2) implementation in OCaml" 23 | description: """ 24 | hpack is an implementation of the HPACK: Header Compression for HTTP/2 25 | specification (RFC7541) written in OCaml. It uses Angstrom and Faraday for 26 | parsing and serialization, respectively. 27 | """ 28 | url { 29 | src: 30 | "https://github.com/anmonteiro/ocaml-h2/releases/download/0.2.0/h2-0.2.0.tbz" 31 | checksum: "md5=c883927ce8a9f3f7159ef7b20988f051" 32 | } 33 | -------------------------------------------------------------------------------- /esy.lock/opam/stringext.1.6.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "rudi.grinberg@gmail.com" 3 | authors: "Rudi Grinberg" 4 | license: "MIT" 5 | homepage: "https://github.com/rgrinberg/stringext" 6 | bug-reports: "https://github.com/rgrinberg/stringext/issues" 7 | depends: [ 8 | "ocaml" {>= "4.02.3"} 9 | "dune" {>= "1.0"} 10 | "ounit" {with-test} 11 | "qtest" {with-test & >= "2.2"} 12 | "base-bytes" 13 | ] 14 | build: [ 15 | ["dune" "subst"] {pinned} 16 | ["dune" "build" "-p" name "-j" jobs] 17 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 18 | ] 19 | dev-repo: "git+https://github.com/rgrinberg/stringext.git" 20 | synopsis: "Extra string functions for OCaml" 21 | description: """ 22 | Extra string functions for OCaml. Mainly splitting. All functions are in the 23 | Stringext module. 24 | """ 25 | url { 26 | src: 27 | "https://github.com/rgrinberg/stringext/releases/download/1.6.0/stringext-1.6.0.tbz" 28 | checksum: [ 29 | "sha256=db41f5d52e9eab17615f110b899dfeb27dd7e7f89cd35ae43827c5119db206ea" 30 | "sha512=d8ebe40f42b598a9bd99f1ef4b00ba93458385a4accd121af66a0bf3b3f8d7135f576740adf1a43081dd409977c2219fd4bdbb5b3d1308890d301d553ed49900" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /esy.lock/opam/conf-autoconf.0.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "unixjunkie@sdf.org" 3 | homepage: "http://www.gnu.org/software/autoconf" 4 | authors: "https://www.gnu.org/software/autoconf/autoconf.html#maintainer" 5 | bug-reports: "https://github.com/ocaml/opam-repository/issues" 6 | license: "GPL-3.0" 7 | build: [ 8 | ["which" "autoconf"] 9 | ] 10 | depends: ["conf-which" {build}] 11 | depexts: [ 12 | ["autoconf"] {os-family = "debian"} 13 | ["autoconf"] {os-distribution = "centos"} 14 | ["autoconf"] {os-distribution = "fedora"} 15 | ["autoconf"] {os-distribution = "arch"} 16 | ["sys-devel/autoconf"] {os-distribution = "gentoo"} 17 | ["autoconf"] {os-distribution = "nixos"} 18 | ["autoconf"] {os = "macos" & os-distribution = "homebrew"} 19 | ["devel/autoconf"] {os = "openbsd"} 20 | ["autoconf"] {os = "freebsd"} 21 | ["autoconf"] {os = "netbsd"} 22 | ["autoconf"] {os-distribution = "alpine"} 23 | ["autoconf"] {os-distribution = "ol"} 24 | ["autoconf"] {os-distribution = "rhel"} 25 | ] 26 | synopsis: "Virtual package relying on autoconf installation" 27 | description: """ 28 | This package can only install if the autoconf command 29 | is available on the system.""" 30 | flags: conf 31 | -------------------------------------------------------------------------------- /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/junit.2.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Louis Roché " 3 | authors: "Louis Roché " 4 | homepage: "https://github.com/Khady/ocaml-junit" 5 | bug-reports: "https://github.com/Khady/ocaml-junit/issues" 6 | license: "LGPLv3+ with OCaml linking exception" 7 | dev-repo: "git+https://github.com/Khady/ocaml-junit.git" 8 | doc: "https://khady.github.io/ocaml-junit/" 9 | tags: ["junit" "jenkins"] 10 | depends: [ 11 | "dune" {>= "1.0"} 12 | "ptime" 13 | "tyxml" {>= "4.0.0"} 14 | "odoc" {with-doc & >= "1.1.1"} 15 | ] 16 | build: [ 17 | ["dune" "subst"] {pinned} 18 | ["dune" "build" "-p" name "-j" jobs] 19 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 20 | ["dune" "build" "-p" name "-j" jobs] {with-doc} 21 | ] 22 | name: "junit" 23 | synopsis: "JUnit XML reports generation library" 24 | description: "JUnit XML reports generation library" 25 | url { 26 | src: 27 | "https://github.com/Khady/ocaml-junit/releases/download/2.0.2/junit-2.0.2.tbz" 28 | checksum: [ 29 | "sha256=fda941b653613a4a5731f9b3557364b12baa341daa13c01676c9eb8d64e96b01" 30 | "sha512=5a9fa803c4861748bb8482fc51197420bf3cc3b9540989a489c4ffb65fdd02386aaa60437eae29182209dae0903b0e537c095249e19d395a451b8e8214f15f03" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /esy.lock/opam/multipart-form-data.0.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: ["Cryptosense "] 3 | authors: ["Cryptosense "] 4 | homepage: "https://github.com/cryptosense/multipart-form-data" 5 | bug-reports: "https://github.com/cryptosense/multipart-form-data/issues" 6 | license: "BSD-2" 7 | dev-repo: "git+https://github.com/cryptosense/multipart-form-data.git" 8 | doc: "https://cryptosense.github.io/multipart-form-data/doc" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | run-test: [ 13 | ["dune" "runtest" "-p" name "-j" jobs] 14 | ] 15 | depends: [ 16 | "alcotest" {with-test} 17 | "dune" 18 | "lwt" 19 | "lwt_ppx" 20 | "stringext" 21 | ] 22 | synopsis: "Parser for multipart/form-data (RFC2388)" 23 | description: """ 24 | This is a parser for structured form data based on `Lwt_stream` in order to use 25 | it with cohttp. You can use it to send POST parameters. 26 | """ 27 | url { 28 | src: 29 | "https://github.com/cryptosense/multipart-form-data/archive/0.3.0.tar.gz" 30 | checksum: [ 31 | "md5=9f7088e64d2889191f9269b03ea2c5f6" 32 | "sha512=fa1a8cb8adda2fa5fff1dbeda76ba294aeb254118db5019d0249b4afecc9fb012ae3566074bbc29d38b53d2196fc5395034db64e4b8d5406ebda56b58707bf75" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /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/merlin-extend.0.6/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Frederic Bour " 3 | authors: "Frederic Bour " 4 | homepage: "https://github.com/let-def/merlin-extend" 5 | bug-reports: "https://github.com/let-def/merlin-extend" 6 | license: "MIT" 7 | dev-repo: "git+https://github.com/let-def/merlin-extend.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "dune" {>= "1.0"} 14 | "cppo" {build} 15 | "ocaml" {>= "4.02.3"} 16 | ] 17 | synopsis: "A protocol to provide custom frontend to Merlin" 18 | description: """ 19 | This protocol allows to replace the OCaml frontend of Merlin. 20 | It extends what used to be done with the `-pp' flag to handle a few more cases.""" 21 | doc: "https://let-def.github.io/merlin-extend" 22 | x-commit-hash: "640620568a5f5c7798239ecf7c707c813e3df3cf" 23 | url { 24 | src: 25 | "https://github.com/let-def/merlin-extend/releases/download/v0.6/merlin-extend-v0.6.tbz" 26 | checksum: [ 27 | "sha256=c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43" 28 | "sha512=4c64a490e2ece04fc89aef679c1d9202175df4fe045b5fdc7a37cd7cebe861226fddd9648c1bf4f06175ecfcd2ed7686c96bd6a8cae003a5096f6134c240f857" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /azure-pipelines.yml: -------------------------------------------------------------------------------- 1 | name: Build npm release 2 | 3 | variables: 4 | esy__ci_cache_version: v1 # this is available to all jobs in env as $ESY__CI_CACHE_VERSION or in azure config as $(esy__ci_cache_version) 5 | 6 | trigger: 7 | - master 8 | - global 9 | - release-* 10 | - releases-* 11 | - feature-* 12 | 13 | jobs: 14 | - template: .ci/build-platform.yml 15 | parameters: 16 | platform: Linux 17 | vmImage: ubuntu-16.04 18 | 19 | - template: .ci/build-platform.yml 20 | parameters: 21 | platform: macOS 22 | vmImage: macOS-10.14 23 | 24 | # Need windows-2019 to do esy import/export-dependencies 25 | # which assumes you have bsdtar (tar.exe) in your system 26 | # otherwise it will end up using the esy-bash tar which doesn't 27 | # understand drives like D:/ (thinks it's an scp path). 28 | - template: .ci/build-platform.yml 29 | parameters: 30 | platform: Windows 31 | vmImage: windows-2019 32 | 33 | # This job is kept here as we want to have the platform names in the same file 34 | - job: Release 35 | displayName: Release 36 | dependsOn: 37 | - Linux 38 | - macOS 39 | - Windows 40 | pool: 41 | vmImage: macOS-10.14 42 | demands: node.js 43 | steps: 44 | - template: .ci/cross-release.yml 45 | -------------------------------------------------------------------------------- /esy.lock/opam/ocaml-syntax-shims.1.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Backport new syntax to older OCaml versions" 3 | description: """ 4 | This packages backports new features of the language to older 5 | compilers, such as let+. 6 | """ 7 | maintainer: ["jeremie@dimino.org"] 8 | authors: ["Jérémie Dimino "] 9 | license: "MIT" 10 | homepage: "https://github.com/ocaml-ppx/ocaml-syntax-shims" 11 | doc: "https://ocaml-ppx.github.io/ocaml-syntax-shims/" 12 | bug-reports: "https://github.com/ocaml-ppx/ocaml-syntax-shims/issues" 13 | depends: [ 14 | "dune" {>= "2.0"} 15 | "ocaml" {>= "4.02.3"} 16 | ] 17 | build: [ 18 | ["dune" "subst"] {pinned} 19 | [ 20 | "dune" 21 | "build" 22 | "-p" 23 | name 24 | "-j" 25 | jobs 26 | "@install" 27 | "@runtest" {with-test} 28 | "@doc" {with-doc} 29 | ] 30 | ] 31 | dev-repo: "git+https://github.com/ocaml-ppx/ocaml-syntax-shims.git" 32 | url { 33 | src: 34 | "https://github.com/ocaml-ppx/ocaml-syntax-shims/releases/download/1.0.0/ocaml-syntax-shims-1.0.0.tbz" 35 | checksum: [ 36 | "sha256=89b2e193e90a0c168b6ec5ddf6fef09033681bdcb64e11913c97440a2722e8c8" 37 | "sha512=75c4c6b0bfa1267a8a49a82ba494d08cf0823fc8350863d6d3d4971528cb09e5a2a29e2981d04c75e76ad0f49360b05a432c9efeff9a4fbc1ec6b28960399852" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /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/rresult.0.6.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/rresult" 5 | doc: "http://erratique.ch/software/rresult" 6 | dev-repo: "git+http://erratique.ch/repos/rresult.git" 7 | bug-reports: "https://github.com/dbuenzli/rresult/issues" 8 | tags: [ "result" "error" "declarative" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "result" 16 | ] 17 | build:[[ 18 | "ocaml" "pkg/pkg.ml" "build" 19 | "--pinned" "%{pinned}%" ]] 20 | 21 | synopsis: """Result value combinators for OCaml""" 22 | description: """\ 23 | 24 | Rresult is an OCaml module for handling computation results and errors 25 | in an explicit and declarative manner, without resorting to 26 | exceptions. It defines combinators to operate on the `result` type 27 | available from OCaml 4.03 in the standard library. 28 | 29 | Rresult depends on the compatibility `result` package and is 30 | distributed under the ISC license. 31 | """ 32 | url { 33 | archive: "http://erratique.ch/software/rresult/releases/rresult-0.6.0.tbz" 34 | checksum: "aba88cffa29081714468c2c7bcdf7fb1" 35 | } 36 | -------------------------------------------------------------------------------- /esy.lock/opam/faraday.0.7.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Spiros Eliopoulos " 3 | authors: [ "Spiros Eliopoulos " ] 4 | license: "BSD-3-clause" 5 | homepage: "https://github.com/inhabitedtype/faraday" 6 | bug-reports: "https://github.com/inhabitedtype/faraday/issues" 7 | dev-repo: "git+https://github.com/inhabitedtype/faraday.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ["dune" "runtest" "-p" name] {with-test} 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.02.0"} 15 | "dune" {>= "1.11"} 16 | "alcotest" {with-test & >= "0.4.1"} 17 | "bigstringaf" 18 | ] 19 | synopsis: "A library for writing fast and memory-efficient serializers." 20 | description: """ 21 | Faraday is a library for writing fast and memory-efficient serializers. Its 22 | core type and related operation gives the user fine-grained control over 23 | copying and allocation behavior while serializing user-defined types, and 24 | presents the output in a form that makes it possible to use vectorized write 25 | operations, such as the writev system call, or any other platform or 26 | application-specific output APIs.""" 27 | url { 28 | src: "https://github.com/inhabitedtype/faraday/archive/0.7.2.tar.gz" 29 | checksum: "md5=61bb83e1a4bed100eb0bd1365878e3a1" 30 | } 31 | -------------------------------------------------------------------------------- /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/uri.3.1.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "anil@recoil.org" 3 | authors: ["Anil Madhavapeddy" "David Sheets" "Rudi Grinberg"] 4 | license: "ISC" 5 | tags: ["url" "uri" "org:mirage" "org:xapi-project"] 6 | homepage: "https://github.com/mirage/ocaml-uri" 7 | bug-reports: "https://github.com/mirage/ocaml-uri/issues" 8 | dev-repo: "git+https://github.com/mirage/ocaml-uri.git" 9 | doc: "https://mirage.github.io/ocaml-uri/" 10 | synopsis: "An RFC3986 URI/URL parsing library" 11 | description: """ 12 | This is an OCaml implementation of the [RFC3986](http://tools.ietf.org/html/rfc3986) specification 13 | for parsing URI or URLs. 14 | """ 15 | depends: [ 16 | "ocaml" {>= "4.04.0"} 17 | "dune" {>= "1.2.0"} 18 | "ounit" {with-test & >= "1.0.2"} 19 | "ppx_sexp_conv" {with-test & >= "v0.9.0" & < "v0.15"} 20 | "re" {>= "1.9.0"} 21 | "stringext" {>= "1.4.0"} 22 | ] 23 | build: [ 24 | ["dune" "subst"] {pinned} 25 | ["dune" "build" "-p" name "-j" jobs] 26 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 27 | ] 28 | url { 29 | src: 30 | "https://github.com/mirage/ocaml-uri/releases/download/v3.1.0/uri-v3.1.0.tbz" 31 | checksum: [ 32 | "sha256=c452823fd870cf7cffe51aef3e9ca646a382dc6f87282f2b16bfe30a7515ac43" 33 | "sha512=c015576bb077fd243022bcd8804e628d23a253dcd8bbdda8dc2a57e86cfeb9fd629087ec7d7e23dc71dd7cd137450ca2c5ecf8fb7d184ec9d1d4e41f6f83ee38" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /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/eqaf.0.7/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | name: "eqaf" 3 | maintainer: [ "Romain Calascibetta " ] 4 | authors: [ "Romain Calascibetta " ] 5 | homepage: "https://github.com/mirage/eqaf" 6 | bug-reports: "https://github.com/mirage/eqaf/issues" 7 | dev-repo: "git+https://github.com/mirage/eqaf.git" 8 | doc: "https://mirage.github.io/eqaf/" 9 | license: "MIT" 10 | synopsis: "Constant-time equal function on string" 11 | description: """ 12 | This package provides an equal function on string in constant-time to avoid timing-attack with crypto stuff. 13 | """ 14 | 15 | build: [ 16 | [ "dune" "subst" ] {pinned} 17 | [ "dune" "build" "-p" name "-j" jobs ] 18 | ] 19 | 20 | depends: [ 21 | "ocaml" {>= "4.03.0"} 22 | "dune" 23 | "base64" {with-test} 24 | "alcotest" {with-test} 25 | "crowbar" {with-test} 26 | ] 27 | 28 | depopts: [ 29 | "cstruct" 30 | "bigarray-compat" 31 | ] 32 | 33 | conflicts: [ 34 | "cstruct" {< "4.0.0"} 35 | ] 36 | url { 37 | src: "https://github.com/mirage/eqaf/releases/download/v0.7/eqaf-v0.7.tbz" 38 | checksum: [ 39 | "sha256=10e666aea9a413e63c5e9dd1c0566aed78a2bf0f4e09caa2bb3b88a021bf09e0" 40 | "sha512=38a2687bafb5cd1d1deb51ceceba94fcff9ce88515fd2c61ec1182808c50c0e3373a4d71fe51a17a23c74616c5ab350a4cf7914de656886981538abf2b57ff61" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /esy.lock/opam/base64.3.4.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "mirageos-devel@lists.xenproject.org" 3 | authors: [ "Thomas Gazagnaire" 4 | "Anil Madhavapeddy" "Calascibetta Romain" 5 | "Peter Zotov" ] 6 | license: "ISC" 7 | homepage: "https://github.com/mirage/ocaml-base64" 8 | doc: "http://mirage.github.io/ocaml-base64/" 9 | bug-reports: "https://github.com/mirage/ocaml-base64/issues" 10 | dev-repo: "git+https://github.com/mirage/ocaml-base64.git" 11 | synopsis: "Base64 encoding for OCaml" 12 | description: """ 13 | Base64 is a group of similar binary-to-text encoding schemes that represent 14 | binary data in an ASCII string format by translating it into a radix-64 15 | representation. It is specified in RFC 4648. 16 | """ 17 | depends: [ 18 | "ocaml" {>="4.03.0"} 19 | "base-bytes" 20 | "dune-configurator" 21 | "dune" {>= "2.0"} 22 | "bos" {with-test} 23 | "rresult" {with-test} 24 | "alcotest" {with-test} 25 | ] 26 | build: [ 27 | ["dune" "subst"] 28 | ["dune" "build" "-p" name "-j" jobs] 29 | ["dune" "runtest" "-p" name] {with-test} 30 | ] 31 | url { 32 | src: 33 | "https://github.com/mirage/ocaml-base64/releases/download/v3.4.0/base64-v3.4.0.tbz" 34 | checksum: [ 35 | "sha256=1c9cf655bdd771a4d20014f7f29aadfde7e3821b01772b49f8ba4d4bda2b1634" 36 | "sha512=e66a67302a9eb136044bebf66a89a1d6e38a96c70622bb6cd27916fec36dcaf4b5b7e7d00c25608f0a2363f2ca4264a5fe765fe7747590958325dbce06311db9" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /esy.lock/opam/angstrom.0.15.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Spiros Eliopoulos " 3 | authors: [ "Spiros Eliopoulos " ] 4 | license: "BSD-3-clause" 5 | homepage: "https://github.com/inhabitedtype/angstrom" 6 | bug-reports: "https://github.com/inhabitedtype/angstrom/issues" 7 | dev-repo: "git+https://github.com/inhabitedtype/angstrom.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.04.0"} 15 | "dune" {>= "1.8"} 16 | "alcotest" {with-test & >= "0.8.1"} 17 | "bigstringaf" 18 | "result" 19 | "ppx_let" {with-test & >= "0.14.0"} 20 | "ocaml-syntax-shims" {build} 21 | ] 22 | synopsis: "Parser combinators built for speed and memory-efficiency" 23 | description: """ 24 | Angstrom is a parser-combinator library that makes it easy to write efficient, 25 | expressive, and reusable parsers suitable for high-performance applications. It 26 | exposes monadic and applicative interfaces for composition, and supports 27 | incremental input through buffered and unbuffered interfaces. Both interfaces 28 | give the user total control over the blocking behavior of their application, 29 | with the unbuffered interface enabling zero-copy IO. Parsers are backtracking by 30 | default and support unbounded lookahead.""" 31 | url { 32 | src: "https://github.com/inhabitedtype/angstrom/archive/0.15.0.tar.gz" 33 | checksum: "md5=5104768c404ea92fd0a53a5b0f75cd50" 34 | } 35 | -------------------------------------------------------------------------------- /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/ocaml-migrate-parsetree.1.8.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "frederic.bour@lakaban.net" 3 | authors: [ 4 | "Frédéric Bour " 5 | "Jérémie Dimino " 6 | ] 7 | license: "LGPL-2.1 with OCaml linking exception" 8 | homepage: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree" 9 | bug-reports: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/issues" 10 | dev-repo: "git+https://github.com/ocaml-ppx/ocaml-migrate-parsetree.git" 11 | doc: "https://ocaml-ppx.github.io/ocaml-migrate-parsetree/" 12 | tags: [ "syntax" "org:ocamllabs" ] 13 | build: [ 14 | ["dune" "build" "-p" name "-j" jobs] 15 | ] 16 | depends: [ 17 | "result" 18 | "ppx_derivers" 19 | "dune" {>= "1.9.0"} 20 | "ocaml" {>= "4.02.3"} 21 | ] 22 | synopsis: "Convert OCaml parsetrees between different versions" 23 | description: """ 24 | Convert OCaml parsetrees between different versions 25 | 26 | This library converts parsetrees, outcometree and ast mappers between 27 | different OCaml versions. High-level functions help making PPX 28 | rewriters independent of a compiler version. 29 | """ 30 | x-commit-hash: "1d72648812bb235d1576f483cacdf546e25c03d8" 31 | url { 32 | src: 33 | "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.8.0/ocaml-migrate-parsetree-v1.8.0.tbz" 34 | checksum: [ 35 | "sha256=b1c2d176ff1444041f2775786ba605be796e46dfd2acb06c96f35d2bb88b8fb5" 36 | "sha512=c14ffacbba9fda34243b3e8310ce49414415b530bbd982eaa6c1891517c5a9a6a35887afa7d6f15f7f94e225a7f15cc25417fd3337e685d4a7d6ee160e50e66e" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /esy.lock/opam/bigstringaf.0.7.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Spiros Eliopoulos " 3 | authors: [ "Spiros Eliopoulos " ] 4 | license: "BSD-3-clause" 5 | homepage: "https://github.com/inhabitedtype/bigstringaf" 6 | bug-reports: "https://github.com/inhabitedtype/bigstringaf/issues" 7 | dev-repo: "git+https://github.com/inhabitedtype/bigstringaf.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ["dune" "runtest" "-p" name] {with-test} 12 | ] 13 | depends: [ 14 | "dune" {>= "2.6.0"} 15 | "alcotest" {with-test} 16 | "bigarray-compat" 17 | "ocaml" {>= "4.03.0"} 18 | "conf-pkg-config" {build} 19 | ] 20 | depopts: [ 21 | "ocaml-freestanding" 22 | ] 23 | conflicts: [ 24 | "mirage-xen" {< "6.0.0"} 25 | "ocaml-freestanding" {< "0.4.1"} 26 | "js_of_ocaml" {< "3.5.0"} 27 | ] 28 | synopsis: "Bigstring intrinsics and fast blits based on memcpy/memmove" 29 | description: """ 30 | Bigstring intrinsics and fast blits based on memcpy/memmove 31 | 32 | The OCaml compiler has a bunch of intrinsics for Bigstrings, but they're not 33 | widely-known, sometimes misused, and so programs that use Bigstrings are slower 34 | than they have to be. And even if a library got that part right and exposed the 35 | intrinsics properly, the compiler doesn't have any fast blits between 36 | Bigstrings and other string-like types. 37 | 38 | So here they are. Go crazy. 39 | """ 40 | url { 41 | src: "https://github.com/inhabitedtype/bigstringaf/archive/0.7.0.tar.gz" 42 | checksum: "md5=3e47593200b77fa6dd2754d37e9cbe19" 43 | } 44 | -------------------------------------------------------------------------------- /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/odoc.1.5.2/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: "Anton Bachin " 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"} 31 | "result" 32 | "tyxml" {>= "4.3.0"} 33 | 34 | "alcotest" {dev & >= "0.8.3"} 35 | "markup" {dev & >= "1.0.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 | x-commit-hash: "c0df8ce2171fa9645a41f371429aa3ddc16de5c1" 47 | url { 48 | src: "https://github.com/ocaml/odoc/releases/download/1.5.2/odoc-1.5.2.tbz" 49 | checksum: [ 50 | "sha256=d24463f2660bc28c72cda001478360158e953721c9e23fb361ec4783113c4871" 51 | "sha512=e6c83630325de422f31cda8f88c038d213969f8b98e989593c057658f3956c0855860c9bc38f61b6479929516ca95aee689ddfba3ad8c47d821c4fdf54524cf9" 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /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.3/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.3.tbz" 35 | checksum: "3674ad01d4445424105d33818c78fba8" 36 | } 37 | -------------------------------------------------------------------------------- /esy.lock/opam/magic-mime.1.1.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | name: "magic-mime" 3 | synopsis: "Map filenames to common MIME types" 4 | description: """ 5 | This library contains a database of MIME types that maps filename extensions 6 | into MIME types suitable for use in many Internet protocols such as HTTP or 7 | e-mail. It is generated from the `mime.types` file found in Unix systems, but 8 | has no dependency on a filesystem since it includes the contents of the 9 | database as an ML datastructure. 10 | 11 | For example, here's how to lookup MIME types in the [utop] REPL: 12 | 13 | #require "magic-mime";; 14 | Magic_mime.lookup "/foo/bar.txt";; 15 | - : bytes = "text/plain" 16 | Magic_mime.lookup "bar.css";; 17 | - : bytes = "text/css" 18 | """ 19 | maintainer: "Anil Madhavapeddy " 20 | authors: ["Anil Madhavapeddy" "Maxence Guesdon"] 21 | license: "ISC" 22 | homepage: "https://github.com/mirage/ocaml-magic-mime" 23 | doc: "https://mirage.github.io/ocaml-magic-mime/" 24 | bug-reports: "https://github.com/mirage/ocaml-magic-mime/issues" 25 | dev-repo: "git+https://github.com/mirage/ocaml-magic-mime.git" 26 | depends: [ 27 | "ocaml" {>= "4.03.0"} 28 | "dune" 29 | ] 30 | build: [ 31 | ["dune" "subst"] {pinned} 32 | ["dune" "build" "-p" name "-j" jobs] 33 | ] 34 | url { 35 | src: 36 | "https://github.com/mirage/ocaml-magic-mime/releases/download/v1.1.2/magic-mime-v1.1.2.tbz" 37 | checksum: [ 38 | "sha256=0c590bbc747531b56d392ee8f063d879df1e2026ba2dfa2d1bc98c9a9acb04eb" 39 | "sha512=8264db78adc2c75b8adabc23c26ad34eab98383bd3a8f2068f2236ff3425d653c0238fbd7361e55a3d70d843413ef8671b6e97293074b4d3a1e300628d5292ab" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "agave-generator", 3 | "version": "0.1.25", 4 | "description": "Simple static site generator", 5 | "license": "The Hippocratic License 2.1", 6 | "esy": { 7 | "build": "dune build -p #{self.name}", 8 | "buildDev": "refmterr dune build --promote-install-files --root . --only-package #{self.name}", 9 | "NOTE": "Optional release Section. Customizes result of `esy release`", 10 | "release": { 11 | "bin": [ 12 | "Agave" 13 | ] 14 | }, 15 | "e": { 16 | "rewritePrefix": true, 17 | "bin": [ 18 | "Agave" 19 | ] 20 | }, 21 | "buildEnv": { 22 | "ODOC_SYNTAX": "re" 23 | } 24 | }, 25 | "scripts": { 26 | "test": "esy x Agave", 27 | "format": "esy dune build @fmt --auto-promote", 28 | "doc": "esy dune build @doc", 29 | "release": "npm version patch && esy release && pushd _release && npm publish" 30 | }, 31 | "dependencies": { 32 | "@esy-ocaml/reason": ">= 3.6.0 < 4.0.0", 33 | "@opam/bos": "0.2.0", 34 | "@opam/cmdliner": "1.0.3", 35 | "@opam/dune": ">=2.6", 36 | "@opam/omd": "*", 37 | "@reason-native/console": "*", 38 | "@reason-native/pastel": "*", 39 | "@reason-native/rely": "^3.2.1", 40 | "@yawaramin/re-web": ">= 0.7.0 < 1.0.0", 41 | "ocaml": "~4.10.0", 42 | "@opam/lwt": "5.3.0", 43 | "@opam/lwt_ppx": "2.0.1" 44 | }, 45 | "resolutions": { 46 | "@opam/omd": "ocaml/omd:omd.opam#fd7fa4e", 47 | "@reason-native-web/esy-openssl": "1.1.1006", 48 | "@reason-native-web/piaf": "1.3.0" 49 | }, 50 | "devDependencies": { 51 | "@opam/merlin": "*", 52 | "@reason-native/rely": "*", 53 | "refmterr": "*", 54 | "@opam/odoc": "*" 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /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/ocplib-endian.1.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: 3 | "Optimised functions to read and write int16/32/64 from strings and bigarrays" 4 | description: """ 5 | The library implements three modules: 6 | * [EndianString](https://github.com/OCamlPro/ocplib-endian/blob/master/src/endianString.mli) works directly on strings, and provides submodules BigEndian and LittleEndian, with their unsafe counter-parts; 7 | * [EndianBytes](https://github.com/OCamlPro/ocplib-endian/blob/master/src/endianBytes.mli) works directly on bytes, and provides submodules BigEndian and LittleEndian, with their unsafe counter-parts; 8 | * [EndianBigstring](https://github.com/OCamlPro/ocplib-endian/blob/master/src/endianBigstring.mli) works on bigstrings (Bigarrays of chars), and provides submodules BigEndian and LittleEndian, with their unsafe counter-parts.""" 9 | maintainer: "pierre.chambart@ocamlpro.com" 10 | authors: "Pierre Chambart" 11 | homepage: "https://github.com/OCamlPro/ocplib-endian" 12 | doc: "https://ocamlpro.github.io/ocplib-endian/ocplib-endian/" 13 | bug-reports: "https://github.com/OCamlPro/ocplib-endian/issues" 14 | depends: [ 15 | "base-bytes" 16 | "ocaml" {>= "4.02.3"} 17 | "cppo" {>= "1.1.0" & build} 18 | "dune" {>= "1.0"} 19 | ] 20 | build: [ 21 | "dune" 22 | "build" 23 | "-p" 24 | name 25 | "-j" 26 | jobs 27 | "@install" 28 | "@runtest" {with-test} 29 | "@doc" {with-doc} 30 | ] 31 | dev-repo: "git+https://github.com/OCamlPro/ocplib-endian.git" 32 | url { 33 | src: "https://github.com/OCamlPro/ocplib-endian/archive/1.1.tar.gz" 34 | checksum: [ 35 | "md5=dedf4d69c1b87b3c6c7234f632399285" 36 | "sha512=39351c666d1394770696fa89ac62f7c137ad1697d99888bfba2cc8de2c61df05dd8b3aa327c117bf38f3e29e081026d2c575c5ad0022bde92b3d43aba577d3f9" 37 | ] 38 | } -------------------------------------------------------------------------------- /esy.lock/opam/atdgen-runtime.2.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Runtime library for code generated by atdgen" 3 | description: """ 4 | This package should be used only in conjunction with the stdgen code 5 | generator""" 6 | maintainer: ["Rudi Grinberg "] 7 | authors: [ 8 | "Martin Jambon " 9 | "David Sheets " 10 | "Rudi Grinberg " 11 | "Ivan Jager " 12 | "Jeff Meister " 13 | "Carmelo Piccione " 14 | "Raman Varabets " 15 | "Mathieu Baudet " 16 | "Rauan Mayemir " 17 | "Louis Roché " 18 | "Brendan Long " 19 | "Christophe Troestler " 20 | "Vincent Bernardoff " 21 | "haoyang " 22 | ] 23 | license: "MIT" 24 | homepage: "https://github.com/ahrefs/atd" 25 | bug-reports: "https://github.com/ahrefs/atd/issues" 26 | depends: [ 27 | "ocaml" {>= "4.02"} 28 | "dune" {>= "2.0"} 29 | "yojson" {>= "1.7.0"} 30 | "biniou" {>= "1.0.6"} 31 | "re" 32 | ] 33 | dev-repo: "git+https://github.com/ahrefs/atd.git" 34 | build: [ 35 | ["dune" "subst"] {pinned} 36 | [ 37 | "dune" 38 | "build" 39 | "-p" 40 | name 41 | "-j" 42 | jobs 43 | "@install" 44 | "@doc" {with-doc} 45 | ] 46 | ] 47 | url { 48 | src: "https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz" 49 | checksum: [ 50 | "sha256=db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 51 | "sha512=0c7f1985cc4d87ddd541bb2f7085b72f81aaef69468653319a4a52e6cd6c9318511229784a12cdb413ae500e7a5b8195759e0d8d49946a9b00f62e8dda07e8a2" 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /esy.lock/opam/bos.0.2.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/bos" 5 | doc: "http://erratique.ch/software/bos/doc" 6 | dev-repo: "git+http://erratique.ch/repos/bos.git" 7 | bug-reports: "https://github.com/dbuenzli/bos/issues" 8 | tags: [ "os" "system" "cli" "command" "file" "path" "log" "unix" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build & >= "0.9.0"} 15 | "base-unix" 16 | "rresult" {>= "0.4.0"} 17 | "astring" 18 | "fpath" 19 | "fmt" {>= "0.8.0"} 20 | "logs" 21 | "mtime" {with-test} 22 | ] 23 | build: [[ 24 | "ocaml" "pkg/pkg.ml" "build" 25 | "--dev-pkg" "%{pinned}%" ]] 26 | synopsis: "Basic OS interaction for OCaml" 27 | description: """ 28 | Bos provides support for basic and robust interaction with the 29 | operating system in OCaml. It has functions to access the process 30 | environment, parse command line arguments, interact with the file 31 | system and run command line programs. 32 | 33 | Bos works equally well on POSIX and Windows operating systems. 34 | 35 | Bos depends on [Rresult][rresult], [Astring][astring], [Fmt][fmt], 36 | [Fpath][fpath] and [Logs][logs] and the OCaml Unix library. It is 37 | distributed under the ISC license. 38 | 39 | [rresult]: http://erratique.ch/software/rresult 40 | [astring]: http://erratique.ch/software/astring 41 | [fmt]: http://erratique.ch/software/fmt 42 | [fpath]: http://erratique.ch/software/fpath 43 | [logs]: http://erratique.ch/software/logs""" 44 | url { 45 | src: "http://erratique.ch/software/bos/releases/bos-0.2.0.tbz" 46 | checksum: "md5=aeae7447567db459c856ee41b5a66fd2" 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/ptime.0.8.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["The ptime programmers"] 4 | homepage: "https://erratique.ch/software/ptime" 5 | doc: "https://erratique.ch/software/ptime/doc" 6 | dev-repo: "git+http://erratique.ch/repos/ptime.git" 7 | bug-reports: "https://github.com/dbuenzli/ptime/issues" 8 | tags: [ "time" "posix" "system" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "result" 16 | ] 17 | depopts: [ "js_of_ocaml" ] 18 | conflicts: [ "js_of_ocaml" { < "3.3.0" } ] 19 | build:[[ 20 | "ocaml" "pkg/pkg.ml" "build" 21 | "--pinned" "%{pinned}%" 22 | "--with-js_of_ocaml" "%{js_of_ocaml:installed}%" ]] 23 | 24 | synopsis: """POSIX time for OCaml""" 25 | description: """\ 26 | 27 | Ptime has platform independent POSIX time support in pure OCaml. It 28 | provides a type to represent a well-defined range of POSIX timestamps 29 | with picosecond precision, conversion with date-time values, 30 | conversion with [RFC 3339 timestamps][rfc3339] and pretty printing to a 31 | human-readable, locale-independent representation. 32 | 33 | The additional Ptime_clock library provides access to a system POSIX 34 | clock and to the system's current time zone offset. 35 | 36 | Ptime is not a calendar library. 37 | 38 | Ptime depends on the `result` compatibility package. Ptime_clock 39 | depends on your system library. Ptime_clock's optional JavaScript 40 | support depends on [js_of_ocaml][jsoo]. Ptime and its libraries are 41 | distributed under the ISC license. 42 | 43 | [rfc3339]: http://tools.ietf.org/html/rfc3339 44 | [jsoo]: http://ocsigen.org/js_of_ocaml/ 45 | """ 46 | url { 47 | archive: "https://erratique.ch/software/ptime/releases/ptime-0.8.5.tbz" 48 | checksum: "4d48055d623ecf2db792439b3e96a520" 49 | } 50 | -------------------------------------------------------------------------------- /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/atd.2.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Parser for the ATD data format description language" 3 | description: """ 4 | ATD is the OCaml library providing a parser for the ATD language and various 5 | utilities. ATD stands for Adjustable Type Definitions in reference to its main 6 | property of supporting annotations that allow a good fit with a variety of data 7 | formats. """ 8 | maintainer: ["Rudi Grinberg "] 9 | authors: [ 10 | "Martin Jambon " 11 | "David Sheets " 12 | "Rudi Grinberg " 13 | "Ivan Jager " 14 | "Jeff Meister " 15 | "Carmelo Piccione " 16 | "Raman Varabets " 17 | "Mathieu Baudet " 18 | "Rauan Mayemir " 19 | "Louis Roché " 20 | "Brendan Long " 21 | "Christophe Troestler " 22 | "Vincent Bernardoff " 23 | "haoyang " 24 | ] 25 | license: "MIT" 26 | homepage: "https://github.com/ahrefs/atd" 27 | bug-reports: "https://github.com/ahrefs/atd/issues" 28 | depends: [ 29 | "ocaml" {>= "4.02"} 30 | "dune" {>= "2.0"} 31 | "menhir" 32 | "easy-format" 33 | "re" 34 | ] 35 | dev-repo: "git+https://github.com/ahrefs/atd.git" 36 | build: [ 37 | ["dune" "subst"] {pinned} 38 | [ 39 | "dune" 40 | "build" 41 | "-p" 42 | name 43 | "-j" 44 | jobs 45 | "@install" 46 | "@doc" {with-doc} 47 | ] 48 | ] 49 | url { 50 | src: "https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz" 51 | checksum: [ 52 | "sha256=db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 53 | "sha512=0c7f1985cc4d87ddd541bb2f7085b72f81aaef69468653319a4a52e6cd6c9318511229784a12cdb413ae500e7a5b8195759e0d8d49946a9b00f62e8dda07e8a2" 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /esy.lock/opam/lwt.5.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | 3 | synopsis: "Promises and event-driven I/O" 4 | 5 | version: "5.3.0" 6 | license: "MIT" 7 | homepage: "https://github.com/ocsigen/lwt" 8 | doc: "https://ocsigen.org/lwt" 9 | bug-reports: "https://github.com/ocsigen/lwt/issues" 10 | 11 | authors: [ 12 | "Jérôme Vouillon" 13 | "Jérémie Dimino" 14 | ] 15 | maintainer: [ 16 | "Anton Bachin " 17 | ] 18 | dev-repo: "git+https://github.com/ocsigen/lwt.git" 19 | 20 | depends: [ 21 | "cppo" {build & >= "1.1.0"} 22 | "dune" {>= "1.8.0"} 23 | "dune-configurator" 24 | "mmap" {>= "1.1.0"} # mmap is needed as long as Lwt supports OCaml < 4.06.0. 25 | "ocaml" {>= "4.02.0" & < "4.12"} 26 | ("ocaml" {>= "4.08.0"} | "ocaml-syntax-shims") 27 | "ocplib-endian" 28 | "result" # result is needed as long as Lwt supports OCaml 4.02. 29 | "seq" # seq is needed as long as Lwt supports OCaml < 4.07.0. 30 | 31 | "bisect_ppx" {dev & >= "2.0.0"} 32 | "ocamlfind" {dev & >= "1.7.3-1"} 33 | ] 34 | 35 | depopts: [ 36 | "base-threads" 37 | "base-unix" 38 | "conf-libev" 39 | ] 40 | 41 | conflicts: [ 42 | "ocaml-variants" {= "4.02.1+BER"} 43 | ] 44 | 45 | build: [ 46 | ["dune" "exec" "-p" name "src/unix/config/discover.exe" "--" "--save" 47 | "--use-libev" "%{conf-libev:installed}%"] 48 | ["dune" "build" "-p" name "-j" jobs] 49 | ] 50 | 51 | description: "A promise is a value that may become determined in the future. 52 | 53 | Lwt provides typed, composable promises. Promises that are resolved by I/O are 54 | resolved by Lwt in parallel. 55 | 56 | Meanwhile, OCaml code, including code creating and waiting on promises, runs in 57 | a single thread by default. This reduces the need for locks or other 58 | synchronization primitives. Code can be run in parallel on an opt-in basis." 59 | 60 | url { 61 | src: "https://github.com/ocsigen/lwt/archive/5.3.0.tar.gz" 62 | checksum: "md5=85e9c7e9095b4e14d0698e3ece72f378" 63 | } 64 | -------------------------------------------------------------------------------- /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/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/ezgzip.0.2.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Hezekiah M. Carty " 3 | authors: [ "Hezekiah M. Carty " ] 4 | license: "MIT" 5 | synopsis: "Simple gzip (de)compression library" 6 | description: """ 7 | # ezgzip - Simple gzip (de)compression library 8 | 9 | ezgzip is a simple interface focused on `string -> string` zlib and gzip 10 | (de)compression. 11 | 12 | Documentation is available 13 | [here](https://hcarty.github.io/ezgzip/ezgzip/index.html). 14 | 15 | An example illustrating how to gzip compress and then decompress a string: 16 | ```ocaml 17 | open Rresult 18 | 19 | let () = 20 | let original = "Hello world" in 21 | let compressed = Ezgzip.compress original in 22 | let decompressed = R.get_ok (Ezgzip.decompress compressed) in 23 | assert (original = decompressed) 24 | ``` 25 | 26 | This library currently uses the zlib bindings provided by 27 | [camlzip](https://github.com/xavierleroy/camlzip). The gzip header/footer code 28 | is based on the 29 | [upstream specification](http://www.gzip.org/zlib/rfc-gzip.html#specification). 30 | """ 31 | homepage: "https://github.com/hcarty/ezgzip" 32 | dev-repo: "git+https://github.com/hcarty/ezgzip.git" 33 | bug-reports: "https://github.com/hcarty/ezgzip/issues" 34 | doc: "https://hcarty.github.io/ezgzip/ezgzip/" 35 | build: [ 36 | ["dune" "build" "-p" name "-j" jobs] 37 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 38 | ["dune" "build" "-p" name "-j" jobs] {with-doc} 39 | ] 40 | depends: [ 41 | "alcotest" {with-test & >= "0.8.1"} 42 | "astring" 43 | "benchmark" {with-test & >= "1.4"} 44 | "dune" {>= "1.0"} 45 | "ocplib-endian" 46 | "odoc" {with-doc & >= "1.1.1"} 47 | "qcheck" {with-test & >= "0.7"} 48 | "rresult" 49 | "camlzip" 50 | "ocaml" {>= "4.03.0"} 51 | ] 52 | url { 53 | src: 54 | "https://github.com/hcarty/ezgzip/releases/download/v0.2.3/ezgzip-v0.2.3.tbz" 55 | checksum: [ 56 | "sha256=8868eedb98f83b2d53f091a827db9b7a5b4e9ba538bbc080c91b4ac4baf679d4" 57 | "sha512=766d6974057eba53e324f4299af378015024595c8e43bd0f68df5fbb33d98b42b12f7c8a6b815296d74df8eebaf969d79e7244697b918ea7b6a0b5e6f0562d77" 58 | ] 59 | } 60 | -------------------------------------------------------------------------------- /esy.lock/opam/digestif.0.9.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | name: "digestif" 3 | maintainer: [ "Eyyüb Sari " 4 | "Romain Calascibetta " ] 5 | authors: [ "Eyyüb Sari " 6 | "Romain Calascibetta " ] 7 | homepage: "https://github.com/mirage/digestif" 8 | bug-reports: "https://github.com/mirage/digestif/issues" 9 | dev-repo: "git+https://github.com/mirage/digestif.git" 10 | doc: "https://mirage.github.io/digestif/" 11 | license: "MIT" 12 | synopsis: "Hashes implementations (SHA*, RIPEMD160, BLAKE2* and MD5)" 13 | description: """ 14 | Digestif is a toolbox to provide hashes implementations in C and OCaml. 15 | 16 | It uses the linking trick and user can decide at the end to use the C implementation or the OCaml implementation. 17 | 18 | We provides implementation of: 19 | * MD5 20 | * SHA1 21 | * SHA224 22 | * SHA256 23 | * SHA384 24 | * SHA512 25 | * BLAKE2B 26 | * BLAKE2S 27 | * RIPEMD160 28 | """ 29 | 30 | build: [ 31 | [ "dune" "build" "-p" name "-j" jobs ] 32 | [ "./install/install.ml" ] 33 | [ "dune" "runtest" "-p" name "-j" jobs ] {with-test} 34 | ] 35 | install: [ 36 | [ "dune" "install" "-p" name ] {with-test} 37 | [ "./test/test_runes.ml" ] {with-test} 38 | ] 39 | 40 | depends: [ 41 | "ocaml" {>= "4.03.0"} 42 | "dune" {>= "2.6.0"} 43 | "eqaf" 44 | "base-bytes" 45 | "bigarray-compat" 46 | "stdlib-shims" 47 | "fmt" {with-test} 48 | "alcotest" {with-test} 49 | "bos" {with-test} 50 | "astring" {with-test} 51 | "fpath" {with-test} 52 | "rresult" {with-test} 53 | "ocamlfind" {build & with-test} 54 | ] 55 | 56 | depopts: [ 57 | "ocaml-freestanding" 58 | "mirage-xen-posix" 59 | ] 60 | 61 | conflicts: [ 62 | "mirage-xen-posix" {< "3.1.0"} 63 | "ocaml-freestanding" {< "0.4.3"} 64 | ] 65 | url { 66 | src: 67 | "https://github.com/mirage/digestif/releases/download/v0.9.0/digestif-v0.9.0.tbz" 68 | checksum: [ 69 | "sha256=040f1558635c7fc49609406866ab1752e26ae4fcfae01f31d2dd902b5fbe696e" 70 | "sha512=a3b904ed1b3e2354f5efd71ee546041d2bb31091161597acb82e4bc2d0686b34d348adba1aef5b927efa28e1764b60f65c171019dd11952c72a76c92510878ee" 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /esy.lock/opam/atdgen.2.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: 3 | "Generates efficient JSON serializers, deserializers and validators" 4 | description: """ 5 | Atdgen is a command-line program that takes as input type definitions in the ATD 6 | syntax and produces OCaml code suitable for data serialization and 7 | deserialization. 8 | Two data formats are currently supported, these are biniou and JSON. 9 | Atdgen-biniou and Atdgen-json will refer to Atdgen used in one context or the 10 | other. 11 | Atdgen was designed with efficiency and durability in mind. Software authors are 12 | encouraged to use Atdgen directly and to write tools that may reuse part of 13 | Atdgen’s source code.""" 14 | maintainer: ["Rudi Grinberg "] 15 | authors: [ 16 | "Martin Jambon " 17 | "David Sheets " 18 | "Rudi Grinberg " 19 | "Ivan Jager " 20 | "Jeff Meister " 21 | "Carmelo Piccione " 22 | "Raman Varabets " 23 | "Mathieu Baudet " 24 | "Rauan Mayemir " 25 | "Louis Roché " 26 | "Brendan Long " 27 | "Christophe Troestler " 28 | "Vincent Bernardoff " 29 | "haoyang " 30 | ] 31 | license: "MIT" 32 | homepage: "https://github.com/ahrefs/atd" 33 | bug-reports: "https://github.com/ahrefs/atd/issues" 34 | depends: [ 35 | "ocaml" {>= "4.02"} 36 | "dune" {>= "2.0"} 37 | "atd" {>= "2.0.0"} 38 | "atdgen-runtime" {>= "2.0.0"} 39 | "atdgen-codec-runtime" {with-test} 40 | "biniou" {>= "1.0.6"} 41 | "yojson" {>= "1.7.0"} 42 | ] 43 | dev-repo: "git+https://github.com/ahrefs/atd.git" 44 | build: [ 45 | ["dune" "subst"] {pinned} 46 | [ 47 | "dune" 48 | "build" 49 | "-p" 50 | name 51 | "-j" 52 | jobs 53 | "@install" 54 | "@doc" {with-doc} 55 | ] 56 | ] 57 | url { 58 | src: "https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz" 59 | checksum: [ 60 | "sha256=db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 61 | "sha512=0c7f1985cc4d87ddd541bb2f7085b72f81aaef69468653319a4a52e6cd6c9318511229784a12cdb413ae500e7a5b8195759e0d8d49946a9b00f62e8dda07e8a2" 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /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/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: 6 | - release 7 | 8 | jobs: 9 | build: 10 | runs-on: ${{ matrix.os }} 11 | strategy: 12 | matrix: 13 | os: [ubuntu-latest, macos-latest, windows-latest] 14 | steps: 15 | - uses: actions/setup-node@v1.4.3 16 | with: 17 | node-version: 12 18 | - uses: actions/checkout@v2.3.2 19 | - name: Install esy 20 | run: npm install -g esy 21 | 22 | - name: Try to restore install cache 23 | uses: actions/cache@v2.1.1 24 | with: 25 | path: ~/.esy/source 26 | key: source-${{ hashFiles('**/index.json') }} 27 | 28 | - name: Install 29 | run: esy install 30 | 31 | # - name: Print esy cache 32 | # uses: actions/github-script@v3.0.0 33 | # id: print_esy_cache 34 | # with: 35 | # script: | 36 | # const path = require('path') 37 | # const scriptPath = path.resolve('.github/workflows/print_esy_cache.js') 38 | # require(scriptPath)(core) 39 | 40 | # - name: Try to restore build cache 41 | # id: deps-cache 42 | # uses: actions/cache@v2.1.1 43 | # with: 44 | # path: ${{ steps.print_esy_cache.outputs.esy_cache }} 45 | # key: build-${{ matrix.os }}-${{ hashFiles('**/index.json') }} 46 | # restore-keys: build-${{ matrix.os }}- 47 | 48 | # # Here we use a low-level command. In real situation you don't have to 49 | # # but it is useful in CI as it split the log in GitHub UI. 50 | # # You can see at a glance if it is your projet or your deps that break. 51 | # # 52 | # # We also use --release flag to build less. 53 | # # This allow us to spot syntax/type error more quickly. 54 | # - name: Build release dependencies 55 | # if: steps.deps-cache.outputs.cache-hit != 'true' 56 | # run: esy build-dependencies --release 57 | 58 | # - name: Build project in release 59 | # run: esy build --release 60 | 61 | # # Now that our core project build let builds others deps 62 | # - name: Build dependencies 63 | # if: steps.deps-cache.outputs.cache-hit != 'true' 64 | # run: esy build-dependencies 65 | 66 | # - name: Build project 67 | # run: esy build 68 | 69 | # # Here we cleanup if we have a cache fail because we use restore-keys. 70 | # # restore-keys take the old store even on cache fail. 71 | # # So, we have deps we don't care anymore. We prune them. 72 | # - name: Clean global store 73 | # if: steps.deps-cache.outputs.cache-hit != 'true' 74 | # run: esy cleanup . 75 | 76 | # - name: Test 77 | # run: esy test 78 | 79 | # - name: Build docs 80 | # run: esy doc 81 | -------------------------------------------------------------------------------- /esy.lock/opam/merlin.3.4.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "defree@gmail.com" 3 | authors: "The Merlin team" 4 | homepage: "https://github.com/ocaml/merlin" 5 | bug-reports: "https://github.com/ocaml/merlin/issues" 6 | dev-repo: "git+https://github.com/ocaml/merlin.git" 7 | build: [ 8 | ["dune" "subst"] {pinned} 9 | ["dune" "build" "-p" name "-j" jobs] 10 | ["dune" "runtest" "-p" name "-j" "1"] {with-test & ocaml:version >= "4.03"} 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.02.3" & < "4.12"} 14 | "dune" {>= "1.8.0"} 15 | "dot-merlin-reader" {= version} 16 | "yojson" {>= "1.6.0"} 17 | "mdx" {with-test & >= "1.3.0"} 18 | "conf-jq" {with-test} 19 | "csexp" {>= "1.2.3"} 20 | "result" {>= "1.5"} 21 | ] 22 | synopsis: 23 | "Editor helper, provides completion, typing and source browsing in Vim and Emacs" 24 | description: 25 | "Merlin is an assistant for editing OCaml code. It aims to provide the features available in modern IDEs: error reporting, auto completion, source browsing and much more." 26 | post-messages: [ 27 | "merlin installed. 28 | 29 | Quick setup for VIM 30 | ------------------- 31 | Append this to your .vimrc to add merlin to vim's runtime-path: 32 | let g:opamshare = substitute(system('opam config var share'),'\\n$','','''') 33 | execute \"set rtp+=\" . g:opamshare . \"/merlin/vim\" 34 | 35 | Also run the following line in vim to index the documentation: 36 | :execute \"helptags \" . g:opamshare . \"/merlin/vim/doc\" 37 | 38 | Quick setup for EMACS 39 | ------------------- 40 | Add opam emacs directory to your load-path by appending this to your .emacs: 41 | (let ((opam-share (ignore-errors (car (process-lines \"opam\" \"config\" \"var\" \"share\"))))) 42 | (when (and opam-share (file-directory-p opam-share)) 43 | ;; Register Merlin 44 | (add-to-list 'load-path (expand-file-name \"emacs/site-lisp\" opam-share)) 45 | (autoload 'merlin-mode \"merlin\" nil t nil) 46 | ;; Automatically start it in OCaml buffers 47 | (add-hook 'tuareg-mode-hook 'merlin-mode t) 48 | (add-hook 'caml-mode-hook 'merlin-mode t) 49 | ;; Use opam switch to lookup ocamlmerlin binary 50 | (setq merlin-command 'opam))) 51 | 52 | Take a look at https://github.com/ocaml/merlin for more information 53 | 54 | Quick setup with opam-user-setup 55 | -------------------------------- 56 | 57 | Opam-user-setup support Merlin. 58 | 59 | $ opam user-setup install 60 | 61 | should take care of basic setup. 62 | See https://github.com/OCamlPro/opam-user-setup 63 | " 64 | {success & !user-setup:installed} 65 | ] 66 | x-commit-hash: "c9761a552380838e9f530b5c47c0ea3c47c33565" 67 | url { 68 | src: 69 | "https://github.com/ocaml/merlin/releases/download/v3.4.2/merlin-v3.4.2.tbz" 70 | checksum: [ 71 | "sha256=e1b7b897b11119d92995c558530149fd07bd67a4aaf140f55f3c4ffb5e882a81" 72 | "sha512=7c39c70fc923971c4eca9432061077941498574c0b804efc20af244c1c9ab34c9178d7eb50ab750feaac30696e7ff911a0ccd5fb86341b68485bedae472aa15f" 73 | ] 74 | } 75 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ⚠️ This project is moving to [amino](https://github.com/jottenlips/amino-ssg) soon. I am rewriting the core logic in Rust. 2 | 3 | # Deprecated: please check out [amino](https://github.com/jottenlips/amino-ssg) 4 | 5 | ![Agave Logo](logo.gif) 6 | 7 | Minimal markdown to HTML for static sites with pretty URLs. 8 | 9 | ## ☀️ Install 10 | 11 | ``` 12 | yarn global add agave-generator 13 | ``` 14 | 15 | ## 🍯 Use 16 | 17 | ```console 18 | mkdir blog 19 | cd blog 20 | mkdir markdown 21 | touch markdown/index.md # home page 22 | touch markdown/first-post.md # /first-post/ route 23 | agave # reads all your readmes in ./markdown and outputs them to ./public 24 | ``` 25 | 26 | For the full list of options run `help`. 27 | 28 | ```console 29 | agave --help 30 | ``` 31 | 32 | ## 🏜 Themes 33 | 34 | Simply pass the -t argument and the theme name 35 | 36 | ```console 37 | agave -t desert 38 | ``` 39 | 40 | ## 🌿 Full Customization 41 | 42 | If you didn't find a theme for you you can add any base HTML and CSS you would like. 43 | 44 | base.html will wrap every generated page. 45 | 46 | base.html must contain `` where you would like your content placed. 47 | 48 | If you have a `styles.css` file in the markdown folder, it will be copied to the deployment folder. 49 | 50 | ```console 51 | touch markdown/base.html 52 | touch markdown/styles.css 53 | echo "" > markdown/base.html 54 | agave # run the generator again 55 | ``` 56 | 57 | Here is an example of using custom `base.html`. 58 | 59 | [Blog](https://jottenlips.github.io/) 60 | 61 | [Repo](https://github.com/jottenlips/jottenlips.github.io) 62 | 63 | ## 📂 File structure 64 | 65 | ``` 66 | ./markdown 67 | └──base.html 68 | └──index.md 69 | └──another-page.md 70 | └──topic.md 71 | └──/topic 72 | └──2019-1-1.md 73 | └──2020-1-1.md 74 | └──2021-1-1.md 75 | ``` 76 | 77 | results in 78 | 79 | ``` 80 | ./public 81 | └──index.html 82 | └──another-page/index.html 83 | └──/topic 84 | └──index.html 85 | └──2019-1-1/index.html 86 | └──2020-1-1/index.html 87 | └──2021-1-1/index.html 88 | ``` 89 | 90 | ## 🧗‍♀️ Deploy your site 91 | 92 | Github Pages 93 | 94 | ```console 95 | agave --markdown myblog --public docs 96 | git add --all 97 | git commit -m"deploy" 98 | git push 99 | ``` 100 | 101 | Setup your repo to look at the docs folder on your main branch in the repo settings. 102 | 103 | 104 | ## 🧪 Run your site locally 105 | 106 | ```console 107 | # for now, to preview locally 108 | cd public # or docs folder for gh pages 109 | python3 -m http.server 8000 110 | ``` 111 | 112 | ### (WIP) 113 | 114 | ```console 115 | agave -s 116 | # 🏃‍♀️ Running on localhost:8080 117 | ``` 118 | 119 | 🐛 TODO: fix CSP so remote images and fonts will show up when running locally. 120 | 121 | ## 🐪 Support 122 | 123 | Want to support this project? 124 | 125 | [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](code_of_conduct.md) 126 | 127 | [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/K3K01P2WT) 128 | -------------------------------------------------------------------------------- /lib/GenerateSite.re: -------------------------------------------------------------------------------- 1 | open Themes; 2 | open Server; 3 | 4 | let readf: string => string = 5 | path => 6 | switch (Bos.OS.File.read(Fpath.v(path))) { 7 | | Ok(a) => a 8 | | _ => "" 9 | }; 10 | 11 | let writef: (string, string) => unit = 12 | (path, content) => Bos.OS.File.write(Fpath.v(path), content) |> ignore; 13 | 14 | let regexmd = Str.regexp("\\b.md\\b"); 15 | let is_markdown: string => bool = 16 | name => 17 | try( 18 | switch (Str.search_forward(regexmd, name, 0)) { 19 | | _ => true 20 | } 21 | ) { 22 | | Not_found => false 23 | }; 24 | let removemd: string => string = 25 | filename => Str.replace_first(regexmd, "", filename); 26 | 27 | let regexmarkdown = Str.regexp(""); 28 | let addmarkdown: (string, string) => string = 29 | (template, content) => Str.replace_first(regexmarkdown, content, template); 30 | 31 | exception NotADirectory(string); 32 | 33 | let mkdir: string => unit = 34 | dir => 35 | try( 36 | if (!Sys.is_directory(dir)) { 37 | raise(NotADirectory(dir ++ " Is not a directory.")); 38 | } 39 | ) { 40 | | _ => Bos.OS.Dir.create(~path=true, Fpath.v(dir)) |> ignore 41 | }; 42 | 43 | let buildoutdir: (string, string) => string = 44 | (filename, dirname) => 45 | switch (filename) { 46 | | "index.md" => "./" ++ dirname 47 | | _ => "./" ++ dirname ++ "/" ++ removemd(filename) 48 | }; 49 | 50 | let rec buildfiletree: (string, string, string) => string = 51 | (inputdir, outputdir, basehtml) => { 52 | let markdownfiles = 53 | Sys.readdir("./" ++ inputdir) 54 | |> Array.to_list 55 | |> List.map(x => { 56 | let currentfile = inputdir ++ "/" ++ x; 57 | Sys.is_directory(currentfile) 58 | ? mkdir("./" ++ outputdir) 59 | |> ( 60 | () => { 61 | let nextoutputdir = "./" ++ outputdir ++ "/" ++ x; 62 | mkdir(nextoutputdir); 63 | let res = 64 | buildfiletree( 65 | "./" ++ inputdir ++ "/" ++ x, 66 | nextoutputdir, 67 | basehtml, 68 | ); 69 | Format.print_string(res); 70 | ""; 71 | } 72 | ) 73 | : x; 74 | }) 75 | |> List.filter(x => is_markdown(x)); 76 | 77 | markdownfiles 78 | |> List.map(file => mkdir(buildoutdir(file, outputdir))) 79 | |> ignore; 80 | 81 | markdownfiles 82 | |> List.fold_left( 83 | (a, b) => 84 | readf("./" ++ inputdir ++ "/" ++ b) 85 | |> Omd.of_string 86 | |> Omd.to_html(~pindent=true) 87 | |> addmarkdown(basehtml) 88 | |> writef(buildoutdir(b, outputdir) ++ "/index.html") 89 | |> ( 90 | () => 91 | Pastel.( {"🍯" ++ b ++ "\n"} ) 92 | ++ a 93 | ), 94 | "", 95 | ); 96 | }; 97 | 98 | let cmd = { 99 | let doc = "CLI for generating static sites from markdown."; 100 | 101 | let markdown = { 102 | let doc = "Path to your markdown files."; 103 | Cmdliner.Arg.( 104 | value 105 | & opt(string, "markdown") 106 | & info(["m", "markdown"], ~docv="markdown", ~doc) 107 | ); 108 | }; 109 | 110 | let public = { 111 | let doc = "Path to output your static site."; 112 | Cmdliner.Arg.( 113 | value 114 | & opt(string, "public") 115 | & info(["p", "public"], ~docv="public", ~doc) 116 | ); 117 | }; 118 | 119 | let theme = { 120 | let doc = "theme name. choices: [desert, randomphoto]"; 121 | Cmdliner.Arg.( 122 | value & opt(string, "") & info(["t", "theme"], ~docv="theme", ~doc) 123 | ); 124 | }; 125 | 126 | 127 | let serve = { 128 | let doc = "serve files"; 129 | Cmdliner.Arg.( 130 | value & flag & info(["s", "serve"], ~docv="serve", ~doc) 131 | ); 132 | }; 133 | 134 | 135 | let run = (markdown, public, theme, serve) => { 136 | 137 | let _serve = switch (serve) { 138 | | true => 139 | Server.serveFiles(public) 140 | | _ => "" 141 | }; 142 | 143 | let basehtml = 144 | hasTheme(theme) 145 | ? getTheme(theme) 146 | : ( 147 | switch (readf(markdown ++ "/base.html")) { 148 | | "" => getTheme(theme) 149 | | x => x 150 | } 151 | ); 152 | 153 | let baseCss = 154 | hasTheme(theme) 155 | ? getThemeCss(theme) 156 | : ( 157 | switch (readf(markdown ++ "/styles.css")) { 158 | | "" => getThemeCss(theme) 159 | | x => x 160 | } 161 | ); 162 | 163 | let res = buildfiletree(markdown, public, basehtml); 164 | /* Write css file */ 165 | writef(public++"/styles.css", baseCss) 166 | 167 | Format.print_string(res); 168 | 169 | print_endline(Pastel.( "☀️ Done!" )); 170 | }; 171 | 172 | Cmdliner.Term.( 173 | const(run) $ markdown $ public $ theme $ serve, 174 | info("agave", ~doc), 175 | ); 176 | }; 177 | 178 | let agave = () => Cmdliner.Term.exit @@ Cmdliner.Term.eval(cmd); -------------------------------------------------------------------------------- /lib/Themes.re: -------------------------------------------------------------------------------- 1 | let defaulthtml = {| 2 | 3 | 4 | 5 | Agave Site 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |}; 15 | 16 | /* #ebebeb 17 | #a5d79d 18 | #dd7755 19 | #5c578c 20 | #4e2f61 */ 21 | let desertCss = {| 22 | @import url("https://fonts.googleapis.com/css2?family=Epilogue&display=swap"); 23 | @import url("https://fonts.googleapis.com/css?family=Open+Sans&display=swap"); 24 | html { 25 | background: #dd7755; 26 | } 27 | body { 28 | font-family: "Epilogue", sans-serif; 29 | line-height: 26px; 30 | margin: 0; 31 | } 32 | 33 | img[alt*="small"] { 34 | width: 500px; 35 | } 36 | .coverimage { 37 | background: url(https://i.picsum.photos/id/247/1200/800.jpg?hmac=jAKee_4tKtq3oEQw_QgJbqXlUcx8ON2vfJfNt1Zki_4); 38 | background-repeat: no-repeat; 39 | background-size: cover; 40 | background-attachment: fixed; 41 | min-width: 100%; 42 | } 43 | h1 { 44 | color: #4e2f61; 45 | } 46 | h2 { 47 | color: #5c578c; 48 | } 49 | h3 { 50 | color: #dd7755; 51 | } 52 | code { 53 | flex: 1; 54 | border-radius: 2px; 55 | padding: 4px; 56 | background-color: #000000; 57 | color: #a5d79d; 58 | line-height: 200%; 59 | word-wrap: break-word; 60 | } 61 | pre { 62 | background-color: #000000; 63 | width: 90%; 64 | border-radius: 6px; 65 | padding-top: 10px; 66 | padding-left: 10px; 67 | padding-right: 10px; 68 | padding-bottom: 10px; 69 | overflow-x: scroll; 70 | } 71 | .container { 72 | padding-top: 50px; 73 | padding-bottom: 50px; 74 | display: flex; 75 | flex-direction: column; 76 | justify-content: center; 77 | align-items: center; 78 | min-height: 100vh; 79 | } 80 | .block { 81 | max-width: 800px; 82 | min-width: 300px; 83 | width: 100%; 84 | background-color: #ebebeb; 85 | padding: 20px; 86 | margin: 15px; 87 | overflow-y: scroll; 88 | border-radius: 6px; 89 | } 90 | |} 91 | 92 | let deserthtml = {| 93 | 94 | 95 | 96 | 97 | 98 | Blog 99 | 100 | 102 | 103 | 104 |
105 |
106 |
107 | 108 |
109 |
110 | 111 | 112 | |}; 113 | 114 | let randomphotocss = {| 115 | html { 116 | background: #EEE5E9; 117 | } 118 | body { 119 | font-family: 'Josefin Sans', sans-serif; 120 | line-height: 26px; 121 | margin: 0; 122 | } 123 | 124 | img[alt*="small"] { 125 | width: 500px; 126 | } 127 | .coverimage { 128 | background: url(https://picsum.photos/2000/1500); 129 | background-repeat: no-repeat; 130 | background-size: cover; 131 | background-attachment: fixed; 132 | min-width: 100%; 133 | } 134 | h1 { 135 | color: #D64933; 136 | } 137 | h2 { 138 | color: #D64933; 139 | } 140 | h3 { 141 | color: #7C7C7C; 142 | } 143 | code { 144 | flex: 1; 145 | border-radius: 2px; 146 | padding: 4px; 147 | background-color: #2B303A; 148 | color: #92DCE5; 149 | line-height: 200%; 150 | word-wrap: break-word; 151 | } 152 | pre { 153 | background-color: #2B303A; 154 | width: 90%; 155 | border-radius: 6px; 156 | padding-top: 10px; 157 | padding-left: 10px; 158 | padding-right: 10px; 159 | padding-bottom: 10px; 160 | overflow-x: scroll; 161 | } 162 | .container { 163 | padding-top: 50px; 164 | padding-bottom: 50px; 165 | display: flex; 166 | flex-direction: column; 167 | justify-content: center; 168 | align-items: center; 169 | min-height: 100vh; 170 | } 171 | .block { 172 | max-width: 800px; 173 | min-width: 300px; 174 | width: 100%; 175 | background-color: #EEE5E9; 176 | padding: 20px; 177 | margin: 15px; 178 | overflow-y: scroll; 179 | border-radius: 6px; 180 | } 181 | |} 182 | 183 | let randomphotohtml = {| 184 | 185 | 186 | 187 | 188 | 189 | Blog 190 | 191 | 192 | 193 |
194 |
195 |
196 | 197 |
198 |
199 | 200 | 201 | |}; 202 | 203 | let hasTheme: string => bool = 204 | theme => 205 | switch (theme) { 206 | | "" => false 207 | | _ => true 208 | }; 209 | 210 | let getTheme: string => string = 211 | theme => 212 | switch (theme) { 213 | | "desert" => deserthtml 214 | | "randomphoto" => randomphotohtml 215 | | _ => defaulthtml 216 | }; 217 | 218 | let getThemeCss: string => string = 219 | theme => 220 | switch (theme) { 221 | | "desert" => desertCss 222 | | "randomphoto" => randomphotocss 223 | | _ => defaulthtml 224 | }; -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | agave Copyright (2020) (COPYRIGHT John Ottenlips)(“Licensor”) 2 | 3 | Hippocratic License Version Number: 2.1. 4 | 5 | Purpose. The purpose of this License is for the Licensor named above to permit the Licensee (as defined below) broad permission, if consistent with Human Rights Laws and Human Rights Principles (as each is defined below), to use and work with the Software (as defined below) within the full scope of Licensor’s copyright and patent rights, if any, in the Software, while ensuring attribution and protecting the Licensor from liability. 6 | 7 | Permission and Conditions. The Licensor grants permission by this license (“License”), free of charge, to the extent of Licensor’s rights under applicable copyright and patent law, to any person or entity (the “Licensee”) obtaining a copy of this software and associated documentation files (the “Software”), to do everything with the Software that would otherwise infringe (i) the Licensor’s copyright in the Software or (ii) any patent claims to the Software that the Licensor can license or becomes able to license, subject to all of the following terms and conditions: 8 | 9 | * Acceptance. This License is automatically offered to every person and entity subject to its terms and conditions. Licensee accepts this License and agrees to its terms and conditions by taking any action with the Software that, absent this License, would infringe any intellectual property right held by Licensor. 10 | 11 | * Notice. Licensee must ensure that everyone who gets a copy of any part of this Software from Licensee, with or without changes, also receives the License and the above copyright notice (and if included by the Licensor, patent, trademark and attribution notice). Licensee must cause any modified versions of the Software to carry prominent notices stating that Licensee changed the Software. For clarity, although Licensee is free to create modifications of the Software and distribute only the modified portion created by Licensee with additional or different terms, the portion of the Software not modified must be distributed pursuant to this License. If anyone notifies Licensee in writing that Licensee has not complied with this Notice section, Licensee can keep this License by taking all practical steps to comply within 30 days after the notice. If Licensee does not do so, Licensee’s License (and all rights licensed hereunder) shall end immediately. 12 | 13 | * Compliance with Human Rights Principles and Human Rights Laws. 14 | 15 | 1. Human Rights Principles. 16 | 17 | (a) Licensee is advised to consult the articles of the United Nations Universal Declaration of Human Rights and the United Nations Global Compact that define recognized principles of international human rights (the “Human Rights Principles”). Licensee shall use the Software in a manner consistent with Human Rights Principles. 18 | 19 | (b) Unless the Licensor and Licensee agree otherwise, any dispute, controversy, or claim arising out of or relating to (i) Section 1(a) regarding Human Rights Principles, including the breach of Section 1(a), termination of this License for breach of the Human Rights Principles, or invalidity of Section 1(a) or (ii) a determination of whether any Law is consistent or in conflict with Human Rights Principles pursuant to Section 2, below, shall be settled by arbitration in accordance with the Hague Rules on Business and Human Rights Arbitration (the “Rules”); provided, however, that Licensee may elect not to participate in such arbitration, in which event this License (and all rights licensed hereunder) shall end immediately. The number of arbitrators shall be one unless the Rules require otherwise. 20 | 21 | Unless both the Licensor and Licensee agree to the contrary: (1) All documents and information concerning the arbitration shall be public and may be disclosed by any party; (2) The repository referred to under Article 43 of the Rules shall make available to the public in a timely manner all documents concerning the arbitration which are communicated to it, including all submissions of the parties, all evidence admitted into the record of the proceedings, all transcripts or other recordings of hearings and all orders, decisions and awards of the arbitral tribunal, subject only to the arbitral tribunal's powers to take such measures as may be necessary to safeguard the integrity of the arbitral process pursuant to Articles 18, 33, 41 and 42 of the Rules; and (3) Article 26(6) of the Rules shall not apply. 22 | 23 | 2. Human Rights Laws. The Software shall not be used by any person or entity for any systems, activities, or other uses that violate any Human Rights Laws. “Human Rights Laws” means any applicable laws, regulations, or rules (collectively, “Laws”) that protect human, civil, labor, privacy, political, environmental, security, economic, due process, or similar rights; provided, however, that such Laws are consistent and not in conflict with Human Rights Principles (a dispute over the consistency or a conflict between Laws and Human Rights Principles shall be determined by arbitration as stated above). Where the Human Rights Laws of more than one jurisdiction are applicable or in conflict with respect to the use of the Software, the Human Rights Laws that are most protective of the individuals or groups harmed shall apply. 24 | 25 | 3. Indemnity. Licensee shall hold harmless and indemnify Licensor (and any other contributor) against all losses, damages, liabilities, deficiencies, claims, actions, judgments, settlements, interest, awards, penalties, fines, costs, or expenses of whatever kind, including Licensor’s reasonable attorneys’ fees, arising out of or relating to Licensee’s use of the Software in violation of Human Rights Laws or Human Rights Principles. 26 | 27 | * Failure to Comply. Any failure of Licensee to act according to the terms and conditions of this License is both a breach of the License and an infringement of the intellectual property rights of the Licensor (subject to exceptions under Laws, e.g., fair use). In the event of a breach or infringement, the terms and conditions of this License may be enforced by Licensor under the Laws of any jurisdiction to which Licensee is subject. Licensee also agrees that the Licensor may enforce the terms and conditions of this License against Licensee through specific performance (or similar remedy under Laws) to the extent permitted by Laws. For clarity, except in the event of a breach of this License, infringement, or as otherwise stated in this License, Licensor may not terminate this License with Licensee. 28 | 29 | * Enforceability and Interpretation. If any term or provision of this License is determined to be invalid, illegal, or unenforceable by a court of competent jurisdiction, then such invalidity, illegality, or unenforceability shall not affect any other term or provision of this License or invalidate or render unenforceable such term or provision in any other jurisdiction; provided, however, subject to a court modification pursuant to the immediately following sentence, if any term or provision of this License pertaining to Human Rights Laws or Human Rights Principles is deemed invalid, illegal, or unenforceable against Licensee by a court of competent jurisdiction, all rights in the Software granted to Licensee shall be deemed null and void as between Licensor and Licensee. Upon a determination that any term or provision is invalid, illegal, or unenforceable, to the extent permitted by Laws, the court may modify this License to affect the original purpose that the Software be used in compliance with Human Rights Principles and Human Rights Laws as closely as possible. The language in this License shall be interpreted as to its fair meaning and not strictly for or against any party. 30 | 31 | * Disclaimer. TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES “AS IS,” WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR AND ANY OTHER CONTRIBUTOR SHALL NOT BE LIABLE TO ANYONE FOR ANY DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THIS LICENSE, UNDER ANY KIND OF LEGAL CLAIM. 32 | 33 | This Hippocratic License is an Ethical Source license (https://ethicalsource.dev) and is offered for use by licensors and licensees at their own risk, on an “AS IS” basis, and with no warranties express or implied, to the maximum extent permitted by Laws. 34 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------