├── .gitattributes ├── .github └── workflows │ └── test.yaml ├── .gitignore ├── .vscode └── settings.json ├── dune-project ├── esy.lock ├── .gitattributes ├── .gitignore ├── index.json ├── opam │ ├── astring.0.8.4 │ │ └── opam │ ├── base-bytes.base │ │ └── opam │ ├── base-threads.base │ │ └── opam │ ├── base-unix.base │ │ └── opam │ ├── base.v0.13.2 │ │ └── opam │ ├── biniou.1.2.1 │ │ └── opam │ ├── cmdliner.1.0.4 │ │ └── opam │ ├── conf-m4.1 │ │ └── opam │ ├── cppo.1.6.6 │ │ └── opam │ ├── dune-build-info.2.6.1 │ │ └── opam │ ├── dune-configurator.2.5.1 │ │ └── opam │ ├── dune-private-libs.2.5.1 │ │ └── opam │ ├── dune.2.5.1 │ │ └── opam │ ├── easy-format.1.3.2 │ │ └── opam │ ├── fix.20200131 │ │ └── opam │ ├── fpath.0.7.2 │ │ └── opam │ ├── gen.0.5.3 │ │ └── opam │ ├── junit.2.0.2 │ │ └── opam │ ├── menhir.20200211 │ │ └── opam │ ├── menhirLib.20200624 │ │ └── opam │ ├── menhirSdk.20200624 │ │ └── opam │ ├── merlin-extend.0.5 │ │ └── opam │ ├── ocaml-migrate-parsetree.1.7.3 │ │ └── opam │ ├── ocaml-secondary-compiler.4.08.1-1 │ │ ├── files │ │ │ ├── 0001-Don-t-build-manpages-for-stdlib-docs.patch │ │ │ └── 0001-Fix-failure-to-install-tools-links.patch │ │ └── opam │ ├── ocamlbuild.0.14.0 │ │ └── opam │ ├── ocamlfind-secondary.1.8.1 │ │ ├── files │ │ │ ├── META.in │ │ │ └── ocaml-secondary-compiler.conf.in │ │ └── opam │ ├── ocamlfind.1.8.1 │ │ ├── files │ │ │ ├── ocaml-stub │ │ │ └── ocamlfind.install │ │ └── opam │ ├── ocamlformat.0.14.2 │ │ └── opam │ ├── odoc.1.5.1 │ │ └── opam │ ├── ppx_derivers.1.2.1 │ │ └── opam │ ├── ppx_deriving.4.5 │ │ └── opam │ ├── ppx_tools.6.1+4.10.0 │ │ └── opam │ ├── ppx_tools_versioned.5.4.0 │ │ └── opam │ ├── ppx_yojson_conv_lib.v0.14.0 │ │ └── opam │ ├── ppxfind.1.4 │ │ └── opam │ ├── ptime.0.8.5 │ │ └── opam │ ├── re.1.9.0 │ │ └── opam │ ├── result.1.5 │ │ └── opam │ ├── sedlex.2.2 │ │ └── opam │ ├── seq.base │ │ ├── files │ │ │ ├── META.seq │ │ │ └── seq.install │ │ └── opam │ ├── sexplib0.v0.13.0 │ │ └── opam │ ├── stdio.v0.13.0 │ │ └── opam │ ├── stdlib-shims.0.1.0 │ │ └── opam │ ├── topkg.1.0.1 │ │ └── opam │ ├── tyxml.4.4.0 │ │ └── opam │ ├── uchar.0.0.2 │ │ └── opam │ ├── uucp.13.0.0 │ │ └── opam │ ├── uuseg.13.0.0 │ │ └── opam │ ├── uutf.1.0.2 │ │ └── opam │ └── yojson.1.7.0 │ │ └── opam └── overrides │ ├── opam__s__dune_opam__c__2.5.1_opam_override │ └── package.json │ ├── opam__s__menhir_opam__c__20200211_opam_override │ └── package.json │ ├── opam__s__ocaml_secondary_compiler_opam__c__4.08.1_1_opam_override │ ├── files │ │ ├── clone-flexdll │ │ ├── configure-windows │ │ ├── esy-build │ │ └── esy-configure │ └── package.json │ ├── opam__s__ocamlbuild_opam__c__0.14.0_opam_override │ ├── files │ │ └── ocamlbuild-0.14.0.patch │ └── package.json │ ├── opam__s__ocamlfind_opam__c__1.8.1_opam_override │ ├── files │ │ └── findlib-1.8.1.patch │ └── package.json │ └── opam__s__ocamlfind_secondary_opam__c__1.8.1_opam_override │ ├── files │ ├── findlib-1.8.1.patch │ ├── gen-findlib-conf.sh │ └── gen-meta.sh │ └── package.json ├── lib ├── Ast.re ├── Lexer.re ├── Parser.mly ├── Reason_css_vds.re ├── Reason_css_vds.rei ├── Tokens.re └── dune ├── package.json ├── reason-css-vds.opam └── test ├── RunTests.re ├── Test.re ├── TestFramework.re ├── dune ├── dune-project └── reason-css-vds-test.opam /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.re linguist-language=Reason 3 | -------------------------------------------------------------------------------- /.github/workflows/test.yaml: -------------------------------------------------------------------------------- 1 | name: Run Tests 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | 9 | jobs: 10 | tests: 11 | strategy: 12 | matrix: 13 | os: [macos-latest, ubuntu-latest] 14 | runs-on: ${{ matrix.os }} 15 | steps: 16 | - uses: actions/setup-node@v1 17 | with: 18 | node-version: 12 19 | - uses: actions/checkout@v2 20 | - name: Install esy 21 | run: npm install -g esy 22 | - name: Install dependencies 23 | run: esy 24 | - name: Run tests 25 | run: esy test 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | _esy 3 | *.install 4 | .merlin -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "ocaml.sandbox": { 4 | "root": "/home/eduardo/reason/reason-css-vds", 5 | "kind": "esy" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /dune-project: -------------------------------------------------------------------------------- 1 | (lang dune 2.0) 2 | 3 | (using menhir 2.0) 4 | -------------------------------------------------------------------------------- /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/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Reset any possible .gitignore, we want all esy.lock to be un-ignored. 3 | !* 4 | -------------------------------------------------------------------------------- /esy.lock/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "checksum": "5794355b7e64b7627765c1e6e695e46d", 3 | "root": "reason-css-vds@link-dev:./package.json", 4 | "node": { 5 | "reason-css-vds@link-dev:./package.json": { 6 | "id": "reason-css-vds@link-dev:./package.json", 7 | "name": "reason-css-vds", 8 | "version": "link-dev:./package.json", 9 | "source": { 10 | "type": "link-dev", 11 | "path": ".", 12 | "manifest": "package.json" 13 | }, 14 | "overrides": [], 15 | "dependencies": [ 16 | "ocaml@4.10.0@d41d8cd9", "@reason-native/rely@3.2.1@d41d8cd9", 17 | "@opam/sedlex@opam:2.2@ffde36c0", 18 | "@opam/ppx_deriving@opam:4.5@bb81afdc", 19 | "@opam/ocamlformat@opam:0.14.2@d742ffd5", 20 | "@opam/menhir@opam:20200211@26571604", 21 | "@opam/dune-private-libs@opam:2.5.1@60c1661f", 22 | "@opam/dune-configurator@opam:2.5.1@aeb9d8d5", 23 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/reason@3.6.0@d41d8cd9" 24 | ], 25 | "devDependencies": [ 26 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#fbc433e14035d520c7137916ae710b8ec3b415e9@d41d8cd9" 27 | ] 28 | }, 29 | "ocaml@4.10.0@d41d8cd9": { 30 | "id": "ocaml@4.10.0@d41d8cd9", 31 | "name": "ocaml", 32 | "version": "4.10.0", 33 | "source": { 34 | "type": "install", 35 | "source": [ 36 | "archive:https://registry.npmjs.org/ocaml/-/ocaml-4.10.0.tgz#sha1:3797ee252dca8dec38d3cdd42162923f56dba433" 37 | ] 38 | }, 39 | "overrides": [], 40 | "dependencies": [], 41 | "devDependencies": [] 42 | }, 43 | "@reason-native/rely@3.2.1@d41d8cd9": { 44 | "id": "@reason-native/rely@3.2.1@d41d8cd9", 45 | "name": "@reason-native/rely", 46 | "version": "3.2.1", 47 | "source": { 48 | "type": "install", 49 | "source": [ 50 | "archive:https://registry.npmjs.org/@reason-native/rely/-/rely-3.2.1.tgz#sha1:7945ac6a51773a97b8f8cfd97d2855ac7ac4ecb2" 51 | ] 52 | }, 53 | "overrides": [], 54 | "dependencies": [ 55 | "ocaml@4.10.0@d41d8cd9", "@reason-native/pastel@0.3.0@d41d8cd9", 56 | "@reason-native/file-context-printer@0.0.3@d41d8cd9", 57 | "@reason-native/cli@0.0.1-alpha@d41d8cd9", 58 | "@opam/re@opam:1.9.0@d4d5e13d", "@opam/junit@opam:2.0.2@0b7bd730", 59 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/reason@3.6.0@d41d8cd9" 60 | ], 61 | "devDependencies": [] 62 | }, 63 | "@reason-native/pastel@0.3.0@d41d8cd9": { 64 | "id": "@reason-native/pastel@0.3.0@d41d8cd9", 65 | "name": "@reason-native/pastel", 66 | "version": "0.3.0", 67 | "source": { 68 | "type": "install", 69 | "source": [ 70 | "archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.3.0.tgz#sha1:07da3c5a0933e61bc3b353bc85aa71ac7c0f311c" 71 | ] 72 | }, 73 | "overrides": [], 74 | "dependencies": [ 75 | "ocaml@4.10.0@d41d8cd9", "@opam/re@opam:1.9.0@d4d5e13d", 76 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/reason@3.6.0@d41d8cd9" 77 | ], 78 | "devDependencies": [] 79 | }, 80 | "@reason-native/file-context-printer@0.0.3@d41d8cd9": { 81 | "id": "@reason-native/file-context-printer@0.0.3@d41d8cd9", 82 | "name": "@reason-native/file-context-printer", 83 | "version": "0.0.3", 84 | "source": { 85 | "type": "install", 86 | "source": [ 87 | "archive:https://registry.npmjs.org/@reason-native/file-context-printer/-/file-context-printer-0.0.3.tgz#sha1:b92eec7b10107ccb27528f9eea9bb51252bca491" 88 | ] 89 | }, 90 | "overrides": [], 91 | "dependencies": [ 92 | "ocaml@4.10.0@d41d8cd9", "@reason-native/pastel@0.3.0@d41d8cd9", 93 | "@opam/re@opam:1.9.0@d4d5e13d", "@opam/dune@opam:2.5.1@f38f376e", 94 | "@esy-ocaml/reason@3.6.0@d41d8cd9" 95 | ], 96 | "devDependencies": [] 97 | }, 98 | "@reason-native/cli@0.0.1-alpha@d41d8cd9": { 99 | "id": "@reason-native/cli@0.0.1-alpha@d41d8cd9", 100 | "name": "@reason-native/cli", 101 | "version": "0.0.1-alpha", 102 | "source": { 103 | "type": "install", 104 | "source": [ 105 | "archive:https://registry.npmjs.org/@reason-native/cli/-/cli-0.0.1-alpha.tgz#sha1:0b911053fa7cc661eac10ead50d6ea6cc1fcd94d" 106 | ] 107 | }, 108 | "overrides": [], 109 | "dependencies": [ 110 | "ocaml@4.10.0@d41d8cd9", "@reason-native/pastel@0.3.0@d41d8cd9", 111 | "@opam/re@opam:1.9.0@d4d5e13d", "@opam/dune@opam:2.5.1@f38f376e", 112 | "@esy-ocaml/reason@3.6.0@d41d8cd9" 113 | ], 114 | "devDependencies": [] 115 | }, 116 | "@opam/yojson@opam:1.7.0@7056d985": { 117 | "id": "@opam/yojson@opam:1.7.0@7056d985", 118 | "name": "@opam/yojson", 119 | "version": "opam:1.7.0", 120 | "source": { 121 | "type": "install", 122 | "source": [ 123 | "archive:https://opam.ocaml.org/cache/md5/b8/b89d39ca3f8c532abe5f547ad3b8f84d#md5:b89d39ca3f8c532abe5f547ad3b8f84d", 124 | "archive:https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz#md5:b89d39ca3f8c532abe5f547ad3b8f84d" 125 | ], 126 | "opam": { 127 | "name": "yojson", 128 | "version": "1.7.0", 129 | "path": "esy.lock/opam/yojson.1.7.0" 130 | } 131 | }, 132 | "overrides": [], 133 | "dependencies": [ 134 | "ocaml@4.10.0@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 135 | "@opam/dune@opam:2.5.1@f38f376e", "@opam/cppo@opam:1.6.6@f4f83858", 136 | "@opam/biniou@opam:1.2.1@d7570399", 137 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 138 | ], 139 | "devDependencies": [ 140 | "ocaml@4.10.0@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 141 | "@opam/dune@opam:2.5.1@f38f376e", "@opam/biniou@opam:1.2.1@d7570399" 142 | ] 143 | }, 144 | "@opam/uutf@opam:1.0.2@4440868f": { 145 | "id": "@opam/uutf@opam:1.0.2@4440868f", 146 | "name": "@opam/uutf", 147 | "version": "opam:1.0.2", 148 | "source": { 149 | "type": "install", 150 | "source": [ 151 | "archive:https://opam.ocaml.org/cache/md5/a7/a7c542405a39630c689a82bd7ef2292c#md5:a7c542405a39630c689a82bd7ef2292c", 152 | "archive:http://erratique.ch/software/uutf/releases/uutf-1.0.2.tbz#md5:a7c542405a39630c689a82bd7ef2292c" 153 | ], 154 | "opam": { 155 | "name": "uutf", 156 | "version": "1.0.2", 157 | "path": "esy.lock/opam/uutf.1.0.2" 158 | } 159 | }, 160 | "overrides": [], 161 | "dependencies": [ 162 | "ocaml@4.10.0@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea", 163 | "@opam/topkg@opam:1.0.1@a42c631e", 164 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 165 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 166 | "@opam/cmdliner@opam:1.0.4@93208aac", 167 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 168 | ], 169 | "devDependencies": [ 170 | "ocaml@4.10.0@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea" 171 | ] 172 | }, 173 | "@opam/uuseg@opam:13.0.0@f60712a7": { 174 | "id": "@opam/uuseg@opam:13.0.0@f60712a7", 175 | "name": "@opam/uuseg", 176 | "version": "opam:13.0.0", 177 | "source": { 178 | "type": "install", 179 | "source": [ 180 | "archive:https://opam.ocaml.org/cache/md5/a0/a07a97fff61da604614ea8da0547ef6a#md5:a07a97fff61da604614ea8da0547ef6a", 181 | "archive:https://erratique.ch/software/uuseg/releases/uuseg-13.0.0.tbz#md5:a07a97fff61da604614ea8da0547ef6a" 182 | ], 183 | "opam": { 184 | "name": "uuseg", 185 | "version": "13.0.0", 186 | "path": "esy.lock/opam/uuseg.13.0.0" 187 | } 188 | }, 189 | "overrides": [], 190 | "dependencies": [ 191 | "ocaml@4.10.0@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 192 | "@opam/uucp@opam:13.0.0@e9b515e0", "@opam/topkg@opam:1.0.1@a42c631e", 193 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 194 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 195 | "@opam/cmdliner@opam:1.0.4@93208aac", 196 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 197 | ], 198 | "devDependencies": [ 199 | "ocaml@4.10.0@d41d8cd9", "@opam/uucp@opam:13.0.0@e9b515e0" 200 | ] 201 | }, 202 | "@opam/uucp@opam:13.0.0@e9b515e0": { 203 | "id": "@opam/uucp@opam:13.0.0@e9b515e0", 204 | "name": "@opam/uucp", 205 | "version": "opam:13.0.0", 206 | "source": { 207 | "type": "install", 208 | "source": [ 209 | "archive:https://opam.ocaml.org/cache/md5/07/07e706249ddb2d02f0fa298804d3c739#md5:07e706249ddb2d02f0fa298804d3c739", 210 | "archive:https://erratique.ch/software/uucp/releases/uucp-13.0.0.tbz#md5:07e706249ddb2d02f0fa298804d3c739" 211 | ], 212 | "opam": { 213 | "name": "uucp", 214 | "version": "13.0.0", 215 | "path": "esy.lock/opam/uucp.13.0.0" 216 | } 217 | }, 218 | "overrides": [], 219 | "dependencies": [ 220 | "ocaml@4.10.0@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 221 | "@opam/topkg@opam:1.0.1@a42c631e", 222 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 223 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 224 | "@opam/cmdliner@opam:1.0.4@93208aac", 225 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 226 | ], 227 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 228 | }, 229 | "@opam/uchar@opam:0.0.2@c8218eea": { 230 | "id": "@opam/uchar@opam:0.0.2@c8218eea", 231 | "name": "@opam/uchar", 232 | "version": "opam:0.0.2", 233 | "source": { 234 | "type": "install", 235 | "source": [ 236 | "archive:https://opam.ocaml.org/cache/md5/c9/c9ba2c738d264c420c642f7bb1cf4a36#md5:c9ba2c738d264c420c642f7bb1cf4a36", 237 | "archive:https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz#md5:c9ba2c738d264c420c642f7bb1cf4a36" 238 | ], 239 | "opam": { 240 | "name": "uchar", 241 | "version": "0.0.2", 242 | "path": "esy.lock/opam/uchar.0.0.2" 243 | } 244 | }, 245 | "overrides": [], 246 | "dependencies": [ 247 | "ocaml@4.10.0@d41d8cd9", "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 248 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 249 | ], 250 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 251 | }, 252 | "@opam/tyxml@opam:4.4.0@1dca5713": { 253 | "id": "@opam/tyxml@opam:4.4.0@1dca5713", 254 | "name": "@opam/tyxml", 255 | "version": "opam:4.4.0", 256 | "source": { 257 | "type": "install", 258 | "source": [ 259 | "archive:https://opam.ocaml.org/cache/sha256/51/516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530#sha256:516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530", 260 | "archive:https://github.com/ocsigen/tyxml/releases/download/4.4.0/tyxml-4.4.0.tbz#sha256:516394dd4a5c31726997c51d66aa31cacb91e3c46d4e16c7699130e204042530" 261 | ], 262 | "opam": { 263 | "name": "tyxml", 264 | "version": "4.4.0", 265 | "path": "esy.lock/opam/tyxml.4.4.0" 266 | } 267 | }, 268 | "overrides": [], 269 | "dependencies": [ 270 | "ocaml@4.10.0@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 271 | "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.9.0@d4d5e13d", 272 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 273 | ], 274 | "devDependencies": [ 275 | "ocaml@4.10.0@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 276 | "@opam/seq@opam:base@d8d7de1d", "@opam/re@opam:1.9.0@d4d5e13d", 277 | "@opam/dune@opam:2.5.1@f38f376e" 278 | ] 279 | }, 280 | "@opam/topkg@opam:1.0.1@a42c631e": { 281 | "id": "@opam/topkg@opam:1.0.1@a42c631e", 282 | "name": "@opam/topkg", 283 | "version": "opam:1.0.1", 284 | "source": { 285 | "type": "install", 286 | "source": [ 287 | "archive:https://opam.ocaml.org/cache/md5/16/16b90e066d8972a5ef59655e7c28b3e9#md5:16b90e066d8972a5ef59655e7c28b3e9", 288 | "archive:http://erratique.ch/software/topkg/releases/topkg-1.0.1.tbz#md5:16b90e066d8972a5ef59655e7c28b3e9" 289 | ], 290 | "opam": { 291 | "name": "topkg", 292 | "version": "1.0.1", 293 | "path": "esy.lock/opam/topkg.1.0.1" 294 | } 295 | }, 296 | "overrides": [], 297 | "dependencies": [ 298 | "ocaml@4.10.0@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 299 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 300 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 301 | ], 302 | "devDependencies": [ 303 | "ocaml@4.10.0@d41d8cd9", "@opam/ocamlbuild@opam:0.14.0@6ac75d03" 304 | ] 305 | }, 306 | "@opam/stdlib-shims@opam:0.1.0@d957c903": { 307 | "id": "@opam/stdlib-shims@opam:0.1.0@d957c903", 308 | "name": "@opam/stdlib-shims", 309 | "version": "opam:0.1.0", 310 | "source": { 311 | "type": "install", 312 | "source": [ 313 | "archive:https://opam.ocaml.org/cache/md5/12/12b5704eed70c6bff5ac39a16db1425d#md5:12b5704eed70c6bff5ac39a16db1425d", 314 | "archive:https://github.com/ocaml/stdlib-shims/releases/download/0.1.0/stdlib-shims-0.1.0.tbz#md5:12b5704eed70c6bff5ac39a16db1425d" 315 | ], 316 | "opam": { 317 | "name": "stdlib-shims", 318 | "version": "0.1.0", 319 | "path": "esy.lock/opam/stdlib-shims.0.1.0" 320 | } 321 | }, 322 | "overrides": [], 323 | "dependencies": [ 324 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 325 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 326 | ], 327 | "devDependencies": [ 328 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 329 | ] 330 | }, 331 | "@opam/stdio@opam:v0.13.0@eb59d879": { 332 | "id": "@opam/stdio@opam:v0.13.0@eb59d879", 333 | "name": "@opam/stdio", 334 | "version": "opam:v0.13.0", 335 | "source": { 336 | "type": "install", 337 | "source": [ 338 | "archive:https://opam.ocaml.org/cache/md5/48/48ef28512ddd51ff9885649dd1fab91d#md5:48ef28512ddd51ff9885649dd1fab91d", 339 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.13/files/stdio-v0.13.0.tar.gz#md5:48ef28512ddd51ff9885649dd1fab91d" 340 | ], 341 | "opam": { 342 | "name": "stdio", 343 | "version": "v0.13.0", 344 | "path": "esy.lock/opam/stdio.v0.13.0" 345 | } 346 | }, 347 | "overrides": [], 348 | "dependencies": [ 349 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 350 | "@opam/base@opam:v0.13.2@c3150775", 351 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 352 | ], 353 | "devDependencies": [ 354 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 355 | "@opam/base@opam:v0.13.2@c3150775" 356 | ] 357 | }, 358 | "@opam/sexplib0@opam:v0.13.0@3f54c2be": { 359 | "id": "@opam/sexplib0@opam:v0.13.0@3f54c2be", 360 | "name": "@opam/sexplib0", 361 | "version": "opam:v0.13.0", 362 | "source": { 363 | "type": "install", 364 | "source": [ 365 | "archive:https://opam.ocaml.org/cache/md5/f8/f8a715dffda5599cfae0cb4031d57abe#md5:f8a715dffda5599cfae0cb4031d57abe", 366 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.13/files/sexplib0-v0.13.0.tar.gz#md5:f8a715dffda5599cfae0cb4031d57abe" 367 | ], 368 | "opam": { 369 | "name": "sexplib0", 370 | "version": "v0.13.0", 371 | "path": "esy.lock/opam/sexplib0.v0.13.0" 372 | } 373 | }, 374 | "overrides": [], 375 | "dependencies": [ 376 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 377 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 378 | ], 379 | "devDependencies": [ 380 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 381 | ] 382 | }, 383 | "@opam/seq@opam:base@d8d7de1d": { 384 | "id": "@opam/seq@opam:base@d8d7de1d", 385 | "name": "@opam/seq", 386 | "version": "opam:base", 387 | "source": { 388 | "type": "install", 389 | "source": [ "no-source:" ], 390 | "opam": { 391 | "name": "seq", 392 | "version": "base", 393 | "path": "esy.lock/opam/seq.base" 394 | } 395 | }, 396 | "overrides": [], 397 | "dependencies": [ 398 | "ocaml@4.10.0@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" 399 | ], 400 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 401 | }, 402 | "@opam/sedlex@opam:2.2@ffde36c0": { 403 | "id": "@opam/sedlex@opam:2.2@ffde36c0", 404 | "name": "@opam/sedlex", 405 | "version": "opam:2.2", 406 | "source": { 407 | "type": "install", 408 | "source": [ 409 | "archive:https://opam.ocaml.org/cache/md5/5b/5bb2b819ac42959b8d7583abd2a2e610#md5:5bb2b819ac42959b8d7583abd2a2e610", 410 | "archive:https://github.com/ocaml-community/sedlex/archive/v2.2.tar.gz#md5:5bb2b819ac42959b8d7583abd2a2e610" 411 | ], 412 | "opam": { 413 | "name": "sedlex", 414 | "version": "2.2", 415 | "path": "esy.lock/opam/sedlex.2.2" 416 | } 417 | }, 418 | "overrides": [], 419 | "dependencies": [ 420 | "ocaml@4.10.0@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea", 421 | "@opam/ppx_tools_versioned@opam:5.4.0@48c10ee1", 422 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 423 | "@opam/gen@opam:0.5.3@4a903bee", "@opam/dune@opam:2.5.1@f38f376e", 424 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 425 | ], 426 | "devDependencies": [ 427 | "ocaml@4.10.0@d41d8cd9", "@opam/uchar@opam:0.0.2@c8218eea", 428 | "@opam/ppx_tools_versioned@opam:5.4.0@48c10ee1", 429 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 430 | "@opam/gen@opam:0.5.3@4a903bee", "@opam/dune@opam:2.5.1@f38f376e" 431 | ] 432 | }, 433 | "@opam/result@opam:1.5@6b753c82": { 434 | "id": "@opam/result@opam:1.5@6b753c82", 435 | "name": "@opam/result", 436 | "version": "opam:1.5", 437 | "source": { 438 | "type": "install", 439 | "source": [ 440 | "archive:https://opam.ocaml.org/cache/md5/1b/1b82dec78849680b49ae9a8a365b831b#md5:1b82dec78849680b49ae9a8a365b831b", 441 | "archive:https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz#md5:1b82dec78849680b49ae9a8a365b831b" 442 | ], 443 | "opam": { 444 | "name": "result", 445 | "version": "1.5", 446 | "path": "esy.lock/opam/result.1.5" 447 | } 448 | }, 449 | "overrides": [], 450 | "dependencies": [ 451 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 452 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 453 | ], 454 | "devDependencies": [ 455 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 456 | ] 457 | }, 458 | "@opam/re@opam:1.9.0@d4d5e13d": { 459 | "id": "@opam/re@opam:1.9.0@d4d5e13d", 460 | "name": "@opam/re", 461 | "version": "opam:1.9.0", 462 | "source": { 463 | "type": "install", 464 | "source": [ 465 | "archive:https://opam.ocaml.org/cache/md5/bd/bddaed4f386a22cace7850c9c7dac296#md5:bddaed4f386a22cace7850c9c7dac296", 466 | "archive:https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz#md5:bddaed4f386a22cace7850c9c7dac296" 467 | ], 468 | "opam": { 469 | "name": "re", 470 | "version": "1.9.0", 471 | "path": "esy.lock/opam/re.1.9.0" 472 | } 473 | }, 474 | "overrides": [], 475 | "dependencies": [ 476 | "ocaml@4.10.0@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", 477 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 478 | ], 479 | "devDependencies": [ 480 | "ocaml@4.10.0@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", 481 | "@opam/dune@opam:2.5.1@f38f376e" 482 | ] 483 | }, 484 | "@opam/ptime@opam:0.8.5@0051d642": { 485 | "id": "@opam/ptime@opam:0.8.5@0051d642", 486 | "name": "@opam/ptime", 487 | "version": "opam:0.8.5", 488 | "source": { 489 | "type": "install", 490 | "source": [ 491 | "archive:https://opam.ocaml.org/cache/md5/4d/4d48055d623ecf2db792439b3e96a520#md5:4d48055d623ecf2db792439b3e96a520", 492 | "archive:https://erratique.ch/software/ptime/releases/ptime-0.8.5.tbz#md5:4d48055d623ecf2db792439b3e96a520" 493 | ], 494 | "opam": { 495 | "name": "ptime", 496 | "version": "0.8.5", 497 | "path": "esy.lock/opam/ptime.0.8.5" 498 | } 499 | }, 500 | "overrides": [], 501 | "dependencies": [ 502 | "ocaml@4.10.0@d41d8cd9", "@opam/topkg@opam:1.0.1@a42c631e", 503 | "@opam/result@opam:1.5@6b753c82", 504 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 505 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 506 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 507 | ], 508 | "devDependencies": [ 509 | "ocaml@4.10.0@d41d8cd9", "@opam/result@opam:1.5@6b753c82" 510 | ] 511 | }, 512 | "@opam/ppxfind@opam:1.4@1e01d2a5": { 513 | "id": "@opam/ppxfind@opam:1.4@1e01d2a5", 514 | "name": "@opam/ppxfind", 515 | "version": "opam:1.4", 516 | "source": { 517 | "type": "install", 518 | "source": [ 519 | "archive:https://opam.ocaml.org/cache/sha256/98/98291c69f04f7f7b7cdad1b5d786c70fc595559d4663cc04cb711ac132db4971#sha256:98291c69f04f7f7b7cdad1b5d786c70fc595559d4663cc04cb711ac132db4971", 520 | "archive:https://github.com/jeremiedimino/ppxfind/releases/download/1.4/ppxfind-1.4.tbz#sha256:98291c69f04f7f7b7cdad1b5d786c70fc595559d4663cc04cb711ac132db4971" 521 | ], 522 | "opam": { 523 | "name": "ppxfind", 524 | "version": "1.4", 525 | "path": "esy.lock/opam/ppxfind.1.4" 526 | } 527 | }, 528 | "overrides": [], 529 | "dependencies": [ 530 | "ocaml@4.10.0@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 531 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 532 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 533 | ], 534 | "devDependencies": [ 535 | "ocaml@4.10.0@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 536 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 537 | "@opam/dune@opam:2.5.1@f38f376e" 538 | ] 539 | }, 540 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6": { 541 | "id": "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 542 | "name": "@opam/ppx_yojson_conv_lib", 543 | "version": "opam:v0.14.0", 544 | "source": { 545 | "type": "install", 546 | "source": [ 547 | "archive:https://opam.ocaml.org/cache/md5/e2/e23c5593a7211ad4fb09e26e9a74698a#md5:e23c5593a7211ad4fb09e26e9a74698a", 548 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz#md5:e23c5593a7211ad4fb09e26e9a74698a" 549 | ], 550 | "opam": { 551 | "name": "ppx_yojson_conv_lib", 552 | "version": "v0.14.0", 553 | "path": "esy.lock/opam/ppx_yojson_conv_lib.v0.14.0" 554 | } 555 | }, 556 | "overrides": [], 557 | "dependencies": [ 558 | "ocaml@4.10.0@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 559 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 560 | ], 561 | "devDependencies": [ 562 | "ocaml@4.10.0@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 563 | "@opam/dune@opam:2.5.1@f38f376e" 564 | ] 565 | }, 566 | "@opam/ppx_tools_versioned@opam:5.4.0@48c10ee1": { 567 | "id": "@opam/ppx_tools_versioned@opam:5.4.0@48c10ee1", 568 | "name": "@opam/ppx_tools_versioned", 569 | "version": "opam:5.4.0", 570 | "source": { 571 | "type": "install", 572 | "source": [ 573 | "archive:https://opam.ocaml.org/cache/md5/3e/3e809a11cae99f57c051d3d0100311f6#md5:3e809a11cae99f57c051d3d0100311f6", 574 | "archive:https://github.com/ocaml-ppx/ppx_tools_versioned/archive/5.4.0.tar.gz#md5:3e809a11cae99f57c051d3d0100311f6" 575 | ], 576 | "opam": { 577 | "name": "ppx_tools_versioned", 578 | "version": "5.4.0", 579 | "path": "esy.lock/opam/ppx_tools_versioned.5.4.0" 580 | } 581 | }, 582 | "overrides": [], 583 | "dependencies": [ 584 | "ocaml@4.10.0@d41d8cd9", 585 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 586 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 587 | ], 588 | "devDependencies": [ 589 | "ocaml@4.10.0@d41d8cd9", 590 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 591 | "@opam/dune@opam:2.5.1@f38f376e" 592 | ] 593 | }, 594 | "@opam/ppx_tools@opam:6.1+4.10.0@d7f16ed7": { 595 | "id": "@opam/ppx_tools@opam:6.1+4.10.0@d7f16ed7", 596 | "name": "@opam/ppx_tools", 597 | "version": "opam:6.1+4.10.0", 598 | "source": { 599 | "type": "install", 600 | "source": [ 601 | "archive:https://opam.ocaml.org/cache/md5/02/02fe2fab316e4a8b39d899e5839d7eec#md5:02fe2fab316e4a8b39d899e5839d7eec", 602 | "archive:https://github.com/ocaml-ppx/ppx_tools/archive/6.1+4.10.0.tar.gz#md5:02fe2fab316e4a8b39d899e5839d7eec" 603 | ], 604 | "opam": { 605 | "name": "ppx_tools", 606 | "version": "6.1+4.10.0", 607 | "path": "esy.lock/opam/ppx_tools.6.1+4.10.0" 608 | } 609 | }, 610 | "overrides": [], 611 | "dependencies": [ 612 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 613 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 614 | ], 615 | "devDependencies": [ 616 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 617 | ] 618 | }, 619 | "@opam/ppx_deriving@opam:4.5@bb81afdc": { 620 | "id": "@opam/ppx_deriving@opam:4.5@bb81afdc", 621 | "name": "@opam/ppx_deriving", 622 | "version": "opam:4.5", 623 | "source": { 624 | "type": "install", 625 | "source": [ 626 | "archive:https://opam.ocaml.org/cache/sha512/f7/f79153c5231ba1e03a3491fde95ca82ecb62fe05b60a649a374d2fbc5ea5dd9242126de7dfbe917c22fd7077c026c940e18c6b36c5ce0ec4bb6e07f11d2b710b#sha512:f79153c5231ba1e03a3491fde95ca82ecb62fe05b60a649a374d2fbc5ea5dd9242126de7dfbe917c22fd7077c026c940e18c6b36c5ce0ec4bb6e07f11d2b710b", 627 | "archive:https://github.com/ocaml-ppx/ppx_deriving/archive/v4.5.tar.gz#sha512:f79153c5231ba1e03a3491fde95ca82ecb62fe05b60a649a374d2fbc5ea5dd9242126de7dfbe917c22fd7077c026c940e18c6b36c5ce0ec4bb6e07f11d2b710b" 628 | ], 629 | "opam": { 630 | "name": "ppx_deriving", 631 | "version": "4.5", 632 | "path": "esy.lock/opam/ppx_deriving.4.5" 633 | } 634 | }, 635 | "overrides": [], 636 | "dependencies": [ 637 | "ocaml@4.10.0@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 638 | "@opam/ppxfind@opam:1.4@1e01d2a5", 639 | "@opam/ppx_tools@opam:6.1+4.10.0@d7f16ed7", 640 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 641 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 642 | "@opam/dune@opam:2.5.1@f38f376e", "@opam/cppo@opam:1.6.6@f4f83858", 643 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 644 | ], 645 | "devDependencies": [ 646 | "ocaml@4.10.0@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 647 | "@opam/ppx_tools@opam:6.1+4.10.0@d7f16ed7", 648 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 649 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 650 | "@opam/dune@opam:2.5.1@f38f376e" 651 | ] 652 | }, 653 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45": { 654 | "id": "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 655 | "name": "@opam/ppx_derivers", 656 | "version": "opam:1.2.1", 657 | "source": { 658 | "type": "install", 659 | "source": [ 660 | "archive:https://opam.ocaml.org/cache/md5/5d/5dc2bf130c1db3c731fe0fffc5648b41#md5:5dc2bf130c1db3c731fe0fffc5648b41", 661 | "archive:https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz#md5:5dc2bf130c1db3c731fe0fffc5648b41" 662 | ], 663 | "opam": { 664 | "name": "ppx_derivers", 665 | "version": "1.2.1", 666 | "path": "esy.lock/opam/ppx_derivers.1.2.1" 667 | } 668 | }, 669 | "overrides": [], 670 | "dependencies": [ 671 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 672 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 673 | ], 674 | "devDependencies": [ 675 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 676 | ] 677 | }, 678 | "@opam/odoc@opam:1.5.1@dae60787": { 679 | "id": "@opam/odoc@opam:1.5.1@dae60787", 680 | "name": "@opam/odoc", 681 | "version": "opam:1.5.1", 682 | "source": { 683 | "type": "install", 684 | "source": [ 685 | "archive:https://opam.ocaml.org/cache/sha256/ea/ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f#sha256:ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f", 686 | "archive:https://github.com/ocaml/odoc/releases/download/1.5.1/odoc-1.5.1.tbz#sha256:ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f" 687 | ], 688 | "opam": { 689 | "name": "odoc", 690 | "version": "1.5.1", 691 | "path": "esy.lock/opam/odoc.1.5.1" 692 | } 693 | }, 694 | "overrides": [], 695 | "dependencies": [ 696 | "ocaml@4.10.0@d41d8cd9", "@opam/tyxml@opam:4.4.0@1dca5713", 697 | "@opam/result@opam:1.5@6b753c82", "@opam/fpath@opam:0.7.2@45477b93", 698 | "@opam/dune@opam:2.5.1@f38f376e", "@opam/cppo@opam:1.6.6@f4f83858", 699 | "@opam/cmdliner@opam:1.0.4@93208aac", 700 | "@opam/astring@opam:0.8.4@1215f84d", 701 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 702 | ], 703 | "devDependencies": [ 704 | "ocaml@4.10.0@d41d8cd9", "@opam/tyxml@opam:4.4.0@1dca5713", 705 | "@opam/result@opam:1.5@6b753c82", "@opam/fpath@opam:0.7.2@45477b93", 706 | "@opam/dune@opam:2.5.1@f38f376e", 707 | "@opam/cmdliner@opam:1.0.4@93208aac", 708 | "@opam/astring@opam:0.8.4@1215f84d" 709 | ] 710 | }, 711 | "@opam/ocamlformat@opam:0.14.2@d742ffd5": { 712 | "id": "@opam/ocamlformat@opam:0.14.2@d742ffd5", 713 | "name": "@opam/ocamlformat", 714 | "version": "opam:0.14.2", 715 | "source": { 716 | "type": "install", 717 | "source": [ 718 | "archive:https://opam.ocaml.org/cache/sha256/5f/5f9f7ac312a8f62315e25536f87601efc7788114a4a1eacc0507acf474f8f09a#sha256:5f9f7ac312a8f62315e25536f87601efc7788114a4a1eacc0507acf474f8f09a", 719 | "archive:https://github.com/ocaml-ppx/ocamlformat/releases/download/0.14.2/ocamlformat-0.14.2.tbz#sha256:5f9f7ac312a8f62315e25536f87601efc7788114a4a1eacc0507acf474f8f09a" 720 | ], 721 | "opam": { 722 | "name": "ocamlformat", 723 | "version": "0.14.2", 724 | "path": "esy.lock/opam/ocamlformat.0.14.2" 725 | } 726 | }, 727 | "overrides": [], 728 | "dependencies": [ 729 | "ocaml@4.10.0@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 730 | "@opam/uuseg@opam:13.0.0@f60712a7", 731 | "@opam/stdio@opam:v0.13.0@eb59d879", "@opam/re@opam:1.9.0@d4d5e13d", 732 | "@opam/odoc@opam:1.5.1@dae60787", 733 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 734 | "@opam/menhir@opam:20200211@26571604", 735 | "@opam/fpath@opam:0.7.2@45477b93", 736 | "@opam/fix@opam:20200131@0ecd2f01", "@opam/dune@opam:2.5.1@f38f376e", 737 | "@opam/cmdliner@opam:1.0.4@93208aac", 738 | "@opam/base-unix@opam:base@87d0b2eb", 739 | "@opam/base@opam:v0.13.2@c3150775", 740 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 741 | ], 742 | "devDependencies": [ 743 | "ocaml@4.10.0@d41d8cd9", "@opam/uutf@opam:1.0.2@4440868f", 744 | "@opam/uuseg@opam:13.0.0@f60712a7", 745 | "@opam/stdio@opam:v0.13.0@eb59d879", "@opam/re@opam:1.9.0@d4d5e13d", 746 | "@opam/odoc@opam:1.5.1@dae60787", 747 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 748 | "@opam/menhir@opam:20200211@26571604", 749 | "@opam/fpath@opam:0.7.2@45477b93", 750 | "@opam/fix@opam:20200131@0ecd2f01", "@opam/dune@opam:2.5.1@f38f376e", 751 | "@opam/cmdliner@opam:1.0.4@93208aac", 752 | "@opam/base-unix@opam:base@87d0b2eb", 753 | "@opam/base@opam:v0.13.2@c3150775" 754 | ] 755 | }, 756 | "@opam/ocamlfind-secondary@opam:1.8.1@1afa38b2": { 757 | "id": "@opam/ocamlfind-secondary@opam:1.8.1@1afa38b2", 758 | "name": "@opam/ocamlfind-secondary", 759 | "version": "opam:1.8.1", 760 | "source": { 761 | "type": "install", 762 | "source": [ 763 | "archive:https://opam.ocaml.org/cache/md5/18/18ca650982c15536616dea0e422cbd8c#md5:18ca650982c15536616dea0e422cbd8c", 764 | "archive:http://download2.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c", 765 | "archive:http://download.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c" 766 | ], 767 | "opam": { 768 | "name": "ocamlfind-secondary", 769 | "version": "1.8.1", 770 | "path": "esy.lock/opam/ocamlfind-secondary.1.8.1" 771 | } 772 | }, 773 | "overrides": [ 774 | { 775 | "opamoverride": 776 | "esy.lock/overrides/opam__s__ocamlfind_secondary_opam__c__1.8.1_opam_override" 777 | } 778 | ], 779 | "dependencies": [ 780 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 781 | "@opam/ocaml-secondary-compiler@opam:4.08.1-1@ba28931b", 782 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 783 | ], 784 | "devDependencies": [ 785 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 786 | "@opam/ocaml-secondary-compiler@opam:4.08.1-1@ba28931b" 787 | ] 788 | }, 789 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9": { 790 | "id": "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 791 | "name": "@opam/ocamlfind", 792 | "version": "opam:1.8.1", 793 | "source": { 794 | "type": "install", 795 | "source": [ 796 | "archive:https://opam.ocaml.org/cache/md5/18/18ca650982c15536616dea0e422cbd8c#md5:18ca650982c15536616dea0e422cbd8c", 797 | "archive:http://download2.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c", 798 | "archive:http://download.camlcity.org/download/findlib-1.8.1.tar.gz#md5:18ca650982c15536616dea0e422cbd8c" 799 | ], 800 | "opam": { 801 | "name": "ocamlfind", 802 | "version": "1.8.1", 803 | "path": "esy.lock/opam/ocamlfind.1.8.1" 804 | } 805 | }, 806 | "overrides": [ 807 | { 808 | "opamoverride": 809 | "esy.lock/overrides/opam__s__ocamlfind_opam__c__1.8.1_opam_override" 810 | } 811 | ], 812 | "dependencies": [ 813 | "ocaml@4.10.0@d41d8cd9", "@opam/conf-m4@opam:1@3b2b148a", 814 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 815 | ], 816 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 817 | }, 818 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03": { 819 | "id": "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 820 | "name": "@opam/ocamlbuild", 821 | "version": "opam:0.14.0", 822 | "source": { 823 | "type": "install", 824 | "source": [ 825 | "archive:https://opam.ocaml.org/cache/sha256/87/87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78", 826 | "archive:https://github.com/ocaml/ocamlbuild/archive/0.14.0.tar.gz#sha256:87b29ce96958096c0a1a8eeafeb6268077b2d11e1bf2b3de0f5ebc9cf8d42e78" 827 | ], 828 | "opam": { 829 | "name": "ocamlbuild", 830 | "version": "0.14.0", 831 | "path": "esy.lock/opam/ocamlbuild.0.14.0" 832 | } 833 | }, 834 | "overrides": [ 835 | { 836 | "opamoverride": 837 | "esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override" 838 | } 839 | ], 840 | "dependencies": [ 841 | "ocaml@4.10.0@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" 842 | ], 843 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 844 | }, 845 | "@opam/ocaml-secondary-compiler@opam:4.08.1-1@ba28931b": { 846 | "id": "@opam/ocaml-secondary-compiler@opam:4.08.1-1@ba28931b", 847 | "name": "@opam/ocaml-secondary-compiler", 848 | "version": "opam:4.08.1-1", 849 | "source": { 850 | "type": "install", 851 | "source": [ 852 | "archive:https://opam.ocaml.org/cache/md5/72/723b6bfe8cf5abcbccc6911143f71055#md5:723b6bfe8cf5abcbccc6911143f71055", 853 | "archive:https://github.com/ocaml/ocaml/archive/4.08.1.tar.gz#md5:723b6bfe8cf5abcbccc6911143f71055" 854 | ], 855 | "opam": { 856 | "name": "ocaml-secondary-compiler", 857 | "version": "4.08.1-1", 858 | "path": "esy.lock/opam/ocaml-secondary-compiler.4.08.1-1" 859 | } 860 | }, 861 | "overrides": [ 862 | { 863 | "opamoverride": 864 | "esy.lock/overrides/opam__s__ocaml_secondary_compiler_opam__c__4.08.1_1_opam_override" 865 | } 866 | ], 867 | "dependencies": [ 868 | "ocaml@4.10.0@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" 869 | ], 870 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 871 | }, 872 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47": { 873 | "id": "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 874 | "name": "@opam/ocaml-migrate-parsetree", 875 | "version": "opam:1.7.3", 876 | "source": { 877 | "type": "install", 878 | "source": [ 879 | "archive:https://opam.ocaml.org/cache/sha256/6d/6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55#sha256:6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55", 880 | "archive:https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.7.3/ocaml-migrate-parsetree-v1.7.3.tbz#sha256:6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55" 881 | ], 882 | "opam": { 883 | "name": "ocaml-migrate-parsetree", 884 | "version": "1.7.3", 885 | "path": "esy.lock/opam/ocaml-migrate-parsetree.1.7.3" 886 | } 887 | }, 888 | "overrides": [], 889 | "dependencies": [ 890 | "ocaml@4.10.0@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 891 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 892 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 893 | ], 894 | "devDependencies": [ 895 | "ocaml@4.10.0@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 896 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 897 | "@opam/dune@opam:2.5.1@f38f376e" 898 | ] 899 | }, 900 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#fbc433e14035d520c7137916ae710b8ec3b415e9@d41d8cd9": { 901 | "id": 902 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#fbc433e14035d520c7137916ae710b8ec3b415e9@d41d8cd9", 903 | "name": "@opam/ocaml-lsp-server", 904 | "version": 905 | "github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#fbc433e14035d520c7137916ae710b8ec3b415e9", 906 | "source": { 907 | "type": "install", 908 | "source": [ 909 | "github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#fbc433e14035d520c7137916ae710b8ec3b415e9" 910 | ] 911 | }, 912 | "overrides": [], 913 | "dependencies": [ 914 | "ocaml@4.10.0@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 915 | "@opam/stdlib-shims@opam:0.1.0@d957c903", 916 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 917 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 918 | "@opam/menhir@opam:20200211@26571604", 919 | "@opam/dune-build-info@opam:2.6.1@611bb155", 920 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 921 | ], 922 | "devDependencies": [ 923 | "ocaml@4.10.0@d41d8cd9", "@opam/yojson@opam:1.7.0@7056d985", 924 | "@opam/stdlib-shims@opam:0.1.0@d957c903", 925 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 926 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 927 | "@opam/menhir@opam:20200211@26571604", 928 | "@opam/dune-build-info@opam:2.6.1@611bb155", 929 | "@opam/dune@opam:2.5.1@f38f376e" 930 | ] 931 | }, 932 | "@opam/merlin-extend@opam:0.5@675b1611": { 933 | "id": "@opam/merlin-extend@opam:0.5@675b1611", 934 | "name": "@opam/merlin-extend", 935 | "version": "opam:0.5", 936 | "source": { 937 | "type": "install", 938 | "source": [ 939 | "archive:https://opam.ocaml.org/cache/sha256/ca/ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227#sha256:ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227", 940 | "archive:https://github.com/let-def/merlin-extend/releases/download/v0.5/merlin-extend-v0.5.tbz#sha256:ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227" 941 | ], 942 | "opam": { 943 | "name": "merlin-extend", 944 | "version": "0.5", 945 | "path": "esy.lock/opam/merlin-extend.0.5" 946 | } 947 | }, 948 | "overrides": [], 949 | "dependencies": [ 950 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 951 | "@opam/cppo@opam:1.6.6@f4f83858", "@esy-ocaml/substs@0.0.1@d41d8cd9" 952 | ], 953 | "devDependencies": [ 954 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 955 | ] 956 | }, 957 | "@opam/menhirSdk@opam:20200624@2a05b5a7": { 958 | "id": "@opam/menhirSdk@opam:20200624@2a05b5a7", 959 | "name": "@opam/menhirSdk", 960 | "version": "opam:20200624", 961 | "source": { 962 | "type": "install", 963 | "source": [ 964 | "archive:https://opam.ocaml.org/cache/md5/c3/c37ff53a4a69059e1f8223067b91bb8b#md5:c37ff53a4a69059e1f8223067b91bb8b", 965 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz#md5:c37ff53a4a69059e1f8223067b91bb8b" 966 | ], 967 | "opam": { 968 | "name": "menhirSdk", 969 | "version": "20200624", 970 | "path": "esy.lock/opam/menhirSdk.20200624" 971 | } 972 | }, 973 | "overrides": [], 974 | "dependencies": [ 975 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 976 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 977 | ], 978 | "devDependencies": [ 979 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 980 | ] 981 | }, 982 | "@opam/menhirLib@opam:20200624@8bdd2b0e": { 983 | "id": "@opam/menhirLib@opam:20200624@8bdd2b0e", 984 | "name": "@opam/menhirLib", 985 | "version": "opam:20200624", 986 | "source": { 987 | "type": "install", 988 | "source": [ 989 | "archive:https://opam.ocaml.org/cache/md5/c3/c37ff53a4a69059e1f8223067b91bb8b#md5:c37ff53a4a69059e1f8223067b91bb8b", 990 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz#md5:c37ff53a4a69059e1f8223067b91bb8b" 991 | ], 992 | "opam": { 993 | "name": "menhirLib", 994 | "version": "20200624", 995 | "path": "esy.lock/opam/menhirLib.20200624" 996 | } 997 | }, 998 | "overrides": [], 999 | "dependencies": [ 1000 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 1001 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1002 | ], 1003 | "devDependencies": [ 1004 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 1005 | ] 1006 | }, 1007 | "@opam/menhir@opam:20200211@26571604": { 1008 | "id": "@opam/menhir@opam:20200211@26571604", 1009 | "name": "@opam/menhir", 1010 | "version": "opam:20200211", 1011 | "source": { 1012 | "type": "install", 1013 | "source": [ 1014 | "archive:https://opam.ocaml.org/cache/md5/01/01577e5f15380c35bdaa8fd818204560#md5:01577e5f15380c35bdaa8fd818204560", 1015 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20200211/archive.tar.gz#md5:01577e5f15380c35bdaa8fd818204560" 1016 | ], 1017 | "opam": { 1018 | "name": "menhir", 1019 | "version": "20200211", 1020 | "path": "esy.lock/opam/menhir.20200211" 1021 | } 1022 | }, 1023 | "overrides": [ 1024 | { 1025 | "opamoverride": 1026 | "esy.lock/overrides/opam__s__menhir_opam__c__20200211_opam_override" 1027 | } 1028 | ], 1029 | "dependencies": [ 1030 | "ocaml@4.10.0@d41d8cd9", "@opam/menhirSdk@opam:20200624@2a05b5a7", 1031 | "@opam/menhirLib@opam:20200624@8bdd2b0e", 1032 | "@opam/fix@opam:20200131@0ecd2f01", "@opam/dune@opam:2.5.1@f38f376e", 1033 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1034 | ], 1035 | "devDependencies": [ 1036 | "ocaml@4.10.0@d41d8cd9", "@opam/menhirSdk@opam:20200624@2a05b5a7", 1037 | "@opam/menhirLib@opam:20200624@8bdd2b0e", 1038 | "@opam/dune@opam:2.5.1@f38f376e" 1039 | ] 1040 | }, 1041 | "@opam/junit@opam:2.0.2@0b7bd730": { 1042 | "id": "@opam/junit@opam:2.0.2@0b7bd730", 1043 | "name": "@opam/junit", 1044 | "version": "opam:2.0.2", 1045 | "source": { 1046 | "type": "install", 1047 | "source": [ 1048 | "archive:https://opam.ocaml.org/cache/sha256/fd/fda941b653613a4a5731f9b3557364b12baa341daa13c01676c9eb8d64e96b01#sha256:fda941b653613a4a5731f9b3557364b12baa341daa13c01676c9eb8d64e96b01", 1049 | "archive:https://github.com/Khady/ocaml-junit/releases/download/2.0.2/junit-2.0.2.tbz#sha256:fda941b653613a4a5731f9b3557364b12baa341daa13c01676c9eb8d64e96b01" 1050 | ], 1051 | "opam": { 1052 | "name": "junit", 1053 | "version": "2.0.2", 1054 | "path": "esy.lock/opam/junit.2.0.2" 1055 | } 1056 | }, 1057 | "overrides": [], 1058 | "dependencies": [ 1059 | "@opam/tyxml@opam:4.4.0@1dca5713", "@opam/ptime@opam:0.8.5@0051d642", 1060 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1061 | ], 1062 | "devDependencies": [ 1063 | "@opam/tyxml@opam:4.4.0@1dca5713", "@opam/ptime@opam:0.8.5@0051d642", 1064 | "@opam/dune@opam:2.5.1@f38f376e" 1065 | ] 1066 | }, 1067 | "@opam/gen@opam:0.5.3@4a903bee": { 1068 | "id": "@opam/gen@opam:0.5.3@4a903bee", 1069 | "name": "@opam/gen", 1070 | "version": "opam:0.5.3", 1071 | "source": { 1072 | "type": "install", 1073 | "source": [ 1074 | "archive:https://opam.ocaml.org/cache/md5/f2/f242db157222474b9715fef49a1259a4#md5:f242db157222474b9715fef49a1259a4", 1075 | "archive:https://github.com/c-cube/gen/archive/0.5.3.tar.gz#md5:f242db157222474b9715fef49a1259a4" 1076 | ], 1077 | "opam": { 1078 | "name": "gen", 1079 | "version": "0.5.3", 1080 | "path": "esy.lock/opam/gen.0.5.3" 1081 | } 1082 | }, 1083 | "overrides": [], 1084 | "dependencies": [ 1085 | "ocaml@4.10.0@d41d8cd9", 1086 | "@opam/dune-configurator@opam:2.5.1@aeb9d8d5", 1087 | "@opam/dune@opam:2.5.1@f38f376e", 1088 | "@opam/base-bytes@opam:base@19d0c2ff", 1089 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1090 | ], 1091 | "devDependencies": [ 1092 | "ocaml@4.10.0@d41d8cd9", 1093 | "@opam/dune-configurator@opam:2.5.1@aeb9d8d5", 1094 | "@opam/dune@opam:2.5.1@f38f376e", 1095 | "@opam/base-bytes@opam:base@19d0c2ff" 1096 | ] 1097 | }, 1098 | "@opam/fpath@opam:0.7.2@45477b93": { 1099 | "id": "@opam/fpath@opam:0.7.2@45477b93", 1100 | "name": "@opam/fpath", 1101 | "version": "opam:0.7.2", 1102 | "source": { 1103 | "type": "install", 1104 | "source": [ 1105 | "archive:https://opam.ocaml.org/cache/md5/52/52c7ecb0bf180088336f3c645875fa41#md5:52c7ecb0bf180088336f3c645875fa41", 1106 | "archive:http://erratique.ch/software/fpath/releases/fpath-0.7.2.tbz#md5:52c7ecb0bf180088336f3c645875fa41" 1107 | ], 1108 | "opam": { 1109 | "name": "fpath", 1110 | "version": "0.7.2", 1111 | "path": "esy.lock/opam/fpath.0.7.2" 1112 | } 1113 | }, 1114 | "overrides": [], 1115 | "dependencies": [ 1116 | "ocaml@4.10.0@d41d8cd9", "@opam/topkg@opam:1.0.1@a42c631e", 1117 | "@opam/result@opam:1.5@6b753c82", 1118 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 1119 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 1120 | "@opam/astring@opam:0.8.4@1215f84d", 1121 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1122 | ], 1123 | "devDependencies": [ 1124 | "ocaml@4.10.0@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 1125 | "@opam/astring@opam:0.8.4@1215f84d" 1126 | ] 1127 | }, 1128 | "@opam/fix@opam:20200131@0ecd2f01": { 1129 | "id": "@opam/fix@opam:20200131@0ecd2f01", 1130 | "name": "@opam/fix", 1131 | "version": "opam:20200131", 1132 | "source": { 1133 | "type": "install", 1134 | "source": [ 1135 | "archive:https://opam.ocaml.org/cache/md5/99/991ff031666c662eaab638d2e0f4ac1d#md5:991ff031666c662eaab638d2e0f4ac1d", 1136 | "archive:https://gitlab.inria.fr/fpottier/fix/repository/20200131/archive.tar.gz#md5:991ff031666c662eaab638d2e0f4ac1d" 1137 | ], 1138 | "opam": { 1139 | "name": "fix", 1140 | "version": "20200131", 1141 | "path": "esy.lock/opam/fix.20200131" 1142 | } 1143 | }, 1144 | "overrides": [], 1145 | "dependencies": [ 1146 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 1147 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1148 | ], 1149 | "devDependencies": [ 1150 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 1151 | ] 1152 | }, 1153 | "@opam/easy-format@opam:1.3.2@0484b3c4": { 1154 | "id": "@opam/easy-format@opam:1.3.2@0484b3c4", 1155 | "name": "@opam/easy-format", 1156 | "version": "opam:1.3.2", 1157 | "source": { 1158 | "type": "install", 1159 | "source": [ 1160 | "archive:https://opam.ocaml.org/cache/sha256/34/3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926", 1161 | "archive:https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926" 1162 | ], 1163 | "opam": { 1164 | "name": "easy-format", 1165 | "version": "1.3.2", 1166 | "path": "esy.lock/opam/easy-format.1.3.2" 1167 | } 1168 | }, 1169 | "overrides": [], 1170 | "dependencies": [ 1171 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 1172 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1173 | ], 1174 | "devDependencies": [ 1175 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 1176 | ] 1177 | }, 1178 | "@opam/dune-private-libs@opam:2.5.1@60c1661f": { 1179 | "id": "@opam/dune-private-libs@opam:2.5.1@60c1661f", 1180 | "name": "@opam/dune-private-libs", 1181 | "version": "opam:2.5.1", 1182 | "source": { 1183 | "type": "install", 1184 | "source": [ 1185 | "archive:https://opam.ocaml.org/cache/sha256/8f/8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b#sha256:8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b", 1186 | "archive:https://github.com/ocaml/dune/releases/download/2.5.1/dune-2.5.1.tbz#sha256:8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b" 1187 | ], 1188 | "opam": { 1189 | "name": "dune-private-libs", 1190 | "version": "2.5.1", 1191 | "path": "esy.lock/opam/dune-private-libs.2.5.1" 1192 | } 1193 | }, 1194 | "overrides": [], 1195 | "dependencies": [ 1196 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 1197 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1198 | ], 1199 | "devDependencies": [ 1200 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e" 1201 | ] 1202 | }, 1203 | "@opam/dune-configurator@opam:2.5.1@aeb9d8d5": { 1204 | "id": "@opam/dune-configurator@opam:2.5.1@aeb9d8d5", 1205 | "name": "@opam/dune-configurator", 1206 | "version": "opam:2.5.1", 1207 | "source": { 1208 | "type": "install", 1209 | "source": [ 1210 | "archive:https://opam.ocaml.org/cache/sha256/8f/8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b#sha256:8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b", 1211 | "archive:https://github.com/ocaml/dune/releases/download/2.5.1/dune-2.5.1.tbz#sha256:8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b" 1212 | ], 1213 | "opam": { 1214 | "name": "dune-configurator", 1215 | "version": "2.5.1", 1216 | "path": "esy.lock/opam/dune-configurator.2.5.1" 1217 | } 1218 | }, 1219 | "overrides": [], 1220 | "dependencies": [ 1221 | "@opam/dune-private-libs@opam:2.5.1@60c1661f", 1222 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1223 | ], 1224 | "devDependencies": [ 1225 | "@opam/dune-private-libs@opam:2.5.1@60c1661f", 1226 | "@opam/dune@opam:2.5.1@f38f376e" 1227 | ] 1228 | }, 1229 | "@opam/dune-build-info@opam:2.6.1@611bb155": { 1230 | "id": "@opam/dune-build-info@opam:2.6.1@611bb155", 1231 | "name": "@opam/dune-build-info", 1232 | "version": "opam:2.6.1", 1233 | "source": { 1234 | "type": "install", 1235 | "source": [ 1236 | "archive:https://opam.ocaml.org/cache/sha256/5e/5ef959f286448ee172f1cffc86c439a6f7b662676e6015b282db071bb88899a0#sha256:5ef959f286448ee172f1cffc86c439a6f7b662676e6015b282db071bb88899a0", 1237 | "archive:https://github.com/ocaml/dune/releases/download/2.6.1/dune-2.6.1.tbz#sha256:5ef959f286448ee172f1cffc86c439a6f7b662676e6015b282db071bb88899a0" 1238 | ], 1239 | "opam": { 1240 | "name": "dune-build-info", 1241 | "version": "2.6.1", 1242 | "path": "esy.lock/opam/dune-build-info.2.6.1" 1243 | } 1244 | }, 1245 | "overrides": [], 1246 | "dependencies": [ 1247 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1248 | ], 1249 | "devDependencies": [ "@opam/dune@opam:2.5.1@f38f376e" ] 1250 | }, 1251 | "@opam/dune@opam:2.5.1@f38f376e": { 1252 | "id": "@opam/dune@opam:2.5.1@f38f376e", 1253 | "name": "@opam/dune", 1254 | "version": "opam:2.5.1", 1255 | "source": { 1256 | "type": "install", 1257 | "source": [ 1258 | "archive:https://opam.ocaml.org/cache/sha256/8f/8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b#sha256:8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b", 1259 | "archive:https://github.com/ocaml/dune/releases/download/2.5.1/dune-2.5.1.tbz#sha256:8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b" 1260 | ], 1261 | "opam": { 1262 | "name": "dune", 1263 | "version": "2.5.1", 1264 | "path": "esy.lock/opam/dune.2.5.1" 1265 | } 1266 | }, 1267 | "overrides": [ 1268 | { 1269 | "opamoverride": 1270 | "esy.lock/overrides/opam__s__dune_opam__c__2.5.1_opam_override" 1271 | } 1272 | ], 1273 | "dependencies": [ 1274 | "ocaml@4.10.0@d41d8cd9", 1275 | "@opam/ocamlfind-secondary@opam:1.8.1@1afa38b2", 1276 | "@opam/base-unix@opam:base@87d0b2eb", 1277 | "@opam/base-threads@opam:base@36803084", 1278 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1279 | ], 1280 | "devDependencies": [ 1281 | "ocaml@4.10.0@d41d8cd9", 1282 | "@opam/ocamlfind-secondary@opam:1.8.1@1afa38b2", 1283 | "@opam/base-unix@opam:base@87d0b2eb", 1284 | "@opam/base-threads@opam:base@36803084" 1285 | ] 1286 | }, 1287 | "@opam/cppo@opam:1.6.6@f4f83858": { 1288 | "id": "@opam/cppo@opam:1.6.6@f4f83858", 1289 | "name": "@opam/cppo", 1290 | "version": "opam:1.6.6", 1291 | "source": { 1292 | "type": "install", 1293 | "source": [ 1294 | "archive:https://opam.ocaml.org/cache/sha256/e7/e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0#sha256:e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0", 1295 | "archive:https://github.com/ocaml-community/cppo/releases/download/v1.6.6/cppo-v1.6.6.tbz#sha256:e7272996a7789175b87bb998efd079794a8db6625aae990d73f7b4484a07b8a0" 1296 | ], 1297 | "opam": { 1298 | "name": "cppo", 1299 | "version": "1.6.6", 1300 | "path": "esy.lock/opam/cppo.1.6.6" 1301 | } 1302 | }, 1303 | "overrides": [], 1304 | "dependencies": [ 1305 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 1306 | "@opam/base-unix@opam:base@87d0b2eb", 1307 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1308 | ], 1309 | "devDependencies": [ 1310 | "ocaml@4.10.0@d41d8cd9", "@opam/dune@opam:2.5.1@f38f376e", 1311 | "@opam/base-unix@opam:base@87d0b2eb" 1312 | ] 1313 | }, 1314 | "@opam/conf-m4@opam:1@3b2b148a": { 1315 | "id": "@opam/conf-m4@opam:1@3b2b148a", 1316 | "name": "@opam/conf-m4", 1317 | "version": "opam:1", 1318 | "source": { 1319 | "type": "install", 1320 | "source": [ "no-source:" ], 1321 | "opam": { 1322 | "name": "conf-m4", 1323 | "version": "1", 1324 | "path": "esy.lock/opam/conf-m4.1" 1325 | } 1326 | }, 1327 | "overrides": [], 1328 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 1329 | "devDependencies": [] 1330 | }, 1331 | "@opam/cmdliner@opam:1.0.4@93208aac": { 1332 | "id": "@opam/cmdliner@opam:1.0.4@93208aac", 1333 | "name": "@opam/cmdliner", 1334 | "version": "opam:1.0.4", 1335 | "source": { 1336 | "type": "install", 1337 | "source": [ 1338 | "archive:https://opam.ocaml.org/cache/md5/fe/fe2213d0bc63b1e10a2d0aa66d2fc8d9#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9", 1339 | "archive:http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz#md5:fe2213d0bc63b1e10a2d0aa66d2fc8d9" 1340 | ], 1341 | "opam": { 1342 | "name": "cmdliner", 1343 | "version": "1.0.4", 1344 | "path": "esy.lock/opam/cmdliner.1.0.4" 1345 | } 1346 | }, 1347 | "overrides": [], 1348 | "dependencies": [ 1349 | "ocaml@4.10.0@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1350 | ], 1351 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 1352 | }, 1353 | "@opam/biniou@opam:1.2.1@d7570399": { 1354 | "id": "@opam/biniou@opam:1.2.1@d7570399", 1355 | "name": "@opam/biniou", 1356 | "version": "opam:1.2.1", 1357 | "source": { 1358 | "type": "install", 1359 | "source": [ 1360 | "archive:https://opam.ocaml.org/cache/sha256/35/35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335", 1361 | "archive:https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335" 1362 | ], 1363 | "opam": { 1364 | "name": "biniou", 1365 | "version": "1.2.1", 1366 | "path": "esy.lock/opam/biniou.1.2.1" 1367 | } 1368 | }, 1369 | "overrides": [], 1370 | "dependencies": [ 1371 | "ocaml@4.10.0@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 1372 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1373 | ], 1374 | "devDependencies": [ 1375 | "ocaml@4.10.0@d41d8cd9", "@opam/easy-format@opam:1.3.2@0484b3c4", 1376 | "@opam/dune@opam:2.5.1@f38f376e" 1377 | ] 1378 | }, 1379 | "@opam/base-unix@opam:base@87d0b2eb": { 1380 | "id": "@opam/base-unix@opam:base@87d0b2eb", 1381 | "name": "@opam/base-unix", 1382 | "version": "opam:base", 1383 | "source": { 1384 | "type": "install", 1385 | "source": [ "no-source:" ], 1386 | "opam": { 1387 | "name": "base-unix", 1388 | "version": "base", 1389 | "path": "esy.lock/opam/base-unix.base" 1390 | } 1391 | }, 1392 | "overrides": [], 1393 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 1394 | "devDependencies": [] 1395 | }, 1396 | "@opam/base-threads@opam:base@36803084": { 1397 | "id": "@opam/base-threads@opam:base@36803084", 1398 | "name": "@opam/base-threads", 1399 | "version": "opam:base", 1400 | "source": { 1401 | "type": "install", 1402 | "source": [ "no-source:" ], 1403 | "opam": { 1404 | "name": "base-threads", 1405 | "version": "base", 1406 | "path": "esy.lock/opam/base-threads.base" 1407 | } 1408 | }, 1409 | "overrides": [], 1410 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 1411 | "devDependencies": [] 1412 | }, 1413 | "@opam/base-bytes@opam:base@19d0c2ff": { 1414 | "id": "@opam/base-bytes@opam:base@19d0c2ff", 1415 | "name": "@opam/base-bytes", 1416 | "version": "opam:base", 1417 | "source": { 1418 | "type": "install", 1419 | "source": [ "no-source:" ], 1420 | "opam": { 1421 | "name": "base-bytes", 1422 | "version": "base", 1423 | "path": "esy.lock/opam/base-bytes.base" 1424 | } 1425 | }, 1426 | "overrides": [], 1427 | "dependencies": [ 1428 | "ocaml@4.10.0@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 1429 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1430 | ], 1431 | "devDependencies": [ 1432 | "ocaml@4.10.0@d41d8cd9", "@opam/ocamlfind@opam:1.8.1@ff07b0f9" 1433 | ] 1434 | }, 1435 | "@opam/base@opam:v0.13.2@c3150775": { 1436 | "id": "@opam/base@opam:v0.13.2@c3150775", 1437 | "name": "@opam/base", 1438 | "version": "opam:v0.13.2", 1439 | "source": { 1440 | "type": "install", 1441 | "source": [ 1442 | "archive:https://opam.ocaml.org/cache/md5/f4/f43ce18d98fd0879e77ff671e077e607#md5:f43ce18d98fd0879e77ff671e077e607", 1443 | "archive:https://github.com/janestreet/base/archive/v0.13.2.tar.gz#md5:f43ce18d98fd0879e77ff671e077e607" 1444 | ], 1445 | "opam": { 1446 | "name": "base", 1447 | "version": "v0.13.2", 1448 | "path": "esy.lock/opam/base.v0.13.2" 1449 | } 1450 | }, 1451 | "overrides": [], 1452 | "dependencies": [ 1453 | "ocaml@4.10.0@d41d8cd9", "@opam/sexplib0@opam:v0.13.0@3f54c2be", 1454 | "@opam/dune-configurator@opam:2.5.1@aeb9d8d5", 1455 | "@opam/dune@opam:2.5.1@f38f376e", "@esy-ocaml/substs@0.0.1@d41d8cd9" 1456 | ], 1457 | "devDependencies": [ 1458 | "ocaml@4.10.0@d41d8cd9", "@opam/sexplib0@opam:v0.13.0@3f54c2be", 1459 | "@opam/dune-configurator@opam:2.5.1@aeb9d8d5", 1460 | "@opam/dune@opam:2.5.1@f38f376e" 1461 | ] 1462 | }, 1463 | "@opam/astring@opam:0.8.4@1215f84d": { 1464 | "id": "@opam/astring@opam:0.8.4@1215f84d", 1465 | "name": "@opam/astring", 1466 | "version": "opam:0.8.4", 1467 | "source": { 1468 | "type": "install", 1469 | "source": [ 1470 | "archive:https://opam.ocaml.org/cache/md5/54/548fcbf501ca4cb816d219ca4f25f660#md5:548fcbf501ca4cb816d219ca4f25f660", 1471 | "archive:https://erratique.ch/software/astring/releases/astring-0.8.4.tbz#md5:548fcbf501ca4cb816d219ca4f25f660" 1472 | ], 1473 | "opam": { 1474 | "name": "astring", 1475 | "version": "0.8.4", 1476 | "path": "esy.lock/opam/astring.0.8.4" 1477 | } 1478 | }, 1479 | "overrides": [], 1480 | "dependencies": [ 1481 | "ocaml@4.10.0@d41d8cd9", "@opam/topkg@opam:1.0.1@a42c631e", 1482 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 1483 | "@opam/ocamlbuild@opam:0.14.0@6ac75d03", 1484 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 1485 | ], 1486 | "devDependencies": [ "ocaml@4.10.0@d41d8cd9" ] 1487 | }, 1488 | "@esy-ocaml/substs@0.0.1@d41d8cd9": { 1489 | "id": "@esy-ocaml/substs@0.0.1@d41d8cd9", 1490 | "name": "@esy-ocaml/substs", 1491 | "version": "0.0.1", 1492 | "source": { 1493 | "type": "install", 1494 | "source": [ 1495 | "archive:https://registry.npmjs.org/@esy-ocaml/substs/-/substs-0.0.1.tgz#sha1:59ebdbbaedcda123fc7ed8fb2b302b7d819e9a46" 1496 | ] 1497 | }, 1498 | "overrides": [], 1499 | "dependencies": [], 1500 | "devDependencies": [] 1501 | }, 1502 | "@esy-ocaml/reason@3.6.0@d41d8cd9": { 1503 | "id": "@esy-ocaml/reason@3.6.0@d41d8cd9", 1504 | "name": "@esy-ocaml/reason", 1505 | "version": "3.6.0", 1506 | "source": { 1507 | "type": "install", 1508 | "source": [ 1509 | "archive:https://registry.npmjs.org/@esy-ocaml/reason/-/reason-3.6.0.tgz#sha1:ae98f3335e9e03ff0e01376830a14cd1246b5278" 1510 | ] 1511 | }, 1512 | "overrides": [], 1513 | "dependencies": [ 1514 | "ocaml@4.10.0@d41d8cd9", "@opam/result@opam:1.5@6b753c82", 1515 | "@opam/ocamlfind@opam:1.8.1@ff07b0f9", 1516 | "@opam/ocaml-migrate-parsetree@opam:1.7.3@dbcf3b47", 1517 | "@opam/merlin-extend@opam:0.5@675b1611", 1518 | "@opam/menhir@opam:20200211@26571604", 1519 | "@opam/fix@opam:20200131@0ecd2f01", "@opam/dune@opam:2.5.1@f38f376e" 1520 | ], 1521 | "devDependencies": [] 1522 | } 1523 | } 1524 | } -------------------------------------------------------------------------------- /esy.lock/opam/astring.0.8.4/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.4.tbz" 36 | checksum: "548fcbf501ca4cb816d219ca4f25f660" 37 | } 38 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /esy.lock/opam/base-threads.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Threads library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /esy.lock/opam/base-unix.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Unix library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /esy.lock/opam/base.v0.13.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/base" 5 | bug-reports: "https://github.com/janestreet/base/issues" 6 | dev-repo: "git+https://github.com/janestreet/base.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/base/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.04.2"} 14 | "sexplib0" {>= "v0.13" & < "v0.14"} 15 | "dune" {>= "1.5.1"} 16 | "dune-configurator" 17 | ] 18 | synopsis: "Full standard library replacement for OCaml" 19 | description: " 20 | Full standard library replacement for OCaml 21 | 22 | Base is a complete and portable alternative to the OCaml standard 23 | library. It provides all standard functionalities one would expect 24 | from a language standard library. It uses consistent conventions 25 | across all of its module. 26 | 27 | Base aims to be usable in any context. As a result system dependent 28 | features such as I/O are not offered by Base. They are instead 29 | provided by companion libraries such as stdio: 30 | 31 | https://github.com/janestreet/stdio 32 | " 33 | url { 34 | src: "https://github.com/janestreet/base/archive/v0.13.2.tar.gz" 35 | checksum: "md5=f43ce18d98fd0879e77ff671e077e607" 36 | } 37 | -------------------------------------------------------------------------------- /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/cmdliner.1.0.4/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/cmdliner" 5 | doc: "http://erratique.ch/software/cmdliner/doc/Cmdliner" 6 | dev-repo: "git+http://erratique.ch/repos/cmdliner.git" 7 | bug-reports: "https://github.com/dbuenzli/cmdliner/issues" 8 | tags: [ "cli" "system" "declarative" "org:erratique" ] 9 | license: "ISC" 10 | depends:[ "ocaml" {>= "4.03.0"} ] 11 | build: [[ make "all" "PREFIX=%{prefix}%" ]] 12 | install: 13 | [[make "install" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ] 14 | [make "install-doc" "LIBDIR=%{_:lib}%" "DOCDIR=%{_:doc}%" ]] 15 | 16 | synopsis: """Declarative definition of command line interfaces for OCaml""" 17 | description: """\ 18 | 19 | Cmdliner allows the declarative definition of command line interfaces 20 | for OCaml. 21 | 22 | It provides a simple and compositional mechanism to convert command 23 | line arguments to OCaml values and pass them to your functions. The 24 | module automatically handles syntax errors, help messages and UNIX man 25 | page generation. It supports programs with single or multiple commands 26 | and respects most of the [POSIX][1] and [GNU][2] conventions. 27 | 28 | Cmdliner has no dependencies and is distributed under the ISC license. 29 | 30 | [1]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html 31 | [2]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html 32 | """ 33 | url { 34 | archive: "http://erratique.ch/software/cmdliner/releases/cmdliner-1.0.4.tbz" 35 | checksum: "fe2213d0bc63b1e10a2d0aa66d2fc8d9" 36 | } 37 | -------------------------------------------------------------------------------- /esy.lock/opam/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/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/dune-build-info.2.6.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Embed build informations inside executable" 3 | description: """ 4 | The build-info library allows to access information about how the 5 | executable was built, such as the version of the project at which it 6 | was built or the list of statically linked libraries with their 7 | versions. It supports reporting the version from the version control 8 | system during development to get an precise reference of when the 9 | executable was built. 10 | """ 11 | maintainer: ["Jane Street Group, LLC "] 12 | authors: ["Jane Street Group, LLC "] 13 | license: "MIT" 14 | homepage: "https://github.com/ocaml/dune" 15 | doc: "https://dune.readthedocs.io/" 16 | bug-reports: "https://github.com/ocaml/dune/issues" 17 | depends: [ 18 | "dune" {>= "2.5"} 19 | ] 20 | dev-repo: "git+https://github.com/ocaml/dune.git" 21 | build: [ 22 | ["dune" "subst"] {pinned} 23 | [ 24 | "dune" 25 | "build" 26 | "-p" 27 | name 28 | "-j" 29 | jobs 30 | "@install" 31 | "@doc" {with-doc} 32 | ] 33 | ] 34 | url { 35 | src: "https://github.com/ocaml/dune/releases/download/2.6.1/dune-2.6.1.tbz" 36 | checksum: [ 37 | "sha256=5ef959f286448ee172f1cffc86c439a6f7b662676e6015b282db071bb88899a0" 38 | "sha512=67b750716563fde1135f3d0f3892f97e912d6f95a40bcd7cd854f3ae09ba0b037e7b8829bdaee141cb6c998396f2a51a380451db117571d77895781798d625e7" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /esy.lock/opam/dune-configurator.2.5.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.3"} 21 | "dune-private-libs" {= version} 22 | ] 23 | dev-repo: "git+https://github.com/ocaml/dune.git" 24 | build: [ 25 | ["dune" "subst"] {pinned} 26 | [ 27 | "dune" 28 | "build" 29 | "-p" 30 | name 31 | "-j" 32 | jobs 33 | "@install" 34 | "@doc" {with-doc} 35 | ] 36 | ] 37 | url { 38 | src: "https://github.com/ocaml/dune/releases/download/2.5.1/dune-2.5.1.tbz" 39 | checksum: [ 40 | "sha256=8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b" 41 | "sha512=f209f12ced10c1abf8782bdb0143f4cec77795f7174d2cc75130afb1e01550b01f2f77b9e3ec4888efdad83d2f9878d179b39126f824f4e522f3ef4da34bf27e" 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /esy.lock/opam/dune-private-libs.2.5.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Private libraries of Dune" 3 | description: """ 4 | !!!!!!!!!!!!!!!!!!!!!! 5 | !!!!! DO NOT USE !!!!! 6 | !!!!!!!!!!!!!!!!!!!!!! 7 | 8 | This package contains code that is shared between various dune-xxx 9 | packages. However, it is not meant for public consumption and provides 10 | no stability guarantee. 11 | """ 12 | maintainer: ["Jane Street Group, LLC "] 13 | authors: ["Jane Street Group, LLC "] 14 | license: "MIT" 15 | homepage: "https://github.com/ocaml/dune" 16 | doc: "https://dune.readthedocs.io/" 17 | bug-reports: "https://github.com/ocaml/dune/issues" 18 | depends: [ 19 | "dune" {>= "2.3"} 20 | "ocaml" {>= "4.07"} 21 | ] 22 | dev-repo: "git+https://github.com/ocaml/dune.git" 23 | build: [ 24 | ["dune" "subst"] {pinned} 25 | [ 26 | "dune" 27 | "build" 28 | "-p" 29 | name 30 | "-j" 31 | jobs 32 | "@install" 33 | "@doc" {with-doc} 34 | ] 35 | ] 36 | url { 37 | src: "https://github.com/ocaml/dune/releases/download/2.5.1/dune-2.5.1.tbz" 38 | checksum: [ 39 | "sha256=8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b" 40 | "sha512=f209f12ced10c1abf8782bdb0143f4cec77795f7174d2cc75130afb1e01550b01f2f77b9e3ec4888efdad83d2f9878d179b39126f824f4e522f3ef4da34bf27e" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /esy.lock/opam/dune.2.5.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 | "jbuilder" {= "transition"} 33 | ] 34 | dev-repo: "git+https://github.com/ocaml/dune.git" 35 | build: [ 36 | # opam 2 sets OPAM_SWITCH_PREFIX, so we don't need a hardcoded path 37 | ["ocaml" "configure.ml" "--libdir" lib] {opam-version < "2"} 38 | ["ocaml" "bootstrap.ml" "-j" jobs] 39 | ["./dune.exe" "build" "-p" name "--profile" "dune-bootstrap" "-j" jobs] 40 | ] 41 | depends: [ 42 | # Please keep the lower bound in sync with .travis.yml, dune-project 43 | # and min_ocaml_version in bootstrap.ml 44 | ("ocaml" {>= "4.07"} | ("ocaml" {< "4.07~~"} & "ocamlfind-secondary")) 45 | "base-unix" 46 | "base-threads" 47 | ] 48 | url { 49 | src: "https://github.com/ocaml/dune/releases/download/2.5.1/dune-2.5.1.tbz" 50 | checksum: [ 51 | "sha256=8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b" 52 | "sha512=f209f12ced10c1abf8782bdb0143f4cec77795f7174d2cc75130afb1e01550b01f2f77b9e3ec4888efdad83d2f9878d179b39126f824f4e522f3ef4da34bf27e" 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /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/fix.20200131/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | ] 6 | homepage: "https://gitlab.inria.fr/fpottier/fix" 7 | dev-repo: "git+https://gitlab.inria.fr/fpottier/fix.git" 8 | bug-reports: "francois.pottier@inria.fr" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" { >= "4.03" } 14 | "dune" { >= "1.3" } 15 | ] 16 | synopsis: "Facilities for memoization and fixed points" 17 | url { 18 | src: 19 | "https://gitlab.inria.fr/fpottier/fix/repository/20200131/archive.tar.gz" 20 | checksum: [ 21 | "md5=991ff031666c662eaab638d2e0f4ac1d" 22 | "sha512=01c45a1d90b02ec0939e968b185a6a373ac6117e2287b9a26d3db9d71e9569d086cea50da60710fcab5c2ed9d3b4c72b76839c0651e436f1fb39c77dc7c04b5e" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /esy.lock/opam/fpath.0.7.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://erratique.ch/software/fpath" 5 | doc: "http://erratique.ch/software/fpath/doc" 6 | dev-repo: "git+http://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.01.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build & >= "0.9.0"} 15 | "result" 16 | "astring" 17 | ] 18 | build: [[ 19 | "ocaml" "pkg/pkg.ml" "build" 20 | "--dev-pkg" "%{pinned}%" ]] 21 | synopsis: "File system paths for OCaml" 22 | description: """ 23 | Fpath is an OCaml module for handling file system paths with POSIX or 24 | Windows conventions. Fpath processes paths without accessing the file 25 | system and is independent from any system library. 26 | 27 | Fpath depends on [Astring][astring] and is distributed under the ISC 28 | license. 29 | 30 | [astring]: http://erratique.ch/software/astring""" 31 | url { 32 | src: "http://erratique.ch/software/fpath/releases/fpath-0.7.2.tbz" 33 | checksum: "md5=52c7ecb0bf180088336f3c645875fa41" 34 | } 35 | -------------------------------------------------------------------------------- /esy.lock/opam/gen.0.5.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "simon.cruanes.2007@m4x.org" 3 | synopsis: "Iterators for OCaml, both restartable and consumable" 4 | build: [ 5 | ["dune" "build" "@install" "-p" name "-j" jobs] 6 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 7 | ["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc} 8 | ] 9 | depends: [ 10 | "dune" {>= "1.1"} 11 | "dune-configurator" 12 | "base-bytes" 13 | "odoc" {with-doc} 14 | "qcheck" {with-test} 15 | "qtest" {with-test} 16 | "ocaml" { >= "4.03.0" } 17 | ] 18 | tags: [ "gen" "iterator" "iter" "fold" ] 19 | homepage: "https://github.com/c-cube/gen/" 20 | doc: "https://c-cube.github.io/gen/" 21 | bug-reports: "https://github.com/c-cube/gen/issues" 22 | dev-repo: "git+https://github.com/c-cube/gen.git" 23 | authors: ["Simon Cruanes" "ELLIOTTCABLE"] 24 | url { 25 | src: "https://github.com/c-cube/gen/archive/0.5.3.tar.gz" 26 | checksum: [ 27 | "md5=f242db157222474b9715fef49a1259a4" 28 | "sha512=192178de106d2ae5f936caead8b21b4b9ec1b8fe35ba56296825900ea15a4ea702caf8824ac34d4478d107b954e22c3dffd81f12d4c08fbd6d9760f49a0deb14" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /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/menhir.20200211/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/20200211/archive.tar.gz" 23 | checksum: [ 24 | "md5=01577e5f15380c35bdaa8fd818204560" 25 | "sha512=a686c4b047d5236c425afcd7f179964191268ff448b8d18510579d742a7256855049bc4fe568bb8f1b0d6cbfb758d95cd05e621e3410b75245bb799d623725d6" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /esy.lock/opam/menhirLib.20200624/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | "Yann Régis-Gianas " 6 | ] 7 | homepage: "http://gitlab.inria.fr/fpottier/menhir" 8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" 9 | bug-reports: "menhir@inria.fr" 10 | build: [ 11 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" { >= "4.02.3" } 15 | "dune" { >= "2.0.0" } 16 | ] 17 | conflicts: [ 18 | "menhir" { != version } 19 | ] 20 | synopsis: "Runtime support library for parsers generated by Menhir" 21 | url { 22 | src: 23 | "https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz" 24 | checksum: [ 25 | "md5=c37ff53a4a69059e1f8223067b91bb8b" 26 | "sha512=68cd165bd65c93fc9b14820a032b6d760674b3e811d8536c2e26e10f9fc5892720564f109484f12f8d08d849c2983c2eaf350d76ab1122a5b8a3c7674ab2bd39" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /esy.lock/opam/menhirSdk.20200624/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | "Yann Régis-Gianas " 6 | ] 7 | homepage: "http://gitlab.inria.fr/fpottier/menhir" 8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" 9 | bug-reports: "menhir@inria.fr" 10 | build: [ 11 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" { >= "4.02.3" } 15 | "dune" { >= "2.0.0" } 16 | ] 17 | conflicts: [ 18 | "menhir" { != version } 19 | ] 20 | synopsis: "Compile-time library for auxiliary tools related to Menhir" 21 | url { 22 | src: 23 | "https://gitlab.inria.fr/fpottier/menhir/repository/20200624/archive.tar.gz" 24 | checksum: [ 25 | "md5=c37ff53a4a69059e1f8223067b91bb8b" 26 | "sha512=68cd165bd65c93fc9b14820a032b6d760674b3e811d8536c2e26e10f9fc5892720564f109484f12f8d08d849c2983c2eaf350d76ab1122a5b8a3c7674ab2bd39" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /esy.lock/opam/merlin-extend.0.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Frederic Bour " 3 | authors: "Frederic Bour " 4 | homepage: "https://github.com/let-def/merlin-extend" 5 | bug-reports: "https://github.com/let-def/merlin-extend" 6 | license: "MIT" 7 | dev-repo: "git+https://github.com/let-def/merlin-extend.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "dune" {>= "1.0"} 14 | "cppo" {build} 15 | "ocaml" {>= "4.02.3" & < "4.11"} 16 | ] 17 | synopsis: "A protocol to provide custom frontend to Merlin" 18 | description: """ 19 | This protocol allows to replace the OCaml frontend of Merlin. 20 | It extends what used to be done with the `-pp' flag to handle a few more cases.""" 21 | doc: "https://let-def.github.io/merlin-extend" 22 | url { 23 | src: 24 | "https://github.com/let-def/merlin-extend/releases/download/v0.5/merlin-extend-v0.5.tbz" 25 | checksum: [ 26 | "sha256=ca3a38c360c7d4827eb4789abf7a6aa4b6e3b4e3c3ef69a5be64dce4601ec227" 27 | "sha512=55c5a3637337abb8ca8db679128a81ca8ccce567bc214d55b2e6444dc0e905b74c64d629bdea2457d0fe4be5306414feefcdbc4d4761fdafd59aa107550936b6" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /esy.lock/opam/ocaml-migrate-parsetree.1.7.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "frederic.bour@lakaban.net" 3 | authors: [ 4 | "Frédéric Bour " 5 | "Jérémie Dimino " 6 | ] 7 | license: "LGPL-2.1 with OCaml linking exception" 8 | homepage: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree" 9 | bug-reports: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/issues" 10 | dev-repo: "git+https://github.com/ocaml-ppx/ocaml-migrate-parsetree.git" 11 | doc: "https://ocaml-ppx.github.io/ocaml-migrate-parsetree/" 12 | tags: [ "syntax" "org:ocamllabs" ] 13 | build: [ 14 | ["dune" "build" "-p" name "-j" jobs] 15 | ] 16 | depends: [ 17 | "result" 18 | "ppx_derivers" 19 | "dune" {>= "1.9.0"} 20 | "ocaml" {>= "4.02.3" & < "4.12"} 21 | ] 22 | synopsis: "Convert OCaml parsetrees between different versions" 23 | description: """ 24 | Convert OCaml parsetrees between different versions 25 | 26 | This library converts parsetrees, outcometree and ast mappers between 27 | different OCaml versions. High-level functions help making PPX 28 | rewriters independent of a compiler version. 29 | """ 30 | url { 31 | src: 32 | "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v1.7.3/ocaml-migrate-parsetree-v1.7.3.tbz" 33 | checksum: [ 34 | "sha256=6d85717bcf476b87f290714872ed4fbde0233dc899c3158a27f439d70224fb55" 35 | "sha512=fe9c74a244d160d973d8ca62e356edad4c872fc46471ddc668f854456d3979576895d446d49da2aee61c65b441b72c573225b0b254ab2eac4a0fb4debdbce9d4" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /esy.lock/opam/ocaml-secondary-compiler.4.08.1-1/files/0001-Don-t-build-manpages-for-stdlib-docs.patch: -------------------------------------------------------------------------------- 1 | From 0cf3c6ad7ce2a2b2806faceccfb0a9321da5e22a Mon Sep 17 00:00:00 2001 2 | From: David Allsopp 3 | Date: Fri, 26 Jul 2019 12:12:19 +0100 4 | Subject: [PATCH] Don't build manpages for stdlib docs 5 | --- 6 | ocamldoc/Makefile | 2 +- 7 | 1 file changed, 1 insertion(+), 1 deletion(-) 8 | 9 | diff --git a/ocamldoc/Makefile b/ocamldoc/Makefile 10 | index b109815071..e31e441f61 100644 11 | --- a/ocamldoc/Makefile 12 | +++ b/ocamldoc/Makefile 13 | @@ -170,7 +170,7 @@ LIBCMIFILES = $(LIBCMOFILES:.cmo=.cmi) 14 | 15 | 16 | .PHONY: all 17 | -all: lib exe generators manpages 18 | +all: lib exe generators 19 | 20 | manpages: generators 21 | 22 | -- 23 | 2.20.1 24 | 25 | -------------------------------------------------------------------------------- /esy.lock/opam/ocaml-secondary-compiler.4.08.1-1/files/0001-Fix-failure-to-install-tools-links.patch: -------------------------------------------------------------------------------- 1 | From 705739fa54260b7a0e6cbba0b5a99e52c79f9c09 Mon Sep 17 00:00:00 2001 2 | From: David Allsopp 3 | Date: Tue, 6 Aug 2019 09:23:06 +0100 4 | Subject: [PATCH] Fix failure to install tools links 5 | 6 | In --disable-installing-bytecode-programs mode, the .opt version of the 7 | tools is installed, but the symlink for the tool itself is not created. 8 | --- 9 | tools/Makefile | 1 + 10 | 1 file changed, 1 insertion(+) 11 | 12 | diff --git a/tools/Makefile b/tools/Makefile 13 | index 530dd37f34..1b3014a3ab 100644 14 | --- a/tools/Makefile 15 | +++ b/tools/Makefile 16 | @@ -197,6 +197,7 @@ else 17 | do \ 18 | if test -f "$$i".opt; then \ 19 | $(INSTALL_PROG) "$$i.opt" "$(INSTALL_BINDIR)/$$i.opt$(EXE)"; \ 20 | + (cd "$(INSTALL_BINDIR)/" && $(LN) "$$i.opt$(EXE)" "$$i$(EXE)"); \ 21 | fi; \ 22 | done 23 | endif 24 | -- 25 | 2.20.1 26 | 27 | -------------------------------------------------------------------------------- /esy.lock/opam/ocaml-secondary-compiler.4.08.1-1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "OCaml 4.08.1 Secondary Switch Compiler" 3 | maintainer: "platform@lists.ocaml.org" 4 | authors: "Xavier Leroy and many contributors" 5 | homepage: "https://ocaml.org" 6 | bug-reports: "https://github.com/ocaml/ocaml/issues" 7 | dev-repo: "git://github.com/ocaml/ocaml" 8 | depends: "ocaml" {< "4.08.0" | >= "4.09~"} 9 | build: [ 10 | [ 11 | "./configure" 12 | "--prefix=%{_:share}%" 13 | "--libdir=%{_:share}%/lib" 14 | "--disable-debugger" 15 | "--disable-installing-bytecode-programs" 16 | "--disable-debug-runtime" 17 | "--disable-instrumented-runtime" 18 | "--disable-graph-lib" 19 | "CC=cc" {os = "openbsd" | os = "freebsd" | os = "macos"} 20 | "ASPP=cc -c" {os = "openbsd" | os = "freebsd" | os = "macos"} 21 | ] 22 | [make "-j%{jobs}%" {os != "cygwin"} "world.opt"] 23 | ] 24 | install: [make "install"] 25 | url { 26 | src: "https://github.com/ocaml/ocaml/archive/4.08.1.tar.gz" 27 | checksum: "md5=723b6bfe8cf5abcbccc6911143f71055" 28 | } 29 | extra-files: [ 30 | ["0001-Don-t-build-manpages-for-stdlib-docs.patch" "md5=6caa580fe6031c109d2dc96b19bd40cd"] 31 | ["0001-Fix-failure-to-install-tools-links.patch" "md5=e973762c0b3d62b0b25a26468086fae3"] 32 | ] 33 | patches: [ 34 | "0001-Don-t-build-manpages-for-stdlib-docs.patch" 35 | "0001-Fix-failure-to-install-tools-links.patch" 36 | ] 37 | post-messages: [ 38 | "A failure in the middle of the build may be caused by build parallelism 39 | (enabled by default). 40 | Please file a bug report at https://github.com/ocaml/ocaml/issues" 41 | {failure & jobs > 1 & os != "cygwin"} 42 | "You can try installing again including --jobs=1 43 | to force a sequential build instead." 44 | {failure & jobs > 1 & os != "cygwin" & opam-version >= "2.0.5"} 45 | ] 46 | description: "Installs an additional compiler to the opam switch in 47 | %{_:share}%/ocaml-secondary-compiler which can be accessed using 48 | `ocamlfind -toolchain secondary`." 49 | -------------------------------------------------------------------------------- /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/ocamlfind-secondary.1.8.1/files/META.in: -------------------------------------------------------------------------------- 1 | description = "OCaml Secondary Compiler" 2 | version = "%{ocaml-secondary-compiler:version}%" 3 | directory = "%{ocaml-secondary-compiler:share}%/bin" 4 | -------------------------------------------------------------------------------- /esy.lock/opam/ocamlfind-secondary.1.8.1/files/ocaml-secondary-compiler.conf.in: -------------------------------------------------------------------------------- 1 | path(secondary) = "%{ocaml-secondary-compiler:share}%/lib" 2 | destdir(secondary) = "%{ocaml-secondary-compiler:share}%/lib" 3 | stdlib(secondary) = "%{ocaml-secondary-compiler:share}%/lib" 4 | ocamlc(secondary) = "%{ocaml-secondary-compiler:share}%/bin/ocamlc" 5 | ocamlopt(secondary) = "%{ocaml-secondary-compiler:share}%/bin/ocamlopt" 6 | ocamlcp(secondary) = "%{ocaml-secondary-compiler:share}%/bin/ocamlcp" 7 | ocamlmklib(secondary) = "%{ocaml-secondary-compiler:share}%/bin/ocamlmklib" 8 | ocamlmktop(secondary) = "%{ocaml-secondary-compiler:share}%/bin/ocamlmktop" 9 | ocamldoc(secondary) = "%{ocaml-secondary-compiler:share}%/bin/ocamldoc" 10 | ocamldep(secondary) = "%{ocaml-secondary-compiler:share}%/bin/ocamldep" 11 | -------------------------------------------------------------------------------- /esy.lock/opam/ocamlfind-secondary.1.8.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "David Allsopp " 3 | homepage: "https://github.com/ocaml/opam-repository" 4 | bug-reports: "https://github.com/ocaml/opam-repository/issues" 5 | build: ["./configure" "-sitelib" "%{ocaml-secondary-compiler:share}%/lib" "-no-camlp4"] 6 | install: [ 7 | [make "install-meta"] 8 | ["mkdir" "-p" "%{lib}%/findlib.conf.d/"] 9 | ["cp" "ocaml-secondary-compiler.conf" "%{lib}%/findlib.conf.d/"] 10 | ["mkdir" "-p" "%{ocaml-secondary-compiler:share}%/lib/ocaml"] 11 | ["cp" "META" "%{ocaml-secondary-compiler:share}%/lib/ocaml"] 12 | ] 13 | depends: [ 14 | "ocaml-secondary-compiler" 15 | "ocamlfind" {= "1.8.1"} 16 | ] 17 | synopsis: "ocamlfind support for ocaml-secondary-compiler" 18 | description: """ 19 | Exposes the compiler built by the ocaml-secondary-compielr package via 20 | -toolchain secondary. A virtual package called ocaml is also installed to 21 | locate the binary directory via `ocamlfind -toolchain secondary query ocaml`.""" 22 | authors: ["Gerd Stolpmann " "David Allsopp "] 23 | substs: ["META" "ocaml-secondary-compiler.conf"] 24 | extra-files: [ 25 | ["META.in" "md5=8c6ea8a0158a33ed87e6c38a7d686d49"] 26 | ["ocaml-secondary-compiler.conf.in" "md5=367a7bb68e2e1e65a31356421ddc809c"] 27 | ] 28 | url { 29 | src: "http://download.camlcity.org/download/findlib-1.8.1.tar.gz" 30 | checksum: "md5=18ca650982c15536616dea0e422cbd8c" 31 | mirrors: "http://download2.camlcity.org/download/findlib-1.8.1.tar.gz" 32 | } 33 | -------------------------------------------------------------------------------- /esy.lock/opam/ocamlfind.1.8.1/files/ocaml-stub: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | BINDIR=$(dirname "$(command -v ocamlc)") 4 | "$BINDIR/ocaml" -I "$OCAML_TOPLEVEL_PATH" "$@" 5 | -------------------------------------------------------------------------------- /esy.lock/opam/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/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/ocamlformat.0.14.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "OCamlFormat Team " 3 | authors: "Josh Berdine " 4 | homepage: "https://github.com/ocaml-ppx/ocamlformat" 5 | bug-reports: "https://github.com/ocaml-ppx/ocamlformat/issues" 6 | dev-repo: "git+https://github.com/ocaml-ppx/ocamlformat.git" 7 | license: "MIT" 8 | build: [ 9 | ["ocaml" "tools/gen_version.mlt" "lib/Version.ml" version] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.06" & < "4.11"} 15 | "alcotest" {with-test} 16 | "base" {>= "v0.11.0" & < "v0.14"} 17 | "base-unix" 18 | "cmdliner" 19 | "dune" {>= "2.2.0"} 20 | "fix" 21 | "fpath" 22 | "menhir" 23 | "ocaml-migrate-parsetree" {>= "1.5.0"} 24 | "ocp-indent" {with-test} 25 | "odoc" {>= "1.4.2"} 26 | "re" 27 | "stdio" {< "v0.14"} 28 | "uuseg" {>= "10.0.0"} 29 | "uutf" {>= "1.0.1"} 30 | ] 31 | synopsis: "Auto-formatter for OCaml code" 32 | description: "OCamlFormat is a tool to automatically format OCaml code in a uniform style." 33 | url { 34 | src: 35 | "https://github.com/ocaml-ppx/ocamlformat/releases/download/0.14.2/ocamlformat-0.14.2.tbz" 36 | checksum: [ 37 | "sha256=5f9f7ac312a8f62315e25536f87601efc7788114a4a1eacc0507acf474f8f09a" 38 | "sha512=9f526031c2225b2d3d21c1f241517b9fb87752570645df587bace7afaa5e0e60922f873843343349a2f8f80d1d3e061ce23ee5199fa61a709b877c328a6f7729" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /esy.lock/opam/odoc.1.5.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | 3 | homepage: "http://github.com/ocaml/odoc" 4 | doc: "https://ocaml.github.io/odoc/" 5 | bug-reports: "https://github.com/ocaml/odoc/issues" 6 | license: "ISC" 7 | 8 | authors: [ 9 | "Thomas Refis " 10 | "David Sheets " 11 | "Leo White " 12 | "Anton Bachin " 13 | "Jon Ludlam " 14 | ] 15 | maintainer: "Jon Ludlam " 16 | dev-repo: "git+https://github.com/ocaml/odoc.git" 17 | 18 | synopsis: "OCaml documentation generator" 19 | description: """ 20 | Odoc is a documentation generator for OCaml. It reads doc comments, 21 | delimited with `(** ... *)`, and outputs HTML. 22 | """ 23 | 24 | depends: [ 25 | "astring" 26 | "cmdliner" 27 | "cppo" {build} 28 | "dune" 29 | "fpath" 30 | "ocaml" {>= "4.02.0"} 31 | "result" 32 | "tyxml" {>= "4.3.0"} 33 | 34 | "alcotest" {dev & >= "0.8.3"} 35 | "markup" {dev & >= "0.8.0"} 36 | "ocamlfind" {dev} 37 | "sexplib" {dev & >= "113.33.00"} 38 | 39 | "bisect_ppx" {with-test & >= "1.3.0"} 40 | ] 41 | 42 | build: [ 43 | ["dune" "subst"] {pinned} 44 | ["dune" "build" "-p" name "-j" jobs] 45 | ] 46 | url { 47 | src: "https://github.com/ocaml/odoc/releases/download/1.5.1/odoc-1.5.1.tbz" 48 | checksum: [ 49 | "sha256=ea14721344e2aab6b63f2884782d37e94a1ed8ab91147a1c08a29710d99d354f" 50 | "sha512=b2d12277d61e1e52354128d459d2ad49bea24a4d46db89790769c2843c4b00beaee3ea7d0215211079174c0bd893de6bf52dcbb71e46622728be7491d91058b2" 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /esy.lock/opam/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/ppx_deriving.4.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "thierry.martinez@inria.fr" 3 | authors: [ "whitequark " ] 4 | license: "MIT" 5 | homepage: "https://github.com/ocaml-ppx/ppx_deriving" 6 | doc: "https://ocaml-ppx.github.io/ppx_deriving/" 7 | bug-reports: "https://github.com/ocaml-ppx/ppx_deriving/issues" 8 | dev-repo: "git+https://github.com/ocaml-ppx/ppx_deriving.git" 9 | tags: [ "syntax" ] 10 | build: [ 11 | ["dune" "subst"] {pinned} 12 | ["dune" "build" "-p" name "-j" jobs] 13 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 14 | ["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc} 15 | ] 16 | depends: [ 17 | "dune" {>= "1.6.3"} 18 | "cppo" {build} 19 | "ppxfind" {build} 20 | "ocaml-migrate-parsetree" 21 | "ppx_derivers" 22 | "ppx_tools" {>= "4.02.3"} 23 | "result" 24 | "ounit" {with-test} 25 | "ocaml" {>= "4.02" & < "4.12.0"} 26 | ] 27 | synopsis: "Type-driven code generation for OCaml >=4.02.2" 28 | description: """ 29 | ppx_deriving provides common infrastructure for generating 30 | code based on type definitions, and a set of useful plugins 31 | for common tasks. 32 | """ 33 | url { 34 | src: "https://github.com/ocaml-ppx/ppx_deriving/archive/v4.5.tar.gz" 35 | checksum: "sha512=f79153c5231ba1e03a3491fde95ca82ecb62fe05b60a649a374d2fbc5ea5dd9242126de7dfbe917c22fd7077c026c940e18c6b36c5ce0ec4bb6e07f11d2b710b"} 36 | -------------------------------------------------------------------------------- /esy.lock/opam/ppx_tools.6.1+4.10.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Tools for authors of ppx rewriters and other syntactic tools" 3 | maintainer: "alain.frisch@lexifi.com" 4 | authors: "Alain Frisch " 5 | license: "MIT" 6 | tags: [ "syntax" ] 7 | homepage: "https://github.com/ocaml-ppx/ppx_tools" 8 | bug-reports: "https://github.com/ocaml-ppx/ppx_tools/issues" 9 | dev-repo: "git://github.com/ocaml-ppx/ppx_tools.git" 10 | build: ["dune" "build" "-p" name "-j" jobs] 11 | depends: [ 12 | "ocaml" {>= "4.10.0" & < "4.11"} 13 | "dune" {>= "1.6"} 14 | ] 15 | url { 16 | src: "https://github.com/ocaml-ppx/ppx_tools/archive/6.1+4.10.0.tar.gz" 17 | checksum: [ 18 | "md5=02fe2fab316e4a8b39d899e5839d7eec" 19 | "sha512=596dd6c9682eb1f36376a9fb60b9dff58ce7416bd83d5d0f5b36517b917b9466c99f621bcccc012255eefcd07d9c1663c2900eae60d89492c2e62c3173ed9311" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /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"} 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/ppx_yojson_conv_lib.v0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/ppx_yojson_conv_lib" 5 | bug-reports: "https://github.com/janestreet/ppx_yojson_conv_lib/issues" 6 | dev-repo: "git+https://github.com/janestreet/ppx_yojson_conv_lib.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/ppx_yojson_conv_lib/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.02.3"} 14 | "dune" {>= "2.0.0"} 15 | "yojson" {>= "1.7.0"} 16 | ] 17 | synopsis: "Runtime lib for ppx_yojson_conv" 18 | description: " 19 | Part of the Jane Street's PPX rewriters collection. 20 | " 21 | url { 22 | src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz" 23 | checksum: "md5=e23c5593a7211ad4fb09e26e9a74698a" 24 | } 25 | -------------------------------------------------------------------------------- /esy.lock/opam/ppxfind.1.4/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Tool combining ocamlfind and ppx" 3 | description: """ 4 | Ppxfind is a small command line tool that among other things allows 5 | to use old style ppx rewriters with jbuilder. 6 | """ 7 | maintainer: ["Jérémie Dimino "] 8 | authors: ["Jérémie Dimino "] 9 | license: "BSD3" 10 | homepage: "https://github.com/jeremiedimino/ppxfind" 11 | doc: "https://jeremiedimino.github.io/ppxfind/" 12 | bug-reports: "https://github.com/jeremiedimino/ppxfind/issues" 13 | depends: [ 14 | "dune" {>= "2.0"} 15 | "ocaml-migrate-parsetree" {>= "1.6.0"} 16 | "ocamlfind" 17 | "ocaml" {>= "4.02.3"} 18 | ] 19 | build: [ 20 | ["dune" "subst"] {pinned} 21 | [ 22 | "dune" 23 | "build" 24 | "-p" 25 | name 26 | "-j" 27 | jobs 28 | "@install" 29 | "@runtest" {with-test} 30 | "@doc" {with-doc} 31 | ] 32 | ] 33 | dev-repo: "git+https://github.com/jeremiedimino/ppxfind.git" 34 | url { 35 | src: 36 | "https://github.com/jeremiedimino/ppxfind/releases/download/1.4/ppxfind-1.4.tbz" 37 | checksum: [ 38 | "sha256=98291c69f04f7f7b7cdad1b5d786c70fc595559d4663cc04cb711ac132db4971" 39 | "sha512=f80b0ee09fb536aa9f154da80d06a1b68ba3b10605fb7338bd6449beb5c8d00e983bf66b4a63e12659ae1410fea56d0a2c4cfd43584616438504628035bcb981" 40 | ] 41 | } 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/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/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/sedlex.2.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "An OCaml lexer generator for Unicode" 3 | description: " 4 | sedlex is a lexer generator for OCaml. It is similar to ocamllex, but supports 5 | Unicode. Unlike ocamllex, sedlex allows lexer specifications within regular 6 | OCaml source files. Lexing specific constructs are provided via a ppx syntax 7 | extension. 8 | " 9 | license: "MIT" 10 | doc: "https://ocaml-community.github.io/sedlex/index.html" 11 | maintainer: "Alain Frisch " 12 | authors: [ 13 | "Alain Frisch " 14 | "https://github.com/ocaml-community/sedlex/graphs/contributors" 15 | ] 16 | homepage: "https://github.com/ocaml-community/sedlex" 17 | dev-repo: "git+https://github.com/ocaml-community/sedlex.git" 18 | bug-reports: "https://github.com/ocaml-community/sedlex/issues" 19 | build: [ 20 | ["dune" "build" "-p" name "-j" jobs] 21 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 22 | ["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc} 23 | ] 24 | depends: [ 25 | "ocaml" {>= "4.02.3"} 26 | "dune" {>= "1.8"} 27 | "ppx_tools_versioned" {>= "5.2.3"} 28 | "ocaml-migrate-parsetree" 29 | "gen" 30 | "uchar" 31 | ] 32 | conflicts: [ 33 | "wcs-lib" {= "2017-05-26.03" | = "2017-05-26.04"} 34 | ] 35 | url { 36 | src: "https://github.com/ocaml-community/sedlex/archive/v2.2.tar.gz" 37 | checksum: [ 38 | "md5=5bb2b819ac42959b8d7583abd2a2e610" 39 | "sha512=c38940654d8d2a4b8f627bc9109b0fd983c520d8db05bf4b514ddc05cf50946c086d3558dfced64cc8f2b4eaabc6155426eb44ee6d903e3520ebb65daadf990a" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /esy.lock/opam/seq.base/files/META.seq: -------------------------------------------------------------------------------- 1 | name="seq" 2 | version="[distributed with OCaml 4.07 or above]" 3 | description="dummy backward-compatibility package for iterators" 4 | requires="" 5 | -------------------------------------------------------------------------------- /esy.lock/opam/seq.base/files/seq.install: -------------------------------------------------------------------------------- 1 | lib:[ 2 | "META.seq" {"META"} 3 | ] 4 | -------------------------------------------------------------------------------- /esy.lock/opam/seq.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: " " 3 | authors: " " 4 | homepage: " " 5 | depends: [ 6 | "ocaml" {>= "4.07.0"} 7 | ] 8 | dev-repo: "git+https://github.com/ocaml/ocaml.git" 9 | bug-reports: "https://caml.inria.fr/mantis/main_page.php" 10 | synopsis: 11 | "Compatibility package for OCaml's standard iterator type starting from 4.07." 12 | extra-files: [ 13 | ["seq.install" "md5=026b31e1df290373198373d5aaa26e42"] 14 | ["META.seq" "md5=b33c8a1a6c7ed797816ce27df4855107"] 15 | ] 16 | -------------------------------------------------------------------------------- /esy.lock/opam/sexplib0.v0.13.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/sexplib0" 5 | bug-reports: "https://github.com/janestreet/sexplib0/issues" 6 | dev-repo: "git+https://github.com/janestreet/sexplib0.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/sexplib0/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.04.2"} 14 | "dune" {>= "1.5.1"} 15 | ] 16 | synopsis: "Library containing the definition of S-expressions and some base converters" 17 | description: " 18 | Part of Jane Street's Core library 19 | The Core suite of libraries is an industrial strength alternative to 20 | OCaml's standard library that was developed by Jane Street, the 21 | largest industrial user of OCaml. 22 | " 23 | url { 24 | src: "https://ocaml.janestreet.com/ocaml-core/v0.13/files/sexplib0-v0.13.0.tar.gz" 25 | checksum: "md5=f8a715dffda5599cfae0cb4031d57abe" 26 | } 27 | -------------------------------------------------------------------------------- /esy.lock/opam/stdio.v0.13.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/stdio" 5 | bug-reports: "https://github.com/janestreet/stdio/issues" 6 | dev-repo: "git+https://github.com/janestreet/stdio.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/stdio/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.04.2"} 14 | "base" {>= "v0.13" & < "v0.14"} 15 | "dune" {>= "1.5.1"} 16 | ] 17 | synopsis: "Standard IO library for OCaml" 18 | description: " 19 | Stdio implements simple input/output functionalities for OCaml. 20 | 21 | It re-exports the input/output functions of the OCaml standard 22 | libraries using a more consistent API. 23 | " 24 | url { 25 | src: "https://ocaml.janestreet.com/ocaml-core/v0.13/files/stdio-v0.13.0.tar.gz" 26 | checksum: "md5=48ef28512ddd51ff9885649dd1fab91d" 27 | } 28 | -------------------------------------------------------------------------------- /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 | "dune" 12 | "ocaml" {>= "4.02.3"} 13 | ] 14 | build: [ "dune" "build" "-p" name "-j" jobs ] 15 | synopsis: "Backport some of the new stdlib features to older compiler" 16 | description: """ 17 | Backport some of the new stdlib features to older compiler, 18 | such as the Stdlib module. 19 | 20 | This allows projects that require compatibility with older compiler to 21 | use these new features in their code. 22 | """ 23 | url { 24 | src: 25 | "https://github.com/ocaml/stdlib-shims/releases/download/0.1.0/stdlib-shims-0.1.0.tbz" 26 | checksum: "md5=12b5704eed70c6bff5ac39a16db1425d" 27 | } 28 | -------------------------------------------------------------------------------- /esy.lock/opam/topkg.1.0.1/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.1.tbz" 47 | checksum: "16b90e066d8972a5ef59655e7c28b3e9" 48 | } 49 | -------------------------------------------------------------------------------- /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/uchar.0.0.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["Daniel Bünzli "] 4 | homepage: "http://ocaml.org" 5 | doc: "https://ocaml.github.io/uchar/" 6 | dev-repo: "git+https://github.com/ocaml/uchar.git" 7 | bug-reports: "https://github.com/ocaml/uchar/issues" 8 | tags: [ "text" "character" "unicode" "compatibility" "org:ocaml.org" ] 9 | license: "typeof OCaml system" 10 | depends: [ 11 | "ocaml" {>= "3.12.0"} 12 | "ocamlbuild" {build} 13 | ] 14 | build: [ 15 | ["ocaml" "pkg/git.ml"] 16 | [ 17 | "ocaml" 18 | "pkg/build.ml" 19 | "native=%{ocaml:native}%" 20 | "native-dynlink=%{ocaml:native-dynlink}%" 21 | ] 22 | ] 23 | synopsis: "Compatibility library for OCaml's Uchar module" 24 | description: """ 25 | The `uchar` package provides a compatibility library for the 26 | [`Uchar`][1] module introduced in OCaml 4.03. 27 | 28 | The `uchar` package is distributed under the license of the OCaml 29 | compiler. See [LICENSE](LICENSE) for details. 30 | 31 | [1]: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Uchar.html""" 32 | url { 33 | src: 34 | "https://github.com/ocaml/uchar/releases/download/v0.0.2/uchar-0.0.2.tbz" 35 | checksum: "md5=c9ba2c738d264c420c642f7bb1cf4a36" 36 | } 37 | -------------------------------------------------------------------------------- /esy.lock/opam/uucp.13.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: [ "The uucp programmers" ] 4 | homepage: "https://erratique.ch/software/uucp" 5 | doc: "https://erratique.ch/software/uucp/doc/Uucp" 6 | dev-repo: "git+https://erratique.ch/repos/uucp.git" 7 | bug-reports: "https://github.com/dbuenzli/uucp/issues" 8 | tags: [ "unicode" "text" "character" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ 11 | "ocaml" {>= "4.03.0"} 12 | "ocamlfind" {build} 13 | "ocamlbuild" {build} 14 | "topkg" {build} 15 | "uucd" {with-test} # dev really 16 | "uunf" {with-test} 17 | "uutf" {with-test} 18 | ] 19 | depopts: [ "uunf" "uutf" "cmdliner" ] 20 | conflicts: [ "uutf" {< "1.0.1"} 21 | "cmdliner" {< "1.0.0"} ] 22 | build: [[ 23 | "ocaml" "pkg/pkg.ml" "build" 24 | "--dev-pkg" "%{pinned}%" 25 | "--with-uutf" "%{uutf:installed}%" 26 | "--with-uunf" "%{uunf:installed}%" 27 | "--with-cmdliner" "%{cmdliner:installed}%" 28 | ]] 29 | 30 | synopsis: """Unicode character properties for OCaml""" 31 | description: """\ 32 | 33 | Uucp is an OCaml library providing efficient access to a selection of 34 | character properties of the [Unicode character database][1]. 35 | 36 | Uucp is independent from any Unicode text data structure and has no 37 | dependencies. It is distributed under the ISC license. 38 | 39 | [1]: http://www.unicode.org/reports/tr44/ 40 | """ 41 | url { 42 | archive: "https://erratique.ch/software/uucp/releases/uucp-13.0.0.tbz" 43 | checksum: "07e706249ddb2d02f0fa298804d3c739" 44 | } 45 | -------------------------------------------------------------------------------- /esy.lock/opam/uuseg.13.0.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Daniel Bünzli " 3 | authors: ["The uuseg programmers"] 4 | homepage: "https://erratique.ch/software/uuseg" 5 | doc: "https://erratique.ch/software/uuseg" 6 | dev-repo: "git+https://erratique.ch/repos/uuseg.git" 7 | bug-reports: "https://github.com/dbuenzli/uuseg/issues" 8 | tags: [ "segmentation" "text" "unicode" "org:erratique" ] 9 | license: "ISC" 10 | depends: [ "ocaml" {>= "4.03.0"} 11 | "ocamlfind" {build} 12 | "ocamlbuild" {build} 13 | "topkg" {build} 14 | "uucp" {>= "13.0.0" & < "14.0.0"} ] 15 | depopts: [ "uutf" 16 | "cmdliner" 17 | "uutf" {with-test} 18 | "cmdliner" {with-test} ] 19 | conflicts: [ "uutf" {< "1.0.0"} ] 20 | build: [[ 21 | "ocaml" "pkg/pkg.ml" "build" 22 | "--pinned" "%{pinned}%" 23 | "--with-uutf" "%{uutf:installed}%" 24 | "--with-cmdliner" "%{cmdliner:installed}%" ]] 25 | 26 | synopsis: """Unicode text segmentation for OCaml""" 27 | description: """\ 28 | 29 | Uuseg is an OCaml library for segmenting Unicode text. It implements 30 | the locale independent [Unicode text segmentation algorithms][1] to 31 | detect grapheme cluster, word and sentence boundaries and the 32 | [Unicode line breaking algorithm][2] to detect line break 33 | opportunities. 34 | 35 | The library is independent from any IO mechanism or Unicode text data 36 | structure and it can process text without a complete in-memory 37 | representation. 38 | 39 | Uuseg depends on [Uucp](http://erratique.ch/software/uucp) and 40 | optionally on [Uutf](http://erratique.ch/software/uutf) for support on 41 | OCaml UTF-X encoded strings. It is distributed under the ISC license. 42 | 43 | [1]: http://www.unicode.org/reports/tr29/ 44 | [2]: http://www.unicode.org/reports/tr14/ 45 | """ 46 | url { 47 | archive: "https://erratique.ch/software/uuseg/releases/uuseg-13.0.0.tbz" 48 | checksum: "a07a97fff61da604614ea8da0547ef6a" 49 | } 50 | -------------------------------------------------------------------------------- /esy.lock/opam/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/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/overrides/opam__s__dune_opam__c__2.5.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildsInSource": true, 3 | "build": [ 4 | [ 5 | "ocaml", 6 | "configure.ml", 7 | "--libdir", 8 | "#{self.lib}" 9 | ], 10 | [ 11 | "env", 12 | "-u", 13 | "OCAMLLIB", 14 | "ocaml", 15 | "bootstrap.ml" 16 | ], 17 | [ 18 | "./dune.exe", 19 | "build", 20 | "-p", 21 | "dune", 22 | "--profile", 23 | "dune-bootstrap" 24 | ] 25 | ], 26 | "install": "esy-installer dune.install", 27 | "buildEnv": { 28 | "OCAMLFIND_CONF": "$OCAMLFIND_SECONDARY_PREFIX/lib/findlib.conf.d/ocaml-secondary-compiler.conf", 29 | "OCAMLPATH": "#{ $OCAMLFIND_SECONDARY_PREFIX / 'lib' : ocaml.lib : $OCAML_SECONDARY_COMPILER_PREFIX / 'share' / 'ocaml-secondary-compiler' / 'lib' }" 30 | }, 31 | "dependencies": { 32 | "ocaml": "*" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__menhir_opam__c__20200211_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@opam/fix": "*" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__ocaml_secondary_compiler_opam__c__4.08.1_1_opam_override/files/clone-flexdll: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | # clone-flexdll 4 | # 5 | # Brings in flexdll, if necessary 6 | 7 | if [ -d "flexdll" ] && [ -f "flexdll/flexdll.c" ]; then 8 | echo "[Flexdll] Already present, no need to clone." 9 | else 10 | echo "[Flexdll] Cloning..." 11 | git clone https://github.com/esy-ocaml/flexdll.git 12 | cd flexdll 13 | git checkout f84baaeae463f96f9582883a9cfb7dd1096757ff 14 | cd .. 15 | echo "[Flexdll] Clone successful!" 16 | fi -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__ocaml_secondary_compiler_opam__c__4.08.1_1_opam_override/files/configure-windows: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | # configure-windows 4 | # 5 | # Creates a native Windows MingW build, based on: 6 | # https://github.com/ocaml/ocaml/blob/trunk/README.win32.adoc 7 | 8 | 9 | export prefix=C:/ocamlmgw64 10 | while : ; do 11 | case "$1" in 12 | "") break;; 13 | -prefix|--prefix) 14 | prefix=$2; shift;; 15 | esac 16 | shift 17 | done 18 | 19 | echo "[configure-windows] Setting up flexdll" 20 | ./clone-flexdll 21 | ./configure --build=x86_64-unknown-cygwin --host=x86_64-w64-mingw32 --prefix=$prefix 22 | make flexdll 23 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__ocaml_secondary_compiler_opam__c__4.08.1_1_opam_override/files/esy-build: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | 3 | # esy-build 4 | # 5 | # Wrapper to execute appropriate build strategy, based on platform 6 | 7 | set -u 8 | set -e 9 | set -o pipefail 10 | 11 | case "$(uname -s)" in 12 | CYGWIN*|MINGW32*|MSYS*) 13 | echo "[esy-build] Detected windows environment..." 14 | make -j4 world.opt 15 | make flexlink.opt 16 | ;; 17 | *) 18 | echo "[esy-build] Detected OSX / Linux environment" 19 | make -j4 world.opt 20 | ;; 21 | esac 22 | 23 | # Common build steps 24 | make install -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__ocaml_secondary_compiler_opam__c__4.08.1_1_opam_override/files/esy-configure: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | 3 | # esy-configure 4 | # 5 | # Wrapper to delegate to configuration to the 6 | # appropriate `configure` strategy based on the active platform. 7 | # 8 | # Today, OCaml has separate build strategies: 9 | # - Linux, OSX, Cygwin (gcc) - https://github.com/ocaml/ocaml/blob/trunk/INSTALL.adoc 10 | # - Windows, Cygin (mingw) - https://github.com/ocaml/ocaml/blob/trunk/README.win32.adoc 11 | # 12 | # We want `esy` to work cross-platform, so this is a shim script that will delegate to the 13 | # appropriate script depending on the platform. We assume that if the platform is `CYGWIN` 14 | # that the `mingw` (native executable) strategy is desired. 15 | 16 | set -u 17 | set -e 18 | set -o pipefail 19 | 20 | case "$(uname -s)" in 21 | CYGWIN*|MINGW32*|MSYS*) 22 | echo "[esy-configure] Detected windows environment..." 23 | ./configure-windows "$@" 24 | ;; 25 | *) 26 | echo "[esy-configure] Detected OSX / Linux environment" 27 | ./configure "$@" 28 | ;; 29 | esac -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__ocaml_secondary_compiler_opam__c__4.08.1_1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildEnv": { 3 | "PATH": "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" 4 | }, 5 | "build": [ 6 | [ 7 | "env", 8 | "-u", 9 | "OCAMLLIB", 10 | "bash", "./esy-configure", 11 | "--disable-cfi", 12 | "--prefix", "$cur__install/share/ocaml-secondary-compiler", 13 | "--libdir", "$cur__install/share/ocaml-secondary-compiler/lib", 14 | "--disable-debugger", 15 | "--disable-installing-bytecode-programs", 16 | "--disable-debug-runtime", 17 | "--disable-instrumented-runtime", 18 | "--disable-graph-lib" 19 | ], 20 | [ 21 | "env", 22 | "-u", 23 | "OCAMLLIB", 24 | "bash", "./esy-build" 25 | ] 26 | ], 27 | "buildsInSource": true 28 | } 29 | -------------------------------------------------------------------------------- /esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override/files/ocamlbuild-0.14.0.patch: -------------------------------------------------------------------------------- 1 | --- ./Makefile 2 | +++ ./Makefile 3 | @@ -213,7 +213,7 @@ 4 | rm -f man/ocamlbuild.1 5 | 6 | man/options_man.byte: src/ocamlbuild_pack.cmo 7 | - $(OCAMLC) $^ -I src man/options_man.ml -o man/options_man.byte 8 | + $(OCAMLC) -I +unix unix.cma $^ -I src man/options_man.ml -o man/options_man.byte 9 | 10 | clean:: 11 | rm -f man/options_man.cm* 12 | --- ./src/command.ml 13 | +++ ./src/command.ml 14 | @@ -148,9 +148,10 @@ 15 | let self = string_of_command_spec_with_calls call_with_tags call_with_target resolve_virtuals in 16 | let b = Buffer.create 256 in 17 | (* The best way to prevent bash from switching to its windows-style 18 | - * quote-handling is to prepend an empty string before the command name. *) 19 | + * quote-handling is to prepend an empty string before the command name. 20 | + * space seems to work, too - and the ouput is nicer *) 21 | if Sys.os_type = "Win32" then 22 | - Buffer.add_string b "''"; 23 | + Buffer.add_char b ' '; 24 | let first = ref true in 25 | let put_space () = 26 | if !first then 27 | @@ -260,7 +261,7 @@ 28 | 29 | let execute_many ?(quiet=false) ?(pretend=false) cmds = 30 | add_parallel_stat (List.length cmds); 31 | - let degraded = !*My_unix.is_degraded || Sys.os_type = "Win32" in 32 | + let degraded = !*My_unix.is_degraded in 33 | let jobs = !jobs in 34 | if jobs < 0 then invalid_arg "jobs < 0"; 35 | let max_jobs = if jobs = 0 then None else Some jobs in 36 | --- ./src/findlib.ml 37 | +++ ./src/findlib.ml 38 | @@ -66,9 +66,6 @@ 39 | (fun command -> lexer & Lexing.from_string & run_and_read command) 40 | command 41 | 42 | -let run_and_read command = 43 | - Printf.ksprintf run_and_read command 44 | - 45 | let rec query name = 46 | try 47 | Hashtbl.find packages name 48 | @@ -135,7 +132,8 @@ 49 | with Not_found -> s 50 | 51 | let list () = 52 | - List.map before_space (split_nl & run_and_read "%s list" ocamlfind) 53 | + let cmd = Shell.quote_filename_if_needed ocamlfind ^ " list" in 54 | + List.map before_space (split_nl & run_and_read cmd) 55 | 56 | (* The closure algorithm is easy because the dependencies are already closed 57 | and sorted for each package. We only have to make the union. We could also 58 | --- ./src/main.ml 59 | +++ ./src/main.ml 60 | @@ -162,6 +162,9 @@ 61 | Tags.mem "traverse" tags 62 | || List.exists (Pathname.is_prefix path_name) !Options.include_dirs 63 | || List.exists (Pathname.is_prefix path_name) target_dirs) 64 | + && ((* beware: !Options.build_dir is an absolute directory *) 65 | + Pathname.normalize !Options.build_dir 66 | + <> Pathname.normalize (Pathname.pwd/path_name)) 67 | end 68 | end 69 | end 70 | --- ./src/my_std.ml 71 | +++ ./src/my_std.ml 72 | @@ -271,13 +271,107 @@ 73 | try Array.iter (fun x -> if x = basename then raise Exit) a; false 74 | with Exit -> true 75 | 76 | +let command_plain = function 77 | +| [| |] -> 0 78 | +| margv -> 79 | + let rec waitpid a b = 80 | + match Unix.waitpid a b with 81 | + | exception (Unix.Unix_error(Unix.EINTR,_,_)) -> waitpid a b 82 | + | x -> x 83 | + in 84 | + let pid = Unix.(create_process margv.(0) margv stdin stdout stderr) in 85 | + let pid', process_status = waitpid [] pid in 86 | + assert (pid = pid'); 87 | + match process_status with 88 | + | Unix.WEXITED n -> n 89 | + | Unix.WSIGNALED _ -> 2 (* like OCaml's uncaught exceptions *) 90 | + | Unix.WSTOPPED _ -> 127 91 | + 92 | +(* can't use Lexers because of circular dependency *) 93 | +let split_path_win str = 94 | + let rec aux pos = 95 | + try 96 | + let i = String.index_from str pos ';' in 97 | + let len = i - pos in 98 | + if len = 0 then 99 | + aux (succ i) 100 | + else 101 | + String.sub str pos (i - pos) :: aux (succ i) 102 | + with Not_found | Invalid_argument _ -> 103 | + let len = String.length str - pos in 104 | + if len = 0 then [] else [String.sub str pos len] 105 | + in 106 | + aux 0 107 | + 108 | +let windows_shell = lazy begin 109 | + let rec iter = function 110 | + | [] -> [| "bash.exe" ; "--norc" ; "--noprofile" |] 111 | + | hd::tl -> 112 | + let dash = Filename.concat hd "dash.exe" in 113 | + if Sys.file_exists dash then [|dash|] else 114 | + let bash = Filename.concat hd "bash.exe" in 115 | + if Sys.file_exists bash = false then iter tl else 116 | + (* if sh.exe and bash.exe exist in the same dir, choose sh.exe *) 117 | + let sh = Filename.concat hd "sh.exe" in 118 | + if Sys.file_exists sh then [|sh|] else [|bash ; "--norc" ; "--noprofile"|] 119 | + in 120 | + split_path_win (try Sys.getenv "PATH" with Not_found -> "") |> iter 121 | +end 122 | + 123 | +let prep_windows_cmd cmd = 124 | + (* workaround known ocaml bug, remove later *) 125 | + if String.contains cmd '\t' && String.contains cmd ' ' = false then 126 | + " " ^ cmd 127 | + else 128 | + cmd 129 | + 130 | +let run_with_shell = function 131 | +| "" -> 0 132 | +| cmd -> 133 | + let cmd = prep_windows_cmd cmd in 134 | + let shell = Lazy.force windows_shell in 135 | + let qlen = Filename.quote cmd |> String.length in 136 | + (* old versions of dash had problems with bs *) 137 | + try 138 | + if qlen < 7_900 then 139 | + command_plain (Array.append shell [| "-ec" ; cmd |]) 140 | + else begin 141 | + (* it can still work, if the called command is a cygwin tool *) 142 | + let ch_closed = ref false in 143 | + let file_deleted = ref false in 144 | + let fln,ch = 145 | + Filename.open_temp_file 146 | + ~mode:[Open_binary] 147 | + "ocamlbuildtmp" 148 | + ".sh" 149 | + in 150 | + try 151 | + let f_slash = String.map ( fun x -> if x = '\\' then '/' else x ) fln in 152 | + output_string ch cmd; 153 | + ch_closed:= true; 154 | + close_out ch; 155 | + let ret = command_plain (Array.append shell [| "-e" ; f_slash |]) in 156 | + file_deleted:= true; 157 | + Sys.remove fln; 158 | + ret 159 | + with 160 | + | x -> 161 | + if !ch_closed = false then 162 | + close_out_noerr ch; 163 | + if !file_deleted = false then 164 | + (try Sys.remove fln with _ -> ()); 165 | + raise x 166 | + end 167 | + with 168 | + | (Unix.Unix_error _) as x -> 169 | + (* Sys.command doesn't raise an exception, so run_with_shell also won't 170 | + raise *) 171 | + Printexc.to_string x ^ ":" ^ cmd |> prerr_endline; 172 | + 1 173 | + 174 | let sys_command = 175 | - match Sys.os_type with 176 | - | "Win32" -> fun cmd -> 177 | - if cmd = "" then 0 else 178 | - let cmd = "bash --norc -c " ^ Filename.quote cmd in 179 | - Sys.command cmd 180 | - | _ -> fun cmd -> if cmd = "" then 0 else Sys.command cmd 181 | + if Sys.win32 then run_with_shell 182 | + else fun cmd -> if cmd = "" then 0 else Sys.command cmd 183 | 184 | (* FIXME warning fix and use Filename.concat *) 185 | let filename_concat x y = 186 | --- ./src/my_std.mli 187 | +++ ./src/my_std.mli 188 | @@ -69,3 +69,6 @@ 189 | 190 | val split_ocaml_version : (int * int * int * string) option 191 | (** (major, minor, patchlevel, rest) *) 192 | + 193 | +val windows_shell : string array Lazy.t 194 | +val prep_windows_cmd : string -> string 195 | --- ./src/ocamlbuild_executor.ml 196 | +++ ./src/ocamlbuild_executor.ml 197 | @@ -34,6 +34,8 @@ 198 | job_stdin : out_channel; 199 | job_stderr : in_channel; 200 | job_buffer : Buffer.t; 201 | + job_pid : int; 202 | + job_tmp_file: string option; 203 | mutable job_dying : bool; 204 | };; 205 | 206 | @@ -76,6 +78,61 @@ 207 | in 208 | loop 0 209 | ;; 210 | + 211 | +let open_process_full_win cmd env = 212 | + let (in_read, in_write) = Unix.pipe () in 213 | + let (out_read, out_write) = Unix.pipe () in 214 | + let (err_read, err_write) = Unix.pipe () in 215 | + Unix.set_close_on_exec in_read; 216 | + Unix.set_close_on_exec out_write; 217 | + Unix.set_close_on_exec err_read; 218 | + let inchan = Unix.in_channel_of_descr in_read in 219 | + let outchan = Unix.out_channel_of_descr out_write in 220 | + let errchan = Unix.in_channel_of_descr err_read in 221 | + let shell = Lazy.force Ocamlbuild_pack.My_std.windows_shell in 222 | + let test_cmd = 223 | + String.concat " " (List.map Filename.quote (Array.to_list shell)) ^ 224 | + "-ec " ^ 225 | + Filename.quote (Ocamlbuild_pack.My_std.prep_windows_cmd cmd) in 226 | + let argv,tmp_file = 227 | + if String.length test_cmd < 7_900 then 228 | + Array.append 229 | + shell 230 | + [| "-ec" ; Ocamlbuild_pack.My_std.prep_windows_cmd cmd |],None 231 | + else 232 | + let fln,ch = Filename.open_temp_file ~mode:[Open_binary] "ocamlbuild" ".sh" in 233 | + output_string ch (Ocamlbuild_pack.My_std.prep_windows_cmd cmd); 234 | + close_out ch; 235 | + let fln' = String.map (function '\\' -> '/' | c -> c) fln in 236 | + Array.append 237 | + shell 238 | + [| "-c" ; fln' |], Some fln in 239 | + let pid = 240 | + Unix.create_process_env argv.(0) argv env out_read in_write err_write in 241 | + Unix.close out_read; 242 | + Unix.close in_write; 243 | + Unix.close err_write; 244 | + (pid, inchan, outchan, errchan,tmp_file) 245 | + 246 | +let close_process_full_win (pid,inchan, outchan, errchan, tmp_file) = 247 | + let delete tmp_file = 248 | + match tmp_file with 249 | + | None -> () 250 | + | Some x -> try Sys.remove x with Sys_error _ -> () in 251 | + let tmp_file_deleted = ref false in 252 | + try 253 | + close_in inchan; 254 | + close_out outchan; 255 | + close_in errchan; 256 | + let res = snd(Unix.waitpid [] pid) in 257 | + tmp_file_deleted := true; 258 | + delete tmp_file; 259 | + res 260 | + with 261 | + | x when tmp_file <> None && !tmp_file_deleted = false -> 262 | + delete tmp_file; 263 | + raise x 264 | + 265 | (* ***) 266 | (*** execute *) 267 | (* XXX: Add test for non reentrancy *) 268 | @@ -130,10 +187,16 @@ 269 | (*** add_job *) 270 | let add_job cmd rest result id = 271 | (*display begin fun oc -> fp oc "Job %a is %s\n%!" print_job_id id cmd; end;*) 272 | - let (stdout', stdin', stderr') = open_process_full cmd env in 273 | + let (pid,stdout', stdin', stderr', tmp_file) = 274 | + if Sys.win32 then open_process_full_win cmd env else 275 | + let a,b,c = open_process_full cmd env in 276 | + -1,a,b,c,None 277 | + in 278 | incr jobs_active; 279 | - set_nonblock (doi stdout'); 280 | - set_nonblock (doi stderr'); 281 | + if not Sys.win32 then ( 282 | + set_nonblock (doi stdout'); 283 | + set_nonblock (doi stderr'); 284 | + ); 285 | let job = 286 | { job_id = id; 287 | job_command = cmd; 288 | @@ -143,7 +206,9 @@ 289 | job_stdin = stdin'; 290 | job_stderr = stderr'; 291 | job_buffer = Buffer.create 1024; 292 | - job_dying = false } 293 | + job_dying = false; 294 | + job_tmp_file = tmp_file; 295 | + job_pid = pid } 296 | in 297 | outputs := FDM.add (doi stdout') job (FDM.add (doi stderr') job !outputs); 298 | jobs := JS.add job !jobs; 299 | @@ -199,6 +264,7 @@ 300 | try 301 | read fd u 0 (Bytes.length u) 302 | with 303 | + | Unix.Unix_error(Unix.EPIPE,_,_) when Sys.win32 -> 0 304 | | Unix.Unix_error(e,_,_) -> 305 | let msg = error_message e in 306 | display (fun oc -> fp oc 307 | @@ -241,14 +307,19 @@ 308 | decr jobs_active; 309 | 310 | (* PR#5371: we would get EAGAIN below otherwise *) 311 | - clear_nonblock (doi job.job_stdout); 312 | - clear_nonblock (doi job.job_stderr); 313 | - 314 | + if not Sys.win32 then ( 315 | + clear_nonblock (doi job.job_stdout); 316 | + clear_nonblock (doi job.job_stderr); 317 | + ); 318 | do_read ~loop:true (doi job.job_stdout) job; 319 | do_read ~loop:true (doi job.job_stderr) job; 320 | outputs := FDM.remove (doi job.job_stdout) (FDM.remove (doi job.job_stderr) !outputs); 321 | jobs := JS.remove job !jobs; 322 | - let status = close_process_full (job.job_stdout, job.job_stdin, job.job_stderr) in 323 | + let status = 324 | + if Sys.win32 then 325 | + close_process_full_win (job.job_pid, job.job_stdout, job.job_stdin, job.job_stderr, job.job_tmp_file) 326 | + else 327 | + close_process_full (job.job_stdout, job.job_stdin, job.job_stderr) in 328 | 329 | let shown = ref false in 330 | 331 | --- ./src/ocamlbuild_unix_plugin.ml 332 | +++ ./src/ocamlbuild_unix_plugin.ml 333 | @@ -48,12 +48,22 @@ 334 | end 335 | 336 | let run_and_open s kont = 337 | + let s_orig = s in 338 | + let s = 339 | + (* Be consistent! My_unix.run_and_open uses My_std.sys_command and 340 | + sys_command uses bash. *) 341 | + if Sys.win32 = false then s else 342 | + let l = match Lazy.force My_std.windows_shell |> Array.to_list with 343 | + | hd::tl -> (Filename.quote hd)::tl 344 | + | _ -> assert false in 345 | + "\"" ^ (String.concat " " l) ^ " -ec " ^ Filename.quote (" " ^ s) ^ "\"" 346 | + in 347 | let ic = Unix.open_process_in s in 348 | let close () = 349 | match Unix.close_process_in ic with 350 | | Unix.WEXITED 0 -> () 351 | | Unix.WEXITED _ | Unix.WSIGNALED _ | Unix.WSTOPPED _ -> 352 | - failwith (Printf.sprintf "Error while running: %s" s) in 353 | + failwith (Printf.sprintf "Error while running: %s" s_orig) in 354 | let res = try 355 | kont ic 356 | with e -> (close (); raise e) 357 | --- ./src/options.ml 358 | +++ ./src/options.ml 359 | @@ -174,11 +174,24 @@ 360 | build_dir := Filename.concat (Sys.getcwd ()) s 361 | else 362 | build_dir := s 363 | + 364 | +let slashify = 365 | + if Sys.win32 then fun p -> String.map (function '\\' -> '/' | x -> x) p 366 | + else fun p ->p 367 | + 368 | +let sb () = 369 | + match Sys.os_type with 370 | + | "Win32" -> 371 | + (try set_binary_mode_out stdout true with _ -> ()); 372 | + | _ -> () 373 | + 374 | + 375 | let spec = ref ( 376 | let print_version () = 377 | + sb (); 378 | Printf.printf "ocamlbuild %s\n%!" Ocamlbuild_config.version; raise Exit_OK 379 | in 380 | - let print_vnum () = print_endline Ocamlbuild_config.version; raise Exit_OK in 381 | + let print_vnum () = sb (); print_endline Ocamlbuild_config.version; raise Exit_OK in 382 | Arg.align 383 | [ 384 | "-version", Unit print_version , " Display the version"; 385 | @@ -257,8 +270,8 @@ 386 | "-build-dir", String set_build_dir, " Set build directory (implies no-links)"; 387 | "-install-lib-dir", Set_string Ocamlbuild_where.libdir, " Set the install library directory"; 388 | "-install-bin-dir", Set_string Ocamlbuild_where.bindir, " Set the install binary directory"; 389 | - "-where", Unit (fun () -> print_endline !Ocamlbuild_where.libdir; raise Exit_OK), " Display the install library directory"; 390 | - "-which", String (fun cmd -> print_endline (find_tool cmd); raise Exit_OK), " Display path to the tool command"; 391 | + "-where", Unit (fun () -> sb (); print_endline (slashify !Ocamlbuild_where.libdir); raise Exit_OK), " Display the install library directory"; 392 | + "-which", String (fun cmd -> sb (); print_endline (slashify (find_tool cmd)); raise Exit_OK), " Display path to the tool command"; 393 | "-ocamlc", set_cmd ocamlc, " Set the OCaml bytecode compiler"; 394 | "-plugin-ocamlc", set_cmd plugin_ocamlc, " Set the OCaml bytecode compiler \ 395 | used when building myocamlbuild.ml (only)"; 396 | --- ./src/pathname.ml 397 | +++ ./src/pathname.ml 398 | @@ -84,6 +84,26 @@ 399 | | x :: xs -> x :: normalize_list xs 400 | 401 | let normalize x = 402 | + let x = 403 | + if Sys.win32 = false then 404 | + x 405 | + else 406 | + let len = String.length x in 407 | + let b = Bytes.create len in 408 | + for i = 0 to pred len do 409 | + match x.[i] with 410 | + | '\\' -> Bytes.set b i '/' 411 | + | c -> Bytes.set b i c 412 | + done; 413 | + if len > 1 then ( 414 | + let c1 = Bytes.get b 0 in 415 | + let c2 = Bytes.get b 1 in 416 | + if c2 = ':' && c1 >= 'a' && c1 <= 'z' && 417 | + ( len = 2 || Bytes.get b 2 = '/') then 418 | + Bytes.set b 0 (Char.uppercase_ascii c1) 419 | + ); 420 | + Bytes.unsafe_to_string b 421 | + in 422 | if Glob.eval not_normal_form_re x then 423 | let root, paths = split x in 424 | join root (normalize_list paths) 425 | --- ./src/shell.ml 426 | +++ ./src/shell.ml 427 | @@ -24,12 +24,26 @@ 428 | | 'a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '-' | '/' | '_' | ':' | '@' | '+' | ',' -> loop (pos + 1) 429 | | _ -> false in 430 | loop 0 431 | + 432 | +let generic_quote quotequote s = 433 | + let l = String.length s in 434 | + let b = Buffer.create (l + 20) in 435 | + Buffer.add_char b '\''; 436 | + for i = 0 to l - 1 do 437 | + if s.[i] = '\'' 438 | + then Buffer.add_string b quotequote 439 | + else Buffer.add_char b s.[i] 440 | + done; 441 | + Buffer.add_char b '\''; 442 | + Buffer.contents b 443 | +let unix_quote = generic_quote "'\\''" 444 | + 445 | let quote_filename_if_needed s = 446 | if is_simple_filename s then s 447 | (* We should probably be using [Filename.unix_quote] except that function 448 | * isn't exported. Users on Windows will have to live with not being able to 449 | * install OCaml into c:\o'caml. Too bad. *) 450 | - else if Sys.os_type = "Win32" then Printf.sprintf "'%s'" s 451 | + else if Sys.os_type = "Win32" then unix_quote s 452 | else Filename.quote s 453 | let chdir dir = 454 | reset_filesys_cache (); 455 | @@ -37,7 +51,7 @@ 456 | let run args target = 457 | reset_readdir_cache (); 458 | let cmd = String.concat " " (List.map quote_filename_if_needed args) in 459 | - if !*My_unix.is_degraded || Sys.os_type = "Win32" then 460 | + if !*My_unix.is_degraded then 461 | begin 462 | Log.event cmd target Tags.empty; 463 | let st = sys_command cmd in 464 | -------------------------------------------------------------------------------- /esy.lock/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/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__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/overrides/opam__s__ocamlfind_secondary_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__ocamlfind_secondary_opam__c__1.8.1_opam_override/files/gen-findlib-conf.sh: -------------------------------------------------------------------------------- 1 | OCAML_SECONDARY_COMPILER=$1 2 | 3 | cat >ocaml-secondary-compiler.conf <META < */ 22 | | Property_type(string) /* <'color'> */; 23 | 24 | [@deriving show({with_path: false})] 25 | type combinator = 26 | | Static /* a b */ 27 | | And /* a && b */ 28 | | Or /* a || b */ 29 | | Xor /* a | b */; 30 | 31 | // TODO: non-terminals https://drafts.csswg.org/css-values-3/#component-types item 4 32 | [@deriving show({with_path: false})] 33 | type value = 34 | | Terminal(terminal, multiplier) 35 | | Combinator(combinator, list(value)) 36 | | Group(value, multiplier) /* [ A ] */ 37 | | Function_call(string, value) /* F( A ) */; 38 | // TODO: does Function_call accepts multiplier? 39 | 40 | // the only case where At_least_one makes sense, is with static 41 | // A? || B? = A? && B? 42 | // [ A? || B? ]! = [ A? && B? ]! = A || B 43 | // A? | B? ... what would that mean? true | true ? 44 | // [ A? | B? ]! = A | B 45 | // [ A? B? ]! != A B 46 | 47 | // [ A? B? ]! != [ A B ] 48 | // [ A? && B? ]! == A || B 49 | // [ A? || B? ]! == A || B 50 | // [ A? | B? ]! == A | B 51 | -------------------------------------------------------------------------------- /lib/Lexer.re: -------------------------------------------------------------------------------- 1 | open Sedlexing.Utf8; 2 | open Tokens; 3 | 4 | // TODO: is rgb(255 255 255/0) valid? 5 | let whitespace = [%sedlex.regexp? Plus(' ' | '\t' | '\n')]; 6 | let digit = [%sedlex.regexp? '0'..'9']; 7 | let number = [%sedlex.regexp? (Opt('+' | '-'), digit | "∞")]; 8 | let range_restriction = [%sedlex.regexp? ('[', number, ',', number, ']')]; 9 | 10 | let stop_literal = [%sedlex.regexp? 11 | ' ' | '\t' | '\n' | '?' | '!' | '*' | '+' | '#' | '{' | ']' | '(' | ')' | ',' 12 | ]; 13 | let single_token_literal = [%sedlex.regexp? ',' | '{']; 14 | let literal = [%sedlex.regexp? Star(Sub(any, stop_literal))]; 15 | let string = [%sedlex.regexp? ('\'', Plus(Sub(any, '\'')), '\'')]; 16 | 17 | let data = [%sedlex.regexp? 18 | ("<", Plus(Sub(any, '>')), Opt(range_restriction), ">") 19 | ]; 20 | let property = [%sedlex.regexp? ("<'", Plus(Sub(any, '\'')), "'>")]; 21 | 22 | let range = [%sedlex.regexp? 23 | (Opt('#'), '{', Plus(digit), Opt(',', Star(digit)), '}') 24 | ]; 25 | 26 | let slice = (start, end_, string) => { 27 | let len = String.length(string); 28 | let end_ = len - start + end_; 29 | String.sub(string, start, end_); 30 | }; 31 | 32 | let range = str => { 33 | let int = int_of_string; 34 | 35 | let (kind, starts_at) = str.[0] == '#' ? (`Comma, 2) : (`Space, 1); 36 | let content = str |> slice(starts_at, -1); 37 | let (min, max) = 38 | switch (String.split_on_char(',', content)) { 39 | | [min] => (int(min), Some(int(min))) 40 | | [min, ""] => (int(min), None) 41 | | [min, max] => (int(min), Some(int(max))) 42 | | _ => failwith("cannot understand " ++ content) 43 | }; 44 | RANGE((kind, min, max)); 45 | }; 46 | 47 | let literal = buf => 48 | switch%sedlex (buf) { 49 | | literal => LITERAL(lexeme(buf)) 50 | | single_token_literal => LITERAL(lexeme(buf)) 51 | | _ => failwith("something is wrong here") 52 | }; 53 | 54 | let rec tokenizer = buf => 55 | switch%sedlex (buf) { 56 | | whitespace => tokenizer(buf) 57 | | property => PROPERTY(lexeme(buf) |> slice(2, -2)) 58 | | data => 59 | switch (lexeme(buf) |> slice(1, -1) |> String.split_on_char(' ')) { 60 | | [value, ..._] => DATA(value) 61 | | [] => failwith("unreachable") 62 | } 63 | | '*' => ASTERISK 64 | | '+' => PLUS 65 | | '?' => QUESTION_MARK 66 | | '#' => RANGE((`Comma, 1, None)) 67 | | range => range(lexeme(buf)) 68 | | '!' => EXCLAMATION_POINT 69 | // combinators 70 | | "&&" => DOUBLE_AMPERSAND 71 | | "||" => DOUBLE_BAR 72 | | "|" => BAR 73 | | "[" => LEFT_BRACKET 74 | | "]" => RIGHT_BRACKET 75 | // functions 76 | | '(' => LEFT_PARENS 77 | | ')' => RIGHT_PARENS 78 | | string => LITERAL(lexeme(buf) |> slice(1, -1)) 79 | | eof => EOF 80 | | _ => literal(buf) 81 | }; 82 | -------------------------------------------------------------------------------- /lib/Parser.mly: -------------------------------------------------------------------------------- 1 | %{ 2 | 3 | open Ast 4 | 5 | %} 6 | %token LITERAL 7 | %token DATA 8 | %token PROPERTY 9 | %token DOUBLE_AMPERSAND 10 | %token DOUBLE_BAR 11 | %token BAR 12 | %token LEFT_BRACKET 13 | %token RIGHT_BRACKET 14 | %token ASTERISK 15 | %token PLUS 16 | %token QUESTION_MARK 17 | %token <[ `Comma | `Space ] * int * int option> RANGE 18 | %token EXCLAMATION_POINT 19 | %token LEFT_PARENS 20 | %token RIGHT_PARENS 21 | %token EOF 22 | 23 | %start value_of_lex 24 | %start multiplier_of_lex 25 | %% 26 | 27 | let value_of_lex := 28 | | EOF; { None } 29 | | v = value; EOF; { Some v } 30 | let multiplier_of_lex := 31 | | EOF; { None } 32 | | m = multiplier; EOF; { Some m } 33 | 34 | let multiplier := 35 | | ASTERISK; 36 | { Zero_or_more } 37 | | PLUS; 38 | { One_or_more } 39 | | QUESTION_MARK; 40 | { Optional } 41 | | r = RANGE; 42 | { 43 | match r with 44 | | (`Space, min, max) -> Repeat (min, max) 45 | | (`Comma, min, max) -> Repeat_by_comma (min, max) 46 | } 47 | | EXCLAMATION_POINT; 48 | { At_least_one } 49 | 50 | let terminal == 51 | | l = LITERAL; { Keyword l } 52 | | d = DATA; { Data_type d } 53 | | p = PROPERTY; { Property_type p } 54 | 55 | let terminal_multiplier(terminal) == 56 | | t = terminal; { Terminal(t, One) } 57 | | t = terminal; m = multiplier; { Terminal(t, m) } 58 | 59 | let function_call := 60 | | terminal_multiplier(terminal) 61 | | l = LITERAL; LEFT_PARENS; v = value; RIGHT_PARENS; { Function_call(l, v) } 62 | 63 | let group := 64 | | function_call 65 | | LEFT_BRACKET; v = value; RIGHT_BRACKET; { v } 66 | | LEFT_BRACKET; v = value; RIGHT_BRACKET; m = multiplier; { Group(v, m) } 67 | 68 | let combinator(sep, sub, kind) == 69 | | vs = separated_nonempty_list(sep, sub); ~ = kind; 70 | { match vs with | v::[] -> v | vs -> Combinator(kind, vs) } 71 | 72 | let static_expr == 73 | | combinator(| {}, group, | { Static }) 74 | let and_expr == 75 | | combinator(DOUBLE_AMPERSAND, static_expr, | { And }) 76 | let or_expr == 77 | | combinator(DOUBLE_BAR, and_expr, | { Or }) 78 | let xor_expr == 79 | | combinator(BAR, or_expr, | { Xor }) 80 | 81 | let value := 82 | | xor_expr 83 | (* TODO: this is clearly a workaround *) 84 | | terminal_multiplier(| RIGHT_PARENS; { Keyword ")" } | LEFT_PARENS; { Keyword "(" }) 85 | -------------------------------------------------------------------------------- /lib/Reason_css_vds.re: -------------------------------------------------------------------------------- 1 | include Ast; 2 | 3 | let provider = (buf, ()) => { 4 | let token = Lexer.tokenizer(buf); 5 | let (start, stop) = Sedlexing.lexing_positions(buf); 6 | (token, start, stop); 7 | }; 8 | 9 | let multiplier_of_lex = 10 | MenhirLib.Convert.Simplified.traditional2revised(Parser.multiplier_of_lex); 11 | let rec multiplier_to_string = 12 | fun 13 | | One => "" 14 | | Zero_or_more => "*" 15 | | One_or_more => "+" 16 | | Optional => "?" 17 | | Repeat(min, Some(max)) when min == max => 18 | "{" ++ string_of_int(min) ++ "}" 19 | | Repeat(min, Some(max)) => 20 | "{" ++ string_of_int(min) ++ "," ++ string_of_int(max) ++ "}" 21 | | Repeat(min, None) => "{" ++ string_of_int(min) ++ ",}" 22 | | Repeat_by_comma(1, None) => "#" 23 | | Repeat_by_comma(min, max) => 24 | "#" ++ multiplier_to_string(Repeat(min, max)) 25 | | At_least_one => "!"; 26 | let _multiplier_of_string = string => 27 | Sedlexing.Utf8.from_string(string) |> provider |> multiplier_of_lex; 28 | 29 | let value_of_lex = 30 | MenhirLib.Convert.Simplified.traditional2revised(Parser.value_of_lex); 31 | let rec value_to_string = value => { 32 | let child_needs_brackets = (parent, child) => { 33 | let precedence = 34 | fun 35 | | Combinator(Static, _) => Some(0) 36 | | Combinator(And, _) => Some(1) 37 | | Combinator(Or, _) => Some(2) 38 | | Combinator(Xor, _) => Some(3) 39 | | _ => None; 40 | 41 | let parent = precedence(parent); 42 | let child = precedence(child); 43 | 44 | switch (parent, child) { 45 | | (_, None) => false 46 | | (None, _) => false 47 | | (Some(parent), Some(child)) => child > parent 48 | }; 49 | }; 50 | let child = child => 51 | child_needs_brackets(value, child) 52 | ? "[ " ++ value_to_string(child) ++ " ]" : value_to_string(child); 53 | let childs = (sep, childs) => 54 | childs |> List.map(child) |> String.concat(sep); 55 | let (string, multiplier) = 56 | switch (value) { 57 | | Terminal(kind, multiplier) => 58 | let full_name = 59 | switch (kind) { 60 | | Keyword(name) => "'" ++ name ++ "'" 61 | | Data_type(name) => "<" ++ name ++ ">" 62 | | Property_type(name) => "<'" ++ name ++ "'>" 63 | }; 64 | (full_name, Some(multiplier)); 65 | | Combinator(kind, values) => 66 | let separator = 67 | switch (kind) { 68 | | Static => " " 69 | | And => " && " 70 | | Or => " || " 71 | | Xor => " | " 72 | }; 73 | (childs(separator, values), None); 74 | | Group(value, multiplier) => (child(value), Some(multiplier)) 75 | | Function_call(name, value) => ( 76 | name ++ "( " ++ child(value) ++ " )", 77 | None, 78 | ) 79 | }; 80 | 81 | switch (value, multiplier) { 82 | | (Group(_), None) => "[ " ++ string ++ " ]" 83 | | (Group(_), Some(multiplier)) => 84 | "[ " ++ string ++ " ]" ++ multiplier_to_string(multiplier) 85 | | (_, None) 86 | | (_, Some(One)) => string 87 | | (_, Some(multiplier)) => 88 | "[ " ++ string ++ " ]" ++ multiplier_to_string(multiplier) 89 | }; 90 | }; 91 | let value_of_string = string => 92 | Sedlexing.Utf8.from_string(string) |> provider |> value_of_lex; 93 | -------------------------------------------------------------------------------- /lib/Reason_css_vds.rei: -------------------------------------------------------------------------------- 1 | include (module type of { 2 | include Ast; 3 | }); 4 | let value_to_string: Ast.value => string; 5 | let value_of_string: string => option(Ast.value); 6 | -------------------------------------------------------------------------------- /lib/Tokens.re: -------------------------------------------------------------------------------- 1 | [@deriving show] 2 | type token = 3 | // literals 4 | | LITERAL(string) // auto 'auto' 5 | | DATA(string) // 6 | | PROPERTY(string) // <'color'> 7 | // combinators 8 | | DOUBLE_AMPERSAND // && 9 | | DOUBLE_BAR // || 10 | | BAR // | 11 | | LEFT_BRACKET // [ 12 | | RIGHT_BRACKET // ] 13 | // modifiers 14 | | ASTERISK // * 15 | | PLUS // + 16 | | QUESTION_MARK // ? 17 | | RANGE(([ | `Comma | `Space], int, option(int))) // {1} {1,} {1, 2} #{1} 18 | | EXCLAMATION_POINT // ! 19 | // for functions 20 | | LEFT_PARENS // ( 21 | | RIGHT_PARENS // ) 22 | | EOF; 23 | -------------------------------------------------------------------------------- /lib/dune: -------------------------------------------------------------------------------- 1 | (menhir 2 | (flags --external-tokens Tokens --explain) 3 | (modules Parser)) 4 | 5 | (library 6 | (name reason_css_vds) 7 | (public_name reason-css-vds.lib) 8 | (libraries sedlex menhirLib) 9 | (preprocess 10 | (pps sedlex.ppx ppx_deriving.show))) 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reason-css-vds", 3 | "version": "0.0.1", 4 | "esy": { 5 | "build": "dune build -p #{self.name}", 6 | "buildDev": "dune build" 7 | }, 8 | "scripts": { 9 | "test": "dune exec test/RunTests.exe" 10 | }, 11 | "dependencies": { 12 | "@esy-ocaml/reason": "^3.6.0", 13 | "@opam/dune": "2.5.1", 14 | "@opam/dune-private-libs": "2.5.1", 15 | "@opam/dune-configurator": "2.5.1", 16 | "@opam/menhir": "20200211", 17 | "@opam/ocamlformat": "0.14.2", 18 | "@opam/ppx_deriving": "4.5", 19 | "@opam/sedlex": "*", 20 | "@reason-native/rely": "^3.2.1", 21 | "ocaml": "^4.8.1000" 22 | }, 23 | "devDependencies": { 24 | "@opam/ocaml-lsp-server": "ocaml/ocaml-lsp:ocaml-lsp-server.opam#fbc433e14035d520c7137916ae710b8ec3b415e9" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /reason-css-vds.opam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EduardoRFS/reason-css-vds/82ad96d6892c561006f90811abd05dd1637ab910/reason-css-vds.opam -------------------------------------------------------------------------------- /test/RunTests.re: -------------------------------------------------------------------------------- 1 | Reason_css_vds_test.TestFramework.cli(); 2 | -------------------------------------------------------------------------------- /test/Test.re: -------------------------------------------------------------------------------- 1 | open TestFramework; 2 | open Reason_css_vds; 3 | 4 | let compare_ast = (expected, result, {expect, _}) => { 5 | let expected = show_value(expected); 6 | let result = show_value(result); 7 | expect.string(result).toEqual(expected); 8 | }; 9 | 10 | let parse_tests = [ 11 | ( 12 | "A? B? C?", 13 | Combinator( 14 | Static, 15 | [ 16 | Terminal(Keyword("A"), Optional), 17 | Terminal(Keyword("B"), Optional), 18 | Terminal(Keyword("C"), Optional), 19 | ], 20 | ), 21 | ), 22 | ( 23 | "[ A? B? C? ]!", 24 | Group( 25 | Combinator( 26 | Static, 27 | [ 28 | Terminal(Keyword("A"), Optional), 29 | Terminal(Keyword("B"), Optional), 30 | Terminal(Keyword("C"), Optional), 31 | ], 32 | ), 33 | At_least_one, 34 | ), 35 | ), 36 | ( 37 | "A B C", 38 | Combinator( 39 | Static, 40 | [ 41 | Terminal(Keyword("A"), One), 42 | Terminal(Keyword("B"), One), 43 | Terminal(Keyword("C"), One), 44 | ], 45 | ), 46 | ), 47 | ( 48 | "A? || B? || C?", 49 | Combinator( 50 | Or, 51 | [ 52 | Terminal(Keyword("A"), Optional), 53 | Terminal(Keyword("B"), Optional), 54 | Terminal(Keyword("C"), Optional), 55 | ], 56 | ), 57 | ), 58 | ( 59 | "A || B || C", 60 | Combinator( 61 | Or, 62 | [ 63 | Terminal(Keyword("A"), One), 64 | Terminal(Keyword("B"), One), 65 | Terminal(Keyword("C"), One), 66 | ], 67 | ), 68 | ), 69 | ( 70 | "A && B && C", 71 | Combinator( 72 | And, 73 | [ 74 | Terminal(Keyword("A"), One), 75 | Terminal(Keyword("B"), One), 76 | Terminal(Keyword("C"), One), 77 | ], 78 | ), 79 | ), 80 | // groups 81 | ("[A]", Terminal(Keyword("A"), One)), 82 | ( 83 | "[A && B]", 84 | Combinator( 85 | And, 86 | [Terminal(Keyword("A"), One), Terminal(Keyword("B"), One)], 87 | ), 88 | ), 89 | ( 90 | "A && [B && C]", 91 | Combinator( 92 | And, 93 | [ 94 | Terminal(Keyword("A"), One), 95 | Combinator( 96 | And, 97 | [Terminal(Keyword("B"), One), Terminal(Keyword("C"), One)], 98 | ), 99 | ], 100 | ), 101 | ), 102 | ( 103 | "[A && B] && C", 104 | Combinator( 105 | And, 106 | [ 107 | Combinator( 108 | And, 109 | [Terminal(Keyword("A"), One), Terminal(Keyword("B"), One)], 110 | ), 111 | Terminal(Keyword("C"), One), 112 | ], 113 | ), 114 | ), 115 | // multipliers 116 | ("A*", Terminal(Keyword("A"), Zero_or_more)), 117 | ("A+", Terminal(Keyword("A"), One_or_more)), 118 | ("A?", Terminal(Keyword("A"), Optional)), 119 | ("A{4}", Terminal(Keyword("A"), Repeat(4, Some(4)))), 120 | ("A{4,5}", Terminal(Keyword("A"), Repeat(4, Some(5)))), 121 | ("A{4,}", Terminal(Keyword("A"), Repeat(4, None))), 122 | ("A!", Terminal(Keyword("A"), At_least_one)), 123 | // why Group exists: 124 | ("[A?]!", Group(Terminal(Keyword("A"), Optional), At_least_one)), 125 | // property name 126 | ( 127 | " | bolder | lighter", 128 | Combinator( 129 | Xor, 130 | [ 131 | Terminal(Data_type("font-weight-absolute"), One), 132 | Terminal(Keyword("bolder"), One), 133 | Terminal(Keyword("lighter"), One), 134 | ], 135 | ), 136 | ), 137 | ( 138 | // function call 139 | "rgb( {3} [ / ]? )", 140 | Function_call( 141 | "rgb", 142 | Combinator( 143 | Static, 144 | [ 145 | Terminal(Data_type("percentage"), Repeat(3, Some(3))), 146 | Group( 147 | Combinator( 148 | Static, 149 | [ 150 | Terminal(Keyword("/"), One), 151 | Terminal(Data_type("alpha-value"), One), 152 | ], 153 | ), 154 | Optional, 155 | ), 156 | ], 157 | ), 158 | ), 159 | ), 160 | ( 161 | // special characters 162 | "'[' * ']'", 163 | Combinator( 164 | Static, 165 | [ 166 | Terminal(Keyword("["), One), 167 | Terminal(Data_type("custom-ident"), Zero_or_more), 168 | Terminal(Keyword("]"), One), 169 | ], 170 | ), 171 | ), 172 | // TODO: shouldn't be a special case 173 | ("", Terminal(Data_type("rgb()"), One)), 174 | // ident with number 175 | ( 176 | "[ jis04 | simplified | traditional ]", 177 | Combinator( 178 | Xor, 179 | [ 180 | Terminal(Keyword("jis04"), One), 181 | Terminal(Keyword("simplified"), One), 182 | Terminal(Keyword("traditional"), One), 183 | ], 184 | ), 185 | ), 186 | // at keyword 187 | ("@stylistic", Terminal(Keyword("@stylistic"), One)), 188 | // range restriction 189 | ("", Terminal(Data_type("number"), One)), 190 | // escaped combinator 191 | ("'||'", Terminal(Keyword("||"), One)), 192 | // function without space 193 | ( 194 | "minmax(min, max)", 195 | Function_call( 196 | "minmax", 197 | Combinator( 198 | Static, 199 | [ 200 | Terminal(Keyword("min"), One), 201 | Terminal(Keyword(","), One), 202 | Terminal(Keyword("max"), One), 203 | ], 204 | ), 205 | ), 206 | ), 207 | ( 208 | "{ a }", 209 | Combinator( 210 | Static, 211 | [ 212 | Terminal(Keyword("{"), One), 213 | Terminal(Keyword("a"), One), 214 | Terminal(Keyword("}"), One), 215 | ], 216 | ), 217 | ), 218 | ]; 219 | describe("correctly parse value", ({test, _}) => { 220 | let test = (index, (result, expected)) => 221 | test( 222 | "parse: " ++ string_of_int(index), 223 | utils => { 224 | let result = 225 | switch (value_of_string(result)) { 226 | | Some(result) => result 227 | | None => failwith("failed to parse") 228 | }; 229 | compare_ast(expected, result, utils); 230 | }, 231 | ); 232 | List.iteri(test, parse_tests); 233 | }); 234 | 235 | let print_tests = [ 236 | (" a b | c || d && e f", "'a' 'b' | 'c' || 'd' && 'e' 'f'"), 237 | ("[ a b ] | [ c || [ d && [ e f ]]]", "'a' 'b' | 'c' || 'd' && 'e' 'f'"), 238 | ("'[' abc ']'", "'[' 'abc' ']'"), 239 | ]; 240 | describe("correctly print value", ({test, _}) => { 241 | let test = (index, (result, expected)) => 242 | test( 243 | "print: " ++ string_of_int(index), 244 | ({expect, _}) => { 245 | let result = 246 | switch (value_of_string(result)) { 247 | | Some(result) => result 248 | | None => failwith("failed to parse") 249 | }; 250 | let result = value_to_string(result); 251 | expect.string(result).toEqual(expected); 252 | }, 253 | ); 254 | List.iteri(test, print_tests); 255 | }); 256 | -------------------------------------------------------------------------------- /test/TestFramework.re: -------------------------------------------------------------------------------- 1 | include Rely.Make({ 2 | let config = 3 | Rely.TestFrameworkConfig.initialize({ 4 | snapshotDir: "test/__snapshots__", 5 | projectDir: "test", 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /test/dune: -------------------------------------------------------------------------------- 1 | (library 2 | (name reason_css_vds_test) 3 | (public_name reason-css-vds-test.lib) 4 | (ocamlopt_flags -linkall -g) 5 | (libraries reason-css-vds.lib rely.lib) 6 | (modules 7 | (:standard \ RunTests))) 8 | 9 | (executable 10 | (package reason-css-vds-test) 11 | (name RunTests) 12 | (public_name RunTests.exe) 13 | (libraries reason-css-vds-test.lib) 14 | (modules RunTests)) 15 | -------------------------------------------------------------------------------- /test/dune-project: -------------------------------------------------------------------------------- 1 | (lang dune 2.0) 2 | -------------------------------------------------------------------------------- /test/reason-css-vds-test.opam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EduardoRFS/reason-css-vds/82ad96d6892c561006f90811abd05dd1637ab910/test/reason-css-vds-test.opam --------------------------------------------------------------------------------