forked from enlightenment/efl
whenever this script finds any module linked to libe* (but not libefl-one.so) it will error. Differential Revision: https://phab.enlightenment.org/D11900devs/stefan/ci-efl-one
parent
ee90510014
commit
c5c28120f7
1 changed files with 52 additions and 0 deletions
@ -0,0 +1,52 @@ |
||||
#!/bin/env python3 |
||||
import os |
||||
import subprocess |
||||
import argparse |
||||
import json |
||||
from elftools.elf.elffile import ELFFile |
||||
|
||||
|
||||
#meson changed behaviour from 0.49 to 0.50 so we need this: |
||||
def meson_fetch_filename(filename_object): |
||||
if isinstance(filename_object, str): |
||||
return filename_object |
||||
else: |
||||
return filename_object[0] |
||||
|
||||
|
||||
def needed_libs(filename): |
||||
print('Processing file:', filename) |
||||
result = [] |
||||
with open(filename, 'rb') as f: |
||||
elffile = ELFFile(f) |
||||
for section in elffile.iter_sections(): |
||||
if section.name.startswith('.dynamic'): |
||||
for tag in section.iter_tags(): |
||||
if tag.entry.d_tag == 'DT_NEEDED': |
||||
result.append(getattr(tag, tag.entry.d_tag[3:].lower())) |
||||
return result |
||||
|
||||
|
||||
parser = argparse.ArgumentParser(description='Check that when build with efl-one that no module nor efl-one lib does drag in libeina or the likes') |
||||
parser.add_argument('builddir', metavar='build', help='the path where to find the meson build directory') |
||||
|
||||
G = parser.parse_args() |
||||
|
||||
#Run meson to fetch all examples |
||||
meson_introspect = subprocess.Popen(["meson", "introspect", G.builddir, "--targets"], |
||||
stdout = subprocess.PIPE, |
||||
stderr = subprocess.PIPE, |
||||
) |
||||
meson_introspect.poll() |
||||
build_targets = json.loads(meson_introspect.stdout.read()) |
||||
build_modules = [meson_fetch_filename(b["filename"]) for b in build_targets if "modules" in meson_fetch_filename(b["filename"]) and meson_fetch_filename(b["filename"]).endswith('.so')] |
||||
|
||||
for build_modules in build_modules: |
||||
libs = needed_libs(build_modules) |
||||
lib_es = [lib for lib in libs if lib.startswith("libe") and lib != "libefl-one.so.1"] |
||||
if len(lib_es) != 0: |
||||
print("Error, {} requies lib {}".format(build_modules, lib_es[0])) |
||||
exit(-1) |
||||
|
||||
print("Nothing wrong found!") |
||||
|
Loading…
Reference in new issue