Index: third_party/gsutil/pkg_util.py |
diff --git a/third_party/gsutil/pkg_util.py b/third_party/gsutil/pkg_util.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8a0befc6b1642a53187f88393c347669120c284d |
--- /dev/null |
+++ b/third_party/gsutil/pkg_util.py |
@@ -0,0 +1,60 @@ |
+#!/usr/bin/env python |
+ |
+# Utilities to facilitate maintaining one master list of package contents |
+# in MANIFEST.in and allow us to import that list into various packaging |
+# tools (e.g. rpmbuid and setup.py). |
+ |
+# Define the file in which we maintain package contents. Rather than |
+# hard-coding our package contents, to ease maintenance we read the |
+# manifest file to obtain the list of files and directories to include. |
+MANIFEST_IN = 'MANIFEST.in' |
+ |
+# Define input and output files for customizing the rpm package spec. |
+SPEC_IN = 'gsutil.spec.in' |
+SPEC_OUT = 'gsutil.spec' |
+ |
+# Root of rpmbuild tree for file enumeration in gsutil.spec file. |
+RPM_ROOT = '%{_datadir}/%{name}/' |
+ |
+def parse_manifest(files, dirs): |
+ '''Parse contents of manifest file and append results to passed lists |
+ of files and directories. |
+ ''' |
+ f = open(MANIFEST_IN, 'r') |
+ for line in f: |
+ line = line.strip() |
+ # Skip empty or comment lines. |
+ if (len(line) <= 0) or (line[0] == '#'): |
+ continue |
+ tokens = line.split() |
+ if len(tokens) >= 0: |
+ if tokens[0] == 'include': |
+ files.extend(tokens[1:]) |
+ elif tokens[0] == 'recursive-include' and tokens[2] == '*': |
+ dirs.append(tokens[1]) |
+ else: |
+ err = 'Unsupported type ' + tokens[0] + ' in ' + MANIFEST_IN + ' file.' |
+ raise Exception(err) |
+ f.close() |
+ |
+# When executed as a separate script, create a dynamically generated rpm |
+# spec file. Otherwise, when loaded as a module by another script, no |
+# specific actions are taken, other than making utility functions available |
+# to the loading script. |
+if __name__ == '__main__': |
+ # Running as main so generate a new rpm spec file. |
+ files = [] |
+ dirs = [] |
+ parse_manifest(files, dirs) |
+ fin = open(SPEC_IN, 'r') |
+ fout = open(SPEC_OUT, 'w') |
+ for line in fin: |
+ if line.strip() == '###FILES_GO_HERE###': |
+ for file in files: |
+ fout.write(RPM_ROOT + file + '\n') |
+ for dir in dirs: |
+ fout.write(RPM_ROOT + dir + '/\n') |
+ else: |
+ fout.write(line) |
+ fout.close() |
+ fin.close() |