diff options
author | Daniel Dunbar <daniel@zuster.org> | 2011-12-12 22:45:35 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2011-12-12 22:45:35 +0000 |
commit | a3217165c6d2ef7caf58665eb0a61c64ab229b9f (patch) | |
tree | c04b1f36179778d980fd54fabef9ebf44d8b0d87 | |
parent | dcfc2eaf628d29aa83381f2e74e952ba70e55702 (diff) | |
download | llvm-a3217165c6d2ef7caf58665eb0a61c64ab229b9f.tar.gz llvm-a3217165c6d2ef7caf58665eb0a61c64ab229b9f.tar.bz2 llvm-a3217165c6d2ef7caf58665eb0a61c64ab229b9f.tar.xz |
llvm-build: Add sketchy support for preserving comments when using
--write-llvmbuild.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146434 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/CommandGuide/llvm-build.pod | 5 | ||||
-rw-r--r-- | utils/llvm-build/llvmbuild/componentinfo.py | 4 | ||||
-rw-r--r-- | utils/llvm-build/llvmbuild/main.py | 24 |
3 files changed, 30 insertions, 3 deletions
diff --git a/docs/CommandGuide/llvm-build.pod b/docs/CommandGuide/llvm-build.pod index 78648ba71e..14e08cb629 100644 --- a/docs/CommandGuide/llvm-build.pod +++ b/docs/CommandGuide/llvm-build.pod @@ -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> diff --git a/utils/llvm-build/llvmbuild/componentinfo.py b/utils/llvm-build/llvmbuild/componentinfo.py index 079102f676..e9ef973d08 100644 --- a/utils/llvm-build/llvmbuild/componentinfo.py +++ b/utils/llvm-build/llvmbuild/componentinfo.py @@ -42,6 +42,9 @@ class ComponentInfo(object): 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 @@ 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 diff --git a/utils/llvm-build/llvmbuild/main.py b/utils/llvm-build/llvmbuild/main.py index 4c14f46c80..71e11d79cf 100644 --- a/utils/llvm-build/llvmbuild/main.py +++ b/utils/llvm-build/llvmbuild/main.py @@ -1,3 +1,4 @@ +import StringIO import os import sys @@ -231,7 +232,22 @@ class LLVMProjectInfo(object): 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 @@ class LLVMProjectInfo(object): """ % 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 |