SOURCE=prog.c
CFLAGS=-Wall -Wextra -pedantic -O3

all: left right shift example_output

example_output: msg0.txt msg1.txt msg2.txt

left: $(SOURCE)
	$(CC) $(CFLAGS) $< -o $@

right: generated1.c
	$(CC) $(CFLAGS) $< -o $@

shift: generated2.c
	$(CC) $(CFLAGS) $< -o $@

msg0.txt: msg0
	./$< > $@

msg0: generated3.c
	$(CC) $(CFLAGS) $< -o $@

msg1.txt: msg1
	./$< > $@

msg1: generated4.c
	$(CC) $(CFLAGS) $< -o $@

msg2.txt: msg2
	./$< > $@

msg2: generated5.c
	$(CC) $(CFLAGS) $< -o $@

generated1.c: $(SOURCE) left
	./left < $< > $@

generated2.c: $(SOURCE) right
	./right < $< > $@

generated3.c: $(SOURCE) left
	./left < $< | ./left > $@

generated4.c: $(SOURCE) left shift
	./shift < $< | ./left > $@

generated5.c: $(SOURCE) right shift
	./shift < $< | ./right > $@


clean:
	-rm -f left right shift generated*.c msg*





spoiler: spoilers

spoilers:
	@echo "Really show spoilers?  Please build this target to confirm:"
	@echo "   i_give_up_show_me_the_spoilers"

i_give_up_show_me_the_spoilers: msg3.txt msg4.txt msg5.txt msg6.txt msg7.txt msg8.txt msg9.txt

msg3.txt: msg3
	./$< > $@

msg3: generated6.c
	$(CC) $(CFLAGS) $< -o $@

msg4.txt: msg4
	./$< > $@

msg4: generated7.c
	$(CC) $(CFLAGS) $< -o $@

msg5.txt: msg5
	./$< > $@

msg5: generated8.c
	$(CC) $(CFLAGS) $< -o $@

msg6.txt: msg6
	./$< > $@

msg6: generated9.c
	$(CC) $(CFLAGS) $< -o $@

msg7.txt: msg7
	./$< > $@

msg7: generated10.c
	$(CC) $(CFLAGS) $< -o $@

msg8.txt: msg8
	./$< > $@

msg8: generated11.c
	$(CC) $(CFLAGS) $< -o $@

msg9.txt: msg9 $(SOURCE)
	./$< < $(SOURCE) > $@

msg9: generated12.c
	$(CC) $(CFLAGS) $< -o $@

generated6.c: $(SOURCE) right left shift
	./right < $< | ./shift | ./left > $@

generated7.c: $(SOURCE) right shift
	./shift < $< | ./right | ./shift | ./right > $@

generated8.c: generated7.c right left shift
	./shift < $< | ./right | ./shift | ./left > $@

generated9.c: generated8.c right shift
	./right < $< | ./right | ./shift | ./right | ./shift | ./right > $@

generated10.c: generated9.c right left shift
	./shift < $< | ./right | ./shift | ./left > $@

generated11.c: generated10.c right shift
	./right < $< | ./right | ./shift | ./right | ./shift | ./right > $@

generated12.c: msg7.txt
	cp $< $@





spoiler_for_the_truly_impatient: i_just_want_to_see_the_final_message

i_just_want_to_see_the_final_message: msg11.txt
	@cat $<

msg11.txt: msg11 $(SOURCE)
	./$< < $(SOURCE) > $@

msg10: generated13.c
	$(CC) $(CFLAGS) $< -o $@

msg11: generated14.c
	$(CC) $(CFLAGS) $< -o $@

generated13.c: $(SOURCE) left shift
	./left < $< | ./left | ./left | ./shift | ./left | ./shift | ./left | ./shift | ./left > $@

generated14.c: $(SOURCE) msg10
	./msg10 < $< > $@
