@@ -23,10 +23,33 @@ import time
bindir = os.path.abspath(os.path.dirname(__file__))
-sys.path[0:0] = [os.path.join(os.path.dirname(bindir), 'lib')]
+libdir = os.path.join(os.path.dirname(bindir), 'lib')
+bbfile = os.path.join(libdir, 'bb', '__init__.py')
-import bb.msg # noqa: E402
-import bb.process # noqa: E402
+# Obtain __version__ and import bb
+if os.path.exists(bbfile):
+ # Execute bitbake-setup in git repository
+ try:
+ sys.path[0:0] = [libdir]
+ import bb.msg # noqa: E402
+ import bb.process # noqa: E402
+ from bb import __version__ # noqa: E402
+ except ImportError as e:
+ print(f"Could not import bb from lib: {e}")
+else:
+ # Execute bitbake-setup installed with packages
+ try:
+ from importlib.metadata import version, PackageNotFoundError # noqa:E402
+ try:
+ import bb.msg # noqa: E402
+ import bb.process # noqa: E402
+ __version__ = version("bitbake_setup")
+ except ImportError as e:
+ print(f"Could not import bb: {e}")
+ except PackageNotFoundError as e:
+ print(f"Could not find package bb: {e}")
+ except ImportError as e:
+ print(f"Could not import bb from package: {e}")
logger = bb.msg.logger_create('bitbake-setup', sys.stdout)
The __version__ has been present since bbmake to ensure that the Python script uses the appropriate bb module. Other bitbake-* scripts do not check the version. When executed in place, the bitbake-* scripts manipulate sys.path to find the bb module in ../lib. This path is inserted to the beginning of sys.path and it cannot be overridden by any other modules named bb. This commit adds a check for ../lib/bb/__init__.py before making changes to sys.path. It falls back to importing the bitbake_setup module using a custom bitbake_setup package. Signed-off-by: Rob Woolley <rob.woolley@windriver.com> --- bin/bitbake-setup | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-)