Re: [Scons-dev] Where does scons determine the dependencies for object files?

2018-04-14 Thread Andrew C. Morrow
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 
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 <
> andrew.c.mor...@gmail.com> 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 
>> 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 <
>>> andrew.c.mor...@gmail.com> 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
 Scons-dev@scons.org
 https://pairlist2.pair.net/mailman/listinfo/scons-dev


>>>
>>>
>>> --
>>> Gary
>>>
>>> ___
>>> Scons-dev mailing list
>>> Scons-dev@scons.org
>>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>>
>>>
>>
>> ___
>> Scons-dev mailing list
>> Scons-dev@scons.org
>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>
>>
>
>
> --
> Gary
>
> ___
> Scons-dev mailing list
> Scons-dev@scons.org
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>
___
Scons-dev mailing list
Scons-dev@scons.org
https://pairlist2.pair.net/mailman/listinfo/scons-dev


Re: [Scons-dev] Where does scons determine the dependencies for object files?

2018-03-25 Thread Gary Oberbrunner
>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  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 
> 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 <
>> andrew.c.mor...@gmail.com> 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
>>> Scons-dev@scons.org
>>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>>
>>>
>>
>>
>> --
>> Gary
>>
>> ___
>> Scons-dev mailing list
>> Scons-dev@scons.org
>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>
>>
>
> ___
> Scons-dev mailing list
> Scons-dev@scons.org
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>


-- 
Gary
___
Scons-dev mailing list
Scons-dev@scons.org
https://pairlist2.pair.net/mailman/listinfo/scons-dev


Re: [Scons-dev] Where does scons determine the dependencies for object files?

2018-03-25 Thread Andrew C. Morrow
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 
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 <
> andrew.c.mor...@gmail.com> 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
>> Scons-dev@scons.org
>> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>>
>>
>
>
> --
> Gary
>
> ___
> Scons-dev mailing list
> Scons-dev@scons.org
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>
___
Scons-dev mailing list
Scons-dev@scons.org
https://pairlist2.pair.net/mailman/listinfo/scons-dev


Re: [Scons-dev] Where does scons determine the dependencies for object files?

2018-03-25 Thread Gary Oberbrunner
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  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
> Scons-dev@scons.org
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>


-- 
Gary
___
Scons-dev mailing list
Scons-dev@scons.org
https://pairlist2.pair.net/mailman/listinfo/scons-dev