#!/usr/bin/env python
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""
appid.py -- Chromium appid header file generation utility.
"""

import optparse
import sys

GENERATED_APPID_INCLUDE_FILE_CONTENTS = """
// This file is automatically generated by appid.py.
// It contains the Google Update Appid used for this build. Note that
// the Appid will be empty for non Google Chrome builds.
namespace google_update {
const wchar_t kChromeGuid[] = L"%s";
}
"""

def GenerateAppIdHeader(opts):
  contents = GENERATED_APPID_INCLUDE_FILE_CONTENTS % opts.appid

  try:
    ofp = open(opts.output_file, 'r')
  except EnvironmentError:
    current_contents = None
  else:
    current_contents = ofp.read()

  if contents != current_contents:
    open(opts.output_file, 'w').write(contents)

def main():
  parser = optparse.OptionParser()
  parser.add_option('-a', '--appid',
                    help='The Google Update App Id of the Chrome being built.')
  parser.add_option('-o', '--output_file',
                    help='The path to the generated output header file')

  (opts, args) = parser.parse_args()

  if opts.appid is None or not opts.output_file:
    parser.print_help()
    return 1

  # Log a trace in the build output when we run.
  print "Generating appid header... ",
  GenerateAppIdHeader(opts)

  print "Done."


if __name__ == '__main__':
  sys.exit(main())
