OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env python |
| 2 |
| 3 # Utilities to facilitate maintaining one master list of package contents |
| 4 # in MANIFEST.in and allow us to import that list into various packaging |
| 5 # tools (e.g. rpmbuid and setup.py). |
| 6 |
| 7 # Define the file in which we maintain package contents. Rather than |
| 8 # hard-coding our package contents, to ease maintenance we read the |
| 9 # manifest file to obtain the list of files and directories to include. |
| 10 MANIFEST_IN = 'MANIFEST.in' |
| 11 |
| 12 # Define input and output files for customizing the rpm package spec. |
| 13 SPEC_IN = 'gsutil.spec.in' |
| 14 SPEC_OUT = 'gsutil.spec' |
| 15 |
| 16 # Root of rpmbuild tree for file enumeration in gsutil.spec file. |
| 17 RPM_ROOT = '%{_datadir}/%{name}/' |
| 18 |
| 19 def parse_manifest(files, dirs): |
| 20 '''Parse contents of manifest file and append results to passed lists |
| 21 of files and directories. |
| 22 ''' |
| 23 f = open(MANIFEST_IN, 'r') |
| 24 for line in f: |
| 25 line = line.strip() |
| 26 # Skip empty or comment lines. |
| 27 if (len(line) <= 0) or (line[0] == '#'): |
| 28 continue |
| 29 tokens = line.split() |
| 30 if len(tokens) >= 0: |
| 31 if tokens[0] == 'include': |
| 32 files.extend(tokens[1:]) |
| 33 elif tokens[0] == 'recursive-include' and tokens[2] == '*': |
| 34 dirs.append(tokens[1]) |
| 35 else: |
| 36 err = 'Unsupported type ' + tokens[0] + ' in ' + MANIFEST_IN + ' file.' |
| 37 raise Exception(err) |
| 38 f.close() |
| 39 |
| 40 # When executed as a separate script, create a dynamically generated rpm |
| 41 # spec file. Otherwise, when loaded as a module by another script, no |
| 42 # specific actions are taken, other than making utility functions available |
| 43 # to the loading script. |
| 44 if __name__ == '__main__': |
| 45 # Running as main so generate a new rpm spec file. |
| 46 files = [] |
| 47 dirs = [] |
| 48 parse_manifest(files, dirs) |
| 49 fin = open(SPEC_IN, 'r') |
| 50 fout = open(SPEC_OUT, 'w') |
| 51 for line in fin: |
| 52 if line.strip() == '###FILES_GO_HERE###': |
| 53 for file in files: |
| 54 fout.write(RPM_ROOT + file + '\n') |
| 55 for dir in dirs: |
| 56 fout.write(RPM_ROOT + dir + '/\n') |
| 57 else: |
| 58 fout.write(line) |
| 59 fout.close() |
| 60 fin.close() |
OLD | NEW |