• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python
2# Copyright (c) 2011 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Creates a zip archive with policy template files. The list of input files is
7extracted from a grd file with grit. This is to keep the length of input
8arguments below the limit on Windows.
9"""
10
11import optparse
12import os
13import sys
14import zipfile
15
16
17def add_files_to_zip(zip_file, base_dir, file_list):
18  """Pack a list of files into a zip archive, that is already
19  opened for writing.
20
21  Args:
22    zip_file: An object representing the zip archive.
23    base_dir: Base path of all the files in the real file system.
24    files: List of file paths to add, all relative to base_dir.
25        The zip entries will only contain this componenet of the path.
26  """
27  for file_path in file_list:
28    zip_file.write(base_dir + file_path, file_path)
29  return 0
30
31
32def get_grd_outputs(grit_cmd, grit_defines, grd_file, grd_strip_path_prefix):
33  grit_path = os.path.join(os.getcwd(), os.path.dirname(grit_cmd))
34  sys.path.append(grit_path)
35  import grit_info
36  outputs = grit_info.Outputs(grd_file, grit_defines,
37                              'GRIT_DIR/../gritsettings/resource_ids')
38  result = []
39  for item in outputs:
40    assert item.startswith(grd_strip_path_prefix)
41    result.append(item[len(grd_strip_path_prefix):])
42  return result
43
44
45def main(argv):
46  """Pack a list of files into a zip archive.
47
48  Args:
49    zip_path: The file name of the zip archive.
50    base_dir: Base path of input files.
51    locales: The list of locales that are used to generate the list of file
52        names using INPUT_FILES.
53  """
54  parser = optparse.OptionParser()
55  parser.add_option("--output", dest="output")
56  parser.add_option("--basedir", dest="basedir")
57  parser.add_option("--grit_info", dest="grit_info")
58  parser.add_option("--grd_input", dest="grd_input")
59  parser.add_option("--grd_strip_path_prefix", dest="grd_strip_path_prefix")
60  parser.add_option("--extra_input", action="append", dest="extra_input",
61                    default=[])
62  parser.add_option("-D", action="append", dest="grit_defines", default=[])
63  parser.add_option("-E", action="append", dest="grit_build_env", default=[])
64  options, args = parser.parse_args(argv[1:])
65
66  if (options.basedir[-1] != '/'):
67    options.basedir += '/'
68  grit_defines = {}
69  for define in options.grit_defines:
70    grit_defines[define] = 1
71
72  file_list = options.extra_input
73  file_list += get_grd_outputs(options.grit_info, grit_defines,
74                               options.grd_input, options.grd_strip_path_prefix)
75  zip_file = zipfile.ZipFile(options.output, 'w', zipfile.ZIP_DEFLATED)
76  try:
77    return add_files_to_zip(zip_file, options.basedir, file_list)
78  finally:
79    zip_file.close()
80
81
82if '__main__' == __name__:
83  sys.exit(main(sys.argv))
84