Anil Madhavapeddy reported that he uses ocamlbuild on large build trees for Mirage, and found the -use-ocamlfind integration unusable in his case because of the ocamlbuild's repeated invocation of `ocamlfind query`. His workaround is to devise his own ocamlfind logic in myocamlbuild.ml, that reuse library-location information gathered at ./configure time.

It would be nice if ocamlbuild cached `ocamlfind query` results in the _build/ subdirectory, so that they don't have to be recomputed across ocamlbuild calls.

Additional Information

After a quick look at ocamlbuild/findlib.ml, it appears that ocamlbuild already caches `ocamlfind query` results across a single ocamlbuild run, by using a hashtable at runtime. So this amount to making this hash-table pervasive by somehow storing it in a file in _build.

Remark: if documented, that feature should be documented because the user could observe caching by compiling a project, installing/removing/updating ocamlfind stuff, then recompiling from (now outdated) cached information.

I don't think there is any magic technique to detect such getting-out-of-date case: does ocamlfind store a time-of-last-update somewhere that is less costly to access that `ocamlfind query`? But this is probably a rare case and we could just document it and recommend to -clean on such occasions, or provide a -clean-ocamlfind option, or advise to `rm _build/ocamlfind.cache` or something.