| From 1da938e7a39040132d2efc71e1c3b56c15f78457 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 6 Feb 2020 09:40:52 +0100 |
| Subject: selftests: fix too long argument |
| |
| From: Jiri Benc <jbenc@redhat.com> |
| |
| [ Upstream commit c363eb48ada5cf732b3f489fab799fc881097842 ] |
| |
| With some shells, the command construed for install of bpf selftests becomes |
| too large due to long list of files: |
| |
| make[1]: execvp: /bin/sh: Argument list too long |
| make[1]: *** [../lib.mk:73: install] Error 127 |
| |
| Currently, each of the file lists is replicated three times in the command: |
| in the shell 'if' condition, in the 'echo' and in the 'rsync'. Reduce that |
| by one instance by using make conditionals and separate the echo and rsync |
| into two shell commands. (One would be inclined to just remove the '@' at |
| the beginning of the rsync command and let 'make' echo it by itself; |
| unfortunately, it appears that the '@' in the front of mkdir silences output |
| also for the following commands.) |
| |
| Also, separate handling of each of the lists to its own shell command. |
| |
| The semantics of the makefile is unchanged before and after the patch. The |
| ability of individual test directories to override INSTALL_RULE is retained. |
| |
| Reported-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com> |
| Tested-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com> |
| Signed-off-by: Jiri Benc <jbenc@redhat.com> |
| Signed-off-by: Shuah Khan <skhan@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/testing/selftests/lib.mk | 23 +++++++++++++---------- |
| 1 file changed, 13 insertions(+), 10 deletions(-) |
| |
| diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk |
| index 1c8a1963d03f8..3ed0134a764d4 100644 |
| --- a/tools/testing/selftests/lib.mk |
| +++ b/tools/testing/selftests/lib.mk |
| @@ -83,17 +83,20 @@ else |
| $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_PROGS)) |
| endif |
| |
| +define INSTALL_SINGLE_RULE |
| + $(if $(INSTALL_LIST),@mkdir -p $(INSTALL_PATH)) |
| + $(if $(INSTALL_LIST),@echo rsync -a $(INSTALL_LIST) $(INSTALL_PATH)/) |
| + $(if $(INSTALL_LIST),@rsync -a $(INSTALL_LIST) $(INSTALL_PATH)/) |
| +endef |
| + |
| define INSTALL_RULE |
| - @if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \ |
| - mkdir -p ${INSTALL_PATH}; \ |
| - echo "rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/"; \ |
| - rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/; \ |
| - fi |
| - @if [ "X$(TEST_GEN_PROGS)$(TEST_CUSTOM_PROGS)$(TEST_GEN_PROGS_EXTENDED)$(TEST_GEN_FILES)" != "X" ]; then \ |
| - mkdir -p ${INSTALL_PATH}; \ |
| - echo "rsync -a $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/"; \ |
| - rsync -a $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/; \ |
| - fi |
| + $(eval INSTALL_LIST = $(TEST_PROGS)) $(INSTALL_SINGLE_RULE) |
| + $(eval INSTALL_LIST = $(TEST_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE) |
| + $(eval INSTALL_LIST = $(TEST_FILES)) $(INSTALL_SINGLE_RULE) |
| + $(eval INSTALL_LIST = $(TEST_GEN_PROGS)) $(INSTALL_SINGLE_RULE) |
| + $(eval INSTALL_LIST = $(TEST_CUSTOM_PROGS)) $(INSTALL_SINGLE_RULE) |
| + $(eval INSTALL_LIST = $(TEST_GEN_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE) |
| + $(eval INSTALL_LIST = $(TEST_GEN_FILES)) $(INSTALL_SINGLE_RULE) |
| endef |
| |
| install: all |
| -- |
| 2.20.1 |
| |