perf test: Support external tests for separate objdir
Extend the searching for the test files so that it works when running perf from a separate objdir, and also when the perf executable is symlinked. Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Andi Kleen <ak@linux.intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: https://lore.kernel.org/r/20240813213651.1057362-2-ak@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
00dc514612
commit
f133c76409
@@ -29,16 +29,45 @@
|
||||
|
||||
static int shell_tests__dir_fd(void)
|
||||
{
|
||||
char path[PATH_MAX], *exec_path;
|
||||
static const char * const devel_dirs[] = { "./tools/perf/tests/shell", "./tests/shell", };
|
||||
struct stat st;
|
||||
char path[PATH_MAX], path2[PATH_MAX], *exec_path;
|
||||
static const char * const devel_dirs[] = {
|
||||
"./tools/perf/tests/shell",
|
||||
"./tests/shell",
|
||||
"./source/tests/shell"
|
||||
};
|
||||
int fd;
|
||||
char *p;
|
||||
|
||||
for (size_t i = 0; i < ARRAY_SIZE(devel_dirs); ++i) {
|
||||
int fd = open(devel_dirs[i], O_PATH);
|
||||
fd = open(devel_dirs[i], O_PATH);
|
||||
|
||||
if (fd >= 0)
|
||||
return fd;
|
||||
}
|
||||
|
||||
/* Use directory of executable */
|
||||
if (readlink("/proc/self/exe", path2, sizeof path2) < 0)
|
||||
return -1;
|
||||
/* Follow another level of symlink if there */
|
||||
if (lstat(path2, &st) == 0 && (st.st_mode & S_IFMT) == S_IFLNK) {
|
||||
scnprintf(path, sizeof(path), path2);
|
||||
if (readlink(path, path2, sizeof path2) < 0)
|
||||
return -1;
|
||||
}
|
||||
/* Get directory */
|
||||
p = strrchr(path2, '/');
|
||||
if (p)
|
||||
*p = 0;
|
||||
scnprintf(path, sizeof(path), "%s/tests/shell", path2);
|
||||
fd = open(path, O_PATH);
|
||||
if (fd >= 0)
|
||||
return fd;
|
||||
scnprintf(path, sizeof(path), "%s/source/tests/shell", path2);
|
||||
fd = open(path, O_PATH);
|
||||
if (fd >= 0)
|
||||
return fd;
|
||||
|
||||
/* Then installed path. */
|
||||
exec_path = get_argv_exec_path();
|
||||
scnprintf(path, sizeof(path), "%s/tests/shell", exec_path);
|
||||
|
||||
Reference in New Issue
Block a user