* [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension @ 2017-09-19 16:08 Jonathan Rajotte 2017-09-19 16:08 ` [lttng-dev] [PATCH lttng-ust 2/2] lttng-gen-tp: formatting Jonathan Rajotte 2017-09-19 17:07 ` [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension Mathieu Desnoyers 0 siblings, 2 replies; 4+ messages in thread From: Jonathan Rajotte @ 2017-09-19 16:08 UTC (permalink / raw) Previous replace was done on the complete path. A path containing .c or .o would result in a corrupted file path. Reported-by: Gunnar Strand <Gunnar.Strand at ericsson.com> Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com> --- tools/lttng-gen-tp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/lttng-gen-tp b/tools/lttng-gen-tp index b62cd990..6aa1bba1 100755 --- a/tools/lttng-gen-tp +++ b/tools/lttng-gen-tp @@ -79,7 +79,9 @@ class CFile: def write(self): outputFile = open(self.outputFilename,"w") - headerFilename = self.outputFilename.replace(".c",".h") + headerFilename = self.outputFilename + if headerFilename.endswith(".c"): + headerFilename = headerFilename[:-2] + ".h" outputFile.write(CFile.FILE_TPL.format( headerFilename = headerFilename)) @@ -126,7 +128,10 @@ class ObjFile: return cc def write(self): - cFilename = self.outputFilename.replace(".o",".c") + cFilename = self.outputFilename + if cFilename.endswith(".o"): + cFilename = cFilename[:-2] + ".c" + cc = self._detectCC() if cc == "": raise RuntimeError("No C Compiler detected") -- 2.11.0 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [lttng-dev] [PATCH lttng-ust 2/2] lttng-gen-tp: formatting 2017-09-19 16:08 [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension Jonathan Rajotte @ 2017-09-19 16:08 ` Jonathan Rajotte 2017-09-19 17:08 ` Mathieu Desnoyers 2017-09-19 17:07 ` [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension Mathieu Desnoyers 1 sibling, 1 reply; 4+ messages in thread From: Jonathan Rajotte @ 2017-09-19 16:08 UTC (permalink / raw) Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com> --- tools/lttng-gen-tp | 73 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/tools/lttng-gen-tp b/tools/lttng-gen-tp index 6aa1bba1..4ab91f36 100755 --- a/tools/lttng-gen-tp +++ b/tools/lttng-gen-tp @@ -23,12 +23,14 @@ import re import os import subprocess + class Usage(Exception): def __init__(self, msg): self.msg = msg + class HeaderFile: - HEADER_TPL=""" + HEADER_TPL = """ #undef TRACEPOINT_PROVIDER #define TRACEPOINT_PROVIDER {providerName} @@ -41,30 +43,32 @@ class HeaderFile: #include <lttng/tracepoint.h> """ - FOOTER_TPL=""" + FOOTER_TPL = """ #endif /* {includeGuard} */ #include <lttng/tracepoint-event.h> """ + def __init__(self, filename, template): self.outputFilename = filename self.template = template def write(self): - outputFile = open(self.outputFilename,"w") + outputFile = open(self.outputFilename, "w") # Include guard macro will be created by uppercasing the filename and # replacing all non alphanumeric characters with '_' includeGuard = re.sub('[^0-9a-zA-Z]', '_', self.outputFilename.upper()) outputFile.write(HeaderFile.HEADER_TPL.format(providerName=self.template.domain, - includeGuard = includeGuard, - headerFilename = self.outputFilename)) + includeGuard=includeGuard, + headerFilename=self.outputFilename)) outputFile.write(self.template.text) - outputFile.write(HeaderFile.FOOTER_TPL.format(includeGuard = includeGuard)) + outputFile.write(HeaderFile.FOOTER_TPL.format(includeGuard=includeGuard)) outputFile.close() + class CFile: - FILE_TPL=""" + FILE_TPL = """ #define TRACEPOINT_CREATE_PROBES /* * The header containing our TRACEPOINT_EVENTs. @@ -72,25 +76,28 @@ class CFile: #define TRACEPOINT_DEFINE #include "{headerFilename}" """ + def __init__(self, filename, template): self.outputFilename = filename self.template = template def write(self): - outputFile = open(self.outputFilename,"w") + outputFile = open(self.outputFilename, "w") headerFilename = self.outputFilename if headerFilename.endswith(".c"): headerFilename = headerFilename[:-2] + ".h" outputFile.write(CFile.FILE_TPL.format( - headerFilename = headerFilename)) + headerFilename=headerFilename)) outputFile.close() + class ObjFile: def __init__(self, filename, template): self.outputFilename = filename self.template = template + def _detectCC(self): cc = "" if 'CC' in os.environ: @@ -153,33 +160,33 @@ class ObjFile: print("Compile command: " + command) subprocess.call(command.split()) + class TemplateFile: def __init__(self, filename): self.domain = "" self.inputFilename = filename self.parseTemplate() - def parseTemplate(self): - f = open(self.inputFilename,"r") + f = open(self.inputFilename, "r") self.text = f.read() - #Remove # comments (from input and output file) but keep + # Remove # comments (from input and output file) but keep # #include in the output file - removeComments = re.compile("#[^include].*$",flags=re.MULTILINE) - self.text = removeComments.sub("",self.text) + removeComments = re.compile("#[^include].*$", flags=re.MULTILINE) + self.text = removeComments.sub("", self.text) # Remove #include directive from the parsed text - removePreprocess = re.compile("#.*$",flags=re.MULTILINE) + removePreprocess = re.compile("#.*$", flags=re.MULTILINE) noPreprocess = removePreprocess.sub("", self.text) - #Remove // comments - removeLineComment = re.compile("\/\/.*$",flags=re.MULTILINE) + # Remove // comments + removeLineComment = re.compile("\/\/.*$", flags=re.MULTILINE) nolinecomment = removeLineComment.sub("", noPreprocess) - #Remove all spaces and lines - cleantext = re.sub("\s*","",nolinecomment) - #Remove multine C style comments - nocomment = re.sub("/\*.*?\*/","",cleantext) - entries = re.split("TRACEPOINT_.*?",nocomment) + # Remove all spaces and lines + cleantext = re.sub("\s*", "", nolinecomment) + # Remove multine C style comments + nocomment = re.sub("/\*.*?\*/", "", cleantext) + entries = re.split("TRACEPOINT_.*?", nocomment) for entry in entries: if entry != '': @@ -194,9 +201,10 @@ class TemplateFile: if self.domain != domain: print("Warning: different domain provided (%s,%s)" % (self.domain, domain)) -verbose=False -usage=""" +verbose = False + +usage = """ lttng-gen-tp - Generate the LTTng-UST header and source based on a simple template usage: lttng-gen-tp TEMPLATE_FILE [-o OUTPUT_FILE][-o OUTPUT_FILE] @@ -212,15 +220,17 @@ usage=""" as per defined in the lttng/tracepoint.h file. See the lttng-ust(3) man page for more details on the format. """ + + def main(argv=None): if argv is None: argv = sys.argv try: try: - opts, args = getopt.gnu_getopt(argv[1:], "ho:av", ["help","verbose"]) + opts, args = getopt.gnu_getopt(argv[1:], "ho:av", ["help", "verbose"]) except getopt.error as msg: - raise Usage(msg) + raise Usage(msg) except Usage as err: print(err.msg, file=sys.stderr) @@ -232,9 +242,9 @@ def main(argv=None): if o in ("-h", "--help"): print(usage) return(0) - if o in ("-o",""): + if o in ("-o", ""): outputNames.append(a) - if o in ("-a",""): + if o in ("-a", ""): all = True if o in ("-v", "--verbose"): global verbose @@ -295,26 +305,27 @@ def main(argv=None): if headerFilename: curFilename = headerFilename else: - curFilename = re.sub("\.tp$",".h",arg) + curFilename = re.sub("\.tp$", ".h", arg) doth = HeaderFile(curFilename, tpl) doth.write() if doCFile: if cFilename: curFilename = cFilename else: - curFilename = re.sub("\.tp$",".c",arg) + curFilename = re.sub("\.tp$", ".c", arg) dotc = CFile(curFilename, tpl) dotc.write() if doObj: if objFilename: curFilename = objFilename else: - curFilename = re.sub("\.tp$",".o",arg) + curFilename = re.sub("\.tp$", ".o", arg) dotobj = ObjFile(curFilename, tpl) dotobj.write() except IOError as args: print("Cannot write output file " + args.filename + " " + args.strerror) return -1 + if __name__ == "__main__": sys.exit(main()) -- 2.11.0 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [lttng-dev] [PATCH lttng-ust 2/2] lttng-gen-tp: formatting 2017-09-19 16:08 ` [lttng-dev] [PATCH lttng-ust 2/2] lttng-gen-tp: formatting Jonathan Rajotte @ 2017-09-19 17:08 ` Mathieu Desnoyers 0 siblings, 0 replies; 4+ messages in thread From: Mathieu Desnoyers @ 2017-09-19 17:08 UTC (permalink / raw) Merged into master, thanks! Mathieu ----- On Sep 19, 2017, at 12:08 PM, Jonathan Rajotte jonathan.rajotte-julien at efficios.com wrote: > Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com> > --- > tools/lttng-gen-tp | 73 +++++++++++++++++++++++++++++++----------------------- > 1 file changed, 42 insertions(+), 31 deletions(-) > > diff --git a/tools/lttng-gen-tp b/tools/lttng-gen-tp > index 6aa1bba1..4ab91f36 100755 > --- a/tools/lttng-gen-tp > +++ b/tools/lttng-gen-tp > @@ -23,12 +23,14 @@ import re > import os > import subprocess > > + > class Usage(Exception): > def __init__(self, msg): > self.msg = msg > > + > class HeaderFile: > - HEADER_TPL=""" > + HEADER_TPL = """ > #undef TRACEPOINT_PROVIDER > #define TRACEPOINT_PROVIDER {providerName} > > @@ -41,30 +43,32 @@ class HeaderFile: > #include <lttng/tracepoint.h> > > """ > - FOOTER_TPL=""" > + FOOTER_TPL = """ > #endif /* {includeGuard} */ > > #include <lttng/tracepoint-event.h> > """ > + > def __init__(self, filename, template): > self.outputFilename = filename > self.template = template > > def write(self): > - outputFile = open(self.outputFilename,"w") > + outputFile = open(self.outputFilename, "w") > # Include guard macro will be created by uppercasing the filename and > # replacing all non alphanumeric characters with '_' > includeGuard = re.sub('[^0-9a-zA-Z]', '_', self.outputFilename.upper()) > > outputFile.write(HeaderFile.HEADER_TPL.format(providerName=self.template.domain, > - includeGuard = includeGuard, > - headerFilename = > self.outputFilename)) > + includeGuard=includeGuard, > + headerFilename=self.outputFilename)) > outputFile.write(self.template.text) > - outputFile.write(HeaderFile.FOOTER_TPL.format(includeGuard = > includeGuard)) > + > outputFile.write(HeaderFile.FOOTER_TPL.format(includeGuard=includeGuard)) > outputFile.close() > > + > class CFile: > - FILE_TPL=""" > + FILE_TPL = """ > #define TRACEPOINT_CREATE_PROBES > /* > * The header containing our TRACEPOINT_EVENTs. > @@ -72,25 +76,28 @@ class CFile: > #define TRACEPOINT_DEFINE > #include "{headerFilename}" > """ > + > def __init__(self, filename, template): > self.outputFilename = filename > self.template = template > > def write(self): > - outputFile = open(self.outputFilename,"w") > + outputFile = open(self.outputFilename, "w") > > headerFilename = self.outputFilename > if headerFilename.endswith(".c"): > headerFilename = headerFilename[:-2] + ".h" > > outputFile.write(CFile.FILE_TPL.format( > - headerFilename = headerFilename)) > + headerFilename=headerFilename)) > outputFile.close() > > + > class ObjFile: > def __init__(self, filename, template): > self.outputFilename = filename > self.template = template > + > def _detectCC(self): > cc = "" > if 'CC' in os.environ: > @@ -153,33 +160,33 @@ class ObjFile: > print("Compile command: " + command) > subprocess.call(command.split()) > > + > class TemplateFile: > def __init__(self, filename): > self.domain = "" > self.inputFilename = filename > self.parseTemplate() > > - > def parseTemplate(self): > - f = open(self.inputFilename,"r") > + f = open(self.inputFilename, "r") > > self.text = f.read() > > - #Remove # comments (from input and output file) but keep > + # Remove # comments (from input and output file) but keep > # #include in the output file > - removeComments = re.compile("#[^include].*$",flags=re.MULTILINE) > - self.text = removeComments.sub("",self.text) > + removeComments = re.compile("#[^include].*$", flags=re.MULTILINE) > + self.text = removeComments.sub("", self.text) > # Remove #include directive from the parsed text > - removePreprocess = re.compile("#.*$",flags=re.MULTILINE) > + removePreprocess = re.compile("#.*$", flags=re.MULTILINE) > noPreprocess = removePreprocess.sub("", self.text) > - #Remove // comments > - removeLineComment = re.compile("\/\/.*$",flags=re.MULTILINE) > + # Remove // comments > + removeLineComment = re.compile("\/\/.*$", flags=re.MULTILINE) > nolinecomment = removeLineComment.sub("", noPreprocess) > - #Remove all spaces and lines > - cleantext = re.sub("\s*","",nolinecomment) > - #Remove multine C style comments > - nocomment = re.sub("/\*.*?\*/","",cleantext) > - entries = re.split("TRACEPOINT_.*?",nocomment) > + # Remove all spaces and lines > + cleantext = re.sub("\s*", "", nolinecomment) > + # Remove multine C style comments > + nocomment = re.sub("/\*.*?\*/", "", cleantext) > + entries = re.split("TRACEPOINT_.*?", nocomment) > > for entry in entries: > if entry != '': > @@ -194,9 +201,10 @@ class TemplateFile: > if self.domain != domain: > print("Warning: different domain provided (%s,%s)" % (self.domain, domain)) > > -verbose=False > > -usage=""" > +verbose = False > + > +usage = """ > lttng-gen-tp - Generate the LTTng-UST header and source based on a simple > template > > usage: lttng-gen-tp TEMPLATE_FILE [-o OUTPUT_FILE][-o OUTPUT_FILE] > @@ -212,15 +220,17 @@ usage=""" > as per defined in the lttng/tracepoint.h file. > See the lttng-ust(3) man page for more details on the format. > """ > + > + > def main(argv=None): > if argv is None: > argv = sys.argv > > try: > try: > - opts, args = getopt.gnu_getopt(argv[1:], "ho:av", > ["help","verbose"]) > + opts, args = getopt.gnu_getopt(argv[1:], "ho:av", ["help", > "verbose"]) > except getopt.error as msg: > - raise Usage(msg) > + raise Usage(msg) > > except Usage as err: > print(err.msg, file=sys.stderr) > @@ -232,9 +242,9 @@ def main(argv=None): > if o in ("-h", "--help"): > print(usage) > return(0) > - if o in ("-o",""): > + if o in ("-o", ""): > outputNames.append(a) > - if o in ("-a",""): > + if o in ("-a", ""): > all = True > if o in ("-v", "--verbose"): > global verbose > @@ -295,26 +305,27 @@ def main(argv=None): > if headerFilename: > curFilename = headerFilename > else: > - curFilename = re.sub("\.tp$",".h",arg) > + curFilename = re.sub("\.tp$", ".h", arg) > doth = HeaderFile(curFilename, tpl) > doth.write() > if doCFile: > if cFilename: > curFilename = cFilename > else: > - curFilename = re.sub("\.tp$",".c",arg) > + curFilename = re.sub("\.tp$", ".c", arg) > dotc = CFile(curFilename, tpl) > dotc.write() > if doObj: > if objFilename: > curFilename = objFilename > else: > - curFilename = re.sub("\.tp$",".o",arg) > + curFilename = re.sub("\.tp$", ".o", arg) > dotobj = ObjFile(curFilename, tpl) > dotobj.write() > except IOError as args: > print("Cannot write output file " + args.filename + " " + args.strerror) > return -1 > > + > if __name__ == "__main__": > sys.exit(main()) > -- > 2.11.0 -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 4+ messages in thread
* [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension 2017-09-19 16:08 [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension Jonathan Rajotte 2017-09-19 16:08 ` [lttng-dev] [PATCH lttng-ust 2/2] lttng-gen-tp: formatting Jonathan Rajotte @ 2017-09-19 17:07 ` Mathieu Desnoyers 1 sibling, 0 replies; 4+ messages in thread From: Mathieu Desnoyers @ 2017-09-19 17:07 UTC (permalink / raw) Merged into master, 2.10, 2.9, thanks! Mathieu ----- On Sep 19, 2017, at 12:08 PM, Jonathan Rajotte jonathan.rajotte-julien at efficios.com wrote: > Previous replace was done on the complete path. A path containing > .c or .o would result in a corrupted file path. > > Reported-by: Gunnar Strand <Gunnar.Strand at ericsson.com> > Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com> > --- > tools/lttng-gen-tp | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/tools/lttng-gen-tp b/tools/lttng-gen-tp > index b62cd990..6aa1bba1 100755 > --- a/tools/lttng-gen-tp > +++ b/tools/lttng-gen-tp > @@ -79,7 +79,9 @@ class CFile: > def write(self): > outputFile = open(self.outputFilename,"w") > > - headerFilename = self.outputFilename.replace(".c",".h") > + headerFilename = self.outputFilename > + if headerFilename.endswith(".c"): > + headerFilename = headerFilename[:-2] + ".h" > > outputFile.write(CFile.FILE_TPL.format( > headerFilename = headerFilename)) > @@ -126,7 +128,10 @@ class ObjFile: > return cc > > def write(self): > - cFilename = self.outputFilename.replace(".o",".c") > + cFilename = self.outputFilename > + if cFilename.endswith(".o"): > + cFilename = cFilename[:-2] + ".c" > + > cc = self._detectCC() > if cc == "": > raise RuntimeError("No C Compiler detected") > -- > 2.11.0 -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-09-19 17:08 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-09-19 16:08 [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension Jonathan Rajotte 2017-09-19 16:08 ` [lttng-dev] [PATCH lttng-ust 2/2] lttng-gen-tp: formatting Jonathan Rajotte 2017-09-19 17:08 ` Mathieu Desnoyers 2017-09-19 17:07 ` [lttng-dev] [PATCH lttng-ust 1/2] Fix: lttng-gen-tp: only replace file extension Mathieu Desnoyers
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox