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.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo 2018-11-19 16:56:22 -03:00
parent fb50c09e92
commit 8feb8efef9
8 changed files with 48 additions and 0 deletions

View File

@ -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 \

View File

@ -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:
$(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)

View File

@ -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[])
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();

View File

@ -0,0 +1,10 @@
// 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;
}

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,18 @@
// 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

View File

@ -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