javaComp := $(shell which java)

ifneq ($(javaComp),)
  ext = .jar
  srcExt = .java
  cmd = javac
else
  ext = .o
  srcExt = .cs
  cmd = gcc
endif

sender   := sender$(ext)
receiver := receiver$(ext)
executables := $(sender) $(receiver)

$(sender)_src= sender_src$(srcExt) sender_impl$(srcExt) $(wildcard *.dat)
$(receiver)_src = main_rcv$(srcExt) socket$(srcExt) receiver_src$(srcExt)

install : $(executables)

define ProgramMacro =
  $(1) : $$($(1)_src)
endef

$(foreach exec,$(executables),$(eval $(call ProgramMacro,$(exec))))

$(executables):
  $(cmd) $^ -o $@

%.dat : %$(ext)
  getData $^ -o $@

ifneq ($(javaComp),)
  main.jar : main.java javaConf.dat
	 installJava $^ -o $@
else
  main.o : main.c ccConf.data
	 installCC $^ -o $@
endif