CC = gcc
CFLAGS = -O2 -g -Wall -Wno-unused-but-set-variable

all: factor make-prime-list

factor: factor.o

factor.o: factor.c primes.h

primes.h: make-prime-list
	./make-prime-list 4000 >primes.h

%: %.c
.PRECIOUS: %.o

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

%: %.o
	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@

clean:
	rm -f make-prime-list factor primes.h ourseq *.o

# Use make check CHECK_FLAGS=-s to check squfof
CHECK_FLAGS=

check: factor ourseq
	./ourseq 0 1000000         | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s0.sha
	./ourseq 18446744073709541616 18446744073709551615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b0.sha
	./ourseq        0 10000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s1.sha
	./ourseq 10000000 20000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s2.sha
	./ourseq 20000000 30000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s3.sha
	./ourseq 30000000 40000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s4.sha
	./ourseq 40000000 50000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s5.sha
	./ourseq 50000000 60000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s6.sha
	./ourseq 60000000 70000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s7.sha
	./ourseq 70000000 80000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s8.sha
	./ourseq 80000000 90000000 | ./factor $(CHECK_FLAGS) | shasum -c --status tests/s9.sha
	./ourseq 18446744073708551616 18446744073708651615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b1.sha
	./ourseq 18446744073708651616 18446744073708751615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b2.sha
	./ourseq 18446744073708751616 18446744073708851615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b3.sha
	./ourseq 18446744073708851616 18446744073708951615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b4.sha
	./ourseq 18446744073708951616 18446744073709051615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b5.sha
	./ourseq 18446744073709051616 18446744073709151615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b6.sha
	./ourseq 18446744073709151616 18446744073709251615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b7.sha
	./ourseq 18446744073709251616 18446744073709351615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b8.sha
	./ourseq 18446744073709351616 18446744073709451615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b9.sha
	./ourseq 18446744073709451616 18446744073709551615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/b10.sha
	./ourseq 18446744073709551616 18446744073709651615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/q1.sha
	./ourseq 18446744073709651616 18446744073709751615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/q2.sha
	./ourseq 18446744073709751616 18446744073709851615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/q3.sha
	./ourseq 18446744073709851616 18446744073709951615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/q4.sha
	./ourseq 18446744073709951616 18446744073710051615 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/q5.sha
	./ourseq 79228162514264337593543850336 79228162514264337593543860335 \
		| ./factor $(CHECK_FLAGS) | shasum -c --status tests/h1.sha

ver = `cat ver`
dist:
	mkdir nt-factor-$(ver)
	cp -pr factor.c ChangeLog README Makefile make-prime-list.c ourseq.c longlong.h tests nt-factor-$(ver)
	tar cf - nt-factor-$(ver) | lzip >nt-factor-$(ver).tar.lz
	rm -rf nt-factor-$(ver)
	./incr ver
