diff options
Diffstat (limited to 'meta/classes/kernel-yocto.bbclass')
-rw-r--r-- | meta/classes/kernel-yocto.bbclass | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass index aabca789cf..ce125b4cfb 100644 --- a/meta/classes/kernel-yocto.bbclass +++ b/meta/classes/kernel-yocto.bbclass | |||
@@ -1,6 +1,8 @@ | |||
1 | S = "${WORKDIR}/linux" | 1 | S = "${WORKDIR}/linux" |
2 | 2 | ||
3 | 3 | ||
4 | # returns local (absolute) path names for all valid patches in the | ||
5 | # src_uri | ||
4 | def find_patches(d): | 6 | def find_patches(d): |
5 | patches=src_patches(d) | 7 | patches=src_patches(d) |
6 | patch_list=[] | 8 | patch_list=[] |
@@ -10,6 +12,7 @@ def find_patches(d): | |||
10 | 12 | ||
11 | return patch_list | 13 | return patch_list |
12 | 14 | ||
15 | # returns all the elements from the src uri that are .scc files | ||
13 | def find_sccs(d): | 16 | def find_sccs(d): |
14 | sources=src_patches(d, True) | 17 | sources=src_patches(d, True) |
15 | sources_list=[] | 18 | sources_list=[] |
@@ -20,6 +23,22 @@ def find_sccs(d): | |||
20 | 23 | ||
21 | return sources_list | 24 | return sources_list |
22 | 25 | ||
26 | # this is different from find_patches, in that it returns a colon separated | ||
27 | # list of <patches>:<subdir> instead of just a list of patches | ||
28 | def find_urls(d): | ||
29 | patches=src_patches(d) | ||
30 | fetch = bb.fetch2.Fetch([], d) | ||
31 | patch_list=[] | ||
32 | for p in patches: | ||
33 | _, _, local, _, _, _ = bb.decodeurl(p) | ||
34 | for url in fetch.urls: | ||
35 | urldata = fetch.ud[url] | ||
36 | if urldata.localpath == local: | ||
37 | patch_list.append(local+':'+urldata.path) | ||
38 | |||
39 | return patch_list | ||
40 | |||
41 | |||
23 | do_patch() { | 42 | do_patch() { |
24 | cd ${S} | 43 | cd ${S} |
25 | if [ -f ${WORKDIR}/defconfig ]; then | 44 | if [ -f ${WORKDIR}/defconfig ]; then |
@@ -51,8 +70,8 @@ do_patch() { | |||
51 | exit 1 | 70 | exit 1 |
52 | fi | 71 | fi |
53 | 72 | ||
54 | patches="${@" ".join(find_patches(d))}" | ||
55 | sccs="${@" ".join(find_sccs(d))}" | 73 | sccs="${@" ".join(find_sccs(d))}" |
74 | patches_and_dirs="${@" ".join(find_urls(d))}" | ||
56 | 75 | ||
57 | # This loops through all patches, and looks for directories that do | 76 | # This loops through all patches, and looks for directories that do |
58 | # not already have feature descriptions. If a directory doesn't have | 77 | # not already have feature descriptions. If a directory doesn't have |
@@ -66,14 +85,16 @@ do_patch() { | |||
66 | # to be repeated on the SRC_URI line .. which is more intutive | 85 | # to be repeated on the SRC_URI line .. which is more intutive |
67 | set +e | 86 | set +e |
68 | patch_dirs= | 87 | patch_dirs= |
69 | for p in ${patches}; do | 88 | for pp in ${patches_and_dirs}; do |
89 | p=`echo $pp | cut -f1 -d:` | ||
90 | wp=`echo $pp | cut -f2 -d:` | ||
70 | pdir=`dirname ${p}` | 91 | pdir=`dirname ${p}` |
71 | pname=`basename ${p}` | 92 | pname=`basename ${p}` |
72 | scc=`find ${pdir} -maxdepth 1 -name '*.scc'` | 93 | scc=`find ${pdir} -maxdepth 1 -name '*.scc'` |
73 | if [ -z "${scc}" ]; then | 94 | if [ -z "${scc}" ]; then |
74 | # there is no scc file. We need to switch to someplace that we know | 95 | # there is no scc file. We need to switch to someplace that we know |
75 | # we can create content (the workdir) | 96 | # we can create content (the workdir) |
76 | workdir_subdir=`echo ${pdir} | sed "s%^.*/${PN}%%" | sed 's%^/%%'` | 97 | workdir_subdir=`dirname ${wp}` |
77 | suggested_dir="${WORKDIR}/${workdir_subdir}" | 98 | suggested_dir="${WORKDIR}/${workdir_subdir}" |
78 | echo ${gen_feature_dirs} | grep -q ${suggested_dir} | 99 | echo ${gen_feature_dirs} | grep -q ${suggested_dir} |
79 | if [ $? -ne 0 ]; then | 100 | if [ $? -ne 0 ]; then |
@@ -82,7 +103,8 @@ do_patch() { | |||
82 | # we call the file *.scc_tmp, so the test above will continue to find | 103 | # we call the file *.scc_tmp, so the test above will continue to find |
83 | # that patches from a common subdirectory don't have a scc file and | 104 | # that patches from a common subdirectory don't have a scc file and |
84 | # they'll be placed in order, into this file. We'll rename it later. | 105 | # they'll be placed in order, into this file. We'll rename it later. |
85 | echo "patch ${pname}" >> ${suggested_dir}/gen_${workdir_subdir}_desc.scc_tmp | 106 | gen_feature_name="gen_`echo ${workdir_subdir} | sed 's%/%%g'`_desc.scc_tmp" |
107 | echo "patch ${pname}" >> ${WORKDIR}/${workdir_subdir}/${gen_feature_name} | ||
86 | else | 108 | else |
87 | suggested_dir="${pdir}" | 109 | suggested_dir="${pdir}" |
88 | fi | 110 | fi |