I can’t compile OCaml 4.06.1 on Fedora 32 because of a change in gcc’s default error settings, and I can’t quickly switch to a different compiler version for various reasons.
What I’m wondering is, can I fork the OCaml repo, add a couple
extern's to the source code, and then tell opam to use my git repo as the source for a switch?
I found a hacky workaround where I initialize a broken switch, pin my branch, and then reinstall ocaml-base-compiler:
opam switch create 4.06.1 # wait for this to fail
opam pin add ocaml-base-compiler.4.06.1 git+https://github.com/brendanlong/ocaml.git#4.06.1+gcc10
Is there a better way to do this?
You can use
opam switch create <switch name> --empty instead of waiting for the normal command to fail.
Then the pin command should work, although I tend to pin
ocaml-variants instead of
I think it is recommended to also use
opam switch set-base after that, but I don’t use it in my workflow so I don’t remember exactly the right arguments (without
set-base, it will consider your compiler like a regular package and will prompt you to upgrade it everytime your git repo is updated, while with
set-base it will not upgrade it unless you ask for it explicitly by passing the
It turns out I have a need to do this very thing, in order to work on a couple of pretty-printing bugs in the base compiler. Do you have a script you could paste, that I could use? I confess that opam, while incredibly useful, is a bit of a black-box to me, and after a few tries to get this working (along the lines of your suggestion) I’m not making any progress.
Normally I’d just unpack a compiler-tree and build it manually, but if there were a way to do it with opam, that would be very, very nice.
If you want to rely on opam to fetch the sources for you, there’s a command for that (
opam source) but unfortunately it will only fetch an archive of the sources, which will be inconvenient when you want to submit your patches upstream.
Otherwise, @dbuenzli’s link should have the commands you need. If it still doesn’t work for you, please detail what steps you took, what you expected, and what you got, and I’ll try to help you fix the problems.
You forgot about
opam source --dev which clones you directly the repo there for you.
I was under the impression that the compiler’s opam files did not define a
dev-repo field, so this wouldn’t work on the compiler itself.
Oh, lovely! Thank you! I had searched the opam documentation, but didn’t think to search the ocaml not-the-manual-but-still-docs.
Yes, it is indeed working, as predicted.