Fix: lttng-gen-tp: only replace file extension
[lttng-ust.git] / tools / lttng-gen-tp
index 1ff91464acc0a4441efa9a4a1a8a0ff6c5b7b8e3..6aa1bba15d05012cf75e8d3aa0af69d4efa67bdf 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 #
 # Copyright (c)  2012 Yannick Brosseau <yannick.brosseau@gmail.com>
 #
@@ -16,6 +16,7 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
+from __future__ import print_function
 import sys
 import getopt
 import re
@@ -34,11 +35,6 @@ class HeaderFile:
 #undef TRACEPOINT_INCLUDE
 #define TRACEPOINT_INCLUDE "./{headerFilename}"
 
-#ifdef __cplusplus
-extern "C"{{
-#endif /* __cplusplus */
-
-
 #if !defined({includeGuard}) || defined(TRACEPOINT_HEADER_MULTI_READ)
 #define {includeGuard}
 
@@ -49,11 +45,6 @@ extern "C"{{
 #endif /* {includeGuard} */
 
 #include <lttng/tracepoint-event.h>
-
-#ifdef __cplusplus
-}}
-#endif /* __cplusplus */
-
 """
     def __init__(self, filename, template):
         self.outputFilename = filename
@@ -88,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))
@@ -100,14 +93,14 @@ class ObjFile:
         self.template = template
     def _detectCC(self):
         cc = ""
-        if os.environ.has_key('CC'):
+        if 'CC' in os.environ:
             cc = os.environ['CC']
             try:
-                subprocess.call(cc,
+                subprocess.call(cc.split(),
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
-            except OSError, msg:
-                print "Invalid CC environment variable"
+            except OSError as msg:
+                print("Invalid CC environment variable")
                 cc = ""
 
         else:
@@ -117,7 +110,7 @@ class ObjFile:
                 subprocess.call("cc",
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
-            except OSError, msg:
+            except OSError as msg:
                 useCC = False
             if useCC:
                 cc = "cc"
@@ -128,23 +121,34 @@ class ObjFile:
                     subprocess.call("gcc",
                                     stdout=subprocess.PIPE,
                                     stderr=subprocess.PIPE)
-                except OSError, msg:
+                except OSError as msg:
                     useGCC = False
                 if useGCC:
                     cc = "gcc"
         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")
-        if os.environ.has_key('CFLAGS'):
-            cflags = os.environ['CFLAGS']
+        if 'CPPFLAGS' in os.environ:
+            cppflags = " " + os.environ['CPPFLAGS']
+        else:
+            cppflags = ""
+        if 'CFLAGS' in os.environ:
+            cflags = " " + os.environ['CFLAGS']
         else:
             cflags = ""
+        if 'LDFLAGS' in os.environ:
+            ldflags = " " + os.environ['LDFLAGS']
+        else:
+            ldflags = ""
 
-        command = cc + " -c " + cflags + " -I. -llttng-ust" + " -o " + self.outputFilename + " " + cFilename
+        command = cc + " -c" + cppflags + cflags + ldflags + " -I. -llttng-ust" + " -o " + self.outputFilename + " " + cFilename
         if verbose:
             print("Compile command: " + command)
         subprocess.call(command.split())
@@ -188,7 +192,7 @@ class TemplateFile:
                     self.domain = domain
                 else:
                     if self.domain != domain:
-                        print "Warning: different domain provided (%s,%s)" % (self.domain, domain)
+                        print("Warning: different domain provided (%s,%s)" % (self.domain, domain))
 
 verbose=False
 
@@ -215,18 +219,18 @@ def main(argv=None):
     try:
         try:
             opts, args = getopt.gnu_getopt(argv[1:], "ho:av", ["help","verbose"])
-        except getopt.error, msg:
+        except getopt.error as msg:
              raise Usage(msg)
 
-    except Usage, err:
-        print >>sys.stderr, err.msg
-        print >>sys.stderr, "for help use --help"
+    except Usage as err:
+        print(err.msg, file=sys.stderr)
+        print("for help use --help", file=sys.stderr)
         return 2
 
     outputNames = []
     for o, a in opts:
         if o in ("-h", "--help"):
-            print usage
+            print(usage)
             return(0)
         if o in ("-o",""):
             outputNames.append(a)
@@ -239,9 +243,9 @@ def main(argv=None):
         if len(args) == 0:
             raise Usage("No template file given")
 
-    except Usage, err:
-        print >>sys.stderr, err.msg
-        print >>sys.stderr, "for help use --help"
+    except Usage as err:
+        print(err.msg, file=sys.stderr)
+        print("for help use --help", file=sys.stderr)
         return 2
 
     doCFile = None
@@ -253,7 +257,7 @@ def main(argv=None):
 
     if len(outputNames) > 0:
         if len(args) > 1:
-            print "Cannot process more than one input if you specify an output"
+            print("Cannot process more than one input if you specify an output")
             return(3)
 
         for outputName in outputNames:
@@ -267,7 +271,7 @@ def main(argv=None):
                 doObj = True
                 objFilename = outputName
             else:
-                print "output file type unsupported"
+                print("output file type unsupported")
                 return(4)
     else:
         doHeader = True
@@ -277,14 +281,14 @@ def main(argv=None):
     # process arguments
     for arg in args:
         if arg[-3:] != ".tp":
-                print arg + " does not end in .tp. Skipping."
+                print(arg + " does not end in .tp. Skipping.")
                 continue
 
         tpl = None
         try:
             tpl = TemplateFile(arg)
         except IOError as args:
-            print "Cannot read input file " + args.filename + " " + args.strerror
+            print("Cannot read input file " + args.filename + " " + args.strerror)
             return -1
         try:
             if doHeader:
@@ -309,8 +313,8 @@ def main(argv=None):
                 dotobj = ObjFile(curFilename, tpl)
                 dotobj.write()
         except IOError as args:
-            print "Cannot write output file " + args.filename + " " + args.strerror 
+            print("Cannot write output file " + args.filename + " " + args.strerror)
             return -1
-        
+
 if __name__ == "__main__":
     sys.exit(main())
This page took 0.027842 seconds and 4 git commands to generate.