Collect more shared libraries on Linux.

Sonames do not always match '*.so' pattern,
sometimes they have a version number as a suffix, e.g. "libfreetype.so.6".
This commit is contained in:
Aleksei Kuzmin 2017-10-01 17:29:43 +03:00
Родитель b5433243da
Коммит cf2dd1a65e
2 изменённых файлов: 49 добавлений и 9 удалений

Просмотреть файл

@ -477,8 +477,17 @@ def copy_binaries(target_arch, component, create_debug_archive,
if TARGET_PLATFORM == 'linux':
if component == 'shared_library':
# out/Release/lib/*.so
for library in glob.glob(os.path.join(output_dir, '*.so')):
# libname.so
libraries = glob.glob(os.path.join(output_dir, '*.so'))
# libname.so.123
regex = re.compile('.*\.so\.[0-9]+$')
for dirpath, dirnames, filenames in os.walk(output_dir):
for filename in filenames:
if regex.match(filename):
libraries.append(os.path.join(dirpath, filename))
for library in libraries:
copy_with_blacklist(target_arch, library, target_dir, ninja)
# Copy chromedriver and mksnapshot

Просмотреть файл

@ -2,6 +2,7 @@
import glob
import os
import re
import sys
@ -80,9 +81,9 @@ GYPI_TEMPLATE = """\
def main(target_file, code_dir, shared_dir, static_dir):
(shared_libraries, shared_v8_libraries) = searh_files(
(shared_libraries, shared_v8_libraries) = find_libraries(
shared_dir, SHARED_LIBRARY_SUFFIX, EXCLUDE_SHARED_LIBRARIES)
(static_libraries, static_v8_libraries) = searh_files(
(static_libraries, static_v8_libraries) = find_libraries(
static_dir, STATIC_LIBRARY_SUFFIX, EXCLUDE_STATIC_LIBRARIES)
content = GYPI_TEMPLATE % {
'src': repr(os.path.abspath(code_dir)),
@ -97,11 +98,41 @@ def main(target_file, code_dir, shared_dir, static_dir):
f.write(content)
def searh_files(src, suffix, exclude):
files = glob.glob(os.path.join(src, '*.' + suffix))
files = [f for f in files if os.path.basename(f) not in exclude]
return ([os.path.abspath(f) for f in files if not is_v8_library(f)],
[os.path.abspath(f) for f in files if is_v8_library(f)])
def find_libraries(dirpath, library_suffix, list_of_excludes):
libraries = glob.glob(os.path.join(dirpath, '*.' + library_suffix))
if (library_suffix == 'so'):
# Handle "libname.so.123"
libraries += find_files_by_regex(dirpath, re.compile('.*\.so\.[0-9]+'))
libraries = [lib
for lib in libraries
if os.path.basename(lib) not in list_of_excludes
]
v8_libraries = [lib
for lib in libraries
if is_v8_library(lib)
]
other_libraries = [lib
for lib in libraries
if lib not in v8_libraries
]
return (
[os.path.abspath(l) for l in other_libraries],
[os.path.abspath(l) for l in v8_libraries]
)
def find_files_by_regex(dirpath, regex):
files_found = []
for root, dirs, files in os.walk(dirpath):
for file in files:
if regex.match(file):
files_found.append(os.path.join(root, file))
return files_found
def is_v8_library(p):