bitbake-getvar 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #! /usr/bin/env python3
  2. #
  3. # Copyright (C) 2021 Richard Purdie
  4. #
  5. # SPDX-License-Identifier: GPL-2.0-only
  6. #
  7. import argparse
  8. import io
  9. import os
  10. import sys
  11. import warnings
  12. import logging
  13. warnings.simplefilter("default")
  14. bindir = os.path.dirname(__file__)
  15. topdir = os.path.dirname(bindir)
  16. sys.path[0:0] = [os.path.join(topdir, 'lib')]
  17. import bb.providers
  18. import bb.tinfoil
  19. if __name__ == "__main__":
  20. parser = argparse.ArgumentParser(description="Bitbake Query Variable")
  21. parser.add_argument("variable", help="variable name to query")
  22. parser.add_argument("-r", "--recipe", help="Recipe name to query", default=None, required=False)
  23. parser.add_argument('-u', '--unexpand', help='Do not expand the value (with --value)', action="store_true")
  24. parser.add_argument('-f', '--flag', help='Specify a variable flag to query (with --value)', default=None)
  25. parser.add_argument('--value', help='Only report the value, no history and no variable name', action="store_true")
  26. parser.add_argument('-q', '--quiet', help='Silence bitbake server logging', action="store_true")
  27. parser.add_argument('--ignore-undefined', help='Suppress any errors related to undefined variables', action="store_true")
  28. args = parser.parse_args()
  29. if not args.value:
  30. if args.unexpand:
  31. sys.exit("--unexpand only makes sense with --value")
  32. if args.flag:
  33. sys.exit("--flag only makes sense with --value")
  34. quiet = args.quiet or args.value
  35. if quiet:
  36. logger = logging.getLogger("BitBake")
  37. logger.setLevel(logging.WARNING)
  38. with bb.tinfoil.Tinfoil(tracking=True, setup_logging=not quiet) as tinfoil:
  39. if args.recipe:
  40. tinfoil.prepare(quiet=3 if quiet else 2)
  41. try:
  42. d = tinfoil.parse_recipe(args.recipe)
  43. except bb.providers.NoProvider as e:
  44. sys.exit(str(e))
  45. else:
  46. tinfoil.prepare(quiet=2, config_only=True)
  47. # Expand keys and run anonymous functions to get identical result to
  48. # "bitbake -e"
  49. d = tinfoil.finalizeData()
  50. value = None
  51. if args.flag:
  52. value = d.getVarFlag(args.variable, args.flag, expand=not args.unexpand)
  53. if value is None and not args.ignore_undefined:
  54. sys.exit(f"The flag '{args.flag}' is not defined for variable '{args.variable}'")
  55. else:
  56. value = d.getVar(args.variable, expand=not args.unexpand)
  57. if value is None and not args.ignore_undefined:
  58. sys.exit(f"The variable '{args.variable}' is not defined")
  59. if args.value:
  60. print(str(value if value is not None else ""))
  61. else:
  62. bb.data.emit_var(args.variable, d=d, all=True)