When the kernel is compiled with an "O=" argument, the object files are
not necessarily in the source tree, and more probably in another tree.
In this situation, the current used check doesn't work, and
COMPILED_SOURCE tags is broken with O= builds.
This patch fixes it by looking for object files both in source tree and
potential destination tree.
It was verified that in the case of O= usage, the current directory is
the build tree, ie. the tree referenced by O=xxx, and j is the source
tree path concatenated with relative path of the object to the source
tree root, hence the simple expression to compute "k" as the built
object.
Signed-off-by: Robert Jarzmik <[email protected]>
---
Since v1: amended k expression, Marek's comments
---
scripts/tags.sh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scripts/tags.sh b/scripts/tags.sh
index a2ff3388e5ea..35cb64d5211c 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -106,7 +106,8 @@ all_compiled_sources()
case "$i" in
*.[cS])
j=${i/\.[cS]/\.o}
- if [ -e $j ]; then
+ k="${j#$tree}"
+ if [ -e $j -o -e "$k" ]; then
echo $i
fi
;;
--
2.1.4
Hi Robert,
2016-12-16 1:35 GMT+09:00 Robert Jarzmik <[email protected]>:
> When the kernel is compiled with an "O=" argument, the object files are
> not necessarily in the source tree, and more probably in another tree.
Always in objtree.
> In this situation, the current used check doesn't work, and
> COMPILED_SOURCE tags is broken with O= builds.
>
> This patch fixes it by looking for object files both in source tree and
> potential destination tree.
>
> It was verified that in the case of O= usage, the current directory is
> the build tree, ie. the tree referenced by O=xxx, and j is the source
> tree path concatenated with relative path of the object to the source
> tree root, hence the simple expression to compute "k" as the built
> object.
>
> Signed-off-by: Robert Jarzmik <[email protected]>
> ---
> Since v1: amended k expression, Marek's comments
> ---
> scripts/tags.sh | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/tags.sh b/scripts/tags.sh
> index a2ff3388e5ea..35cb64d5211c 100755
> --- a/scripts/tags.sh
> +++ b/scripts/tags.sh
> @@ -106,7 +106,8 @@ all_compiled_sources()
> case "$i" in
> *.[cS])
> j=${i/\.[cS]/\.o}
> - if [ -e $j ]; then
> + k="${j#$tree}"
> + if [ -e $j -o -e "$k" ]; then
Do we need to check both srctree and objtree?
I think checking objtree (after $tree is ripped off) is enough.
--
Best Regards
Masahiro Yamada
Masahiro Yamada <[email protected]> writes:
> Hi Robert,
>> diff --git a/scripts/tags.sh b/scripts/tags.sh
>> index a2ff3388e5ea..35cb64d5211c 100755
>> --- a/scripts/tags.sh
>> +++ b/scripts/tags.sh
>> @@ -106,7 +106,8 @@ all_compiled_sources()
>> case "$i" in
>> *.[cS])
>> j=${i/\.[cS]/\.o}
>> - if [ -e $j ]; then
>> + k="${j#$tree}"
>> + if [ -e $j -o -e "$k" ]; then
>
>
> Do we need to check both srctree and objtree?
> I think checking objtree (after $tree is ripped off) is enough.
If I remember correctly, as this goes back a couple of monthes when I made the
tests of this patch, the srctree is checked for the case when the kernel is
compiled without O=, and objtree for the case with O=.
Cheers.
--
Robert
Hi Robert,
2017-04-26 5:07 GMT+09:00 Robert Jarzmik <[email protected]>:
> Masahiro Yamada <[email protected]> writes:
>
>> Hi Robert,
>>> diff --git a/scripts/tags.sh b/scripts/tags.sh
>>> index a2ff3388e5ea..35cb64d5211c 100755
>>> --- a/scripts/tags.sh
>>> +++ b/scripts/tags.sh
>>> @@ -106,7 +106,8 @@ all_compiled_sources()
>>> case "$i" in
>>> *.[cS])
>>> j=${i/\.[cS]/\.o}
>>> - if [ -e $j ]; then
>>> + k="${j#$tree}"
>>> + if [ -e $j -o -e "$k" ]; then
>>
>>
>> Do we need to check both srctree and objtree?
>> I think checking objtree (after $tree is ripped off) is enough.
>
> If I remember correctly, as this goes back a couple of monthes when I made the
> tests of this patch, the srctree is checked for the case when the kernel is
> compiled without O=, and objtree for the case with O=.
I thought of this too, but if O= is given, objects in srctree
should not be checked.
For example, the kernel may be compiled for ARCH=arm with O= first,
then for ARCH=x86 without O= second.
If we include objects from both trees, the generated tag file
will be a mixture of arm and x86.
--
Best Regards
Masahiro Yamada
Hi Robert,
2017-05-07 0:57 GMT+09:00 Masahiro Yamada <[email protected]>:
> Hi Robert,
>
> 2017-05-04 15:29 GMT+09:00 Robert Jarzmik <[email protected]>:
>> Masahiro Yamada <[email protected]> writes:
>>
>>> Hi Robert,
>>>
>>> 2017-04-26 5:07 GMT+09:00 Robert Jarzmik <[email protected]>:
>>>> Masahiro Yamada <[email protected]> writes:
>>>>
>>>>> Hi Robert,
>>>>>> diff --git a/scripts/tags.sh b/scripts/tags.sh
>>>>>> index a2ff3388e5ea..35cb64d5211c 100755
>>>>>> --- a/scripts/tags.sh
>>>>>> +++ b/scripts/tags.sh
>>>>>> @@ -106,7 +106,8 @@ all_compiled_sources()
>>>>>> case "$i" in
>>>>>> *.[cS])
>>>>>> j=${i/\.[cS]/\.o}
>>>>>> - if [ -e $j ]; then
>>>>>> + k="${j#$tree}"
>>>>>> + if [ -e $j -o -e "$k" ]; then
>>>>>
>>>>>
>>>>> Do we need to check both srctree and objtree?
>>>>> I think checking objtree (after $tree is ripped off) is enough.
>>>>
>>>> If I remember correctly, as this goes back a couple of monthes when I made the
>>>> tests of this patch, the srctree is checked for the case when the kernel is
>>>> compiled without O=, and objtree for the case with O=.
>>>
>>>
>>> I thought of this too, but if O= is given, objects in srctree
>>> should not be checked.
>>>
>>> For example, the kernel may be compiled for ARCH=arm with O= first,
>>> then for ARCH=x86 without O= second.
>>>
>>> If we include objects from both trees, the generated tag file
>>> will be a mixture of arm and x86.
>> That's true, but is this case worth an additional test for this case, ie. is it
>> a case anybody uses ? Given that that this tags generation never worked for out
>> of tree builds, I was thinking it wasn't worth a :
>> [[ (-z $O -a -e $j) || (-n $O -a -e $k) ]];
>
>
> I am not saying we should do like that.
>
>
> My suggestion is even simpler.
>
> Can we do like this?
>
>
> diff --git a/scripts/tags.sh b/scripts/tags.sh
> index d661f2f..d23dcbf 100755
> --- a/scripts/tags.sh
> +++ b/scripts/tags.sh
> @@ -106,6 +106,7 @@ all_compiled_sources()
> case "$i" in
> *.[cS])
> j=${i/\.[cS]/\.o}
> + j="${j#$tree}"
> if [ -e $j ]; then
> echo $i
> fi
>
>
I tested the code above, and it worked fine.
Could you send v3? Then, I will apply it soon.
Or, if you are not reluctant to do so,
may I modify your patch like above?
--
Best Regards
Masahiro Yamada
2017-06-05 15:05 GMT+09:00 Masahiro Yamada <[email protected]>:
> I tested the code above, and it worked fine.
>
> Could you send v3? Then, I will apply it soon.
>
> Or, if you are not reluctant to do so,
> may I modify your patch like above?
I meant "if you are reluctant to do so..."
--
Best Regards
Masahiro Yamada
Masahiro Yamada <[email protected]> writes:
> Hi Robert,
Hi Masahiro,
Sorry, I was out lately.
I sent a v3, thanks for keeping up pushing for this one.
Cheers.
--
Robert