br.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. # fs/common.mk
  47. suffixes_not_defined_for_all_rootfs_types = [
  48. '_BZIP2',
  49. '_GZIP',
  50. '_LZ4',
  51. '_LZMA',
  52. '_LZO',
  53. '_XZ',
  54. '_ZSTD',
  55. ]
  56. # fs/common.mk
  57. rootfs_prefix = 'BR2_TARGET_ROOTFS_'
  58. # package/pkg-generic.mk
  59. package_prefix = 'BR2_PACKAGE_'
  60. # package/pkg-generic.mk
  61. boot_prefix = 'BR2_TARGET_'
  62. # package/pkg-generic.mk
  63. toolchain_prefix = 'BR2_'
  64. # boot/barebox/barebox.mk
  65. barebox_infra_suffixes = [
  66. '',
  67. '_BAREBOXENV',
  68. '_BOARD_DEFCONFIG',
  69. '_CONFIG_FRAGMENT_FILES',
  70. '_CUSTOM_CONFIG_FILE',
  71. '_CUSTOM_EMBEDDED_ENV_PATH',
  72. '_CUSTOM_ENV',
  73. '_CUSTOM_ENV_PATH',
  74. '_IMAGE_FILE',
  75. '_USE_CUSTOM_CONFIG',
  76. '_USE_DEFCONFIG',
  77. ]
  78. re_kconfig_symbol = re.compile(r'\b(BR2_\w+)\b')
  79. # Example lines to be handled:
  80. # config BR2_TOOLCHAIN_EXTERNAL_PREFIX
  81. # menuconfig BR2_PACKAGE_GST1_PLUGINS_BASE
  82. re_kconfig_config = re.compile(r'^\s*(menu|)config\s+(BR2_\w+)')
  83. # Example lines to be handled:
  84. # default "uclibc" if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
  85. # default BR2_TARGET_GRUB2_BUILTIN_MODULES if BR2_TARGET_GRUB2_BUILTIN_MODULES != ""
  86. # default y if BR2_HOSTARCH = "powerpc"
  87. re_kconfig_default = re.compile(r'^\s*default\s')
  88. re_kconfig_default_before_conditional = re.compile(r'^.*\bif\b')
  89. re_kconfig_default_legacy_comment = re.compile(r'#\s*legacy')
  90. # Example lines to be handled:
  91. # depends on !(BR2_TOOLCHAIN_USES_GLIBC && BR2_TOOLCHAIN_USES_MUSL)
  92. # depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
  93. re_kconfig_depends = re.compile(r'^\s*depends on\s')
  94. # Example lines to be handled:
  95. # select BR2_PACKAGE_HOST_NODEJS if BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL != ""
  96. # select BR2_PACKAGE_LIBDRM if !(BR2_arm && BR2_PACKAGE_IMX_GPU_VIV_OUTPUT_FB)
  97. # select BR2_PACKAGE_OPENSSL if !(BR2_PACKAGE_GNUTLS || BR2_PACKAGE_MBEDTLS)
  98. re_kconfig_select = re.compile(r'^\s*select\s')
  99. re_kconfig_select_conditional = re.compile(r'\bif\s.*')
  100. # Example lines to be handled:
  101. # if !BR2_SKIP_LEGACY
  102. # if (BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX51 || BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX53)
  103. # if BR2_PACKAGE_HAS_LUAINTERPRETER && !BR2_STATIC_LIBS
  104. # if BR2_PACKAGE_QEMU_CUSTOM_TARGETS = ""
  105. re_kconfig_if = re.compile(r'^\s*if\s')
  106. # Example lines to be handled:
  107. # source "$BR2_BASE_DIR/.br2-external.in.jpeg"
  108. re_kconfig_source = re.compile(r'^\s*source\b')
  109. re_kconfig_choice = re.compile(r'^\s*choice\b')
  110. re_kconfig_endchoice = re.compile(r'^\s*endchoice\b')
  111. re_makefile_eval = re.compile(r'^\s*\$\(eval\b')
  112. re_menu = re.compile(r'^\s*menu\b')
  113. re_endmenu = re.compile(r'^\s*endmenu\b')
  114. re_comments = re.compile(r'#.*$')
  115. re_legacy_special_comment = re.compile(r'#.*(BR2_\w+)\s.*still referenced')
  116. re_host_symbol = re.compile(r'(BR2_PACKAGE_HOST_\w+|BR2_PACKAGE_HAS_HOST_\w+)')
  117. re_makefile_symbol_usage = re.compile(r'\$\((BR2_\w+)\)')
  118. re_makefile_symbol_export = re.compile(r'export\s*(BR2_\w+)')
  119. re_makefile_symbol_attribution = re.compile(r'^\s*(BR2_\w+)\s*[?:=]')
  120. def get_package_from_filename(filename):
  121. package = os.path.basename(filename)[:-3].upper().replace('-', '_')
  122. return package
  123. def is_an_optional_symbol_for_a_roofts(symbol):
  124. if not symbol.startswith(rootfs_prefix):
  125. return False
  126. for sufix in suffixes_not_defined_for_all_rootfs_types:
  127. if symbol.endswith(sufix):
  128. return True
  129. return False
  130. def file_belongs_to_an_ignored_diretory(filename):
  131. for d in ignored_directories:
  132. if filename.startswith(d):
  133. return True
  134. return False