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>
This commit is contained in:
parent
8a1d25cdce
commit
76b2ef26e7
|
@ -199,18 +199,6 @@ def yocto_kernel_config_list(scripts_path, machine):
|
|||
print gen_choices_str(config_items)
|
||||
|
||||
|
||||
def map_choice(choice_str, array):
|
||||
"""
|
||||
Match the text of a choice with a list of choices, returning the
|
||||
index of the match, or -1 if not found.
|
||||
"""
|
||||
for i, item in enumerate(array):
|
||||
if choice_str == array[i]:
|
||||
return i
|
||||
|
||||
return -1
|
||||
|
||||
|
||||
def yocto_kernel_config_rm(scripts_path, machine):
|
||||
"""
|
||||
Display the list of config items (CONFIG_XXX) in a machine's
|
||||
|
@ -293,109 +281,24 @@ def find_current_kernel(bsp_layer, machine):
|
|||
return preferred_kernel
|
||||
|
||||
|
||||
def find_bsp_kernel_src_uri(scripts_path, machine, start_end_only = False):
|
||||
def find_filesdir(scripts_path, machine):
|
||||
"""
|
||||
Parse the SRC_URI append in the kernel .bb or .bbappend, returing
|
||||
a list of individual components, and the start/end positions of
|
||||
the SRC_URI statement, so it can be regenerated in the same
|
||||
position. If start_end_only is True, don't return the list of
|
||||
elements, only the start and end positions.
|
||||
|
||||
Returns (SRC_URI start line, SRC_URI end_line, list of split
|
||||
SRC_URI items).
|
||||
|
||||
If no SRC_URI, start line = -1.
|
||||
|
||||
NOTE: this and all the src_uri functions are temporary and
|
||||
deprecated and will be removed, but are needed until the
|
||||
equivalent .scc mechanism works. i.e. for now we unfortunately
|
||||
can't get around putting patches in the SRC_URI.
|
||||
Find the name of the 'files' dir associated with the machine
|
||||
(could be in files/, linux-yocto-custom/, etc). Returns the name
|
||||
of the files dir if found, None otherwise.
|
||||
"""
|
||||
layer = find_bsp_layer(scripts_path, machine)
|
||||
filesdir = None
|
||||
linuxdir = os.path.join(layer, "recipes-kernel/linux")
|
||||
linuxdir_list = os.listdir(linuxdir)
|
||||
for fileobj in linuxdir_list:
|
||||
fileobj_path = os.path.join(linuxdir, fileobj)
|
||||
if os.path.isdir(fileobj_path):
|
||||
# this could be files/ or linux-yocto-custom/, we have no way of distinguishing
|
||||
# so we take the first (and normally only) dir we find as the 'filesdir'
|
||||
filesdir = fileobj_path
|
||||
|
||||
kernel = find_current_kernel(layer, machine)
|
||||
if not kernel:
|
||||
print "Couldn't determine the kernel for this BSP, exiting."
|
||||
sys.exit(1)
|
||||
|
||||
kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bbappend")
|
||||
try:
|
||||
f = open(kernel_bbfile, "r")
|
||||
except IOError:
|
||||
kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bb")
|
||||
try:
|
||||
f = open(kernel_bbfile, "r")
|
||||
except IOError:
|
||||
print "Couldn't find a .bb or .bbappend file for this BSP's kernel, exiting."
|
||||
sys.exit(1)
|
||||
|
||||
src_uri_line = ""
|
||||
in_src_uri = False
|
||||
lines = f.readlines()
|
||||
first_line = last_line = -1
|
||||
quote_start = quote_end = -1
|
||||
for n, line in enumerate(lines):
|
||||
line = line.strip()
|
||||
if line.startswith("SRC_URI"):
|
||||
first_line = n
|
||||
in_src_uri = True
|
||||
if in_src_uri:
|
||||
src_uri_line += line
|
||||
if quote_start == -1:
|
||||
idx = line.find("\"")
|
||||
if idx != -1:
|
||||
quote_start = idx + 1
|
||||
idx = line.find("\"", quote_start)
|
||||
quote_start = 0 # set to 0 for all but first line
|
||||
if idx != -1:
|
||||
quote_end = idx
|
||||
last_line = n
|
||||
break
|
||||
|
||||
if first_line == -1: # no SRC_URI, which is fine too
|
||||
return (-1, -1, None)
|
||||
if quote_start == -1:
|
||||
print "Bad kernel SRC_URI (missing opening quote), exiting."
|
||||
sys.exit(1)
|
||||
if quote_end == -1:
|
||||
print "Bad SRC_URI (missing closing quote), exiting."
|
||||
sys.exit(1)
|
||||
if start_end_only:
|
||||
return (first_line, last_line, None)
|
||||
|
||||
idx = src_uri_line.find("\"")
|
||||
src_uri_line = src_uri_line[idx + 1:]
|
||||
idx = src_uri_line.find("\"")
|
||||
src_uri_line = src_uri_line[:idx]
|
||||
|
||||
src_uri = src_uri_line.split()
|
||||
for i, item in enumerate(src_uri):
|
||||
idx = item.find("\\")
|
||||
if idx != -1:
|
||||
src_uri[i] = item[idx + 1:]
|
||||
|
||||
if not src_uri[len(src_uri) - 1]:
|
||||
src_uri.pop()
|
||||
|
||||
for i, item in enumerate(src_uri):
|
||||
idx = item.find(SRC_URI_FILE)
|
||||
if idx == -1:
|
||||
print "Bad SRC_URI (invalid item, %s), exiting." % item
|
||||
sys.exit(1)
|
||||
src_uri[i] = item[idx + len(SRC_URI_FILE):]
|
||||
|
||||
return (first_line, last_line, src_uri)
|
||||
|
||||
|
||||
def find_patches(src_uri):
|
||||
"""
|
||||
Filter out the top-level patches from the SRC_URI.
|
||||
"""
|
||||
patches = []
|
||||
for item in src_uri:
|
||||
if item.endswith(".patch") and "/" not in item:
|
||||
patches.append(item)
|
||||
return patches
|
||||
return filesdir
|
||||
|
||||
|
||||
def read_patch_items(scripts_path, machine):
|
||||
|
@ -426,10 +329,7 @@ def write_patch_items(scripts_path, machine, patch_items):
|
|||
"""
|
||||
f = open_user_file(scripts_path, machine, "user-patches.scc", "w")
|
||||
for item in patch_items:
|
||||
pass
|
||||
# this currently breaks do_patch, but is really what we want
|
||||
# once this works, we can remove all the src_uri stuff
|
||||
# f.write("patch " + item + "\n")
|
||||
f.write("patch " + item + "\n")
|
||||
f.close()
|
||||
|
||||
kernel_contents_changed(scripts_path, machine)
|
||||
|
@ -440,8 +340,7 @@ def yocto_kernel_patch_list(scripts_path, machine):
|
|||
Display the list of patches in a machine's user-defined patch list
|
||||
[user-patches.scc].
|
||||
"""
|
||||
(start_line, end_line, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine)
|
||||
patches = find_patches(src_uri)
|
||||
patches = read_patch_items(scripts_path, machine)
|
||||
|
||||
print "The current set of machine-specific patches for %s is:" % machine
|
||||
print gen_choices_str(patches)
|
||||
|
@ -452,8 +351,7 @@ def yocto_kernel_patch_rm(scripts_path, machine):
|
|||
Remove one or more patches from a machine's user-defined patch
|
||||
list [user-patches.scc].
|
||||
"""
|
||||
(start_line, end_line, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine)
|
||||
patches = find_patches(src_uri)
|
||||
patches = read_patch_items(scripts_path, machine)
|
||||
|
||||
print "Specify the patches to remove:"
|
||||
input = raw_input(gen_choices_str(patches))
|
||||
|
@ -462,8 +360,10 @@ def yocto_kernel_patch_rm(scripts_path, machine):
|
|||
|
||||
removed = []
|
||||
|
||||
layer = find_bsp_layer(scripts_path, machine)
|
||||
src_uri_dir = os.path.join(layer, "recipes-kernel/linux/files")
|
||||
filesdir = find_filesdir(scripts_path, machine)
|
||||
if not filesdir:
|
||||
print "Couldn't rm patch(es) since we couldn't find a 'files' dir"
|
||||
sys.exit(1)
|
||||
|
||||
for choice in reversed(rm_choices):
|
||||
try:
|
||||
|
@ -474,14 +374,13 @@ def yocto_kernel_patch_rm(scripts_path, machine):
|
|||
if idx < 0 or idx >= len(patches):
|
||||
print "Invalid choice (%d), exiting" % (idx + 1)
|
||||
sys.exit(1)
|
||||
src_uri_patch = os.path.join(src_uri_dir, patches[idx])
|
||||
if os.path.isfile(src_uri_patch):
|
||||
os.remove(src_uri_patch)
|
||||
idx = map_choice(patches[idx], src_uri)
|
||||
removed.append(src_uri.pop(idx))
|
||||
filesdir_patch = os.path.join(filesdir, patches[idx])
|
||||
if os.path.isfile(filesdir_patch):
|
||||
os.remove(filesdir_patch)
|
||||
removed.append(patches[idx])
|
||||
patches.pop(idx)
|
||||
|
||||
write_patch_items(scripts_path, machine, patches)
|
||||
write_kernel_src_uri(scripts_path, machine, src_uri)
|
||||
|
||||
print "Removed patches:"
|
||||
for r in removed:
|
||||
|
@ -493,16 +392,17 @@ def yocto_kernel_patch_add(scripts_path, machine, patches):
|
|||
Add one or more patches to a machine's user-defined patch list
|
||||
[user-patches.scc].
|
||||
"""
|
||||
(start_line, end_line, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine)
|
||||
src_uri_patches = find_patches(src_uri)
|
||||
existing_patches = read_patch_items(scripts_path, machine)
|
||||
|
||||
for patch in patches:
|
||||
if os.path.basename(patch) in src_uri_patches:
|
||||
if os.path.basename(patch) in existing_patches:
|
||||
print "Couldn't add patch (%s) since it's already been added" % os.path.basename(patch)
|
||||
sys.exit(1)
|
||||
|
||||
layer = find_bsp_layer(scripts_path, machine)
|
||||
src_uri_dir = os.path.join(layer, "recipes-kernel/linux/files")
|
||||
filesdir = find_filesdir(scripts_path, machine)
|
||||
if not filesdir:
|
||||
print "Couldn't add patch (%s) since we couldn't find a 'files' dir to add it to" % os.path.basename(patch)
|
||||
sys.exit(1)
|
||||
|
||||
new_patches = []
|
||||
|
||||
|
@ -511,33 +411,19 @@ def yocto_kernel_patch_add(scripts_path, machine, patches):
|
|||
print "Couldn't find patch (%s), exiting" % patch
|
||||
sys.exit(1)
|
||||
basename = os.path.basename(patch)
|
||||
src_uri_patch = os.path.join(src_uri_dir, basename)
|
||||
shutil.copyfile(patch, src_uri_patch)
|
||||
filesdir_patch = os.path.join(filesdir, basename)
|
||||
shutil.copyfile(patch, filesdir_patch)
|
||||
new_patches.append(basename)
|
||||
|
||||
cur_items = read_patch_items(scripts_path, machine)
|
||||
cur_items.extend(new_patches)
|
||||
write_patch_items(scripts_path, machine, cur_items)
|
||||
|
||||
(unused, unused, src_uri) = find_bsp_kernel_src_uri(scripts_path, machine)
|
||||
src_uri.extend(new_patches)
|
||||
write_kernel_src_uri(scripts_path, machine, src_uri)
|
||||
|
||||
print "Added patches:"
|
||||
for n in new_patches:
|
||||
print "\t%s" % n
|
||||
|
||||
|
||||
def write_uri_lines(ofile, src_uri):
|
||||
"""
|
||||
Write URI elements to output file ofile.
|
||||
"""
|
||||
ofile.write("SRC_URI += \" \\\n")
|
||||
for item in src_uri:
|
||||
ofile.write("\t%s%s \\\n" % (SRC_URI_FILE, item))
|
||||
ofile.write("\t\"\n")
|
||||
|
||||
|
||||
def inc_pr(line):
|
||||
"""
|
||||
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):
|
|||
ifile.close()
|
||||
|
||||
|
||||
def write_kernel_src_uri(scripts_path, machine, src_uri):
|
||||
"""
|
||||
Write (replace) the SRC_URI append for a machine from a list
|
||||
SRC_URI elements.
|
||||
"""
|
||||
layer = find_bsp_layer(scripts_path, machine)
|
||||
|
||||
kernel = find_current_kernel(layer, machine)
|
||||
if not kernel:
|
||||
print "Couldn't determine the kernel for this BSP, exiting."
|
||||
sys.exit(1)
|
||||
|
||||
kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bbappend")
|
||||
if not os.path.isfile(kernel_bbfile):
|
||||
kernel_bbfile = os.path.join(layer, "recipes-kernel/linux/" + kernel + ".bb")
|
||||
if not os.path.isfile(kernel_bbfile):
|
||||
print "Couldn't find a .bb or .bbappend file for this BSP's kernel, exiting."
|
||||
sys.exit(1)
|
||||
|
||||
(uri_start_line, uri_end_line, unused) = find_bsp_kernel_src_uri(scripts_path, machine, True)
|
||||
|
||||
kernel_bbfile_prev = kernel_bbfile + ".prev"
|
||||
shutil.copyfile(kernel_bbfile, kernel_bbfile_prev)
|
||||
ifile = open(kernel_bbfile_prev, "r")
|
||||
ofile = open(kernel_bbfile, "w")
|
||||
|
||||
ifile_lines = ifile.readlines()
|
||||
if uri_start_line == -1:
|
||||
uri_end_line = len(ifile_lines) # make sure we add at end
|
||||
wrote_src_uri = False
|
||||
for i, ifile_line in enumerate(ifile_lines):
|
||||
if ifile_line.strip().startswith("PR"):
|
||||
ifile_line = inc_pr(ifile_line)
|
||||
if i < uri_start_line:
|
||||
ofile.write(ifile_line)
|
||||
elif i > uri_end_line:
|
||||
ofile.write(ifile_line)
|
||||
else:
|
||||
if not wrote_src_uri:
|
||||
write_uri_lines(ofile, src_uri)
|
||||
wrote_src_uri = True
|
||||
if uri_start_line == -1:
|
||||
write_uri_lines(ofile, src_uri)
|
||||
|
||||
|
||||
def kernels(context):
|
||||
"""
|
||||
Return the list of available kernels in the BSP i.e. corresponding
|
||||
|
|
Loading…
Reference in New Issue