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

Unified Diff: build/gyp_chromium

Issue 149113004: Copy VS runtime DLLs to output directory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/gyp_chromium
diff --git a/build/gyp_chromium b/build/gyp_chromium
index 80681dcb1a2283efbee253903ad55d1d5520f39e..30f1711c3764d6857a37001b7a3005d2998da772 100755
--- a/build/gyp_chromium
+++ b/build/gyp_chromium
@@ -12,6 +12,7 @@ import gyp_helper
import os
import pipes
import shlex
+import shutil
import subprocess
import string
import sys
@@ -326,6 +327,39 @@ def RunGN(supplemental_includes):
return subprocess.call(args) == 0
+def CopyVsRuntimeDlls(output_dir, runtime_dirs):
+ """Copies the VS runtime DLLs from the given |runtime_dirs| to the output
+ directory so that even if not system-installed, built binaries are likely to
+ be able to run.
+
+ This needs to be run after gyp has been run so that the expected target
+ output directories are already created.
+ """
+ assert sys.platform.startswith(('win32', 'cygwin'))
+
+ def copy_runtime(target_dir, source_dir, dll_pattern):
+ """Copy both the msvcr and msvcp runtime DLLs, only if the target doesn't
+ exist, but the target directory does exist."""
+ for which in ('p', 'r'):
+ dll = dll_pattern % which
+ target = os.path.join(target_dir, dll)
+ source = os.path.join(source_dir, dll)
+ # If gyp generated to that output dir, and the runtime isn't already
+ # there, then copy it over.
+ if os.path.isdir(target_dir) and not os.path.isfile(target):
+ shutil.copyfile(source, target)
+
+ x86, x64 = runtime_dirs
+ out_debug = os.path.join(output_dir, 'Debug')
+ out_release = os.path.join(output_dir, 'Release')
+ out_debug_x64 = os.path.join(output_dir, 'Debug_x64')
+ out_release_x64 = os.path.join(output_dir, 'Release_x64')
+ copy_runtime(out_debug, x86, 'msvc%s120d.dll')
+ copy_runtime(out_release, x86, 'msvc%s120.dll')
+ copy_runtime(out_debug_x64, x64, 'msvc%s120d.dll')
+ copy_runtime(out_release_x64, x64, 'msvc%s120.dll')
+
+
if __name__ == '__main__':
args = sys.argv[1:]
@@ -402,6 +436,7 @@ if __name__ == '__main__':
# If using ninja on windows, and the automatic toolchain has been installed
# by depot_tools, then use it.
+ vs2013_runtime_dll_dirs = None
if (sys.platform in ('win32', 'cygwin') and
os.environ.get('GYP_GENERATORS') == 'ninja'):
depot_tools_path = find_depot_tools.add_depot_tools_to_path()
@@ -412,6 +447,8 @@ if __name__ == '__main__':
os.environ['GYP_MSVS_OVERRIDE_PATH'] = toolchain
with open(version_file, 'r') as f:
version_is_pro = f.read().strip() == 'pro'
+ vs2013_runtime_dll_dirs = (os.path.join(toolchain, 'sys32'),
+ os.path.join(toolchain, 'sys64'))
os.environ['GYP_MSVS_VERSION'] = '2013' if version_is_pro else '2013e'
# We need to make sure windows_sdk_path is set to the automated
# toolchain values in GYP_DEFINES, but don't want to override any other
@@ -449,4 +486,9 @@ if __name__ == '__main__':
sys.stdout.flush()
# Off we go...
- sys.exit(gyp.main(args))
+ gyp_rc = gyp.main(args)
+
+ if vs2013_runtime_dll_dirs:
+ CopyVsRuntimeDlls(GetOutputDirectory(), vs2013_runtime_dll_dirs)
+
+ sys.exit(gyp_rc)
« 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