.PHONY: all clean

.PRECIOUS: $(EXAMPLES_PPM)

RAYTRACER_FLAGS :=
DOCKER := docker
ZIP := zip
PANDOC := pandoc
CONVERT := convert

HANDIN := ./hw1c.michael.zhang.zip
BINARY := ./raytracer1c
SOURCES := Cargo.toml $(shell find -name "*.rs")

EXAMPLES := $(shell find examples -name "*.txt")
EXAMPLES_PPM := $(patsubst %.txt,%.ppm,$(EXAMPLES))
EXAMPLES_PNG := $(patsubst %.txt,%.png,$(EXAMPLES))

all: $(HANDIN)

$(BINARY): $(SOURCES)
	mkdir -p target/docker
	$(DOCKER) run \
		--rm \
		-v "$(shell pwd)":/usr/src/myapp \
		-v cargo-registry:/usr/local/cargo \
		--user "$(shell id -u)":"$(shell id -g)" \
		-w /usr/src/myapp \
		-e CARGO_TARGET_DIR=/usr/src/myapp/target/docker \
		rust \
		cargo build --profile release-handin
	mv target/docker/release-handin/raytracer1c $@

$(HANDIN): $(BINARY) Makefile Cargo.toml Cargo.lock README.md $(EXAMPLES_PNG) $(EXAMPLES_PPM)
	$(ZIP) -r $@ src examples $^

examples/%.ppm: examples/%.txt $(SOURCES)
	cargo run --release -- -o $@ $(RAYTRACER_FLAGS) $<

examples/%.png: examples/%.ppm
	convert $< $@

clean:
	rm -rf target/docker \
		$(HANDIN) $(BINARY) \
		$(EXAMPLES_PPM) $(EXAMPLES_PNG)