| From 7fd12d7d3afca8926368078e20e64fb454a03c6e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 22 Aug 2023 18:09:40 -0300 |
| Subject: selftests: fix dependency checker script |
| |
| From: Ricardo B. Marliere <rbmarliere@gmail.com> |
| |
| [ Upstream commit 5f9dd2e896a91bfca90f8463eb6808c03d535d8a ] |
| |
| This patch fixes inconsistencies in the parsing rules of the levels 1 |
| and 2 of the kselftest_deps.sh. It was added the levels 4 and 5 to |
| account for a few edge cases that are present in some tests, also some |
| minor identation styling have been fixed (s/ /\t/g). |
| |
| Signed-off-by: Ricardo B. Marliere <rbmarliere@gmail.com> |
| Signed-off-by: Shuah Khan <skhan@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/testing/selftests/kselftest_deps.sh | 77 +++++++++++++++++++---- |
| 1 file changed, 65 insertions(+), 12 deletions(-) |
| |
| diff --git a/tools/testing/selftests/kselftest_deps.sh b/tools/testing/selftests/kselftest_deps.sh |
| index 00e60d6eb16bc..7e51f4a373d35 100755 |
| --- a/tools/testing/selftests/kselftest_deps.sh |
| +++ b/tools/testing/selftests/kselftest_deps.sh |
| @@ -46,11 +46,11 @@ fi |
| print_targets=0 |
| |
| while getopts "p" arg; do |
| - case $arg in |
| - p) |
| + case $arg in |
| + p) |
| print_targets=1 |
| shift;; |
| - esac |
| + esac |
| done |
| |
| if [ $# -eq 0 ] |
| @@ -92,6 +92,10 @@ pass_cnt=0 |
| # Get all TARGETS from selftests Makefile |
| targets=$(egrep "^TARGETS +|^TARGETS =" Makefile | cut -d "=" -f2) |
| |
| +# Initially, in LDLIBS related lines, the dep checker needs |
| +# to ignore lines containing the following strings: |
| +filter="\$(VAR_LDLIBS)\|pkg-config\|PKG_CONFIG\|IOURING_EXTRA_LIBS" |
| + |
| # Single test case |
| if [ $# -eq 2 ] |
| then |
| @@ -100,6 +104,8 @@ then |
| l1_test $test |
| l2_test $test |
| l3_test $test |
| + l4_test $test |
| + l5_test $test |
| |
| print_results $1 $2 |
| exit $? |
| @@ -113,7 +119,7 @@ fi |
| # Append space at the end of the list to append more tests. |
| |
| l1_tests=$(grep -r --include=Makefile "^LDLIBS" | \ |
| - grep -v "VAR_LDLIBS" | awk -F: '{print $1}') |
| + grep -v "$filter" | awk -F: '{print $1}' | uniq) |
| |
| # Level 2: LDLIBS set dynamically. |
| # |
| @@ -126,7 +132,7 @@ l1_tests=$(grep -r --include=Makefile "^LDLIBS" | \ |
| # Append space at the end of the list to append more tests. |
| |
| l2_tests=$(grep -r --include=Makefile ": LDLIBS" | \ |
| - grep -v "VAR_LDLIBS" | awk -F: '{print $1}') |
| + grep -v "$filter" | awk -F: '{print $1}' | uniq) |
| |
| # Level 3 |
| # memfd and others use pkg-config to find mount and fuse libs |
| @@ -138,11 +144,32 @@ l2_tests=$(grep -r --include=Makefile ": LDLIBS" | \ |
| # VAR_LDLIBS := $(shell pkg-config fuse --libs 2>/dev/null) |
| |
| l3_tests=$(grep -r --include=Makefile "^VAR_LDLIBS" | \ |
| - grep -v "pkg-config" | awk -F: '{print $1}') |
| + grep -v "pkg-config\|PKG_CONFIG" | awk -F: '{print $1}' | uniq) |
| |
| -#echo $l1_tests |
| -#echo $l2_1_tests |
| -#echo $l3_tests |
| +# Level 4 |
| +# some tests may fall back to default using `|| echo -l<libname>` |
| +# if pkg-config doesn't find the libs, instead of using VAR_LDLIBS |
| +# as per level 3 checks. |
| +# e.g: |
| +# netfilter/Makefile |
| +# LDLIBS += $(shell $(HOSTPKG_CONFIG) --libs libmnl 2>/dev/null || echo -lmnl) |
| +l4_tests=$(grep -r --include=Makefile "^LDLIBS" | \ |
| + grep "pkg-config\|PKG_CONFIG" | awk -F: '{print $1}' | uniq) |
| + |
| +# Level 5 |
| +# some tests may use IOURING_EXTRA_LIBS to add extra libs to LDLIBS, |
| +# which in turn may be defined in a sub-Makefile |
| +# e.g.: |
| +# mm/Makefile |
| +# $(OUTPUT)/gup_longterm: LDLIBS += $(IOURING_EXTRA_LIBS) |
| +l5_tests=$(grep -r --include=Makefile "LDLIBS +=.*\$(IOURING_EXTRA_LIBS)" | \ |
| + awk -F: '{print $1}' | uniq) |
| + |
| +#echo l1_tests $l1_tests |
| +#echo l2_tests $l2_tests |
| +#echo l3_tests $l3_tests |
| +#echo l4_tests $l4_tests |
| +#echo l5_tests $l5_tests |
| |
| all_tests |
| print_results $1 $2 |
| @@ -164,24 +191,32 @@ all_tests() |
| for test in $l3_tests; do |
| l3_test $test |
| done |
| + |
| + for test in $l4_tests; do |
| + l4_test $test |
| + done |
| + |
| + for test in $l5_tests; do |
| + l5_test $test |
| + done |
| } |
| |
| # Use same parsing used for l1_tests and pick libraries this time. |
| l1_test() |
| { |
| test_libs=$(grep --include=Makefile "^LDLIBS" $test | \ |
| - grep -v "VAR_LDLIBS" | \ |
| + grep -v "$filter" | \ |
| sed -e 's/\:/ /' | \ |
| sed -e 's/+/ /' | cut -d "=" -f 2) |
| |
| check_libs $test $test_libs |
| } |
| |
| -# Use same parsing used for l2__tests and pick libraries this time. |
| +# Use same parsing used for l2_tests and pick libraries this time. |
| l2_test() |
| { |
| test_libs=$(grep --include=Makefile ": LDLIBS" $test | \ |
| - grep -v "VAR_LDLIBS" | \ |
| + grep -v "$filter" | \ |
| sed -e 's/\:/ /' | sed -e 's/+/ /' | \ |
| cut -d "=" -f 2) |
| |
| @@ -197,6 +232,24 @@ l3_test() |
| check_libs $test $test_libs |
| } |
| |
| +l4_test() |
| +{ |
| + test_libs=$(grep --include=Makefile "^VAR_LDLIBS\|^LDLIBS" $test | \ |
| + grep "\(pkg-config\|PKG_CONFIG\).*|| echo " | \ |
| + sed -e 's/.*|| echo //' | sed -e 's/)$//') |
| + |
| + check_libs $test $test_libs |
| +} |
| + |
| +l5_test() |
| +{ |
| + tests=$(find $(dirname "$test") -type f -name "*.mk") |
| + test_libs=$(grep "^IOURING_EXTRA_LIBS +\?=" $tests | \ |
| + cut -d "=" -f 2) |
| + |
| + check_libs $test $test_libs |
| +} |
| + |
| check_libs() |
| { |
| |
| -- |
| 2.40.1 |
| |