br.py 4.4 KB

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