Conversation
| (chdir | ||
| %{workspace_root} | ||
| (run %{bin:cppo} -V OCAML:%{ocaml_version} -D "OXCAML" %{x} -o %{targets})))) | ||
|
|
There was a problem hiding this comment.
The rules duplication, here and in src/loader/dune, are rather inconvenient but I didn't find how to avoid it: cppo only accepts variables with integer values in conditionals, but dune %{ocaml-config:ox} is a boolean with no way to cast it to an int (?). I tried cppo -D "OXCAML %{ocaml-config:ox} but then the variable can't be used in #if. Please let me know if you know a better way!
80bf1f1 to
bb20ded
Compare
f36c8b9 to
cd3629c
Compare
Add support for building js_top_worker and odoc with both the standard
OCaml 5.4 compiler and the OxCaml 5.2.0+ox compiler using cppo
conditional compilation and dual dune stanzas.
js_top_worker changes:
- Bump dune-project to 3.21 for %{ocaml-config:ox} support
- Add dual library stanzas gated by (enabled_if %{ocaml-config:ox})
- Add cppo guards for OxCaml API differences:
- Compilation_unit.Name.t vs string for persistent loader
- Env.report_error ~level:0 (extra parameter)
- Language_extension.set_universe_and_enable_all (oxcaml-only)
- Unit_info.make ~for_pack_prefix (extra parameter)
- Typemod.type_implementation (extra Compilation_unit arg)
- Gate ppx_deriving_rpc with (not %{ocaml-config:ox})
odoc changes:
- Apply upstream oxcaml PR ocaml#1399 (art-w/upstream-oxcaml)
- Bump dune-project to 3.21
- Add dual stanzas in loader, model, xref2, odoc, syntax_highlighter
- Add cppo OXCAML guards for compiler API differences
- Support OxCaml features: modes, layouts, labeled tuples, iarray,
unboxed records, module type strengthening, polymorphic arguments,
call position arguments, Import_info.t, Compilation_unit.t
Verified end-to-end: scrollycode demos generate HTML and the
interactive playground evaluates OCaml code in the browser with
both compiler switches.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
||
| - name: Install dependencies | ||
| run: | | ||
| sed -i '/bisect_ppx/d' odoc.opam |
There was a problem hiding this comment.
bisect_ppx is currently incompatible with OxCaml, bringing the coverage down
|
@jonludlam If you have time, I think this PR is in good shape for a review! This is only the first step to integrate oxcaml/odoc in this repo, so currently I've left out a small patch "Support OxCaml polymorphic arguments (#4)" from @lukemaurer as it was breaking the OCaml 4.08 regression tests. The polymorphic arguments require a bit more work and testing so I'll open another PR for them. The other useful patches from @lukemaurer in oxcaml/odoc are not directly related to OxCaml support, so I've left them out to ease the review as we can cherry-pick them later:
|
(builds on top of #1398 which provides
ocaml-config:oxto detect OxCaml)This PR is a rebase of @lukemaurer 's patches from oxcaml/odoc (+ small fixes from #22). I hope this will make it easier to keep everything uptodate, and that it isn't too much of a stretch as Odoc already supports multiple versions of the OCaml AST using
cppo. (Note that the preprocessor was originally usingOCAML_VERSION=(5,2,0)as a heuristic to check for OxCaml, but since dune 3.21 we can be exact.)