[LTP] [RFC PATCH 1/3] make: Add make check{,-c,-shell} targets

Cyril Hrubis chrubis@suse.cz
Fri Jun 4 16:49:05 CEST 2021


Hi!
> For testing C and shell API.
> 
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
>  Makefile                            | 21 ++++++++++++++++++++-
>  include/mk/generic_leaf_target.inc  | 25 ++++++++++++++++++++++---
>  include/mk/generic_trunk_target.inc |  4 ++--
>  lib/newlib_tests/Makefile           |  8 ++++++++
>  4 files changed, 52 insertions(+), 6 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 56812d77b..acea4551e 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -75,10 +75,14 @@ endif
>  INSTALL_TARGETS		+= $(COMMON_TARGETS)
>  CLEAN_TARGETS		+= $(COMMON_TARGETS) lib libs
>  BOOTSTRAP_TARGETS	:= $(sort $(COMMON_TARGETS) $(CLEAN_TARGETS) $(INSTALL_TARGETS))
> +TEST_TARGETS		:= lib
> +TEST_SHELL_TARGETS	:= lib
>  
>  CLEAN_TARGETS		:= $(addsuffix -clean,$(CLEAN_TARGETS))
>  INSTALL_TARGETS		:= $(addsuffix -install,$(INSTALL_TARGETS))
>  MAKE_TARGETS		:= $(addsuffix -all,$(filter-out lib,$(COMMON_TARGETS)))
> +TEST_TARGETS		:= $(addsuffix -check-c,$(TEST_TARGETS))
> +TEST_SHELL_TARGETS	:= $(addsuffix -check-shell,$(TEST_SHELL_TARGETS))
>  
>  # There's no reason why we should run `all' twice. Otherwise we're just wasting
>  # 3+ mins of useful CPU cycles on a modern machine, and even more time on an
> @@ -113,6 +117,14 @@ $(filter-out include-clean,$(CLEAN_TARGETS))::
>  	-$(MAKE) -C "$(subst -clean,,$@)" \
>  		 -f "$(abs_top_srcdir)/$(subst -clean,,$@)/Makefile" clean
>  
> +$(TEST_TARGETS): lib-all
> +	$(MAKE) -C "$(subst -check-c,,$@)" \
> +		-f "$(abs_top_srcdir)/$(subst -check-c,,$@)/Makefile" check-c
> +
> +$(TEST_SHELL_TARGETS):
> +	$(MAKE) -C "$(subst -check-shell,,$@)" \
> +		-f "$(abs_top_srcdir)/$(subst -check-shell,,$@)/Makefile" check-shell
> +
>  # Just like everything depends on include-all / -install, we need to get rid
>  # of include last to ensure that things won't be monkey screwed up. Only do
>  # this if we're invoking clean or a subclean directly though.
> @@ -189,8 +201,15 @@ INSTALL_TARGETS		+= $(addprefix $(DESTDIR)/$(bindir)/,$(BINDIR_INSTALL_SCRIPTS))
>  
>  $(INSTALL_TARGETS): $(INSTALL_DIR) $(DESTDIR)/$(bindir)
>  
> +.PHONY: check check-c check-shell
> +
> +## Check
> +check-c: $(TEST_TARGETS)
> +check-shell: $(TEST_SHELL_TARGETS)
> +check: check-c check-shell
> +
>  ## Install
> -install: $(INSTALL_TARGETS)
> +install: lib-all $(INSTALL_TARGETS)
>  
>  ## Help
>  .PHONY: help
> diff --git a/include/mk/generic_leaf_target.inc b/include/mk/generic_leaf_target.inc
> index 64953f89a..d53623456 100644
> --- a/include/mk/generic_leaf_target.inc
> +++ b/include/mk/generic_leaf_target.inc
> @@ -63,8 +63,12 @@
>  #				  real files or directories). This will automatically append
>  #				  adds the .o suffix to all files referenced by
>  #				  $(MAKE_TARGETS)) to CLEAN_TARGETS, if MAKE_TARGETS wasn't
> -#				  defined (see
> -#				  $(MAKE_TARGETS)).
> +#				  defined (see $(MAKE_TARGETS)).
> +#
> +# $(TEST_TARGETS)		: LTP C API tests.
> +#
> +# $(TEST_SHELL_TARGETS)		: LTP shell API tests.
> +#
>  # $(INSTALL_MODE)		: What mode should we using when calling
>  # 				  install(1)?
>  #
> @@ -92,7 +96,7 @@
>  # INSTALL_DIR			:= $(libdir)
>  #
>  
> -.PHONY: all clean install
> +.PHONY: all check-c check-shell clean install
>  
>  ifneq ($(strip $(MAKE_TARGETS)),)
>  $(MAKE_TARGETS) += $(HOST_MAKE_TARGETS)
> @@ -102,6 +106,21 @@ $(MAKE_TARGETS): | $(MAKE_DEPS)
>  
>  all: $(MAKE_TARGETS)
>  
> +check-c: $(TEST_TARGETS)
> +	@set -e; echo; echo "===== Test C API ====="; \
> +	for i in $(TEST_TARGETS); do \
> +	    echo; echo "* $$i"; \
> +	    echo "PATH $(top_srcdir)/testcases/lib:$$PATH"; \
> +	    PATH="$(top_srcdir)/testcases/lib:$$PATH" ./$$i || [ $$? -eq 32 ]; \
> +	done
> +
> +check-shell: $(TEST_SHELL_TARGETS)
> +	@set -e; echo; echo "===== Test shell API ====="; \
> +	for i in $(TEST_SHELL_TARGETS); do \
> +	    echo; echo "* $$i"; \
> +	    PATH="$(abs_top_srcdir)/testcases/lib:$(abs_top_builddir)/testcases/lib:$$PATH" $(abs_srcdir)/$$i || [ $$? -eq 32 ]; \
> +	done
> +
>  clean:: $(CLEAN_DEPS)
>  	-$(RM) -f -r $(CLEAN_TARGETS)
>  
> diff --git a/include/mk/generic_trunk_target.inc b/include/mk/generic_trunk_target.inc
> index fc59f944f..d195fe3bd 100644
> --- a/include/mk/generic_trunk_target.inc
> +++ b/include/mk/generic_trunk_target.inc
> @@ -48,7 +48,7 @@
>  
>  include $(top_srcdir)/include/mk/functions.mk
>  
> -RECURSIVE_TARGETS		?= all install
> +RECURSIVE_TARGETS		?= all check check-c check-shell install

If you add a target to RECURSIVE_TARGETS such target automatically
traverses directories, that what the target is for. See the rule at the
end of the generic_trunk_target.inc. Which means that you redefine
targets if you define the same targets to loop and run the tests above.

I guess that you want add another target that depends on check targets
to actually run the tests?

Maybe:

check-c: check-c-run

check-c-run: $(TEST_TARGETS)
	for i in $(TEST_TARGETS); do
		...
	done

in order to run the tests.

In this case the check* targets would be used for directory traversal
and the check-c-run would be used to run the tests.

>  $(eval $(get_make_dirs))
>  
> @@ -71,7 +71,7 @@ trunk-install: $(INSTALL_FILES)
>  # Avoid creating duplicate .PHONY references to all, clean, and install. IIRC,
>  # I've seen some indeterministic behavior when one does this in the past with
>  # GNU Make...
> -.PHONY: $(filter-out $(RECURSIVE_TARGETS),all clean install)
> +.PHONY: $(filter-out $(RECURSIVE_TARGETS),all check clean install)

The check is already in RECURSIVE_TARGETS

>  all: trunk-all
>  
>  clean:: trunk-clean
> diff --git a/lib/newlib_tests/Makefile b/lib/newlib_tests/Makefile
> index 30ca6810c..182ef5689 100644
> --- a/lib/newlib_tests/Makefile
> +++ b/lib/newlib_tests/Makefile
> @@ -19,5 +19,13 @@ ifeq ($(ANDROID),1)
>  FILTER_OUT_MAKE_TARGETS	+= test08
>  endif
>  
> +# C API tests (which exit 0)
> +TEST_TARGETS += test0[579] test1[2568] test_exec test_timer
> +TEST_TARGETS += tst_bool_expr tst_res_hexd tst_strstatus
> +TEST_TARGETS += tst_fuzzy_sync0[1-2]
> +
> +# shell API tests (which exit 0)
> +TEST_SHELL_TARGETS += shell/tst_check_driver.sh
> +TEST_SHELL_TARGETS += shell/net/*.sh
>  
>  include $(top_srcdir)/include/mk/generic_leaf_target.mk
> -- 
> 2.31.1
> 

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list