[Scons-dev] Patch for potential new debug option

William Blevins wblevins001 at gmail.com
Sat Aug 8 09:04:45 EDT 2015


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
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist2.pair.net/pipermail/scons-dev/attachments/20150808/f1f6e03d/attachment-0001.html>


More information about the Scons-dev mailing list