Commit 9e03608e authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 430635a0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ FEATURE_TESTS_BASIC := \
        lzma                            \
        get_cpuid                       \
        bpf                             \
        scandirat			\
        sched_getcpu			\
        sdt				\
        setns				\
+4 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ FILES= \
         test-gettid.bin			\
         test-jvmti.bin				\
         test-jvmti-cmlr.bin			\
         test-scandirat.bin			\
         test-sched_getcpu.bin			\
         test-setns.bin				\
         test-libopencsd.bin			\
@@ -129,6 +130,9 @@ $(OUTPUT)test-get_current_dir_name.bin:
$(OUTPUT)test-glibc.bin:
	$(BUILD)

$(OUTPUT)test-scandirat.bin:
	$(BUILD)

$(OUTPUT)test-sched_getcpu.bin:
	$(BUILD)

+5 −0
Original line number Diff line number Diff line
@@ -114,6 +114,10 @@
# include "test-pthread-barrier.c"
#undef main

#define main main_test_scandirat
# include "test-scandirat.c"
#undef main

#define main main_test_sched_getcpu
# include "test-sched_getcpu.c"
#undef main
@@ -206,6 +210,7 @@ int main(int argc, char *argv[])
	main_test_get_cpuid();
	main_test_bpf();
	main_test_libcrypto();
	main_test_scandirat();
	main_test_sched_getcpu();
	main_test_sdt();
	main_test_setns();
+13 −0
Original line number Diff line number Diff line
// 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
+4 −0
Original line number Diff line number Diff line
@@ -479,6 +479,10 @@ ifdef NO_DWARF
  NO_LIBDW_DWARF_UNWIND := 1
endif

ifeq ($(feature-scandirat), 1)
  CFLAGS += -DHAVE_SCANDIRAT_SUPPORT
endif

ifeq ($(feature-sched_getcpu), 1)
  CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
endif