aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/exec_cmd.c
diff options
context:
space:
mode:
authorJosh Poimboeuf <jpoimboe@redhat.com>2015-12-15 09:39:35 -0600
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-12-16 16:18:16 -0300
commit096d35585b4fce7d3ee9b8b34314f39f49491ab1 (patch)
tree943117cf4968b21676cea2ba7d1c65d0d74370e2 /tools/perf/util/exec_cmd.c
parentperf tools: Document the fact that parse_options*() may exit (diff)
downloadlinux-dev-096d35585b4fce7d3ee9b8b34314f39f49491ab1.tar.xz
linux-dev-096d35585b4fce7d3ee9b8b34314f39f49491ab1.zip
perf tools: Provide subcmd configuration at runtime
Create init functions for exec_cmd.c and pager.c. This allows their configuration to be specified at runtime so they can be split out into a separate library which can be used by other programs. Their configuration is stored in a shared subcmd_config struct. Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/21f5f6b38da72c985a8dcfa185700d03e7eecd1d.1450193761.git.jpoimboe@redhat.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/exec_cmd.c')
-rw-r--r--tools/perf/util/exec_cmd.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/tools/perf/util/exec_cmd.c b/tools/perf/util/exec_cmd.c
index 1099e92f5ee1..b935e4ce62a2 100644
--- a/tools/perf/util/exec_cmd.c
+++ b/tools/perf/util/exec_cmd.c
@@ -1,6 +1,7 @@
#include "cache.h"
#include "exec_cmd.h"
#include "quote.h"
+#include "subcmd-config.h"
#include <string.h>
@@ -9,15 +10,23 @@
static const char *argv_exec_path;
static const char *argv0_path;
+void exec_cmd_init(const char *exec_name, const char *prefix,
+ const char *exec_path, const char *exec_path_env)
+{
+ subcmd_config.exec_name = exec_name;
+ subcmd_config.prefix = prefix;
+ subcmd_config.exec_path = exec_path;
+ subcmd_config.exec_path_env = exec_path_env;
+}
+
char *system_path(const char *path)
{
- static const char *prefix = PREFIX;
struct strbuf d = STRBUF_INIT;
if (is_absolute_path(path))
return strdup(path);
- strbuf_addf(&d, "%s/%s", prefix, path);
+ strbuf_addf(&d, "%s/%s", subcmd_config.prefix, path);
path = strbuf_detach(&d, NULL);
return (char *)path;
}
@@ -47,7 +56,7 @@ void perf_set_argv_exec_path(const char *exec_path)
/*
* Propagate this setting to external programs.
*/
- setenv(EXEC_PATH_ENVIRONMENT, exec_path, 1);
+ setenv(subcmd_config.exec_path_env, exec_path, 1);
}
@@ -59,11 +68,11 @@ char *perf_exec_path(void)
if (argv_exec_path)
return strdup(argv_exec_path);
- env = getenv(EXEC_PATH_ENVIRONMENT);
+ env = getenv(subcmd_config.exec_path_env);
if (env && *env)
return strdup(env);
- return system_path(PERF_EXEC_PATH);
+ return system_path(subcmd_config.exec_path);
}
static void add_path(struct strbuf *out, const char *path)
@@ -107,7 +116,7 @@ static const char **prepare_perf_cmd(const char **argv)
; /* just counting */
nargv = malloc(sizeof(*nargv) * (argc + 2));
- nargv[0] = "perf";
+ nargv[0] = subcmd_config.exec_name;
for (argc = 0; argv[argc]; argc++)
nargv[argc + 1] = argv[argc];
nargv[argc + 1] = NULL;
@@ -118,7 +127,7 @@ int execv_perf_cmd(const char **argv) {
const char **nargv = prepare_perf_cmd(argv);
/* execvp() can only ever return if it fails */
- execvp("perf", (char **)nargv);
+ execvp(subcmd_config.exec_name, (char **)nargv);
free(nargv);
return -1;