15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2011 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)appid.py -- Chromium appid header file generation utility.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import optparse
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GENERATED_APPID_INCLUDE_FILE_CONTENTS = """
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is automatically generated by appid.py.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It contains the Google Update Appid used for this build. Note that
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the Appid will be empty for non Google Chrome builds.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google_update {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kChromeGuid[] = L"%s";
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GenerateAppIdHeader(opts):
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  contents = GENERATED_APPID_INCLUDE_FILE_CONTENTS % opts.appid
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ofp = open(opts.output_file, 'r')
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  except EnvironmentError:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    current_contents = None
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    current_contents = ofp.read()
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if contents != current_contents:
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    open(opts.output_file, 'w').write(contents)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main():
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser = optparse.OptionParser()
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option('-a', '--appid',
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help='The Google Update App Id of the Chrome being built.')
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option('-o', '--output_file',
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    help='The path to the generated output header file')
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  (opts, args) = parser.parse_args()
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if opts.appid is None or not opts.output_file:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parser.print_help()
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Log a trace in the build output when we run.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Generating appid header... ",
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GenerateAppIdHeader(opts)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Done."
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(main())
57