tools build: Add a feature test for scandirat(), that is not implemented so far in musl and uclibc

We use it just when listing tracepoint events, and for root, so just
emit a warning about it to get users to ask the library maintainers to
implement it, as suggested in this systemd ticket:

 https://github.com/systemd/casync/issues/129

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/lkml/ZCwv4z5Dh%2FdHUMG6@kernel.org/
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo 2023-04-04 11:05:57 -03:00
parent 430635a0ef
commit 9e03608e93
5 changed files with 27 additions and 0 deletions

View File

@ -64,6 +64,7 @@ FEATURE_TESTS_BASIC := \
lzma \ lzma \
get_cpuid \ get_cpuid \
bpf \ bpf \
scandirat \
sched_getcpu \ sched_getcpu \
sdt \ sdt \
setns \ setns \

View File

@ -65,6 +65,7 @@ FILES= \
test-gettid.bin \ test-gettid.bin \
test-jvmti.bin \ test-jvmti.bin \
test-jvmti-cmlr.bin \ test-jvmti-cmlr.bin \
test-scandirat.bin \
test-sched_getcpu.bin \ test-sched_getcpu.bin \
test-setns.bin \ test-setns.bin \
test-libopencsd.bin \ test-libopencsd.bin \
@ -129,6 +130,9 @@ $(OUTPUT)test-get_current_dir_name.bin:
$(OUTPUT)test-glibc.bin: $(OUTPUT)test-glibc.bin:
$(BUILD) $(BUILD)
$(OUTPUT)test-scandirat.bin:
$(BUILD)
$(OUTPUT)test-sched_getcpu.bin: $(OUTPUT)test-sched_getcpu.bin:
$(BUILD) $(BUILD)

View File

@ -114,6 +114,10 @@
# include "test-pthread-barrier.c" # include "test-pthread-barrier.c"
#undef main #undef main
#define main main_test_scandirat
# include "test-scandirat.c"
#undef main
#define main main_test_sched_getcpu #define main main_test_sched_getcpu
# include "test-sched_getcpu.c" # include "test-sched_getcpu.c"
#undef main #undef main
@ -206,6 +210,7 @@ int main(int argc, char *argv[])
main_test_get_cpuid(); main_test_get_cpuid();
main_test_bpf(); main_test_bpf();
main_test_libcrypto(); main_test_libcrypto();
main_test_scandirat();
main_test_sched_getcpu(); main_test_sched_getcpu();
main_test_sdt(); main_test_sdt();
main_test_setns(); main_test_setns();

View File

@ -0,0 +1,13 @@
// SPDX-License-Identifier: GPL-2.0
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <dirent.h>
int main(void)
{
// expects non-NULL, arg3 is 'restrict' so "pointers" have to be different
return scandirat(/*dirfd=*/ 0, /*dirp=*/ (void *)1, /*namelist=*/ (void *)2, /*filter=*/ (void *)3, /*compar=*/ (void *)4);
}
#undef _GNU_SOURCE

View File

@ -479,6 +479,10 @@ ifdef NO_DWARF
NO_LIBDW_DWARF_UNWIND := 1 NO_LIBDW_DWARF_UNWIND := 1
endif endif
ifeq ($(feature-scandirat), 1)
CFLAGS += -DHAVE_SCANDIRAT_SUPPORT
endif
ifeq ($(feature-sched_getcpu), 1) ifeq ($(feature-sched_getcpu), 1)
CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
endif endif