target = nuko.gif
frames = \
	frame0000.png \
	frame0001.png \
	frame0002.png \
	frame0003.png \
	frame0004.png \
	frame0005.png \
	frame0006.png \
	frame0007.png \
	frame0008.png \
	frame0009.png \
	frame0010.png \
	frame0011.png \
	frame0012.png \
	frame0013.png \
	frame0014.png \
	frame0015.png \
	frame0016.png \
	frame0017.png \
	frame0018.png \
	frame0019.png \
	frame0020.png \
	frame0021.png \
	frame0022.png \
	frame0023.png \
	frame0024.png \
	frame0025.png \
	frame0026.png \
	frame0027.png \
	frame0028.png \
	frame0029.png \
	frame0030.png \
	frame0031.png \
	frame0032.png \
	frame0033.png \
	frame0034.png \
	frame0035.png \
	frame0036.png \
	frame0037.png \
	frame0038.png \
	frame0039.png \
	frame0040.png \
	frame0041.png \
	frame0042.png \
	frame0043.png \
	frame0044.png \
	frame0045.png \
	frame0046.png \
	frame0047.png \
	frame0048.png \
	frame0049.png \
	frame0050.png \
	frame0051.png \
	frame0052.png \
	frame0053.png \
	frame0054.png \
	frame0055.png \
	frame0056.png \
	frame0057.png \
	frame0058.png \
	frame0059.png \
	frame0060.png \
	frame0061.png \
	frame0062.png \
	frame0063.png \
	frame0064.png \
	frame0065.png \
	frame0066.png \
	frame0067.png \
	frame0068.png \
	frame0069.png \
	frame0070.png \
	frame0071.png \
	frame0072.png \
	frame0073.png \
	frame0074.png \
	frame0075.png \
	frame0076.png \
	frame0077.png \
	frame0078.png \
	frame0079.png \
	frame0080.png \
	frame0081.png \
	frame0082.png \
	frame0083.png \
	frame0084.png \
	frame0085.png \
	frame0086.png \
	frame0087.png \
	frame0088.png \
	frame0089.png \
	frame0090.png \
	frame0091.png \
	frame0092.png \
	frame0093.png \
	frame0094.png \
	frame0095.png \
	frame0096.png \
	frame0097.png \
	frame0098.png \
	frame0099.png \
	frame0100.png \
	frame0101.png \
	frame0102.png \
	frame0103.png \
	frame0104.png \
	frame0105.png \
	frame0106.png \
	frame0107.png \
	frame0108.png \
	frame0109.png \
	frame0110.png \
	frame0111.png \
	frame0112.png \
	frame0113.png \
	frame0114.png \
	frame0115.png \
	frame0116.png \
	frame0117.png \
	frame0118.png \
	frame0119.png \
	frame0120.png \
	frame0121.png \
	frame0122.png \
	frame0123.png \
	frame0124.png \
	frame0125.png \
	frame0126.png \
	frame0127.png \
	frame0128.png \
	frame0129.png \
	frame0130.png \
	frame0131.png \
	frame0132.png \
	frame0133.png \
	frame0134.png \
	frame0135.png \
	frame0136.png \
	frame0137.png \
	frame0138.png \
	frame0139.png \
	frame0140.png \
	frame0141.png \
	frame0142.png \
	frame0143.png \
	frame0144.png \
	frame0145.png \
	frame0146.png \
	frame0147.png \
	frame0148.png \
	frame0149.png \
	frame0150.png \
	frame0151.png \
	frame0152.png \
	frame0153.png \
	frame0154.png \
	frame0155.png \
	frame0156.png \
	frame0157.png \
	frame0158.png \
	frame0159.png

ifeq ($(OSTYPE),cygwin)
eext = .exe
else
eext =
endif
cc = gcc
copts = -O3 -Wall -Werror


all: $(target)
	ls -l $<

$(target): frame_palette.png $(frames)
	ffmpeg -framerate 20 -i 'frame%04d.png' -i $< -lavfi 'paletteuse=dither=none' -y $@

frame_palette.png: $(frames)
	ffmpeg -i 'frame%04d.png' -vf 'palettegen' -y $@

part_a0000.png: nuko.c
	perl animate_shift.pl $< part_a

part_a.txt: nuko.c shift$(eext)
	./shift$(eext) < $< > $@

part_b0000.png: part_a.txt
	perl animate_rotate_cw.pl $< part_b

part_b.txt: part_a.txt rotate_cw$(eext)
	./rotate_cw$(eext) < $< > $@

part_c0000.png: part_b.txt
	perl animate_shift.pl $< part_c

part_c.txt: part_b.txt shift$(eext)
	./shift$(eext) < $< > $@

part_d0000.png: part_c.txt
	perl animate_rotate_cw.pl $< part_d

part_d.txt: part_c.txt rotate_cw$(eext)
	./rotate_cw$(eext) < $< > $@

part_e0000.png: part_d.txt
	perl animate_shift.pl $< part_e

part_e.txt: part_d.txt shift$(eext)
	./shift$(eext) < $< > $@

part_f0000.png: part_e.txt
	perl animate_rotate_cw.pl $< part_f

part_f.txt: part_e.txt rotate_cw$(eext)
	./rotate_cw$(eext) < $< > $@

part_g0000.png: part_f.txt
	perl animate_shift.pl $< part_g

part_g.txt: part_f.txt shift$(eext)
	./shift$(eext) < $< > $@

part_h0000.png: part_g.txt
	perl animate_rotate_cw.pl $< part_h


part_a0001.png: part_a0000.png
part_a0002.png: part_a0000.png
part_a0003.png: part_a0000.png
part_a0004.png: part_a0000.png
part_a0005.png: part_a0000.png
part_a0006.png: part_a0000.png
part_a0007.png: part_a0000.png
part_a0008.png: part_a0000.png
part_a0009.png: part_a0000.png
part_a0010.png: part_a0000.png
part_a0011.png: part_a0000.png
part_a0012.png: part_a0000.png
part_a0013.png: part_a0000.png
part_a0014.png: part_a0000.png
part_a0015.png: part_a0000.png
part_a0016.png: part_a0000.png
part_a0017.png: part_a0000.png
part_a0018.png: part_a0000.png
part_a0019.png: part_a0000.png

part_b0001.png: part_b0000.png
part_b0002.png: part_b0000.png
part_b0003.png: part_b0000.png
part_b0004.png: part_b0000.png
part_b0005.png: part_b0000.png
part_b0006.png: part_b0000.png
part_b0007.png: part_b0000.png
part_b0008.png: part_b0000.png
part_b0009.png: part_b0000.png
part_b0010.png: part_b0000.png
part_b0011.png: part_b0000.png
part_b0012.png: part_b0000.png
part_b0013.png: part_b0000.png
part_b0014.png: part_b0000.png
part_b0015.png: part_b0000.png
part_b0016.png: part_b0000.png
part_b0017.png: part_b0000.png
part_b0018.png: part_b0000.png
part_b0019.png: part_b0000.png

part_c0001.png: part_c0000.png
part_c0002.png: part_c0000.png
part_c0003.png: part_c0000.png
part_c0004.png: part_c0000.png
part_c0005.png: part_c0000.png
part_c0006.png: part_c0000.png
part_c0007.png: part_c0000.png
part_c0008.png: part_c0000.png
part_c0009.png: part_c0000.png
part_c0010.png: part_c0000.png
part_c0011.png: part_c0000.png
part_c0012.png: part_c0000.png
part_c0013.png: part_c0000.png
part_c0014.png: part_c0000.png
part_c0015.png: part_c0000.png
part_c0016.png: part_c0000.png
part_c0017.png: part_c0000.png
part_c0018.png: part_c0000.png
part_c0019.png: part_c0000.png

part_d0001.png: part_d0000.png
part_d0002.png: part_d0000.png
part_d0003.png: part_d0000.png
part_d0004.png: part_d0000.png
part_d0005.png: part_d0000.png
part_d0006.png: part_d0000.png
part_d0007.png: part_d0000.png
part_d0008.png: part_d0000.png
part_d0009.png: part_d0000.png
part_d0010.png: part_d0000.png
part_d0011.png: part_d0000.png
part_d0012.png: part_d0000.png
part_d0013.png: part_d0000.png
part_d0014.png: part_d0000.png
part_d0015.png: part_d0000.png
part_d0016.png: part_d0000.png
part_d0017.png: part_d0000.png
part_d0018.png: part_d0000.png
part_d0019.png: part_d0000.png

part_e0001.png: part_e0000.png
part_e0002.png: part_e0000.png
part_e0003.png: part_e0000.png
part_e0004.png: part_e0000.png
part_e0005.png: part_e0000.png
part_e0006.png: part_e0000.png
part_e0007.png: part_e0000.png
part_e0008.png: part_e0000.png
part_e0009.png: part_e0000.png
part_e0010.png: part_e0000.png
part_e0011.png: part_e0000.png
part_e0012.png: part_e0000.png
part_e0013.png: part_e0000.png
part_e0014.png: part_e0000.png
part_e0015.png: part_e0000.png
part_e0016.png: part_e0000.png
part_e0017.png: part_e0000.png
part_e0018.png: part_e0000.png
part_e0019.png: part_e0000.png

part_f0001.png: part_f0000.png
part_f0002.png: part_f0000.png
part_f0003.png: part_f0000.png
part_f0004.png: part_f0000.png
part_f0005.png: part_f0000.png
part_f0006.png: part_f0000.png
part_f0007.png: part_f0000.png
part_f0008.png: part_f0000.png
part_f0009.png: part_f0000.png
part_f0010.png: part_f0000.png
part_f0011.png: part_f0000.png
part_f0012.png: part_f0000.png
part_f0013.png: part_f0000.png
part_f0014.png: part_f0000.png
part_f0015.png: part_f0000.png
part_f0016.png: part_f0000.png
part_f0017.png: part_f0000.png
part_f0018.png: part_f0000.png
part_f0019.png: part_f0000.png

part_g0001.png: part_g0000.png
part_g0002.png: part_g0000.png
part_g0003.png: part_g0000.png
part_g0004.png: part_g0000.png
part_g0005.png: part_g0000.png
part_g0006.png: part_g0000.png
part_g0007.png: part_g0000.png
part_g0008.png: part_g0000.png
part_g0009.png: part_g0000.png
part_g0010.png: part_g0000.png
part_g0011.png: part_g0000.png
part_g0012.png: part_g0000.png
part_g0013.png: part_g0000.png
part_g0014.png: part_g0000.png
part_g0015.png: part_g0000.png
part_g0016.png: part_g0000.png
part_g0017.png: part_g0000.png
part_g0018.png: part_g0000.png
part_g0019.png: part_g0000.png

part_h0001.png: part_h0000.png
part_h0002.png: part_h0000.png
part_h0003.png: part_h0000.png
part_h0004.png: part_h0000.png
part_h0005.png: part_h0000.png
part_h0006.png: part_h0000.png
part_h0007.png: part_h0000.png
part_h0008.png: part_h0000.png
part_h0009.png: part_h0000.png
part_h0010.png: part_h0000.png
part_h0011.png: part_h0000.png
part_h0012.png: part_h0000.png
part_h0013.png: part_h0000.png
part_h0014.png: part_h0000.png
part_h0015.png: part_h0000.png
part_h0016.png: part_h0000.png
part_h0017.png: part_h0000.png
part_h0018.png: part_h0000.png
part_h0019.png: part_h0000.png


frame0000.png: part_a0000.png
	cp $< $@

frame0001.png: part_a0001.png
	cp $< $@

frame0002.png: part_a0002.png
	cp $< $@

frame0003.png: part_a0003.png
	cp $< $@

frame0004.png: part_a0004.png
	cp $< $@

frame0005.png: part_a0005.png
	cp $< $@

frame0006.png: part_a0006.png
	cp $< $@

frame0007.png: part_a0007.png
	cp $< $@

frame0008.png: part_a0008.png
	cp $< $@

frame0009.png: part_a0009.png
	cp $< $@

frame0010.png: part_a0010.png
	cp $< $@

frame0011.png: part_a0011.png
	cp $< $@

frame0012.png: part_a0012.png
	cp $< $@

frame0013.png: part_a0013.png
	cp $< $@

frame0014.png: part_a0014.png
	cp $< $@

frame0015.png: part_a0015.png
	cp $< $@

frame0016.png: part_a0016.png
	cp $< $@

frame0017.png: part_a0017.png
	cp $< $@

frame0018.png: part_a0018.png
	cp $< $@

frame0019.png: part_a0019.png
	cp $< $@

frame0020.png: part_b0000.png
	cp $< $@

frame0021.png: part_b0001.png
	cp $< $@

frame0022.png: part_b0002.png
	cp $< $@

frame0023.png: part_b0003.png
	cp $< $@

frame0024.png: part_b0004.png
	cp $< $@

frame0025.png: part_b0005.png
	cp $< $@

frame0026.png: part_b0006.png
	cp $< $@

frame0027.png: part_b0007.png
	cp $< $@

frame0028.png: part_b0008.png
	cp $< $@

frame0029.png: part_b0009.png
	cp $< $@

frame0030.png: part_b0010.png
	cp $< $@

frame0031.png: part_b0011.png
	cp $< $@

frame0032.png: part_b0012.png
	cp $< $@

frame0033.png: part_b0013.png
	cp $< $@

frame0034.png: part_b0014.png
	cp $< $@

frame0035.png: part_b0015.png
	cp $< $@

frame0036.png: part_b0016.png
	cp $< $@

frame0037.png: part_b0017.png
	cp $< $@

frame0038.png: part_b0018.png
	cp $< $@

frame0039.png: part_b0019.png
	cp $< $@

frame0040.png: part_c0000.png
	cp $< $@

frame0041.png: part_c0001.png
	cp $< $@

frame0042.png: part_c0002.png
	cp $< $@

frame0043.png: part_c0003.png
	cp $< $@

frame0044.png: part_c0004.png
	cp $< $@

frame0045.png: part_c0005.png
	cp $< $@

frame0046.png: part_c0006.png
	cp $< $@

frame0047.png: part_c0007.png
	cp $< $@

frame0048.png: part_c0008.png
	cp $< $@

frame0049.png: part_c0009.png
	cp $< $@

frame0050.png: part_c0010.png
	cp $< $@

frame0051.png: part_c0011.png
	cp $< $@

frame0052.png: part_c0012.png
	cp $< $@

frame0053.png: part_c0013.png
	cp $< $@

frame0054.png: part_c0014.png
	cp $< $@

frame0055.png: part_c0015.png
	cp $< $@

frame0056.png: part_c0016.png
	cp $< $@

frame0057.png: part_c0017.png
	cp $< $@

frame0058.png: part_c0018.png
	cp $< $@

frame0059.png: part_c0019.png
	cp $< $@

frame0060.png: part_d0000.png
	cp $< $@

frame0061.png: part_d0001.png
	cp $< $@

frame0062.png: part_d0002.png
	cp $< $@

frame0063.png: part_d0003.png
	cp $< $@

frame0064.png: part_d0004.png
	cp $< $@

frame0065.png: part_d0005.png
	cp $< $@

frame0066.png: part_d0006.png
	cp $< $@

frame0067.png: part_d0007.png
	cp $< $@

frame0068.png: part_d0008.png
	cp $< $@

frame0069.png: part_d0009.png
	cp $< $@

frame0070.png: part_d0010.png
	cp $< $@

frame0071.png: part_d0011.png
	cp $< $@

frame0072.png: part_d0012.png
	cp $< $@

frame0073.png: part_d0013.png
	cp $< $@

frame0074.png: part_d0014.png
	cp $< $@

frame0075.png: part_d0015.png
	cp $< $@

frame0076.png: part_d0016.png
	cp $< $@

frame0077.png: part_d0017.png
	cp $< $@

frame0078.png: part_d0018.png
	cp $< $@

frame0079.png: part_d0019.png
	cp $< $@

frame0080.png: part_e0000.png
	cp $< $@

frame0081.png: part_e0001.png
	cp $< $@

frame0082.png: part_e0002.png
	cp $< $@

frame0083.png: part_e0003.png
	cp $< $@

frame0084.png: part_e0004.png
	cp $< $@

frame0085.png: part_e0005.png
	cp $< $@

frame0086.png: part_e0006.png
	cp $< $@

frame0087.png: part_e0007.png
	cp $< $@

frame0088.png: part_e0008.png
	cp $< $@

frame0089.png: part_e0009.png
	cp $< $@

frame0090.png: part_e0010.png
	cp $< $@

frame0091.png: part_e0011.png
	cp $< $@

frame0092.png: part_e0012.png
	cp $< $@

frame0093.png: part_e0013.png
	cp $< $@

frame0094.png: part_e0014.png
	cp $< $@

frame0095.png: part_e0015.png
	cp $< $@

frame0096.png: part_e0016.png
	cp $< $@

frame0097.png: part_e0017.png
	cp $< $@

frame0098.png: part_e0018.png
	cp $< $@

frame0099.png: part_e0019.png
	cp $< $@

frame0100.png: part_f0000.png
	cp $< $@

frame0101.png: part_f0001.png
	cp $< $@

frame0102.png: part_f0002.png
	cp $< $@

frame0103.png: part_f0003.png
	cp $< $@

frame0104.png: part_f0004.png
	cp $< $@

frame0105.png: part_f0005.png
	cp $< $@

frame0106.png: part_f0006.png
	cp $< $@

frame0107.png: part_f0007.png
	cp $< $@

frame0108.png: part_f0008.png
	cp $< $@

frame0109.png: part_f0009.png
	cp $< $@

frame0110.png: part_f0010.png
	cp $< $@

frame0111.png: part_f0011.png
	cp $< $@

frame0112.png: part_f0012.png
	cp $< $@

frame0113.png: part_f0013.png
	cp $< $@

frame0114.png: part_f0014.png
	cp $< $@

frame0115.png: part_f0015.png
	cp $< $@

frame0116.png: part_f0016.png
	cp $< $@

frame0117.png: part_f0017.png
	cp $< $@

frame0118.png: part_f0018.png
	cp $< $@

frame0119.png: part_f0019.png
	cp $< $@

frame0120.png: part_g0000.png
	cp $< $@

frame0121.png: part_g0001.png
	cp $< $@

frame0122.png: part_g0002.png
	cp $< $@

frame0123.png: part_g0003.png
	cp $< $@

frame0124.png: part_g0004.png
	cp $< $@

frame0125.png: part_g0005.png
	cp $< $@

frame0126.png: part_g0006.png
	cp $< $@

frame0127.png: part_g0007.png
	cp $< $@

frame0128.png: part_g0008.png
	cp $< $@

frame0129.png: part_g0009.png
	cp $< $@

frame0130.png: part_g0010.png
	cp $< $@

frame0131.png: part_g0011.png
	cp $< $@

frame0132.png: part_g0012.png
	cp $< $@

frame0133.png: part_g0013.png
	cp $< $@

frame0134.png: part_g0014.png
	cp $< $@

frame0135.png: part_g0015.png
	cp $< $@

frame0136.png: part_g0016.png
	cp $< $@

frame0137.png: part_g0017.png
	cp $< $@

frame0138.png: part_g0018.png
	cp $< $@

frame0139.png: part_g0019.png
	cp $< $@

frame0140.png: part_h0000.png
	cp $< $@

frame0141.png: part_h0001.png
	cp $< $@

frame0142.png: part_h0002.png
	cp $< $@

frame0143.png: part_h0003.png
	cp $< $@

frame0144.png: part_h0004.png
	cp $< $@

frame0145.png: part_h0005.png
	cp $< $@

frame0146.png: part_h0006.png
	cp $< $@

frame0147.png: part_h0007.png
	cp $< $@

frame0148.png: part_h0008.png
	cp $< $@

frame0149.png: part_h0009.png
	cp $< $@

frame0150.png: part_h0010.png
	cp $< $@

frame0151.png: part_h0011.png
	cp $< $@

frame0152.png: part_h0012.png
	cp $< $@

frame0153.png: part_h0013.png
	cp $< $@

frame0154.png: part_h0014.png
	cp $< $@

frame0155.png: part_h0015.png
	cp $< $@

frame0156.png: part_h0016.png
	cp $< $@

frame0157.png: part_h0017.png
	cp $< $@

frame0158.png: part_h0018.png
	cp $< $@

frame0159.png: part_h0019.png
	cp $< $@


rotate_ccw$(eext): nuko.c
	$(cc) $(copts) $< -o $@

generated1.c: nuko.c rotate_ccw$(eext)
	./rotate_ccw$(eext) < $< > $@

rotate_cw$(eext): generated1.c
	$(cc) $(copts) $< -o $@

generated2.c: nuko.c rotate_cw$(eext)
	./rotate_cw$(eext) < $< > $@

shift$(eext): generated2.c
	$(cc) $(copts) $< -o $@

clean:
	-rm -f rotate_cw$(eext) rotate_ccw$(eext) shift$(eext)
	-rm -f generated* part* frame*.png $(target)
