EXECS= \
  anla \
  doctor \
  dosefill \
  mainframe \
  tart \
	pkglab

LIBS= \
  camlzip \
	conduit \
  config \
  debparser \
  debsqlfill \
  debver \
  depextract \
  dosebase \
  dql \
  httpd \
  io \
  ledit \
	lifetime \
  mmap \
	napkin \
  packetology \
  progress \
	rapids \
  rpmver \
  satsolver \
  util

DIRS=$(EXECS) $(LIBS)
DO=$(MAKE) -I $(PWD)/make BASE=$(PWD)

.PHONY: all clean
.PHONY: $(DIRS)
.PHONY: tart util io doctor

all: tart

clean:
	@for x in $(DIRS) ; do \
	  $(DO) -C $$x clean ; \
	done


define EXEC_TEMPLATE
$(1): $(1)/$(1).opt $(1)/$(1).byte

$(1)/$(1).opt: $(foreach x,$(2),$x/$x.cmxa)

$(1)/$(1).byte: $(foreach x,$(2),$x/$x.cma)

$(1)/$(1).opt $(1)/$(1).byte:
	$(DO) -C $(1) all
endef

define LIB_TEMPLATE
$(1): $(1)/$(1).cmxa $(1)/$(1).cma

$(1)/$(1).cmxa: $(foreach x,$(2),$x/$x.cmxa)

$(1)/$(1).cma: $(foreach x,$(2),$x/$x.cma)

$(1)/$(1).cmxa $(1)/$(1).cma:
	$(DO) -C $(1) all
endef

#$(foreach exec, $(EXECS), $(eval $(call EXEC_TEMPLATE,$(exec))))
#$(foreach lib, $(LIBS), $(eval $(call LIB_TEMPLATE,$(lib))))

$(eval $(call LIB_TEMPLATE,util,))
$(eval $(call LIB_TEMPLATE,io,))
$(eval $(call LIB_TEMPLATE,mmap,))
$(eval $(call LIB_TEMPLATE,napkin,io))
$(eval $(call LIB_TEMPLATE,debver,util io))
$(eval $(call LIB_TEMPLATE,rpmver,util io))
$(eval $(call LIB_TEMPLATE,progress,util))
$(eval $(call LIB_TEMPLATE,debparser,util))
$(eval $(call LIB_TEMPLATE,lifetime,io))
$(eval $(call LIB_TEMPLATE,dosebase,util io mmap lifetime))
$(eval $(call LIB_TEMPLATE,ocamlrpm,util io mmap))
$(eval $(call EXEC_TEMPLATE,dosebase,util io mmap))
$(eval $(call LIB_TEMPLATE,satsolver,))
$(eval $(call LIB_TEMPLATE,packetology,util io satsolver napkin rapids))
$(eval $(call LIB_TEMPLATE,ledit,))
$(eval $(call LIB_TEMPLATE,config,))
$(eval $(call LIB_TEMPLATE,dql,util progress debver io satsolver rapids packetology))
$(eval $(call LIB_TEMPLATE,camlzip,))
$(eval $(call LIB_TEMPLATE,httpd,util config camlzip))
$(eval $(call LIB_TEMPLATE,conduit,))
$(eval $(call LIB_TEMPLATE,rapids,lifetime napkin conduit dosebase progress debparser debver rpmver))
$(eval $(call EXEC_TEMPLATE,debsqlfill,util camlzip debparser debver progress io mmap dosebase))
$(eval $(call EXEC_TEMPLATE,dosefill,util io mmap progress debver debparser dosebase))
$(eval $(call EXEC_TEMPLATE,doctor,util io packetology))
$(eval $(call EXEC_TEMPLATE,tart,util io))
$(eval $(call EXEC_TEMPLATE,anla,util io progress ledit debver rpmver debparser mmap dosebase httpd packetology))
$(eval $(call EXEC_TEMPLATE,pkglab,conduit rapids dql ledit))
