diff options
Diffstat (limited to 'bitbake/lib/toaster')
-rw-r--r-- | bitbake/lib/toaster/bldcontrol/localhostbecontroller.py | 144 |
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 | ||