tools build feature: Check if get_current_dir_name() is available

As the namespace support code will use this, which is not available in
some non _GNU_SOURCE libraries such as Android's bionic used in my
container build tests (r12b and r15c at the moment).

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-x56ypm940pwclwu45d7jfj47@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent fb50c09e
...@@ -33,6 +33,7 @@ FEATURE_TESTS_BASIC := \ ...@@ -33,6 +33,7 @@ FEATURE_TESTS_BASIC := \
dwarf_getlocations \ dwarf_getlocations \
fortify-source \ fortify-source \
sync-compare-and-swap \ sync-compare-and-swap \
get_current_dir_name \
glibc \ glibc \
gtk2 \ gtk2 \
gtk2-infobar \ gtk2-infobar \
......
...@@ -7,6 +7,7 @@ FILES= \ ...@@ -7,6 +7,7 @@ FILES= \
test-dwarf_getlocations.bin \ test-dwarf_getlocations.bin \
test-fortify-source.bin \ test-fortify-source.bin \
test-sync-compare-and-swap.bin \ test-sync-compare-and-swap.bin \
test-get_current_dir_name.bin \
test-glibc.bin \ test-glibc.bin \
test-gtk2.bin \ test-gtk2.bin \
test-gtk2-infobar.bin \ test-gtk2-infobar.bin \
...@@ -101,6 +102,9 @@ $(OUTPUT)test-bionic.bin: ...@@ -101,6 +102,9 @@ $(OUTPUT)test-bionic.bin:
$(OUTPUT)test-libelf.bin: $(OUTPUT)test-libelf.bin:
$(BUILD) -lelf $(BUILD) -lelf
$(OUTPUT)test-get_current_dir_name.bin:
$(BUILD)
$(OUTPUT)test-glibc.bin: $(OUTPUT)test-glibc.bin:
$(BUILD) $(BUILD)
......
...@@ -34,6 +34,10 @@ ...@@ -34,6 +34,10 @@
# include "test-libelf-mmap.c" # include "test-libelf-mmap.c"
#undef main #undef main
#define main main_test_get_current_dir_name
# include "test-get_current_dir_name.c"
#undef main
#define main main_test_glibc #define main main_test_glibc
# include "test-glibc.c" # include "test-glibc.c"
#undef main #undef main
...@@ -174,6 +178,7 @@ int main(int argc, char *argv[]) ...@@ -174,6 +178,7 @@ int main(int argc, char *argv[])
main_test_hello(); main_test_hello();
main_test_libelf(); main_test_libelf();
main_test_libelf_mmap(); main_test_libelf_mmap();
main_test_get_current_dir_name();
main_test_glibc(); main_test_glibc();
main_test_dwarf(); main_test_dwarf();
main_test_dwarf_getlocations(); main_test_dwarf_getlocations();
......
// SPDX-License-Identifier: GPL-2.0
#define _GNU_SOURCE
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
free(get_current_dir_name());
return 0;
}
...@@ -299,6 +299,11 @@ ifndef NO_BIONIC ...@@ -299,6 +299,11 @@ ifndef NO_BIONIC
endif endif
endif endif
ifeq ($(feature-get_current_dir_name), 1)
CFLAGS += -DHAVE_GET_CURRENT_DIR_NAME
endif
ifdef NO_LIBELF ifdef NO_LIBELF
NO_DWARF := 1 NO_DWARF := 1
NO_DEMANGLE := 1 NO_DEMANGLE := 1
......
...@@ -10,6 +10,7 @@ libperf-y += evlist.o ...@@ -10,6 +10,7 @@ libperf-y += evlist.o
libperf-y += evsel.o libperf-y += evsel.o
libperf-y += evsel_fprintf.o libperf-y += evsel_fprintf.o
libperf-y += find_bit.o libperf-y += find_bit.o
libperf-y += get_current_dir_name.o
libperf-y += kallsyms.o libperf-y += kallsyms.o
libperf-y += levenshtein.o libperf-y += levenshtein.o
libperf-y += llvm-utils.o libperf-y += llvm-utils.o
......
// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2018, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
//
#ifndef HAVE_GET_CURRENT_DIR_NAME
#include "util.h"
#include <unistd.h>
#include <stdlib.h>
#include <stdlib.h>
/* Android's 'bionic' library, for one, doesn't have this */
char *get_current_dir_name(void)
{
char pwd[PATH_MAX];
return getcwd(pwd, sizeof(pwd)) == NULL ? NULL : strdup(pwd);
}
#endif // HAVE_GET_CURRENT_DIR_NAME
...@@ -59,6 +59,10 @@ int fetch_kernel_version(unsigned int *puint, ...@@ -59,6 +59,10 @@ int fetch_kernel_version(unsigned int *puint,
const char *perf_tip(const char *dirpath); const char *perf_tip(const char *dirpath);
#ifndef HAVE_GET_CURRENT_DIR_NAME
char *get_current_dir_name(void);
#endif
#ifndef HAVE_SCHED_GETCPU_SUPPORT #ifndef HAVE_SCHED_GETCPU_SUPPORT
int sched_getcpu(void); int sched_getcpu(void);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment