include Makefile.defs
-MODULES = http_common http_misc http_types http_request http_parser http_tcp_server http_daemon http_response
-PUBLIC_MODULES = http_common http_types http_request http_daemon http_response
-DESTDIR = $(shell $(OCAMLFIND) printconf stdlib)
+MODULES = \
+ http_constants http_types http_parser_sanity http_misc http_common \
+ http_tcp_server http_parser http_message http_request http_daemon \
+ http_response http_user_agent
-all: http.cma
-opt: http.cmxa
+THREADED_SRV = http_threaded_tcp_server
+MODULES_MT = $(patsubst http_tcp_server, mt/$(THREADED_SRV) http_tcp_server, $(MODULES))
+MODULES_NON_MT = $(patsubst http_tcp_server, non_mt/$(THREADED_SRV) http_tcp_server, $(MODULES))
+PUBLIC_MODULES = \
+ http_types \
+ http_common \
+ http_message \
+ http_request \
+ http_daemon \
+ http_response \
+ http_user_agent
+OCAMLDOC_STUFF = *.mli
+DOCDIR = doc/html
+DOTDIR = doc/dot
+TEXDIR = doc/latex
+DESTDIR = $(shell $(OCAMLFIND) printconf destdir)
+
+all: all_non_mt all_mt
+opt: opt_non_mt opt_mt
+all_non_mt: http.cma
+opt_non_mt: http.cmxa
+all_mt: http_mt.cma
+opt_mt: http_mt.cmxa
world: all opt
+doc: all $(DOCDIR)/index.html $(DOTDIR)/ocaml-http.ps $(TEXDIR)/ocaml-http.ps $(OCAMLDOC_STUFF)
+$(DOCDIR)/index.html:
+ $(OCAMLDOC) -html -d $(DOCDIR) $(OCAMLDOC_STUFF)
+$(TEXDIR)/ocaml-http.tex: $(OCAMLDOC_STUFF)
+ $(OCAMLDOC) -latex -o $@ $^
+$(TEXDIR)/ocaml-http.ps: $(TEXDIR)/ocaml-http.tex
+ cd $(TEXDIR); \
+ latex ocaml-http; \
+ latex ocaml-http; \
+ dvips ocaml-http
+$(DOTDIR)/ocaml-http.ps: $(DOTDIR)/ocaml-http.dot
+ $(DOT) -Tps $< > $@
+$(DOTDIR)/ocaml-http.dot: *.ml *.mli
+ $(OCAMLDOC) -dot -o $(DOTDIR)/ocaml-http.dot *.ml *.mli
examples:
$(MAKE) -C examples/
%.cmx: %.ml %.cmi
$(OCAMLOPT) -c $<
-http.cma: $(patsubst %,%.cmo,$(MODULES))
+non_mt/$(THREADED_SRV).cmo: non_mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
+ cp $(THREADED_SRV).{cmi,mli} non_mt/
+ $(OCAMLC) -c $<
+non_mt/$(THREADED_SRV).cmx: non_mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
+ cp $(THREADED_SRV).{cmi,mli} non_mt/
+ $(OCAMLOPT) -c $<
+
+mt/$(THREADED_SRV).cmo: mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
+ cp $(THREADED_SRV).{cmi,mli} mt/
+ $(OCAMLC) $(THREADS_FLAGS) -c $<
+mt/$(THREADED_SRV).cmx: mt/$(THREADED_SRV).ml $(THREADED_SRV).cmi
+ cp $(THREADED_SRV).{cmi,mli} mt/
+ $(OCAMLOPT) $(THREADS_FLAGS) -c $<
+
+http.cma: $(patsubst %,%.cmo,$(MODULES_NON_MT))
$(OCAMLC) -a -o $@ $^
-http.cmxa: $(patsubst %,%.cmx,$(MODULES))
+http.cmxa: $(patsubst %,%.cmx,$(MODULES_NON_MT))
+ $(OCAMLOPT) -a -o $@ $^
+http_mt.cma: $(patsubst %,%.cmo,$(MODULES_MT))
+ $(OCAMLC) -a -o $@ $^
+http_mt.cmxa: $(patsubst %,%.cmx,$(MODULES_MT))
$(OCAMLOPT) -a -o $@ $^
meta: META
clean:
$(MAKE) -C examples/ clean
- -rm -f *.cm[ioax] *.cmxa *.[ao] test{,.opt}
+ for d in . mt non_mt; do \
+ rm -f $$d/*.cm[ioax] $$d/*.cmxa $$d/*.[ao] $$d/test{,.opt}; \
+ done
+ rm -f {mt,non_mt}/$(THREADED_SRV).mli
+docclean:
+ -rm -f \
+ $(DOCDIR)/*.html $(DOCDIR)/*.css \
+ $(DOTDIR)/*.dot $(DOTDIR)/*.ps \
+ $(TEXDIR)/*.{dvi,ps,ps.gz,pdf,aux,log,out,toc,tmp,haux,sty,tex}
distclean: clean
$(MAKE) -C examples/ distclean
- -rm -f META
-dist: distclean depend
- mkdir $(DISTDIR)
- cp -r \
- $(patsubst %,%.ml,$(MODULES)) $(patsubst %,%.mli,$(MODULES)) \
- $(EXTRA_DIST) examples/ debian/ \
- $(DISTDIR)/
+ rm -f META
+dist: distreal distrm
+distdoc: all doc
+ if [ -d $(DISTDIR) ]; then rm -rf $(DISTDIR); else true; fi
+ mkdir -p $(DISTDIR)/doc/
+ cp -r doc/html/ $(DISTDIR)/doc/
+ cp doc/dot/ocaml-http.ps $(DISTDIR)/doc/modules.ps
+ cp doc/latex/ocaml-http.ps $(DISTDIR)/doc/
+distreal: distdoc distclean depend
+ for f in \
+ $(patsubst %, %.ml, $(MODULES)) \
+ $(patsubst %, %.mli, $(MODULES) $(THREADED_SRV)) \
+ mt/ non_mt/ $(EXTRA_DIST) examples/ debian/; \
+ do \
+ cp -r $$f $(DISTDIR)/; \
+ done
-find $(DISTDIR)/ -type d -name CVS -exec rm -rf {} \;
-find $(DISTDIR)/ -type f -name ".cvs*" -exec rm -f {} \;
tar cvzf $(DISTDIR).tar.gz $(DISTDIR)/
+distrm:
+ rm -rf $(DISTDIR)/
+deb: docclean distreal
+ (cd $(DISTDIR)/ && debuild)
rm -rf $(DISTDIR)/
install: META
$(OCAMLFIND) install -destdir $(DESTDIR) $(PKGNAME) \
- META $(patsubst %,%.mli,$(PUBLIC_MODULES)) \
- $(patsubst %,%.cmi,$(PUBLIC_MODULES)) http.cm{,x}a http.a
+ $(patsubst %, %.mli, $(PUBLIC_MODULES)) \
+ $(patsubst %, %.cmi, $(PUBLIC_MODULES)) \
+ $(wildcard *.cma *.cmxa *.a) META
.PHONY: \
- all opt world examples examples.opt depend clean distclean dist \
- install meta
-
+ all opt world all_non_mt all_mt opt_non_mt opt_mt \
+ examples examples.opt depend clean distclean dist \
+ install meta doc deb distreal distrm