From e4aaabda45427a9b983fa2f01d172dfe5926adaa Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 15 Jul 2009 15:16:54 +0200 Subject: PR10399 dtrace should obey prefix install path * dtrace: Renamed to... * dtrace.in: Add -I@prefix/include to gcc invocation. * configure.ac (AC_CONFIG_FILES): List dtrace. * configure: Regenerated. --- configure | 4 ++ configure.ac | 1 + dtrace | 183 ----------------------------------------------------------- dtrace.in | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 188 insertions(+), 183 deletions(-) delete mode 100755 dtrace create mode 100755 dtrace.in diff --git a/configure b/configure index d1b39c34..5eb5eb05 100755 --- a/configure +++ b/configure @@ -8866,6 +8866,8 @@ if test $enable_translator == "yes"; then fi ac_config_files="$ac_config_files run-staprun" +ac_config_files="$ac_config_files dtrace" + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -9597,6 +9599,7 @@ do "initscript/systemtap") CONFIG_FILES="$CONFIG_FILES initscript/systemtap" ;; "run-stap") CONFIG_FILES="$CONFIG_FILES run-stap" ;; "run-staprun") CONFIG_FILES="$CONFIG_FILES run-staprun" ;; + "dtrace") CONFIG_FILES="$CONFIG_FILES dtrace" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} @@ -10386,6 +10389,7 @@ done ;; "run-stap":F) chmod +x run-stap ;; "run-staprun":F) chmod +x run-staprun ;; + "dtrace":F) chmod +x dtrace ;; esac done # for ac_tag diff --git a/configure.ac b/configure.ac index 747c549b..747aac97 100644 --- a/configure.ac +++ b/configure.ac @@ -586,6 +586,7 @@ if test $enable_translator == "yes"; then AC_CONFIG_FILES([run-stap], [chmod +x run-stap]) fi AC_CONFIG_FILES([run-staprun], [chmod +x run-staprun]) +AC_CONFIG_FILES([dtrace], [chmod +x dtrace]) AC_OUTPUT if test "${prefix}" = "/usr/local"; then diff --git a/dtrace b/dtrace deleted file mode 100755 index 0c7711dc..00000000 --- a/dtrace +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/python - -# This handles the systemtap equivalent of -# $(DTRACE) $(DTRACEFLAGS) -G -s $^ -o $@ -# $(DTRACE) $(DTRACEFLAGS) -h -s $^ -o $@ -# which is a step that builds DTrace provider and probe definitions - -# Copyright (C) 2009 Red Hat Inc. -# -# This file is part of systemtap, and is free software. You can -# redistribute it and/or modify it under the terms of the GNU General -# Public License (GPL); either version 2, or (at your option) any -# later version. - -import os,posix,string,sys -from subprocess import call -from tempfile import mkstemp - -class provider: - def typedef_append(self, typedefs,this_probe,arg,c): - if (add_typedefs): - split_arg = arg.rsplit(None,1) - type_name = " %s_arg%d" % (this_probe.replace("__","_"),c) - if (len(split_arg) > 1): - typedefs += ("typedef " + arg.replace(" " + split_arg[1].split("[")[0].lstrip("*"),type_name).strip() + "; ") - typedefs += (type_name + type_name + "_v;\n") - else: - typedefs += ("typedef " + arg.strip() + type_name + "; ") - typedefs += (type_name + type_name + "_v;\n") - return typedefs - def generate(self, provider, header, add_typedefs): - have_provider = False - self.f = open(provider) - self.h = open(header,mode='w') - self.h.write("/* Generated by the Systemtap dtrace wrapper */\n") - self.h.write("\n#include \n\n") - in_comment = False - typedefs = "" - while (True): - line = self.f.readline() - if (line == ""): - break - if (line.find("/*") != -1): - in_comment = True - if (line.find("*/") != -1): - in_comment = False - continue - if (in_comment): - continue - if (line.find("provider") != -1): - tokens = line.split() - have_provider = True - self.provider = tokens[1] - elif (not have_provider): - if (add_typedefs): - self.h.write (line) - elif (have_provider and line.find("probe ") != -1): - while (line.find(")") < 0): - line += self.f.readline() - this_probe = line[line.find("probe ")+5:line.find("(")].strip() - this_probe_canon = self.provider.upper() + "_" + this_probe.replace("__","_").upper() - args = (line[line.find("(")+1:line.find(")")]) - args_string = "" - arg = "" - i = 0 - c = 0 - while (i < len(args)): - if (args[i:i+1] == ","): - args_string = ('%s %s,' % (args_string, arg.strip())) - c += 1 - typedefs = self.typedef_append (typedefs,this_probe,arg,c) - arg = "" - else: - arg = arg + args[i] - i += 1 - if (i != 0): - args_string = ('%s %s' % (args_string, arg.strip())) - if (len(args_string) == 0): - c = 0 - stap_str = "STAP_PROBE(provider,%s" % (this_probe) - else: - c += 1 - typedefs = self.typedef_append (typedefs,this_probe,arg,c) - stap_str = "STAP_PROBE%d(provider,%s" % (c,this_probe) - define_str = "#define %s(" % (this_probe_canon) - i = 1 - while (i <= c): - if (i != 1): - define_str += "," - define_str = define_str + "arg%s" % (i); - stap_str = stap_str + ",arg%s" % (i); - i += 1 - self.h.write ('/* %s (%s) */\n' % (this_probe_canon,args_string)) - self.h.write ('#define %s_ENABLED() 1\n' % this_probe_canon) - self.h.write (define_str + ") \\\n") - self.h.write (stap_str + ")\n\n") - elif (line.find("}") != -1 and have_provider): - have_provider = False - if (add_typedefs): - self.h.write (typedefs) - self.h.close() - - -def usage (): - print "Usage " + sys.argv[0] + " [--help] [-h | -G] -s File.d [-o File]" - -def help (): - usage() - print "Where -h builds a systemtap header file from the .d file" - print " -o specifies an explicit output file name," - print " The default for -G is file.o and -h is file.h" - print " -s specifies the name of the .d input file" - print " -G builds a stub file.o from file.d," - print " which is required by some packages that use dtrace." - sys.exit(1) - -def open_file (arg): - if (len (sys.argv) <= arg): - return False - try: - file = open(sys.argv[arg], 'r') - except IOError: - print (sys.argv[arg] + " not found") - sys.exit(1) - return file - - -######################################################################## -# main -######################################################################## - -if (len (sys.argv) < 2): - usage() - sys.exit(1) - -i = 1 -build_header = False -build_source = False -add_typedefs = False -filename = "" -while (i < len (sys.argv)): - if (sys.argv[i] == "-o"): - i += 1 - filename = sys.argv[i] - elif (sys.argv[i] == "-s"): - i += 1 - s_filename = sys.argv[i] - elif (sys.argv[i] == "-h"): - build_header = True - elif (sys.argv[i] == "-G"): - build_header = True - build_source = True - elif (sys.argv[i] == "--types"): - add_typedefs = True - elif (sys.argv[i] == "--help"): - help() - i += 1 -if (build_header == False and build_source == False): - usage() - sys.exit(1) - -if (filename == ""): - if (s_filename != ""): - (filename,ext) = os.path.splitext(s_filename) - filename = os.path.basename(filename) - else: - usage - sys.exit(1) -else: - (filename,ext) = os.path.splitext(filename) - -if (build_header): - providers = provider() - providers.generate(s_filename, filename + ".h", add_typedefs) -if (build_source): - (basename,ext) = os.path.splitext(s_filename) - basename = os.path.basename(basename) - (d,fn) = mkstemp(suffix=".c",prefix=basename) - f = open(fn,mode='w') - f.write("#include \"" + filename + ".h\"\nstatic __dtrace () {}\n") - f.close() - call(["gcc", "-fPIC", "-I.", "-g", "-c", fn, "-o", filename + ".o"], shell=False) - os.remove(fn) diff --git a/dtrace.in b/dtrace.in new file mode 100755 index 00000000..91885977 --- /dev/null +++ b/dtrace.in @@ -0,0 +1,183 @@ +#!/usr/bin/python + +# This handles the systemtap equivalent of +# $(DTRACE) $(DTRACEFLAGS) -G -s $^ -o $@ +# $(DTRACE) $(DTRACEFLAGS) -h -s $^ -o $@ +# which is a step that builds DTrace provider and probe definitions + +# Copyright (C) 2009 Red Hat Inc. +# +# This file is part of systemtap, and is free software. You can +# redistribute it and/or modify it under the terms of the GNU General +# Public License (GPL); either version 2, or (at your option) any +# later version. + +import os,posix,string,sys +from subprocess import call +from tempfile import mkstemp + +class provider: + def typedef_append(self, typedefs,this_probe,arg,c): + if (add_typedefs): + split_arg = arg.rsplit(None,1) + type_name = " %s_arg%d" % (this_probe.replace("__","_"),c) + if (len(split_arg) > 1): + typedefs += ("typedef " + arg.replace(" " + split_arg[1].split("[")[0].lstrip("*"),type_name).strip() + "; ") + typedefs += (type_name + type_name + "_v;\n") + else: + typedefs += ("typedef " + arg.strip() + type_name + "; ") + typedefs += (type_name + type_name + "_v;\n") + return typedefs + def generate(self, provider, header, add_typedefs): + have_provider = False + self.f = open(provider) + self.h = open(header,mode='w') + self.h.write("/* Generated by the Systemtap dtrace wrapper */\n") + self.h.write("\n#include \n\n") + in_comment = False + typedefs = "" + while (True): + line = self.f.readline() + if (line == ""): + break + if (line.find("/*") != -1): + in_comment = True + if (line.find("*/") != -1): + in_comment = False + continue + if (in_comment): + continue + if (line.find("provider") != -1): + tokens = line.split() + have_provider = True + self.provider = tokens[1] + elif (not have_provider): + if (add_typedefs): + self.h.write (line) + elif (have_provider and line.find("probe ") != -1): + while (line.find(")") < 0): + line += self.f.readline() + this_probe = line[line.find("probe ")+5:line.find("(")].strip() + this_probe_canon = self.provider.upper() + "_" + this_probe.replace("__","_").upper() + args = (line[line.find("(")+1:line.find(")")]) + args_string = "" + arg = "" + i = 0 + c = 0 + while (i < len(args)): + if (args[i:i+1] == ","): + args_string = ('%s %s,' % (args_string, arg.strip())) + c += 1 + typedefs = self.typedef_append (typedefs,this_probe,arg,c) + arg = "" + else: + arg = arg + args[i] + i += 1 + if (i != 0): + args_string = ('%s %s' % (args_string, arg.strip())) + if (len(args_string) == 0): + c = 0 + stap_str = "STAP_PROBE(provider,%s" % (this_probe) + else: + c += 1 + typedefs = self.typedef_append (typedefs,this_probe,arg,c) + stap_str = "STAP_PROBE%d(provider,%s" % (c,this_probe) + define_str = "#define %s(" % (this_probe_canon) + i = 1 + while (i <= c): + if (i != 1): + define_str += "," + define_str = define_str + "arg%s" % (i); + stap_str = stap_str + ",arg%s" % (i); + i += 1 + self.h.write ('/* %s (%s) */\n' % (this_probe_canon,args_string)) + self.h.write ('#define %s_ENABLED() 1\n' % this_probe_canon) + self.h.write (define_str + ") \\\n") + self.h.write (stap_str + ")\n\n") + elif (line.find("}") != -1 and have_provider): + have_provider = False + if (add_typedefs): + self.h.write (typedefs) + self.h.close() + + +def usage (): + print "Usage " + sys.argv[0] + " [--help] [-h | -G] -s File.d [-o File]" + +def help (): + usage() + print "Where -h builds a systemtap header file from the .d file" + print " -o specifies an explicit output file name," + print " The default for -G is file.o and -h is file.h" + print " -s specifies the name of the .d input file" + print " -G builds a stub file.o from file.d," + print " which is required by some packages that use dtrace." + sys.exit(1) + +def open_file (arg): + if (len (sys.argv) <= arg): + return False + try: + file = open(sys.argv[arg], 'r') + except IOError: + print (sys.argv[arg] + " not found") + sys.exit(1) + return file + + +######################################################################## +# main +######################################################################## + +if (len (sys.argv) < 2): + usage() + sys.exit(1) + +i = 1 +build_header = False +build_source = False +add_typedefs = False +filename = "" +while (i < len (sys.argv)): + if (sys.argv[i] == "-o"): + i += 1 + filename = sys.argv[i] + elif (sys.argv[i] == "-s"): + i += 1 + s_filename = sys.argv[i] + elif (sys.argv[i] == "-h"): + build_header = True + elif (sys.argv[i] == "-G"): + build_header = True + build_source = True + elif (sys.argv[i] == "--types"): + add_typedefs = True + elif (sys.argv[i] == "--help"): + help() + i += 1 +if (build_header == False and build_source == False): + usage() + sys.exit(1) + +if (filename == ""): + if (s_filename != ""): + (filename,ext) = os.path.splitext(s_filename) + filename = os.path.basename(filename) + else: + usage + sys.exit(1) +else: + (filename,ext) = os.path.splitext(filename) + +if (build_header): + providers = provider() + providers.generate(s_filename, filename + ".h", add_typedefs) +if (build_source): + (basename,ext) = os.path.splitext(s_filename) + basename = os.path.basename(basename) + (d,fn) = mkstemp(suffix=".c",prefix=basename) + f = open(fn,mode='w') + f.write("#include \"" + filename + ".h\"\nstatic __dtrace () {}\n") + f.close() + call(["gcc", "-fPIC", "-I.", "-I@prefix@/include", "-g", "-c", fn, "-o", filename + ".o"], shell=False) + os.remove(fn) -- cgit