[Scons-dev] Patch for potential new debug option
Roberto De Vecchi
roberto.devecchi at vi-grade.com
Sat Aug 8 13:42:39 EDT 2015
William
Now I got your idea! Printing a subset of the env is a nice to have option but I find more value in the env dump capability than in the reduced output ( I have several cystom builders that dumps the env they are called from with an option: having a standard capability for this would be very welcome)
Making the story short I would like to see the new debug option included, but I don't strictly need the variable filtering.
About the node logic for selecting the nodes for which printing the environment, looks like we aee on the same page
Cheers
Roberto
--- Messaggio Originale ---
Da: William Blevins <wblevins001 at gmail.com>
Data: 08 Agosto 2015 15:31:37
Oggetto: Re: [Scons-dev] Patch for potential new debug option
A: SCons developer list <scons-dev at scons.org>
On Sat, Aug 8, 2015 at 9:14 AM, Alexandre Feblot <alexandre at feblot.fr<mailto: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<mailto: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<mailto:Scons-dev at scons.org>
https://pairlist2.pair.net/mailman/listinfo/scons-dev
_______________________________________________
Scons-dev mailing list
Scons-dev at scons.org<mailto: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/c4ba479a/attachment.html>
More information about the Scons-dev
mailing list