From: Stefan Herbrechtsmeier <stefan.herbrechtsme...@weidmueller.com>

Use the README as license fallback if a license file is missing. Use the
linenumbers parameter of get_license_md5sums function to determine the
license text inside the README.

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsme...@weidmueller.com>

---

Changes in v2:
- Rework to add licenses to package LICENSE:${PN} and LIC_FILES_CHKSUM

 scripts/lib/recipetool/create_npm.py | 52 +++++++++++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)

diff --git a/scripts/lib/recipetool/create_npm.py 
b/scripts/lib/recipetool/create_npm.py
index c939780931..3394a89970 100644
--- a/scripts/lib/recipetool/create_npm.py
+++ b/scripts/lib/recipetool/create_npm.py
@@ -6,6 +6,7 @@
 """Recipe creation tool - npm module support plugin"""
 
 import json
+import logging
 import os
 import re
 import sys
@@ -14,8 +15,10 @@ import bb
 from bb.fetch2.npm import NpmEnvironment
 from bb.fetch2.npmsw import foreach_dependencies
 from recipetool.create import RecipeHandler
+from recipetool.create import get_license_md5sums
 from recipetool.create import guess_license
 from recipetool.create import split_pkg_licenses
+logger = logging.getLogger('recipetool')
 
 TINFOIL = None
 
@@ -115,17 +118,36 @@ class NpmRecipeHandler(RecipeHandler):
 
     def _handle_licenses(self, srctree, shrinkwrap_file, dev):
         """Return the extra license files and the list of packages"""
+        licfiles = []
         packages = {}
 
         # Handle the parent package
         packages["${PN}"] = ""
 
+        def _licfiles_append_fallback_readme_files(destdir):
+            """Append README files as fallback to license files if a license 
files is missing"""
+
+            fallback = True
+            readmes = []
+            basedir = os.path.join(srctree, destdir)
+            for fn in os.listdir(basedir):
+                upper = fn.upper()
+                if upper.startswith("README"):
+                    fullpath = os.path.join(basedir, fn)
+                    readmes.append(fullpath)
+                if upper.startswith("COPYING") or "LICENCE" in upper or 
"LICENSE" in upper:
+                    fallback = False
+            if fallback:
+                for readme in readmes:
+                    licfiles.append(os.path.relpath(readme, srctree))
+
         # Handle the dependencies
         def _handle_dependency(name, params, deptree):
             suffix = "-".join([self._npm_name(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
+            _licfiles_append_fallback_readme_files(destdir)
 
         with open(shrinkwrap_file, "r") as f:
             shrinkwrap = json.load(f)
@@ -237,7 +259,35 @@ class NpmRecipeHandler(RecipeHandler):
 
         bb.note("Handling licences ...")
         (licfiles, packages) = self._handle_licenses(srctree, shrinkwrap_file, 
dev)
-        split_pkg_licenses(guess_license(srctree, d), packages, lines_after, 
[])
+
+        def _guess_odd_license(licfiles):
+            import bb
+
+            md5sums = get_license_md5sums(d, linenumbers=True)
+
+            chksums = []
+            licenses = []
+            for licfile in licfiles:
+                f = os.path.join(srctree, licfile)
+                md5value = bb.utils.md5_file(f)
+                (license, beginline, endline, md5) = md5sums.get(md5value,
+                    (None, "", "", ""))
+                if not license:
+                    license = "Unknown"
+                    logger.info("Please add the following line for '%s' to a "
+                        "'lib/recipetool/licenses.csv' and replace `Unknown`, "
+                        "`X`, `Y` and `MD5` with the license, begin line, "
+                        "end line and partial MD5 checksum:\n" \
+                        "%s,Unknown,X,Y,MD5" % (licfile, md5value))
+                chksums.append("file://%s%s%s;md5=%s" % (licfile,
+                    ";beginline=%s" % (beginline) if beginline else "",
+                    ";endline=%s" % (endline) if endline else "",
+                    md5 if md5 else md5value))
+                licenses.append((license, licfile, md5value))
+            return (licenses, chksums)
+
+        (licenses, extravalues["LIC_FILES_CHKSUM"]) = 
_guess_odd_license(licfiles)
+        split_pkg_licenses([*licenses, *guess_license(srctree, d)], packages, 
lines_after)
 
         classes.append("npm")
         handled.append("buildsystem")
-- 
2.20.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#156754): 
https://lists.openembedded.org/g/openembedded-core/message/156754
Mute This Topic: https://lists.openembedded.org/mt/86165232/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to