diff options
author | Fredrik Gustafsson <fredrik.gustafsson@axis.com> | 2020-09-08 12:53:07 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-11-24 15:53:07 +0000 |
commit | e51345b50784572602a09a233b9d6f4847fe1f16 (patch) | |
tree | d65d4d5d4e06f3d0a014a634c03ced594d6c1dc7 /meta/lib/oe/sdk.py | |
parent | 8c28435258ea28dadbbbe9506beae700c226c379 (diff) | |
download | poky-e51345b50784572602a09a233b9d6f4847fe1f16.tar.gz |
package management: Allow dynamic loading of PM
Dynamic loading of package managers will allow other layers to simply
add their package manager code in package_manager/ and have bitbake find
it according to the package manager configuration. This is useful for
adding new (faster) package managers to Open Embedded while not increasing the
test scope or require Open Embedded to support more package managers.
How this is tested:
* Build core-image-minimal with all three package managers
* Build the sdk with all three package managers. dpkg fails, but
it fails on master as well.
* Run the complete test suite, all tests passed except 16
* Run those 16 tests on master and verify that they fail there as well
* Fix errors making tests works on master but not with this patch.
(From OE-Core rev: 02670501dea192879ddf9f8048eea57a94719fc1)
Signed-off-by: Fredrik Gustafsson <fredrigu@axis.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oe/sdk.py')
-rw-r--r-- | meta/lib/oe/sdk.py | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py index fdcadcb8de..37b59afd1a 100644 --- a/meta/lib/oe/sdk.py +++ b/meta/lib/oe/sdk.py | |||
@@ -115,33 +115,18 @@ def sdk_list_installed_packages(d, target, rootfs_dir=None): | |||
115 | 115 | ||
116 | rootfs_dir = [sdk_output, os.path.join(sdk_output, target_path)][target is True] | 116 | rootfs_dir = [sdk_output, os.path.join(sdk_output, target_path)][target is True] |
117 | 117 | ||
118 | from oe.package_manager.rpm import RpmPkgsList | ||
119 | from oe.package_manager.ipk import OpkgPkgsList | ||
120 | from oe.package_manager.deb import DpkgPkgsList | ||
121 | img_type = d.getVar('IMAGE_PKGTYPE') | 118 | img_type = d.getVar('IMAGE_PKGTYPE') |
122 | if img_type == "rpm": | 119 | import importlib |
123 | arch_var = ["SDK_PACKAGE_ARCHS", None][target is True] | 120 | cls = importlib.import_module('oe.package_manager.' + img_type) |
124 | os_var = ["SDK_OS", None][target is True] | 121 | return cls.PMPkgsList(d, rootfs_dir).list_pkgs() |
125 | return RpmPkgsList(d, rootfs_dir).list_pkgs() | ||
126 | elif img_type == "ipk": | ||
127 | conf_file_var = ["IPKGCONF_SDK", "IPKGCONF_TARGET"][target is True] | ||
128 | return OpkgPkgsList(d, rootfs_dir, d.getVar(conf_file_var)).list_pkgs() | ||
129 | elif img_type == "deb": | ||
130 | return DpkgPkgsList(d, rootfs_dir).list_pkgs() | ||
131 | 122 | ||
132 | def populate_sdk(d, manifest_dir=None): | 123 | def populate_sdk(d, manifest_dir=None): |
133 | env_bkp = os.environ.copy() | 124 | env_bkp = os.environ.copy() |
134 | 125 | ||
135 | img_type = d.getVar('IMAGE_PKGTYPE') | 126 | img_type = d.getVar('IMAGE_PKGTYPE') |
136 | from oe.package_manager.rpm.sdk import RpmSdk | 127 | import importlib |
137 | from oe.package_manager.ipk.sdk import OpkgSdk | 128 | cls = importlib.import_module('oe.package_manager.' + img_type + '.sdk') |
138 | from oe.package_manager.deb.sdk import DpkgSdk | 129 | cls.PkgSdk(d, manifest_dir).populate() |
139 | if img_type == "rpm": | ||
140 | RpmSdk(d, manifest_dir).populate() | ||
141 | elif img_type == "ipk": | ||
142 | OpkgSdk(d, manifest_dir).populate() | ||
143 | elif img_type == "deb": | ||
144 | DpkgSdk(d, manifest_dir).populate() | ||
145 | 130 | ||
146 | os.environ.clear() | 131 | os.environ.clear() |
147 | os.environ.update(env_bkp) | 132 | os.environ.update(env_bkp) |