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

Side by Side Diff: chrome/tools/build/win/create_installer_archive.py

Issue 10407053: Copy VC CRT DLLs for component build even when VS is not installed. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Get rid of string format operator 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 """Script to create Chrome Installer archive. 6 """Script to create Chrome Installer archive.
7 7
8 This script is used to create an archive of all the files required for a 8 This script is used to create an archive of all the files required for a
9 Chrome install in appropriate directory structure. It reads chrome.release 9 Chrome install in appropriate directory structure. It reads chrome.release
10 file as input, creates chrome.7z archive, compresses setup.exe and 10 file as input, creates chrome.7z archive, compresses setup.exe and
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 raise ValueError('could not find {0} in the manifest:\n{1}'.format( 328 raise ValueError('could not find {0} in the manifest:\n{1}'.format(
329 insert_before, ''.join(manifest_lines))) 329 insert_before, ''.join(manifest_lines)))
330 manifest_lines.insert(insert_index, inserted_string) 330 manifest_lines.insert(insert_index, inserted_string)
331 331
332 modified_manifest_file = open( 332 modified_manifest_file = open(
333 os.path.join(output_dir, manifest_name), 'w') 333 os.path.join(output_dir, manifest_name), 'w')
334 modified_manifest_file.write(''.join(manifest_lines)) 334 modified_manifest_file.write(''.join(manifest_lines))
335 modified_manifest_file.close() 335 modified_manifest_file.close()
336 336
337 337
338 # Copy the relevant CRT DLLs to |build_dir|. We copy DLLs from all versions
339 # of VS installed to make sure we have the correct CRT version, unused DLLs
340 # should not conflict with the others anyways.
341 def CopyVisualStudioRuntimeDLLs(build_dir):
342 is_debug = build_dir.endswith('Debug/')
robertshield 2012/05/22 02:39:59 is the trailing slash guaranteed to be present? If
gab 2012/05/22 15:44:46 Yes, see [1] below.
343 if not is_debug and not build_dir.endswith('Release/'):
344 print ("Warning: could not determine build configuration from "
345 "output directory, assuming Release build.")
346
347 crt_dlls = []
348 if is_debug:
349 crt_dlls = glob.glob(
350 "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/"
351 "Debug_NonRedist/x86/Microsoft.*.DebugCRT/*.dll")
352 else:
353 crt_dlls = glob.glob(
354 "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/x86/"
355 "Microsoft.*.CRT/*.dll")
356
357 # Also handle the case where someone is building using only winsdk and
358 # doesn't have Visual Studio installed.
359 if not crt_dlls:
360 # On a 64-bit system, 32-bit dlls are in SysWOW64 (don't ask).
robertshield 2012/05/22 02:39:59 indeed :-)
gab 2012/05/22 15:44:46 Aaaah! Thanks for clarifying :)!
361 if os.access("C:/Windows/SysWOW64", os.F_OK):
362 sys_dll_dir = "C:/Windows/SysWOW64"
363 else:
364 sys_dll_dir = "C:/Windows/System32"
365
366 if is_debug:
367 crt_dlls = glob.glob(sys_dll_dir + "/msvc*0d.dll")
368 else:
369 crt_dlls = glob.glob(sys_dll_dir + "/msvc*0.dll")
370
371 if not crt_dlls:
372 print ("Warning: could not find CRT DLLs to copy to build dir - target "
373 "may not run on a system that doesn't have those DLLs.")
374
375 for dll in crt_dlls:
376 shutil.copy(dll, build_dir)
377
378
338 # Copies component build DLLs and generates required config files and manifests 379 # Copies component build DLLs and generates required config files and manifests
339 # in order for chrome.exe and setup.exe to be able to find those DLLs at 380 # in order for chrome.exe and setup.exe to be able to find those DLLs at
340 # run-time. 381 # run-time.
341 # This is meant for developer builds only and should never be used to package 382 # This is meant for developer builds only and should never be used to package
342 # an official build. 383 # an official build.
343 def DoComponentBuildTasks(staging_dir, build_dir, current_version): 384 def DoComponentBuildTasks(staging_dir, build_dir, current_version):
344 # Get the required directories for the upcoming operations. 385 # Get the required directories for the upcoming operations.
345 chrome_dir = os.path.join(staging_dir, CHROME_DIR) 386 chrome_dir = os.path.join(staging_dir, CHROME_DIR)
346 version_dir = os.path.join(chrome_dir, current_version) 387 version_dir = os.path.join(chrome_dir, current_version)
347 installer_dir = os.path.join(version_dir, 'Installer') 388 installer_dir = os.path.join(version_dir, 'Installer')
348 # |installer_dir| is technically only created post-install, but we need it 389 # |installer_dir| is technically only created post-install, but we need it
349 # now to add setup.exe's config and manifest to the archive. 390 # now to add setup.exe's config and manifest to the archive.
350 if not os.path.exists(installer_dir): 391 if not os.path.exists(installer_dir):
351 os.mkdir(installer_dir) 392 os.mkdir(installer_dir)
352 393
353 # Copy the relevant CRT DLLs to |build_dir|. We copy DLLs from all versions 394 CopyVisualStudioRuntimeDLLs(build_dir)
gab 2012/05/22 15:44:46 optional: Add a comment as to why this needs to be
354 # of VS installed to make sure we have the correct CRT version, unused DLLs
355 # should not conflict with the others anyways.
356 crt_dlls = []
357 if build_dir.endswith('Debug/'):
358 crt_dlls = glob.glob(
359 "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/"
360 "Debug_NonRedist/x86/Microsoft.*.DebugCRT/*.dll")
361 elif build_dir.endswith('Release/'):
362 crt_dlls = glob.glob(
363 "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/x86/"
364 "Microsoft.*.CRT/*.dll")
365 else:
366 print ("Warning: CRT DLLs not copied, could not determine build "
367 "configuration from output directory.")
368
369 for dll in crt_dlls:
370 shutil.copy(dll, build_dir)
371 395
372 # Copy all the DLLs in |build_dir| to the version directory. Simultaneously 396 # Copy all the DLLs in |build_dir| to the version directory. Simultaneously
373 # build a list of their names to mark them as dependencies of chrome.exe and 397 # build a list of their names to mark them as dependencies of chrome.exe and
374 # setup.exe later. 398 # setup.exe later.
375 dlls = glob.glob(os.path.join(build_dir, '*.dll')) 399 dlls = glob.glob(os.path.join(build_dir, '*.dll'))
376 dll_names = [] 400 dll_names = []
377 for dll in dlls: 401 for dll in dlls:
378 shutil.copy(dll, version_dir) 402 shutil.copy(dll, version_dir)
379 dll_names.append(os.path.splitext(os.path.basename(dll))[0]) 403 dll_names.append(os.path.splitext(os.path.basename(dll))[0])
380 404
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 parser.add_option('--enable_metro', default='0', 554 parser.add_option('--enable_metro', default='0',
531 help='Whether to include resource files from the "METRO" section of the ' 555 help='Whether to include resource files from the "METRO" section of the '
532 'input file.') 556 'input file.')
533 parser.add_option('--component_build', default='0', 557 parser.add_option('--component_build', default='0',
534 help='Whether this archive is packaging a component build.') 558 help='Whether this archive is packaging a component build.')
535 559
536 options, args = parser.parse_args() 560 options, args = parser.parse_args()
537 if not options.build_dir: 561 if not options.build_dir:
538 parser.error('You must provide a build dir.') 562 parser.error('You must provide a build dir.')
539 elif not options.build_dir.endswith('/'): 563 elif not options.build_dir.endswith('/'):
540 options.build_dir += '/' 564 options.build_dir += '/'
gab 2012/05/22 15:44:46 [1]
541 565
542 if not options.staging_dir: 566 if not options.staging_dir:
543 parser.error('You must provide a staging dir.') 567 parser.error('You must provide a staging dir.')
544 568
545 if not options.input_file: 569 if not options.input_file:
546 parser.error('You must provide an input file') 570 parser.error('You must provide an input file')
547 571
548 if not options.output_dir: 572 if not options.output_dir:
549 options.output_dir = options.build_dir 573 options.output_dir = options.build_dir
550 574
551 if not options.resource_file_path: 575 if not options.resource_file_path:
552 options.resource_file_path = os.path.join(options.build_dir, 576 options.resource_file_path = os.path.join(options.build_dir,
553 MINI_INSTALLER_INPUT_FILE) 577 MINI_INSTALLER_INPUT_FILE)
554 578
555 return options 579 return options
556 580
557 581
558 if '__main__' == __name__: 582 if '__main__' == __name__:
559 print sys.argv 583 print sys.argv
560 sys.exit(main(_ParseOptions())) 584 sys.exit(main(_ParseOptions()))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698