include Makefile.config

INCLUDES=-I japan \
	 -I misc -I www -I http -I html -I protos -I retrieve -I viewers \
         -I htdisp -I appsys -I safe -I browser

DEPFLAGS=$(INCLUDES)

COMPFLAGS=$(TKCOMPFLAGS) $(INCLUDES)

all : htparse mmm mmm_remote

JAPAN=japan/japan.cmo

MISC=misc/low.cmo misc/mstring.cmo misc/mlist.cmo misc/msys.cmo \
     misc/ebuffer.cmo misc/munix.cmo misc/stringexc.cmo misc/date.cmo \
     misc/i18n.cmo misc/log.cmo \
     misc/condition.cmo misc/feed.cmo misc/error.cmo misc/hotlist.cmo \
     misc/lexpath.cmo

beforedepend:: misc/lexpath.ml

misc/lexpath.ml : misc/lexpath.mll
	$(CAMLLEX) misc/lexpath.mll

clean::
	rm -f misc/lexpath.ml

# Minimum MISC for htparse
HTMISC=misc/mstring.cmo misc/ebuffer.cmo misc/i18n.cmo

WWW=www/url.cmo www/uri.cmo www/urlenc.cmo www/lexurl.cmo www/hyper.cmo \
    www/www.cmo www/document.cmo www/maps.cmo

beforedepend:: www/lexurl.ml

www/lexurl.ml : www/lexurl.mll
	$(CAMLLEX) www/lexurl.mll
clean::
	rm -f www/lexurl.ml


HTTP=http/base64.cmo http/lexdate.cmo http/http_headers.cmo \
     http/lexheaders.cmo http/auth.cmo \
     http/http.cmo http/retype.cmo \
     http/http_date.cmo

beforedepend:: http/lexheaders.ml http/lexdate.ml

http/lexheaders.ml : http/lexheaders.mll
	$(CAMLLEX) http/lexheaders.mll

http/lexdate.ml : http/lexdate.mll
	$(CAMLLEX) http/lexdate.mll

clean::
	rm -f http/lexheaders.ml http/lexdate.ml

HTML=html/dtd.cmo html/html.cmo html/lexhtml.cmo html/html_eval.cmo

beforedepend:: html/lexhtml.ml

html/lexhtml.ml : html/lexhtml.mll
	$(CAMLLEX) html/lexhtml.mll

clean::
	rm -rf html/lexhtml.ml

PROTOS=protos/file.cmo protos/mailto.cmo protos/cache.cmo protos/protos.cmo

RETRIEVE=retrieve/retrieve.cmo retrieve/scheduler.cmo retrieve/img.cmo
VIEWERS=viewers/decoders.cmo viewers/save.cmo viewers/viewers.cmo \
        viewers/embed.cmo viewers/plain.cmo

HTDISP=htdisp/html_form.cmo htdisp/html_table.cmo\
       htdisp/hr.cmo htdisp/form.cmo htdisp/table.cmo \
       htdisp/fonts.cmo htdisp/styles.cmo htdisp/htbind.cmo \
       htdisp/jfonts.cmo htdisp/jattrs.cmo \
       htdisp/cmap.cmo htdisp/imgload.cmo htdisp/html_disp.cmo \
       htdisp/source.cmo htdisp/attrs.cmo \
       htdisp/textw_fo.cmo htdisp/htmlw.cmo

# main is separate
BROWSER=browser/about.cmo browser/gcache.cmo \
	browser/fontprefs.cmo browser/prefs.cmo \
        browser/history.cmo browser/plink.cmo browser/nav.cmo browser/mmm.cmo \
        browser/debug.cmo 
MAIN=browser/main.cmo

## The applet system
APPLETS=appsys/pgp.cmo appsys/capabilities.cmo appsys/dload.cmo \
        appsys/applets.cmo appsys/appview.cmo
SAFELIBS=safe/safestd.cmo safe/safeio.cmo safe/safeapplets.cmo \
         safe/safemmm.cmo
EXTRALIBS=safe/safetk.cmo safe/safefrx.cmo safe/safetkanim.cmo safe/safejtk.cmo
SAFE= $(SAFELIBS) safe/crcs.cmo

# These are shared with the Calves plugin
SHARED=safe/safestd.ml safe/safestd.mli \
	       safe/safeio.ml safe/safeio.mli \
               safe/safeapplets.mli \
	       safe/safetk.cmi safe/safetk.cmo \
	       safe/safefrx.cmi safe/safefrx.cmo \
	       safe/safetkanim.cmi safe/safetkanim.cmo \
	       safe/safejtk.cmi safe/safejtk.cmo

beforedepend:: $(SHARED)

safe/safestd.ml:
	-ln -s ../shared/$@ $@
safe/safestd.mli:
	-ln -s ../shared/$@ $@
safe/safeio.mli:
	-ln -s ../shared/$@ $@
safe/safeio.ml:
	-ln -s ../shared/$@ $@
safe/safeapplets.mli:
	-ln -s ../shared/$@ $@
safe/safetk.cmi:
	-ln -s ../shared/$@ $@
safe/safetk.cmo:
	-ln -s ../shared/$@ $@
safe/safefrx.cmo:
	-ln -s ../shared/$@ $@
safe/safefrx.cmi:
	-ln -s ../shared/$@ $@
safe/safetkanim.cmo:
	-ln -s ../shared/$@ $@
safe/safetkanim.cmi:
	-ln -s ../shared/$@ $@
safe/safejtk.cmo:
	-ln -s ../shared/$@ $@
safe/safejtk.cmi:
	-ln -s ../shared/$@ $@
 
safe/crcs.ml : $(SAFELIBS) $(EXTRALIBS)
	-mv safe/crcs.ml safe/crcs.ml.bak
	$(LIBDIR)/extract_crc -I safe -I $(LIBDIR) \
	  Oo Safestd Safeio Safeapplets Safetk Safefrx Safemmm Safetkanim Safejtk\
	  > safe/crcs.ml || rm safe/crcs.ml
	diff safe/crcs.ml safe/crcs.ml.bak || echo "WARNING: CRCs have changed"


OBJS= version.cmo $(MISC) $(JAPAN) $(WWW) $(HTTP) $(HTML) $(PROTOS) $(RETRIEVE) \
      $(VIEWERS) $(HTDISP) $(APPLETS) $(BROWSER) $(SAFE) $(MAIN)

mmm: $(SHARED) $(OBJS) 
	$(CAMLC) -custom -o mmm \
		$(WITH_UNIX) $(WITH_STR) $(WITH_DYNLINK) $(WITH_TK) \
	        $(WITH_FRX) $(WITH_JPF) $(WITH_TKANIM) $(WITH_JTK) \
		$(EXTRALIBS) $(OBJS)

# Debug version
# In ocaml, make libcamlrund.a, and copy it in . as libcamlrun.a
mmmd: $(SHARED) $(OBJS) 
	$(CAMLC) -custom -o mmmd -ccopt -g -ccopt -L. \
		$(WITH_UNIX) $(WITH_STR) $(WITH_DYNLINK) $(WITH_TK) \
	        $(WITH_FRX) $(WITH_JPF) $(WITH_TKANIM) $(WITH_JTK) \
		$(EXTRALIBS) $(OBJS)

htparse: $(HTMISC) $(HTML) html/htparse.cmo
	$(CAMLC) -o htparse $(HTMISC) $(HTML) html/htparse.cmo

mmm_remote: remote/mmm_remote.cmo
	$(CAMLC) -custom -o mmm_remote $(WITH_UNIX) remote/mmm_remote.cmo



install: mmm htparse mmm_remote
	[ -d $(INSTALLDIR) ] || mkdir $(INSTALLDIR)
	cp mmm $(INSTALLDIR)/mmm.bin
	cp htparse mmm_remote $(INSTALLDIR)
	cp msgs.txt $(INSTALLDIR)
	cp MMM.ad $(INSTALLDIR)
	cp mmm.sh $(INSTALLDIR)/mmm

install-mdk:
	[ -d $(INSTALLDIR)/mdk ] || mkdir $(INSTALLDIR)/mdk
	cp safe/safe*.mli safe/safe*.cmi $(INSTALLDIR)/mdk


clean::
	rm -f version.cm[io]
	rm -rf misc/*.cm[io]
	rm -rf www/*.cm[io]
	rm -rf http/*.cm[io]
	rm -rf html/*.cm[io]
	rm -rf protos/*.cm[io]
	rm -rf retrieve/*.cm[io]
	rm -rf viewers/*.cm[io]
	rm -rf htdisp/*.cm[io]
	rm -rf appsys/*.cm[io]
	rm -rf safe/*.cm[io]
	rm -rf browser/*.cm[io]
	rm -rf japan/*.cm[io]
	rm -f mmm mmm_remote htparse

# Default rules

.SUFFIXES: .ml .mli .cmo .cmi .cmx

.ml.cmo:
	$(CAMLC) $(COMPFLAGS) -c $<

.mli.cmi:
	$(CAMLC) $(COMPFLAGS) -c $<

.ml.cmx:
	$(CAMLOPT) $(COMPFLAGS) -c $<

depend: beforedepend
	(for d in misc www http html protos retrieve viewers htdisp appsys safe browser japan; \
	do $(CAMLDEP) $(DEPFLAGS) $$d/*.mli $$d/*.ml; \
	done; $(CAMLDEP) version.ml version.mli) > .depend

include .depend
