[llvm-commits] [llvm] r146434 - in /llvm/trunk: docs/CommandGuide/llvm-build.pod utils/llvm-build/llvmbuild/componentinfo.py utils/llvm-build/llvmbuild/main.py

Daniel Dunbar daniel at zuster.org
Mon Dec 12 14:45:36 PST 2011


Author: ddunbar
Date: Mon Dec 12 16:45:35 2011
New Revision: 146434

URL: http://llvm.org/viewvc/llvm-project?rev=146434&view=rev
Log:
llvm-build: Add sketchy support for preserving comments when using
--write-llvmbuild.

Modified:
    llvm/trunk/docs/CommandGuide/llvm-build.pod
    llvm/trunk/utils/llvm-build/llvmbuild/componentinfo.py
    llvm/trunk/utils/llvm-build/llvmbuild/main.py

Modified: llvm/trunk/docs/CommandGuide/llvm-build.pod
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CommandGuide/llvm-build.pod?rev=146434&r1=146433&r2=146434&view=diff
==============================================================================
--- llvm/trunk/docs/CommandGuide/llvm-build.pod (original)
+++ llvm/trunk/docs/CommandGuide/llvm-build.pod Mon Dec 12 16:45:35 2011
@@ -46,7 +46,10 @@
 =item B<--write-llvmbuild>
 
 Write out new I<LLVMBuild.txt> files based on the loaded components. This is
-useful for auto-upgrading the schema of the files.
+useful for auto-upgrading the schema of the files. B<llvm-build> will try to a
+limited extent to preserve the comments which were written in the original
+source file, although at this time it only preserves block comments that preceed
+the section names in the I<LLVMBuild> files.
 
 =item B<--write-cmake-fragment>
 

Modified: llvm/trunk/utils/llvm-build/llvmbuild/componentinfo.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvm-build/llvmbuild/componentinfo.py?rev=146434&r1=146433&r2=146434&view=diff
==============================================================================
--- llvm/trunk/utils/llvm-build/llvmbuild/componentinfo.py (original)
+++ llvm/trunk/utils/llvm-build/llvmbuild/componentinfo.py Mon Dec 12 16:45:35 2011
@@ -42,6 +42,9 @@
         self.parent_instance = None
         self.children = []
 
+        # The original source path.
+        self._source_path = None
+
     def set_parent_instance(self, parent):
         assert parent.name == self.parent, "Unexpected parent!"
         self.parent_instance = parent
@@ -407,4 +410,5 @@
             fatal("unable to load component %r in %r: %s" % (
                     section, path, e.message))
 
+        info._source_path = path
         yield info

Modified: llvm/trunk/utils/llvm-build/llvmbuild/main.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvm-build/llvmbuild/main.py?rev=146434&r1=146433&r2=146434&view=diff
==============================================================================
--- llvm/trunk/utils/llvm-build/llvmbuild/main.py (original)
+++ llvm/trunk/utils/llvm-build/llvmbuild/main.py Mon Dec 12 16:45:35 2011
@@ -1,3 +1,4 @@
+import StringIO
 import os
 import sys
 
@@ -231,7 +232,22 @@
             if not os.path.exists(directory_path):
                 os.makedirs(directory_path)
 
-            # Create the LLVMBuild file.
+            # In an effort to preserve comments (which aren't parsed), read in
+            # the original file and extract the comments. We only know how to
+            # associate comments that prefix a section name.
+            f = open(infos[0]._source_path)
+            comments_map = {}
+            comment_block = ""
+            for ln in f:
+                if ln.startswith(';'):
+                    comment_block += ln
+                elif ln.startswith('[') and ln.endswith(']\n'):
+                    comments_map[ln[:-1]] = comment_block
+                else:
+                    comment_block = ""
+            f.close()
+
+            # Create the LLVMBuild fil[e.
             file_path = os.path.join(directory_path, 'LLVMBuild.txt')
             f = open(file_path, "w")
 
@@ -260,7 +276,11 @@
 """ % header_string
 
             for i,fragment in enumerate(fragments):
-                print >>f, '[component_%d]' % i
+                name = '[component_%d]' % i
+                comment = comments_map.get(name)
+                if comment is not None:
+                    f.write(comment)
+                print >>f, name
                 f.write(fragment)
                 if fragment is not fragments[-1]:
                     print >>f





More information about the llvm-commits mailing list