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

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_ELEMENTSARE \
	IUTEST_HAS_MATCHER_ELEMENTSAREARRAYFORWARD \
	IUTEST_HAS_MATCHER_REGEX \
	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 test

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

%.dis :
	@echo $(@:%.dis=%)
	make $(MAKE_OPTION) clean
	make $(MAKE_OPTION) test DEFS=-D$(@:%.dis=%)=0
	@echo ok > $@

%.no :
	@echo $(@:%.no=%)
	make $(MAKE_OPTION) clean
	make $(MAKE_OPTION) test DEFS=-D$(@:%.no=%)
	@echo ok > $@

no_parame_and_type_test:
	make $(MAKE_OPTION) clean
	make $(MAKE_OPTION) test DEFS="-DIUTEST_HAS_TYPED_TEST=0 -DIUTEST_HAS_PARAM_TEST=0 -DIUTEST_HAS_TYPED_TEST_P=0 -DIUTEST_HAS_VARIADIC_PRED=0"

strstream:
	make $(MAKE_OPTION) clean
	make $(MAKE_OPTION) test DEFS="-DIUTEST_HAS_STRINGSTREAM=0 -DIUTEST_HAS_STRSTREAM=1" CXXFLAGS="-Wno-deprecated"
