| 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 909ae96794a5b13fea63ae806a1ff396765ee72d..11fdf2ad95d2b3d691ec583a3d70f5e955ce3e4d 100755
|
| --- a/chrome/tools/build/win/create_installer_archive.py
|
| +++ b/chrome/tools/build/win/create_installer_archive.py
|
| @@ -352,35 +352,47 @@ def CopyAndAugmentManifest(build_dir, output_dir, manifest_name,
|
| # 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':
|
| +def CopyVisualStudioRuntimeDLLs(build_dir, target_arch):
|
| + is_debug = os.path.basename(build_dir).startswith('Debug')
|
| + if not is_debug and not os.path.basename(build_dir).startswith('Release'):
|
| print ("Warning: could not determine build configuration from "
|
| "output directory, assuming Release build.")
|
|
|
| crt_dlls = []
|
| + sys_dll_dir = None
|
| if is_debug:
|
| crt_dlls = glob.glob(
|
| "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/"
|
| - "Debug_NonRedist/x86/Microsoft.*.DebugCRT/*.dll")
|
| + "Debug_NonRedist/" + target_arch + "/Microsoft.*.DebugCRT/*.dll")
|
| else:
|
| crt_dlls = glob.glob(
|
| - "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/x86/"
|
| - "Microsoft.*.CRT/*.dll")
|
| + "C:/Program Files (x86)/Microsoft Visual Studio */VC/redist/" +
|
| + target_arch + "/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"
|
| + if target_arch == 'x64':
|
| + # check we are are on a 64bit system by existence of WOW64 dir
|
| + if os.access("C:/Windows/SysWOW64", os.F_OK):
|
| + sys_dll_dir = "C:/Windows/System32"
|
| + else:
|
| + # only support packaging of 64bit installer on 64bit system
|
| + # but this just as bad as not finding DLLs at all so we
|
| + # don't abort here to mirror behavior below
|
| + print ("Warning: could not find x64 CRT DLLs on x86 system.")
|
| 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"))
|
| + # 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 sys_dll_dir is not None:
|
| + 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 "
|
| @@ -395,7 +407,7 @@ def CopyVisualStudioRuntimeDLLs(build_dir):
|
| # run-time.
|
| # This is meant for developer builds only and should never be used to package
|
| # an official build.
|
| -def DoComponentBuildTasks(staging_dir, build_dir, current_version):
|
| +def DoComponentBuildTasks(staging_dir, build_dir, target_arch, current_version):
|
| # Get the required directories for the upcoming operations.
|
| chrome_dir = os.path.join(staging_dir, CHROME_DIR)
|
| version_dir = os.path.join(chrome_dir, current_version)
|
| @@ -408,7 +420,7 @@ def DoComponentBuildTasks(staging_dir, build_dir, current_version):
|
| # 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)
|
| + CopyVisualStudioRuntimeDLLs(build_dir, target_arch)
|
|
|
| # 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
|
| @@ -514,7 +526,8 @@ def main(options):
|
| options.enable_hidpi, options.enable_touch_ui)
|
|
|
| if options.component_build == '1':
|
| - DoComponentBuildTasks(staging_dir, options.build_dir, current_version)
|
| + DoComponentBuildTasks(staging_dir, options.build_dir,
|
| + options.target_arch, current_version)
|
|
|
| version_numbers = current_version.split('.')
|
| current_build_number = version_numbers[2] + '.' + version_numbers[3]
|
| @@ -575,6 +588,10 @@ def _ParseOptions():
|
| help='Whether this archive is packaging a component build. This will '
|
| 'also turn off compression of chrome.7z into chrome.packed.7z and '
|
| 'helpfully delete any old chrome.packed.7z in |output_dir|.')
|
| + parser.add_option('--target_arch', default='x86',
|
| + help='Specify the target architecture for installer - this is used '
|
| + 'to determine which CRT runtime files to pull and package '
|
| + 'with the installer archive {x86|x64}.')
|
|
|
| options, _ = parser.parse_args()
|
| if not options.build_dir:
|
|
|