[Scons-dev] Patch for potential new debug option
William Blevins
wblevins001 at gmail.com
Sat Aug 8 09:31:29 EDT 2015
On Sat, Aug 8, 2015 at 9:14 AM, Alexandre Feblot <alexandre at feblot.fr>
wrote:
> Hi,
> would have this been available, I indeed would already have used scons
> --envdump=CXXFLAGS,CFLAGS,ENV.PATH A.o
>
>
When I thought about the feature, I also thought the case 2 was more
useful, thank you for your feedback. I can do both if we decided that
printing the whole environment object is ever useful, but lean code bases
make for maintainable code bases :)
> *--*
> Alexandre Feblot
>
> Le 8 août 2015 à 15:04, William Blevins <wblevins001 at gmail.com> a écrit :
>
> I guess I should be a bit more explicit about what I am trying to do.
>
> Example:
> A.cpp
> SConstruct -> "Program( 'exe', Glob( '*.cpp' ) )"
>
> My goal original goal was to be able to print environment objects from the
> command-line without having to modify code:
> 1. As written: [Example: "scons --debug=envdump A.o" would print the build
> environment object assigned to "A.o" ].
> 2. Afterthought on usability: [Example: "scons --envdump=LIBS A.o" would
> print the variable LIBS from the build environment assigned to "A.o"].
> 2.1 Since environment objects are rather large, maybe printing just a
> single value from the environment object would be more readable and/or
> desired on a regular basis.
>
> The supplied patch works for Case 1, but I am having a hard time getting
> only the targets on the command-line. Currently, the patch prints the
> environment for all targets on the command-line, plus all their
> dependencies (as long as they have build environments) and I am hoping to
> not print their dependencies.
>
> [Example: "scons --debug=envdump A.o" would print the environment for
> target "A.o" but not "A.cpp" or "/usr/bin/g++" because they don't have a
> build environment.]
>
> [Example: "scons --debug=envdump exe" would print the environment for
> target "exe" plus "A.o" because it's in the target list (as a dependency of
> "exe")]
>
> If I can figure out a clean way to get only the targets on the
> command-line, then that makes the most sense. The real question is do we
> want Case 1, Case 2,or both capabilities?
>
> V/R,
> William
>
>
>
>
>
> On Sat, Aug 8, 2015 at 3:42 AM, Roberto De Vecchi <
> roberto.devecchi at vi-grade.com> wrote:
>
>> William,
>>
>> from my experience using varname as a filter to limit the output will not
>> help much in big trees where my cloned env are assigned to vars with the
>> same name.
>>
>> I would find very useful having the env dump limited to the target node
>> specified on the command line: is this already supported by your proposal?
>>
>> Roberto
>> --- Messaggio Originale --- *Da: * William Blevins <wblevins001 at gmail.com
>> > *Data: * 08 Agosto 2015 07:22:12 *Oggetto: * [Scons-dev] Patch for
>> potential new debug option *A: * SCons developer list <
>> scons-dev at scons.org>
>>
>> Here is a patch for dumping build environments via the command-line.
>>>
>>> I couldn't ever figure out a good way to get only explicitly lister
>>> targets (non-default commandline targets). It will essentially print the
>>> node.get_env().Dump() for all targets with a build_env defined.
>>>
>>> I could potentially change it from "--debug=envdump" to something like
>>> "--envdump=<VARIABLE>" so that it could print a particular variable rather
>>> than the whole env.
>>>
>>> Does this interest anyone or waste of chars?
>>>
>>> diff -r 682b8a7a51fb src/engine/SCons/Script/Main.py
>>>> --- a/src/engine/SCons/Script/Main.py Mon Jun 29 15:37:44 2015 -0400
>>>> +++ b/src/engine/SCons/Script/Main.py Thu Aug 06 23:44:50 2015 -0400
>>>> @@ -391,6 +391,21 @@
>>>> def prepare(self):
>>>> pass
>>>>
>>>> +class EnvDumpTask(SCons.Taskmaster.AlwaysTask):
>>>> + """SCons task for --debug=envdump. Prints env dump for
>>>> BUILD_TARGETS."""
>>>> + def prepare(self):
>>>> + pass
>>>> +
>>>> + def execute(self):
>>>> + for target in self.targets:
>>>> + if target.get_build_env():
>>>> + print 'Environment dump for target: ' + str(target)
>>>> + print target.get_env().Dump()
>>>> +
>>>> + def executed(self):
>>>> + pass
>>>> +
>>>> +
>>>> class QuestionTask(SCons.Taskmaster.AlwaysTask):
>>>> """An SCons task for the -q (question) option."""
>>>> def prepare(self):
>>>> @@ -657,6 +672,7 @@
>>>> if "memory" in debug_values:
>>>> memory_stats.enable(sys.stdout)
>>>> print_objects = ("objects" in debug_values)
>>>> + options.debug_envdump = ( "envdump" in debug_values )
>>>> if print_objects:
>>>> SCons.Debug.track_instances = True
>>>> if "presub" in debug_values:
>>>> @@ -1210,8 +1226,13 @@
>>>> failure_message = "done building targets (errors occurred
>>>> during build)."
>>>> else:
>>>> failure_message = "building terminated because of errors."
>>>> +
>>>> + if options.debug_envdump:
>>>> + task_class = EnvDumpTask
>>>> +
>>>> if options.question:
>>>> task_class = QuestionTask
>>>> +
>>>> try:
>>>> if options.clean:
>>>> task_class = CleanTask
>>>> diff -r 682b8a7a51fb src/engine/SCons/Script/SConsOptions.py
>>>> --- a/src/engine/SCons/Script/SConsOptions.py Mon Jun 29 15:37:44
>>>> 2015 -0400
>>>> +++ b/src/engine/SCons/Script/SConsOptions.py Thu Aug 06 23:44:50
>>>> 2015 -0400
>>>> @@ -673,7 +673,7 @@
>>>> "tree" : '; please use --tree=all instead',
>>>> }
>>>>
>>>> - debug_options = ["count", "duplicate", "explain", "findlibs",
>>>> + debug_options = ["count", "duplicate", "explain", "envdump",
>>>> "findlibs",
>>>> "includes", "memoizer", "memory", "objects",
>>>> "pdb", "prepare", "presub", "stacktrace",
>>>> "time"]
>>>>
>>>>
>>>
>>> V/R,
>>> William
>>>
>>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>
>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist2.pair.net/pipermail/scons-dev/attachments/20150808/0abe8971/attachment-0001.html>
More information about the Scons-dev
mailing list