br.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import os
  2. import re
  3. ignored_directories = [
  4. 'support/testing/',
  5. ]
  6. # Makefile
  7. symbols_used_only_in_source_code = [
  8. 'BR2_USE_CCACHE',
  9. ]
  10. # package/skeleton/Config.in
  11. symbols_used_only_for_host_variant = [
  12. 'BR2_PACKAGE_SKELETON',
  13. ]
  14. # Makefile
  15. # package/pkg-generic.mk
  16. symbols_defined_only_at_command_line = [
  17. 'BR2_GRAPH_ALT',
  18. 'BR2_GRAPH_DEPS_OPTS',
  19. 'BR2_GRAPH_DOT_OPTS',
  20. 'BR2_GRAPH_OUT',
  21. 'BR2_GRAPH_SIZE_OPTS',
  22. 'BR2_INSTRUMENTATION_SCRIPTS',
  23. ]
  24. # Makefile
  25. symbols_defined_only_when_using_br2_external = [
  26. 'BR2_EXTERNAL',
  27. 'BR2_EXTERNAL_DIRS',
  28. 'BR2_EXTERNAL_MKS',
  29. 'BR2_EXTERNAL_NAMES',
  30. ]
  31. # boot/barebox/barebox.mk
  32. symbols_defined_only_for_barebox_variant = [
  33. 'BR2_TARGET_BAREBOX_AUX_BAREBOXENV',
  34. ]
  35. # toolchain/toolchain/toolchain.mk
  36. # toolchain/toolchain-buildroot/toolchain-buildroot.mk
  37. # toolchain/toolchain-bare-metal-buildroot/toolchain-bare-metal-buildroot.mk
  38. symbols_not_defined_for_fake_virtual_packages = [
  39. 'BR2_PACKAGE_HAS_TOOLCHAIN',
  40. 'BR2_PACKAGE_HAS_TOOLCHAIN_BUILDROOT',
  41. 'BR2_PACKAGE_HAS_TOOLCHAIN_BARE_METAL_BUILDROOT',
  42. 'BR2_PACKAGE_PROVIDES_TOOLCHAIN',
  43. 'BR2_PACKAGE_PROVIDES_TOOLCHAIN_BUILDROOT',
  44. 'BR2_PACKAGE_PROVIDES_TOOLCHAIN_BARE_METAL_BUILDROOT',
  45. ]
  46. # Config.in
  47. symbols_possibly_unused = [
  48. 'BR2_BROKEN',
  49. ]
  50. # fs/common.mk
  51. suffixes_not_defined_for_all_rootfs_types = [
  52. '_BZIP2',
  53. '_GZIP',
  54. '_LZ4',
  55. '_LZMA',
  56. '_LZO',
  57. '_XZ',
  58. '_ZSTD',
  59. ]
  60. # fs/common.mk
  61. rootfs_prefix = 'BR2_TARGET_ROOTFS_'
  62. # package/pkg-generic.mk
  63. package_prefix = 'BR2_PACKAGE_'
  64. # package/pkg-generic.mk
  65. boot_prefix = 'BR2_TARGET_'
  66. # package/pkg-generic.mk
  67. toolchain_prefix = 'BR2_'
  68. # boot/barebox/barebox.mk
  69. barebox_infra_suffixes = [
  70. '',
  71. '_BAREBOXENV',
  72. '_BOARD_DEFCONFIG',
  73. '_CONFIG_FRAGMENT_FILES',
  74. '_CUSTOM_CONFIG_FILE',
  75. '_CUSTOM_EMBEDDED_ENV_PATH',
  76. '_CUSTOM_ENV',
  77. '_CUSTOM_ENV_PATH',
  78. '_IMAGE_FILE',
  79. '_USE_CUSTOM_CONFIG',
  80. '_USE_DEFCONFIG',
  81. ]
  82. re_kconfig_symbol = re.compile(r'\b(BR2_\w+)\b')
  83. # Example lines to be handled:
  84. # config BR2_TOOLCHAIN_EXTERNAL_PREFIX
  85. # menuconfig BR2_PACKAGE_GST1_PLUGINS_BASE
  86. re_kconfig_config = re.compile(r'^\s*(menu|)config\s+(BR2_\w+)')
  87. # Example lines to be handled:
  88. # default "uclibc" if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
  89. # default BR2_TARGET_GRUB2_BUILTIN_MODULES if BR2_TARGET_GRUB2_BUILTIN_MODULES != ""
  90. # default y if BR2_HOSTARCH = "powerpc"
  91. re_kconfig_default = re.compile(r'^\s*default\s')
  92. re_kconfig_default_before_conditional = re.compile(r'^.*\bif\b')
  93. re_kconfig_default_legacy_comment = re.compile(r'#\s*legacy')
  94. # Example lines to be handled:
  95. # depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_TOOLCHAIN_USES_MUSL)
  96. # depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
  97. re_kconfig_depends = re.compile(r'^\s*depends on\s')
  98. # Example lines to be handled:
  99. # select BR2_PACKAGE_HOST_NODEJS if BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL != ""
  100. # select BR2_PACKAGE_LIBDRM if !(BR2_arm && BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_FB)
  101. # select BR2_PACKAGE_OPENSSL if !(BR2_PACKAGE_GNUTLS || BR2_PACKAGE_MBEDTLS)
  102. re_kconfig_select = re.compile(r'^\s*select\s')
  103. re_kconfig_select_conditional = re.compile(r'\bif\s.*')
  104. # Example lines to be handled:
  105. # if !BR2_SKIP_LEGACY
  106. # if (BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 || BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53)
  107. # if BR2_PACKAGE_HAS_LUAINTERPRETER && !BR2_STATIC_LIBS
  108. # if BR2_PACKAGE_QEMU_CUSTOM_TARGETS = ""
  109. re_kconfig_if = re.compile(r'^\s*if\s')
  110. # Example lines to be handled:
  111. # source "$BR2_BASE_DIR/.br2-external.in.jpeg"
  112. re_kconfig_source = re.compile(r'^\s*source\b')
  113. re_kconfig_choice = re.compile(r'^\s*choice\b')
  114. re_kconfig_endchoice = re.compile(r'^\s*endchoice\b')
  115. re_makefile_eval = re.compile(r'^\s*\$\(eval\b')
  116. re_menu = re.compile(r'^\s*menu\b')
  117. re_endmenu = re.compile(r'^\s*endmenu\b')
  118. re_comments = re.compile(r'#.*$')
  119. re_legacy_special_comment = re.compile(r'#.*(BR2_\w+)\s.*still referenced')
  120. re_host_symbol = re.compile(r'(BR2_PACKAGE_HOST_\w+|BR2_PACKAGE_HAS_HOST_\w+)')
  121. re_makefile_symbol_usage = re.compile(r'\$\((BR2_\w+)\)')
  122. re_makefile_symbol_export = re.compile(r'export\s*(BR2_\w+)')
  123. re_makefile_symbol_attribution = re.compile(r'^\s*(BR2_\w+)\s*[?:=]')
  124. def get_package_from_filename(filename):
  125. package = os.path.basename(filename)[:-3].upper().replace('-', '_')
  126. return package
  127. def is_an_optional_symbol_for_a_roofts(symbol):
  128. if not symbol.startswith(rootfs_prefix):
  129. return False
  130. for sufix in suffixes_not_defined_for_all_rootfs_types:
  131. if symbol.endswith(sufix):
  132. return True
  133. return False
  134. def file_belongs_to_an_ignored_diretory(filename):
  135. for d in ignored_directories:
  136. if filename.startswith(d):
  137. return True
  138. return False