| 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 eab9a20ec74dd2231ceecf8caa74cbc1d42fc211..310ad190518c3f81862a2891b292a2abd9f7cff3 100755
|
| --- a/chrome/tools/build/win/create_installer_archive.py
|
| +++ b/chrome/tools/build/win/create_installer_archive.py
|
| @@ -335,6 +335,47 @@ def CopyAndAugmentManifest(build_dir, output_dir, manifest_name,
|
| modified_manifest_file.close()
|
|
|
|
|
| +# Copy the relevant CRT DLLs to |build_dir|. We copy DLLs from all versions
|
| +# of VS installed to make sure we have the correct CRT version, unused DLLs
|
| +# should not conflict with the others anyways.
|
| +def CopyVisualStudioRuntimeDLLs(build_dir):
|
| + is_debug = os.path.basename(build_dir) == 'Debug'
|
| + if not is_debug and os.path.basename(build_dir) != 'Release':
|
| + print ("Warning: could not determine build configuration from "
|
| + "output directory, assuming Release build.")
|
| +
|
| + crt_dlls = []
|
| + if is_debug:
|
| + crt_dlls = glob.glob(
|
| + "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/"
|
| + "Debug_NonRedist/x86/Microsoft.*.DebugCRT/*.dll")
|
| + else:
|
| + crt_dlls = glob.glob(
|
| + "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/x86/"
|
| + "Microsoft.*.CRT/*.dll")
|
| +
|
| + # Also handle the case where someone is building using only winsdk and
|
| + # doesn't have Visual Studio installed.
|
| + if not crt_dlls:
|
| + # On a 64-bit system, 32-bit dlls are in SysWOW64 (don't ask).
|
| + if os.access("C:/Windows/SysWOW64", os.F_OK):
|
| + sys_dll_dir = "C:/Windows/SysWOW64"
|
| + else:
|
| + sys_dll_dir = "C:/Windows/System32"
|
| +
|
| + if is_debug:
|
| + crt_dlls = glob.glob(os.path.join(sys_dll_dir, "msvc*0d.dll"))
|
| + else:
|
| + crt_dlls = glob.glob(os.path.join(sys_dll_dir, "msvc*0.dll"))
|
| +
|
| + if not crt_dlls:
|
| + print ("Warning: could not find CRT DLLs to copy to build dir - target "
|
| + "may not run on a system that doesn't have those DLLs.")
|
| +
|
| + for dll in crt_dlls:
|
| + shutil.copy(dll, build_dir)
|
| +
|
| +
|
| # Copies component build DLLs and generates required config files and manifests
|
| # in order for chrome.exe and setup.exe to be able to find those DLLs at
|
| # run-time.
|
| @@ -350,24 +391,10 @@ def DoComponentBuildTasks(staging_dir, build_dir, current_version):
|
| if not os.path.exists(installer_dir):
|
| os.mkdir(installer_dir)
|
|
|
| - # Copy the relevant CRT DLLs to |build_dir|. We copy DLLs from all versions
|
| - # of VS installed to make sure we have the correct CRT version, unused DLLs
|
| - # should not conflict with the others anyways.
|
| - crt_dlls = []
|
| - if build_dir.endswith('Debug/'):
|
| - crt_dlls = glob.glob(
|
| - "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/"
|
| - "Debug_NonRedist/x86/Microsoft.*.DebugCRT/*.dll")
|
| - elif build_dir.endswith('Release/'):
|
| - crt_dlls = glob.glob(
|
| - "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/x86/"
|
| - "Microsoft.*.CRT/*.dll")
|
| - else:
|
| - print ("Warning: CRT DLLs not copied, could not determine build "
|
| - "configuration from output directory.")
|
| -
|
| - for dll in crt_dlls:
|
| - shutil.copy(dll, build_dir)
|
| + # Copy the VS CRT DLLs to |build_dir|. This must be done before the general
|
| + # copy step below to ensure the CRT DLLs are added to the archive and marked
|
| + # as a dependency in the exe manifests generated below.
|
| + CopyVisualStudioRuntimeDLLs(build_dir)
|
|
|
| # Copy all the DLLs in |build_dir| to the version directory. Simultaneously
|
| # build a list of their names to mark them as dependencies of chrome.exe and
|
| @@ -536,8 +563,8 @@ def _ParseOptions():
|
| options, args = parser.parse_args()
|
| if not options.build_dir:
|
| parser.error('You must provide a build dir.')
|
| - elif not options.build_dir.endswith('/'):
|
| - options.build_dir += '/'
|
| +
|
| + options.build_dir = os.path.normpath(options.build_dir)
|
|
|
| if not options.staging_dir:
|
| parser.error('You must provide a staging dir.')
|
|
|