| Index: talk/build/merge_ios_libs
|
| diff --git a/talk/build/merge_ios_libs b/talk/build/merge_ios_libs
|
| index 98fd306be1975c5f11e45f80bdf319f7b354d515..ba1b21cdcac2880418899ba1c6c1b538b627ee96 100755
|
| --- a/talk/build/merge_ios_libs
|
| +++ b/talk/build/merge_ios_libs
|
| @@ -61,25 +61,35 @@ def MergeLibs(lib_base_dir):
|
| entry = libs.get(filename, [])
|
| entry.append(os.path.join(dirpath, filename))
|
| libs[filename] = entry
|
| - # Some sublibaries are only present in certain architectures. We merge
|
| - # them into their parent library so that the library list is consistent
|
| - # across architectures.
|
| - libs_copy = dict(libs)
|
| +
|
| + orphaned_libs = {}
|
| + valid_libs = {}
|
| for library, paths in libs.items():
|
| if len(paths) < len(archs):
|
| - # Hacky: we find parent libraries by stripping off each name component.
|
| - components = library.strip('.a').split('_')[:-1]
|
| - found = False
|
| - while components:
|
| - parent_library = '_'.join(components) + '.a'
|
| - if (parent_library in libs_copy
|
| - and len(libs_copy[parent_library]) >= len(archs)):
|
| - libs[parent_library].extend(paths)
|
| - del libs[library]
|
| + orphaned_libs[library] = paths
|
| + else:
|
| + valid_libs[library] = paths
|
| + for library, paths in orphaned_libs.items():
|
| + components = library[:-2].split('_')[:-1]
|
| + found = False
|
| + # Find directly matching parent libs by stripping suffix.
|
| + while components and not found:
|
| + parent_library = '_'.join(components) + '.a'
|
| + if parent_library in valid_libs:
|
| + valid_libs[parent_library].extend(paths)
|
| + found = True
|
| + break
|
| + components = components[:-1]
|
| + # Find next best match by finding parent libs with the same prefix.
|
| + if not found:
|
| + base_prefix = library[:-2].split('_')[0]
|
| + for valid_lib, valid_paths in valid_libs.items():
|
| + prefix = '_'.join(components)
|
| + if valid_lib[:len(base_prefix)] == base_prefix:
|
| + valid_paths.extend(paths)
|
| found = True
|
| break
|
| - components = components[:-1]
|
| - assert found
|
| + assert found
|
|
|
| # Create output directory.
|
| output_dir_path = os.path.join(lib_base_dir, output_dir_name)
|
| @@ -94,7 +104,7 @@ def MergeLibs(lib_base_dir):
|
| libtool_re = re.compile(r'^.*libtool:.*file: .* has no symbols$')
|
|
|
| # Merge libraries using libtool.
|
| - for library, paths in libs.items():
|
| + for library, paths in valid_libs.items():
|
| cmd_list = ['libtool', '-static', '-v', '-o',
|
| os.path.join(output_dir_path, library)] + paths
|
| libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE, env=env)
|
|
|