Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
llvm-build: Add sketchy support for preserving comments when using
Browse files Browse the repository at this point in the history
--write-llvmbuild.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146434 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
ddunbar committed Dec 12, 2011
1 parent dcfc2ea commit a321716
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 3 deletions.
5 changes: 4 additions & 1 deletion docs/CommandGuide/llvm-build.pod
Expand Up @@ -46,7 +46,10 @@ component combinations.
=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>

Expand Down
4 changes: 4 additions & 0 deletions utils/llvm-build/llvmbuild/componentinfo.py
Expand Up @@ -42,6 +42,9 @@ def __init__(self, subpath, name, dependencies, parent):
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
Expand Down Expand Up @@ -407,4 +410,5 @@ def load_from_path(path, subpath):
fatal("unable to load component %r in %r: %s" % (
section, path, e.message))

info._source_path = path
yield info
24 changes: 22 additions & 2 deletions utils/llvm-build/llvmbuild/main.py
@@ -1,3 +1,4 @@
import StringIO
import os
import sys

Expand Down Expand Up @@ -231,7 +232,22 @@ def write_components(self, output_path):
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")

Expand Down Expand Up @@ -260,7 +276,11 @@ def write_components(self, output_path):
""" % 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
Expand Down

0 comments on commit a321716

Please sign in to comment.