summaryrefslogtreecommitdiffstats
path: root/scripts/lib/recipetool
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2016-10-04 22:31:16 +1300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-10-05 10:10:11 +0100
commit18caacae069a025662fcdd96b846857fc3107e41 (patch)
tree3fbd57297f2548b45ee0a87ff80dfb79941674fe /scripts/lib/recipetool
parentee697d84ba2a83b196bd3b927a0b6047464f5292 (diff)
downloadpoky-18caacae069a025662fcdd96b846857fc3107e41.tar.gz
devtool: add: build nodejs-native if npm is needed and not available
If the user runs devtool add on an npm:// URL (or source tree that uses node.js), and npm is not available, just build nodejs-native instead of telling the user they need to do it; if that fails because there isn't any such recipe (which would be the default, since it's not in OE-Core) then produce a slightly more readable error message hinting at what the user needs to do. Note that this forces the use of nodejs-native rather than npm on the host - this makes sense for two reasons: (1) we need it to be compatible with nodejs for the target, and (2) we have to have a recipe for that anyway, so allowing you to avoid having a recipe for the native version isn't really beneficial. There's a bit of a hack in here in order to allow this - for node.js sources that aren't fetched via npm we don't know that they are that until we've fetched and unpacked them, by which time we're inside recipetool and have an active tinfoil instance that will prevent bitbake being run. To avoid this being an issue, we allow recipetool to get to the point where we know we need npm and then exit with a specific exit code, at which point devtool can try to build it and then if that succeeds, it will re-execute recipetool. This is definitely not ideal, but it can't really be refactored and done properly until we do the tinfoil2 refactoring; in the mean time though we still want to be helpful to the user. Fixes [YOCTO #10337]. (From OE-Core rev: f40662bde5aab158c4e4c3c3ff5e68665a4194a5) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/recipetool')
-rw-r--r--scripts/lib/recipetool/create.py10
-rw-r--r--scripts/lib/recipetool/create_npm.py4
2 files changed, 9 insertions, 5 deletions
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 9b31fe92d7..d427d32062 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -406,10 +406,7 @@ def create_recipe(args):
406 srctree = tempsrc 406 srctree = tempsrc
407 if fetchuri.startswith('npm://'): 407 if fetchuri.startswith('npm://'):
408 # Check if npm is available 408 # Check if npm is available
409 npm = bb.utils.which(tinfoil.config_data.getVar('PATH', True), 'npm') 409 check_npm(tinfoil.config_data)
410 if not npm:
411 logger.error('npm:// URL requested but npm is not available - you need to either build nodejs-native or install npm using your package manager')
412 sys.exit(1)
413 logger.info('Fetching %s...' % srcuri) 410 logger.info('Fetching %s...' % srcuri)
414 try: 411 try:
415 checksums = scriptutils.fetch_uri(tinfoil.config_data, fetchuri, srctree, srcrev) 412 checksums = scriptutils.fetch_uri(tinfoil.config_data, fetchuri, srctree, srcrev)
@@ -1076,6 +1073,11 @@ def convert_rpm_xml(xmlfile):
1076 return values 1073 return values
1077 1074
1078 1075
1076def check_npm(d):
1077 if not os.path.exists(os.path.join(d.getVar('STAGING_BINDIR_NATIVE', True), 'npm')):
1078 logger.error('npm required to process specified source, but npm is not available - you need to build nodejs-native first')
1079 sys.exit(14)
1080
1079def register_commands(subparsers): 1081def register_commands(subparsers):
1080 parser_create = subparsers.add_parser('create', 1082 parser_create = subparsers.add_parser('create',
1081 help='Create a new recipe', 1083 help='Create a new recipe',
diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py
index e794614978..7bb844cb0c 100644
--- a/scripts/lib/recipetool/create_npm.py
+++ b/scripts/lib/recipetool/create_npm.py
@@ -21,7 +21,7 @@ import subprocess
21import tempfile 21import tempfile
22import shutil 22import shutil
23import json 23import json
24from recipetool.create import RecipeHandler, split_pkg_licenses, handle_license_vars 24from recipetool.create import RecipeHandler, split_pkg_licenses, handle_license_vars, check_npm
25 25
26logger = logging.getLogger('recipetool') 26logger = logging.getLogger('recipetool')
27 27
@@ -157,6 +157,8 @@ class NpmRecipeHandler(RecipeHandler):
157 157
158 files = RecipeHandler.checkfiles(srctree, ['package.json']) 158 files = RecipeHandler.checkfiles(srctree, ['package.json'])
159 if files: 159 if files:
160 check_npm(tinfoil.config_data)
161
160 data = read_package_json(files[0]) 162 data = read_package_json(files[0])
161 if 'name' in data and 'version' in data: 163 if 'name' in data and 'version' in data:
162 extravalues['PN'] = data['name'] 164 extravalues['PN'] = data['name']