[PATCH 1/3] waf_generator: Copy headers if necessary.
Chris Johns
chrisj at rtems.org
Thu Aug 10 05:55:02 UTC 2017
On 10/08/2017 15:34, Christian Mauderer wrote:
> Am 10.08.2017 um 01:08 schrieb Chris Johns:
>> On 10/08/2017 02:29, Sichen Zhao wrote:
>>> From: Christian Mauderer <christian.mauderer at embedded-brains.de>
> There was no real reason. I just chose an arbitrary name.
> 'build-include' is fine for me too. I would avoid just 'include' because
> it's a very generic name. If it is added somewhere else, that might lead
> to a conflict.
Ah yes, 'build-include' is fine.
>>> + start_dir = bld.path.find_dir(headers[0])
>>> + for header in start_dir.ant_glob("**/" + headers[1]):
>>
>> Do we always want to copy all the files?
>>
>
> What do you mean by "all the files"? As far as I understood, only the
> files that are changed should be copied by waf.
>
> Or do you mean the ant_glob? In that case: I modeled that after the
> install target of the headers.
Should this be an ant_glob or a list? I am wondering about needing to copy a
selected number of files from a group a glob would catch. If this is not
happening that is fine, it can be added if the situation arises.
> I already suggested in the first
> discussion regarding the patch that we move the "**" to builder.py
> instead. I planed to create a extra patch for that.
I had forgotten and thanks.
>
>>> + relsourcepath = os.path.relpath(str(header), start=str(start_dir))
>>
>> Is 'str(header)' really 'header.abspath()' ? See
>> https://waf.io/apidocs/Node.html#waflib.Node.Node.__str__.
>>
>> I prefer the explicit use of .abspath() than the conversion operator.
>
> You are right. I didn't take a thorough look at the documentation. I'll
> rework that part. Maybe I can also use something like "path_from()" or
> some other waf Node function.
>
Nice.
>>
>>> + targetheader = os.path.join(target, relsourcepath)
>>> + bld(features = 'subst',
>>> + target = targetheader,
>>> + source = header,
>>> + is_copy = True)
>>
>> Does a clean remove these files?
>
> Just checked: Yes it does.
>
Excellent.
>>
>>> +
>>> # KVM Symbols
>>> bld(target = "rtemsbsd/rtems/rtems-kernel-kvm-symbols.c",
>>> source = "rtemsbsd/rtems/generate_kvm_symbols",
>>> diff --git a/waf_generator.py b/waf_generator.py
>>> index 35fe35f..fb52250 100755
>>> --- a/waf_generator.py
>>> +++ b/waf_generator.py
>>> @@ -445,6 +445,29 @@ class ModuleManager(builder.ModuleManager):
>>> self.add('')
>>>
>>> #
>>> + # Add a copy rule for all headers where the install path and the source
>>> + # path are not the same.
>>> + #
>>> + self.add(' # copy headers if necessary')
>>> + headerPaths = builder.headerPaths()
>>
>> Can we remove this line and then ....
>>
>>> + self.add(' header_build_copy_paths = [')
>>> + for hp in headerPaths:
>>
>> .... use:
>>
>> for hp in builder.headerPaths():
>> ?
>
> Should work. I'll try it. Maybe it should be changed on the install part
> too?
Sure.
>>> + if hp[2] != '' and not hp[0].endswith(hp[2]):
>>
>> I am ok with another boolean field being add to tuples rather than needing to
>> encode this some how if that is useful.
>
> I would disagree here. It would be a redundant information in that tuple
> and therefore allow a invalid line if that boolean is not correctly set.
> Copying file is only necessary in exactly that case: If the dest paths
> name is not the same as the local path.
OK.
>> If a new field is not added can you please update builder.py with this rule so
>> we know what to do when adding headers to builder.headerPaths()?
>
> You mean some comment that describes that behavior? I can add that also
> I don't really think that it is necessary. It's just a workaround so
> that we can build the binaries without having to install the headers
> before the build.
It took me a while to see what was happening. The table in builder.py is a long
way from here so even a note would help.
>> Do any of these files copied into the build tree need to be installed so users
>> can access then? I cannot see an install component.
>
> The install component is unchanged. It should still work exactly like
> before. So all headers should be installed correctly just like before.
Great and thanks for this change.
Chris
More information about the devel
mailing list