summaryrefslogtreecommitdiffstats
path: root/scripts/lib
diff options
context:
space:
mode:
authorTom Zanussi <tom.zanussi@intel.com>2012-12-12 22:56:40 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-12-13 16:54:34 +0000
commit76b2ef26e7ee23cbf05051c3978a37f0ee4062b9 (patch)
tree7e5308a9e4cee6dd7c4dad7c53c9fb064dee75ca /scripts/lib
parent8a1d25cdce6dd7e3f03587382127676f95dadf30 (diff)
downloadpoky-76b2ef26e7ee23cbf05051c3978a37f0ee4062b9.tar.gz
yocto-bsp: remove patch-related SRC_URI processing
We no longer have to include patches in the SRC_URI, since things now work using only patch in the .scc file, so remove anything to do with maintaining patches in the SRC_URI and fix up all previous users of that code. (From meta-yocto rev: 8f3cd1f80f898d963797bc96b3fe599f7f8ea343) Signed-off-by: Tom Zanussi <tom.zanussi@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib')
-rw-r--r--scripts/lib/bsp/kernel.py227
1 files changed, 34 insertions, 193 deletions
diff --git a/scripts/lib/bsp/kernel.py b/scripts/lib/bsp/kernel.py
index d2e4f403d6..883beac00c 100644
--- a/scripts/lib/bsp/kernel.py
+++ b/scripts/lib/bsp/kernel.py
@@ -199,18 +199,6 @@ def yocto_kernel_config_list(scripts_path, machine):
199 print gen_choices_str(config_items) 199 print gen_choices_str(config_items)
200 200
201 201
202def map_choice(choice_str, array):
203 """
204 Match the text of a choice with a list of choices, returning the
205 index of the match, or -1 if not found.
206 """
207 for i, item in enumerate(array):
208 if choice_str == array[i]:
209 return i
210
211 return -1
212
213
214def yocto_kernel_config_rm(scripts_path, machine): 202def yocto_kernel_config_rm(scripts_path, machine):
215 """ 203 """
216 Display the list of config items (CONFIG_XXX) in a machine's 204 Display the list of config items (CONFIG_XXX) in a machine's
@@ -293,109 +281,24 @@ def find_current_kernel(bsp_layer, machine):
293 return preferred_kernel 281 return preferred_kernel
294 282
295 283
296def find_bsp_kernel_src_uri(scripts_path, machine, start_end_only = False): 284def find_filesdir(scripts_path, machine):
297 """ 285 """
298 Parse the SRC_URI append in the kernel .bb or .bbappend, returing 286 Find the name of the 'files' dir associated with the machine
299 a list of individual components, and the start/end positions of 287 (could be in files/, linux-yocto-custom/, etc). Returns the name
300 the SRC_URI statement, so it can be regenerated in the same 288 of the files dir if found, None otherwise.
301 position. If start_end_only is True, don't return the list of
302 elements, only the start and end positions.
303
304 Returns (SRC_URI start line, SRC_URI end_line, list of split
305 SRC_URI items).
306
307 If no SRC_URI, start line = -1.
308
309 NOTE: this and all the src_uri functions are temporary and
310 deprecated and will be removed, but are needed until the
311 equivalent .scc mechanism works. i.e. for now we unfortunately
312 can't get around putting patches in the SRC_URI.
313 """ 289 """
314 layer = find_bsp_layer(scripts_path, machine) 290 layer = find_bsp_layer(scripts_path, machine)
291 filesdir = None
292 linuxdir = os.path.join(layer, "recipes-kernel/linux")
293 linuxdir_list = os.listdir(linuxdir)
294 for fileobj in linuxdir_list:
295 fileobj_path = os.path.join(linuxdir, fileobj)
296 if os.path.isdir(fileobj_path):
297 # this could be files/ or linux-yocto-custom/, we have no way of distinguishing
298 # so we take the first (and normally only) dir we find as the 'filesdir'
299 filesdir = fileobj_path
315 300
316 kernel = find_current_kernel(layer, machine) 301 return filesdir
317 if not kernel:
318 print "Couldn't determine the kernel for this BSP, exiting."
319 sys.exit(1)
320
321 kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bbappend")
322 try:
323 f = open(kernel_bbfile, "r")
324 except IOError:
325 kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bb")
326 try:
327 f = open(kernel_bbfile, "r")
328 except IOError:
329 print "Couldn't find a .bb or .bbappend file for this BSP's kernel, exiting."
330 sys.exit(1)
331
332 src_uri_line = ""
333 in_src_uri = False
334 lines = f.readlines()
335 first_line = last_line = -1
336 quote_start = quote_end = -1
337 for n, line in enumerate(lines):
338 line = line.strip()
339 if line.startswith("SRC_URI"):
340 first_line = n
341 in_src_uri = True
342 if in_src_uri:
343 src_uri_line += line
344 if quote_start == -1:
345 idx = line.find("\"")
346 if idx != -1:
347 quote_start = idx + 1
348 idx = line.find("\"", quote_start)
349 quote_start = 0 # set to 0 for all but first line
350 if idx != -1:
351 quote_end = idx
352 last_line = n
353 break
354
355 if first_line == -1: # no SRC_URI, which is fine too
356 return (-1, -1, None)
357 if quote_start == -1:
358 print "Bad kernel SRC_URI (missing opening quote), exiting."
359 sys.exit(1)
360 if quote_end == -1:
361 print "Bad SRC_URI (missing closing quote), exiting."
362 sys.exit(1)
363 if start_end_only:
364 return (first_line, last_line, None)
365
366 idx = src_uri_line.find("\"")
367 src_uri_line = src_uri_line[idx + 1:]
368 idx = src_uri_line.find("\"")
369 src_uri_line = src_uri_line[:idx]
370
371 src_uri = src_uri_line.split()
372 for i, item in enumerate(src_uri):
373 idx = item.find("\\")
374 if idx != -1:
375 src_uri[i] = item[idx + 1:]
376
377 if not src_uri[len(src_uri) - 1]:
378 src_uri.pop()
379
380 for i, item in enumerate(src_uri):
381 idx = item.find(SRC_URI_FILE)
382 if idx == -1:
383 print "Bad SRC_URI (invalid item, %s), exiting." % item
384 sys.exit(1)
385 src_uri[i] = item[idx + len(SRC_URI_FILE):]
386
387 return (first_line, last_line, src_uri)
388
389
390def find_patches(src_uri):
391 """
392 Filter out the top-level patches from the SRC_URI.
393 """
394 patches = []
395 for item in src_uri:
396 if item.endswith(".patch") and "/" not in item:
397 patches.append(item)
398 return patches
399 302
400 303
401def read_patch_items(scripts_path, machine): 304def read_patch_items(scripts_path, machine):
@@ -426,10 +329,7 @@ def write_patch_items(scripts_path, machine, patch_items):
426 """ 329 """
427 f = open_user_file(scripts_path, machine, "user-patches.scc", "w") 330 f = open_user_file(scripts_path, machine, "user-patches.scc", "w")
428 for item in patch_items: 331 for item in patch_items:
429 pass 332 f.write("patch " + item + "\n")
430 # this currently breaks do_patch, but is really what we want
431 # once this works, we can remove all the src_uri stuff
432 # f.write("patch " + item + "\n")
433 f.close() 333 f.close()
434 334
435 kernel_contents_changed(scripts_path, machine) 335 kernel_contents_changed(scripts_path, machine)
@@ -440,8 +340,7 @@ def yocto_kernel_patch_list(scripts_path, machine):
440 Display the list of patches in a machine's user-defined patch list 340 Display the list of patches in a machine's user-defined patch list
441 [user-patches.scc]. 341 [user-patches.scc].
442 """ 342 """
443 (start_line, end_line, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine) 343 patches = read_patch_items(scripts_path, machine)
444 patches = find_patches(src_uri)
445 344
446 print "The current set of machine-specific patches for %s is:" % machine 345 print "The current set of machine-specific patches for %s is:" % machine
447 print gen_choices_str(patches) 346 print gen_choices_str(patches)
@@ -452,8 +351,7 @@ def yocto_kernel_patch_rm(scripts_path, machine):
452 Remove one or more patches from a machine's user-defined patch 351 Remove one or more patches from a machine's user-defined patch
453 list [user-patches.scc]. 352 list [user-patches.scc].
454 """ 353 """
455 (start_line, end_line, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine) 354 patches = read_patch_items(scripts_path, machine)
456 patches = find_patches(src_uri)
457 355
458 print "Specify the patches to remove:" 356 print "Specify the patches to remove:"
459 input = raw_input(gen_choices_str(patches)) 357 input = raw_input(gen_choices_str(patches))
@@ -462,8 +360,10 @@ def yocto_kernel_patch_rm(scripts_path, machine):
462 360
463 removed = [] 361 removed = []
464 362
465 layer = find_bsp_layer(scripts_path, machine) 363 filesdir = find_filesdir(scripts_path, machine)
466 src_uri_dir = os.path.join(layer, "recipes-kernel/linux/files") 364 if not filesdir:
365 print "Couldn't rm patch(es) since we couldn't find a 'files' dir"
366 sys.exit(1)
467 367
468 for choice in reversed(rm_choices): 368 for choice in reversed(rm_choices):
469 try: 369 try:
@@ -474,14 +374,13 @@ def yocto_kernel_patch_rm(scripts_path, machine):
474 if idx < 0 or idx >= len(patches): 374 if idx < 0 or idx >= len(patches):
475 print "Invalid choice (%d), exiting" % (idx + 1) 375 print "Invalid choice (%d), exiting" % (idx + 1)
476 sys.exit(1) 376 sys.exit(1)
477 src_uri_patch = os.path.join(src_uri_dir, patches[idx]) 377 filesdir_patch = os.path.join(filesdir, patches[idx])
478 if os.path.isfile(src_uri_patch): 378 if os.path.isfile(filesdir_patch):
479 os.remove(src_uri_patch) 379 os.remove(filesdir_patch)
480 idx = map_choice(patches[idx], src_uri) 380 removed.append(patches[idx])
481 removed.append(src_uri.pop(idx)) 381 patches.pop(idx)
482 382
483 write_patch_items(scripts_path, machine, patches) 383 write_patch_items(scripts_path, machine, patches)
484 write_kernel_src_uri(scripts_path, machine, src_uri)
485 384
486 print "Removed patches:" 385 print "Removed patches:"
487 for r in removed: 386 for r in removed:
@@ -493,16 +392,17 @@ def yocto_kernel_patch_add(scripts_path, machine, patches):
493 Add one or more patches to a machine's user-defined patch list 392 Add one or more patches to a machine's user-defined patch list
494 [user-patches.scc]. 393 [user-patches.scc].
495 """ 394 """
496 (start_line, end_line, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine) 395 existing_patches = read_patch_items(scripts_path, machine)
497 src_uri_patches = find_patches(src_uri)
498 396
499 for patch in patches: 397 for patch in patches:
500 if os.path.basename(patch) in src_uri_patches: 398 if os.path.basename(patch) in existing_patches:
501 print "Couldn't add patch (%s) since it's already been added" % os.path.basename(patch) 399 print "Couldn't add patch (%s) since it's already been added" % os.path.basename(patch)
502 sys.exit(1) 400 sys.exit(1)
503 401
504 layer = find_bsp_layer(scripts_path, machine) 402 filesdir = find_filesdir(scripts_path, machine)
505 src_uri_dir = os.path.join(layer, "recipes-kernel/linux/files") 403 if not filesdir:
404 print "Couldn't add patch (%s) since we couldn't find a 'files' dir to add it to" % os.path.basename(patch)
405 sys.exit(1)
506 406
507 new_patches = [] 407 new_patches = []
508 408
@@ -511,33 +411,19 @@ def yocto_kernel_patch_add(scripts_path, machine, patches):
511 print "Couldn't find patch (%s), exiting" % patch 411 print "Couldn't find patch (%s), exiting" % patch
512 sys.exit(1) 412 sys.exit(1)
513 basename = os.path.basename(patch) 413 basename = os.path.basename(patch)
514 src_uri_patch = os.path.join(src_uri_dir, basename) 414 filesdir_patch = os.path.join(filesdir, basename)
515 shutil.copyfile(patch, src_uri_patch) 415 shutil.copyfile(patch, filesdir_patch)
516 new_patches.append(basename) 416 new_patches.append(basename)
517 417
518 cur_items = read_patch_items(scripts_path, machine) 418 cur_items = read_patch_items(scripts_path, machine)
519 cur_items.extend(new_patches) 419 cur_items.extend(new_patches)
520 write_patch_items(scripts_path, machine, cur_items) 420 write_patch_items(scripts_path, machine, cur_items)
521 421
522 (unused, unused, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine)
523 src_uri.extend(new_patches)
524 write_kernel_src_uri(scripts_path, machine, src_uri)
525
526 print "Added patches:" 422 print "Added patches:"
527 for n in new_patches: 423 for n in new_patches:
528 print "\t%s" % n 424 print "\t%s" % n
529 425
530 426
531def write_uri_lines(ofile, src_uri):
532 """
533 Write URI elements to output file ofile.
534 """
535 ofile.write("SRC_URI += \" \\\n")
536 for item in src_uri:
537 ofile.write("\t%s%s \\\n" % (SRC_URI_FILE, item))
538 ofile.write("\t\"\n")
539
540
541def inc_pr(line): 427def inc_pr(line):
542 """ 428 """
543 Add 1 to the PR value in the given bbappend PR line. For the PR 429 Add 1 to the PR value in the given bbappend PR line. For the PR
@@ -588,51 +474,6 @@ def kernel_contents_changed(scripts_path, machine):
588 ifile.close() 474 ifile.close()
589 475
590 476
591def write_kernel_src_uri(scripts_path, machine, src_uri):
592 """
593 Write (replace) the SRC_URI append for a machine from a list
594 SRC_URI elements.
595 """
596 layer = find_bsp_layer(scripts_path, machine)
597
598 kernel = find_current_kernel(layer, machine)
599 if not kernel:
600 print "Couldn't determine the kernel for this BSP, exiting."
601 sys.exit(1)
602
603 kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bbappend")
604 if not os.path.isfile(kernel_bbfile):
605 kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bb")
606 if not os.path.isfile(kernel_bbfile):
607 print "Couldn't find a .bb or .bbappend file for this BSP's kernel, exiting."
608 sys.exit(1)
609
610 (uri_start_line, uri_end_line, unused) = find_bsp_kernel_src_uri(scripts_path, machine, True)
611
612 kernel_bbfile_prev = kernel_bbfile + ".prev"
613 shutil.copyfile(kernel_bbfile, kernel_bbfile_prev)
614 ifile = open(kernel_bbfile_prev, "r")
615 ofile = open(kernel_bbfile, "w")
616
617 ifile_lines = ifile.readlines()
618 if uri_start_line == -1:
619 uri_end_line = len(ifile_lines) # make sure we add at end
620 wrote_src_uri = False
621 for i, ifile_line in enumerate(ifile_lines):
622 if ifile_line.strip().startswith("PR"):
623 ifile_line = inc_pr(ifile_line)
624 if i < uri_start_line:
625 ofile.write(ifile_line)
626 elif i > uri_end_line:
627 ofile.write(ifile_line)
628 else:
629 if not wrote_src_uri:
630 write_uri_lines(ofile, src_uri)
631 wrote_src_uri = True
632 if uri_start_line == -1:
633 write_uri_lines(ofile, src_uri)
634
635
636def kernels(context): 477def kernels(context):
637 """ 478 """
638 Return the list of available kernels in the BSP i.e. corresponding 479 Return the list of available kernels in the BSP i.e. corresponding