diff options
author | Dane Springmeyer <dane@mapbox.com> | 2014-10-29 14:54:13 -0400 |
---|---|---|
committer | Dane Springmeyer <dane@mapbox.com> | 2014-10-29 14:54:13 -0400 |
commit | 92474b5f516227ad1b5b0256674b4a99c23568df (patch) | |
tree | 02bd9703ed40a0c443864b1019508cf5fb613e14 /gyp/merge_static_libs.py | |
parent | 7dc7387073d630b99ee3522de2bee09f0ace8d71 (diff) | |
download | qtlocation-mapboxgl-92474b5f516227ad1b5b0256674b4a99c23568df.tar.gz |
create and install libmbgl.a with bundled libuv
Diffstat (limited to 'gyp/merge_static_libs.py')
-rwxr-xr-x | gyp/merge_static_libs.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/gyp/merge_static_libs.py b/gyp/merge_static_libs.py new file mode 100755 index 0000000000..842be18c84 --- /dev/null +++ b/gyp/merge_static_libs.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import shutil +import subprocess +import sys +import tempfile + +def _Usage(): + print 'Usage: merge_static_libs OUTPUT_LIB INPUT_LIB [INPUT_LIB]*' + sys.exit(1) + +def MergeLibs(in_libs, out_lib): + """ Merges multiple static libraries into one. + + in_libs: list of paths to static libraries to be merged + out_lib: path to the static library which will be created from in_libs + """ + if os.name == 'posix': + tempdir = tempfile.mkdtemp() + abs_in_libs = [] + for in_lib in in_libs: + abs_in_libs.append(os.path.abspath(in_lib)) + curdir = os.getcwd() + os.chdir(tempdir) + objects = [] + ar = os.environ.get('AR', 'ar') + for in_lib in abs_in_libs: + proc = subprocess.Popen([ar, '-t', in_lib], stdout=subprocess.PIPE) + proc.wait() + obj_str = proc.communicate()[0] + current_objects = obj_str.rstrip().split('\n') + proc = subprocess.Popen([ar, '-x', in_lib], stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + proc.wait() + if proc.poll() == 0: + # The static library is non-thin, and we extracted objects + for object in current_objects: + objects.append(os.path.abspath(object)) + elif 'thin archive' in proc.communicate()[0]: + # The static library is thin, so it contains the paths to its objects + for object in current_objects: + objects.append(object) + else: + raise Exception('Failed to extract objects from %s.' % in_lib) + os.chdir(curdir) + if not subprocess.call([ar, '-crs', out_lib] + objects) == 0: + raise Exception('Failed to add object files to %s' % out_lib) + shutil.rmtree(tempdir) + elif os.name == 'nt': + subprocess.call(['lib', '/OUT:%s' % out_lib] + in_libs) + else: + raise Exception('Error: Your platform is not supported') + +def Main(): + if len(sys.argv) < 3: + _Usage() + out_lib = sys.argv[1] + in_libs = sys.argv[2:] + MergeLibs(in_libs, out_lib) + +if '__main__' == __name__: + sys.exit(Main()) |