[OE-core] [PATCH] linux-firmware : Add firmware of RTL8822 serie
From: BELOUARGA Mohamed RTL8822 is a serie of wireless modules that need firmwares to function correctly. The linux firmware recipe does not have a package of these firmwares, and this commit add them. Signed-off-by: BELOUARGA Mohamed --- .../linux-firmware/linux-firmware_20230625.bb | 8 1 file changed, 8 insertions(+) diff --git a/meta/recipes-kernel/linux-firmware/linux-firmware_20230625.bb b/meta/recipes-kernel/linux-firmware/linux-firmware_20230625.bb index 329a3e3c9a..3d6645579a 100644 --- a/meta/recipes-kernel/linux-firmware/linux-firmware_20230625.bb +++ b/meta/recipes-kernel/linux-firmware/linux-firmware_20230625.bb @@ -241,6 +241,7 @@ PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \ ${PN}-rtl-license ${PN}-rtl8188 ${PN}-rtl8192cu ${PN}-rtl8192ce ${PN}-rtl8192su ${PN}-rtl8723 ${PN}-rtl8821 \ ${PN}-rtl8761 \ ${PN}-rtl8168 \ + ${PN}-rtl8822 \ ${PN}-cypress-license \ ${PN}-broadcom-license \ ${PN}-bcm-0bb4-0306 \ @@ -581,6 +582,7 @@ LICENSE:${PN}-rtl8192su = "Firmware-rtlwifi_firmware" LICENSE:${PN}-rtl8723 = "Firmware-rtlwifi_firmware" LICENSE:${PN}-rtl8761 = "Firmware-rtlwifi_firmware" LICENSE:${PN}-rtl8821 = "Firmware-rtlwifi_firmware" +LICENSE:${PN}-rtl8822 = "Firmware-rtlwifi_firmware" LICENSE:${PN}-rtl-license = "Firmware-rtlwifi_firmware" LICENSE:${PN}-rtl8168 = "WHENCE" @@ -611,6 +613,11 @@ FILES:${PN}-rtl8761 = " \ FILES:${PN}-rtl8168 = " \ ${nonarch_base_libdir}/firmware/rtl_nic/rtl8168*.fw \ " +FILES:${PN}-rtl8822 = " \ + ${nonarch_base_libdir}/firmware/rtl_bt/rtl8822*.bin \ + ${nonarch_base_libdir}/firmware/rtw88/rtw8822*.bin \ + ${nonarch_base_libdir}/firmware/rtlwifi/rtl8822*.bin \ +" RDEPENDS:${PN}-rtl8188 += "${PN}-rtl-license" RDEPENDS:${PN}-rtl8192ce += "${PN}-rtl-license" @@ -619,6 +626,7 @@ RDEPENDS:${PN}-rtl8192su = "${PN}-rtl-license" RDEPENDS:${PN}-rtl8723 += "${PN}-rtl-license" RDEPENDS:${PN}-rtl8821 += "${PN}-rtl-license" RDEPENDS:${PN}-rtl8761 += "${PN}-rtl-license" +RDEPENDS:${PN}-rtl8822 += "${PN}-rtl-license" RDEPENDS:${PN}-rtl8168 += "${PN}-whence-license" # For ti-connectivity -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#184973): https://lists.openembedded.org/g/openembedded-core/message/184973 Mute This Topic: https://lists.openembedded.org/mt/100396950/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
Re: [OE-core] [kirkstone][PATCH 1/5] recipetool: create: npm: Remove duplicate function to not have future conflicts
Hello, I fixed the problem on master branch. *For master:* In order that my changes work, Some patches on bitbake should be accepted: https://lists.openembedded.org/g/bitbake-devel/message/14815?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99163598 https://lists.openembedded.org/g/bitbake-devel/message/14819?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99230772 https://lists.openembedded.org/g/bitbake-devel/message/14820?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99248868 And: https://lists.openembedded.org/g/openembedded-core/message/182022?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99248914 And this series of patches: https://lists.openembedded.org/g/openembedded-core/message/181961?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99230551 *For kirkstone:* In order that my changes work, Some patches on bitbake should be accepted: https://lists.openembedded.org/g/bitbake-devel/message/14815?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99163598 https://lists.openembedded.org/g/bitbake-devel/message/14819?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99230772 https://lists.openembedded.org/g/bitbake-devel/message/14820?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99248868 And this series of patches. Thanks -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#182037): https://lists.openembedded.org/g/openembedded-core/message/182037 Mute This Topic: https://lists.openembedded.org/mt/99163838/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
Re: [OE-core] [master][PATCH 1/6] recipetool: create: npm: Remove duplicate function to not have future conflicts
Hey Alexander, Thanks for your answer. In order that my changes work, Some patches on bitbake should be accepted: https://lists.openembedded.org/g/bitbake-devel/message/14815?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99163598 https://lists.openembedded.org/g/bitbake-devel/message/14819?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99230772 https://lists.openembedded.org/g/bitbake-devel/message/14820?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99248868 and one patch that I just made on open embedded-core: https://lists.openembedded.org/g/openembedded-core/message/182022?p=%2C%2C%2C20%2C0%2C0%2C0%3A%3Arecentpostdate%2Fsticky%2C%2Cbelouarga%2C20%2C2%2C0%2C99248914 I ran the tests that you asked me to do, you can find the results below. elf@container:~/workspace$ oe-selftest -r recipetool.RecipetoolCreateTests.test_recipetool_create_npm 2023-05-31 17:31:33,552 - oe-selftest - INFO - Changing cwd to /home/elf/workspace/build 2023-05-31 17:31:33,552 - oe-selftest - WARNING - meta-selftest layer not found in BBLAYERS, adding it 2023-05-31 17:31:39,880 - oe-selftest - INFO - Adding layer libraries: 2023-05-31 17:31:39,880 - oe-selftest - INFO - /home/elf/workspace/layers/poky/meta/lib 2023-05-31 17:31:39,880 - oe-selftest - INFO - /home/elf/workspace/layers/poky/meta-yocto-bsp/lib 2023-05-31 17:31:39,880 - oe-selftest - INFO - /home/elf/workspace/layers/meta-openembedded/meta-oe/lib 2023-05-31 17:31:39,880 - oe-selftest - INFO - /home/elf/workspace/layers/poky/meta-selftest/lib 2023-05-31 17:31:39,882 - oe-selftest - INFO - Running bitbake -e to test the configuration is valid/parsable NOTE: Starting bitbake server... 2023-05-31 17:31:49,176 - oe-selftest - INFO - Adding: "include selftest.inc" in /home/elf/workspace/build-st/conf/local.conf 2023-05-31 17:31:49,178 - oe-selftest - INFO - Adding: "include bblayers.inc" in bblayers.conf 2023-05-31 17:31:49,179 - oe-selftest - INFO - test_recipetool_create_npm (recipetool.RecipetoolCreateTests) 2023-05-31 17:33:36,312 - oe-selftest - INFO - ... ok 2023-05-31 17:33:38,097 - oe-selftest - INFO - -- 2023-05-31 17:33:38,097 - oe-selftest - INFO - Ran 1 test in 115.852s 2023-05-31 17:33:38,097 - oe-selftest - INFO - OK 2023-05-31 17:33:48,971 - oe-selftest - INFO - RESULTS: 2023-05-31 17:33:48,971 - oe-selftest - INFO - RESULTS - recipetool.RecipetoolCreateTests.test_recipetool_create_npm: PASSED (107.13s) 2023-05-31 17:33:49,063 - oe-selftest - INFO - SUMMARY: 2023-05-31 17:33:49,063 - oe-selftest - INFO - oe-selftest () - Ran 1 test in 115.853s 2023-05-31 17:33:49,064 - oe-selftest - INFO - oe-selftest - OK - All required tests passed (successes=1, skipped=0, failures=0, errors=0) elf@container:~/workspace$ oe-selftest -r devtool.DevtoolAddTests.test_devtool_add_npm 2023-05-31 17:34:03,550 - oe-selftest - INFO - Changing cwd to /home/elf/workspace/build 2023-05-31 17:34:03,550 - oe-selftest - INFO - Adding layer libraries: 2023-05-31 17:34:03,550 - oe-selftest - INFO - /home/elf/workspace/layers/poky/meta/lib 2023-05-31 17:34:03,551 - oe-selftest - INFO - /home/elf/workspace/layers/poky/meta-yocto-bsp/lib 2023-05-31 17:34:03,551 - oe-selftest - INFO - /home/elf/workspace/layers/meta-openembedded/meta-oe/lib 2023-05-31 17:34:03,551 - oe-selftest - INFO - /home/elf/workspace/layers/poky/meta-selftest/lib 2023-05-31 17:34:03,552 - oe-selftest - INFO - Running bitbake -e to test the configuration is valid/parsable NOTE: Starting bitbake server... 2023-05-31 17:34:12,581 - oe-selftest - INFO - Adding: "include selftest.inc" in /home/elf/workspace/build-st/conf/local.conf 2023-05-31 17:34:12,582 - oe-selftest - INFO - Adding: "include bblayers.inc" in bblayers.conf 2023-05-31 17:34:15,320 - oe-selftest - INFO - test_devtool_add_npm (devtool.DevtoolAddTests) 2023-05-31 17:38:02,622 - oe-selftest - INFO - ... ok 2023-05-31 17:38:04,371 - oe-selftest - INFO - -- 2023-05-31 17:38:04,371 - oe-selftest - INFO - Ran 1 test in 238.516s 2023-05-31 17:38:04,371 - oe-selftest - INFO - OK 2023-05-31 17:38:21,118 - oe-selftest - INFO - RESULTS: 2023-05-31 17:38:21,118 - oe-selftest - INFO - RESULTS - devtool.DevtoolAddTests.test_devtool_add_npm: PASSED (227.30s) 2023-05-31 17:38:21,200 - oe-selftest - INFO - SUMMARY: 2023-05-31 17:38:21,200 - oe-selftest - INFO - oe-selftest () - Ran 1 test in 238.517s 2023-05-31 17:38:21,201 - oe-selftest - INFO - oe-selftest - OK - All required tests passed (successes=1, skipped=0, failures=0, errors=0) -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#182033): https://lists.openembedded.org/g/openembedded-core/message/182033 Mute This Topic: https://lists.openembedded.org/mt/99230551/21656 Group Owner:
[OE-core] [master][PATCH] meta: lib: oe: npm_registry: Add more safe caracters
From: BELOUARGA Mohamed NPM registry cache should support caracaters like '(' and ')' Explanation: NPM packages can contains these caracters like : @(._.)/execute Signed-off-by: BELOUARGA Mohamed --- meta/lib/oe/npm_registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/lib/oe/npm_registry.py b/meta/lib/oe/npm_registry.py index db581e280e..d97ced7cda 100644 --- a/meta/lib/oe/npm_registry.py +++ b/meta/lib/oe/npm_registry.py @@ -11,7 +11,7 @@ import subprocess _ALWAYS_SAFE = frozenset('ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' '0123456789' - '_.-~') + '_.-~()') MISSING_OK = object() -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#182022): https://lists.openembedded.org/g/openembedded-core/message/182022 Mute This Topic: https://lists.openembedded.org/mt/99248914/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [master][PATCH 5/6] classes: npm: Add support for the new format of the shrinkwrap file
From: BELOUARGA Mohamed 1 - Adapt do_configure to the new format of the shrinkwrap 2 - Remove useless function _npmsw_dependency_dict because the dictionnary is already given by npmsw:foreach_dependencies 3 - Rename arguments of callback functions Signed-off-by: BELOUARGA Mohamed --- meta/classes-recipe/npm.bbclass | 27 ++- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/meta/classes-recipe/npm.bbclass b/meta/classes-recipe/npm.bbclass index 92e59fefce..c1944ca14e 100644 --- a/meta/classes-recipe/npm.bbclass +++ b/meta/classes-recipe/npm.bbclass @@ -130,22 +130,6 @@ python npm_do_configure() { sha512 = bb.utils.sha512_file(tarball) return "sha512-" + base64.b64encode(bytes.fromhex(sha512)).decode() -def _npmsw_dependency_dict(orig, deptree): -""" -Return the sub dictionary in the 'orig' dictionary corresponding to the -'deptree' dependency tree. This function follows the shrinkwrap file -format. -""" -ptr = orig -for dep in deptree: -if "dependencies" not in ptr: -ptr["dependencies"] = {} -ptr = ptr["dependencies"] -if dep not in ptr: -ptr[dep] = {} -ptr = ptr[dep] -return ptr - # Manage the manifest file and shrinkwrap files orig_manifest_file = d.expand("${S}/package.json") orig_shrinkwrap_file = d.expand("${S}/npm-shrinkwrap.json") @@ -177,24 +161,25 @@ python npm_do_configure() { progress_total = 1 # also count the main package progress_done = 0 -def _count_dependency(name, params, deptree): +def _count_dependency(name, params, destsuffix): nonlocal progress_total progress_total += 1 -def _cache_dependency(name, params, deptree): -destsubdirs = [os.path.join("node_modules", dep) for dep in deptree] -destsuffix = os.path.join(*destsubdirs) +def _cache_dependency(name, params, destsuffix): with tempfile.TemporaryDirectory() as tmpdir: # Add the dependency to the npm cache destdir = os.path.join(d.getVar("S"), destsuffix) (tarball, pkg) = npm_pack(env, destdir, tmpdir) _npm_cache_add(tarball, pkg) # Add its signature to the cached shrinkwrap -dep = _npmsw_dependency_dict(cached_shrinkwrap, deptree) +dep = params dep["version"] = pkg['version'] dep["integrity"] = _npm_integrity(tarball) if params.get("dev", False): dep["dev"] = True +if "dependencies" not in cached_shrinkwrap: +cached_shrinkwrap["dependencies"] = {} +cached_shrinkwrap["dependencies"][name] = dep # Display progress nonlocal progress_done progress_done += 1 -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181965): https://lists.openembedded.org/g/openembedded-core/message/181965 Mute This Topic: https://lists.openembedded.org/mt/99230563/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [master][PATCH 6/6] classe-recipes: npm: Add support for dependencies and devDependencies
From: BELOUARGA Mohamed Adapt the npm classe for the shrinkwrap of Nodejs 18, and seperate dependencies and dev dependencies. Signed-off-by: BELOUARGA Mohamed --- meta/classes-recipe/npm.bbclass | 21 - 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/meta/classes-recipe/npm.bbclass b/meta/classes-recipe/npm.bbclass index c1944ca14e..91da3295f2 100644 --- a/meta/classes-recipe/npm.bbclass +++ b/meta/classes-recipe/npm.bbclass @@ -153,7 +153,11 @@ python npm_do_configure() { if has_shrinkwrap_file: cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap) - cached_shrinkwrap.pop("dependencies", None) + for package in orig_shrinkwrap["packages"]: +if package != "": +cached_shrinkwrap["packages"].pop(package, None) + cached_shrinkwrap["packages"][""].pop("dependencies", None) + cached_shrinkwrap["packages"][""].pop("devDependencies", None) cached_shrinkwrap["packages"][""].pop("peerDependencies", None) # Manage the dependencies @@ -177,9 +181,16 @@ python npm_do_configure() { dep["integrity"] = _npm_integrity(tarball) if params.get("dev", False): dep["dev"] = True -if "dependencies" not in cached_shrinkwrap: -cached_shrinkwrap["dependencies"] = {} -cached_shrinkwrap["dependencies"][name] = dep +if "devDependencies" not in cached_shrinkwrap["packages"][""]: +cached_shrinkwrap["packages"][""]["devDependencies"] = {} +cached_shrinkwrap["packages"][""]["devDependencies"][name] = pkg['version'] + +else: +if "dependencies" not in cached_shrinkwrap["packages"][""]: +cached_shrinkwrap["packages"][""]["dependencies"] = {} +cached_shrinkwrap["packages"][""]["dependencies"][name] = pkg['version'] + +cached_shrinkwrap["packages"][destsuffix] = dep # Display progress nonlocal progress_done progress_done += 1 @@ -212,7 +223,7 @@ python npm_do_configure() { # Configure the cached manifest file and cached shrinkwrap file def _update_manifest(depkey): for name in orig_manifest.get(depkey, {}): -version = cached_shrinkwrap["dependencies"][name]["version"] +version = cached_shrinkwrap["packages"][""][depkey][name] if depkey not in cached_manifest: cached_manifest[depkey] = {} cached_manifest[depkey][name] = version -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181966): https://lists.openembedded.org/g/openembedded-core/message/181966 Mute This Topic: https://lists.openembedded.org/mt/99230564/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [master][PATCH 4/6] recipetool: create: npm: Add support to handle peer dependencies
From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions. Before NPM 3: NPM installs automatically peer dependencies between NPM 3 and 7: NPM shows a warning about peer dependencies After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 20 1 file changed, 20 insertions(+) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 25e7ddb472..113a89f6a6 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -146,6 +146,23 @@ class NpmRecipeHandler(RecipeHandler): foreach_dependencies(shrinkwrap, _handle_dependency, dev) return licfiles, packages + +# Handle the peer dependencies +def _handle_peer_dependency(self, shrinkwrap_file): +"""Check if package has peer dependencies and show warning if it is the case""" +with open(shrinkwrap_file, "r") as f: +shrinkwrap = json.load(f) + +packages = shrinkwrap.get("packages", {}) +peer_deps = packages.get("", {}).get("peerDependencies", {}) + +for peer_dep in peer_deps: +peer_dep_yocto_name = npm_package(peer_dep) +bb.warn(peer_dep + " is a peer dependencie of the actual package. " + +"Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" +% peer_dep_yocto_name) + + def process(self, srctree, classes, lines_before, lines_after, handled, extravalues): """Handle the npm recipe creation""" @@ -283,6 +300,9 @@ class NpmRecipeHandler(RecipeHandler): classes.append("npm") handled.append("buildsystem") +# Check if package has peer dependencies and inform the user +self._handle_peer_dependency(shrinkwrap_file) + return True def register_recipe_handlers(handlers): -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181964): https://lists.openembedded.org/g/openembedded-core/message/181964 Mute This Topic: https://lists.openembedded.org/mt/99230560/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [master][PATCH 3/6] recipetool: create: npm: Add support for the new format of the shrinkwrap file
From: BELOUARGA Mohamed The shrinkwrap file changed its format, but npm does not version this file. So we can use it properly. The actual changes make the script check if the npm package has dependencies in the actual shrinkwrap format. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 9 - 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index e667a4d19b..25e7ddb472 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -134,11 +134,10 @@ class NpmRecipeHandler(RecipeHandler): licfiles.append(os.path.relpath(readme, srctree)) # Handle the dependencies -def _handle_dependency(name, params, deptree): +def _handle_dependency(name, params, destdir): +deptree = destdir.split('node_modules/') suffix = "-".join([npm_package(dep) for dep in deptree]) -destdirs = [os.path.join("node_modules", dep) for dep in deptree] -destdir = os.path.join(*destdirs) -packages["${PN}-" + suffix] = destdir +packages["${PN}" + suffix] = destdir _licfiles_append_fallback_readme_files(destdir) with open(shrinkwrap_file, "r") as f: @@ -234,7 +233,7 @@ class NpmRecipeHandler(RecipeHandler): value = origvalue.replace("version=" + data["version"], "version=${PV}") value = value.replace("version=latest", "version=${PV}") values = [line.strip() for line in value.strip('\n').splitlines()] -if "dependencies" in shrinkwrap: +if "dependencies" in shrinkwrap.get("packages", {}).get("", {}): values.append(url_recipe) return values, None, 4, False -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181963): https://lists.openembedded.org/g/openembedded-core/message/181963 Mute This Topic: https://lists.openembedded.org/mt/99230557/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [master][PATCH 2/6] classes: npm: Handle peer dependencies for npm packages
From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions. Before NPM 3: NPM installs automatically peer dependencies between NPM 3 and 7: NPM shows a warning about peer dependencies After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- meta/classes-recipe/npm.bbclass | 18 ++ 1 file changed, 18 insertions(+) diff --git a/meta/classes-recipe/npm.bbclass b/meta/classes-recipe/npm.bbclass index 639f461a3a..92e59fefce 100644 --- a/meta/classes-recipe/npm.bbclass +++ b/meta/classes-recipe/npm.bbclass @@ -109,6 +109,7 @@ python npm_do_configure() { import tempfile from bb.fetch2.npm import NpmEnvironment from bb.fetch2.npm import npm_unpack +from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from bb.progress import OutOfProgressHandler from oe.npm_registry import NpmRegistry @@ -169,6 +170,7 @@ python npm_do_configure() { if has_shrinkwrap_file: cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap) cached_shrinkwrap.pop("dependencies", None) + cached_shrinkwrap["packages"][""].pop("peerDependencies", None) # Manage the dependencies progress = OutOfProgressHandler(d, r"^(\d+)/(\d+)$") @@ -203,6 +205,19 @@ python npm_do_configure() { if has_shrinkwrap_file: foreach_dependencies(orig_shrinkwrap, _count_dependency, dev) foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev) + +# Manage Peer Dependencies +if has_shrinkwrap_file: +packages = orig_shrinkwrap.get("packages", {}) +peer_deps = packages.get("", {}).get("peerDependencies", {}) +package_runtime_dependencies = d.getVar("RDEPENDS:%s" % d.getVar("PN")) + +for peer_dep in peer_deps: +peer_dep_yocto_name = npm_package(peer_dep) +if peer_dep_yocto_name not in package_runtime_dependencies: +bb.warn(peer_dep + " is a peer dependencie that is not in RDEPENDS variable. " + +"Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" +% peer_dep_yocto_name) # Configure the main package with tempfile.TemporaryDirectory() as tmpdir: @@ -279,6 +294,9 @@ python npm_do_compile() { args.append(("target_arch", d.getVar("NPM_ARCH"))) args.append(("build-from-source", "true")) +# Don't install peer dependencies as they should be in RDEPENDS variable +args.append(("legacy-peer-deps", "true")) + # Pack and install the main package (tarball, _) = npm_pack(env, d.getVar("NPM_PACKAGE"), tmpdir) cmd = "npm install %s %s" % (shlex.quote(tarball), d.getVar("EXTRA_OENPM")) -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181962): https://lists.openembedded.org/g/openembedded-core/message/181962 Mute This Topic: https://lists.openembedded.org/mt/99230553/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [master][PATCH 1/6] recipetool: create: npm: Remove duplicate function to not have future conflicts
From: BELOUARGA Mohamed Npm packages do not have yocto friendly names. fore instance we can have names like "@example/npmPackage" npm fetcher has a function that convert these names to yocto friendly names. But in recipe tool we have an other function (duplicate). Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 14 +++--- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 3394a89970..e667a4d19b 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -13,6 +13,7 @@ import sys import tempfile import bb from bb.fetch2.npm import NpmEnvironment +from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from recipetool.create import RecipeHandler from recipetool.create import get_license_md5sums @@ -30,15 +31,6 @@ def tinfoil_init(instance): class NpmRecipeHandler(RecipeHandler): """Class to handle the npm recipe creation""" -@staticmethod -def _npm_name(name): -"""Generate a Yocto friendly npm name""" -name = re.sub("/", "-", name) -name = name.lower() -name = re.sub(r"[^\-a-z0-9]", "", name) -name = name.strip("-") -return name - @staticmethod def _get_registry(lines): """Get the registry value from the 'npm://registry' url""" @@ -143,7 +135,7 @@ class NpmRecipeHandler(RecipeHandler): # Handle the dependencies def _handle_dependency(name, params, deptree): -suffix = "-".join([self._npm_name(dep) for dep in deptree]) +suffix = "-".join([npm_package(dep) for dep in deptree]) destdirs = [os.path.join("node_modules", dep) for dep in deptree] destdir = os.path.join(*destdirs) packages["${PN}-" + suffix] = destdir @@ -173,7 +165,7 @@ class NpmRecipeHandler(RecipeHandler): if "name" not in data or "version" not in data: return False -extravalues["PN"] = self._npm_name(data["name"]) +extravalues["PN"] = npm_package(data["name"]) extravalues["PV"] = data["version"] if "description" in data: -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181961): https://lists.openembedded.org/g/openembedded-core/message/181961 Mute This Topic: https://lists.openembedded.org/mt/99230551/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
Re: [OE-core] [kirkstone][PATCH 1/5] recipetool: create: npm: Remove duplicate function to not have future conflicts
Yes, the same issues are present in master branch. But this series of patches won't work on master, it needs some adaptation. Because in kirkstone we have Nodejs 16.19.1 and in master we have Nodejs 18.16, and they generate shrinkwrap files that are slightly different. For Mickledore, I didn't test yet but I think that it will work like in the master branch. Note: these changes work only if my patch for bitbake is accepted: https://lists.openembedded.org/g/bitbake-devel/topic/kirkstone_patch_fetch2/99163598?p=,,,20,0,0,0::recentpostdate/sticky,,,20,2,0,99163598,previd%3D1685367798112436212,nextid%3D1683629533018906083=1685367798112436212=1683629533018906083 Best regards, BELOUARGA Mohamed -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181892): https://lists.openembedded.org/g/openembedded-core/message/181892 Mute This Topic: https://lists.openembedded.org/mt/99163838/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 3/5] recipetool: create: npm: Add support for the new format of the shrinkwrap file
From: BELOUARGA Mohamed The shrinkwrap file changed its format, but npm does not version this file. So we can use it properly. The actual changes make the script check if the npm package has dependencies in the actual shrinkwrap format. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 9 - 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index e667a4d19b..25e7ddb472 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -134,11 +134,10 @@ class NpmRecipeHandler(RecipeHandler): licfiles.append(os.path.relpath(readme, srctree)) # Handle the dependencies -def _handle_dependency(name, params, deptree): +def _handle_dependency(name, params, destdir): +deptree = destdir.split('node_modules/') suffix = "-".join([npm_package(dep) for dep in deptree]) -destdirs = [os.path.join("node_modules", dep) for dep in deptree] -destdir = os.path.join(*destdirs) -packages["${PN}-" + suffix] = destdir +packages["${PN}" + suffix] = destdir _licfiles_append_fallback_readme_files(destdir) with open(shrinkwrap_file, "r") as f: @@ -234,7 +233,7 @@ class NpmRecipeHandler(RecipeHandler): value = origvalue.replace("version=" + data["version"], "version=${PV}") value = value.replace("version=latest", "version=${PV}") values = [line.strip() for line in value.strip('\n').splitlines()] -if "dependencies" in shrinkwrap: +if "dependencies" in shrinkwrap.get("packages", {}).get("", {}): values.append(url_recipe) return values, None, 4, False -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181800): https://lists.openembedded.org/g/openembedded-core/message/181800 Mute This Topic: https://lists.openembedded.org/mt/99166270/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 5/5] classes: npm: Add support for the new format of the shrinkwrap file
From: BELOUARGA Mohamed 1 - Adapt do_configure to the new format of the shrinkwrap 2 - Remove useless function _npmsw_dependency_dict because the dictionnary is already given by npmsw:foreach_dependencies 3 - Rename arguments of callback functions Signed-off-by: BELOUARGA Mohamed --- meta/classes/npm.bbclass | 27 ++- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclass index abc4c6f92b..6899a64909 100644 --- a/meta/classes/npm.bbclass +++ b/meta/classes/npm.bbclass @@ -129,22 +129,6 @@ python npm_do_configure() { sha512 = bb.utils.sha512_file(tarball) return "sha512-" + base64.b64encode(bytes.fromhex(sha512)).decode() -def _npmsw_dependency_dict(orig, deptree): -""" -Return the sub dictionary in the 'orig' dictionary corresponding to the -'deptree' dependency tree. This function follows the shrinkwrap file -format. -""" -ptr = orig -for dep in deptree: -if "dependencies" not in ptr: -ptr["dependencies"] = {} -ptr = ptr["dependencies"] -if dep not in ptr: -ptr[dep] = {} -ptr = ptr[dep] -return ptr - # Manage the manifest file and shrinkwrap files orig_manifest_file = d.expand("${S}/package.json") orig_shrinkwrap_file = d.expand("${S}/npm-shrinkwrap.json") @@ -176,24 +160,25 @@ python npm_do_configure() { progress_total = 1 # also count the main package progress_done = 0 -def _count_dependency(name, params, deptree): +def _count_dependency(name, params, destsuffix): nonlocal progress_total progress_total += 1 -def _cache_dependency(name, params, deptree): -destsubdirs = [os.path.join("node_modules", dep) for dep in deptree] -destsuffix = os.path.join(*destsubdirs) +def _cache_dependency(name, params, destsuffix): with tempfile.TemporaryDirectory() as tmpdir: # Add the dependency to the npm cache destdir = os.path.join(d.getVar("S"), destsuffix) (tarball, pkg) = npm_pack(env, destdir, tmpdir) _npm_cache_add(tarball, pkg) # Add its signature to the cached shrinkwrap -dep = _npmsw_dependency_dict(cached_shrinkwrap, deptree) +dep = params dep["version"] = pkg['version'] dep["integrity"] = _npm_integrity(tarball) if params.get("dev", False): dep["dev"] = True +if "dependencies" not in cached_shrinkwrap: +cached_shrinkwrap["dependencies"] = {} +cached_shrinkwrap["dependencies"][name] = dep # Display progress nonlocal progress_done progress_done += 1 -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181802): https://lists.openembedded.org/g/openembedded-core/message/181802 Mute This Topic: https://lists.openembedded.org/mt/99166272/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 4/5] recipetool: create: npm: Add support to handle peer dependencies
From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions: - Before NPM 3: NPM installs automatically peer dependencies - Between NPM 3 and 7: NPM shows a warning about peer dependencies - After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 20 1 file changed, 20 insertions(+) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 25e7ddb472..113a89f6a6 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -146,6 +146,23 @@ class NpmRecipeHandler(RecipeHandler): foreach_dependencies(shrinkwrap, _handle_dependency, dev) return licfiles, packages + +# Handle the peer dependencies +def _handle_peer_dependency(self, shrinkwrap_file): +"""Check if package has peer dependencies and show warning if it is the case""" +with open(shrinkwrap_file, "r") as f: +shrinkwrap = json.load(f) + +packages = shrinkwrap.get("packages", {}) +peer_deps = packages.get("", {}).get("peerDependencies", {}) + +for peer_dep in peer_deps: +peer_dep_yocto_name = npm_package(peer_dep) +bb.warn(peer_dep + " is a peer dependencie of the actual package. " + +"Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" +% peer_dep_yocto_name) + + def process(self, srctree, classes, lines_before, lines_after, handled, extravalues): """Handle the npm recipe creation""" @@ -283,6 +300,9 @@ class NpmRecipeHandler(RecipeHandler): classes.append("npm") handled.append("buildsystem") +# Check if package has peer dependencies and inform the user +self._handle_peer_dependency(shrinkwrap_file) + return True def register_recipe_handlers(handlers): -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181801): https://lists.openembedded.org/g/openembedded-core/message/181801 Mute This Topic: https://lists.openembedded.org/mt/99166271/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 2/5] classes: npm: Handle peer dependencies for npm packages
From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions: - Before NPM 3: NPM installs automatically peer dependencies - Between NPM 3 and 7: NPM shows a warning about peer dependencies - After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- meta/classes/npm.bbclass | 18 ++ 1 file changed, 18 insertions(+) diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclass index 8379c7b988..abc4c6f92b 100644 --- a/meta/classes/npm.bbclass +++ b/meta/classes/npm.bbclass @@ -108,6 +108,7 @@ python npm_do_configure() { import tempfile from bb.fetch2.npm import NpmEnvironment from bb.fetch2.npm import npm_unpack +from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from bb.progress import OutOfProgressHandler from oe.npm_registry import NpmRegistry @@ -168,6 +169,7 @@ python npm_do_configure() { if has_shrinkwrap_file: cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap) cached_shrinkwrap.pop("dependencies", None) + cached_shrinkwrap["packages"][""].pop("peerDependencies", None) # Manage the dependencies progress = OutOfProgressHandler(d, r"^(\d+)/(\d+)$") @@ -202,6 +204,19 @@ python npm_do_configure() { if has_shrinkwrap_file: foreach_dependencies(orig_shrinkwrap, _count_dependency, dev) foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev) + +# Manage Peer Dependencies +if has_shrinkwrap_file: +packages = orig_shrinkwrap.get("packages", {}) +peer_deps = packages.get("", {}).get("peerDependencies", {}) +package_runtime_dependencies = d.getVar("RDEPENDS:%s" % d.getVar("PN")) + +for peer_dep in peer_deps: +peer_dep_yocto_name = npm_package(peer_dep) +if peer_dep_yocto_name not in package_runtime_dependencies: +bb.warn(peer_dep + " is a peer dependencie that is not in RDEPENDS variable. " + +"Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" +% peer_dep_yocto_name) # Configure the main package with tempfile.TemporaryDirectory() as tmpdir: @@ -277,6 +292,9 @@ python npm_do_compile() { args.append(("target_arch", d.getVar("NPM_ARCH"))) args.append(("build-from-source", "true")) +# Don't install peer dependencies as they should be in RDEPENDS variable +args.append(("legacy-peer-deps", "true")) + # Pack and install the main package (tarball, _) = npm_pack(env, d.getVar("NPM_PACKAGE"), tmpdir) cmd = "npm install %s %s" % (shlex.quote(tarball), d.getVar("EXTRA_OENPM")) -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181799): https://lists.openembedded.org/g/openembedded-core/message/181799 Mute This Topic: https://lists.openembedded.org/mt/99166269/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 1/5] recipetool: create: npm: Remove duplicate function to not have future conflicts
From: BELOUARGA Mohamed Npm packages do not have yocto friendly names. fore instance we can have names like "@example/npmPackage" npm fetcher has a function that convert these names to yocto friendly names. But in recipe tool we have an other function (duplicate). Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 14 +++--- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 3394a89970..e667a4d19b 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -13,6 +13,7 @@ import sys import tempfile import bb from bb.fetch2.npm import NpmEnvironment +from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from recipetool.create import RecipeHandler from recipetool.create import get_license_md5sums @@ -30,15 +31,6 @@ def tinfoil_init(instance): class NpmRecipeHandler(RecipeHandler): """Class to handle the npm recipe creation""" -@staticmethod -def _npm_name(name): -"""Generate a Yocto friendly npm name""" -name = re.sub("/", "-", name) -name = name.lower() -name = re.sub(r"[^\-a-z0-9]", "", name) -name = name.strip("-") -return name - @staticmethod def _get_registry(lines): """Get the registry value from the 'npm://registry' url""" @@ -143,7 +135,7 @@ class NpmRecipeHandler(RecipeHandler): # Handle the dependencies def _handle_dependency(name, params, deptree): -suffix = "-".join([self._npm_name(dep) for dep in deptree]) +suffix = "-".join([npm_package(dep) for dep in deptree]) destdirs = [os.path.join("node_modules", dep) for dep in deptree] destdir = os.path.join(*destdirs) packages["${PN}-" + suffix] = destdir @@ -173,7 +165,7 @@ class NpmRecipeHandler(RecipeHandler): if "name" not in data or "version" not in data: return False -extravalues["PN"] = self._npm_name(data["name"]) +extravalues["PN"] = npm_package(data["name"]) extravalues["PV"] = data["version"] if "description" in data: -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181798): https://lists.openembedded.org/g/openembedded-core/message/181798 Mute This Topic: https://lists.openembedded.org/mt/99163838/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 5/5] classes: npm: Add support for the new format of the shrinkwrap file
From: BELOUARGA Mohamed 1 - Adapt do_configure to the new format of the shrinkwrap 2 - Remove useless function _npmsw_dependency_dict because the dictionnary is already given by npmsw:foreach_dependencies 3 - Rename arguments of callback functions Signed-off-by: BELOUARGA Mohamed --- meta/classes/npm.bbclass | 27 ++- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclass index abc4c6f92b..6899a64909 100644 --- a/meta/classes/npm.bbclass +++ b/meta/classes/npm.bbclass @@ -129,22 +129,6 @@ python npm_do_configure() { sha512 = bb.utils.sha512_file(tarball) return "sha512-" + base64.b64encode(bytes.fromhex(sha512)).decode() -def _npmsw_dependency_dict(orig, deptree): -""" -Return the sub dictionary in the 'orig' dictionary corresponding to the -'deptree' dependency tree. This function follows the shrinkwrap file -format. -""" -ptr = orig -for dep in deptree: -if "dependencies" not in ptr: -ptr["dependencies"] = {} -ptr = ptr["dependencies"] -if dep not in ptr: -ptr[dep] = {} -ptr = ptr[dep] -return ptr - # Manage the manifest file and shrinkwrap files orig_manifest_file = d.expand("${S}/package.json") orig_shrinkwrap_file = d.expand("${S}/npm-shrinkwrap.json") @@ -176,24 +160,25 @@ python npm_do_configure() { progress_total = 1 # also count the main package progress_done = 0 -def _count_dependency(name, params, deptree): +def _count_dependency(name, params, destsuffix): nonlocal progress_total progress_total += 1 -def _cache_dependency(name, params, deptree): -destsubdirs = [os.path.join("node_modules", dep) for dep in deptree] -destsuffix = os.path.join(*destsubdirs) +def _cache_dependency(name, params, destsuffix): with tempfile.TemporaryDirectory() as tmpdir: # Add the dependency to the npm cache destdir = os.path.join(d.getVar("S"), destsuffix) (tarball, pkg) = npm_pack(env, destdir, tmpdir) _npm_cache_add(tarball, pkg) # Add its signature to the cached shrinkwrap -dep = _npmsw_dependency_dict(cached_shrinkwrap, deptree) +dep = params dep["version"] = pkg['version'] dep["integrity"] = _npm_integrity(tarball) if params.get("dev", False): dep["dev"] = True +if "dependencies" not in cached_shrinkwrap: +cached_shrinkwrap["dependencies"] = {} +cached_shrinkwrap["dependencies"][name] = dep # Display progress nonlocal progress_done progress_done += 1 -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181795): https://lists.openembedded.org/g/openembedded-core/message/181795 Mute This Topic: https://lists.openembedded.org/mt/99163842/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 4/5] recipetool: create: npm: Add support to handle peer dependencies
From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions: - Before NPM 3: NPM installs automatically peer dependencies - Between NPM 3 and 7: NPM shows a warning about peer dependencies - After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 20 1 file changed, 20 insertions(+) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 25e7ddb472..113a89f6a6 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -146,6 +146,23 @@ class NpmRecipeHandler(RecipeHandler): foreach_dependencies(shrinkwrap, _handle_dependency, dev) return licfiles, packages + +# Handle the peer dependencies +def _handle_peer_dependency(self, shrinkwrap_file): +"""Check if package has peer dependencies and show warning if it is the case""" +with open(shrinkwrap_file, "r") as f: +shrinkwrap = json.load(f) + +packages = shrinkwrap.get("packages", {}) +peer_deps = packages.get("", {}).get("peerDependencies", {}) + +for peer_dep in peer_deps: +peer_dep_yocto_name = npm_package(peer_dep) +bb.warn(peer_dep + " is a peer dependencie of the actual package. " + +"Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" +% peer_dep_yocto_name) + + def process(self, srctree, classes, lines_before, lines_after, handled, extravalues): """Handle the npm recipe creation""" @@ -283,6 +300,9 @@ class NpmRecipeHandler(RecipeHandler): classes.append("npm") handled.append("buildsystem") +# Check if package has peer dependencies and inform the user +self._handle_peer_dependency(shrinkwrap_file) + return True def register_recipe_handlers(handlers): -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181794): https://lists.openembedded.org/g/openembedded-core/message/181794 Mute This Topic: https://lists.openembedded.org/mt/99163841/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 3/5] recipetool: create: npm: Add support for the new format of the shrinkwrap file
From: BELOUARGA Mohamed The shrinkwrap file changed its format, but npm does not version this file. So we can use it properly. The actual changes make the script check if the npm package has dependencies in the actual shrinkwrap format. Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 9 - 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index e667a4d19b..25e7ddb472 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -134,11 +134,10 @@ class NpmRecipeHandler(RecipeHandler): licfiles.append(os.path.relpath(readme, srctree)) # Handle the dependencies -def _handle_dependency(name, params, deptree): +def _handle_dependency(name, params, destdir): +deptree = destdir.split('node_modules/') suffix = "-".join([npm_package(dep) for dep in deptree]) -destdirs = [os.path.join("node_modules", dep) for dep in deptree] -destdir = os.path.join(*destdirs) -packages["${PN}-" + suffix] = destdir +packages["${PN}" + suffix] = destdir _licfiles_append_fallback_readme_files(destdir) with open(shrinkwrap_file, "r") as f: @@ -234,7 +233,7 @@ class NpmRecipeHandler(RecipeHandler): value = origvalue.replace("version=" + data["version"], "version=${PV}") value = value.replace("version=latest", "version=${PV}") values = [line.strip() for line in value.strip('\n').splitlines()] -if "dependencies" in shrinkwrap: +if "dependencies" in shrinkwrap.get("packages", {}).get("", {}): values.append(url_recipe) return values, None, 4, False -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181793): https://lists.openembedded.org/g/openembedded-core/message/181793 Mute This Topic: https://lists.openembedded.org/mt/99163840/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 2/5] classes: npm: Handle peer dependencies for npm packages
From: BELOUARGA Mohamed NPM changed its manner to handle peer dependencies over its versions: - Before NPM 3: NPM installs automatically peer dependencies - Between NPM 3 and 7: NPM shows a warning about peer dependencies - After NPM 3: NPM reworked its manner how to handle peer dependencies The shrinkwrap doesn't have the parameters of the peer dependencies, so we cannot fetch them. in the same time peer dependencies are not direct dependencies, they should be installed as run time dependencies. Signed-off-by: BELOUARGA Mohamed --- meta/classes/npm.bbclass | 18 ++ 1 file changed, 18 insertions(+) diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclass index 8379c7b988..abc4c6f92b 100644 --- a/meta/classes/npm.bbclass +++ b/meta/classes/npm.bbclass @@ -108,6 +108,7 @@ python npm_do_configure() { import tempfile from bb.fetch2.npm import NpmEnvironment from bb.fetch2.npm import npm_unpack +from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from bb.progress import OutOfProgressHandler from oe.npm_registry import NpmRegistry @@ -168,6 +169,7 @@ python npm_do_configure() { if has_shrinkwrap_file: cached_shrinkwrap = copy.deepcopy(orig_shrinkwrap) cached_shrinkwrap.pop("dependencies", None) + cached_shrinkwrap["packages"][""].pop("peerDependencies", None) # Manage the dependencies progress = OutOfProgressHandler(d, r"^(\d+)/(\d+)$") @@ -202,6 +204,19 @@ python npm_do_configure() { if has_shrinkwrap_file: foreach_dependencies(orig_shrinkwrap, _count_dependency, dev) foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev) + +# Manage Peer Dependencies +if has_shrinkwrap_file: +packages = orig_shrinkwrap.get("packages", {}) +peer_deps = packages.get("", {}).get("peerDependencies", {}) +package_runtime_dependencies = d.getVar("RDEPENDS:%s" % d.getVar("PN")) + +for peer_dep in peer_deps: +peer_dep_yocto_name = npm_package(peer_dep) +if peer_dep_yocto_name not in package_runtime_dependencies: +bb.warn(peer_dep + " is a peer dependencie that is not in RDEPENDS variable. " + +"Please add this peer dependencie to the RDEPENDS variable as %s and generate its recipe with devtool" +% peer_dep_yocto_name) # Configure the main package with tempfile.TemporaryDirectory() as tmpdir: @@ -277,6 +292,9 @@ python npm_do_compile() { args.append(("target_arch", d.getVar("NPM_ARCH"))) args.append(("build-from-source", "true")) +# Don't install peer dependencies as they should be in RDEPENDS variable +args.append(("legacy-peer-deps", "true")) + # Pack and install the main package (tarball, _) = npm_pack(env, d.getVar("NPM_PACKAGE"), tmpdir) cmd = "npm install %s %s" % (shlex.quote(tarball), d.getVar("EXTRA_OENPM")) -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181792): https://lists.openembedded.org/g/openembedded-core/message/181792 Mute This Topic: https://lists.openembedded.org/mt/99163839/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
[OE-core] [kirkstone][PATCH 1/5] recipetool: create: npm: Remove duplicate function to not have future conflicts
From: BELOUARGA Mohamed Npm packages do not have yocto friendly names. fore instance we can have names like "@example/npmPackage" npm fetcher has a function that convert these names to yocto friendly names. But in recipe tool we have an other function (duplicate). Signed-off-by: BELOUARGA Mohamed --- scripts/lib/recipetool/create_npm.py | 14 +++--- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py index 3394a89970..e667a4d19b 100644 --- a/scripts/lib/recipetool/create_npm.py +++ b/scripts/lib/recipetool/create_npm.py @@ -13,6 +13,7 @@ import sys import tempfile import bb from bb.fetch2.npm import NpmEnvironment +from bb.fetch2.npm import npm_package from bb.fetch2.npmsw import foreach_dependencies from recipetool.create import RecipeHandler from recipetool.create import get_license_md5sums @@ -30,15 +31,6 @@ def tinfoil_init(instance): class NpmRecipeHandler(RecipeHandler): """Class to handle the npm recipe creation""" -@staticmethod -def _npm_name(name): -"""Generate a Yocto friendly npm name""" -name = re.sub("/", "-", name) -name = name.lower() -name = re.sub(r"[^\-a-z0-9]", "", name) -name = name.strip("-") -return name - @staticmethod def _get_registry(lines): """Get the registry value from the 'npm://registry' url""" @@ -143,7 +135,7 @@ class NpmRecipeHandler(RecipeHandler): # Handle the dependencies def _handle_dependency(name, params, deptree): -suffix = "-".join([self._npm_name(dep) for dep in deptree]) +suffix = "-".join([npm_package(dep) for dep in deptree]) destdirs = [os.path.join("node_modules", dep) for dep in deptree] destdir = os.path.join(*destdirs) packages["${PN}-" + suffix] = destdir @@ -173,7 +165,7 @@ class NpmRecipeHandler(RecipeHandler): if "name" not in data or "version" not in data: return False -extravalues["PN"] = self._npm_name(data["name"]) +extravalues["PN"] = npm_package(data["name"]) extravalues["PV"] = data["version"] if "description" in data: -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#181791): https://lists.openembedded.org/g/openembedded-core/message/181791 Mute This Topic: https://lists.openembedded.org/mt/99163838/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-