.POSIX: .PHONY: all all: publications.txt .PHONY: test # Remove `.gitignore`d files interactively. .PHONY: clean clean: git clean -Xi URL = http://boundvariable.org task.txt: curl -sSL $(URL)/task.shtml \ | pandoc --from html --to plain --columns=79 \ | awk ' \ /^An Urgent Appeal$$/ { body = 1; } \ /^Carnegie Mellon University$$/ { print; exit; } \ /^[[:punct:]]+$$/ { getline; next; } \ body; \ ' > $@ sha1sums.txt: curl -sSL $(URL)/task.shtml \ | pandoc --from html --to plain --columns=79 \ | awk ' \ $$1 == "[]" { file = $$2; } \ $$1 == "SHA-1" { print $$3, "*" file; } \ ' > $@ codex-key.txt: task.txt awk 'key { print; exit; } /decryption key/ { key = 1; }' task.txt > $@ codex.umz sandmark.umz: sha1sums.txt curl -sSL $(URL)/$@ > $@ awk '$$2 == "*$@"' sha1sums.txt | sha1sum -c sandmark-output.txt um.um: curl -sSL $(URL)/$@ > $@ um-spec.txt: curl -sSL $(URL)/$@ | awk 'sub(/ *$$/, "") || 1;' > $@ um: um.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) um.cpp $(LDLIBS) -o $@ test: um sandmark.umz sandmark-output.txt { time ./um sandmark.umz; } \ | tee /dev/tty \ | diff -q sandmark-output.txt - umix.um: um codex.umz codex-key.txt # It's faster if we don't output to `/dev/tty`, but it looks cool. { cat codex-key.txt; echo 'p'; } \ | { time ./um codex.umz; } \ | { tee /dev/stderr | cat -v > /dev/tty; } 2>&1 \ | LC_ALL=C awk ' \ program; \ !program && program = match($$0, /UM program follows colon:/) { \ print substr($$0, RSTART+RLENGTH); \ } \ ' > $@ echo .PHONY: publications.txt .PRECIOUS: publications.txt publications.txt: um umix.um publications=$$(cat $@); \ { \ ! [ "$$publications" ] || echo "$$publications"; \ { time ./um umix.um; } \ | tee /dev/tty \ | awk ' \ match($$0, /[A-Z]{5}\.[A-Z]{3}=[0-9]+@[0-9]+\|[0-9a-f]{31}/) { \ print substr($$0, RSTART, RSTART+RLENGTH); \ } \ '; \ } \ | awk '!seen[$$0]++' > $@