# Test Makefile (for nmake)
#
# SYNOPSIS:
#
#   make [all]         - makes everything.
#   make test          - makes everything and run.
#   make TARGET        - makes the given target.
#   make run_$(TARGET) - makes the given target and run.
#   make clean         - removes all files generated by make.

#
# Command
#
RM = del

#
# Optimize
#
#OPTIMIZE += /O2

#
# Flags
#
CXXFLAGS =$(CXXFLAGS) /EHsc /nologo $(OPTIMIZE)
CXXFLAGS =$(CXXFLAGS) $(DEFS) $(STDFLAG)

!ifdef OUTPUTXML
CXXFLAGS =$(CXXFLAGS) -DOUTPUTXML
!endif

#
# include
#
!include <CommonMakefile.in>

RUN_TARGETS = $(ALLTESTS_TARGET) $(EXTENSIONTESTS_TARGET) $(NAMESPACETESTS_TARGET) $(TARGETS1) $(TARGETS2) $(TARGETS_IUTEST_ONLY)
BUILD_TARGETS = $(RUN_TARGETS) $(BUILD_ONLY) $(COMPILEERROR_TARGETS)
TARGETS = $(BUILD_TARGETS)

NAMESPACETESTS_TEST_SRCS = $(ALLTESTS_TEST_SRCS:.cpp=.ns.cpp)
NAMESPACETESTS_SRCS = main.cpp $(NAMESPACETESTS_TEST_SRCS)

SRCS   = $(BUILD_TARGETS:_tests=_tests.cpp)
RUNNER = $(RUN_TARGETS:_tests=_tests_run)


# build targets.

default : $(TARGETS)

all : clean default test

clean :
	$(RM) *.exe *.obj *.dump *.ns.cpp
!ifdef OUTPUTXML
	$(RM) *.xml
!endif

check: test
run : test
test : $(BUILD_ONLY) $(RUNNER)

showcxxversion:
	-$(CXX)

$(RUNNER) : $(@:_run=)
	@echo $@
!ifdef OUTPUTXML
	$(@:_run=) $(RUN_OPTION) --iutest_output=xml:$<.xml
!else
	$(@:_run=) $(RUN_OPTION)
!endif

#
# NAMESPACETESTS_SRCS

$(NAMESPACETESTS_TEST_SRCS): $(ALLTESTS_TEST_SRCS) Makefile
	@echo #include ^<cmath^> > $@
	@echo #include "../include/gtest/iutest_spi_switch.hpp" >> $@
	@echo #include "../include/internal/iutest_filepath.hpp" >> $@
	@echo namespace test { namespace iutest { class dummy; } >> $@
	@echo #include "$(@:.ns=)" >> $@
	@echo } >> $@


# Compile error test.

IUTEST_COMPILE_ERROR_TEST_OPTION=-c $(CXX)
!if "$(CI)" == "true"
IUTEST_COMPILE_ERROR_TEST_OPTION+= --verbose
!endif



#
# Builds a sample test.  

TARGETS_EXCLUDE_ALLTESTS= $(TARGETS1) $(TARGETS2) $(TARGETS_IUTEST_ONLY) $(BUILD_ONLY)

$(ALLTESTS_TARGET) : $(ALLTESTS_SRCS) $(IUTEST_HEADERS) Makefile
	$(CXX) $(IUTEST_INCLUDE) $(CXXFLAGS) /Fe$@ $(ALLTESTS_SRCS) $(LDFLAGS)

$(EXTENSIONTESTS_TARGET) : $(EXTENSIONTESTS_SRCS) $(IUTEST_HEADERS) Makefile
	$(CXX) $(IUTEST_INCLUDE) $(CXXFLAGS) /Fe$@ $(EXTENSIONTESTS_SRCS) $(LDFLAGS)

$(NAMESPACETESTS_TARGET) : $(NAMESPACETESTS_SRCS) $(IUTEST_HEADERS) Makefile
	$(CXX) $(IUTEST_INCLUDE) $(CXXFLAGS) /Fe$@ $(NAMESPACETESTS_SRCS) $(LDFLAGS)

$(TARGETS_EXCLUDE_ALLTESTS) : $(IUTEST_HEADERS) Makefile
	$(CXX) $(IUTEST_INCLUDE) $(CXXFLAGS) /Fe$@ $@.cpp $(LDFLAGS)

$(COMPILEERROR_TARGETS) : $(IUTEST_HEADERS) Makefile
#	-$(CXX) $(IUTEST_INCLUDE) $(CXXFLAGS) /Fe$@ $@.cpp $(LDFLAGS)
	$(CXX) $(IUTEST_INCLUDE) $(CXXFLAGS) /Fe$@ $@.cpp $(LDFLAGS) | python ../tools/python/iutest_compile_error_test.py $(IUTEST_COMPILE_ERROR_TEST_OPTION)

