summaryrefslogtreecommitdiffstats
path: root/scripts/lib/recipetool
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/recipetool')
-rw-r--r--scripts/lib/recipetool/create.py21
-rw-r--r--scripts/lib/recipetool/create_npm.py27
2 files changed, 26 insertions, 22 deletions
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 2a6a28ba91..359eb9adfc 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -1152,22 +1152,6 @@ def convert_rpm_xml(xmlfile):
1152 return values 1152 return values
1153 1153
1154 1154
1155def check_npm(tinfoil, debugonly=False):
1156 try:
1157 rd = tinfoil.parse_recipe('nodejs-native')
1158 except bb.providers.NoProvider:
1159 # We still conditionally show the message and exit with the special
1160 # return code, otherwise we can't show the proper message for eSDK
1161 # users
1162 log_error_cond('nodejs-native is required for npm but is not available - you will likely need to add a layer that provides nodejs', debugonly)
1163 sys.exit(14)
1164 bindir = rd.getVar('STAGING_BINDIR_NATIVE')
1165 npmpath = os.path.join(bindir, 'npm')
1166 if not os.path.exists(npmpath):
1167 log_error_cond('npm required to process specified source, but npm is not available - you need to run bitbake -c addto_recipe_sysroot nodejs-native first', debugonly)
1168 sys.exit(14)
1169 return bindir
1170
1171def register_commands(subparsers): 1155def register_commands(subparsers):
1172 parser_create = subparsers.add_parser('create', 1156 parser_create = subparsers.add_parser('create',
1173 help='Create a new recipe', 1157 help='Create a new recipe',
@@ -1185,8 +1169,5 @@ def register_commands(subparsers):
1185 parser_create.add_argument('--keep-temp', action="store_true", help='Keep temporary directory (for debugging)') 1169 parser_create.add_argument('--keep-temp', action="store_true", help='Keep temporary directory (for debugging)')
1186 parser_create.add_argument('--fetch-dev', action="store_true", help='For npm, also fetch devDependencies') 1170 parser_create.add_argument('--fetch-dev', action="store_true", help='For npm, also fetch devDependencies')
1187 parser_create.add_argument('--devtool', action="store_true", help=argparse.SUPPRESS) 1171 parser_create.add_argument('--devtool', action="store_true", help=argparse.SUPPRESS)
1188 # FIXME I really hate having to set parserecipes for this, but given we may need 1172 parser_create.set_defaults(func=create_recipe)
1189 # to call into npm (and we don't know in advance if we will or not) and in order
1190 # to do so we need to know npm's recipe sysroot path, there's not much alternative
1191 parser_create.set_defaults(func=create_recipe, parserecipes=True)
1192 1173
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])