# Makefile - Don Yang (uguu.org)
#
# 2014-07-17


# Set this to 0 for GCC, 1 for Clang.
use_clang = 0

ifeq ($(OSTYPE), cygwin)
eext = .exe
copts = -Wall -Werror -O2
c90 = x86_64-w64-mingw32-gcc -std=c90 $(copts)
cpp98 = x86_64-w64-mingw32-g++ -std=c++98 $(copts)
cpp11 = x86_64-w64-mingw32-g++ -std=c++0x $(copts)
else
eext =
ifeq ($(use_clang), 1)
copts = -O2
c90 = clang -x c -std=c90 $(copts)
cpp98 = clang -x c++ -std=c++98 $(copts)
cpp11 = clang -x c++ -std=c++11 $(copts)
else
copts = -Wall -Werror -O2
c90 = gcc -std=c90 $(copts)
cpp98 = g++ -std=c++98 $(copts)
cpp11 = g++ -std=c++0x $(copts)
endif
endif

source = $(generated_source)
generated_source = generated_base.c
targets = yoshino$(eext) yoshinon$(eext) zadkiel$(eext)

all: $(targets)

yoshino$(eext): $(source)
	$(c90) $< -o $@

yoshinon$(eext): $(source)
	$(cpp98) $< -o $@

zadkiel$(eext): $(source)
	$(cpp11) $< -o $@

$(generated_source): yoshino.txt yoshinon.txt zadkiel.txt yoshino7_template.c encode_all.pl
	perl encode_all.pl > $@

test: \
	test_passed.encode \
	test_passed.yoshino \
	test_passed.yoshinon \
	test_passed.zadkiel

test_passed.encode:
	perl encode_test.pl && touch $@

test_passed.yoshino: \
	generated_yoshino.c \
	generated_yoshino_yoshino.c \
	generated_yoshinon_yoshino.c \
	generated_zadkiel_yoshino.c
	perl all_the_same.pl $^ && touch $@

test_passed.yoshinon: \
	generated_yoshinon.c \
	generated_yoshino_yoshinon.c \
	generated_yoshinon_yoshinon.c \
	generated_zadkiel_yoshinon.c
	perl all_the_same.pl $^ && touch $@

test_passed.zadkiel: \
	generated_zadkiel.c \
	generated_yoshino_zadkiel.c \
	generated_yoshinon_zadkiel.c \
	generated_zadkiel_zadkiel.c
	perl all_the_same.pl $^ && touch $@

generated_yoshino.c: yoshino$(eext)
	./$< > $@

generated_yoshinon.c: yoshinon$(eext)
	./$< > $@

generated_zadkiel.c: zadkiel$(eext)
	./$< > $@

generated_yoshino_yoshino$(eext): generated_yoshino.c
	$(c90) $< -o $@

generated_yoshino_yoshinon$(eext): generated_yoshino.c
	$(cpp98) $< -o $@

generated_yoshino_zadkiel$(eext): generated_yoshino.c
	$(cpp11) $< -o $@

generated_yoshinon_yoshino$(eext): generated_yoshinon.c
	$(c90) $< -o $@

generated_yoshinon_yoshinon$(eext): generated_yoshinon.c
	$(cpp98) $< -o $@

generated_yoshinon_zadkiel$(eext): generated_yoshinon.c
	$(cpp11) $< -o $@

generated_zadkiel_yoshino$(eext): generated_zadkiel.c
	$(c90) $< -o $@

generated_zadkiel_yoshinon$(eext): generated_zadkiel.c
	$(cpp98) $< -o $@

generated_zadkiel_zadkiel$(eext): generated_zadkiel.c
	$(cpp11) $< -o $@

generated_yoshino_yoshino.c: generated_yoshino_yoshino$(eext)
	./$< > $@

generated_yoshino_yoshinon.c: generated_yoshino_yoshinon$(eext)
	./$< > $@

generated_yoshino_zadkiel.c: generated_yoshino_zadkiel$(eext)
	./$< > $@

generated_yoshinon_yoshino.c: generated_yoshinon_yoshino$(eext)
	./$< > $@

generated_yoshinon_yoshinon.c: generated_yoshinon_yoshinon$(eext)
	./$< > $@

generated_yoshinon_zadkiel.c: generated_yoshinon_zadkiel$(eext)
	./$< > $@

generated_zadkiel_yoshino.c: generated_zadkiel_yoshino$(eext)
	./$< > $@

generated_zadkiel_yoshinon.c: generated_zadkiel_yoshinon$(eext)
	./$< > $@

generated_zadkiel_zadkiel.c: generated_zadkiel_zadkiel$(eext)
	./$< > $@


clean:
	-rm -f $(targets)
	-rm -f test_passed.* generated_*

backup:
	-rm -f backup.tar.gz
	tar cf backup.tar *.c *.pl *.txt Makefile
	gzip -9 backup.tar
