[Scons-dev] Patch for potential new debug option

Alexandre Feblot alexandre at feblot.fr
Sat Aug 8 09:14:21 EDT 2015


Hi,
would have this been available, I indeed would already have used scons --envdump=CXXFLAGS,CFLAGS,ENV.PATH A.o

--
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 <mailto: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 <mailto: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 <mailto: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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist2.pair.net/pipermail/scons-dev/attachments/20150808/8823bead/attachment.html>


More information about the Scons-dev mailing list