[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