#
# $FreeBSD: src/lib/libc_r/test/Makefile,v 1.4.2.2 2001/06/22 21:44:27 jasone Exp $
#
# Automated test suite for libc_r (pthreads).
#

# File lists.

# Tests written in C.
CTESTS := hello_d.c hello_s.c join_leak_d.c mutex_d.c sem_d.c sigsuspend_d.c \
	sigwait_d.c

# C programs that are used internally by the tests.  The build system merely
# compiles these.
BTESTS := hello_b.c

# Tests written in perl.
PTESTS := propagate_s.pl

# Munge the file lists to their final executable names (strip the .c).
CTESTS := ${CTESTS:R}
BTESTS := ${BTESTS:R}

CPPFLAGS := -D_REENTRANT
CFLAGS := -Wall -pipe -g3
LDFLAGS_A := -static
LDFLAGS_P := -pg
LDFLAGS_S :=
LIBS := -lpthread

# Flags passed to verify.  "-v" or "-u" may be useful.
VFLAGS :=

all : default

# Only use the following suffixes, in order to avoid any strange built-in rules.
.SUFFIXES :
.SUFFIXES : .c .o .d .pl

# Clear out all paths, then set just one (default path) for the main build
# directory.
.PATH :
.PATH : .

# Build the C programs.
.for bin in ${CTESTS} ${BTESTS}
${bin}_a : ${bin:S/$/&.c/}
	${CC} ${CFLAGS} ${CPPFLAGS} -c ${bin:S/$/&.c/} -o ${@:S/$/&.o/}
	${CC} -o $@ ${@:S/$/&.o/} ${LDFLAGS_A} ${LIBS}
	@${SHELL} -ec "${CC} -M ${CPPFLAGS} ${bin:S/$/&.c/} | sed \"s/\(${bin:T}\)\.o\([ :]*\)/${bin:H:S!/!\\/!g}\/\1_a.o \2/g\" > ${@:R:S/$/&.d/}"

${bin}_p : ${bin:S/$/&.c/}
	${CC} ${CFLAGS} ${CPPFLAGS} -c ${bin:S/$/&.c/} -o ${@:S/$/&.o/}
	${CC} -o $@ ${@:S/$/&.o/} ${LDFLAGS_P} ${LIBS}
	@${SHELL} -ec "${CC} -M ${CPPFLAGS} ${bin:S/$/&.c/} | sed \"s/\(${bin:T}\)\.o\([ :]*\)/${bin:H:S!/!\\/!g}\/\1_p.o \2/g\" > ${@:R:S/$/&.d/}"

${bin}_s : ${bin:S/$/&.c/}
	${CC} ${CFLAGS} ${CPPFLAGS} -c ${bin:S/$/&.c/} -o ${@:S/$/&.o/}
	${CC} -o $@ ${@:S/$/&.o/} ${LDFLAGS_S} ${LIBS}
	@${SHELL} -ec "${CC} -M ${CPPFLAGS} ${bin:S/$/&.c/} | sed \"s/\(${bin:T}\)\.o\([ :]*\)/${bin:H:S!/!\\/!g}\/\1_s.o \2/g\" > ${@:R:S/$/&.d/}"
.endfor

# Dependency file inclusion.
.for depfile in ${CTESTS:R:S/$/&_a.d/} ${BTESTS:R:S/$/&_a.d/} \
		${CTESTS:R:S/$/&_p.d/} ${BTESTS:R:S/$/&_p.d/} \
		${CTESTS:R:S/$/&_s.d/} ${BTESTS:R:S/$/&_s.d/}
.if exists(${depfile})
.include "${depfile}"
.endif
.endfor

default : check

tests_a : ${CTESTS:S/$/&_a/} ${BTESTS:S/$/&_a/}
tests_p : ${CTESTS:S/$/&_p/} ${BTESTS:S/$/&_p/}
tests_s : ${CTESTS:S/$/&_s/} ${BTESTS:S/$/&_s/}

tests : tests_a tests_p tests_s

check_a : tests_a
.for bin in ${CTESTS} ${BTESTS}
	@cp ${bin}_a ${bin}
.endfor
	@echo "Test static library:"
	@./verify ${VFLAGS} ${CTESTS} ${PTESTS}

check_p : tests_p
.for bin in ${CTESTS} ${BTESTS}
	@cp ${bin}_p ${bin}
.endfor
	@echo "Test profile library:"
	@./verify ${VFLAGS} ${CTESTS} ${PTESTS}

check_s : tests_s
.for bin in ${CTESTS} ${BTESTS}
	@cp ${bin}_s ${bin}
.endfor
	@echo "Test shared library:"
	@./verify ${VFLAGS} ${CTESTS} ${PTESTS}

check : check_a check_p check_s

clean :
	rm -f *~
	rm -f *.core
	rm -f *.out
	rm -f *.perf
	rm -f *.diff
	rm -f *.gmon
	rm -f ${CTESTS} ${BTESTS}
	rm -f ${CTESTS:S/$/&_a/} ${BTESTS:S/$/&_a/}
	rm -f ${CTESTS:S/$/&_p/} ${BTESTS:S/$/&_p/}
	rm -f ${CTESTS:S/$/&_s/} ${BTESTS:S/$/&_s/}
	rm -f *.d
	rm -f *.o
