| The Gaudi Framework v28r2p1 (f1a77ff4)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

createProjVersHeader.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2
3 import os
4 import sys
5 import re
6 from optparse import OptionParser
7
8 lhcb_ver_style = "v(?P<maj_ver>[0-9]+)r(?P<min_ver>[0-9]+)(?:p(?P<pat_ver>[0-9]+))?"
9 atlas_ver_style = "[A-Za-z]+\-(?P<maj_ver>[0-9]+)\-(?P<min_ver>[0-9]+)(?:\-(?P<pat_ver>[0-9]+))?"
10 plain_ver_style = "(?P<maj_ver>[0-9]+)\.(?P<min_ver>[0-9]+)(?:\.(?P<pat_ver>[0-9]+))?"
11
12
13 def main():
14 parser = OptionParser(usage="ERROR: Usage %prog <project> <version> <outputfile>")
15 parser.add_option("-q", "--quiet", action="store_true",
16 help="Do not print messages.")
17 opts, args = parser.parse_args()
18 if len(args) != 3:
19 parser.error("wrong number of arguments")
20
21 project, version, outputfile = args
22 if not opts.quiet:
23 print "Creating %s for %s %s" % (outputfile, project, version)
24
25 for style in [lhcb_ver_style, atlas_ver_style, plain_ver_style ] :
26 m = re.match(style, version)
27 if m :
28 majver = int(m.groupdict()['maj_ver'])
29 minver = int(m.groupdict()['min_ver'])
30 patver = int(m.groupdict()['pat_ver'] or 0)
31 break
32 else:
33 # anything that is not one of the explicit version syntaxes is handled
34 # in the same way, e.g. "HEAD"
35 majver, minver, patver = 999, 999, 0
36
37 outdir = os.path.dirname(outputfile)
38 if not os.path.exists(outdir):
39 if not opts.quiet:
40 print "Creating directory", outdir
41 os.makedirs(outdir)
42
43 # Prepare data to be written
44 outputdata = """#ifndef %(proj)s_VERSION
45 /* Automatically generated file: do not modify! */
46 #ifndef CALC_GAUDI_VERSION
47 #define CALC_GAUDI_VERSION(maj,min) (((maj) << 16) + (min))
48 #endif
49 #define %(proj)s_MAJOR_VERSION %(maj)d
50 #define %(proj)s_MINOR_VERSION %(min)d
51 #define %(proj)s_PATCH_VERSION %(pat)d
52 #define %(proj)s_VERSION CALC_GAUDI_VERSION(%(proj)s_MAJOR_VERSION,%(proj)s_MINOR_VERSION)
53 #endif
54 """ % { 'proj': project.upper(), 'min': minver, 'maj': majver, 'pat': patver }
55
56 # Get the current content of the destination file (if any)
57 try:
58 f = open(outputfile, "r")
59 olddata = f.read()
60 f.close()
61 except IOError:
62 olddata = None
63
64 # Overwrite the file only if there are changes
65 if outputdata != olddata:
66 open(outputfile, "w").write(outputdata)
67
68 if __name__ == "__main__":
69 main()
createProjVersHeader.main
def main()
Definition: createProjVersHeader.py:13
GaudiPython.GaudiAlgs.write
write
Definition: GaudiAlgs.py:1144