A better way to run tests

This commit is contained in:
Christophe de Dinechin 2018-04-10 17:43:29 +02:00
parent e7c15a35ae
commit 0ab021d64b
1 changed files with 21 additions and 15 deletions

View File

@ -44,9 +44,9 @@ MIQ_CPPFLAGS= $(CPPFLAGS) \
$(MIQ_INCLUDES:%=-I%)
MIQ_CFLAGS= $(CFLAGS) \
$(CFLAGS_STD) \
$(MIQ_CPPFLAGS) \
$(CFLAGS_PKGCONFIG) \
$(CFLAGS_STD) \
$(CFLAGS_BUILDENV_$(BUILDENV)) \
$(CFLAGS_TARGET_$(TARGET)) \
$(CFLAGS_VARIANT_$(VARIANT)) \
@ -102,12 +102,19 @@ MIQ_OBJECTS= $(MIQ_SOURCES:%=$(MIQ_OBJDIR)%$(OBJ_EXT))
MIQ_PRODEXE= $(filter %.exe,$(PRODUCTS))
MIQ_PRODLIB= $(filter %.lib,$(PRODUCTS))
MIQ_PRODDLL= $(filter %.dll,$(PRODUCTS))
MIQ_PRODLIBS= $(filter %.lib %.dll,$(PRODUCTS))
MIQ_PRODLIBS= $(OUTPUT:%=$(LINK_DIR_OPT)%) $(filter %.lib %.dll,$(PRODUCTS))
MIQ_OUTEXE= $(MIQ_PRODEXE:%.exe=$(OUTPUT)$(EXE_PFX)%$(EXE_EXT))
MIQ_OUTLIB= $(MIQ_PRODLIB:%.lib=$(OUTPUT)$(LIB_PFX)%$(LIB_EXT))
MIQ_OUTDLL= $(MIQ_PRODDLL:%.dll=$(OUTPUT)$(DLL_PFX)%$(DLL_EXT))
MIQ_OUTPRODS= $(MIQ_OUTEXE) $(MIQ_OUTLIB) $(MIQ_OUTDLL)
MIQ_BUILDTEST= $(MAKE) SOURCES=$(@:%.test=%) \
PRODUCTS=$*_test.exe \
RUN_TESTS= \
LINK_LIBS="$(MIQ_PRODLIBS)"
MIQ_RUNTEST= $(TEST_ENV) \
$(TEST_CMD_$*) \
$(OUTPUT)$(EXE_PFX)$*_test$(EXE_EXT) \
$(TEST_ARGS_$*)
# Check a common mistake with PRODUCTS= not being set or set without extension
# Even on Linux / Unix, the PRODUCTS variable must end in .exe for executables,
@ -126,7 +133,6 @@ MIQ_LIBNAMES= $(filter %.lib, $(notdir $(MIQ_LIBS)))
MIQ_DLLNAMES= $(filter %.dll, $(notdir $(MIQ_LIBS)))
MIQ_OBJLIBS= $(MIQ_LIBNAMES:%.lib=$(OUTPUT)$(LIB_PFX)%$(LIB_EXT))
MIQ_OBJDLLS= $(MIQ_DLLNAMES:%.dll=$(OUTPUT)$(DLL_PFX)%$(DLL_EXT))
MIQ_LINKPATHS:= $(OUTPUT:%=$(LINK_DIR_OPT)%)
MIQ_LINKLIBS= $(MIQ_LIBNAMES:%.lib=$(LINK_LIB_OPT)%) \
$(MIQ_DLLNAMES:%.dll=$(LINK_DLL_OPT)%)
MIQ_TOLINK= $(MIQ_OBJECTS) $(MIQ_OBJLIBS) $(MIQ_OBJDLLS)
@ -152,8 +158,7 @@ debug opt release profile: $(LOGS).mkdir $(dir $(LAST_LOG)).mkdir
$(PRINT_COMMAND) $(TIME) $(MAKE) TARGET=$@ RECURSE=.build LOG_COMMANDS= .build $(LOG_COMMANDS)
# Testing
test tests check: $(TARGET)
$(PRINT_COMMAND) $(MAKE) RECURSE=test $(TESTS:%=%.test) LOG_COMMANDS= TIME= $(LOG_COMMANDS)
test tests check: test-$(TARGET)
# Clean builds
rebuild: re-$(TARGET)
@ -198,7 +203,7 @@ help:
.build: .hello .config .libraries .prebuild \
.recurse .objects .product \
.postbuild .goodbye
.postbuild .tests .goodbye
.hello:
@$(INFO) "[BEGIN]" $(TARGET) $(BUILDENV) in "$(MIQ_PRETTYDIR)"
@ -219,6 +224,7 @@ endif
.objects: $(MIQ_OBJDIR:%=%.mkdir)
.product: $(MIQ_OUTPRODS)
.postbuild: .product $(DO_INSTALL:%=$(MIQ_INSTALL))
.tests: $(RUN_TESTS:%=$(TESTS:%=%.test))
.goodbye: .postbuild
@ -240,6 +246,10 @@ ifndef RECURSE
top-%:
cd $(TOP); $(MAKE) $*
# Test build
test-%:
$(PRINT_COMMAND) $(MAKE) RUN_TESTS=yes $*
# Verbose build (show all commands as executed)
v-% verbose-%:
$(PRINT_COMMAND) $(MAKE) $* V=1
@ -424,7 +434,7 @@ $(MIQ_OUTEXE): $(MIQ_TOLINK) $$(MIQ_TOLINK) $(MIQ_MAKEDEPS)
# Package configuration file
MIQ_PKGCFLAGS= $(PKGCONFIGS:%=$(MIQ_OBJDIR)%.pkg-config.cflags)
MIQ_PKGLDFLAGS= $(PKGCONFIGS:%=$(MIQ_OBJDIR)%.pkg-config.ldflags)
MIQ_PKGLIBS= $(PKGCONFIGS:lib%=$(MIQ_OBJDIR)lib%.cfg.ldflags)
MIQ_PKGLIBS= $(patsubst %,$(OBJDIR)%.cfg.ldflags,$(filter lib%,$(CONFIG)))
MIQ_PKGDEPS= $(MIQ_MAKEDEPS) $(MIQ_OBJDIR).mkdir
# Build the package config from cflags, ldflags and libs config
@ -508,16 +518,12 @@ endif
#------------------------------------------------------------------------------
# Run the test (in the object directory)
product.test: .product .ALWAYS
product.test: .product
$(PRINT_TEST) $(TEST_ENV) $(TEST_CMD) $(MIQ_OUTEXE) $(TEST_ARGS)
# Run a test from a C or C++ file to link against current library
%.c.test: $(MIQ_OUTLIB) .ALWAYS
$(PRINT_BUILD) $(MAKE) SOURCES=$*.c LINK_LIBS="$(MIQ_PRODLIBS)" PRODUCTS=$*.exe $(TARGET)
$(PRINT_TEST) $(TEST_ENV) $(TEST_CMD_$*) $(OUTPUT)$(EXE_PFX)$*$(EXE_EXT) $(TEST_ARGS_$*)
%.cpp.test: $(MIQ_OUTLIB) .ALWAYS
$(PRINT_BUILD) $(MAKE) SOURCES=$*.cpp LINK_LIBS="$(MIQ_PRODLIBS)" PRODUCTS=$*.exe $(TARGET)
$(PRINT_TEST) $(TEST_ENV) $(TEST_CMD_$*) $(OUTPUT)$(EXE_PFX)$*$(EXE_EXT) $(TEST_ARGS_$*)
%.c.test %.cpp.test: $(MIQ_OUTPRODS)
$(PRINT_TEST) $(MIQ_BUILDTEST) && $(MIQ_RUNTEST)
%/.test:
+$(PRINT_TEST) cd $* && $(MAKE) test