diff options
Diffstat (limited to 'scripts/lib/recipetool/create_npm.py')
| -rw-r--r-- | scripts/lib/recipetool/create_npm.py | 27 |
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 | |||
| 21 | import tempfile | 21 | import tempfile |
| 22 | import shutil | 22 | import shutil |
| 23 | import json | 23 | import json |
| 24 | from recipetool.create import RecipeHandler, split_pkg_licenses, handle_license_vars, check_npm | 24 | from recipetool.create import RecipeHandler, split_pkg_licenses, handle_license_vars |
| 25 | 25 | ||
| 26 | logger = logging.getLogger('recipetool') | 26 | logger = logging.getLogger('recipetool') |
| 27 | 27 | ||
| @@ -36,6 +36,27 @@ def tinfoil_init(instance): | |||
| 36 | class NpmRecipeHandler(RecipeHandler): | 36 | class 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]) |
