123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import checksymbolslib.br as br
- def handle_eval(db, filename, lineno, line):
- def add_multiple_symbol_usages(package, prefixes=None, suffixes=None):
- for prefix in prefixes or ['']:
- for sufix in suffixes or ['']:
- symbol = prefix + package + sufix
- db.add_symbol_usage(symbol, filename, lineno)
- package = br.get_package_from_filename(filename)
- if '$(rootfs)' in line:
- suffixes = [''] + br.suffixes_not_defined_for_all_rootfs_types
- add_multiple_symbol_usages(package, prefixes=[br.rootfs_prefix], suffixes=suffixes)
- return
- if '$(kernel-module)' in line:
- add_multiple_symbol_usages(package, prefixes=[br.package_prefix])
- return
- if '$(barebox-package)' in line:
- add_multiple_symbol_usages(package, prefixes=[br.boot_prefix], suffixes=br.barebox_infra_suffixes)
- return
- if '-package)' not in line:
- return
- if package == 'LINUX':
- # very special case at package/pkg-generic.mk
- add_multiple_symbol_usages('BR2_LINUX_KERNEL')
- return
- # mimic package/pkg-generic.mk and package/pkg-virtual.mk
- if '$(virtual-' in line:
- prefixes = ['BR2_PACKAGE_PROVIDES_', 'BR2_PACKAGE_HAS_']
- if filename.startswith('toolchain/'):
- prefix = br.toolchain_prefix
- else:
- prefix = br.package_prefix
- symbol = prefix + package
- db.add_symbol_virtual(symbol, filename, lineno)
- prefixes.append(prefix)
- elif '$(host-virtual-' in line:
- prefixes = ['BR2_PACKAGE_HOST_', 'BR2_PACKAGE_PROVIDES_HOST_', 'BR2_PACKAGE_HAS_HOST_']
- elif '$(host-' in line:
- prefixes = ['BR2_PACKAGE_HOST_']
- elif filename.startswith('boot/'):
- prefixes = [br.boot_prefix]
- elif filename.startswith('toolchain/'):
- prefixes = [br.toolchain_prefix]
- elif '$(toolchain-' in line:
- prefixes = [br.toolchain_prefix]
- else:
- prefixes = [br.package_prefix]
- add_multiple_symbol_usages(package, prefixes=prefixes)
- def handle_definition(db, filename, lineno, line, legacy):
- symbols = br.re_makefile_symbol_attribution.findall(line)
- symbols += br.re_makefile_symbol_export.findall(line)
- for symbol in symbols:
- if legacy:
- db.add_symbol_legacy_definition(symbol, filename, lineno)
- else:
- db.add_symbol_definition(symbol, filename, lineno)
- def handle_usage(db, filename, lineno, line, legacy):
- if br.re_makefile_eval.search(line):
- handle_eval(db, filename, lineno, line)
- return
- symbols = br.re_makefile_symbol_usage.findall(line)
- for symbol in symbols:
- if legacy:
- db.add_symbol_usage_in_legacy(symbol, filename, lineno)
- else:
- db.add_symbol_usage(symbol, filename, lineno)
- def populate_db(db, filename, file_content):
- legacy = filename.endswith('.legacy')
- for lineno, raw_line in file_content:
- line = br.re_comments.sub('', raw_line)
- handle_definition(db, filename, lineno, line, legacy)
- handle_usage(db, filename, lineno, line, legacy)
- def check_filename(filename):
- if filename.endswith('.mk'):
- return True
- if filename.endswith('.mk.in'):
- return True
- if filename.startswith('arch/arch.mk.'):
- return True
- if filename in [
- 'Makefile',
- 'Makefile.legacy',
- 'package/Makefile.in'
- ]:
- return True
- return False
|