Patch "selftests: Introduce Makefile variable to list shared bash scripts" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    selftests: Introduce Makefile variable to list shared bash scripts

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     selftests-introduce-makefile-variable-to-list-shared.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 91c58f57c8ddc180c705aa0bad907927198137f7
Author: Benjamin Poirier <bpoirier@xxxxxxxxxx>
Date:   Fri Jan 26 18:21:18 2024 -0500

    selftests: Introduce Makefile variable to list shared bash scripts
    
    [ Upstream commit 2a0683be5b4c9829e8335e494a21d1148e832822 ]
    
    Some tests written in bash source other files in a parent directory. For
    example, drivers/net/bonding/dev_addr_lists.sh sources
    net/forwarding/lib.sh. If a subset of tests is exported and run outside the
    source tree (for example by using `make -C tools/testing/selftests gen_tar
    TARGETS="drivers/net/bonding"`), these other files must be made available
    as well.
    
    Commit ae108c48b5d2 ("selftests: net: Fix cross-tree inclusion of scripts")
    addressed this problem by symlinking and copying the sourced files but this
    only works for direct dependencies. Commit 25ae948b4478 ("selftests/net:
    add lib.sh") changed net/forwarding/lib.sh to source net/lib.sh. As a
    result, that latter file must be included as well when the former is
    exported. This was not handled and was reverted in commit 2114e83381d3
    ("selftests: forwarding: Avoid failures to source net/lib.sh"). In order to
    allow reinstating the inclusion of net/lib.sh from net/forwarding/lib.sh,
    add a mechanism to list dependent files in a new Makefile variable and
    export them. This allows sourcing those files using the same expression
    whether tests are run in-tree or exported.
    
    Dependencies are not resolved recursively so transitive dependencies must
    be listed in TEST_INCLUDES. For example, if net/forwarding/lib.sh sources
    net/lib.sh; the Makefile related to a test that sources
    net/forwarding/lib.sh from a parent directory must list:
    TEST_INCLUDES := \
            ../../../net/forwarding/lib.sh \
            ../../../net/lib.sh
    
    v2:
    Fix rst syntax in Documentation/dev-tools/kselftest.rst (Jakub Kicinski)
    
    v1 (from RFC):
    * changed TEST_INCLUDES to take relative paths, like other TEST_* variables
      (Vladimir Oltean)
    * preserved common "$(MAKE) OUTPUT=... -C ... target" ordering in Makefile
      (Petr Machata)
    
    Signed-off-by: Benjamin Poirier <bpoirier@xxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/Documentation/dev-tools/kselftest.rst b/Documentation/dev-tools/kselftest.rst
index deede972f2547..3ae1b3677d7f3 100644
--- a/Documentation/dev-tools/kselftest.rst
+++ b/Documentation/dev-tools/kselftest.rst
@@ -255,9 +255,21 @@ Contributing new tests (details)
 
    TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the
    executable which is not tested by default.
+
    TEST_FILES, TEST_GEN_FILES mean it is the file which is used by
    test.
 
+   TEST_INCLUDES is similar to TEST_FILES, it lists files which should be
+   included when exporting or installing the tests, with the following
+   differences:
+
+    * symlinks to files in other directories are preserved
+    * the part of paths below tools/testing/selftests/ is preserved when
+      copying the files to the output directory
+
+   TEST_INCLUDES is meant to list dependencies located in other directories of
+   the selftests hierarchy.
+
  * First use the headers inside the kernel source and/or git repo, and then the
    system headers.  Headers for the kernel release as opposed to headers
    installed by the distro on the system should be the primary focus to be able
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index 697f13bbbc321..5b61b8bb29f84 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -184,6 +184,8 @@ run_tests: all
 	@for TARGET in $(TARGETS); do \
 		BUILD_TARGET=$$BUILD/$$TARGET;	\
 		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests \
+				SRC_PATH=$(shell readlink -e $$(pwd)) \
+				OBJ_PATH=$(BUILD)                   \
 				O=$(abs_objtree);		    \
 	done;
 
@@ -234,7 +236,10 @@ ifdef INSTALL_PATH
 	@ret=1;	\
 	for TARGET in $(TARGETS); do \
 		BUILD_TARGET=$$BUILD/$$TARGET;	\
-		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install \
+		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install \
+				INSTALL_PATH=$(INSTALL_PATH)/$$TARGET \
+				SRC_PATH=$(shell readlink -e $$(pwd)) \
+				OBJ_PATH=$(INSTALL_PATH) \
 				O=$(abs_objtree)		\
 				$(if $(FORCE_TARGETS),|| exit);	\
 		ret=$$((ret * $$?));		\
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
index a8f0442a36bca..01db65c0e84ca 100644
--- a/tools/testing/selftests/lib.mk
+++ b/tools/testing/selftests/lib.mk
@@ -77,11 +77,29 @@ define RUN_TESTS
 	run_many $(1)
 endef
 
+define INSTALL_INCLUDES
+	$(if $(TEST_INCLUDES), \
+		relative_files=""; \
+		for entry in $(TEST_INCLUDES); do \
+			entry_dir=$$(readlink -e "$$(dirname "$$entry")"); \
+			entry_name=$$(basename "$$entry"); \
+			relative_dir=$${entry_dir#"$$SRC_PATH"/}; \
+			if [ "$$relative_dir" = "$$entry_dir" ]; then \
+				echo "Error: TEST_INCLUDES entry \"$$entry\" not located inside selftests directory ($$SRC_PATH)" >&2; \
+				exit 1; \
+			fi; \
+			relative_files="$$relative_files $$relative_dir/$$entry_name"; \
+		done; \
+		cd $(SRC_PATH) && rsync -aR $$relative_files $(OBJ_PATH)/ \
+	)
+endef
+
 run_tests: all
 ifdef building_out_of_srctree
 	@if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \
 		rsync -aq --copy-unsafe-links $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(OUTPUT); \
 	fi
+	@$(INSTALL_INCLUDES)
 	@if [ "X$(TEST_PROGS)" != "X" ]; then \
 		$(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) \
 				  $(addprefix $(OUTPUT)/,$(TEST_PROGS))) ; \
@@ -111,6 +129,7 @@ endef
 install: all
 ifdef INSTALL_PATH
 	$(INSTALL_RULE)
+	$(INSTALL_INCLUDES)
 else
 	$(error Error: set INSTALL_PATH to use install)
 endif




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux