1
0
mirror of https://git.yoctoproject.org/poky synced 2026-07-17 04:07:06 +00:00

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>
This commit is contained in:
Paul Eggleton
2017-07-20 16:48:13 +02:00
committed by Richard Purdie
parent b5e42005e9
commit 0d72748e81
4 changed files with 34 additions and 79 deletions
-31
View File
@@ -261,34 +261,3 @@ def get_bbclassextend_targets(recipefile, pn):
targets.append('%s-%s' % (pn, variant))
return targets
def ensure_npm(config, basepath, fixed_setup=False, check_exists=True):
"""
Ensure that npm is available and either build it or show a
reasonable error message
"""
if check_exists:
tinfoil = setup_tinfoil(config_only=False, basepath=basepath)
try:
rd = tinfoil.parse_recipe('nodejs-native')
nativepath = rd.getVar('STAGING_BINDIR_NATIVE')
finally:
tinfoil.shutdown()
npmpath = os.path.join(nativepath, 'npm')
build_npm = not os.path.exists(npmpath)
else:
build_npm = True
if build_npm:
logger.info('Building nodejs-native')
try:
exec_build_env_command(config.init_path, basepath,
'bitbake -q nodejs-native -c addto_recipe_sysroot', watch=True)
except bb.process.ExecutionError as e:
if "Nothing PROVIDES 'nodejs-native'" in e.stdout:
if fixed_setup:
msg = 'nodejs-native is required for npm but is not available within this SDK'
else:
msg = 'nodejs-native is required for npm but is not available - you will likely need to add a layer that provides nodejs'
raise DevtoolError(msg)
else:
raise