linux/tools/perf/util/trace-event-scripting.c
<<
>>
Prefs
   1/*
   2 * trace-event-scripting.  Scripting engine common and initialization code.
   3 *
   4 * Copyright (C) 2009-2010 Tom Zanussi <tzanussi@gmail.com>
   5 *
   6 *  This program is free software; you can redistribute it and/or modify
   7 *  it under the terms of the GNU General Public License as published by
   8 *  the Free Software Foundation; either version 2 of the License, or
   9 *  (at your option) any later version.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *  GNU General Public License for more details.
  15 *
  16 *  You should have received a copy of the GNU General Public License
  17 *  along with this program; if not, write to the Free Software
  18 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 *
  20 */
  21
  22#include <stdio.h>
  23#include <stdlib.h>
  24#include <string.h>
  25#include <ctype.h>
  26#include <errno.h>
  27
  28#include "../perf.h"
  29#include "util.h"
  30#include "trace-event.h"
  31
  32struct scripting_context *scripting_context;
  33
  34static int stop_script_unsupported(void)
  35{
  36        return 0;
  37}
  38
  39static void process_event_unsupported(int cpu __unused,
  40                                      void *data __unused,
  41                                      int size __unused,
  42                                      unsigned long long nsecs __unused,
  43                                      char *comm __unused)
  44{
  45}
  46
  47static void print_python_unsupported_msg(void)
  48{
  49        fprintf(stderr, "Python scripting not supported."
  50                "  Install libpython and rebuild perf to enable it.\n"
  51                "For example:\n  # apt-get install python-dev (ubuntu)"
  52                "\n  # yum install python-devel (Fedora)"
  53                "\n  etc.\n");
  54}
  55
  56static int python_start_script_unsupported(const char *script __unused,
  57                                           int argc __unused,
  58                                           const char **argv __unused)
  59{
  60        print_python_unsupported_msg();
  61
  62        return -1;
  63}
  64
  65static int python_generate_script_unsupported(const char *outfile __unused)
  66{
  67        print_python_unsupported_msg();
  68
  69        return -1;
  70}
  71
  72struct scripting_ops python_scripting_unsupported_ops = {
  73        .name = "Python",
  74        .start_script = python_start_script_unsupported,
  75        .stop_script = stop_script_unsupported,
  76        .process_event = process_event_unsupported,
  77        .generate_script = python_generate_script_unsupported,
  78};
  79
  80static void register_python_scripting(struct scripting_ops *scripting_ops)
  81{
  82        int err;
  83        err = script_spec_register("Python", scripting_ops);
  84        if (err)
  85                die("error registering Python script extension");
  86
  87        err = script_spec_register("py", scripting_ops);
  88        if (err)
  89                die("error registering py script extension");
  90
  91        scripting_context = malloc(sizeof(struct scripting_context));
  92}
  93
  94#ifdef NO_LIBPYTHON
  95void setup_python_scripting(void)
  96{
  97        register_python_scripting(&python_scripting_unsupported_ops);
  98}
  99#else
 100extern struct scripting_ops python_scripting_ops;
 101
 102void setup_python_scripting(void)
 103{
 104        register_python_scripting(&python_scripting_ops);
 105}
 106#endif
 107
 108static void print_perl_unsupported_msg(void)
 109{
 110        fprintf(stderr, "Perl scripting not supported."
 111                "  Install libperl and rebuild perf to enable it.\n"
 112                "For example:\n  # apt-get install libperl-dev (ubuntu)"
 113                "\n  # yum install 'perl(ExtUtils::Embed)' (Fedora)"
 114                "\n  etc.\n");
 115}
 116
 117static int perl_start_script_unsupported(const char *script __unused,
 118                                         int argc __unused,
 119                                         const char **argv __unused)
 120{
 121        print_perl_unsupported_msg();
 122
 123        return -1;
 124}
 125
 126static int perl_generate_script_unsupported(const char *outfile __unused)
 127{
 128        print_perl_unsupported_msg();
 129
 130        return -1;
 131}
 132
 133struct scripting_ops perl_scripting_unsupported_ops = {
 134        .name = "Perl",
 135        .start_script = perl_start_script_unsupported,
 136        .stop_script = stop_script_unsupported,
 137        .process_event = process_event_unsupported,
 138        .generate_script = perl_generate_script_unsupported,
 139};
 140
 141static void register_perl_scripting(struct scripting_ops *scripting_ops)
 142{
 143        int err;
 144        err = script_spec_register("Perl", scripting_ops);
 145        if (err)
 146                die("error registering Perl script extension");
 147
 148        err = script_spec_register("pl", scripting_ops);
 149        if (err)
 150                die("error registering pl script extension");
 151
 152        scripting_context = malloc(sizeof(struct scripting_context));
 153}
 154
 155#ifdef NO_LIBPERL
 156void setup_perl_scripting(void)
 157{
 158        register_perl_scripting(&perl_scripting_unsupported_ops);
 159}
 160#else
 161extern struct scripting_ops perl_scripting_ops;
 162
 163void setup_perl_scripting(void)
 164{
 165        register_perl_scripting(&perl_scripting_ops);
 166}
 167#endif
 168