eliom
eliom copied to clipboard
modules in let%lwt not linked
If your file main.ml has a line with code like:
let%lwt x = M1.stuff ...
and M1 is used nowhere else in the code, eliomdep (and ocamldep) don't figure out that M1 is a dependency of this file (seems like it's because it's inside a let%lwt block), and make byte thus fails.
I put this bug here because it makes eliom build fail, but it looks like it's an issue of compatibility between lwt and ocamldep.
This is why ocamldep has a -ppx option. You should provide the Ppxs you are using to ocamldep.
How are you compiling ?
I'm using the makefile generated by the distillery which has lwt.ppx in both SERVER_PACKAGES and CLIENT_PACKAGES.
Can you provide a complete failing example? I can neither reproduce, nor understand how let%lwt could fool ocamldep (with lwt.ppx loaded, as in the distillery template).
Additionally, could you do a make distclean and then rebuild? That will get rid of the .depend files that may be in an inconsistent state for some reason.
git clone [email protected]:bruce-ricard/gobblet.git
git checkout ceb67ea7903d49246c9334db23910074c791127e
in lib/ make && make install
in server make byte
It should tell you Error: Unbound module Connection_code
you can then run make _server/connection_code.cmo and make byte again, and it works. But when you run make test.byte it fails with some reference to undefined global.
Using Ocaml version 4.02.3 and Eliom 5.0.0 [4.02.3], all installed through Opam.
I temporarily fixed my code by adding let _ = let open Common in let open Connection_code in () in the files involved, and it worked. (git checkout 6b503d69009a99e75857425aa5d7cbc76bf5e419).
I didn't know about distclean, but I manually removed _deps and .depend so that make regenerates them, but it didn't change anything. I just tried make distclean and it didn't fix it.
I also encountered this issue. Here is a reproducible example:
test1.ml
let connection_box () =
Eliom_reference.get Core_lib.username
test2.ml
let connection_box () =
let%lwt u = Eliom_reference.get Core_lib.username in
Lwt.return u
Running eliomdep on these files produces:
eliomdep -server -ppx -package lwt_ppx -verbose test1.ml
+ ocamldep.opt '-ml-synonym' '.eliom' '-mli-synonym' '.eliomi' '-I' '.' '-impl' 'test1.ml'
_server/test1.cmo : _server/core_lib.cmo
_server/test1.cmx : _server/core_lib.cmx
eliomdep -server -ppx -package lwt_ppx -verbose test2.ml
+ ocamldep.opt '-ml-synonym' '.eliom' '-mli-synonym' '.eliomi' '-I' '.' '-impl' 'test2.ml'
_server/test2.cmo :
_server/test2.cmx :
For test2.ml, the dependencies have not been correctly inferred.