efl

Форк
0
/
test-efl-one.py 
51 строка · 1.7 Кб
1
#!/bin/env python3
2
import os
3
import subprocess
4
import argparse
5
import json
6
from elftools.elf.elffile import ELFFile
7

8

9
#meson changed behaviour from 0.49 to 0.50 so we need this:
10
def meson_fetch_filename(filename_object):
11
  if isinstance(filename_object, str):
12
    return filename_object
13
  else:
14
    return filename_object[0]
15

16

17
def needed_libs(filename):
18
  print('Processing file:', filename)
19
  result = []
20
  with open(filename, 'rb') as f:
21
    elffile = ELFFile(f)
22
    for section in elffile.iter_sections():
23
      if section.name.startswith('.dynamic'):
24
        for tag in section.iter_tags():
25
          if tag.entry.d_tag == 'DT_NEEDED':
26
            result.append(getattr(tag, tag.entry.d_tag[3:].lower()))
27
  return result
28

29

30
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')
31
parser.add_argument('builddir', metavar='build', help='the path where to find the meson build directory')
32

33
G = parser.parse_args()
34

35
#Run meson to fetch all examples
36
meson_introspect = subprocess.Popen(["meson", "introspect", G.builddir, "--targets"],
37
      stdout = subprocess.PIPE,
38
      stderr = subprocess.PIPE,
39
)
40
meson_introspect.poll()
41
build_targets = json.loads(meson_introspect.stdout.read())
42
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')]
43

44
for build_modules in build_modules:
45
  libs = needed_libs(build_modules)
46
  lib_es = [lib for lib in libs if lib.startswith("libe") and lib != "libefl-one.so.1"]
47
  if len(lib_es) != 0:
48
    print("Error, {} requies lib {}".format(build_modules, lib_es[0]))
49
    exit(-1)
50

51
print("Nothing wrong found!")
52

53

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.