Re: Where does scons determine the dependencies for object files?

"Andrew C. Morrow" <[email protected]>
Newsgroups gmane.comp.programming.tools.scons.devel
Message-ID <CA+Acj4ctcZa+VyB+KcmOCCE05od7DGHzW=yVU2Gu0vcrc7myag@mail.gmail.com>
Thanks Gary -

After some exploration down this path, Bill Deegan pointed out that using a
generator would achieve the hoped for behavior without so much difficulty,
if we paid attention to the for_signature flag. I've implemented that and
it works well. You can see an example of the code here:

https://github.com/acmorrow/mongo/commit/d6135693efc098df145e52a3ef2b259b16f33505

Thanks,
Andrew

On Sun, Mar 25, 2018 at 2:28 PM, Gary Oberbrunner <[email protected]>
wrote:

> From a quick perusal of the source, I think the function you're looking
> for is SCons/Node/__init__.py, Node.add_source(). That's called from
> Builder._execute().
>
> On Sun, Mar 25, 2018 at 2:05 PM, Andrew C. Morrow <
> [email protected]> wrote:
>
>>
>> Could you point me to where in the SCons sources that connection between
>> foo.o and foo.c is made, exactly? I'd like to understand how it happens.
>>
>> Regarding pseudo-builders: they don't compose, unfortunately. Once
>> something becomes a pseudo-builder it no longer exposes the attributes that
>> normal builders do. So I'd prefer to achieve this by injecting
>> scanners/emitters into the existing builders, if possible.
>>
>> On Sun, Mar 25, 2018 at 1:52 PM, Gary Oberbrunner <[email protected]>
>> wrote:
>>
>>> The builder, in this case Object(), sets up the dependency between foo.o
>>> and foo.c. The simplest way to do what you want is to create a
>>> pseudo-builder that calls Object() and also calls Depends().
>>>
>>> -- Gary
>>>
>>> On Sun, Mar 25, 2018 at 1:07 PM, Andrew C. Morrow <
>>> [email protected]> wrote:
>>>
>>>>
>>>> I'm fairly clear on where SCons learns of the dependencies for source
>>>> files: that is in the CScanner attached to the SourceFileScanner in T
>>>> ool/__init__.py.
>>>>
>>>> But where does SCons determine the dependencies of object files, such
>>>> that those dependencies are checked to see if the object file needs to be
>>>> rebuilt?
>>>>
>>>> More concretely, If I have libfoo.so made from foo.o made from foo.c
>>>> which depends on foo.h, the CScanner in SourceScanner takes care of
>>>> scanning for dependences in foo.c and finds foo.h. But what scans for
>>>> dependences of foo.o and identifies foo.c?
>>>>
>>>> I ask because I would like to sometimes inject a new source-like
>>>> dependency into compilations, such that foo.o will depend on not just
>>>> foo.c but also some other file magic, such that if magic is changed
>>>> then foo.o will need to be rebuilt.
>>>>
>>>> With such a mechanism, it would be possible to teach SCons that if an
>>>> AddressSanitizer blacklist file known to be on the compile line like
>>>> -fsanitize-blacklist=path/to/magic is referring to a blacklist file
>>>> that is more up to date than the object file, then the object file should
>>>> be rebuilt.
>>>>
>>>> Thanks,
>>>> Andrew
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Scons-dev mailing list
>>>> [email protected]
>>>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>>>
>>>>
>>>
>>>
>>> --
>>> Gary
>>>
>>> _______________________________________________
>>> Scons-dev mailing list
>>> [email protected]
>>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>>
>>>
>>
>> _______________________________________________
>> Scons-dev mailing list
>> [email protected]
>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>
>>
>
>
> --
> Gary
>
> _______________________________________________
> Scons-dev mailing list
> [email protected]
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>

_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.