Allow #include in template (.tp) file
[lttng-ust.git] / tools / lttng-gen-tp
index 2075655559a582a214551a0b397ca609aaebc381..1ff91464acc0a4441efa9a4a1a8a0ff6c5b7b8e3 100755 (executable)
@@ -31,8 +31,8 @@ class HeaderFile:
 #undef TRACEPOINT_PROVIDER
 #define TRACEPOINT_PROVIDER {providerName}
 
-#undef TRACEPOINT_INCLUDE_FILE
-#define TRACEPOINT_INCLUDE_FILE ./{headerFilename}
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./{headerFilename}"
 
 #ifdef __cplusplus
 extern "C"{{
@@ -61,7 +61,9 @@ extern "C"{{
 
     def write(self):
         outputFile = open(self.outputFilename,"w")
-        includeGuard = self.outputFilename.upper().replace(".","_")
+        # 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,
@@ -143,6 +145,8 @@ class ObjFile:
             cflags = ""
 
         command = cc + " -c " + cflags + " -I. -llttng-ust" + " -o " + self.outputFilename + " " + cFilename
+        if verbose:
+            print("Compile command: " + command)
         subprocess.call(command.split())
 
 class TemplateFile:
@@ -157,12 +161,16 @@ class TemplateFile:
 
         self.text = f.read()
 
-        #Remove # comments (from input and output file
-        removeComments = re.compile("#.*$",flags=re.MULTILINE)
+        #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)
+        # Remove #include directive from the parsed text
+        removePreprocess = re.compile("#.*$",flags=re.MULTILINE)
+        noPreprocess = removePreprocess.sub("", self.text)
         #Remove // comments
         removeLineComment = re.compile("\/\/.*$",flags=re.MULTILINE)
-        nolinecomment = removeLineComment.sub("",self.text)
+        nolinecomment = removeLineComment.sub("", noPreprocess)
         #Remove all spaces and lines
         cleantext = re.sub("\s*","",nolinecomment)
         #Remove multine C style comments
@@ -182,6 +190,8 @@ class TemplateFile:
                     if self.domain != domain:
                         print "Warning: different domain provided (%s,%s)" % (self.domain, domain)
 
+verbose=False
+
 usage="""
  lttng-gen-tp - Generate the LTTng-UST header and source based on a simple template
 
@@ -204,11 +214,9 @@ def main(argv=None):
 
     try:
         try:
-            opts, args = getopt.gnu_getopt(argv[1:], "ho:a", ["help"])
+            opts, args = getopt.gnu_getopt(argv[1:], "ho:av", ["help","verbose"])
         except getopt.error, msg:
              raise Usage(msg)
-        if len(args) == 0:
-            raise Usage("No template file given")
 
     except Usage, err:
         print >>sys.stderr, err.msg
@@ -224,6 +232,17 @@ def main(argv=None):
             outputNames.append(a)
         if o in ("-a",""):
             all = True
+        if o in ("-v", "--verbose"):
+            global verbose
+            verbose = True
+    try:
+        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"
+        return 2
 
     doCFile = None
     doHeader = None
@@ -257,6 +276,9 @@ def main(argv=None):
 
     # process arguments
     for arg in args:
+        if arg[-3:] != ".tp":
+                print arg + " does not end in .tp. Skipping."
+                continue
 
         tpl = None
         try:
This page took 0.025297 seconds and 4 git commands to generate.