| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| '''Parses a given application.ini file and outputs the corresponding |
| XULAppData structure as a C++ header file''' |
| |
| import ConfigParser |
| import sys |
| |
| def main(file): |
| config = ConfigParser.RawConfigParser() |
| config.read(file) |
| flags = set() |
| try: |
| if config.getint('XRE', 'EnableProfileMigrator') == 1: |
| flags.add('NS_XRE_ENABLE_PROFILE_MIGRATOR') |
| except: pass |
| try: |
| if config.getint('Crash Reporter', 'Enabled') == 1: |
| flags.add('NS_XRE_ENABLE_CRASH_REPORTER') |
| except: pass |
| appdata = dict(("%s:%s" % (s, o), config.get(s, o)) for s in config.sections() for o in config.options(s)) |
| appdata['flags'] = ' | '.join(flags) if flags else '0' |
| appdata['App:profile'] = '"%s"' % appdata['App:profile'] if 'App:profile' in appdata else 'NULL' |
| expected = ('App:vendor', 'App:name', 'App:remotingname', 'App:version', 'App:buildid', |
| 'App:id', 'Gecko:minversion', 'Gecko:maxversion') |
| missing = [var for var in expected if var not in appdata] |
| if missing: |
| print >>sys.stderr, \ |
| "Missing values in %s: %s" % (file, ', '.join(missing)) |
| sys.exit(1) |
| |
| if not 'Crash Reporter:serverurl' in appdata: |
| appdata['Crash Reporter:serverurl'] = '' |
| |
| print '''#include "nsXREAppData.h" |
| static const nsXREAppData sAppData = { |
| sizeof(nsXREAppData), |
| NULL, // directory |
| "%(App:vendor)s", |
| "%(App:name)s", |
| "%(App:remotingname)s", |
| "%(App:version)s", |
| "%(App:buildid)s", |
| "%(App:id)s", |
| NULL, // copyright |
| %(flags)s, |
| NULL, // xreDirectory |
| "%(Gecko:minversion)s", |
| "%(Gecko:maxversion)s", |
| "%(Crash Reporter:serverurl)s", |
| %(App:profile)s |
| };''' % appdata |
| |
| if __name__ == '__main__': |
| if len(sys.argv) != 1: |
| main(sys.argv[1]) |
| else: |
| print >>sys.stderr, "Usage: %s /path/to/application.ini" % sys.argv[0] |