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

Unified Diff: pylib/gyp/mac_tool.py

Issue 1160773005: Support for Swift language and Clang modules for ninja generator. Base URL: https://chromium.googlesource.com/external/gyp@master
Patch Set: Created 5 years, 6 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: pylib/gyp/mac_tool.py
diff --git a/pylib/gyp/mac_tool.py b/pylib/gyp/mac_tool.py
index eeeaceb0c7aa2388635855260b3d63edc58cd73a..f68c3d9c281e91eb48a04c7955455f2ea70f47aa 100755
--- a/pylib/gyp/mac_tool.py
+++ b/pylib/gyp/mac_tool.py
@@ -153,7 +153,7 @@ class MacTool(object):
# Go through all the environment variables and replace them as variables in
# the file.
- IDENT_RE = re.compile(r'[/\s]')
+ IDENT_RE = re.compile(r'[/\s_-]')
for key in os.environ:
if key.startswith('_'):
continue
@@ -341,6 +341,56 @@ class MacTool(object):
command_line.extend(map(os.path.abspath, inputs))
subprocess.check_call(command_line)
+ def ExecCopySwiftLibs(self, swift_libs_dir, app_framework_dir, *inputs):
+ libs = set()
+ inputs = set(inputs)
+ while inputs:
+ input_file = inputs.pop()
+ symbols = subprocess.check_output(['nm', input_file])
+ for m in re.finditer(r'__swift_FORCE_LOAD_\$_(\w+)$', symbols,
+ re.MULTILINE):
+ lib_name = 'lib' + m.group(1) + '.dylib'
+ if not lib_name in libs:
+ lib_path = os.path.join(swift_libs_dir, lib_name)
+ inputs.add(lib_path)
+ libs.add(lib_name)
+ if not os.path.exists(app_framework_dir):
+ os.makedirs(app_framework_dir)
+
+ if libs:
+ # This lib is not linked from anywhere directly,
+ # but is needed for the app to run with Swift
+ libs.add('libswiftCore.dylib')
+
+ for lib in libs:
+ src = os.path.join(swift_libs_dir, lib)
+ dst = os.path.join(app_framework_dir, lib)
+ shutil.copyfile(src, dst)
+
+ def ExecBuildModuleMapFile(self, module_name, umbrella_header, map_file,
+ stamp):
+ if not os.path.exists(os.path.dirname(map_file)):
+ os.makedirs(os.path.dirname(map_file))
+ with open(map_file, 'w') as f:
+ f.write(
+ 'framework module %s {\n'
+ ' umbrella header \"%s\"\n'
+ ' export *\n'
+ ' module * { export * }\n'
+ '}\n' % (module_name, umbrella_header))
+ subprocess.check_call(['touch', stamp])
+
+ def ExecAppendSwiftToModuleMapFile(self, module_name, swift_header, map_file,
+ stamp):
+ if not os.path.exists(os.path.dirname(map_file)):
+ os.makedirs(os.path.dirname(map_file))
+ with open(map_file, 'a') as f:
+ f.write(
+ 'module %s.Swift {\n'
+ ' header \"%s\"\n'
+ '}\n' % (module_name, swift_header))
+ subprocess.check_call(['touch', stamp])
+
def ExecMergeInfoPlist(self, output, *inputs):
"""Merge multiple .plist files into a single .plist file."""
merged_plist = {}

Powered by Google App Engine
This is Rietveld 408576698