4 KiB
gencopy
gencopy is a script used to generate identity migrations. When adding support
for a new version of ocaml, it's used to generate the copy functions for each
compiler types. It simply generates identity copies so this likely won't compile
because it does not account for changes in the parsetree type. Once you have
those identity migrations, you should be able to follow the compilation errors
to find out which part need proper migrations.
The tool is further documented here.
rev-deps.sh
You can use this script to fetch ppxlib's rev-deps and clone them locally to test them against the latest changes in ppxlib and eventually send patch to them. Eventually this will make it into a duniverse feature but in the meantime it can prove useful to reproduce the steps we went through to send patches ahead of the 0.14.0 release.
This script is used to assemble a dune-workspace containing all you need to build ppxlib and a co-installable subset of its reverse dependencies together. It's split into three steps.
Getting the rev deps locally
The first step is to actually compute the list of rev-deps we want and clone them. For this you can run the following, from the root of the repo:
./dev/rev-deps.sh pullif you want the non-JaneStreet rev deps../dev/rev-deps.sh pull janestreetif you want only the JaneStreet packages.
JS and non-JS ppx-es are handled separately because they tend to be non-coinstallable. Furthermore we want to send patches to the JS ppx-es on top of the latest release branch instead of the master branch for other ppx-es. When cloned, the JS rev deps will be checked out to the latest release branch.
The script will clone them in a dunireverse folder at the repo's root.
Installing their dependencies
To install the dependencies using opam-monorepo, you can run
./dev/rev-deps.sh install-deps
That gets the sources locally by pulling them into duniverse/ in your dune-workspace.
To get the opam monorepo plugin, required to assemble the duniverse with all the dependencies, simply install it through opam:
opam install opam-monorepo
Building them
Since some of the cloned repos might contain more than just the ppx-es we're interested in,
running just dune build might not do it. You can use ./dev/rev-deps.sh build which will build
exactly what you need, ie ppxlib and all the rev-deps packages you cloned.
No black magic here, it's just running dune build -p ppxlib,... where ... is the list of
rev-deps packages. The -p is also helpful to avoid annoying warnings getting in the way.
Notes
This is all very experimental and sometimes a bit of extra work is required. This section contains note that can hopefully help you with this process.
A good thing to do is to deal with janestreet packages first because if some non-janestreet rev-deps
depend on a janestreet package you can then simply pin to your patch before running the
install-deps step.
When last assembling the non janestreet rev-deps duniverse I had to remove the following packages:
elpias it depends oncamlp5gen_js_apiwhich depends onomp.1.xdirectlyobusas it depends onlwt_ppxwhich usesomp.1.xppx_importas it depends onomp.1.xdirectlyppx_showdepends on stdcompat which doesn't build with duneppx_string_interpolationdepends onsedlex.ppxwhich uses OMP andppx_tools_versioned
When last assembling the janestreet rev-deps duniverse I had to remove the following packages:
memtrace_vieweras the repo is weirdly maintained, there's no tag for the released versions and the master branch's opam file depends on packages not available in opam at the time:async_rpc_websocketandocaml-embed-fileppx_pythonas it depends onpymlwhich doesn't build with dune
opam-monorepo will pull in dune-configurator and if you're using a recent version of dune this
will conflict with the one you have locally so you should probably run:
rm -rf duniverse/dune-configurator*