SDKDIR=$(HOME)/.dotnet/sdk/6.0.102# or whatever your sdk is
CSCPATH=$(SDKDIR)/Roslyn/bincore/csc.dll
NETSTANDARD=$(SDKDIR)/ref/netstandard.dll
CONFIG=$(SDKDIR)/vstest.console.runtimeconfig.json
DOTNET=DOTNET_CLI_TELEMETRY_OPTOUT=1; dotnet
CSC=$(DOTNET) $(CSCPATH) -reference:$(NETSTANDARD)
RUN=$(DOTNET) exec --runtimeconfig $(CONFIG)
CSC = mcs
RUN = mono

all: erf.gnuplot.png erf.graph.png

erf.graph.png: out.erf.txt Makefile
	cat tab.erf.txt | awk '{print $$1, $$2}' > log.dots.txt
	graph \
	--output-format png \
	--x-label "x" \
	--y-label "y" \
	--line-mode 1 out.erf.txt \
	--line-mode -1 --symbol 4 log.dots.txt \
	> $@

erf.gnuplot.png: erf.pyxplot.png
	cat log.pyx.gpi | sed  's/pyxplot/gnuplot/' | tee log.gnu.gpi | gnuplot

erf.pyxplot.png: out.erf.txt tab.erf.txt
	echo '\
	set terminal png ;\
	set output "$@" ;\
	set xlabel "$$x$$" ;\
	set ylabel "$$y$$" ;\
	set tics out ;\
	set title "error function" ;\
	set key left top ;\
	plot [-2:2] [-1:1] "$<" index 0 using 1:2 with lines title "erf($$x$$)",\
	"tab.erf.txt" using 1:2 with points pointtype 2 title "tabulated data" \
	'| tee log.pyx.gpi | pyxplot

tab.erf.txt: Makefile
	>$@
	echo 0.2	0.222702589 >>$@
	echo 0.4	0.428392355 >>$@
	echo 0.8	0.742100965 >>$@
	echo 1.2	0.910313978 >>$@
	cat $@ | awk '{print -$$1, -$$2}' >> $@

out.erf.txt: main.exe
	mono $< > $@

%.exe: %.cs
	mcs -t:exe $(addprefix -r,$(filter %.dll,$^)) $(filter %.cs,$^)

clean:
	$(RM) *.png log* [Oo]ut* *.exe tab*

test:
	/bin/echo $$ x $$
