| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Creates a directory with with the unpacked contents of the remoting webapp. | 6 """Creates a directory with with the unpacked contents of the remoting webapp. |
| 7 | 7 |
| 8 The directory will contain a copy-of or a link-to to all remoting webapp | 8 The directory will contain a copy-of or a link-to to all remoting webapp |
| 9 resources. This includes HTML/JS and any plugin binaries. The script also | 9 resources. This includes HTML/JS and any plugin binaries. The script also |
| 10 massages resulting files appropriately with host plugin data. Finally, | 10 massages resulting files appropriately with host plugin data. Finally, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 sys.path.append(os.path.split(jinja2_path)[0]) | 68 sys.path.append(os.path.split(jinja2_path)[0]) |
| 69 import jinja2 | 69 import jinja2 |
| 70 (template_path, template_name) = os.path.split(input_file) | 70 (template_path, template_name) = os.path.split(input_file) |
| 71 env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path)) | 71 env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path)) |
| 72 template = env.get_template(template_name) | 72 template = env.get_template(template_name) |
| 73 rendered = template.render(context) | 73 rendered = template.render(context) |
| 74 io.open(output_file, 'w', encoding='utf-8').write(rendered) | 74 io.open(output_file, 'w', encoding='utf-8').write(rendered) |
| 75 | 75 |
| 76 | 76 |
| 77 | 77 |
| 78 def buildWebApp(buildtype, version, destination, zip_path, | 78 def buildWebApp(buildtype, version, mimetype, destination, zip_path, |
| 79 manifest_template, webapp_type, files, locales): | 79 manifest_template, webapp_type, plugin, files, locales): |
| 80 """Does the main work of building the webapp directory and zipfile. | 80 """Does the main work of building the webapp directory and zipfile. |
| 81 | 81 |
| 82 Args: | 82 Args: |
| 83 buildtype: the type of build ("Official" or "Dev"). | 83 buildtype: the type of build ("Official" or "Dev"). |
| 84 mimetype: A string with mimetype of plugin. |
| 84 destination: A string with path to directory where the webapp will be | 85 destination: A string with path to directory where the webapp will be |
| 85 written. | 86 written. |
| 86 zipfile: A string with path to the zipfile to create containing the | 87 zipfile: A string with path to the zipfile to create containing the |
| 87 contents of |destination|. | 88 contents of |destination|. |
| 88 manifest_template: jinja2 template file for manifest. | 89 manifest_template: jinja2 template file for manifest. |
| 89 webapp_type: webapp type ("v1", "v2" or "v2_pnacl"). | 90 webapp_type: webapp type ("v1", "v2" or "v2_pnacl"). |
| 91 plugin: A string with path to the binary plugin for this webapp. |
| 90 files: An array of strings listing the paths for resources to include | 92 files: An array of strings listing the paths for resources to include |
| 91 in this webapp. | 93 in this webapp. |
| 92 locales: An array of strings listing locales, which are copied, along | 94 locales: An array of strings listing locales, which are copied, along |
| 93 with their directory structure from the _locales directory down. | 95 with their directory structure from the _locales directory down. |
| 94 """ | 96 """ |
| 95 # Ensure a fresh directory. | 97 # Ensure a fresh directory. |
| 96 try: | 98 try: |
| 97 shutil.rmtree(destination) | 99 shutil.rmtree(destination) |
| 98 except OSError: | 100 except OSError: |
| 99 if os.path.exists(destination): | 101 if os.path.exists(destination): |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 os.path.split(current_locale)[1]) | 144 os.path.split(current_locale)[1]) |
| 143 os.mkdir(destination_dir, 0775) | 145 os.mkdir(destination_dir, 0775) |
| 144 shutil.copy2(current_locale, destination_file) | 146 shutil.copy2(current_locale, destination_file) |
| 145 elif extension == '.pak': | 147 elif extension == '.pak': |
| 146 destination_file = os.path.join(remoting_locales, | 148 destination_file = os.path.join(remoting_locales, |
| 147 os.path.split(current_locale)[1]) | 149 os.path.split(current_locale)[1]) |
| 148 shutil.copy2(current_locale, destination_file) | 150 shutil.copy2(current_locale, destination_file) |
| 149 else: | 151 else: |
| 150 raise Exception("Unknown extension: " + current_locale); | 152 raise Exception("Unknown extension: " + current_locale); |
| 151 | 153 |
| 154 # Create fake plugin files to appease the manifest checker. |
| 155 # It requires that if there is a plugin listed in the manifest that |
| 156 # there be a file in the plugin with that name. |
| 157 names = [ |
| 158 'remoting_host_plugin.dll', # Windows |
| 159 'remoting_host_plugin.plugin', # Mac |
| 160 'libremoting_host_plugin.ia32.so', # Linux 32 |
| 161 'libremoting_host_plugin.x64.so' # Linux 64 |
| 162 ] |
| 163 pluginName = os.path.basename(plugin) |
| 164 |
| 165 for name in names: |
| 166 if name != pluginName: |
| 167 path = os.path.join(destination, name) |
| 168 f = open(path, 'w') |
| 169 f.write("placeholder for %s" % (name)) |
| 170 f.close() |
| 171 |
| 172 # Copy the plugin. On some platforms (e.g. ChromeOS) plugin compilation may be |
| 173 # disabled, in which case we don't need to copy anything. |
| 174 if plugin: |
| 175 newPluginPath = os.path.join(destination, pluginName) |
| 176 if os.path.isdir(plugin): |
| 177 # On Mac we have a directory. |
| 178 shutil.copytree(plugin, newPluginPath) |
| 179 else: |
| 180 shutil.copy2(plugin, newPluginPath) |
| 181 |
| 182 # Strip the linux build. |
| 183 if ((platform.system() == 'Linux') and (buildtype == 'Official')): |
| 184 subprocess.call(["strip", newPluginPath]) |
| 185 |
| 186 # Set the correct mimetype. |
| 187 hostPluginMimeType = os.environ.get( |
| 188 'HOST_PLUGIN_MIMETYPE', 'application/vnd.chromium.remoting-host') |
| 189 findAndReplace(os.path.join(destination, 'plugin_settings.js'), |
| 190 'HOST_PLUGIN_MIMETYPE', hostPluginMimeType) |
| 191 |
| 152 # Set client plugin type. | 192 # Set client plugin type. |
| 153 client_plugin = 'pnacl' if webapp_type == 'v2_pnacl' else 'native' | 193 client_plugin = 'pnacl' if webapp_type == 'v2_pnacl' else 'native' |
| 154 findAndReplace(os.path.join(destination, 'plugin_settings.js'), | 194 findAndReplace(os.path.join(destination, 'plugin_settings.js'), |
| 155 "'CLIENT_PLUGIN_TYPE'", "'" + client_plugin + "'") | 195 "'CLIENT_PLUGIN_TYPE'", "'" + client_plugin + "'") |
| 156 | 196 |
| 157 # Allow host names for google services/apis to be overriden via env vars. | 197 # Allow host names for google services/apis to be overriden via env vars. |
| 158 oauth2AccountsHost = os.environ.get( | 198 oauth2AccountsHost = os.environ.get( |
| 159 'OAUTH2_ACCOUNTS_HOST', 'https://accounts.google.com') | 199 'OAUTH2_ACCOUNTS_HOST', 'https://accounts.google.com') |
| 160 oauth2ApiHost = os.environ.get( | 200 oauth2ApiHost = os.environ.get( |
| 161 'OAUTH2_API_HOST', 'https://www.googleapis.com') | 201 'OAUTH2_API_HOST', 'https://www.googleapis.com') |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 | 297 |
| 258 # Make the zipfile. | 298 # Make the zipfile. |
| 259 createZip(zip_path, destination) | 299 createZip(zip_path, destination) |
| 260 | 300 |
| 261 return 0 | 301 return 0 |
| 262 | 302 |
| 263 | 303 |
| 264 def main(): | 304 def main(): |
| 265 if len(sys.argv) < 6: | 305 if len(sys.argv) < 6: |
| 266 print ('Usage: build-webapp.py ' | 306 print ('Usage: build-webapp.py ' |
| 267 '<build-type> <version> <dst> <zip-path> <manifest_template> ' | 307 '<build-type> <version> <mime-type> <dst> <zip-path> ' |
| 268 '<webapp_type> <other files...> ' | 308 '<manifest_template> <webapp_type> <other files...> ' |
| 269 '[--locales <locales...>]') | 309 '[--plugin <plugin>] [--locales <locales...>]') |
| 270 return 1 | 310 return 1 |
| 271 | 311 |
| 272 arg_type = '' | 312 arg_type = '' |
| 273 files = [] | 313 files = [] |
| 274 locales = [] | 314 locales = [] |
| 315 plugin = "" |
| 275 for arg in sys.argv[8:]: | 316 for arg in sys.argv[8:]: |
| 276 if arg in ['--locales']: | 317 if arg in ['--locales', '--plugin']: |
| 277 arg_type = arg | 318 arg_type = arg |
| 278 elif arg_type == '--locales': | 319 elif arg_type == '--locales': |
| 279 locales.append(arg) | 320 locales.append(arg) |
| 321 elif arg_type == '--plugin': |
| 322 plugin = arg |
| 323 arg_type = '' |
| 280 else: | 324 else: |
| 281 files.append(arg) | 325 files.append(arg) |
| 282 | 326 |
| 283 return buildWebApp(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], | 327 return buildWebApp(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], |
| 284 sys.argv[5], sys.argv[6], files, locales) | 328 sys.argv[5], sys.argv[6], sys.argv[7], plugin, |
| 329 files, locales) |
| 285 | 330 |
| 286 | 331 |
| 287 if __name__ == '__main__': | 332 if __name__ == '__main__': |
| 288 sys.exit(main()) | 333 sys.exit(main()) |
| OLD | NEW |