summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/bldcontrol/localhostbecontroller.py')
-rw-r--r--bitbake/lib/toaster/bldcontrol/localhostbecontroller.py144
1 files changed, 75 insertions, 69 deletions
diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
index 18870d9612..62e62fe19e 100644
--- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
+++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
@@ -201,82 +201,88 @@ class LocalhostBEController(BuildEnvironmentController):
201 logger.debug("localhostbecontroller: current layer list %s " % pformat(layerlist)) 201 logger.debug("localhostbecontroller: current layer list %s " % pformat(layerlist))
202 202
203 # 5. create custom layer and add custom recipes to it 203 # 5. create custom layer and add custom recipes to it
204 layerpath = os.path.join(self.be.builddir,
205 CustomImageRecipe.LAYER_NAME)
206 for target in targets: 204 for target in targets:
207 try: 205 try:
208 customrecipe = CustomImageRecipe.objects.get(name=target.target, 206 customrecipe = CustomImageRecipe.objects.get(
209 project=bitbake.req.project) 207 name=target.target,
208 project=bitbake.req.project)
209
210 custom_layer_path = self.setup_custom_image_recipe(
211 customrecipe, layers)
212
213 if os.path.isdir(custom_layer_path):
214 layerlist.append(custom_layer_path)
215
210 except CustomImageRecipe.DoesNotExist: 216 except CustomImageRecipe.DoesNotExist:
211 continue # not a custom recipe, skip 217 continue # not a custom recipe, skip
212
213 # create directory structure
214 for name in ("conf", "recipes"):
215 path = os.path.join(layerpath, name)
216 if not os.path.isdir(path):
217 os.makedirs(path)
218
219 # create layer.oonf
220 config = os.path.join(layerpath, "conf", "layer.conf")
221 if not os.path.isfile(config):
222 with open(config, "w") as conf:
223 conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n')
224
225 # Update the Layer_Version dirpath that has our base_recipe in
226 # to be able to read the base recipe to then generate the
227 # custom recipe.
228 br_layer_base_recipe = layers.get(
229 layer_version=customrecipe.base_recipe.layer_version)
230
231 # If the layer is one that we've cloned we know where it lives
232 if br_layer_base_recipe.giturl and br_layer_base_recipe.commit:
233 layer_path = self.getGitCloneDirectory(
234 br_layer_base_recipe.giturl,
235 br_layer_base_recipe.commit)
236 # Otherwise it's a local layer
237 elif br_layer_base_recipe.local_source_dir:
238 layer_path = br_layer_base_recipe.local_source_dir
239 else:
240 logger.error("Unable to workout the dir path for the custom"
241 " image recipe")
242
243 br_layer_base_dirpath = os.path.join(
244 self.be.sourcedir,
245 layer_path,
246 customrecipe.base_recipe.layer_version.dirpath)
247
248 customrecipe.base_recipe.layer_version.dirpath = \
249 br_layer_base_dirpath
250
251 customrecipe.base_recipe.layer_version.save()
252
253 # create recipe
254 recipe_path = \
255 os.path.join(layerpath, "recipes", "%s.bb" % target.target)
256 with open(recipe_path, "w") as recipef:
257 recipef.write(customrecipe.generate_recipe_file_contents())
258
259 # Update the layer and recipe objects
260 customrecipe.layer_version.dirpath = layerpath
261 customrecipe.layer_version.layer.local_source_dir = layerpath
262 customrecipe.layer_version.layer.save()
263 customrecipe.layer_version.save()
264
265 customrecipe.file_path = recipe_path
266 customrecipe.save()
267
268 # create *Layer* objects needed for build machinery to work
269 BRLayer.objects.get_or_create(req=target.req,
270 name=layer.name,
271 dirpath=layerpath,
272 giturl="file://%s" % layerpath)
273 if os.path.isdir(layerpath):
274 layerlist.append(layerpath)
275 218
276 self.islayerset = True
277 layerlist.extend(nongitlayerlist) 219 layerlist.extend(nongitlayerlist)
220 logger.debug("\n\nset layers gives this list \n %s" % ''.join(layerlist))
221 self.islayerset = True
278 return layerlist 222 return layerlist
279 223
224 def setup_custom_image_recipe(self, customrecipe, layers):
225 """ Set up toaster-custom-images layer and recipe files """
226 layerpath = os.path.join(self.be.builddir,
227 CustomImageRecipe.LAYER_NAME)
228
229 # create directory structure
230 for name in ("conf", "recipes"):
231 path = os.path.join(layerpath, name)
232 if not os.path.isdir(path):
233 os.makedirs(path)
234
235 # create layer.conf
236 config = os.path.join(layerpath, "conf", "layer.conf")
237 if not os.path.isfile(config):
238 with open(config, "w") as conf:
239 conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n')
240
241 # Update the Layer_Version dirpath that has our base_recipe in
242 # to be able to read the base recipe to then generate the
243 # custom recipe.
244 br_layer_base_recipe = layers.get(
245 layer_version=customrecipe.base_recipe.layer_version)
246
247 # If the layer is one that we've cloned we know where it lives
248 if br_layer_base_recipe.giturl and br_layer_base_recipe.commit:
249 layer_path = self.getGitCloneDirectory(
250 br_layer_base_recipe.giturl,
251 br_layer_base_recipe.commit)
252 # Otherwise it's a local layer
253 elif br_layer_base_recipe.local_source_dir:
254 layer_path = br_layer_base_recipe.local_source_dir
255 else:
256 logger.error("Unable to workout the dir path for the custom"
257 " image recipe")
258
259 br_layer_base_dirpath = os.path.join(
260 self.be.sourcedir,
261 layer_path,
262 customrecipe.base_recipe.layer_version.dirpath)
263
264 customrecipe.base_recipe.layer_version.dirpath = br_layer_base_dirpath
265
266 customrecipe.base_recipe.layer_version.save()
267
268 # create recipe
269 recipe_path = os.path.join(layerpath, "recipes", "%s.bb" %
270 customrecipe.name)
271 with open(recipe_path, "w") as recipef:
272 recipef.write(customrecipe.generate_recipe_file_contents())
273
274 # Update the layer and recipe objects
275 customrecipe.layer_version.dirpath = layerpath
276 customrecipe.layer_version.layer.local_source_dir = layerpath
277 customrecipe.layer_version.layer.save()
278 customrecipe.layer_version.save()
279
280 customrecipe.file_path = recipe_path
281 customrecipe.save()
282
283 return layerpath
284
285
280 def readServerLogFile(self): 286 def readServerLogFile(self):
281 return open(os.path.join(self.be.builddir, "toaster_server.log"), "r").read() 287 return open(os.path.join(self.be.builddir, "toaster_server.log"), "r").read()
282 288