summaryrefslogtreecommitdiffstats
path: root/scripts/lib/recipetool/create_npm.py
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-07-20 16:48:13 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-07-21 08:44:25 +0100
commit0d72748e81186d38511cd691521cbd9fa7336879 (patch)
treef598056e76017584a69bb0882af47383a75e55b4 /scripts/lib/recipetool/create_npm.py
parentb5e42005e96d0c3ed5da72007f6c41722332afe6 (diff)
downloadpoky-0d72748e81186d38511cd691521cbd9fa7336879.tar.gz
recipetool: create: refactor code for ensuring npm is available
Across devtool and recipetool we had an ugly set of code for ensuring that we can call an npm binary, and much of that ugliness was a result of not being able to run build tasks when tinfoil was active - if recipetool found that npm was required and we didn't know beforehand (e.g. we're fetching from a plain git repository as opposed to an npm:// URL where it's obvious) then it had to exit and return a special result code, so that devtool knew it needed to build nodejs-native and then call recipetool again. Now that we are using real build tasks to fetch and unpack, we can drop most of this and move the code to the one place where it's still needed (i.e. create_npm where we potentially have to deal with node.js code in a plain source repository). (From OE-Core rev: 8450de16ddb02d863204b411a94c6d84e0f88817) 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/create_npm.py')
-rw-r--r--scripts/lib/recipetool/create_npm.py27
1 files changed, 25 insertions, 2 deletions
diff --git a/scripts/lib/recipetool/create_npm.py b/scripts/lib/recipetool/create_npm.py
index ba7e39a406..885d5438e3 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, check_npm 24from recipetool.create import RecipeHandler, split_pkg_licenses, handle_license_vars
25 25
26logger = logging.getLogger('recipetool') 26logger = logging.getLogger('recipetool')
27 27
@@ -36,6 +36,27 @@ def tinfoil_init(instance):
36class NpmRecipeHandler(RecipeHandler): 36class NpmRecipeHandler(RecipeHandler):
37 lockdownpath = None 37 lockdownpath = None
38 38
39 def _ensure_npm(self, fixed_setup=False):
40 if not tinfoil.recipes_parsed:
41 tinfoil.parse_recipes()
42 try:
43 rd = tinfoil.parse_recipe('nodejs-native')
44 except bb.providers.NoProvider:
45 if fixed_setup:
46 msg = 'nodejs-native is required for npm but is not available within this SDK'
47 else:
48 msg = 'nodejs-native is required for npm but is not available - you will likely need to add a layer that provides nodejs'
49 logger.error(msg)
50 return None
51 bindir = rd.getVar('STAGING_BINDIR_NATIVE')
52 npmpath = os.path.join(bindir, 'npm')
53 if not os.path.exists(npmpath):
54 tinfoil.build_targets('nodejs-native', 'addto_recipe_sysroot')
55 if not os.path.exists(npmpath):
56 logger.error('npm required to process specified source, but nodejs-native did not seem to populate it')
57 return None
58 return bindir
59
39 def _handle_license(self, data): 60 def _handle_license(self, data):
40 ''' 61 '''
41 Handle the license value from an npm package.json file 62 Handle the license value from an npm package.json file
@@ -189,7 +210,9 @@ class NpmRecipeHandler(RecipeHandler):
189 files = RecipeHandler.checkfiles(srctree, ['package.json']) 210 files = RecipeHandler.checkfiles(srctree, ['package.json'])
190 if files: 211 if files:
191 d = bb.data.createCopy(tinfoil.config_data) 212 d = bb.data.createCopy(tinfoil.config_data)
192 npm_bindir = check_npm(tinfoil, self._devtool) 213 npm_bindir = self._ensure_npm()
214 if not npm_bindir:
215 sys.exit(14)
193 d.prependVar('PATH', '%s:' % npm_bindir) 216 d.prependVar('PATH', '%s:' % npm_bindir)
194 217
195 data = read_package_json(files[0]) 218 data = read_package_json(files[0])