# iutest root directory
IUTEST_DIR = ../..
IUTEST_INCLUDE = -I$(IUTEST_DIR)/include

# All iutest headers.  Usually you shouldn't change this
# definition.
IUTEST_HEADERS =$(IUTEST_DIR)/include/*.hpp \
				$(IUTEST_DIR)/include/impl/*.ipp \
				$(IUTEST_DIR)/include/internal/*.hpp \
				$(IUTEST_DIR)/include/listener/*.hpp \
				$(IUTEST_DIR)/include/util/*.hpp \
				$(IUTEST_DIR)/include/gtest/*.hpp \
				$(IUTEST_DIR)/include/gtest/switch/*.hpp

TESTS_SOURCES = ../*.cpp \
				../*.hpp

MAKE_OPTION=--no-print-directory -C ../ -j4

DISABLE_FEATURE_CONFIG= \
	IUTEST_HAS_ANY_PARAM_TEST \
	IUTEST_HAS_ASSERTION_NOEQUALTO_OBJECT \
	IUTEST_HAS_ASSERTION_RETURN \
	IUTEST_HAS_AUTOFIXTURE_PARAM_TEST \
	IUTEST_HAS_EXCEPTIONS \
	IUTEST_HAS_GENRAND \
	IUTEST_HAS_IGNORE_TEST \
	IUTEST_HAS_MATCHERS \
	IUTEST_HAS_MATCHER_ALLOF_AND_ANYOF \
	IUTEST_HAS_MATCHER_EACH \
	IUTEST_HAS_MATCHER_ELEMENTSARE \
	IUTEST_HAS_MATCHER_ELEMENTSAREARRAYFORWARD \
	IUTEST_HAS_MATCHER_FLOATINGPOINT_NEAR \
	IUTEST_HAS_MATCHER_POINTWISE \
	IUTEST_HAS_MATCHER_REGEX \
	IUTEST_HAS_MATCHER_VARIADIC \
	IUTEST_HAS_PACKAGE \
	IUTEST_HAS_PEEP \
	IUTEST_HAS_PEEP_CLASS \
	IUTEST_HAS_PEEP_FUNC \
	IUTEST_HAS_PEEP_STATIC_FUNC \
	IUTEST_HAS_PRINT_TO \
	IUTEST_HAS_REGEX \
	IUTEST_HAS_REPORT_SKIPPED \
	IUTEST_HAS_SOCKET \
	IUTEST_HAS_SPI_LAMBDA_SUPPORT \
	IUTEST_HAS_STATIC_ASSERT_TYPEEQ \
	IUTEST_HAS_STREAM_CAPTURE \
	IUTEST_HAS_STREAM_RESULT \
	IUTEST_HAS_TESTFIXTURE_ALIAS_BY_TUPLE \
	IUTEST_HAS_TESTNAME_ALIAS_JP \
	IUTEST_HAS_TESTNAME_ALIAS \
	IUTEST_HAS_LAMBDA_STATEMENTS \
	IUTEST_HAS_TYPED_TEST_P \
	IUTEST_HAS_TYPED_TEST \
	IUTEST_TYPED_TEST_P_STRICT \

DISABLE_FEATURE_PARAMTEST_CONFIG= \
	IUTEST_HAS_COMBINE \
	IUTEST_HAS_CONCAT \
	IUTEST_HAS_CSVPARAMS \
	IUTEST_HAS_PAIRWISE \
	IUTEST_HAS_PARAM_METHOD_TEST \
	IUTEST_HAS_PARAM_TEST \
	IUTEST_HAS_PARAM_TEST_PARAM_NAME_GENERATOR \
	IUTEST_HAS_RANDOMVALUES \
	IUTEST_HAS_VALUESGEN \
	IUTEST_HAS_VARIADIC_COMBINE \
	IUTEST_HAS_VARIADIC_PAIRWISE \
	IUTEST_HAS_VARIADIC_VALUES \

DISABLE_SPEC_CONFIG= \
	IUTEST_HAS_BITWISE_EXPRESSION_DECOMPOSE \
	IUTEST_HAS_FILE_STAT \
	IUTEST_HAS_FOPEN \
	IUTEST_HAS_STRINGSTREAM \
	IUTEST_HAS_TUPLE \
	IUTEST_HAS_VARIADIC_TEMPLATES \

NOFEATURE_CONFIG= \
	IUTEST_NO_PRIVATE_IN_AGGREGATE \
	IUTEST_NO_ARGUMENT_DEPENDENT_LOOKUP \
	IUTEST_NO_VOID_RETURNS \
	IUTEST_NO_TEMPLATE_TEMPLATES \
	IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION \
	IUTEST_NO_VARIADIC_MACROS \
	IUTEST_NO_SFINAE \

#	IUTEST_NO_FUNCTION_TEMPLATE_ORDERING \


COMBINE_CONFIG= \
	no_parame_and_type_test \
	strstream \

DISABLE_FEATURE_TARGETS=$(DISABLE_FEATURE_CONFIG:%=%.dis)
DISABLE_FEATURE_PARAMTEST_TARGETS=$(DISABLE_FEATURE_PARAMTEST_CONFIG:%=%.dis)
DISABLE_SPEC_TARGETS=$(DISABLE_SPEC_CONFIG:%=%.dis)
NOFEATURE_TARGETS=$(NOFEATURE_CONFIG:%=%.no)
COMBINE_TARGETS=$(COMBINE_CONFIG)

TARGETS=\
	$(DISABLE_FEATURE_TARGETS) \
	$(DISABLE_FEATURE_PARAMTEST_TARGETS) \
	$(DISABLE_SPEC_TARGETS) \
	$(NOFEATURE_TARGETS) \
	$(COMBINE_TARGETS)


#
#
# build targets.
#

.PHONY: clean default all

default : $(TARGETS)
combine : $(COMBINE_TARGETS)
disable_feature_1 : $(DISABLE_FEATURE_TARGETS)
disable_feature_param : $(DISABLE_FEATURE_PARAMTEST_TARGETS)
disable_spec: $(DISABLE_SPEC_TARGETS)
disable_feature: disable_feature_1 disable_feature_param
disable: disable_feature disable_spec
nofeature : $(NOFEATURE_TARGETS)

all : clean default

clean :
	$(MAKE) $(MAKE_OPTION) clean
	$(RM) $(TARGETS)

%.dis : $(IUTEST_HEADERS) $(TESTS_SOURCES) $(MAKEFILE)
	@echo $(@:%.dis=%)
	$(MAKE) $(MAKE_OPTION) clean
	$(MAKE) $(MAKE_OPTION) DEFS=-D$(@:%.dis=%)=0
	$(MAKE) $(MAKE_OPTION) run DEFS=-D$(@:%.dis=%)=0
	@echo ok > $@

%.no : $(IUTEST_HEADERS) $(TESTS_SOURCES) $(MAKEFILE)
	@echo $(@:%.no=%)
	$(MAKE) $(MAKE_OPTION) clean
	$(MAKE) $(MAKE_OPTION) DEFS=-D$(@:%.no=%)
	$(MAKE) $(MAKE_OPTION) run DEFS=-D$(@:%.no=%)
	@echo ok > $@

no_parame_and_type_test: $(IUTEST_HEADERS) $(TESTS_SOURCES) $(MAKEFILE)
	$(MAKE) $(MAKE_OPTION) clean
	$(MAKE) $(MAKE_OPTION) DEFS="-DIUTEST_HAS_TYPED_TEST=0 -DIUTEST_HAS_PARAM_TEST=0 -DIUTEST_HAS_TYPED_TEST_P=0 -DIUTEST_HAS_VARIADIC_PRED=0"
	$(MAKE) $(MAKE_OPTION) run DEFS="-DIUTEST_HAS_TYPED_TEST=0 -DIUTEST_HAS_PARAM_TEST=0 -DIUTEST_HAS_TYPED_TEST_P=0 -DIUTEST_HAS_VARIADIC_PRED=0"

strstream: $(IUTEST_HEADERS) $(TESTS_SOURCES) $(MAKEFILE)
	$(MAKE) $(MAKE_OPTION) clean
	$(MAKE) $(MAKE_OPTION) DEFS="-DIUTEST_HAS_STRINGSTREAM=0 -DIUTEST_HAS_STRSTREAM=1" CXXFLAGS="-Wno-deprecated"
	$(MAKE) $(MAKE_OPTION) run DEFS="-DIUTEST_HAS_STRINGSTREAM=0 -DIUTEST_HAS_STRSTREAM=1" CXXFLAGS="-Wno-deprecated"
