Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Unified Diff: chrome/tools/build/win/create_installer_archive.py

Issue 9701050: Make setup.exe compatible with the component build. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: wooooohoooo^2 :)^2 Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/tools/build/win/create_installer_archive.py
diff --git a/chrome/tools/build/win/create_installer_archive.py b/chrome/tools/build/win/create_installer_archive.py
index 78bc63b9e04a03fbc810391b2527ccf2dbf3a8fa..170c5beacc7fdb579af95df61a5b546309f33392 100755
--- a/chrome/tools/build/win/create_installer_archive.py
+++ b/chrome/tools/build/win/create_installer_archive.py
@@ -312,6 +312,77 @@ def CreateResourceInputFile(
f.write(resource_file)
+def DoComponentBuildTasks(staging_dir, build_dir, current_version):
+ # Copy all the DLLs in |build_dir| to the version directory.
+ chrome_dir = os.path.join(staging_dir, CHROME_DIR)
+ version_dir = os.path.join(chrome_dir, current_version)
+ dlls = glob.glob(os.path.join(build_dir, '*.dll'))
+ for dll in dlls:
+ shutil.copy(dll, version_dir)
+
+ # Write chrome.exe.config to point to the version directory.
+ chrome_exe_config = (
+ "<configuration>\n"
+ " <windows>\n"
+ " <assemblyBinding xmlns='urn:schemas-microsoft-com:asm.v1'>\n"
+ " <probing privatePath='{version}' />\n"
+ " </assemblyBinding>\n"
+ " </windows>\n"
+ "</configuration>".format(version = current_version))
+
+ chrome_exe_config_file = open(
+ os.path.join(chrome_dir, 'chrome.exe.config'), 'w')
+ chrome_exe_config_file.write(chrome_exe_config)
+ chrome_exe_config_file.close()
+
+ # Build a list containing the name of each DLL found in |build_dir|
+ dll_names = []
+ for dll in dlls:
+ dll_names.append(os.path.splitext(os.path.basename(dll))[0])
+
+ # Write chrome.exe.manifest in which we list all the DLLs as side by side
+ # assembly dependencies.
+ chrome_exe_manifest_parts = [
+ "<assembly\n"
+ " xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>\n"
+ " <assemblyIdentity \n"
grt (UTC plus 2) 2012/05/09 15:49:40 nit: remove the space before the newline
gab 2012/05/09 21:13:24 Done.
+ " name='chrome.chromeexe' version='0.0.0.0' type='win32' />\n"]
grt (UTC plus 2) 2012/05/09 15:49:40 i hate with the heat of a thousand suns this trend
gab 2012/05/09 21:13:24 Me make Greg happy :)
+
+ for name in dll_names:
+ chrome_exe_manifest_parts.append(
+ " <dependency>\n"
+ " <dependentAssembly>\n"
+ " <assemblyIdentity type='win32' name='chrome.{dll_basename}'\n"
+ " version='0.0.0.0' processorArchitecture='x86'\n"
+ " language='*' />\n"
grt (UTC plus 2) 2012/05/09 15:49:40 (cue the sound of greg running through the halls s
gab 2012/05/09 21:13:24 Can I get a recording of this to soothe my soul if
+ " </dependentAssembly>\n"
+ " </dependency>\n".format(dll_basename = name))
+
+ chrome_exe_manifest_parts.append("</assembly>")
+
+ chrome_exe_manifest_file = open(
+ os.path.join(chrome_dir, 'chrome.exe.manifest'), 'w')
+ chrome_exe_manifest_file.write(''.join(chrome_exe_manifest_parts))
+ chrome_exe_manifest_file.close()
+
+ # Write chrome.{dllname}.manifest in the version directory for each DLL list
+ # as a dependency in the previous step.
+ for name in dll_names:
+ dll_manifest = (
+ "<assembly\n"
+ " xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>\n"
+ " <assemblyIdentity name='chrome.{dll_basename}' version='0.0.0.0'\n"
+ " type='win32' processorArchitecture='x86' />\n"
grt (UTC plus 2) 2012/05/09 15:49:40 (oh, god, no)
gab 2012/05/09 21:13:24 Asked like that, I cannot refuse and shall fulfill
+ " <file name='{dll_basename}.dll' />\n"
+ "</assembly>".format(dll_basename = name))
+
+ dll_manifest_file = open(os.path.join(
+ version_dir,
+ "chrome.{dll_basename}.manifest".format(dll_basename = name)), 'w')
+ dll_manifest_file.write(dll_manifest)
+ dll_manifest_file.close()
+
+
def main(options):
"""Main method that reads input file, creates archive file and write
resource input file.
@@ -338,6 +409,9 @@ def main(options):
staging_dir, options.build_dir,
options.enable_hidpi, options.enable_metro)
+ if options.component_build == '1':
+ DoComponentBuildTasks(staging_dir, options.build_dir, current_version)
+
version_numbers = current_version.split('.')
current_build_number = version_numbers[2] + '.' + version_numbers[3]
prev_build_number = ''
@@ -393,6 +467,8 @@ def _ParseOptions():
parser.add_option('--enable_metro', default='0',
help='Whether to include resource files from the "METRO" section of the '
'input file.')
+ parser.add_option('--component_build', default='0',
+ help='Whether this archive is packaging a component build.')
options, args = parser.parse_args()
if not options.build_dir:
@@ -401,12 +477,15 @@ def _ParseOptions():
if not options.staging_dir:
parser.error('You must provide a staging dir.')
+ if not options.input_file:
gab 2012/05/09 21:13:24 FYI. This is required and it is a mistake that it
+ parser.error('You must provide an input file')
+
if not options.output_dir:
options.output_dir = options.build_dir
if not options.resource_file_path:
- options.options.resource_file_path = os.path.join(options.build_dir,
- MINI_INSTALLER_INPUT_FILE)
+ options.resource_file_path = os.path.join(options.build_dir,
gab 2012/05/09 21:13:24 FYI. This was a typo and would crash if this path
+ MINI_INSTALLER_INPUT_FILE)
return options
« chrome/installer/setup/install_worker.cc ('K') | « chrome/installer/setup/install_worker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698