DISTDIR = http-getter-$(VERSION)
 REQUIRES = http dbm pcre netclient pxp shell threads zip
 COMMONOPTS = -package "$(REQUIRES)" -pp camlp4o
-OCAMLC = ocamlfind ocamlc $(COMMONOPTS)
-OCAMLOPT = ocamlfind ocamlopt $(COMMONOPTS)
-OCAMLDEP = ocamlfind ocamldep $(COMMONOPTS)
+OCAMLFIND = ocamlfind
+OCAMLC = $(OCAMLFIND) ocamlc $(COMMONOPTS)
+OCAMLOPT = $(OCAMLFIND) ocamlopt $(COMMONOPTS)
+OCAMLDEP = $(OCAMLFIND) ocamldep $(COMMONOPTS)
+OCAMLDOC =     \
+       ocamldoc        \
+               $(shell $(OCAMLFIND) query -i-format http)      \
+               $(shell $(OCAMLFIND) query -i-format dbm)       \
+               $(shell $(OCAMLFIND) query -i-format pcre)      \
+               $(shell $(OCAMLFIND) query -i-format netclient) \
+               $(shell $(OCAMLFIND) query -i-format pxp)       \
+               $(shell $(OCAMLFIND) query -i-format shell)     \
+               $(shell $(OCAMLFIND) query -i-format threads)   \
+               $(shell $(OCAMLFIND) query -i-format zip)
 MODULES =      \
        http_getter_debugger threadSafe                                                 \
        http_getter_types http_getter_misc http_getter_const    \
 $(NAME).opt: $(OBJSOPT) $(NAME).ml
        $(OCAMLOPT) -linkpkg -thread -o $@ $^
 
+http_getter.dot: *.ml *.mli
+       $(OCAMLDOC) -dot -o $@ $^
+
 distclean: clean
 clean:
-       rm -f *.cm[aiox] *.o $(NAME){,.opt}
+       rm -f *.cm[aiox] *.o $(NAME){,.opt} *.dot
 dist: distclean depend
        mkdir $(DISTDIR)/
        cp      \