# Test Makefile for GNU make
#
#   make [all]  - makes everything.
#   make TARGET - makes the given target.
#   make test   - makes everything and run.
#   make clean  - removes all files generated by make.


#
# Flags passed to the C++ compiler.
CCFLAGS += -g -Wall -Wextra -Wno-unused-local-typedefs
CCFLAGS += $(DEFS) $(STDFLAG)

ifdef OUTPUTXML
CCFLAGS +=-DOUTPUTXML
endif

ifdef USE_COVERAGE
COVERAGE = coveralls
CCFLAGS += -coverage
endif

MAKEFILE=GNUmakefile CommonMakefile.in

#
# include
#
include CommonMakefile.in

OBJS   := $(TARGETS:%=%.o)
SRCS   := $(TARGETS:%=%.c)
RUNNER := $(TARGETS:%=run_%)

# House-keeping build targets.

.PHONY: clean default all run test

default: $(TARGETS)

all : clean default test

clean:
	rm -f $(TARGETS) *.o
ifdef OUTPUTXML
	rm -f *.xml
endif
ifdef COVERAGE
	$(RM) *.xml *.gcov *.gcno *.gcda coverage.info
endif

run: test
test: $(RUNNER)

run_% : %
	@echo $<
ifdef USE_COVERAGE
	./$< $(RUN_OPTION) --iutest_output=xml:$<.xml > /dev/null
else
ifdef OUTPUTXML
	./$< $(RUN_OPTION) --iutest_output=xml:$<.xml
else
	./$< $(RUN_OPTION)
endif
endif

# coverage
ifdef COVERAGE
COVARALLS_EXCLUDE=-e doc -e projects -e samples -e tools
COVARALLS_EXCLUDE_PATTERN  =-E ".*/test/[^\.].*"
COVARALLS_SRCEXT=-x .h -x .c -x .inl
endif


SRCFILES =$(shell find . -type f -name "*.c")
SRCFILES+=$(shell find . -type f -name "*.h")
SRCFILES+=$(shell find ../include -type f)
SRCFILES+=$(shell find ../src -type f)

encode-utf8:
	@LIST="$(SRCFILES)";\
	for x in $$LIST; do\
	  echo $$x;\
	  iconv -f CP932 -t UTF-8 "$$x" >> "$$x.tmp"; \
	  mv $$x.tmp $$x; \
	done

send-coverage: send-gcoverage

send-lcoverage:
ifdef COVERAGE
	lcov -v
	lcov -c -d . -o coverage.info && lcov -r coverage.info *gcc* -o coverage.info && lcov -r coverage.info */test/* -o coverage.info
	cd ../; lcoveralls --retry-count 3 ./test/coverage.info
endif

send-gcoverage:
ifdef COVERAGE
	gcov -v
	gcov -r *.gcda; cd ../; $(COVERAGE) -n -r ./ -b ./test $(COVARALLS_EXCLUDE_PATTERN) $(COVARALLS_EXCLUDE)
endif

# Builds a sample test.  

ifdef USE_LIB
override CCFLAGS_ += -DIUTEST_C_USE_LIB=1 -L../lib
$(TARGETS) : $(SRCS) $(IUTEST_HEADERS) $(MAKEFILE)
	$(CC) $(CCFLAGS_) $(CCFLAGS) -o $@ $@.c -liutest_c

else

$(TARGETS) : $(SRCS) $(IUTEST_HEADERS) $(MAKEFILE)
	$(CC) $(CCFLAGS_) $(CCFLAGS) -o $@ $@.c

endif
