Index: tools/generate_includes_cpp.py |
diff --git a/tools/generate_includes_cpp.py b/tools/generate_includes_cpp.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1a6f117c630a3b922d94217e5a8369063b187647 |
--- /dev/null |
+++ b/tools/generate_includes_cpp.py |
@@ -0,0 +1,73 @@ |
+#!/usr/bin/python |
+ |
+''' |
+Copyright 2014 Google Inc. |
+ |
+Use of this source code is governed by a BSD-style license that can be |
+found in the LICENSE file. |
+''' |
+ |
+import os |
+import optparse |
+import posixpath |
+import re |
+ |
+ |
+def is_ignored(full_path, ignore_list): |
+ for ignore_path in ignore_list: |
+ if re.match(full_path, ignore_path, re.I): |
+ return True |
+ return False |
+ |
+ |
+def find_header_files(include_dirs, ignore_list): |
+ """Return a list of all '.h' files in top_dir. |
+ |
+ Args: |
+ include_dirs: Paths to the directories within which to recursively search |
+ for files ending in '.h' |
+ ignore_list: Paths to both files and directories that are to be excluded |
+ from the search for headers |
+ |
+ Returns: |
+ A list of all the files inside include_dirs that end in '.h', relative to |
+ their respective include_dir that are not explicitly ignored. |
+ """ |
+ headers = [] |
+ for top_dir in include_dirs: |
+ for filename in os.listdir(top_dir): |
+ full_path = posixpath.join(top_dir, filename) |
+ if is_ignored(full_path, ignore_list): |
+ continue |
+ elif os.path.isdir(full_path): |
+ nested_headers = find_header_files([full_path], ignore_list) |
+ for nested_header in nested_headers: |
+ headers.append(os.path.join(filename, nested_header)) |
+ elif filename.endswith('.h'): |
+ headers.append(filename) |
+ return headers |
+ |
+ |
+def GenerateIncludeCPP(output_file, include_dirs, ignore_list): |
+ headers = find_header_files(include_dirs, ignore_list) |
+ |
+ # Emit resulting source file. |
+ with open(os.path.join(os.getcwd(), output_file), "w+") as output: |
+ for header in headers: |
+ output.write("#include <%s>\n" % header) |
+ |
+ |
+def main(): |
+ parser = optparse.OptionParser() |
+ parser.add_option("--ignore", action="store", type="string", dest="ignore", |
+ help="file to write the processed sources array to.") |
+ parser.set_usage("""generate_include_cpp out.cpp include_dir |
+ out.cpp: C++ code to be generated. |
+ include_dirs: directories to traverse for include files""") |
+ (options, args) = parser.parse_args() |
+ |
+ GenerateIncludeCPP(args[0], args[1:], options.ignore.split()) |
+ |
+ |
+if __name__ == "__main__": |
+ main() |