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 < [email protected]> 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 <[email protected]> > *Data: * 08 Agosto 2015 07:22:12 *Oggetto: * [Scons-dev] Patch for > potential new debug option *A: * SCons developer list <[email protected] > > > > 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 [email protected] https://pairlist2.pair.net/mailman/listinfo/scons-dev
